Skip to content
Snippets Groups Projects
Commit a68d5477 authored by Stephen's avatar Stephen
Browse files

Prevent homebrew packages from being found when using conda

parent 940eb3ee
No related branches found
No related tags found
No related merge requests found
......@@ -7,8 +7,8 @@
},
"configurePresets": [
{
"name": "conda-osx",
"displayName": "conda-osx",
"name": "osx",
"displayName": "osx",
"description": "Default build options for an OSX conda build",
"generator": "Ninja",
"binaryDir": "${sourceDir}/build",
......@@ -16,7 +16,9 @@
"CMAKE_FIND_FRAMEWORK": "LAST",
"CMAKE_PREFIX_PATH": "$env{CONDA_PREFIX}",
"USE_PYTHON_DYNAMIC_LIB": "OFF",
"Qt5_DIR": "$env{CONDA_PREFIX}/lib/cmake/qt5"
"Qt5_DIR": "$env{CONDA_PREFIX}/lib/cmake/qt5",
"HDF5_ROOT": "$env{CONDA_PREFIX}",
"OPENSSL_ROOT": "$env{CONDA_PREFIX}"
}
}
]
......
......@@ -124,9 +124,9 @@ set(PLUGINS_DIR plugins)
# Mac-specific installation setup
# ##############################################################################
# use homebrew OpenSSL package
if(NOT OPENSSL_ROOT_DIR)
set(OPENSSL_ROOT_DIR /usr/local/opt/openssl)
endif(NOT OPENSSL_ROOT_DIR)
if(NOT OPENSSL_ROOT)
set(OPENSSL_ROOT /usr/local/opt/openssl)
endif(NOT OPENSSL_ROOT)
if(NOT HDF5_ROOT)
set(HDF5_ROOT /usr/local/opt/hdf5) # Only for homebrew!
......
......@@ -8,70 +8,44 @@ import argparse
import os
import pprint
import re
import site
import sys
from pathlib import Path
# Regular expression to extract the Qt version tag
QT_TAG_RE = re.compile(r'Qt_\d+_\d+_\d+')
class PyQtConfig(object):
version_hex = None
version_str = None
qt_tag = None
sip_dir = None
sip_flags = None
pyuic_path = None
def __init__(self, name):
qtcore = __import__(name + '.QtCore', globals(), locals(), ['QtCore'], 0)
class PyQtConfig:
"""Inspects the installed PyQt version and extracts
information about it.
"""
version_hex: str
version_str: str
qt_tag: str
sip_dir: str
sip_flags: str
pyuic_path: str
def __init__(self, major_version):
"""Inspects the named PyQt package given the major version number
:param major_version: The major version number of the library
"""
pyqt_name = f'PyQt{major_version}'
qtcore = __import__(f'{pyqt_name}.QtCore', globals(), locals(), ['QtCore'], 0)
self.version_hex = qtcore.PYQT_VERSION
self.version_str = qtcore.PYQT_VERSION_STR
self.sip_flags = qtcore.PYQT_CONFIGURATION['sip_flags']
self.qt_tag = self._get_qt_tag(self.sip_flags)
# This is based on QScintilla's configure.py, and only works for the
# default case where installation paths have not been changed in PyQt's
# configuration process.
conda_activated, conda_env = find_conda_env()
if conda_env:
self.sip_dir = os.path.join(conda_env, "share", "sip", name)
elif sys.platform == 'win32':
if sys.version_info > (3,):
self.sip_dir = os.path.join(sys.prefix, 'share', 'sip', name)
else:
self.sip_dir = os.path.join(sys.prefix, 'sip', name)
if conda_activated:
self.get_pyqt_conda_dirs(conda_env, pyqt_name)
else:
qt_maj_version = self.version_str[0]
if sys.platform == 'darwin':
prefix = '/usr/local/opt' # brew Cellar
possible_sip_dirs = []
if qt_maj_version == '4':
possible_sip_dirs.append(os.path.join('pyqt@4', 'share', 'sip'))
possible_sip_dirs.append(os.path.join('mantid-pyqt@4', 'share', 'sip'))
elif qt_maj_version == '5':
possible_sip_dirs.append(os.path.join('pyqt', 'share', 'sip', 'Qt5'))
possible_sip_dirs.append(os.path.join('mantid-pyqt5', 'share', 'sip', 'Qt5'))
else:
raise RuntimeError("Unknown Qt version ({}) found. Unable to determine location of PyQt sip files."
"Please update FindPyQt accordingly.".format(self.version_str[0]))
else:
prefix = os.path.join(sys.prefix, 'share')
possible_sip_dirs = (
'python{}{}-sip/{}'.format(sys.version_info.major, sys.version_info.minor, name),
'python{}-sip/{}'.format(sys.version_info.major, name),
'sip/{}'.format(name)
)
for sip_dir in possible_sip_dirs:
pyqt_sip_dir = os.path.join(prefix, sip_dir)
if os.path.exists(pyqt_sip_dir):
self.sip_dir = pyqt_sip_dir
break
if self.sip_dir is None:
possible_sip_dirs = list(map(lambda p: os.path.join(prefix, p), possible_sip_dirs))
raise RuntimeError("Unable to find {}. "
"Tried following locations: {}".format(name, pprint.pformat(possible_sip_dirs)))
self.get_pyqt_dirs(pyqt_name)
# Assume uic script is in uic submodule
uic = __import__(name + '.uic', globals(), locals(), ['uic'], 0)
uic = __import__(pyqt_name + '.uic', globals(), locals(), ['uic'], 0)
self.pyuic_path = os.path.join(os.path.dirname(uic.__file__), 'pyuic.py')
def _get_qt_tag(self, sip_flags):
......@@ -92,12 +66,54 @@ class PyQtConfig(object):
]
return '\n'.join(lines)
def get_pyqt_dirs(self, pyqt_name):
# This is based on QScintilla's configure.py, and only works for the
# default case where installation paths have not been changed in PyQt's
# configuration process.
if sys.platform == 'win32':
self.sip_dir = os.path.join(sys.prefix, 'share', 'sip', pyqt_name)
else:
qt_maj_version = self.version_str[0]
if sys.platform == 'darwin':
prefix = '/usr/local/opt' # brew Cellar
possible_sip_dirs = []
if qt_maj_version == '5':
possible_sip_dirs.append(os.path.join(site.getsitepackages()[0], 'PyQt5', 'bindings'))
possible_sip_dirs.append(os.path.join('pyqt', 'share', 'sip', 'Qt5'))
possible_sip_dirs.append(os.path.join('mantid-pyqt5', 'share', 'sip', 'Qt5'))
else:
raise RuntimeError("Unknown Qt version ({}) found. Unable to determine location of PyQt sip files."
"Please update FindPyQt accordingly.".format(self.version_str[0]))
else:
prefix = os.path.join(sys.prefix, 'share')
possible_sip_dirs = (f'python{sys.version_info.major}{sys.version_info.minor}-sip/{pyqt_name}',
f'python{sys.version_info.major}-sip/{pyqt_name}', f'sip/{pyqt_name}')
for pyqt_sip_dir in possible_sip_dirs:
if not os.path.isabs(pyqt_sip_dir):
pyqt_sip_dir = os.path.join(prefix, pyqt_sip_dir)
if os.path.exists(pyqt_sip_dir):
self.sip_dir = pyqt_sip_dir
break
if self.sip_dir is None:
possible_sip_dirs = list(map(lambda p: os.path.join(prefix, p), possible_sip_dirs))
raise RuntimeError(f"Unable to find {pyqt_name}.\n" + f"Tried following locations: {pprint.pformat(possible_sip_dirs)}")
def get_pyqt_conda_dirs(self, conda_env_path, pyqt_name):
if sys.platform != 'win32':
self.sip_dir = os.path.join(conda_env_path, "share", "sip", pyqt_name)
else:
self.sip_dir = os.path.join(conda_env_path, 'sip', pyqt_name)
def find_conda_env():
if 'CONDA_PREFIX' in os.environ:
return True, os.environ['CONDA_PREFIX']
return False, None
def main():
# parse command line
args = get_options()
print(PyQtConfig('PyQt%d' % args.version))
print(PyQtConfig(major_version=args.version))
return 0
......@@ -107,11 +123,5 @@ def get_options():
return parser.parse_args()
def find_conda_env():
if os.environ['CONDA_PREFIX']:
return True, os.environ['CONDA_PREFIX']
return False, None
if __name__ == "__main__":
sys.exit(main())
sys.exit(main())
\ No newline at end of file
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment