diff options
Diffstat (limited to 'mkspecs/features/qt_module.prf')
-rw-r--r-- | mkspecs/features/qt_module.prf | 93 |
1 files changed, 69 insertions, 24 deletions
diff --git a/mkspecs/features/qt_module.prf b/mkspecs/features/qt_module.prf index f187b85b6d..e543ea65e6 100644 --- a/mkspecs/features/qt_module.prf +++ b/mkspecs/features/qt_module.prf @@ -32,7 +32,7 @@ host_build { QMAKE_CFLAGS += $$QMAKE_CFLAGS_SPLIT_SECTIONS QMAKE_CXXFLAGS += $$QMAKE_CXXFLAGS_SPLIT_SECTIONS force_bootstrap { - !build_pass: CONFIG += release + !build_pass:contains(QT_CONFIG, release_tools): CONFIG += release contains(QT, core(-private)?|xml) { QT -= core core-private xml QT += bootstrap-private @@ -42,6 +42,11 @@ host_build { } } +CONFIG(shared, static|shared):contains(QT_CONFIG, qt_framework): \ + CONFIG += lib_bundle + +CONFIG += relative_qt_rpath # Qt libraries should be relocatable + ucmodule = $$upper($$MODULE) isEmpty(MODULE_INCNAME): MODULE_INCNAME = $$TARGET @@ -51,6 +56,8 @@ internal_module: \ else: \ MODULE_DEPENDS = $$replace(QT, -private$, ) MODULE_DEPENDS = $$unique(MODULE_DEPENDS) +contains(MODULE_DEPENDS, $$MODULE): \ + error("$$TARGET depends on itself.") contains(TARGET, QtAddOn.*): \ MODULE_DEFINE = QT_ADDON_$${ucmodule}_LIB @@ -73,10 +80,10 @@ CONFIG += qmake_cache target_qt QMAKE_DOCS_TARGETDIR = qt$${MODULE} -load(qt_module_pris) load(qt_common) - !no_module_headers: load(qt_module_headers) +load(qt_module_pris) + INCLUDEPATH *= $$eval(QT.$${MODULE}.includes) $$eval(QT.$${MODULE}_private.includes) # If Qt was configured with -debug-and-release then build the module the same way @@ -86,7 +93,7 @@ INCLUDEPATH *= $$eval(QT.$${MODULE}.includes) $$eval(QT.$${MODULE}_private.inclu contains(QT_CONFIG, build_all):CONFIG += build_all } -linux*:QMAKE_LFLAGS += $$QMAKE_LFLAGS_NOUNDEF +QMAKE_LFLAGS += $$QMAKE_LFLAGS_NOUNDEF QT += $$QT_FOR_PRIVATE unset(QT_FOR_PRIVATE) @@ -99,17 +106,15 @@ else: \ DEFINES += QT_BUILD_$${ucmodule}_LIB # OS X and iOS frameworks -mac:CONFIG(shared, static|shared):contains(QT_CONFIG, qt_framework) { +lib_bundle { # Set the CFBundleIdentifier prefix for Qt frameworks QMAKE_TARGET_BUNDLE_PREFIX = org.qt-project #QMAKE_FRAMEWORK_VERSION = 4.0 - CONFIG += sliced_bundle qt_framework + CONFIG += sliced_bundle header_module { CONFIG += bundle QMAKE_BUNDLE_EXTENSION = .framework QMAKE_INFO_PLIST = $$QMAKESPEC/Info.plist.lib - } else { - CONFIG += lib_bundle } CONFIG -= qt_install_headers #no need to install these as well !debug_and_release|!build_all|CONFIG(release, debug|release) { @@ -127,7 +132,6 @@ mac:CONFIG(shared, static|shared):contains(QT_CONFIG, qt_framework) { } mac { - CONFIG += explicitlib macx-g++ { QMAKE_CFLAGS += -fconstant-cfstrings QMAKE_CXXFLAGS += -fconstant-cfstrings @@ -187,7 +191,49 @@ equals(QT_ARCH, i386):contains(QT_CPU_FEATURES.$$QT_ARCH, sse2):compiler_support QMAKE_CXXFLAGS += -mfpmath=sse } -android: CONFIG += qt_android_deps +android: CONFIG += qt_android_deps no_linker_version_script + +!header_module:unix:!isEmpty(QMAKE_LFLAGS_VERSION_SCRIPT):!no_linker_version_script:!static { + verscript = $$OUT_PWD/$${TARGET}.version + QMAKE_LFLAGS += $${QMAKE_LFLAGS_VERSION_SCRIPT}$$verscript + + internal_module { + verscript_content = "Qt_$${QT_MAJOR_VERSION}_PRIVATE_API { *; };" + } else { + verscript_content = "Qt_$${QT_MAJOR_VERSION}_PRIVATE_API {" \ + " qt_private_api_tag*;" + for(header, SYNCQT.PRIVATE_HEADER_FILES): \ + verscript_content += " @FILE:$${_PRO_FILE_PWD_}/$$header@" + verscript_content += "};" + + current = Qt_$$QT_MAJOR_VERSION + verscript_content += "$$current { *; };" + isEmpty(QT_NAMESPACE): tag_symbol = qt_version_tag + else: tag_symbol = qt_version_tag_$$QT_NAMESPACE + + for(i, 0..$$QT_MINOR_VERSION) { + previous = $$current + current = Qt_$${QT_MAJOR_VERSION}.$$i + equals(i, $$QT_MINOR_VERSION): verscript_content += "$$current { $$tag_symbol; } $$previous;" + else: verscript_content += "$$current {} $$previous;" + } + + # Add a post-processing step to replace the @FILE:filename@ + verscriptprocess.commands = perl $${PWD}/data/unix/findclasslist.pl < $${verscript}.in > $@ + verscriptprocess.target = $$verscript + for(header, SYNCQT.PRIVATE_HEADER_FILES): \ + verscriptprocess.depends += $${_PRO_FILE_PWD_}/$$header + verscriptprocess.depends += $${verscript}.in + QMAKE_EXTRA_TARGETS += verscriptprocess + PRE_TARGETDEPS += $$verscript + verscript = $${verscript}.in + } + write_file($$verscript, verscript_content)|error("Aborting.") + unset(current) + unset(previous) + unset(verscript) + unset(verscript_content) +} #install directives load(qt_installs) @@ -195,7 +241,7 @@ load(qt_installs) load(qt_targets) # this builds on top of qt_common -unix|mingw { +!internal_module:!lib_bundle:if(unix|mingw) { CONFIG += create_pc QMAKE_PKGCONFIG_DESTDIR = pkgconfig host_build: \ @@ -215,19 +261,18 @@ unix|mingw { pclib_replace.replace = $$QMAKE_PKGCONFIG_LIBDIR pclib_replace.CONFIG = path QMAKE_PKGCONFIG_INSTALL_REPLACE += pclib_replace - - unix { - CONFIG += create_libtool explicitlib - host_build: \ - QMAKE_LIBTOOL_LIBDIR = $$[QT_HOST_LIBS] - else: \ - QMAKE_LIBTOOL_LIBDIR = "=$$[QT_INSTALL_LIBS/raw]" - ltlib_replace.match = $$lib_replace.match - !isEmpty(lib_replace.replace): \ - ltlib_replace.replace = $$QMAKE_LIBTOOL_LIBDIR - ltlib_replace.CONFIG = path - QMAKE_LIBTOOL_INSTALL_REPLACE += ltlib_replace - } +} +!lib_bundle:unix { + CONFIG += create_libtool + host_build: \ + QMAKE_LIBTOOL_LIBDIR = $$[QT_HOST_LIBS] + else: \ + QMAKE_LIBTOOL_LIBDIR = "=$$[QT_INSTALL_LIBS/raw]" + ltlib_replace.match = $$lib_replace.match + !isEmpty(lib_replace.replace): \ + ltlib_replace.replace = $$QMAKE_LIBTOOL_LIBDIR + ltlib_replace.CONFIG = path + QMAKE_LIBTOOL_INSTALL_REPLACE += ltlib_replace } contains(QT_PRODUCT, OpenSource.*):DEFINES *= QT_OPENSOURCE |