From 7020dc47fa52691bbb0f5f9c41414c18175487e2 Mon Sep 17 00:00:00 2001 From: Nad Alaba <37968805+nadalaba@users.noreply.github.com> Date: Thu, 18 Jun 2026 00:02:30 +0300 Subject: [PATCH 1/4] fix pyhook install dir on Debian's posix_local --- pyhook/CMakeLists.txt | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/pyhook/CMakeLists.txt b/pyhook/CMakeLists.txt index 7e09f838b9..682e56e5ed 100644 --- a/pyhook/CMakeLists.txt +++ b/pyhook/CMakeLists.txt @@ -38,8 +38,9 @@ else() if(APPLE) set(_PYHOOK_SYSCONFIG_PREFIX " 'posix_prefix',") endif() + # strip leading 'local/' from 'platlib' path to avoid double 'local/' in 'posix_local' schemes when installing to /usr/local execute_process( - COMMAND "${Python3_EXECUTABLE}" -c "import sysconfig as sc; print(sc.get_path('platlib',${_PYHOOK_SYSCONFIG_PREFIX} vars={'platbase': '.'}))" + COMMAND "${Python3_EXECUTABLE}" -c "import sysconfig as sc; p = sc.get_path('platlib',${_PYHOOK_SYSCONFIG_PREFIX} vars={'platbase': '.'}); print(p[6:] if p.startswith('local/') and sc.get_default_scheme() == 'posix_local' and not \"$ENV{DESTDIR}${CMAKE_INSTALL_PREFIX}\".endswith(sc.get_config_var('platbase')) else p)" RESULT_VARIABLE _pyhook_install_dir_result OUTPUT_VARIABLE PYHOOK_INSTALL_DIR OUTPUT_STRIP_TRAILING_WHITESPACE) From ed17136b9ca226483cf520573195c9389a84c545 Mon Sep 17 00:00:00 2001 From: Nad Alaba <37968805+nadalaba@users.noreply.github.com> Date: Thu, 18 Jun 2026 00:45:50 +0300 Subject: [PATCH 2/4] fix CI --- .github/workflows/scripts/setup_linux_deps.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/scripts/setup_linux_deps.sh b/.github/workflows/scripts/setup_linux_deps.sh index c8b6be1e24..5348318955 100755 --- a/.github/workflows/scripts/setup_linux_deps.sh +++ b/.github/workflows/scripts/setup_linux_deps.sh @@ -20,7 +20,7 @@ echo "DEPSPREFIX=$DEPSPREFIX" >> $GITHUB_ENV echo "PATH=$PATH:$DEPSPREFIX/bin:$PREFIX/bin:~/.local/bin" >> $GITHUB_ENV echo "LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$DEPSPREFIX/lib:$PREFIX/lib" >> $GITHUB_ENV echo "PKG_CONFIG_PATH=$PKG_CONFIG_PATH:$DEPSPREFIX/lib/pkgconfig" >> $GITHUB_ENV -echo "PYTHONPATH=$PYTHONPATH:$PREFIX/$($PYTHON -c "import sysconfig as sc; print(sc.get_path('platlib', vars={'platbase': '.'}))")" >> $GITHUB_ENV +echo "PYTHONPATH=$PYTHONPATH:$PREFIX/$($PYTHON -c "import sysconfig as sc; p = sc.get_path('platlib', vars={'platbase': '.'}); print(p[6:] if p.startswith('local/') and sc.get_default_scheme() == 'posix_local' and not $PREFIX.endswith(sc.get_config_var('platbase')) else p)")" >> $GITHUB_ENV if [ ! -d deps/install ]; then echo "Custom dependencies not present - will build them" From 459943a46b4b62b8c79690631935c730259f5617 Mon Sep 17 00:00:00 2001 From: Nad Alaba <37968805+nadalaba@users.noreply.github.com> Date: Thu, 18 Jun 2026 01:22:32 +0300 Subject: [PATCH 3/4] quote bash string --- .github/workflows/scripts/setup_linux_deps.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/scripts/setup_linux_deps.sh b/.github/workflows/scripts/setup_linux_deps.sh index 5348318955..f495d36072 100755 --- a/.github/workflows/scripts/setup_linux_deps.sh +++ b/.github/workflows/scripts/setup_linux_deps.sh @@ -20,7 +20,7 @@ echo "DEPSPREFIX=$DEPSPREFIX" >> $GITHUB_ENV echo "PATH=$PATH:$DEPSPREFIX/bin:$PREFIX/bin:~/.local/bin" >> $GITHUB_ENV echo "LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$DEPSPREFIX/lib:$PREFIX/lib" >> $GITHUB_ENV echo "PKG_CONFIG_PATH=$PKG_CONFIG_PATH:$DEPSPREFIX/lib/pkgconfig" >> $GITHUB_ENV -echo "PYTHONPATH=$PYTHONPATH:$PREFIX/$($PYTHON -c "import sysconfig as sc; p = sc.get_path('platlib', vars={'platbase': '.'}); print(p[6:] if p.startswith('local/') and sc.get_default_scheme() == 'posix_local' and not $PREFIX.endswith(sc.get_config_var('platbase')) else p)")" >> $GITHUB_ENV +echo "PYTHONPATH=$PYTHONPATH:$PREFIX/$($PYTHON -c "import sysconfig as sc; p = sc.get_path('platlib', vars={'platbase': '.'}); print(p[6:] if p.startswith('local/') and sc.get_default_scheme() == 'posix_local' and not '$PREFIX'.endswith(sc.get_config_var('platbase')) else p)")" >> $GITHUB_ENV if [ ! -d deps/install ]; then echo "Custom dependencies not present - will build them" From 9f88dc16fb92aa2abbb688bc0ea125bb9108e972 Mon Sep 17 00:00:00 2001 From: Nad Alaba <37968805+nadalaba@users.noreply.github.com> Date: Thu, 18 Jun 2026 21:28:43 +0300 Subject: [PATCH 4/4] py < 3.10 guards, comments, format pycode, remove unnecessary code --- .github/workflows/main.yml | 1 - .github/workflows/scripts/setup_linux_deps.sh | 16 ++++++++++++++- Packaging/win/ffbuild.sh | 1 + pyhook/CMakeLists.txt | 20 ++++++++++++++++--- 4 files changed, 33 insertions(+), 5 deletions(-) diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index a17efd2ae6..519c044dcd 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -58,7 +58,6 @@ jobs: run: | # There can be several Python versions installed. We must use the exact one discovered by CMake. PYTHON=`grep -m1 'Python3_EXECUTABLE.*=' build/CMakeCache.txt | cut -d= -f2` - PYTHONPATH=$PYTHONPATH:$PREFIX/$($PYTHON -c "import sysconfig as sc; print(sc.get_path('platlib', 'posix_prefix', vars={'platbase': '.'}))") $PYTHON tests/pyhook_smoketest.py - name: Build AppImage if: matrix.target == 'Release' diff --git a/.github/workflows/scripts/setup_linux_deps.sh b/.github/workflows/scripts/setup_linux_deps.sh index f495d36072..fa416672ef 100755 --- a/.github/workflows/scripts/setup_linux_deps.sh +++ b/.github/workflows/scripts/setup_linux_deps.sh @@ -20,7 +20,21 @@ echo "DEPSPREFIX=$DEPSPREFIX" >> $GITHUB_ENV echo "PATH=$PATH:$DEPSPREFIX/bin:$PREFIX/bin:~/.local/bin" >> $GITHUB_ENV echo "LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$DEPSPREFIX/lib:$PREFIX/lib" >> $GITHUB_ENV echo "PKG_CONFIG_PATH=$PKG_CONFIG_PATH:$DEPSPREFIX/lib/pkgconfig" >> $GITHUB_ENV -echo "PYTHONPATH=$PYTHONPATH:$PREFIX/$($PYTHON -c "import sysconfig as sc; p = sc.get_path('platlib', vars={'platbase': '.'}); print(p[6:] if p.startswith('local/') and sc.get_default_scheme() == 'posix_local' and not '$PREFIX'.endswith(sc.get_config_var('platbase')) else p)")" >> $GITHUB_ENV +PYCODE=" +import sysconfig as sc +p = sc.get_path('platlib', vars={'platbase': '.'}) +# sc.get_default_scheme() does no exist in Python < 3.10 +scheme = getattr(sc, 'get_default_scheme', lambda: None)() +# strip leading 'local/' from 'platlib' in 'posix_local' to avoid '/usr/local/local/...' (#5840) +if ( + scheme == 'posix_local' and + '$DESTDIR$PREFIX' != sc.get_config_var('platbase') and + p.startswith('local/') +): + p = p[6:] +print(p) +" +echo "PYTHONPATH=$PYTHONPATH:$PREFIX/$($PYTHON -c "$PYCODE")" >> $GITHUB_ENV if [ ! -d deps/install ]; then echo "Custom dependencies not present - will build them" diff --git a/Packaging/win/ffbuild.sh b/Packaging/win/ffbuild.sh index b2516ddc2b..3f5f466d2c 100644 --- a/Packaging/win/ffbuild.sh +++ b/Packaging/win/ffbuild.sh @@ -491,6 +491,7 @@ log_status "Stripping Python cache files (*.pyc,*.pyo,__pycache__)..." find "$RELEASE/lib/$PYVER" -regextype sed -regex ".*\.py[co]" | xargs rm -rfv find "$RELEASE/lib/$PYVER" -name "__pycache__" | xargs rm -rfv +# no need to check for 'posix_local' scheme because we are on MSYS2 PY_DLLS_SRC_PATH=`/$MINGVER/bin/python.exe -c "import sysconfig as sc; print(sc.get_path('platlib', vars={'platbase': '.'}))"` log_status "Copying the Python extension dlls..." diff --git a/pyhook/CMakeLists.txt b/pyhook/CMakeLists.txt index 682e56e5ed..a0437a8c89 100644 --- a/pyhook/CMakeLists.txt +++ b/pyhook/CMakeLists.txt @@ -36,11 +36,25 @@ else() # So do it ourselves, getting the prefix-relative path instead if(NOT DEFINED PYHOOK_INSTALL_DIR) if(APPLE) - set(_PYHOOK_SYSCONFIG_PREFIX " 'posix_prefix',") + set(_pycode "import sysconfig as sc; print(sc.get_path('platlib','posix_prefix', vars={'platbase': '.'}))") + else() + set(_pycode " +import sysconfig as sc +p = sc.get_path('platlib', vars={'platbase': '.'}) +# sc.get_default_scheme() does no exist in Python < 3.10 +scheme = getattr(sc, 'get_default_scheme', lambda: None)() +# strip leading 'local/' from 'platlib' in 'posix_local' to avoid '/usr/local/local/...' (#5840) +if ( + scheme == 'posix_local' and + \"$ENV{DESTDIR}${CMAKE_INSTALL_PREFIX}\" != sc.get_config_var('platbase') and + p.startswith('local/') +): + p = p[6:] +print(p) +") endif() - # strip leading 'local/' from 'platlib' path to avoid double 'local/' in 'posix_local' schemes when installing to /usr/local execute_process( - COMMAND "${Python3_EXECUTABLE}" -c "import sysconfig as sc; p = sc.get_path('platlib',${_PYHOOK_SYSCONFIG_PREFIX} vars={'platbase': '.'}); print(p[6:] if p.startswith('local/') and sc.get_default_scheme() == 'posix_local' and not \"$ENV{DESTDIR}${CMAKE_INSTALL_PREFIX}\".endswith(sc.get_config_var('platbase')) else p)" + COMMAND "${Python3_EXECUTABLE}" -c "${_pycode}" RESULT_VARIABLE _pyhook_install_dir_result OUTPUT_VARIABLE PYHOOK_INSTALL_DIR OUTPUT_STRIP_TRAILING_WHITESPACE)