diff options
-rw-r--r-- | src/corelib/configure.cmake | 4 | ||||
-rw-r--r-- | src/gui/configure.cmake | 80 | ||||
-rwxr-xr-x | util/cmake/configurejson2cmake.py | 24 | ||||
-rw-r--r-- | util/cmake/helper.py | 39 |
4 files changed, 120 insertions, 27 deletions
diff --git a/src/corelib/configure.cmake b/src/corelib/configure.cmake index a5b40b56a0..4f943967a0 100644 --- a/src/corelib/configure.cmake +++ b/src/corelib/configure.cmake @@ -18,7 +18,9 @@ qt_find_package(WrapRt PROVIDED_TARGETS WrapRt) qt_find_package(LTTngUST PROVIDED_TARGETS LTTng::UST) qt_find_package(PCRE2 PROVIDED_TARGETS PCRE2) set_package_properties(PCRE2 PROPERTIES TYPE REQUIRED) -qt_find_package(PPS PROVIDED_TARGETS PPS::PPS) +if((QNX) OR QT_FIND_ALL_PACKAGES_ALWAYS) + qt_find_package(PPS PROVIDED_TARGETS PPS::PPS) +endif() qt_find_package(Slog2 PROVIDED_TARGETS Slog2::Slog2) diff --git a/src/gui/configure.cmake b/src/gui/configure.cmake index c7a9a5f848..9d2cf7148d 100644 --- a/src/gui/configure.cmake +++ b/src/gui/configure.cmake @@ -38,26 +38,66 @@ qt_find_package(OpenGL PROVIDED_TARGETS OpenGL::GL) qt_find_package(GLESv2 PROVIDED_TARGETS GLESv2::GLESv2) qt_find_package(Tslib PROVIDED_TARGETS PkgConfig::Tslib) qt_find_package(Vulkan PROVIDED_TARGETS Vulkan::Vulkan) -qt_find_package(Wayland PROVIDED_TARGETS Wayland::Server) -qt_find_package(X11 PROVIDED_TARGETS X11::XCB) -qt_find_package(X11 PROVIDED_TARGETS ${X11_SM_LIB} ${X11_ICE_LIB}) -qt_find_package(XCB 1.9 PROVIDED_TARGETS XCB::XCB) -qt_find_package(XCB COMPONENTS ICCCM PROVIDED_TARGETS XCB::ICCCM) -qt_find_package(XCB COMPONENTS IMAGE PROVIDED_TARGETS XCB::IMAGE) -qt_find_package(XCB COMPONENTS KEYSYMS PROVIDED_TARGETS XCB::KEYSYMS) -qt_find_package(XCB COMPONENTS RENDERUTIL PROVIDED_TARGETS XCB::RENDERUTIL) -qt_find_package(XCB COMPONENTS RANDR PROVIDED_TARGETS XCB::RANDR) -qt_find_package(XCB COMPONENTS SHAPE PROVIDED_TARGETS XCB::SHAPE) -qt_find_package(XCB COMPONENTS SHM PROVIDED_TARGETS XCB::SHM) -qt_find_package(XCB COMPONENTS SYNC PROVIDED_TARGETS XCB::SYNC) -qt_find_package(XCB COMPONENTS XFIXES PROVIDED_TARGETS XCB::XFIXES) -qt_find_package(XCB COMPONENTS XINERAMA PROVIDED_TARGETS XCB::XINERAMA) -qt_find_package(XCB COMPONENTS XKB PROVIDED_TARGETS XCB::XKB) -qt_find_package(XCB COMPONENTS RENDER PROVIDED_TARGETS XCB::RENDER) -qt_find_package(XCB COMPONENTS GLX PROVIDED_TARGETS XCB::GLX) -qt_find_package(XCB COMPONENTS XINPUT PROVIDED_TARGETS XCB::XINPUT) -qt_find_package(XKB 0.4.1 PROVIDED_TARGETS XKB::XKB) -qt_find_package(XRender PROVIDED_TARGETS PkgConfig::xrender) +if((LINUX) OR QT_FIND_ALL_PACKAGES_ALWAYS) + qt_find_package(Wayland PROVIDED_TARGETS Wayland::Server) +endif() +if((LINUX) OR QT_FIND_ALL_PACKAGES_ALWAYS) + qt_find_package(X11 PROVIDED_TARGETS X11::XCB) +endif() +if((LINUX) OR QT_FIND_ALL_PACKAGES_ALWAYS) + qt_find_package(X11 PROVIDED_TARGETS ${X11_SM_LIB} ${X11_ICE_LIB}) +endif() +if((LINUX) OR QT_FIND_ALL_PACKAGES_ALWAYS) + qt_find_package(XCB 1.9 PROVIDED_TARGETS XCB::XCB) +endif() +if((LINUX) OR QT_FIND_ALL_PACKAGES_ALWAYS) + qt_find_package(XCB COMPONENTS ICCCM PROVIDED_TARGETS XCB::ICCCM) +endif() +if((LINUX) OR QT_FIND_ALL_PACKAGES_ALWAYS) + qt_find_package(XCB COMPONENTS IMAGE PROVIDED_TARGETS XCB::IMAGE) +endif() +if((LINUX) OR QT_FIND_ALL_PACKAGES_ALWAYS) + qt_find_package(XCB COMPONENTS KEYSYMS PROVIDED_TARGETS XCB::KEYSYMS) +endif() +if((LINUX) OR QT_FIND_ALL_PACKAGES_ALWAYS) + qt_find_package(XCB COMPONENTS RENDERUTIL PROVIDED_TARGETS XCB::RENDERUTIL) +endif() +if((LINUX) OR QT_FIND_ALL_PACKAGES_ALWAYS) + qt_find_package(XCB COMPONENTS RANDR PROVIDED_TARGETS XCB::RANDR) +endif() +if((LINUX) OR QT_FIND_ALL_PACKAGES_ALWAYS) + qt_find_package(XCB COMPONENTS SHAPE PROVIDED_TARGETS XCB::SHAPE) +endif() +if((LINUX) OR QT_FIND_ALL_PACKAGES_ALWAYS) + qt_find_package(XCB COMPONENTS SHM PROVIDED_TARGETS XCB::SHM) +endif() +if((LINUX) OR QT_FIND_ALL_PACKAGES_ALWAYS) + qt_find_package(XCB COMPONENTS SYNC PROVIDED_TARGETS XCB::SYNC) +endif() +if((LINUX) OR QT_FIND_ALL_PACKAGES_ALWAYS) + qt_find_package(XCB COMPONENTS XFIXES PROVIDED_TARGETS XCB::XFIXES) +endif() +if((LINUX) OR QT_FIND_ALL_PACKAGES_ALWAYS) + qt_find_package(XCB COMPONENTS XINERAMA PROVIDED_TARGETS XCB::XINERAMA) +endif() +if((LINUX) OR QT_FIND_ALL_PACKAGES_ALWAYS) + qt_find_package(XCB COMPONENTS XKB PROVIDED_TARGETS XCB::XKB) +endif() +if((LINUX) OR QT_FIND_ALL_PACKAGES_ALWAYS) + qt_find_package(XCB COMPONENTS RENDER PROVIDED_TARGETS XCB::RENDER) +endif() +if((LINUX) OR QT_FIND_ALL_PACKAGES_ALWAYS) + qt_find_package(XCB COMPONENTS GLX PROVIDED_TARGETS XCB::GLX) +endif() +if((LINUX) OR QT_FIND_ALL_PACKAGES_ALWAYS) + qt_find_package(XCB COMPONENTS XINPUT PROVIDED_TARGETS XCB::XINPUT) +endif() +if((LINUX) OR QT_FIND_ALL_PACKAGES_ALWAYS) + qt_find_package(XKB 0.4.1 PROVIDED_TARGETS XKB::XKB) +endif() +if((LINUX) OR QT_FIND_ALL_PACKAGES_ALWAYS) + qt_find_package(XRender PROVIDED_TARGETS PkgConfig::xrender) +endif() #### Tests diff --git a/util/cmake/configurejson2cmake.py b/util/cmake/configurejson2cmake.py index 040e8ee7b4..d1646ed082 100755 --- a/util/cmake/configurejson2cmake.py +++ b/util/cmake/configurejson2cmake.py @@ -181,9 +181,29 @@ def parseLib(ctx, lib, data, cm_fh, cmake_find_packages_set): if newlib.targetName in cmake_find_packages_set: return + # If certain libraries are used within a feature, but the feature + # is only emitted conditionally with a simple condition (like + # 'on Windows' or 'on Linux'), we should enclose the find_package + # call for the library into the same condition. + emit_if = newlib.emit_if + + # Only look through features if a custom emit_if wasn't provided. + if not emit_if: + for feature in data['features']: + feature_data = data['features'][feature] + if 'condition' in feature_data and \ + 'libs.{}'.format(lib) in feature_data['condition'] and \ + 'emitIf' in feature_data and \ + 'config.' in feature_data['emitIf']: + emit_if = feature_data['emitIf'] + break + + if emit_if: + emit_if = map_condition(emit_if) + cmake_find_packages_set.add(newlib.targetName) - cm_fh.write(generate_find_package_info(newlib)) + cm_fh.write(generate_find_package_info(newlib, emit_if=emit_if)) def lineify(label, value, quote=True): @@ -890,7 +910,7 @@ def processLibraries(ctx, data, cm_fh): return for lib in data['libraries']: - parseLib(ctx, lib, data['libraries'][lib], cm_fh, cmake_find_packages_set) + parseLib(ctx, lib, data, cm_fh, cmake_find_packages_set) def processSubconfigs(dir, ctx, data): diff --git a/util/cmake/helper.py b/util/cmake/helper.py index ee4274abd7..d9e9fd16e3 100644 --- a/util/cmake/helper.py +++ b/util/cmake/helper.py @@ -35,7 +35,8 @@ class LibraryMapping: targetName: typing.Optional[str], *, resultVariable: typing.Optional[str] = None, extra: typing.List[str] = [], - appendFoundSuffix: bool = True) -> None: + appendFoundSuffix: bool = True, + emit_if: str = '') -> None: self.soName = soName self.packageName = packageName self.resultVariable = resultVariable @@ -43,6 +44,10 @@ class LibraryMapping: self.extra = extra self.targetName = targetName + # if emit_if is non-empty, the generated find_package call + # for a library will be surrounded by this condition. + self.emit_if = emit_if + def is_qt(self) -> bool: return self.packageName == 'Qt' \ or self.packageName == 'Qt5' \ @@ -172,6 +177,7 @@ _qt_library_map = [ # qtzlib: No longer supported. ] +# Note that the library map is adjusted dynamically further down. _library_map = [ # 3rd party: LibraryMapping('atspi', 'ATSPI2', 'PkgConfig::ATSPI2'), @@ -247,6 +253,20 @@ _library_map = [ ] +def _adjust_library_map(): + # Assign a Linux condition on all x and wayland related packages. + # We don't want to get pages of package not found messages on + # Windows and macOS, and this also improves configure time on + # those platforms. + linux_package_prefixes = ['xcb', 'x11', 'xkb', 'xrender', 'xlib', 'wayland'] + for i, _ in enumerate(_library_map): + if any([_library_map[i].soName.startswith(p) for p in linux_package_prefixes]): + _library_map[i].emit_if = 'config.linux' + + +_adjust_library_map() + + def find_3rd_party_library_mapping(soName: str) -> typing.Optional[LibraryMapping]: for i in _library_map: if i.soName == soName: @@ -356,8 +376,10 @@ def map_3rd_party_library(lib: str) -> str: return mapping.targetName + libpostfix -def generate_find_package_info(lib: LibraryMapping, use_qt_find_package: bool=True, *, - indent: int = 0) -> str: +def generate_find_package_info(lib: LibraryMapping, + use_qt_find_package: bool=True, *, + indent: int = 0, + emit_if: str = '') -> str: isRequired = False extra = lib.extra.copy() @@ -377,7 +399,8 @@ def generate_find_package_info(lib: LibraryMapping, use_qt_find_package: bool=Tr extra += ['PROVIDED_TARGETS', cmake_target_name] result = '' - ind = ' ' * indent + one_ind = ' ' + ind = one_ind * indent if use_qt_find_package: if extra: @@ -393,4 +416,12 @@ def generate_find_package_info(lib: LibraryMapping, use_qt_find_package: bool=Tr else: result = '{}find_package({})\n'.format(ind, lib.packageName) + # If a package should be found only in certain conditions, wrap + # the find_package call within that condition. + if emit_if: + result = "if(({emit_if}) OR QT_FIND_ALL_PACKAGES_ALWAYS)\n" \ + "{ind}{result}endif()\n".format(emit_if=emit_if, + result=result, + ind=one_ind) + return result |