diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 075600af..c4edd48f 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -130,7 +130,7 @@ jobs: - name: Install system dependencies run: | sudo apt update - sudo apt install gir1.2-appindicator3-0.1 libgirepository1.0-dev python3-tk + sudo apt install libgirepository1.0-dev gir1.2-ayatanaappindicator3-0.1 libayatana-appindicator3-1 python3-tk - name: Install project dependencies run: | @@ -198,7 +198,7 @@ jobs: - name: Install system dependencies run: | sudo apt update - sudo apt install libgirepository1.0-dev python3-testresources + sudo apt install libgirepository1.0-dev gir1.2-ayatanaappindicator3-0.1 libayatana-appindicator3-1 python3-testresources - name: Download AppImage Builder run: | diff --git a/appimage/AppImageBuilder.yml b/appimage/AppImageBuilder.yml index 21bf1d63..8643207f 100644 --- a/appimage/AppImageBuilder.yml +++ b/appimage/AppImageBuilder.yml @@ -48,7 +48,7 @@ AppDir: key_url: http://keyserver.ubuntu.com/pks/lookup?op=get&search=0x871920D1991BC93C include: - - gir1.2-appindicator3-0.1 + - gir1.2-ayatanaappindicator3-0.1 - python3-tk exclude: diff --git a/build.bat b/build.bat index 0fd6a093..fa888ddc 100644 --- a/build.bat +++ b/build.bat @@ -1,18 +1,37 @@ @echo off -cls -set dirpath=%~dp0 -if "%dirpath:~-1%" == "\" set dirpath=%dirpath:~0,-1% +REM Get the directory path of the script +set "dirpath=%~dp0" +if "%dirpath:~-1%" == "\" set "dirpath=%dirpath:~0,-1%" + +REM Check if the virtual environment exists if not exist "%dirpath%\env" ( echo: echo No virtual environment found! Run setup_env.bat to set it up first. echo: pause - exit + exit /b ) +REM Check if pyinstaller and pywin32 is installed in the virtual environment if not exist "%dirpath%\env\scripts\pyinstaller.exe" ( "%dirpath%\env\scripts\pip" install pyinstaller + if errorlevel 1 ( + echo Failed to install pyinstaller. + exit /b 1 + ) "%dirpath%\env\scripts\python" "%dirpath%\env\scripts\pywin32_postinstall.py" -install -silent + if errorlevel 1 ( + echo Failed to run pywin32_postinstall.py. + exit /b 1 + ) +) + +REM Run pyinstaller with the specified build spec file +"%dirpath%\env\scripts\pyinstaller" "%dirpath%\build.spec" +if errorlevel 1 ( + echo PyInstaller build failed. + exit /b 1 ) -"%dirpath%/env/scripts/pyinstaller" "%dirpath%\build.spec" + +echo Build completed successfully. \ No newline at end of file diff --git a/build.sh b/build.sh new file mode 100755 index 00000000..0da230b1 --- /dev/null +++ b/build.sh @@ -0,0 +1,36 @@ +#!/usr/bin/env bash + +dirpath=$(dirname "$(readlink -f "$0")") + +# Check if the virtual environment exists +if [ ! -d "$dirpath/env" ]; then + echo + echo "No virtual environment found! Run setup_env.sh to set it up first." + echo + read -p "Press any key to continue..." + exit 1 +fi + +# Check if pyinstaller is installed in the virtual environment +if [ ! -f "$dirpath/env/bin/pyinstaller" ]; then + echo + echo "Installing pyinstaller..." + "$dirpath/env/bin/pip" install pyinstaller + if [ $? -ne 0 ]; then + echo "Failed to install pyinstaller." + exit 1 + fi +fi + +# Run pyinstaller with the specified build spec file +echo +echo "Running pyinstaller..." +"$dirpath/env/bin/pyinstaller" "$dirpath/build.spec" +if [ $? -ne 0 ]; then + echo "PyInstaller build failed." + exit 1 +fi + +echo +echo "Build completed successfully." +read -p "Press any key to continue..." \ No newline at end of file diff --git a/build.spec b/build.spec index 3b54c24f..81ab86a2 100644 --- a/build.spec +++ b/build.spec @@ -4,6 +4,7 @@ from __future__ import annotations import sys from pathlib import Path from typing import Any, TYPE_CHECKING +import platform SELF_PATH = str(Path(".").resolve()) if SELF_PATH not in sys.path: @@ -31,7 +32,7 @@ for lang_filepath in WORKING_DIR.joinpath("lang").glob("*.json"): if lang_filepath.stem != DEFAULT_LANG: to_add.append((lang_filepath, "lang", True)) -# ensure the required to-be-added data exists +# Ensure the required to-be-added data exists datas: list[tuple[Path, str]] = [] for source_path, dest_path, required in to_add: if source_path.exists(): @@ -51,8 +52,10 @@ hiddenimports: list[str] = [ if sys.platform == "linux": # Needed files for better system tray support on Linux via pystray (AppIndicator backend). - datas.append((Path("/usr/lib/girepository-1.0/AppIndicator3-0.1.typelib"), "gi_typelibs")) - binaries.append((Path("/lib/x86_64-linux-gnu/libappindicator3.so.1"), ".")) + arch = platform.machine() + datas.append((Path(f"/usr/lib/{arch}-linux-gnu/girepository-1.0/AyatanaAppIndicator3-0.1.typelib"), "gi_typelibs")) + binaries.append((Path(f"/usr/lib/{arch}-linux-gnu/libayatana-appindicator3.so.1"), ".")) + hiddenimports.extend([ "gi.repository.Gtk", "gi.repository.GObject", diff --git a/setup_env.bat b/setup_env.bat index 4ec1bf78..ee1abced 100644 --- a/setup_env.bat +++ b/setup_env.bat @@ -1,35 +1,54 @@ @echo off -cls -set dirpath=%~dp0 -if "%dirpath:~-1%" == "\" set dirpath=%dirpath:~0,-1% -git --version > nul +REM Get the directory path of the script +set "dirpath=%~dp0" +if "%dirpath:~-1%" == "\" set "dirpath=%dirpath:~0,-1%" + +REM Check if git is installed +git --version > nul 2>&1 if %errorlevel% NEQ 0 ( echo No git executable found in PATH! echo: pause - exit + exit /b 1 ) +REM Create the virtual environment if it doesn't exist if not exist "%dirpath%\env" ( echo: echo Creating the env folder... python -m venv "%dirpath%\env" if %errorlevel% NEQ 0 ( echo: - echo No python executable found in PATH! + echo No python executable found in PATH or failed to create virtual environment! echo: pause + exit /b 1 ) ) +REM Activate the virtual environment and install requirements echo: echo Installing requirements.txt... "%dirpath%\env\scripts\python" -m pip install -U pip +if %errorlevel% NEQ 0 ( + echo Failed to upgrade pip. + exit /b 1 +) + "%dirpath%\env\scripts\pip" install wheel +if %errorlevel% NEQ 0 ( + echo Failed to install wheel. + exit /b 1 +) + "%dirpath%\env\scripts\pip" install -r "%dirpath%\requirements.txt" +if %errorlevel% NEQ 0 ( + echo Failed to install requirements. + exit /b 1 +) echo: echo All done! echo: -pause +pause \ No newline at end of file diff --git a/setup_env.sh b/setup_env.sh new file mode 100755 index 00000000..5b0f7f3b --- /dev/null +++ b/setup_env.sh @@ -0,0 +1,51 @@ +#!/usr/bin/env bash + +dirpath=$(dirname "$(readlink -f "$0")") + +# Check if git is installed +if ! command -v git &> /dev/null; then + echo "No git executable found in PATH!" + echo + read -p "Press any key to continue..." + exit 1 +fi + +# Check if the virtual environment exists +if [ ! -d "$dirpath/env" ]; then + echo + echo "Creating the env folder..." + python3 -m venv "$dirpath/env" + if [ $? -ne 0 ]; then + echo + echo "No python executable found in PATH or failed to create virtual environment!" + echo + read -p "Press any key to continue..." + exit 1 + fi +fi + +# Activate the virtual environment and install requirements +echo +echo "Installing requirements.txt..." +"$dirpath/env/bin/python" -m pip install -U pip +if [ $? -ne 0 ]; then + echo "Failed to upgrade pip." + exit 1 +fi + +"$dirpath/env/bin/pip" install wheel +if [ $? -ne 0 ]; then + echo "Failed to install wheel." + exit 1 +fi + +"$dirpath/env/bin/pip" install -r "$dirpath/requirements.txt" +if [ $? -ne 0 ]; then + echo "Failed to install requirements." + exit 1 +fi + +echo +echo "All done!" +echo +read -p "Press any key to continue..." \ No newline at end of file