summaryrefslogtreecommitdiffstats
path: root/mkspecs/features/qt_functions.prf
diff options
context:
space:
mode:
Diffstat (limited to 'mkspecs/features/qt_functions.prf')
-rw-r--r--mkspecs/features/qt_functions.prf234
1 files changed, 70 insertions, 164 deletions
diff --git a/mkspecs/features/qt_functions.prf b/mkspecs/features/qt_functions.prf
index 0468c51f81..f1982d6e4e 100644
--- a/mkspecs/features/qt_functions.prf
+++ b/mkspecs/features/qt_functions.prf
@@ -15,7 +15,7 @@ defineReplace(qtPlatformTargetSuffix) {
defineReplace(qtLibraryTarget) {
LIBRARY_NAME = $$1
- mac:CONFIG(shared, static|shared):contains(QT_CONFIG, qt_framework) {
+ CONFIG(shared, static|shared):contains(QT_CONFIG, qt_framework) {
QMAKE_FRAMEWORK_BUNDLE_NAME = $$LIBRARY_NAME
export(QMAKE_FRAMEWORK_BUNDLE_NAME)
}
@@ -38,24 +38,14 @@ defineTest(qtAddLibrary) {
# Reverse-engineer the module name from the library name.
for(var, QT_MODULES) {
isEqual(QT.$${var}.name, $$1) {
- qtAddModule($$var, LIBS)
+ QT += $$var
+ export(QT)
return(true)
}
}
error("No module matching library '$$1' found.")
}
-# target variable, flag source variable
-defineTest(qtProcessModuleFlags) {
- for(flag, $$2) {
- contains(flag, ^-.*): \
- $$1 -= $$replace(flag, ^-, )
- else: \
- $$1 += $$flag
- }
- export($$1)
-}
-
# qt module
defineTest(qtHaveModule) {
!isEmpty(QT.$$replace(1, -, _).name): \
@@ -63,137 +53,6 @@ defineTest(qtHaveModule) {
return(false)
}
-# qt module, libs variable
-defineTest(qtAddModule) {
- MODULE_NAME = $$eval(QT.$${1}.name)
- MODULE_INCLUDES = $$eval(QT.$${1}.includes)
- MODULE_LIBS = $$eval(QT.$${1}.libs)
- MODULE_CONFIG = $$eval(QT.$${1}.module_config)
-
- contains(MODULE_CONFIG, internal_module) {
- using_privates = true
- export(using_privates)
- }
- contains(MODULE_CONFIG, ltcg): CONFIG += link_ltcg
-
- qtProcessModuleFlags(CONFIG, QT.$${1}.CONFIG)
- qtProcessModuleFlags(DEFINES, QT.$${1}.DEFINES)
-
- MODULE_INCLUDES -= $$QMAKE_DEFAULT_INCDIRS
- MODULE_LIBS_ADD = $$MODULE_LIBS
- MODULE_LIBS_ADD -= $$QMAKE_DEFAULT_LIBDIRS
-
- unset(LINKAGE)
- mac:contains(MODULE_CONFIG, lib_bundle) {
- FRAMEWORK_INCLUDE = $${MODULE_LIBS}/$${MODULE_NAME}.framework/Headers
- !qt_no_framework_direct_includes {
- INCLUDEPATH *= $$FRAMEWORK_INCLUDE
- }
- contains(MODULE_CONFIG, internal_module): \
- INCLUDEPATH += \
- $$FRAMEWORK_INCLUDE/$$eval(QT.$${1}.VERSION) \
- $$FRAMEWORK_INCLUDE/$$eval(QT.$${1}.VERSION)/$$MODULE_NAME
- QMAKE_FRAMEWORKPATH *= $${MODULE_LIBS}
- export(QMAKE_FRAMEWORKPATH)
- !contains(MODULE_CONFIG, no_link): \
- LINKAGE += -framework $${MODULE_NAME}$${QT_LIBINFIX}
- } else {
- INCLUDEPATH *= $$MODULE_INCLUDES
- }
- export(INCLUDEPATH)
-
- # 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
- !mac|!contains(MODULE_CONFIG, lib_bundle): \
- MODULE_NAME ~= s,^Qt,Qt$$QT_MAJOR_VERSION,
-
- win32 {
- # Make sure the version number isn't appended again to the lib name
- ver_var = QMAKE_$${upper($$MODULE_NAME$$QT_LIBINFIX)}_VERSION_OVERRIDE
- dver_var = QMAKE_$${upper($$MODULE_NAME$$QT_LIBINFIX)}D_VERSION_OVERRIDE
- $$ver_var = 0
- $$dver_var = 0
- export($$ver_var)
- export($$dver_var)
- }
-
- isEmpty(LINKAGE) {
- !isEmpty(MODULE_LIBS_ADD): \
- LINKAGE = -L$$MODULE_LIBS_ADD
- lib = $${MODULE_NAME}$${QT_LIBINFIX}$$qtPlatformTargetSuffix()
- LINKAGE += -l$$lib
-
- contains(QT_CONFIG, rpath) {
- QMAKE_RPATHDIR *= $$eval(QT.$${1}.rpath)
- export(QMAKE_RPATHDIR)
- }
-
- contains(MODULE_CONFIG, staticlib) {
- PRE_TARGETDEPS *= $$MODULE_LIBS/$${QMAKE_PREFIX_STATICLIB}$${lib}.$${QMAKE_EXTENSION_STATICLIB}
- export(PRE_TARGETDEPS)
- }
- }
-
- $$2 += $$LINKAGE
- export($$2)
-
- !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
- export(QMAKE_LFLAGS)
- export(QMAKE_LIBDIR)
- }
- }
-}
-
-# qt variable, libs variable
-defineTest(qtAddModules) {
- # qmake variables cannot contain dashes, so normalize the names first
- $$1 = $$replace($$1, -private$, _private)
- # Topological resolution of modules based on their QT.<module>.depends variable
- $$1 = $$resolve_depends($$1, "QT.")
- # Finally actually add the modules
- unset(BAD_QT)
- for(QTLIB, $$1) {
- QTLIBNAME = $$eval(QT.$${QTLIB}.name)
- isEmpty(QTLIBNAME) {
- BAD_QT += $$QTLIB
- next()
- }
-
- target_qt:isEqual(TARGET, $$QTLIBNAME) {
- warning("$$TARGET cannot have a $$1 of $$QTLIB")
- next()
- }
-
- qtAddModule($$QTLIB, $$2)
- }
- !isEmpty(BAD_QT):error("Unknown module(s) in $$1: $$replace(BAD_QT, _private$, -private)")
-}
-
-defineTest(qtAddRpathLink) {
- # -rpath-link is used by the linker to find dependencies of dynamic
- # libraries which were NOT specified on the command line.
- # This means that paths of direct dependencies (QT & QT_PRIVATE)
- # don't need to appear here. However, their private dependencies'
- # paths OTOH need to be put there.
- pubqt = $$replace(1, -private$, _private)
- pubdep = $$resolve_depends(pubqt, "QT.")
- privdep = $$resolve_depends(pubqt, "QT.", ".depends" ".run_depends")
- privdep -= $$pubdep
- rpaths =
- for(dep, privdep): \
- rpaths += $$eval(QT.$${dep}.libs)
- QMAKE_RPATHLINKDIR *= $$unique(rpaths)
- export(QMAKE_RPATHLINKDIR)
-}
-
# variable, default, [suffix for variable for system() use], [prepare primary variable for system() use]
defineTest(qtPrepareTool) {
cmd = $$eval(QT_TOOL.$${2}.binary)
@@ -211,6 +70,7 @@ defineTest(qtPrepareTool) {
}
}
QT_TOOL_ENV += $$eval(QT_TOOL.$${2}.envvars)
+ QT_TOOL_NAME = $$2
!isEmpty(3)|!isEmpty(4) {
$$1$$3 =
for (arg, cmd): \
@@ -231,29 +91,73 @@ defineTest(qtAddToolEnv) {
ds = $$QMAKE_DIR_SEP
else: \
ds = $$DIR_SEPARATOR
+ batch_sets =
for(env, 2) {
value = $$eval($${env}.value)
!isEmpty(value) {
name = $$eval($${env}.name)
+ config = $$eval($${env}.CONFIG)
equals(ds, /) {
- contains($${env}.CONFIG, prepend): infix = \${$$name:+:\$$$name}
+ contains(config, prepend): infix = \${$$name:+:\$$$name}
+ else: contains(config, always_prepend): infix = :\$$$name
else: infix =
- val = "$$name=$$shell_quote($$join(value, :))$$infix"
+ # Under msys, this path is taken only in the non-system()
+ # case, so using shell_quote() always works.
+ batch_sets += \
+ "$$name=$$shell_quote($$join(value, :))$$infix" \
+ "export $$name"
} else {
- # Escape closing parens when expanding the variable, otherwise cmd confuses itself.
- contains($${env}.CONFIG, prepend): infix = ;%$$name:)=^)%
- else: infix =
+ value ~= s,\\^,^^^^,g
+ value ~= s,!,^^!,g
value ~= s,\\),^),g
- val = "(set $$name=$$join(value, ;)$$infix) &"
- }
- isEmpty(3): !contains(TEMPLATE, vc.*) {
- contains(MAKEFILE_GENERATOR, MS.*): val ~= s,%,%%,g
- val ~= s,\\\$,\$\$,g
+ contains(config, prepend) {
+ batch_sets += \
+ "if defined $$name (" \
+ " set $$name=$$join(value, ;);!$$name!" \
+ ") else (" \
+ " set $$name=$$join(value, ;)" \
+ ")"
+ } else: contains(config, always_prepend) {
+ batch_sets += "(set $$name=$$join(value, ;);!$$name!)"
+ } else {
+ batch_sets += "(set $$name=$$join(value, ;))"
+ }
}
- $$1 = "$$val $$eval($$1)"
}
}
+ !isEmpty(batch_sets) {
+ batch_name = wrapper
+ !isEmpty(QT_TOOL_NAME): batch_name = $${QT_TOOL_NAME}_wrapper
+ cmd = $$eval($$1)
+ !isEmpty(cmd): cmd = "$$cmd "
+ equals(ds, /) {
+ batch_name = $${batch_name}.sh
+ batch_cont = \
+ "$$LITERAL_HASH!/bin/sh" \
+ $$batch_sets \
+ "exec $$cmd\"$@\""
+ # It would be nicer to use the '.' command (without 'exec' above),
+ # but that doesn't set the positional arguments under (d)ash.
+ $$1 =
+ } else {
+ batch_name = $${batch_name}.bat
+ batch_cont = \
+ "@echo off" \
+ "SetLocal EnableDelayedExpansion" \
+ $$batch_sets \
+ "$$cmd%*" \
+ "EndLocal"
+ $$1 = call
+ }
+ !build_pass:!write_file($$OUT_PWD/$$batch_name, batch_cont, exe): error("Aborting.")
+ isEmpty(3): \
+ $$1 += $$shell_quote($$shell_path($$OUT_PWD/$$batch_name))
+ else: \
+ $$1 += $$system_quote($$system_path($$OUT_PWD/$$batch_name))
+ QMAKE_DISTCLEAN += $$OUT_PWD/$$batch_name
+ }
export($$1)
+ export(QMAKE_DISTCLEAN)
}
# target variable, dependency var name, [non-empty: prepare for system(), not make]
@@ -261,15 +165,9 @@ defineTest(qtAddTargetEnv) {
deps = $$replace($$2, -private$, _private)
deps = $$resolve_depends(deps, "QT.", ".depends" ".run_depends")
!isEmpty(deps) {
- ptypes =
- for(dep, deps) {
- isEmpty(3): \
- deppath += $$shell_path($$eval(QT.$${dep}.libs))
- else: \
- deppath += $$system_path($$eval(QT.$${dep}.libs))
- ptypes += $$eval(QT.$${dep}.plugin_types)
- }
+ deppath.CONFIG = prepend
equals(QMAKE_HOST.os, Windows) {
+ deppath.CONFIG = always_prepend
deppath.name = PATH
} else:contains(QMAKE_HOST.os, Linux|FreeBSD|OpenBSD|NetBSD|DragonFly|SunOS|HP-UX|QNX|GNU) {
deppath.name = LD_LIBRARY_PATH
@@ -285,8 +183,15 @@ defineTest(qtAddTargetEnv) {
} else {
error("Operating system not supported.")
}
+ ptypes =
+ for(dep, deps) {
+ isEmpty(3): \
+ deppath += $$shell_path($$eval(QT.$${dep}.libs))
+ else: \
+ deppath += $$system_path($$eval(QT.$${dep}.libs))
+ ptypes += $$eval(QT.$${dep}.plugin_types)
+ }
deppath.value = $$unique(deppath)
- deppath.CONFIG = prepend
pluginpath.value =
ppaths = $$[QT_INSTALL_PLUGINS/get]
@@ -301,6 +206,7 @@ defineTest(qtAddTargetEnv) {
pluginpath.value += $$system_path($$qplug)
}
pluginpath.name = QT_PLUGIN_PATH
+ pluginpath.CONFIG = prepend
QT_TOOL_ENV += deppath pluginpath
}