diff options
Diffstat (limited to 'mkspecs/features')
-rw-r--r-- | mkspecs/features/default_pre.prf | 29 | ||||
-rw-r--r-- | mkspecs/features/help.prf | 3 | ||||
-rw-r--r-- | mkspecs/features/qt.prf | 102 | ||||
-rw-r--r-- | mkspecs/features/qt_config.prf | 12 | ||||
-rw-r--r-- | mkspecs/features/qt_functions.prf | 73 | ||||
-rw-r--r-- | mkspecs/features/qt_module.prf | 23 | ||||
-rw-r--r-- | mkspecs/features/symbian/qt_demo.prf | 17 | ||||
-rw-r--r-- | mkspecs/features/symbian/qt_example.prf | 17 | ||||
-rw-r--r-- | mkspecs/features/uitools.prf | 2 | ||||
-rw-r--r-- | mkspecs/features/win32/qaxcontainer.prf | 4 | ||||
-rw-r--r-- | mkspecs/features/win32/qaxserver.prf | 3 |
11 files changed, 203 insertions, 82 deletions
diff --git a/mkspecs/features/default_pre.prf b/mkspecs/features/default_pre.prf index 2e82f03eb9..adcdbb73e9 100644 --- a/mkspecs/features/default_pre.prf +++ b/mkspecs/features/default_pre.prf @@ -1,3 +1,32 @@ load(exclusive_builds) ### Qt 5: remove "uic" and "resources" - or add "qt" CONFIG = lex yacc warn_on debug uic resources $$CONFIG + +exists($$_PRO_FILE_PWD_/sync.profile) { + PRO_BASENAME = $$basename(_PRO_FILE_) + + # Try to detect proper QTDIR path. We require QTDIR, as syncqt uses that to create qt_module.pri + # forwarding files. If we don't find QTDIR, we avoid creating the fwd files, since you then need + # to do a 'make install;' before you can use the module + # (ie. we don't use QT_INSTALL_DATA for fwd includes. This path needs a full copy) + isEmpty(QTDIR) { + QTDIR = $$(QTDIR) + isEmpty(QTDIR):QTDIR = $$QT_BUILD_TREE + isEmpty(QTDIR):QTDIR = $$dirname(_QMAKE_CACHE_) + isEmpty(QTDIR) { + QMAKE_BASED_QTDIR = $$dirname(QMAKE_QMAKE) + QMAKE_BASED_QTDIR = $$dirname(QMAKE_BASED_QTDIR) + exists($$QMAKE_BASED_QTDIR/mkspecs/qconfig.pri): QTDIR = $$QMAKE_BASED_QTDIR + unset(QMAKE_BASED_QTDIR) + } + } + + isEmpty(QTDIR):QTFWD="-no-module-fwd" + else:QTFWD="-qtdir $$QTDIR" + + message("Running syncqt for $$PRO_BASENAME in $$OUT_PWD") + qtPrepareTool(QMAKE_SYNCQT, syncqt) + system("$$QMAKE_SYNCQT $$QTFWD -outdir $$OUT_PWD $$_PRO_FILE_PWD_") + unset(QTFWD) + unset(PRO_BASENAME) +} diff --git a/mkspecs/features/help.prf b/mkspecs/features/help.prf index 15685e7a57..d8ba8c3537 100644 --- a/mkspecs/features/help.prf +++ b/mkspecs/features/help.prf @@ -1,4 +1,3 @@ -INCLUDEPATH = $$QMAKE_INCDIR_QT/QtHelp $$INCLUDEPATH QT += xml sql -qtAddLibrary(QtHelp) +qtAddModule(help) diff --git a/mkspecs/features/qt.prf b/mkspecs/features/qt.prf index e4a5ef7162..21fdd38e70 100644 --- a/mkspecs/features/qt.prf +++ b/mkspecs/features/qt.prf @@ -11,6 +11,11 @@ win32 { } contains(DEFINES, QT_MAKEDLL)|contains(DEFINES, QT_DLL):QMAKE_QT_DLL = 1 } + # Some files include qplatformdefs.h, which lives in the individual mkspec directory + # However, if QMAKESPEC_ORIGINAL is set, the module/app is outside of the QtBase + # directory, and using the default profile. So we add the original mkspecs directory + # to the include path + !isEmpty(QMAKESPEC_ORIGINAL):INCLUDEPATH += $$QMAKESPEC_ORIGINAL } CONFIG(release, debug|release):DEFINES += QT_NO_DEBUG no_keywords:DEFINES += QT_NO_KEYWORDS @@ -35,23 +40,6 @@ plugin { #Qt plugins INCLUDEPATH = $$QMAKE_INCDIR_QT $$INCLUDEPATH #prepending prevents us from picking up "stale" includes win32:INCLUDEPATH += $$QMAKE_INCDIR_QT/ActiveQt -# As declarative now uses OpenGL in the API, force include it to avoid having to update all projects -contains(QT, declarative): QT += opengl - -# As order does matter for static libs, we reorder the QT variable here -TMPLIBS = declarative webkit phonon multimedia dbus testlib script scripttools svg qt3support sql xmlpatterns xml egl opengl openvg gui network core meegographicssystemhelper -for(QTLIB, $$list($$TMPLIBS)) { - contains(QT, $$QTLIB): QT_ORDERED += $$QTLIB -} - -QT_UNKNOWN = $$QT -QT_UNKNOWN -= $$QT_ORDERED -QT = $$QT_ORDERED -for(QTLIB, $$list($$QT_UNKNOWN)) { - !contains(TMPLIBS, $$QTLIB):message("Warning: unknown QT: $$QTLIB") -} - - QT_PLUGIN_VERIFY = QTPLUGIN DEPLOYMENT_PLUGIN for(QT_CURRENT_VERIFY, $$list($$QT_PLUGIN_VERIFY)) { for(QTPLUG, $$list($$lower($$unique($$QT_CURRENT_VERIFY)))) { @@ -132,71 +120,35 @@ for(QT_CURRENT_VERIFY, $$list($$QT_PLUGIN_VERIFY)) { } } } + + + #specific module settings !isEmpty(QT_BUILD_TREE):QMAKE_LIBDIR = $$QT_BUILD_TREE/lib $$QMAKE_LIBDIR #as above, prepending prevents us from picking up "stale" libs QMAKE_LIBDIR += $$QMAKE_LIBDIR_QT + +# Topological ordering of modules based on their QT.<module>.depends variable +QT = $$resolve_depends($$QT, "QT.") +QT_DEPENDS= + for(QTLIB, $$list($$lower($$unique(QT)))) { - unset(qlib_style) - !qt_debug:!qt_release { - CONFIG(debug, debug|release):qlib_style = debug - else:qlib_style = release - } else:CONFIG(qt_debug, qt_debug|qt_release) { - qlib_style = debug - } else { - qlib_style = release - } + isEmpty(QT.$${QTLIB}.name) { + message("Warning: unknown QT module: $$QTLIB") + next() + } - unset(qlib) - isEqual(QTLIB, gui):qlib = QtGui - else:isEqual(QTLIB, network):qlib = QtNetwork - else:isEqual(QTLIB, xml):qlib = QtXml - else:isEqual(QTLIB, xmlpatterns):qlib = QtXmlPatterns - else:isEqual(QTLIB, opengl):qlib = QtOpenGL - else:isEqual(QTLIB, openvg):qlib = QtOpenVG - else:isEqual(QTLIB, sql):qlib = QtSql - else:isEqual(QTLIB, core):qlib = QtCore - else:isEqual(QTLIB, canvas):qlib = QtCanvas - else:isEqual(QTLIB, qt3support):qlib = Qt3Support - else:isEqual(QTLIB, svg):qlib = QtSvg - else:isEqual(QTLIB, script):qlib = QtScript - else:isEqual(QTLIB, scripttools):qlib = QtScriptTools - else:isEqual(QTLIB, testlib):qlib = QtTest - else:isEqual(QTLIB, dbus):qlib = QtDBus - else:isEqual(QTLIB, phonon) { - qlib = phonon - INCLUDEPATH += $$QMAKE_INCDIR_QT/phonon_compat - - # The Helix backend requires this. Since we can't let a plugin set it, - # we bump the values for all Symbian Phonon plugins. - symbian:isEmpty(TARGET.EPOCHEAPSIZE):TARGET.EPOCHEAPSIZE = 0x040000 0x1600000 - - } else:isEqual(QTLIB, webkit) { - qlib = QtWebKit - aix-xlc { - # Flags recommended by IBM when using WebKit - QMAKE_LFLAGS -= -bmaxdata:0x80000000 - QMAKE_LFLAGS += -bmaxdata:0xD0000000/dsa - } - } else:isEqual(QTLIB, declarative):qlib = QtDeclarative - else:isEqual(QTLIB, multimedia):qlib = QtMultimedia - else:isEqual(QTLIB, meegographicssystemhelper):qlib = QtMeeGoGraphicsSystemHelper - else:message("Unknown QT: $$QTLIB"):qlib = - !isEmpty(qlib) { - target_qt:isEqual(TARGET, qlib) { - warning($$TARGET cannot have a QT of $$QTLIB) - } else { - DEFINES *= $$upper(QT_$${QTLIB}_LIB) - isEqual(QTLIB, opengl):CONFIG += opengl - isEqual(QTLIB, openvg):CONFIG += openvg - isEqual(QTLIB, qt3support):DEFINES *= QT3_SUPPORT - isEqual(QTLIB, testlib):CONFIG += console - isEqual(QTLIB, dbus):CONFIG += dbusadaptors dbusinterfaces - - qtAddLibrary($$qlib) - } - } + target_qt:isEqual(TARGET, QTLIB) { + warning($$TARGET cannot have a QT of $$QTLIB) + next() + } + qtAddModule($$QTLIB) + QT_DEPENDS += $$eval(QT.$${QTLIB}.depends) } +# add include paths for all .depends, since module/application might need f.ex. template specializations etc. +QT_DEPENDS -= $$QT +for(QTLIB, $$list($$lower($$unique(QT_DEPENDS)))):INCLUDEPATH += $$INCLUDEPATH $$eval(QT.$${QTLIB}.includes) + qt_compat { !qt_compat_no_warning:QTDIR_build:warning(***USE of COMPAT inside of QTDIR!**) #just for us INCLUDEPATH *= $$QMAKE_INCDIR_QT/Qt diff --git a/mkspecs/features/qt_config.prf b/mkspecs/features/qt_config.prf index de1cac4651..5afd82c84a 100644 --- a/mkspecs/features/qt_config.prf +++ b/mkspecs/features/qt_config.prf @@ -14,7 +14,17 @@ isEmpty(QMAKE_QT_CONFIG)|!exists($$QMAKE_QT_CONFIG) { for(dir, $$list($$unique($$list($$dirname(QMAKE_QT_CONFIG) \ $$split($$list($$[QMAKE_MKSPECS]), $$DIRLIST_SEPARATOR))))) { debug(1, "Loading modules from $${dir}") - for(mod, $$list($$files($$dir/modules/qt_*.pri))):include($$mod) + for(mod, $$list($$files($$dir/modules/qt_*.pri))) { + # For installed Qt these paths will be common for all modules + # For development these will vary per module, and syncqt will override the value in the + # qt_<module>.pri forwarding file + QT_MODULE_INCLUDE_BASE = $$[QT_INSTALL_HEADERS] + QT_MODULE_LIB_BASE = $$[QT_INSTALL_LIBS] + QT_MODULE_PLUGIN_BASE = $$[QT_INSTALL_PLUGINS] + QT_MODULE_BIN_BASE = $$[QT_INSTALL_BINS] + QT_MODULE_IMPORT_BASE = $$[QT_INSTALL_IMPORTS] + include($$mod) + } } } diff --git a/mkspecs/features/qt_functions.prf b/mkspecs/features/qt_functions.prf index 5baf7ce2b4..b16c84864f 100644 --- a/mkspecs/features/qt_functions.prf +++ b/mkspecs/features/qt_functions.prf @@ -92,12 +92,79 @@ defineTest(qtAddLibrary) { return(true) } +defineTest(qtAddModule) { + MODULE_NAME = $$eval(QT.$${1}.name) + MODULE_INCLUDES = $$eval(QT.$${1}.includes) + MODULE_LIBS = $$eval(QT.$${1}.libs) + + CONFIG += $$eval(QT.$${1}.CONFIG) + DEFINES += $$eval(QT.$${1}.DEFINES) + + INCLUDEPATH -= $$MODULE_INCLUDES + INCLUDEPATH = $$MODULE_INCLUDES $$INCLUDEPATH + + unset(LINKAGE) + mac { + CONFIG(qt_framework, qt_framework|qt_no_framework) { #forced + QMAKE_FRAMEWORKPATH *= $${MODULE_LIBS} + FRAMEWORK_INCLUDE = $$MODULE_INCLUDES.framework/Headers + !qt_no_framework_direct_includes:exists($$FRAMEWORK_INCLUDE) { + INCLUDEPATH -= $$FRAMEWORK_INCLUDE + INCLUDEPATH = $$FRAMEWORK_INCLUDE $$INCLUDEPATH + } + LINKAGE = -framework $${MODULE_NAME}$${QT_LIBINFIX} + } else:!qt_no_framework { #detection + for(frmwrk_dir, $$list($$MODULE_LIBS $$QMAKE_LIBDIR $$(DYLD_FRAMEWORK_PATH) /Library/Frameworks)) { + exists($${frmwrk_dir}/$${MODULE_NAME}.framework) { + QMAKE_FRAMEWORKPATH *= $${frmwrk_dir} + FRAMEWORK_INCLUDE = $$frmwrk_dir/$${MODULE_NAME}.framework/Headers + !qt_no_framework_direct_includes:exists($$FRAMEWORK_INCLUDE) { + INCLUDEPATH -= $$FRAMEWORK_INCLUDE + INCLUDEPATH = $$FRAMEWORK_INCLUDE $$INCLUDEPATH + } + LINKAGE = -framework $${MODULE_NAME} + break() + } + } + } + } + isEmpty(LINKAGE) { + # Make sure we can link to uninstalled libraries + !isEqual(MODULE_LIBS, $[QT_INSTALL_LIBS]) { + QMAKE_LIBDIR *= $$MODULE_LIBS + unix:QMAKE_LFLAGS *= "-Wl,-rpath-link,$$MODULE_LIBS" + } + if(!debug_and_release|build_pass):CONFIG(debug, debug|release) { + win32:LINKAGE = -l$${MODULE_NAME}$${QT_LIBINFIX}d + mac:LINKAGE = -l$${MODULE_NAME}$${QT_LIBINFIX}_debug + } + isEmpty(LINKAGE):LINKAGE = -l$${MODULE_NAME}$${QT_LIBINFIX} + } + !isEmpty(QMAKE_LSB) { + QMAKE_LFLAGS *= --lsb-libpath=$$$$QMAKE_LIBDIR_QT + QMAKE_LFLAGS *= -L/opt/lsb/lib + QMAKE_LFLAGS *= --lsb-shared-libs=$${MODULE_NAME}$${QT_LIBINFIX} + } + LIBS += $$LINKAGE + export(CONFIG) + export(DEFINES) + export(LIBS) + export(INCLUDEPATH) + export(QMAKE_FRAMEWORKPATH) + export(QMAKE_LFLAGS) + export(QMAKE_LIBDIR) + return(true) +} + # variable, default defineTest(qtPrepareTool) { - isEmpty($$1) { - !isEmpty(QT_BUILD_TREE):$$1 = $$QT_BUILD_TREE/bin/$$2 - else:$$1 = $$[QT_INSTALL_BINS]/$$2 + MODBASE = $$[QT_INSTALL_BINS] + !isEmpty(QT_BUILD_TREE):MODBASE = $$QT_BUILD_TREE/bin + count(ARGS, 2, greaterThan) { + isEmpty(QT.$${3}.bins):warning("No QT.$${3}.bins, module path ignored for qtPrepareTool($$1, $$2, $$3)") + else:MODBASE = $$eval(QT.$${3}.bins) } + isEmpty($$1):$$1 = $$MODBASE/$$2 $$1 ~= s,[/\\\\],$$QMAKE_DIR_SEP, contains(QMAKE_HOST.os, Windows):!contains($$1, .*\\.(exe|bat)$) { exists($$eval($$1).bat) { diff --git a/mkspecs/features/qt_module.prf b/mkspecs/features/qt_module.prf new file mode 100644 index 0000000000..c49a41581f --- /dev/null +++ b/mkspecs/features/qt_module.prf @@ -0,0 +1,23 @@ +# This file is loaded on-demand, before any .qmake.cache (sometimes *in* .qmake.cache), to loaded +# important settings for modules, such as paths to QtBase, settings etc. +# Consequently, we have to do some stunts to figure out where to find qmodule.pri. + +isEmpty(QMAKE_QT_MODULE)|!exists($$QMAKE_QT_MODULE) { + exists($$QTDIR/mkspecs/qmodule.pri):QMAKE_QT_MODULE = $$QTDIR/mkspecs/qmodule.pri + QMAKE_CACHE_DIR = $$dirname(_QMAKE_CACHE_) + !exists($$QMAKE_QT_MODULE):exists($$QMAKE_CACHE_DIR/mkspecs/qmodule.pri):QMAKE_QT_MODULE = $$QMAKE_CACHE_DIR/mkspecs/qmodule.pri + !exists($$QMAKE_QT_MODULE):exists($$QMAKE_CACHE_DIR/qtbase/mkspecs/qmodule.pri):QMAKE_QT_MODULE = $$QMAKE_CACHE_DIR/qtbase/mkspecs/qmodule.pri + !exists($$QMAKE_QT_MODULE):if(!isEmpty(QT_BUILD_TREE) & exists($$QT_BUILD_TREE/mkspecs/qmodule.pri)):QMAKE_QT_MODULE = $$QT_BUILD_TREE/mkspecs/qmodule.pri + !exists($$QMAKE_QT_MODULE):exists($$[QT_INSTALL_DATA]/mkspecs/qmodule.pri):QMAKE_QT_MODULE = $$[QT_INSTALL_DATA]/mkspecs/qmodule.pri +} + +!exists($$QMAKE_QT_MODULE)|!include($$QMAKE_QT_MODULE, "", true) { + error("Cannot load qmodule.pri!") +} else { + debug(1, "Loaded qmodule.pri from ($$QMAKE_QT_MODULE)") +} +mac { + !isEmpty(QMAKE_RPATHDIR){ + CONFIG += absolute_library_soname + } +} diff --git a/mkspecs/features/symbian/qt_demo.prf b/mkspecs/features/symbian/qt_demo.prf new file mode 100644 index 0000000000..9c4d96c1da --- /dev/null +++ b/mkspecs/features/symbian/qt_demo.prf @@ -0,0 +1,17 @@ +RSS_RULES ="group_name=\"QtDemos\";" + +nokiaVendor = "Nokia, Qt" +vendorinfo = \ + "; Localised Vendor name" \ + "%{$$addLanguageDependentPkgItem(nokiaVendor)}" \ + " " \ + "; Unique Vendor name" \ + ":\"$$nokiaVendor\"" \ + " " + +demos_deployment.pkg_prerules += vendorinfo +DEPLOYMENT += demos_deployment + +isEmpty(ICON):contains(TEMPLATE, ".*app"):contains(QT, gui):contains(CONFIG, qt):!contains(CONFIG, "no_icon") { + ICON = $$QT_SOURCE_TREE/src/s60installs/qt.svg +} diff --git a/mkspecs/features/symbian/qt_example.prf b/mkspecs/features/symbian/qt_example.prf new file mode 100644 index 0000000000..8c523fb00f --- /dev/null +++ b/mkspecs/features/symbian/qt_example.prf @@ -0,0 +1,17 @@ +RSS_RULES ="group_name=\"QtExamples\";" + +nokiaVendor = "Nokia, Qt" +vendorinfo = \ + "; Localised Vendor name" \ + "%{$$addLanguageDependentPkgItem(nokiaVendor)}" \ + " " \ + "; Unique Vendor name" \ + ":\"$$nokiaVendor\"" \ + " " + +examples_deployment.pkg_prerules += vendorinfo +DEPLOYMENT += examples_deployment + +isEmpty(ICON):contains(TEMPLATE, ".*app"):contains(QT, gui):contains(CONFIG, qt):!contains(CONFIG, "no_icon") { + ICON = $$QT_SOURCE_TREE/src/s60installs/qt.svg +} diff --git a/mkspecs/features/uitools.prf b/mkspecs/features/uitools.prf index 65995770de..10835d4ab3 100644 --- a/mkspecs/features/uitools.prf +++ b/mkspecs/features/uitools.prf @@ -11,4 +11,4 @@ CONFIG(debug, debug|release) { } LIBS += $$QTUITOOLS_LINKAGE -INCLUDEPATH = $$QMAKE_INCDIR_QT/QtUiTools $$INCLUDEPATH +INCLUDEPATH = $$QT.uitools.includes $$INCLUDEPATH diff --git a/mkspecs/features/win32/qaxcontainer.prf b/mkspecs/features/win32/qaxcontainer.prf index 34c6dfed42..2d0ff851ba 100644 --- a/mkspecs/features/win32/qaxcontainer.prf +++ b/mkspecs/features/win32/qaxcontainer.prf @@ -8,6 +8,10 @@ LIBS += -lQAxContainer } +QMAKE_LIBDIR += $$QT.activeqt.libs +INCLUDEPATH += $$QT.activeqt.includes +QMAKE_LIBS += $$QMAKE_LIBS_GUI + qtPrepareTool(QMAKE_DUMPCPP, dumpcpp) dumpcpp_decl.commands = $$QMAKE_DUMPCPP ${QMAKE_FILE_IN} -o ${QMAKE_FILE_BASE} diff --git a/mkspecs/features/win32/qaxserver.prf b/mkspecs/features/win32/qaxserver.prf index a6c0869540..678c2ccb83 100644 --- a/mkspecs/features/win32/qaxserver.prf +++ b/mkspecs/features/win32/qaxserver.prf @@ -7,6 +7,7 @@ ACTIVEQT_VERSION = $$VERSION isEmpty(ACTIVEQT_VERSION):ACTIVEQT_VERSION = 1.0 DEFINES += QAXSERVER +INCLUDEPATH += $$QT.activeqt.includes contains(TEMPLATE, "vc.*") { ACTIVEQT_IDC = $${QMAKE_IDC} ### Qt5: remove me @@ -56,4 +57,6 @@ qt:!target_qt { QMAKE_LIBS_QT_ENTRY = -lQAxServer } dll:QMAKE_LIBS += $$QMAKE_LIBS_QT_ENTRY + QMAKE_LIBDIR += $$QT.activeqt.libs + QMAKE_LIBS += $$QMAKE_LIBS_GUI } |