From a9f42003e6935cc543d838993d53bc9a40fd0994 Mon Sep 17 00:00:00 2001
From: Martyn Gigg <martyn.gigg@stfc.ac.uk>
Date: Wed, 22 Jan 2020 11:57:22 +0000
Subject: [PATCH] Add a wrapper script for internal pyuic script

Refs #27631
---
 buildconfig/CMake/ExternalSipPyQt4.cmake | 16 ++++++++++------
 buildconfig/CMake/internal-pyuic.py.in   |  3 +++
 2 files changed, 13 insertions(+), 6 deletions(-)
 create mode 100644 buildconfig/CMake/internal-pyuic.py.in

diff --git a/buildconfig/CMake/ExternalSipPyQt4.cmake b/buildconfig/CMake/ExternalSipPyQt4.cmake
index cf9123222f2..d08a3210393 100644
--- a/buildconfig/CMake/ExternalSipPyQt4.cmake
+++ b/buildconfig/CMake/ExternalSipPyQt4.cmake
@@ -28,9 +28,13 @@ set(PYQT4_VERSION_STR "4.12.1" CACHE STRING "PyQt4's version as a human-readable
 set(PYQT4_VERSION_TAG "Qt_4_8_6" CACHE STRING "The Qt version tag used by PyQt4's .sip files" FORCE)
 set(PYQT4_SIP_DIR "${CMAKE_BINARY_DIR}/${_SIP_PYQT_INSTALL_DIR}/share/sip" CACHE PATH "The base directory where PyQt4's .sip files are installed" FORCE)
 set(PYQT4_SIP_FLAGS "-x VendorID -t WS_X11 -x PyQt_NoPrintRangeBug -t Qt_4_8_6" CACHE STRING "The SIP flags used to build PyQt4" FORCE)
-set(_lib_site_packages ${CMAKE_BINARY_DIR}/${_SIP_PYQT_INSTALL_DIR}/lib/site-packages)
-set(_pyqt4_lib_site_packages ${_lib_site_packages}/PyQt4)
-set(PYQT4_PYUIC "${_pyqt4_lib_site_packages}/uic/pyuic.py" CACHE STRING "Location of the pyuic script" FORCE)
+set(PRIVATE_PYQT_SITE_PACKAGES ${CMAKE_BINARY_DIR}/${_SIP_PYQT_INSTALL_DIR}/lib/site-packages)
+set(_pyqt4_lib_site_packages ${PRIVATE_PYQT_SITE_PACKAGES}/PyQt4)
+
+# Write a wrapper pyuic script so it can find out internal copy of PyQt4
+set(PYQT4_PYUIC "${CMAKE_LIBRARY_OUTPUT_DIRECTORY}/internal-pyuic.py" CACHE STRING "Location of the pyuic script" FORCE)
+configure_file(${CMAKE_MODULE_PATH}/internal-pyuic.py.in ${PYQT4_PYUIC} @ONLY)
+
 ExternalProject_Add(extern-pyqt4
   PREFIX ${_SIP_PYQT_DIR}/pyqt4
   INSTALL_DIR ${_SIP_PYQT_INSTALL_DIR}
@@ -51,7 +55,7 @@ ExternalProject_Add(extern-pyqt4
     --no-deprecated
     --qmake=/usr/bin/qmake-qt4
     --no-qsci-api
-  BUILD_COMMAND make 2> build.log
+  BUILD_COMMAND make -j24 2> build.log
   DEPENDS extern-pyqt4-sip
 )
 
@@ -59,13 +63,13 @@ ExternalProject_Add(extern-pyqt4
 # We assume we only have to support a single-configuration build type on Linux
 file(WRITE ${CMAKE_LIBRARY_OUTPUT_DIRECTORY}/private-pyqt4.pth
 "import sys; sys.__plen = len(sys.path)
-${_lib_site_packages}
+${PRIVATE_PYQT_SITE_PACKAGES}
 ${_pyqt4_lib_site_packages}
 import sys; new = sys.path[sys.__plen:]; del sys.path[sys.__plen:]; p = getattr(sys, '__egginsert', 0); sys.path[p:p] = new; sys.__egginsert = p + len(new)
 ")
 
 # Package PyQt. We assume this is for Python 3
-install(DIRECTORY ${_lib_site_packages}/PyQt4
+install(DIRECTORY ${PRIVATE_PYQT_SITE_PACKAGES}/PyQt4
         DESTINATION ${LIB_DIR} 
         PATTERN "__pycache__" EXCLUDE
         PATTERN "port_v2" EXCLUDE)
diff --git a/buildconfig/CMake/internal-pyuic.py.in b/buildconfig/CMake/internal-pyuic.py.in
new file mode 100644
index 00000000000..6cd825792ca
--- /dev/null
+++ b/buildconfig/CMake/internal-pyuic.py.in
@@ -0,0 +1,3 @@
+import sys
+sys.path.insert(0, "@PRIVATE_PYQT_SITE_PACKAGES@")
+import PyQt4.uic.pyuic
-- 
GitLab