diff options
Diffstat (limited to 'util')
-rwxr-xr-x | util/cmake/configurejson2cmake.py | 4 | ||||
-rw-r--r-- | util/cmake/helper.py | 47 | ||||
-rwxr-xr-x | util/cmake/pro2cmake.py | 13 |
3 files changed, 57 insertions, 7 deletions
diff --git a/util/cmake/configurejson2cmake.py b/util/cmake/configurejson2cmake.py index b98aece55b..5a77c36b4e 100755 --- a/util/cmake/configurejson2cmake.py +++ b/util/cmake/configurejson2cmake.py @@ -40,6 +40,7 @@ from helper import ( map_platform, find_3rd_party_library_mapping, generate_find_package_info, + get_compile_test_dependent_library_mapping, ) knownTests = set() # type: Set[str] @@ -700,7 +701,8 @@ def write_compile_test( if len(library) == 0: continue - library_usage = get_library_usage_for_compile_test(library) + adjusted_library = get_compile_test_dependent_library_mapping(name, library) + library_usage = get_library_usage_for_compile_test(adjusted_library) if "fixme" in library_usage: qmakeFixme += library_usage["fixme"] continue diff --git a/util/cmake/helper.py b/util/cmake/helper.py index 56bf864adb..aae67555f6 100644 --- a/util/cmake/helper.py +++ b/util/cmake/helper.py @@ -44,6 +44,7 @@ class LibraryMapping: is_bundled_with_qt: bool = False, test_library_overwrite: str = "", run_library_test: bool = False, + no_link_so_name: str = "", ) -> None: self.soName = soName self.packageName = packageName @@ -66,6 +67,9 @@ class LibraryMapping: # Run the library compile test of configure.json self.run_library_test = run_library_test + # The custom nolink library mapping associated with this one. + self.no_link_so_name = no_link_so_name + def is_qt(self) -> bool: return self.packageName == "Qt" or self.packageName == "Qt5" or self.packageName == "Qt6" @@ -447,20 +451,21 @@ _library_map = [ LibraryMapping("opengl", "OpenGL", "OpenGL::GL", resultVariable="OpenGL_OpenGL"), LibraryMapping( "openssl_headers", - "OpenSSL", - "OpenSSL::SSL_nolink", + "WrapOpenSSLHeaders", + "WrapOpenSSLHeaders::WrapOpenSSLHeaders", resultVariable="TEST_openssl_headers", appendFoundSuffix=False, - test_library_overwrite="OpenSSL::SSL", + test_library_overwrite="WrapOpenSSLHeaders::WrapOpenSSLHeaders", run_library_test=True, ), LibraryMapping( "openssl", - "OpenSSL", - "OpenSSL::SSL", + "WrapOpenSSL", + "WrapOpenSSL::WrapOpenSSL", resultVariable="TEST_openssl", appendFoundSuffix=False, run_library_test=True, + no_link_so_name="openssl_headers", ), LibraryMapping("oci", "Oracle", "Oracle::OCI"), LibraryMapping( @@ -698,24 +703,56 @@ def map_platform(platform: str) -> str: def is_known_3rd_party_library(lib: str) -> bool: + handling_no_link = False if lib.endswith("/nolink") or lib.endswith("_nolink"): lib = lib[:-7] + handling_no_link = True mapping = find_3rd_party_library_mapping(lib) + if handling_no_link and mapping and mapping.no_link_so_name: + no_link_mapping = find_3rd_party_library_mapping(mapping.no_link_so_name) + if no_link_mapping: + mapping = no_link_mapping return mapping is not None def map_3rd_party_library(lib: str) -> str: + handling_no_link = False libpostfix = "" if lib.endswith("/nolink"): lib = lib[:-7] libpostfix = "_nolink" + handling_no_link = True + mapping = find_3rd_party_library_mapping(lib) + + if handling_no_link and mapping and mapping.no_link_so_name: + no_link_mapping = find_3rd_party_library_mapping(mapping.no_link_so_name) + if no_link_mapping: + mapping = no_link_mapping + libpostfix = "" + if not mapping or not mapping.targetName: return lib + return mapping.targetName + libpostfix +compile_test_dependent_library_mapping = { + "dtls": {"openssl": "openssl_headers"}, + "ocsp": {"openssl": "openssl_headers"}, +} + + +def get_compile_test_dependent_library_mapping(compile_test_name: str, dependency_name: str): + if compile_test_name in compile_test_dependent_library_mapping: + mapping = compile_test_dependent_library_mapping[compile_test_name] + if dependency_name in mapping: + return mapping[dependency_name] + + return dependency_name + + def generate_find_package_info( lib: LibraryMapping, use_qt_find_package: bool = True, diff --git a/util/cmake/pro2cmake.py b/util/cmake/pro2cmake.py index ae46277293..87e2593d00 100755 --- a/util/cmake/pro2cmake.py +++ b/util/cmake/pro2cmake.py @@ -1285,7 +1285,18 @@ class Scope(object): else: return [f"${{CMAKE_CURRENT_BINARY_DIR}}/{relative_path}"] - return self._evalOps(key, None, [], inherit=inherit) + # Horrible hack. If we're returning the values for some key + # that looks like source or header files, make sure to use a + # map_files transformer, so that $$PWD values are evaluated + # in the transformer scope, otherwise relative paths will be + # broken. + # Looking at you qmltyperegistrar.pro. + eval_ops_transformer = None + if key.endswith("SOURCES") or key.endswith("HEADERS"): + def file_transformer(scope, files): + return scope._map_files(files) + eval_ops_transformer = file_transformer + return self._evalOps(key, eval_ops_transformer, [], inherit=inherit) def get_string(self, key: str, default: str = "", inherit: bool = False) -> str: v = self.get(key, inherit=inherit) |