From 56f9caba675859409983c9a1fbff20c03029b735 Mon Sep 17 00:00:00 2001
From: Brent Huisman <brenthuisman@users.noreply.github.com>
Date: Wed, 18 May 2022 10:08:33 +0200
Subject: [PATCH] Fix a bug where Debian/Ubuntu's Python malfunctions (#1894)

Upstream bug: https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=1006615

Currently affects Ubuntu 22.04 users.

Co-authored-by: Simon Frasch <simon.frasch@cscs.ch>
---
 .github/workflows/ciwheel.yml         |  4 ++++
 .github/workflows/sanitize.yml        |  2 ++
 .github/workflows/test-everything.yml |  4 ++++
 python/CMakeLists.txt                 |  3 +--
 scripts/where.py                      | 12 ++++++++++++
 5 files changed, 23 insertions(+), 2 deletions(-)
 create mode 100644 scripts/where.py

diff --git a/.github/workflows/ciwheel.yml b/.github/workflows/ciwheel.yml
index 24792583..77f094fb 100644
--- a/.github/workflows/ciwheel.yml
+++ b/.github/workflows/ciwheel.yml
@@ -24,6 +24,8 @@ jobs:
         with:
           fetch-depth: 0
           submodules: recursive
+      - name: Update pip
+        run: python -m pip install --upgrade pip
 
       - name: Build wheels Linux
         if: ${{ startsWith(matrix.os, 'ubuntu') }}
@@ -66,6 +68,8 @@ jobs:
     steps:
       - name: Set up Python
         uses: actions/setup-python@v2
+      - name: Update pip
+        run: python -m pip install --upgrade pip
       - name: Get packages
         run: python -m pip install numpy setuptools scikit-build ninja cmake
       - uses: actions/checkout@v2
diff --git a/.github/workflows/sanitize.yml b/.github/workflows/sanitize.yml
index 1e7e371a..f1400f87 100644
--- a/.github/workflows/sanitize.yml
+++ b/.github/workflows/sanitize.yml
@@ -27,6 +27,8 @@ jobs:
         uses: actions/checkout@v2
         with:
           submodules: recursive
+      - name: Update pip
+        run: python -m pip install --upgrade pip
       - name: Build arbor
         run: |
           mkdir build
diff --git a/.github/workflows/test-everything.yml b/.github/workflows/test-everything.yml
index 3a829fa6..d540ee52 100644
--- a/.github/workflows/test-everything.yml
+++ b/.github/workflows/test-everything.yml
@@ -110,6 +110,8 @@ jobs:
         uses: actions/setup-python@v2
         with:
           python-version: ${{ matrix.config.py }}
+      - name: Update pip
+        run: python -m pip install --upgrade pip
       - name: OpenMPI cache
         uses: actions/cache@v2
         id:   cache-ompi
@@ -200,6 +202,8 @@ jobs:
     name: "Pip build test + Python examples test"
     runs-on: ubuntu-latest
     steps:
+      - name: Update pip
+        run: python -m pip install --upgrade pip
       - name: Install Python packages
         run:  pip install numpy setuptools scikit-build ninja cmake
       - name: Clone w/ submodules
diff --git a/python/CMakeLists.txt b/python/CMakeLists.txt
index 10220bf9..10e7e246 100644
--- a/python/CMakeLists.txt
+++ b/python/CMakeLists.txt
@@ -85,8 +85,7 @@ file(COPY "${PROJECT_SOURCE_DIR}/VERSION" DESTINATION "${python_mod_path}")
 file(WRITE "${CMAKE_BINARY_DIR}/install-prefix" "${CMAKE_INSTALL_PREFIX}")
 
 execute_process(
-    COMMAND ${PYTHON_EXECUTABLE} -c
-    "import sys,sysconfig;pfx=sys.stdin.read();print(sysconfig.get_path('platlib',vars={} if pfx=='' else {'base':pfx,'platbase':pfx}))"
+    COMMAND ${PYTHON_EXECUTABLE} "${PROJECT_SOURCE_DIR}/scripts/where.py"
     INPUT_FILE "${CMAKE_BINARY_DIR}/install-prefix"
     OUTPUT_VARIABLE ARB_PYTHON_LIB_PATH_DEFAULT
     OUTPUT_STRIP_TRAILING_WHITESPACE)
diff --git a/scripts/where.py b/scripts/where.py
new file mode 100644
index 00000000..1abf399e
--- /dev/null
+++ b/scripts/where.py
@@ -0,0 +1,12 @@
+import sys,sysconfig
+
+pfx=sys.stdin.read()
+try:
+    #override scheme on debian/ubuntu py3.10, where 'posix_local' is set and malfunctioning.
+    if sysconfig.get_default_scheme()=='posix_local':
+        print(sysconfig.get_path('platlib',vars={} if pfx=='' else {'base':pfx,'platbase':pfx},scheme='posix_prefix'))
+        sys.exit()
+except AttributeError:
+    #we're on Python <= 3.9, no scheme setting required and get_default_scheme does not exist.
+    pass
+print(sysconfig.get_path('platlib',vars={} if pfx=='' else {'base':pfx,'platbase':pfx}))
-- 
GitLab