Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Better linux build support #617

Open
wants to merge 3 commits into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -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: |
Expand Down Expand Up @@ -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: |
Expand Down
2 changes: 1 addition & 1 deletion appimage/AppImageBuilder.yml
Original file line number Diff line number Diff line change
Expand Up @@ -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:
Expand Down
29 changes: 24 additions & 5 deletions build.bat
Original file line number Diff line number Diff line change
@@ -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.
36 changes: 36 additions & 0 deletions build.sh
Original file line number Diff line number Diff line change
@@ -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..."
biast12 marked this conversation as resolved.
Show resolved Hide resolved
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..."
9 changes: 6 additions & 3 deletions build.spec
Original file line number Diff line number Diff line change
Expand Up @@ -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:
Expand Down Expand Up @@ -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():
Expand All @@ -51,8 +52,10 @@ hiddenimports: list[str] = [

if sys.platform == "linux":
# Needed files for better system tray support on Linux via pystray (AppIndicator backend).
biast12 marked this conversation as resolved.
Show resolved Hide resolved
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",
Expand Down
33 changes: 26 additions & 7 deletions setup_env.bat
Original file line number Diff line number Diff line change
@@ -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
51 changes: 51 additions & 0 deletions setup_env.sh
Original file line number Diff line number Diff line change
@@ -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..."
Loading