From dc1f65d4cf4a758ea99effe1781f859f92f9d1fc Mon Sep 17 00:00:00 2001 From: Oswald Buddenhagen Date: Thu, 19 Nov 2015 17:11:05 +0100 Subject: make module .pri files more flexible save the actual library/framework name and framework paths in the .pri file instead of computing them again at use time in qt.prf. qt_no_framework_direct_includes inherently requires a use-time decision, so this ugliness remains. Change-Id: I09b2775e7d8e1d52e3af0d663e1babde10ae4814 Reviewed-by: Joerg Bornemann Reviewed-by: Oswald Buddenhagen --- mkspecs/features/qt.prf | 78 ++++++++++++++++++++----------------- mkspecs/features/qt_module_pris.prf | 30 ++++++++------ 2 files changed, 62 insertions(+), 46 deletions(-) (limited to 'mkspecs') diff --git a/mkspecs/features/qt.prf b/mkspecs/features/qt.prf index 72632a14ee..f62b6bb139 100644 --- a/mkspecs/features/qt.prf +++ b/mkspecs/features/qt.prf @@ -67,8 +67,10 @@ for(ever) { unset(BAD_QT) for(QTLIB, FULL_QT$$var_sfx) { MODULE_NAME = $$eval(QT.$${QTLIB}.name) + MODULE_MODULE = $$eval(QT.$${QTLIB}.module) MODULE_INCLUDES = $$eval(QT.$${QTLIB}.includes) MODULE_LIBS = $$eval(QT.$${QTLIB}.libs) + MODULE_FRAMEWORKS = $$eval(QT.$${QTLIB}.frameworks) MODULE_CONFIG = $$eval(QT.$${QTLIB}.module_config) isEmpty(MODULE_NAME) { @@ -88,49 +90,55 @@ for(ever) { MODULE_LIBS_ADD = $$MODULE_LIBS MODULE_LIBS_ADD -= $$QMAKE_DEFAULT_LIBDIRS - LINKAGE = - contains(MODULE_CONFIG, lib_bundle) { - FRAMEWORK_INCLUDE = $${MODULE_LIBS}/$${MODULE_NAME}.framework/Headers - !qt_no_framework_direct_includes { - INCLUDEPATH *= $$FRAMEWORK_INCLUDE + !contains(MODULE_CONFIG, v2) { + # Backwards compatibility with pre-5.6 module .pri files + + contains(MODULE_CONFIG, lib_bundle) { + MODULE_FRAMEWORKS = $$MODULE_LIBS + inc = $$MODULE_LIBS/$${MODULE_NAME}.framework/Headers + MODULE_INCLUDES = $$inc + contains(MODULE_CONFIG, internal_module): \ + MODULE_INCLUDES += \ + $$inc/$$eval(QT.$${QTLIB}.VERSION) \ + $$inc/$$eval(QT.$${QTLIB}.VERSION)/$$MODULE_NAME + } else { + # Re-insert the major version in the library name (cf qt5LibraryTarget above) + MODULE_NAME ~= s,^Qt,Qt$$QT_MAJOR_VERSION, } - contains(MODULE_CONFIG, internal_module): \ - INCLUDEPATH += \ - $$FRAMEWORK_INCLUDE/$$eval(QT.$${QTLIB}.VERSION) \ - $$FRAMEWORK_INCLUDE/$$eval(QT.$${QTLIB}.VERSION)/$$MODULE_NAME - QMAKE_FRAMEWORKPATH *= $${MODULE_LIBS} - !contains(MODULE_CONFIG, no_link): \ - LINKAGE += -framework $${MODULE_NAME}$${QT_LIBINFIX} - } else { - INCLUDEPATH *= $$MODULE_INCLUDES - } - - # Only link to this module if a libs directory is set, else this is just a module - # to give access to sources or include files, and not for linking. - !isEmpty(MODULE_LIBS):!contains(MODULE_CONFIG, no_link) { - # Re-insert the major version in the library name (cf qt5LibraryTarget above) - # unless it's a framework build - !contains(MODULE_CONFIG, lib_bundle): \ - MODULE_NAME ~= s,^Qt,Qt$$QT_MAJOR_VERSION, + # Only link to this module if a libs directory is set, else this is just a module + # to give access to sources or include files, and not for linking. + !isEmpty(MODULE_LIBS):!contains(MODULE_CONFIG, no_link): \ + MODULE_MODULE = $${MODULE_NAME}$${QT_LIBINFIX} + } - isEmpty(LINKAGE) { + # Frameworks shouldn't need include paths, but much code does not use + # module-qualified #includes, so by default we add paths which point + # directly into the frameworks. Private modules have somewhat convoluted + # header paths, so adding them is necessary in every case. + !if(contains(MODULE_CONFIG, lib_bundle):qt_no_framework_direct_includes) \ + |contains(MODULE_CONFIG, internal_module): \ + INCLUDEPATH *= $$MODULE_INCLUDES + QMAKE_FRAMEWORKPATH *= $$MODULE_FRAMEWORKS + !isEmpty(MODULE_MODULE) { + contains(MODULE_CONFIG, lib_bundle) { + LIBS$$var_sfx += -framework $$MODULE_MODULE + } else { !isEmpty(MODULE_LIBS_ADD): \ - LINKAGE = -L$$MODULE_LIBS_ADD - lib = $${MODULE_NAME}$${QT_LIBINFIX}$$qtPlatformTargetSuffix() - LINKAGE += -l$$lib + LIBS$$var_sfx += -L$$MODULE_LIBS_ADD + + lib = $$MODULE_MODULE$$qtPlatformTargetSuffix() + LIBS$$var_sfx += -l$$lib contains(MODULE_CONFIG, staticlib): \ PRE_TARGETDEPS *= $$MODULE_LIBS/$${QMAKE_PREFIX_STATICLIB}$${lib}.$${QMAKE_EXTENSION_STATICLIB} - } - LIBS$$var_sfx += $$LINKAGE - - !isEmpty(QMAKE_LSB) { - !isEmpty(MODULE_LIBS_ADD): \ - QMAKE_LFLAGS *= --lsb-libpath=$$MODULE_LIBS_ADD - QMAKE_LFLAGS *= --lsb-shared-libs=$${MODULE_NAME}$${QT_LIBINFIX} - QMAKE_LIBDIR *= /opt/lsb/lib + !isEmpty(QMAKE_LSB) { + !isEmpty(MODULE_LIBS_ADD): \ + QMAKE_LFLAGS *= --lsb-libpath=$$MODULE_LIBS_ADD + QMAKE_LFLAGS *= --lsb-shared-libs=$$lib + QMAKE_LIBDIR *= /opt/lsb/lib + } } } } diff --git a/mkspecs/features/qt_module_pris.prf b/mkspecs/features/qt_module_pris.prf index fdcb9df270..e293a0a4e5 100644 --- a/mkspecs/features/qt_module_pris.prf +++ b/mkspecs/features/qt_module_pris.prf @@ -46,18 +46,22 @@ MODULE_FWD_PRI = $$mod_work_pfx/qt_lib_$${MODULE_ID}.pri module_rundep = "QT.$${MODULE_ID}.run_depends = $$replace(QT_PRIVATE, -private$, _private)" else: \ module_rundep = + module_build_type = v2 static: \ - module_build_type = staticlib - else: lib_bundle: \ - module_build_type = lib_bundle - else: \ - module_build_type = - equals(TEMPLATE, aux): \ - module_build_type += no_link + module_build_type += staticlib + lib_bundle { + module_build_type += lib_bundle + MODULE_FRAMEWORKS = " \$\$QT_MODULE_LIB_BASE" + } internal_module: \ module_build_type += internal_module ltcg: \ module_build_type += ltcg + module_module = + !equals(TEMPLATE, aux) { + module_module = $$TARGET$$QT_LIBINFIX + !lib_bundle: module_module ~= s,^Qt,Qt$$QT_MAJOR_VERSION, + } !isEmpty(MODULE_CONFIG): \ module_config = "QT.$${MODULE_ID}.CONFIG = $$MODULE_CONFIG" else: \ @@ -77,9 +81,11 @@ MODULE_FWD_PRI = $$mod_work_pfx/qt_lib_$${MODULE_ID}.pri "QT.$${MODULE_ID}.PATCH_VERSION = $$section(VERSION, ., 2, 2)" \ "" \ "QT.$${MODULE_ID}.name = $$TARGET" \ + "QT.$${MODULE_ID}.module = $$module_module" \ "QT.$${MODULE_ID}.libs = $$module_libs" \ $$module_master \ - "QT.$${MODULE_ID}.includes = $$MODULE_INCLUDES" + "QT.$${MODULE_ID}.includes = $$MODULE_INCLUDES" \ + "QT.$${MODULE_ID}.frameworks =$$MODULE_FRAMEWORKS" !host_build: MODULE_PRI_CONT += \ "QT.$${MODULE_ID}.bins = \$\$QT_MODULE_BIN_BASE" \ "QT.$${MODULE_ID}.libexecs = \$\$QT_MODULE_LIBEXEC_BASE" \ @@ -97,7 +103,7 @@ MODULE_FWD_PRI = $$mod_work_pfx/qt_lib_$${MODULE_ID}.pri "QT_MODULES += $$MODULE" write_file($$MODULE_PRI, MODULE_PRI_CONT)|error("Aborting.") !internal_module:!no_private_module { - module_build_type += internal_module no_link + module_build_type += internal_module MODULE_PRIVATE_PRI_CONT = \ "QT.$${MODULE}_private.VERSION = $${VERSION}" \ "QT.$${MODULE}_private.MAJOR_VERSION = $$section(VERSION, ., 0, 0)" \ @@ -105,8 +111,10 @@ MODULE_FWD_PRI = $$mod_work_pfx/qt_lib_$${MODULE_ID}.pri "QT.$${MODULE}_private.PATCH_VERSION = $$section(VERSION, ., 2, 2)" \ "" \ "QT.$${MODULE}_private.name = $${TARGET}" \ # Same name as base module + "QT.$${MODULE}_private.module =" \ "QT.$${MODULE}_private.libs = $$module_libs" \ "QT.$${MODULE}_private.includes = $$MODULE_PRIVATE_INCLUDES" \ + "QT.$${MODULE}_private.frameworks =" \ "QT.$${MODULE}_private.depends = $$replace($$list($$MODULE $$QT_FOR_PRIVATE), -private$, _private)" \ "QT.$${MODULE}_private.module_config =$$join(module_build_type, " ", " ")" write_file($$MODULE_PRIVATE_PRI, MODULE_PRIVATE_PRI_CONT)|error("Aborting.") @@ -169,8 +177,8 @@ MODULE_FWD_PRI = $$mod_work_pfx/qt_lib_$${MODULE_ID}.pri include($$mod_work_pfx/qt_lib_$${pri}.pri) for(mod, mods_to_load) { for(var, $$list(VERSION MAJOR_VERSION MINOR_VERSION PATCH_VERSION \ - name depends run_depends plugin_types module_config CONFIG DEFINES \ - priority includes bins libs libexecs plugins imports qml \ + name module depends run_depends plugin_types module_config CONFIG DEFINES \ + priority includes bins libs frameworks libexecs plugins imports qml \ )):defined(QT.$${mod}.$$var, var):cache(QT.$${mod}.$$var, transient) } cache(QT_MODULES, transient) -- cgit v1.2.3