build_qt_exe.sh 1.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142
  1. #!/usr/bin/env bash
  2. set -euo pipefail
  3. ROOT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)"
  4. cd "$ROOT_DIR"
  5. PYTHON_BIN="${PYTHON_BIN:-./.venv/bin/python}"
  6. if [[ ! -x "$PYTHON_BIN" ]]; then
  7. echo "Python executable not found: $PYTHON_BIN" >&2
  8. exit 1
  9. fi
  10. if [[ -n "${PYINSTALLER_BIN:-}" ]]; then
  11. if [[ ! -x "$PYINSTALLER_BIN" ]]; then
  12. echo "PyInstaller executable not found: $PYINSTALLER_BIN" >&2
  13. exit 1
  14. fi
  15. PYINSTALLER_CMD=("$PYINSTALLER_BIN")
  16. else
  17. if ! "$PYTHON_BIN" -c "import PyInstaller" >/dev/null 2>&1; then
  18. echo "PyInstaller is not installed in: $PYTHON_BIN" >&2
  19. echo "Install it with: uv pip install --python ./.venv/bin/python pyinstaller" >&2
  20. exit 1
  21. fi
  22. PYINSTALLER_CMD=("$PYTHON_BIN" -m PyInstaller)
  23. fi
  24. VERSION="$("$PYTHON_BIN" -c "from pathlib import Path; import tomllib; print(tomllib.loads(Path('pyproject.toml').read_text(encoding='utf-8'))['project']['version'])")"
  25. OS_NAME="$(uname -s | tr '[:upper:]' '[:lower:]')"
  26. ARCH_NAME="$(uname -m)"
  27. VERSIONED_OUTPUT="dist/mlog-tool-qt-v${VERSION}-${OS_NAME}-${ARCH_NAME}"
  28. echo "Building Qt executable with ${PYINSTALLER_CMD[*]}"
  29. QT_QPA_PLATFORM="${QT_QPA_PLATFORM:-offscreen}" "${PYINSTALLER_CMD[@]}" --noconfirm --clean mlog_tool_qt.spec
  30. cp dist/mlog-tool-qt "$VERSIONED_OUTPUT"
  31. echo
  32. echo "Build finished:"
  33. echo " dist/mlog-tool-qt"
  34. echo " $VERSIONED_OUTPUT"