diff options
Diffstat (limited to 'build_scripts/platforms/macos.py')
-rw-r--r-- | build_scripts/platforms/macos.py | 77 |
1 files changed, 39 insertions, 38 deletions
diff --git a/build_scripts/platforms/macos.py b/build_scripts/platforms/macos.py index 6b8d5e1f8..dbe60d343 100644 --- a/build_scripts/platforms/macos.py +++ b/build_scripts/platforms/macos.py @@ -2,12 +2,14 @@ # SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only import fnmatch -import os +from pathlib import Path +from ..log import log from ..config import config +from ..options import OPTION from ..utils import (copydir, copyfile, macos_add_rpath, macos_fix_rpaths_for_library) -from ..versions import PYSIDE +from .. import PYSIDE, PYSIDE_UNIX_BUNDLED_TOOLS def _macos_patch_executable(name, _vars=None): @@ -19,7 +21,7 @@ def _macos_patch_executable(name, _vars=None): macos_add_rpath(rpath, binary) -def prepare_standalone_package_macos(self, _vars): +def prepare_standalone_package_macos(pyside_build, _vars): built_modules = _vars['built_modules'] constrain_modules = None @@ -28,6 +30,11 @@ def prepare_standalone_package_macos(self, _vars): copy_translations = True copy_qt_conf = True + destination_dir = Path("{st_build_dir}/{st_package_name}".format(**_vars)) + destination_qt_dir = destination_dir / "Qt" + destination_qt_lib_dir = destination_qt_dir / "lib" + log.info("Copying files...") + if config.is_internal_shiboken_generator_build(): constrain_modules = ["Core", "Network", "Xml", "XmlPatterns"] constrain_frameworks = [f"Qt{name}.framework" for name in constrain_modules] @@ -47,35 +54,34 @@ def prepare_standalone_package_macos(self, _vars): no_copy_debug = True def file_variant_filter(file_name, file_full_path): - if self.qtinfo.build_type != 'debug_and_release': + if pyside_build.qtinfo.build_type != 'debug_and_release': return True if file_name.endswith('_debug.dylib') and no_copy_debug: return False return True # Patching designer to use the Qt libraries provided in the wheel - if config.is_internal_pyside_build(): - _macos_patch_executable('assistant', _vars) - _macos_patch_executable('designer', _vars) - _macos_patch_executable('linguist', _vars) + if config.is_internal_pyside_build() and not OPTION['NO_QT_TOOLS']: + for tool in PYSIDE_UNIX_BUNDLED_TOOLS: + _macos_patch_executable(tool, _vars) # <qt>/lib/* -> <setup>/{st_package_name}/Qt/lib - if self.qt_is_framework_build(): + if pyside_build.qt_is_framework_build(): def framework_dir_filter(dir_name, parent_full_path, dir_full_path): if '.framework' in dir_name: if (dir_name.startswith('QtWebEngine') - and not self.is_webengine_built(built_modules)): + and not pyside_build.is_webengine_built(built_modules)): return False if constrain_modules and dir_name not in constrain_frameworks: return False if dir_name in ['Headers', 'fonts']: return False - if dir_full_path.endswith('Versions/Current'): + if str(dir_full_path).endswith('Versions/Current'): return False - if dir_full_path.endswith('Versions/5/Resources'): + if str(dir_full_path).endswith('Versions/5/Resources'): return False - if dir_full_path.endswith('Versions/5/Helpers'): + if str(dir_full_path).endswith('Versions/5/Helpers'): return False return general_dir_filter(dir_name, parent_full_path, dir_full_path) @@ -84,15 +90,15 @@ def prepare_standalone_package_macos(self, _vars): no_copy_debug = True def framework_variant_filter(file_name, file_full_path): - if self.qtinfo.build_type != 'debug_and_release': + if pyside_build.qtinfo.build_type != 'debug_and_release': return True - dir_path = os.path.dirname(file_full_path) + dir_path = Path(file_full_path).parent in_framework = dir_path.endswith("Versions/5") if file_name.endswith('_debug') and in_framework and no_copy_debug: return False return True - copydir("{qt_lib_dir}", "{st_build_dir}/{st_package_name}/Qt/lib", + copydir("{qt_lib_dir}", destination_qt_lib_dir, recursive=True, _vars=_vars, ignore=["*.la", "*.a", "*.cmake", "*.pc", "*.prl"], dir_filter_function=framework_dir_filter, @@ -102,56 +108,53 @@ def prepare_standalone_package_macos(self, _vars): # present rpath does not work because it assumes a symlink # from Versions/5/Helpers, thus adding two more levels of # directory hierarchy. - if self.is_webengine_built(built_modules): - qt_lib_path = "{st_build_dir}/{st_package_name}/Qt/lib".format(**_vars) - bundle = "QtWebEngineCore.framework/Helpers/" - bundle += "QtWebEngineProcess.app" + if pyside_build.is_webengine_built(built_modules): + bundle = Path("QtWebEngineCore.framework/Helpers/") / "QtWebEngineProcess.app" binary = "Contents/MacOS/QtWebEngineProcess" - webengine_process_path = os.path.join(bundle, binary) - final_path = os.path.join(qt_lib_path, webengine_process_path) + webengine_process_path = bundle / binary + final_path = destination_qt_lib_dir / webengine_process_path rpath = "@loader_path/../../../../../" macos_fix_rpaths_for_library(final_path, rpath) else: ignored_modules = [] - if not self.is_webengine_built(built_modules): + if not pyside_build.is_webengine_built(built_modules): ignored_modules.extend(['libQt6WebEngine*.dylib']) accepted_modules = ['libQt6*.6.dylib'] if constrain_modules: accepted_modules = [f"libQt6{module}*.6.dylib" for module in constrain_modules] - copydir("{qt_lib_dir}", - "{st_build_dir}/{st_package_name}/Qt/lib", + copydir("{qt_lib_dir}", destination_qt_lib_dir, _filter=accepted_modules, ignore=ignored_modules, file_filter_function=file_variant_filter, recursive=True, _vars=_vars, force_copy_symlinks=True) - if self.is_webengine_built(built_modules): + if pyside_build.is_webengine_built(built_modules): copydir("{qt_data_dir}/resources", - "{st_build_dir}/{st_package_name}/Qt/resources", + destination_qt_dir / "resources", _filter=None, recursive=False, _vars=_vars) # Fix rpath for WebEngine process executable. - qt_libexec_path = "{st_build_dir}/{st_package_name}/Qt/libexec".format(**_vars) + qt_libexec_path = Path(destination_qt_dir) / "libexec" binary = "QtWebEngineProcess" - final_path = os.path.join(qt_libexec_path, binary) + final_path = qt_libexec_path / binary rpath = "@loader_path/../lib" macos_fix_rpaths_for_library(final_path, rpath) if copy_qt_conf: # Copy the qt.conf file to libexec. - if not os.path.isdir(qt_libexec_path): - os.makedirs(qt_libexec_path) + if not qt_libexec_path.is_dir(): + qt_libexec_path.mkdir(parents=True) copyfile( f"{{build_dir}}/{PYSIDE}/{{st_package_name}}/qt.conf", qt_libexec_path, _vars=_vars) if copy_plugins: - is_pypy = "pypy" in self.build_classifiers + is_pypy = "pypy" in pyside_build.build_classifiers # <qt>/plugins/* -> <setup>/{st_package_name}/Qt/plugins - plugins_target = "{st_build_dir}/{st_package_name}/Qt/plugins" + plugins_target = destination_qt_dir / "plugins" filters = ["*.dylib"] copydir("{qt_plugins_dir}", plugins_target, _filter=filters, @@ -161,15 +164,14 @@ def prepare_standalone_package_macos(self, _vars): _vars=_vars) if not is_pypy: copydir("{install_dir}/plugins/designer", - f"{plugins_target}/designer", + plugins_target / "designer", _filter=filters, recursive=False, _vars=_vars) if copy_qml: # <qt>/qml/* -> <setup>/{st_package_name}/Qt/qml - copydir("{qt_qml_dir}", - "{st_build_dir}/{st_package_name}/Qt/qml", + copydir("{qt_qml_dir}", destination_qt_dir / "qml", _filter=None, recursive=True, force=False, @@ -180,8 +182,7 @@ def prepare_standalone_package_macos(self, _vars): if copy_translations: # <qt>/translations/* -> # <setup>/{st_package_name}/Qt/translations - copydir("{qt_translations_dir}", - "{st_build_dir}/{st_package_name}/Qt/translations", + copydir("{qt_translations_dir}", destination_qt_dir / "translations", _filter=["*.qm", "*.pak"], force=False, _vars=_vars) |