From f329dccb797bcbb45bb5fbf7e9234279454d6d1e Mon Sep 17 00:00:00 2001 From: Oswald Buddenhagen Date: Fri, 25 Jan 2013 14:54:57 +0100 Subject: use correct module names in pkg-config Requires: field Task-number: QTBUG-29309 Change-Id: Id22d4e2707ceb3421dc6eb5effe16a03c4769d26 Reviewed-by: Thiago Macieira --- mkspecs/features/qt_module.prf | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) (limited to 'mkspecs') diff --git a/mkspecs/features/qt_module.prf b/mkspecs/features/qt_module.prf index 19cdc2a26a..6b58457a9a 100644 --- a/mkspecs/features/qt_module.prf +++ b/mkspecs/features/qt_module.prf @@ -206,7 +206,8 @@ unix { } unix|win32-g++* { - for(i, QT):QMAKE_PKGCONFIG_REQUIRES += $$eval(QT.$${i}.name) + for(i, QT): \ + QMAKE_PKGCONFIG_REQUIRES += $$replace(QT.$${i}.name, ^Qt, Qt$$eval(QT.$${i}.MAJOR_VERSION)) isEmpty(QMAKE_PKGCONFIG_DESCRIPTION): \ QMAKE_PKGCONFIG_DESCRIPTION = $$replace(TARGET, ^Qt, "Qt ") module } -- cgit v1.2.3 From ca7056ce5b467951060cb1dd13d7d274f10b70c5 Mon Sep 17 00:00:00 2001 From: Oswald Buddenhagen Date: Fri, 25 Jan 2013 14:58:36 +0100 Subject: include all module dependencies into pkg-config Requires: field previously, we'd miss the -private ones (which imply the non-private version). Change-Id: Ib5ae2afaa5b5efda9639b7cc4a080432f2fcce2a Reviewed-by: Thiago Macieira Reviewed-by: Dihan Wickremasuriya Reviewed-by: Joerg Bornemann Reviewed-by: Oswald Buddenhagen --- mkspecs/features/qt_module.prf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'mkspecs') diff --git a/mkspecs/features/qt_module.prf b/mkspecs/features/qt_module.prf index 6b58457a9a..771ddb19da 100644 --- a/mkspecs/features/qt_module.prf +++ b/mkspecs/features/qt_module.prf @@ -206,7 +206,7 @@ unix { } unix|win32-g++* { - for(i, QT): \ + for(i, MODULE_DEPENDS): \ QMAKE_PKGCONFIG_REQUIRES += $$replace(QT.$${i}.name, ^Qt, Qt$$eval(QT.$${i}.MAJOR_VERSION)) isEmpty(QMAKE_PKGCONFIG_DESCRIPTION): \ QMAKE_PKGCONFIG_DESCRIPTION = $$replace(TARGET, ^Qt, "Qt ") module -- cgit v1.2.3 From 50a416889e4b8f033567a634be15b877ecfae981 Mon Sep 17 00:00:00 2001 From: Oswald Buddenhagen Date: Fri, 25 Jan 2013 15:08:17 +0100 Subject: explicitly set QMAKE_PKGCONFIG_NAME otherwise qmake will just take TARGET and lowercase and capitalize it, which not only looks weird, but also does not match the Requires: fields we generate. Change-Id: I4a070ff256fffd2b780acb0361d4213d0032dbb9 Reviewed-by: Thiago Macieira Reviewed-by: Dihan Wickremasuriya Reviewed-by: Joerg Bornemann --- mkspecs/features/qt_module.prf | 1 + 1 file changed, 1 insertion(+) (limited to 'mkspecs') diff --git a/mkspecs/features/qt_module.prf b/mkspecs/features/qt_module.prf index 771ddb19da..50e946937c 100644 --- a/mkspecs/features/qt_module.prf +++ b/mkspecs/features/qt_module.prf @@ -206,6 +206,7 @@ unix { } unix|win32-g++* { + QMAKE_PKGCONFIG_NAME = $$replace(TARGET, ^Qt, Qt$$section(VERSION, ., 0, 0)) for(i, MODULE_DEPENDS): \ QMAKE_PKGCONFIG_REQUIRES += $$replace(QT.$${i}.name, ^Qt, Qt$$eval(QT.$${i}.MAJOR_VERSION)) isEmpty(QMAKE_PKGCONFIG_DESCRIPTION): \ -- cgit v1.2.3 From 839009c74f88e397f5bc6fad4dc5ce497072ef4b Mon Sep 17 00:00:00 2001 From: Oswald Buddenhagen Date: Thu, 24 Jan 2013 20:32:30 +0100 Subject: fix duplicated installation of qml example files we need to collect the sources of the install targets for the check that all files have been properly handled, but of course we must not add these files to the source install target, as that would mean double installation. Change-Id: I6acb56f2a993b6ed81d1031d5dc0a0da30a53b54 Reviewed-by: Joerg Bornemann --- mkspecs/features/qt_example_installs.prf | 42 +++++++++++++++++++------------- 1 file changed, 25 insertions(+), 17 deletions(-) (limited to 'mkspecs') diff --git a/mkspecs/features/qt_example_installs.prf b/mkspecs/features/qt_example_installs.prf index 5417469909..5a87eeba64 100644 --- a/mkspecs/features/qt_example_installs.prf +++ b/mkspecs/features/qt_example_installs.prf @@ -9,6 +9,22 @@ # We mean it. # +defineTest(addInstallFiles) { + for(sf, 2) { + sf = $$relative_path($$sf, $$_PRO_FILE_PWD_) + contains(sf, \\..*) { + check_examples: message("Notice: $$_PRO_FILE_ refers to $$sf") + } else { + sfp = $$replace(sf, /.*, ) + !equals(sfp, $$sf): \ + $$1 *= $$sfp + else: \ + $$1 += $$sf + } + } + export($$1) +} + probase = $$relative_path($$_PRO_FILE_PWD_, $$dirname(_QMAKE_CONF_)/examples) !isEmpty(probase):!contains(probase, ^\\..*) { for(ex, EXAMPLE_FILES): \ @@ -42,34 +58,26 @@ probase = $$relative_path($$_PRO_FILE_PWD_, $$dirname(_QMAKE_CONF_)/examples) # Just for Qt Creator OTHER_FILES += $$sourcefiles - for(inst, INSTALLS): \ - !equals(inst, target):!contains($${inst}.CONFIG, no_check_exist): \ - for(file, $${inst}.files): \ - sourcefiles += $$files($$absolute_path($$file, $$_PRO_FILE_PWD_)) sourcefiles += \ $$_PRO_FILE_ $$RC_FILE $$DEF_FILE \ $$SOURCES $$HEADERS $$FORMS $$RESOURCES $$TRANSLATIONS \ $$DBUS_ADAPTORS $$DBUS_INTERFACES - for(sf, sourcefiles) { - sf = $$relative_path($$sf, $$_PRO_FILE_PWD_) - contains(sf, \\..*) { - check_examples: message("Notice: $$_PRO_FILE_ refers to $$sf") - } else { - sfp = $$replace(sf, /.*, ) - !equals(sfp, $$sf): \ - sources.files *= $$sfp - else: \ - sources.files += $$sf - } - } + addInstallFiles(sources.files, $$sourcefiles) sources.path = $$[QT_INSTALL_EXAMPLES]/$$probase INSTALLS += sources check_examples { + srcfiles = $$sources.files + for(inst, INSTALLS): \ + !equals(inst, target):!contains($${inst}.CONFIG, no_check_exist): \ + for(file, $${inst}.files): \ + instfiles += $$files($$absolute_path($$file, $$_PRO_FILE_PWD_)) + addInstallFiles(srcfiles, $$instfiles) + thefiles = $$files($$_PRO_FILE_PWD_/*) for(i, thefiles): \ allfiles += $$relative_path($$i, $$_PRO_FILE_PWD_) - for(i, sources.files): \ + for(i, srcfiles): \ allfiles -= $$relative_path($$i, $$_PRO_FILE_PWD_) for(i, SUBDIRS) { sd = $$eval($${i}.file) -- cgit v1.2.3 From 2b397f985e4ef6ae5c0571a928bb1320fb048c61 Mon Sep 17 00:00:00 2001 From: Oswald Buddenhagen Date: Fri, 21 Dec 2012 19:36:12 +0100 Subject: do not actually build examples in production builds -developer-build enables an actual build of examples, based on the assumption that developers want to test it (it can be still disabled with -nomake examples). regular users otoh want only the examples sources installed. Change-Id: Ifc6a108099929175a3960480802b271a758fdd38 Reviewed-by: Joerg Bornemann --- mkspecs/features/qt_example_installs.prf | 8 ++++++++ 1 file changed, 8 insertions(+) (limited to 'mkspecs') diff --git a/mkspecs/features/qt_example_installs.prf b/mkspecs/features/qt_example_installs.prf index 5a87eeba64..ccb19fcbd4 100644 --- a/mkspecs/features/qt_example_installs.prf +++ b/mkspecs/features/qt_example_installs.prf @@ -92,4 +92,12 @@ probase = $$relative_path($$_PRO_FILE_PWD_, $$dirname(_QMAKE_CONF_)/examples) allfiles -= doc !isEmpty(allfiles): warning("remaining files in $$_PRO_FILE_PWD_: $$allfiles") } + + # Do not actually build the examples in production builds + !equals(TEMPLATE, subdirs):!contains(QT_CONFIG, private_tests) { + TEMPLATE = aux + CONFIG -= have_target qt staticlib dll + SOURCES = + INSTALLS -= target + } } -- cgit v1.2.3 From f75e897519183f4c5503f5c4d1c0b7046dc9d81c Mon Sep 17 00:00:00 2001 From: Oswald Buddenhagen Date: Mon, 28 Jan 2013 20:25:33 +0100 Subject: centralize detection of prefix builds this makes the use sites more expressive Change-Id: Ib879de65d1cc26462fa61f5339e951f294515faf Reviewed-by: Joerg Bornemann --- mkspecs/features/qml_module.prf | 2 +- mkspecs/features/qt_build_config.prf | 5 ++++- mkspecs/features/qt_build_paths.prf | 4 ++-- mkspecs/features/qt_module.prf | 2 +- mkspecs/features/qt_tool.prf | 2 +- 5 files changed, 9 insertions(+), 6 deletions(-) (limited to 'mkspecs') diff --git a/mkspecs/features/qml_module.prf b/mkspecs/features/qml_module.prf index e7d0b386b1..db5f6787b3 100644 --- a/mkspecs/features/qml_module.prf +++ b/mkspecs/features/qml_module.prf @@ -25,7 +25,7 @@ qml1_target: \ else: \ instbase = $$[QT_INSTALL_QML] -exists($$[QT_HOST_PREFIX]/.qmake.cache) { +!prefix_build { # These bizarre rules copy the files to the qtbase build directory defineReplace(qmlModStripSrcDir) { diff --git a/mkspecs/features/qt_build_config.prf b/mkspecs/features/qt_build_config.prf index 48d6001aa9..4f5b62e1e5 100644 --- a/mkspecs/features/qt_build_config.prf +++ b/mkspecs/features/qt_build_config.prf @@ -20,7 +20,10 @@ debug(1, "Not loading qmodule.pri twice") } -!build_pass:!isEmpty(_QMAKE_SUPER_CACHE_):!exists($$[QT_HOST_DATA]/.qmake.cache) { +!exists($$[QT_HOST_DATA]/.qmake.cache): \ + CONFIG += prefix_build + +!build_pass:!isEmpty(_QMAKE_SUPER_CACHE_):prefix_build { # When doing a -prefix build of top-level qt5/qt.pro, we need to announce # this repo's module pris' location to the other repos. isEmpty(MODULE_QMAKE_OUTDIR): MODULE_QMAKE_OUTDIR = $$shadowed($$dirname(_QMAKE_CONF_)) diff --git a/mkspecs/features/qt_build_paths.prf b/mkspecs/features/qt_build_paths.prf index 123c87de3b..03b43e3153 100644 --- a/mkspecs/features/qt_build_paths.prf +++ b/mkspecs/features/qt_build_paths.prf @@ -16,8 +16,8 @@ isEmpty(MODULE_BASE_DIR): MODULE_BASE_DIR = $$MODULE_PROFILE_DIR isEmpty(MODULE_BASE_OUTDIR): MODULE_BASE_OUTDIR = $$shadowed($$MODULE_BASE_DIR) isEmpty(MODULE_QMAKE_OUTDIR): MODULE_QMAKE_OUTDIR = $$MODULE_BASE_OUTDIR -QTDIR = $$[QT_HOST_PREFIX] -exists($$QTDIR/.qmake.cache) { +!prefix_build { + QTDIR = $$[QT_HOST_PREFIX] # Permit modules to enforce being built outside QTDIR ... !force_independent: MODULE_BASE_OUTDIR = $$QTDIR # ... though this sort of breaks the idea. diff --git a/mkspecs/features/qt_module.prf b/mkspecs/features/qt_module.prf index 50e946937c..810356c8b1 100644 --- a/mkspecs/features/qt_module.prf +++ b/mkspecs/features/qt_module.prf @@ -112,7 +112,7 @@ INCLUDEPATH *= $$eval(QT.$${MODULE}.includes) $$eval(QT.$${MODULE}.private_inclu #other TEMPLATE = lib DESTDIR = $$eval(QT.$${MODULE}.libs) -win32:!wince*:exists($$[QT_INSTALL_PREFIX]/.qmake.cache): DLLDESTDIR = $$eval(QT.$${MODULE}.bins) +win32:!wince*:!prefix_build: DLLDESTDIR = $$eval(QT.$${MODULE}.bins) CONFIG += qmake_cache target_qt diff --git a/mkspecs/features/qt_tool.prf b/mkspecs/features/qt_tool.prf index 16db6c7972..b449e4074d 100644 --- a/mkspecs/features/qt_tool.prf +++ b/mkspecs/features/qt_tool.prf @@ -31,7 +31,7 @@ load(qt_targets) # If we are doing a prefix build, create a "module" pri which enables # qtPrepareTool() to work with the non-installed build. -!build_pass:!exists($$[QT_INSTALL_PREFIX]/.qmake.cache) { +!build_pass:prefix_build { isEmpty(MODULE):MODULE = $$TARGET -- cgit v1.2.3 From 9e388bf692d4a499ec110132464190a7ec73e50b Mon Sep 17 00:00:00 2001 From: Oswald Buddenhagen Date: Mon, 28 Jan 2013 21:07:14 +0100 Subject: qt_module_fwdpri.prf => qt_module_pris.prf move the regular pri file creation into the "sub-prf" and rename it accordingly. the original reason for the split was the deep magic in activeqt (and phonon), which is gone now. Change-Id: If40e941afc9293725630ed6bcf3e4ef18a692f66 Reviewed-by: Joerg Bornemann --- mkspecs/features/qt_module.prf | 60 +------------- mkspecs/features/qt_module_fwdpri.prf | 92 ---------------------- mkspecs/features/qt_module_pris.prf | 144 ++++++++++++++++++++++++++++++++++ 3 files changed, 145 insertions(+), 151 deletions(-) delete mode 100644 mkspecs/features/qt_module_fwdpri.prf create mode 100644 mkspecs/features/qt_module_pris.prf (limited to 'mkspecs') diff --git a/mkspecs/features/qt_module.prf b/mkspecs/features/qt_module.prf index 810356c8b1..855251425c 100644 --- a/mkspecs/features/qt_module.prf +++ b/mkspecs/features/qt_module.prf @@ -45,65 +45,7 @@ else: \ MODULE_DEFINE = QT_$${ucmodule}_LIB MODULE_DEFINES = $$MODULE_DEFINE $$MODULE_DEFINES -load(qt_build_paths) -MODULE_PRI = $$MODULE_QMAKE_OUTDIR/mkspecs/modules-inst/qt_lib_$${MODULE}.pri - -!build_pass { - - # Create a module .pri file - unix:!static: \ - module_rpath = "QT.$${MODULE}.rpath = $$[QT_INSTALL_LIBS/raw]" - else: \ - module_rpath = - !isEmpty(QT_FOR_PRIVATE) { - contains(QT_FOR_PRIVATE, .*-private$):error("QT_FOR_PRIVATE may not contain *-private.") - module_privdep = "QT.$${MODULE}.private_depends = $$QT_FOR_PRIVATE" - } else { - module_privdep = - } - static: \ - module_build_type = "QT.$${MODULE}.module_config = staticlib" - else:mac:contains(QT_CONFIG, qt_framework): \ - module_build_type = "QT.$${MODULE}.module_config = lib_bundle" - else: \ - module_build_type = - !isEmpty(MODULE_CONFIG): \ - module_config = "QT.$${MODULE}.CONFIG = $$MODULE_CONFIG" - else: \ - module_config = - !no_module_headers { - MODULE_INCLUDES = "\$\$QT_MODULE_INCLUDE_BASE \$\$QT_MODULE_INCLUDE_BASE/$$MODULE_INCNAME" - MODULE_PRIVATE_INCLUDES = "\$\$QT_MODULE_INCLUDE_BASE/$$MODULE_INCNAME/$$VERSION \ - \$\$QT_MODULE_INCLUDE_BASE/$$MODULE_INCNAME/$$VERSION/$$MODULE_INCNAME" - } - MODULE_PRI_CONT = \ - "QT.$${MODULE}.VERSION = $${VERSION}" \ - "QT.$${MODULE}.MAJOR_VERSION = $$section(VERSION, ., 0, 0)" \ - "QT.$${MODULE}.MINOR_VERSION = $$section(VERSION, ., 1, 1)" \ - "QT.$${MODULE}.PATCH_VERSION = $$section(VERSION, ., 2, 2)" \ - "" \ - "QT.$${MODULE}.name = $$TARGET" \ - "QT.$${MODULE}.bins = \$\$QT_MODULE_BIN_BASE" \ - "QT.$${MODULE}.includes = $$MODULE_INCLUDES" \ - "QT.$${MODULE}.private_includes = $$MODULE_PRIVATE_INCLUDES" \ - "QT.$${MODULE}.libs = \$\$QT_MODULE_LIB_BASE" \ - "QT.$${MODULE}.libexecs = \$\$QT_MODULE_LIBEXEC_BASE" \ - $$module_rpath \ - "QT.$${MODULE}.plugins = \$\$QT_MODULE_PLUGIN_BASE" \ - "QT.$${MODULE}.imports = \$\$QT_MODULE_IMPORT_BASE" \ - "QT.$${MODULE}.qml = \$\$QT_MODULE_QML_BASE" \ - "QT.$${MODULE}.depends =$$join(MODULE_DEPENDS, " ", " ")" \ - $$module_privdep \ - $$module_build_type \ - $$module_config \ - "QT.$${MODULE}.DEFINES = $$MODULE_DEFINES" \ # assume sufficient quoting - "" \ - "QT_CONFIG += $$MODULE" # this is obsolete, but some code still depends on it - write_file($$MODULE_PRI, MODULE_PRI_CONT)|error("Aborting.") - -} # !build_pass - -load(qt_module_fwdpri) +load(qt_module_pris) INCLUDEPATH *= $$eval(QT.$${MODULE}.includes) $$eval(QT.$${MODULE}.private_includes) diff --git a/mkspecs/features/qt_module_fwdpri.prf b/mkspecs/features/qt_module_fwdpri.prf deleted file mode 100644 index 58b016803e..0000000000 --- a/mkspecs/features/qt_module_fwdpri.prf +++ /dev/null @@ -1,92 +0,0 @@ -# -# W A R N I N G -# ------------- -# -# This file is not part of the Qt API. It exists purely as an -# implementation detail. It may change from version to version -# without notice, or even be removed. -# -# We mean it. -# - -!build_pass { - - load(qt_build_paths) - - MODULE_FWD_PRI = $$MODULE_QMAKE_OUTDIR/mkspecs/modules/qt_lib_$${MODULE}.pri - - # -rpath-link is used by the linker to find depedencies of dynamic - # libraries which were NOT specified on the command line. - # This means that .libs of each module's regular .depends (QT) don't - # need to be put there, as they appear on the linker line anyway. - # A module's QT_PRIVATE's .libs OTOH need to be put there. - # .depends_private (QT_FOR_PRIVATE) is somewhat special: if the privates - # are used, the libraries are explicitly linked. If not, their locations - # need to be put into -rpath-link. As QT_FOR_PRIVATE cannot in turn - # contain privates, they always end up in -rpath-link of dependant - # modules. - # For simplicity of use, each module's rpath list has all dependencies - # transitively resolved already. - pubqt = $$MODULE_DEPENDS $$QT_FOR_PRIVATE - pubdep = $$resolve_depends(pubqt, "QT.") - privqt = $$replace(QT_PRIVATE, -private$, ) - privdep = $$resolve_depends(privqt, "QT.") - rpaths = - alldep = $$pubdep $$privdep - for(dep, alldep) { # Inherit link-rpaths from all our dependencies - rpaths += $$eval(QT.$${dep}.rpath_link) $$eval(QT.$${dep}.rpath_link_private) - } - privdep -= $$pubdep - for(dep, privdep): \ # Add our private dependencies' lib paths as new link-rpaths - rpaths += $$eval(QT.$${dep}.libs) - !isEmpty(rpaths) { - rpaths = $$unique(rpaths) - module_rpathlink = "QT.$${MODULE}.rpath_link = $$val_escape(rpaths)" - } else { - module_rpathlink = - } - rpaths_priv = - xtradep = $$resolve_depends(QT_FOR_PRIVATE, "QT.") - for(dep, xtradep): \ # Add our private API's dependencies' lib paths as new link-rpaths - rpaths_priv += $$eval(QT.$${dep}.libs) - rpaths_priv = $$unique(rpaths_priv) - rpaths_priv -= $$rpaths - !isEmpty(rpaths_priv) { - module_rpathlink_priv = "QT.$${MODULE}.rpath_link_private = $$val_escape(rpaths_priv)" - } else { - module_rpathlink_priv = - } - - # Create a forwarding module .pri file - MODULE_FWD_PRI_CONT = \ - "QT_MODULE_BIN_BASE = $$MODULE_BASE_OUTDIR/bin" \ - "QT_MODULE_INCLUDE_BASE = $$MODULE_BASE_OUTDIR/include" \ - "QT_MODULE_IMPORT_BASE = $$MODULE_BASE_OUTDIR/imports" \ - "QT_MODULE_QML_BASE = $$MODULE_BASE_OUTDIR/qml" \ - "QT_MODULE_LIB_BASE = $$MODULE_BASE_OUTDIR/lib" \ - "QT_MODULE_LIBEXEC_BASE = $$MODULE_BASE_OUTDIR/libexec" \ - "QT_MODULE_PLUGIN_BASE = $$MODULE_BASE_OUTDIR/plugins" \ - $$module_rpathlink \ - $$module_rpathlink_priv \ - "include($$MODULE_PRI)" - write_file($$MODULE_FWD_PRI, MODULE_FWD_PRI_CONT)|error("Aborting.") - touch($$MODULE_FWD_PRI, $$MODULE_PRI) - - # Then, inject the new module into the current cache state - !contains(QMAKE_INTERNAL_INCLUDED_FILES, $$MODULE_PRI) { # before the actual include()! - added = $$MODULE_PRI $$MODULE_FWD_PRI - cache(QMAKE_INTERNAL_INCLUDED_FILES, add transient, added) - unset(added) - } - include($$MODULE_FWD_PRI) - for(var, $$list(VERSION MAJOR_VERSION MINOR_VERSION PATCH_VERSION \ - name depends private_depends module_config CONFIG DEFINES sources \ - includes private_includes bins libs libexecs plugins imports qml \ - rpath_link rpath_link_private \ - )):defined(QT.$${MODULE}.$$var, var):cache(QT.$${MODULE}.$$var, transient) - cache(QT_CONFIG, transient) - -} # !build_pass - -# Schedule the regular .pri file for installation -CONFIG += qt_install_module diff --git a/mkspecs/features/qt_module_pris.prf b/mkspecs/features/qt_module_pris.prf new file mode 100644 index 0000000000..7a3e7397b9 --- /dev/null +++ b/mkspecs/features/qt_module_pris.prf @@ -0,0 +1,144 @@ +# +# W A R N I N G +# ------------- +# +# This file is not part of the Qt API. It exists purely as an +# implementation detail. It may change from version to version +# without notice, or even be removed. +# +# We mean it. +# + +load(qt_build_paths) +MODULE_PRI = $$MODULE_QMAKE_OUTDIR/mkspecs/modules-inst/qt_lib_$${MODULE}.pri + +!build_pass { + + # Create a module .pri file + unix:!static: \ + module_rpath = "QT.$${MODULE}.rpath = $$[QT_INSTALL_LIBS/raw]" + else: \ + module_rpath = + !isEmpty(QT_FOR_PRIVATE) { + contains(QT_FOR_PRIVATE, .*-private$):error("QT_FOR_PRIVATE may not contain *-private.") + module_privdep = "QT.$${MODULE}.private_depends = $$QT_FOR_PRIVATE" + } else { + module_privdep = + } + static: \ + module_build_type = "QT.$${MODULE}.module_config = staticlib" + else:mac:contains(QT_CONFIG, qt_framework): \ + module_build_type = "QT.$${MODULE}.module_config = lib_bundle" + else: \ + module_build_type = + !isEmpty(MODULE_CONFIG): \ + module_config = "QT.$${MODULE}.CONFIG = $$MODULE_CONFIG" + else: \ + module_config = + !no_module_headers { + MODULE_INCLUDES = "\$\$QT_MODULE_INCLUDE_BASE \$\$QT_MODULE_INCLUDE_BASE/$$MODULE_INCNAME" + MODULE_PRIVATE_INCLUDES = "\$\$QT_MODULE_INCLUDE_BASE/$$MODULE_INCNAME/$$VERSION \ + \$\$QT_MODULE_INCLUDE_BASE/$$MODULE_INCNAME/$$VERSION/$$MODULE_INCNAME" + } + MODULE_PRI_CONT = \ + "QT.$${MODULE}.VERSION = $${VERSION}" \ + "QT.$${MODULE}.MAJOR_VERSION = $$section(VERSION, ., 0, 0)" \ + "QT.$${MODULE}.MINOR_VERSION = $$section(VERSION, ., 1, 1)" \ + "QT.$${MODULE}.PATCH_VERSION = $$section(VERSION, ., 2, 2)" \ + "" \ + "QT.$${MODULE}.name = $$TARGET" \ + "QT.$${MODULE}.bins = \$\$QT_MODULE_BIN_BASE" \ + "QT.$${MODULE}.includes = $$MODULE_INCLUDES" \ + "QT.$${MODULE}.private_includes = $$MODULE_PRIVATE_INCLUDES" \ + "QT.$${MODULE}.libs = \$\$QT_MODULE_LIB_BASE" \ + "QT.$${MODULE}.libexecs = \$\$QT_MODULE_LIBEXEC_BASE" \ + $$module_rpath \ + "QT.$${MODULE}.plugins = \$\$QT_MODULE_PLUGIN_BASE" \ + "QT.$${MODULE}.imports = \$\$QT_MODULE_IMPORT_BASE" \ + "QT.$${MODULE}.qml = \$\$QT_MODULE_QML_BASE" \ + "QT.$${MODULE}.depends =$$join(MODULE_DEPENDS, " ", " ")" \ + $$module_privdep \ + $$module_build_type \ + $$module_config \ + "QT.$${MODULE}.DEFINES = $$MODULE_DEFINES" \ # assume sufficient quoting + "" \ + "QT_CONFIG += $$MODULE" # this is obsolete, but some code still depends on it + write_file($$MODULE_PRI, MODULE_PRI_CONT)|error("Aborting.") + + MODULE_FWD_PRI = $$MODULE_QMAKE_OUTDIR/mkspecs/modules/qt_lib_$${MODULE}.pri + + # -rpath-link is used by the linker to find depedencies of dynamic + # libraries which were NOT specified on the command line. + # This means that .libs of each module's regular .depends (QT) don't + # need to be put there, as they appear on the linker line anyway. + # A module's QT_PRIVATE's .libs OTOH need to be put there. + # .depends_private (QT_FOR_PRIVATE) is somewhat special: if the privates + # are used, the libraries are explicitly linked. If not, their locations + # need to be put into -rpath-link. As QT_FOR_PRIVATE cannot in turn + # contain privates, they always end up in -rpath-link of dependant + # modules. + # For simplicity of use, each module's rpath list has all dependencies + # transitively resolved already. + pubqt = $$MODULE_DEPENDS $$QT_FOR_PRIVATE + pubdep = $$resolve_depends(pubqt, "QT.") + privqt = $$replace(QT_PRIVATE, -private$, ) + privdep = $$resolve_depends(privqt, "QT.") + rpaths = + alldep = $$pubdep $$privdep + for(dep, alldep) { # Inherit link-rpaths from all our dependencies + rpaths += $$eval(QT.$${dep}.rpath_link) $$eval(QT.$${dep}.rpath_link_private) + } + privdep -= $$pubdep + for(dep, privdep): \ # Add our private dependencies' lib paths as new link-rpaths + rpaths += $$eval(QT.$${dep}.libs) + !isEmpty(rpaths) { + rpaths = $$unique(rpaths) + module_rpathlink = "QT.$${MODULE}.rpath_link = $$val_escape(rpaths)" + } else { + module_rpathlink = + } + rpaths_priv = + xtradep = $$resolve_depends(QT_FOR_PRIVATE, "QT.") + for(dep, xtradep): \ # Add our private API's dependencies' lib paths as new link-rpaths + rpaths_priv += $$eval(QT.$${dep}.libs) + rpaths_priv = $$unique(rpaths_priv) + rpaths_priv -= $$rpaths + !isEmpty(rpaths_priv) { + module_rpathlink_priv = "QT.$${MODULE}.rpath_link_private = $$val_escape(rpaths_priv)" + } else { + module_rpathlink_priv = + } + + # Create a forwarding module .pri file + MODULE_FWD_PRI_CONT = \ + "QT_MODULE_BIN_BASE = $$MODULE_BASE_OUTDIR/bin" \ + "QT_MODULE_INCLUDE_BASE = $$MODULE_BASE_OUTDIR/include" \ + "QT_MODULE_IMPORT_BASE = $$MODULE_BASE_OUTDIR/imports" \ + "QT_MODULE_QML_BASE = $$MODULE_BASE_OUTDIR/qml" \ + "QT_MODULE_LIB_BASE = $$MODULE_BASE_OUTDIR/lib" \ + "QT_MODULE_LIBEXEC_BASE = $$MODULE_BASE_OUTDIR/libexec" \ + "QT_MODULE_PLUGIN_BASE = $$MODULE_BASE_OUTDIR/plugins" \ + $$module_rpathlink \ + $$module_rpathlink_priv \ + "include($$MODULE_PRI)" + write_file($$MODULE_FWD_PRI, MODULE_FWD_PRI_CONT)|error("Aborting.") + touch($$MODULE_FWD_PRI, $$MODULE_PRI) + + # Then, inject the new module into the current cache state + !contains(QMAKE_INTERNAL_INCLUDED_FILES, $$MODULE_PRI) { # before the actual include()! + added = $$MODULE_PRI $$MODULE_FWD_PRI + cache(QMAKE_INTERNAL_INCLUDED_FILES, add transient, added) + unset(added) + } + include($$MODULE_FWD_PRI) + for(var, $$list(VERSION MAJOR_VERSION MINOR_VERSION PATCH_VERSION \ + name depends private_depends module_config CONFIG DEFINES sources \ + includes private_includes bins libs libexecs plugins imports qml \ + rpath_link rpath_link_private \ + )):defined(QT.$${MODULE}.$$var, var):cache(QT.$${MODULE}.$$var, transient) + cache(QT_CONFIG, transient) + +} # !build_pass + +# Schedule the regular .pri file for installation +CONFIG += qt_install_module -- cgit v1.2.3 From 6654a05fcad565a302e205e7f7deaa0b2757082d Mon Sep 17 00:00:00 2001 From: Oswald Buddenhagen Date: Mon, 28 Jan 2013 20:25:44 +0100 Subject: don't create forwarding module pris for non-prefix builds as everything is built inside the common build/install dir, there is no point in the fwd pri stuff. as a "side effect", this makes it more straight-forward to relocate non-prefix builds, which is the default on windows. Task-number: QTBUG-28827 Change-Id: I010246a9ad87cf74974dc168768b1a8625f73260 Reviewed-by: Joerg Bornemann --- mkspecs/features/qt_module_pris.prf | 140 ++++++++++++++++++++---------------- 1 file changed, 78 insertions(+), 62 deletions(-) (limited to 'mkspecs') diff --git a/mkspecs/features/qt_module_pris.prf b/mkspecs/features/qt_module_pris.prf index 7a3e7397b9..7b5ccc0983 100644 --- a/mkspecs/features/qt_module_pris.prf +++ b/mkspecs/features/qt_module_pris.prf @@ -10,7 +10,11 @@ # load(qt_build_paths) -MODULE_PRI = $$MODULE_QMAKE_OUTDIR/mkspecs/modules-inst/qt_lib_$${MODULE}.pri +MODULE_FWD_PRI = $$MODULE_QMAKE_OUTDIR/mkspecs/modules/qt_lib_$${MODULE}.pri +prefix_build: \ + MODULE_PRI = $$MODULE_QMAKE_OUTDIR/mkspecs/modules-inst/qt_lib_$${MODULE}.pri +else: \ + MODULE_PRI = $$MODULE_FWD_PRI !build_pass { @@ -64,72 +68,84 @@ MODULE_PRI = $$MODULE_QMAKE_OUTDIR/mkspecs/modules-inst/qt_lib_$${MODULE}.pri "" \ "QT_CONFIG += $$MODULE" # this is obsolete, but some code still depends on it write_file($$MODULE_PRI, MODULE_PRI_CONT)|error("Aborting.") + MODULE_PRI_FILES = $$MODULE_PRI - MODULE_FWD_PRI = $$MODULE_QMAKE_OUTDIR/mkspecs/modules/qt_lib_$${MODULE}.pri + prefix_build { - # -rpath-link is used by the linker to find depedencies of dynamic - # libraries which were NOT specified on the command line. - # This means that .libs of each module's regular .depends (QT) don't - # need to be put there, as they appear on the linker line anyway. - # A module's QT_PRIVATE's .libs OTOH need to be put there. - # .depends_private (QT_FOR_PRIVATE) is somewhat special: if the privates - # are used, the libraries are explicitly linked. If not, their locations - # need to be put into -rpath-link. As QT_FOR_PRIVATE cannot in turn - # contain privates, they always end up in -rpath-link of dependant - # modules. - # For simplicity of use, each module's rpath list has all dependencies - # transitively resolved already. - pubqt = $$MODULE_DEPENDS $$QT_FOR_PRIVATE - pubdep = $$resolve_depends(pubqt, "QT.") - privqt = $$replace(QT_PRIVATE, -private$, ) - privdep = $$resolve_depends(privqt, "QT.") - rpaths = - alldep = $$pubdep $$privdep - for(dep, alldep) { # Inherit link-rpaths from all our dependencies - rpaths += $$eval(QT.$${dep}.rpath_link) $$eval(QT.$${dep}.rpath_link_private) - } - privdep -= $$pubdep - for(dep, privdep): \ # Add our private dependencies' lib paths as new link-rpaths - rpaths += $$eval(QT.$${dep}.libs) - !isEmpty(rpaths) { - rpaths = $$unique(rpaths) - module_rpathlink = "QT.$${MODULE}.rpath_link = $$val_escape(rpaths)" - } else { - module_rpathlink = - } - rpaths_priv = - xtradep = $$resolve_depends(QT_FOR_PRIVATE, "QT.") - for(dep, xtradep): \ # Add our private API's dependencies' lib paths as new link-rpaths - rpaths_priv += $$eval(QT.$${dep}.libs) - rpaths_priv = $$unique(rpaths_priv) - rpaths_priv -= $$rpaths - !isEmpty(rpaths_priv) { - module_rpathlink_priv = "QT.$${MODULE}.rpath_link_private = $$val_escape(rpaths_priv)" - } else { - module_rpathlink_priv = - } + # -rpath-link is used by the linker to find depedencies of dynamic + # libraries which were NOT specified on the command line. + # This means that .libs of each module's regular .depends (QT) don't + # need to be put there, as they appear on the linker line anyway. + # A module's QT_PRIVATE's .libs OTOH need to be put there. + # .depends_private (QT_FOR_PRIVATE) is somewhat special: if the privates + # are used, the libraries are explicitly linked. If not, their locations + # need to be put into -rpath-link. As QT_FOR_PRIVATE cannot in turn + # contain privates, they always end up in -rpath-link of dependant + # modules. + # For simplicity of use, each module's rpath list has all dependencies + # transitively resolved already. + pubqt = $$MODULE_DEPENDS $$QT_FOR_PRIVATE + pubdep = $$resolve_depends(pubqt, "QT.") + privqt = $$replace(QT_PRIVATE, -private$, ) + privdep = $$resolve_depends(privqt, "QT.") + rpaths = + alldep = $$pubdep $$privdep + for(dep, alldep) { # Inherit link-rpaths from all our dependencies + rpaths += $$eval(QT.$${dep}.rpath_link) $$eval(QT.$${dep}.rpath_link_private) + } + privdep -= $$pubdep + for(dep, privdep): \ # Add our private dependencies' lib paths as new link-rpaths + rpaths += $$eval(QT.$${dep}.libs) + !isEmpty(rpaths) { + rpaths = $$unique(rpaths) + module_rpathlink = "QT.$${MODULE}.rpath_link = $$val_escape(rpaths)" + } else { + module_rpathlink = + } + rpaths_priv = + xtradep = $$resolve_depends(QT_FOR_PRIVATE, "QT.") + for(dep, xtradep): \ # Add our private API's dependencies' lib paths as new link-rpaths + rpaths_priv += $$eval(QT.$${dep}.libs) + rpaths_priv = $$unique(rpaths_priv) + rpaths_priv -= $$rpaths + !isEmpty(rpaths_priv) { + module_rpathlink_priv = "QT.$${MODULE}.rpath_link_private = $$val_escape(rpaths_priv)" + } else { + module_rpathlink_priv = + } - # Create a forwarding module .pri file - MODULE_FWD_PRI_CONT = \ - "QT_MODULE_BIN_BASE = $$MODULE_BASE_OUTDIR/bin" \ - "QT_MODULE_INCLUDE_BASE = $$MODULE_BASE_OUTDIR/include" \ - "QT_MODULE_IMPORT_BASE = $$MODULE_BASE_OUTDIR/imports" \ - "QT_MODULE_QML_BASE = $$MODULE_BASE_OUTDIR/qml" \ - "QT_MODULE_LIB_BASE = $$MODULE_BASE_OUTDIR/lib" \ - "QT_MODULE_LIBEXEC_BASE = $$MODULE_BASE_OUTDIR/libexec" \ - "QT_MODULE_PLUGIN_BASE = $$MODULE_BASE_OUTDIR/plugins" \ - $$module_rpathlink \ - $$module_rpathlink_priv \ - "include($$MODULE_PRI)" - write_file($$MODULE_FWD_PRI, MODULE_FWD_PRI_CONT)|error("Aborting.") - touch($$MODULE_FWD_PRI, $$MODULE_PRI) + # Create a forwarding module .pri file + MODULE_FWD_PRI_CONT = \ + "QT_MODULE_BIN_BASE = $$MODULE_BASE_OUTDIR/bin" \ + "QT_MODULE_INCLUDE_BASE = $$MODULE_BASE_OUTDIR/include" \ + "QT_MODULE_IMPORT_BASE = $$MODULE_BASE_OUTDIR/imports" \ + "QT_MODULE_QML_BASE = $$MODULE_BASE_OUTDIR/qml" \ + "QT_MODULE_LIB_BASE = $$MODULE_BASE_OUTDIR/lib" \ + "QT_MODULE_LIBEXEC_BASE = $$MODULE_BASE_OUTDIR/libexec" \ + "QT_MODULE_PLUGIN_BASE = $$MODULE_BASE_OUTDIR/plugins" \ + $$module_rpathlink \ + $$module_rpathlink_priv \ + "include($$MODULE_PRI)" + write_file($$MODULE_FWD_PRI, MODULE_FWD_PRI_CONT)|error("Aborting.") + touch($$MODULE_FWD_PRI, $$MODULE_PRI) + MODULE_PRI_FILES += $$MODULE_FWD_PRI + + } else { # prefix_build + + # This is needed for the direct include() below. + QT_MODULE_BIN_BASE = $$[QT_INSTALL_BINS] + QT_MODULE_INCLUDE_BASE = $$[QT_INSTALL_HEADERS] + QT_MODULE_IMPORT_BASE = $$[QT_INSTALL_IMPORTS] + QT_MODULE_QML_BASE = $$[QT_INSTALL_QML] + QT_MODULE_LIB_BASE = $$[QT_INSTALL_LIBS] + QT_MODULE_LIBEXEC_BASE = $$[QT_INSTALL_LIBEXECS] + QT_MODULE_PLUGIN_BASE = $$[QT_INSTALL_PLUGINS] - # Then, inject the new module into the current cache state - !contains(QMAKE_INTERNAL_INCLUDED_FILES, $$MODULE_PRI) { # before the actual include()! - added = $$MODULE_PRI $$MODULE_FWD_PRI - cache(QMAKE_INTERNAL_INCLUDED_FILES, add transient, added) - unset(added) } + + # Then, inject the new module into the current cache state + !contains(QMAKE_INTERNAL_INCLUDED_FILES, $$MODULE_PRI): \ # before the actual include()! + cache(QMAKE_INTERNAL_INCLUDED_FILES, add transient, MODULE_PRI_FILES) include($$MODULE_FWD_PRI) for(var, $$list(VERSION MAJOR_VERSION MINOR_VERSION PATCH_VERSION \ name depends private_depends module_config CONFIG DEFINES sources \ -- cgit v1.2.3