6032a9ca1a
The flags go before the library in the final linker line, as opposed to the dependencies declared in LIBS. This allows us to declare the flags for the entrypoint in the project file of the entrypoint, instead of in a standalone prf. Change-Id: I35c054fe9fdaa6add7cd0e8ba3f7304f975ff80f Reviewed-by: Joerg Bornemann <joerg.bornemann@qt.io> Reviewed-by: Alexandru Croitor <alexandru.croitor@qt.io>
246 lines
9.1 KiB
Plaintext
246 lines
9.1 KiB
Plaintext
#
|
|
# 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)
|
|
force_independent|split_incpath: \
|
|
CONFIG += need_fwd_pri
|
|
mod_work_pfx = $$MODULE_QMAKE_OUTDIR/mkspecs/modules
|
|
need_fwd_pri: \
|
|
mod_inst_pfx = $$MODULE_QMAKE_OUTDIR/mkspecs/modules-inst
|
|
else: \
|
|
mod_inst_pfx = $$mod_work_pfx
|
|
!internal_module {
|
|
MODULE_ID = $$MODULE
|
|
mods_to_load = $$MODULE
|
|
!no_private_module {
|
|
MODULE_PRIVATE_PRI = $$mod_inst_pfx/qt_lib_$${MODULE}_private.pri
|
|
mods_to_load += $${MODULE}_private
|
|
}
|
|
} else {
|
|
MODULE_ID = $${MODULE}_private
|
|
mods_to_load = $${MODULE}_private
|
|
}
|
|
need_fwd_pri: \
|
|
pris_to_load = $$MODULE_ID
|
|
else: \
|
|
pris_to_load = $$mods_to_load
|
|
MODULE_PRI = $$mod_inst_pfx/qt_lib_$${MODULE_ID}.pri
|
|
MODULE_FWD_PRI = $$mod_work_pfx/qt_lib_$${MODULE_ID}.pri
|
|
|
|
defineReplace(qtGetFeaturesForModule) {
|
|
enabled = $$unique(QT.$${1}.enabled_features)
|
|
disabled = $$unique(QT.$${1}.disabled_features)
|
|
result = \
|
|
"QT.$${1}.enabled_features =$$join(enabled, " ", " ")" \
|
|
"QT.$${1}.disabled_features =$$join(disabled, " ", " ")"
|
|
return($$result)
|
|
}
|
|
|
|
defineReplace(qtGetExportsForModule) {
|
|
result =
|
|
for (var, QT.$${1}.exports): \
|
|
result += "$$var = $$val_escape($$var)"
|
|
return($$result)
|
|
}
|
|
|
|
defineReplace(qtExportDepsForModule) {
|
|
result =
|
|
for (lib, QT.$${1}.libraries) {
|
|
NAME = $$upper($$lib)
|
|
vars = \
|
|
QMAKE_DEPENDS_$${NAME}_CC QMAKE_DEPENDS_$${NAME}_LD \
|
|
QMAKE_DEFINES_$$NAME QMAKE_INCDIR_$$NAME
|
|
for (var, vars) {
|
|
expvar = $$var
|
|
expvar ~= s/^QMAKE_/QMAKE_EXPORT_/
|
|
defined($$expvar, var):equals($$expvar, -): next()
|
|
!defined($$expvar, var): expvar = $$var
|
|
defined($$expvar, var): \
|
|
result += "$$var = $$val_escape($$expvar)"
|
|
}
|
|
}
|
|
return($$result)
|
|
}
|
|
|
|
defineReplace(qtExportLibsForModule) {
|
|
result =
|
|
for (lib, QT.$${1}.libraries) {
|
|
NAME = $$upper($$lib)
|
|
vars = \
|
|
QMAKE_LIBS_$$NAME QMAKE_LIBS_$${NAME}_DEBUG QMAKE_LIBS_$${NAME}_RELEASE
|
|
for (var, vars) {
|
|
expvar = $$var
|
|
expvar ~= s/^QMAKE_/QMAKE_EXPORT_/
|
|
defined($$expvar, var):equals($$expvar, -): next()
|
|
!defined($$expvar, var): expvar = $$var
|
|
defined($$expvar, var): \
|
|
result += "$$var$${2} = $$val_escape($$expvar)"
|
|
}
|
|
}
|
|
return($$result)
|
|
}
|
|
|
|
!build_pass {
|
|
|
|
# Create a module .pri file
|
|
host_build: \
|
|
module_libs = "\$\$QT_MODULE_HOST_LIB_BASE"
|
|
else: \
|
|
module_libs = "\$\$QT_MODULE_LIB_BASE"
|
|
# In addition to the library's private deps, the private module's deps
|
|
# are logically runtime deps of the public module.
|
|
runtime_deps = $$QT_PRIVATE $$QT_FOR_PRIVATE
|
|
!isEmpty(runtime_deps): \
|
|
module_rundep = "QT.$${MODULE_ID}.run_depends = $$replace(runtime_deps, -private$, _private)"
|
|
else: \
|
|
module_rundep =
|
|
module_build_type = v2
|
|
static: \
|
|
module_build_type += staticlib
|
|
lib_bundle: \
|
|
module_build_type += lib_bundle
|
|
module_frameworks: \
|
|
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: \
|
|
module_config =
|
|
!isEmpty(MODULE_PLUGIN_TYPES): \
|
|
module_plugtypes = "QT.$${MODULE_ID}.plugin_types = $$replace(MODULE_PLUGIN_TYPES, /[^.]+\\.[^.]+$, )"
|
|
else: \
|
|
module_plugtypes =
|
|
!isEmpty(MODULE_MASTER_HEADER): \
|
|
module_master = "QT.$${MODULE_ID}.master_header = $$MODULE_MASTER_HEADER"
|
|
else: \
|
|
module_master =
|
|
MODULE_PRI_CONT = \
|
|
"QT.$${MODULE_ID}.VERSION = $${VERSION}" \
|
|
"" \
|
|
"QT.$${MODULE_ID}.name = $$TARGET" \
|
|
"QT.$${MODULE_ID}.module = $$module_module" \
|
|
"QT.$${MODULE_ID}.ldflags = $$MODULE_LDFLAGS" \
|
|
"QT.$${MODULE_ID}.libs = $$module_libs" \
|
|
$$module_master \
|
|
"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" \
|
|
$$module_plugtypes
|
|
MODULE_PRI_CONT += \
|
|
"QT.$${MODULE_ID}.depends =$$join(MODULE_DEPENDS, " ", " ")" \
|
|
$$module_rundep \
|
|
"QT.$${MODULE_ID}.uses =$$join(QMAKE_USE, " ", " ")" \
|
|
"QT.$${MODULE_ID}.module_config =$$join(module_build_type, " ", " ")" \
|
|
$$module_config \
|
|
"QT.$${MODULE_ID}.DEFINES = $$val_escape(MODULE_DEFINES)" \
|
|
$$qtGetFeaturesForModule($$MODULE_ID) \
|
|
$$qtGetExportsForModule($$MODULE_ID) \
|
|
"QT_CONFIG +=$$join(QT.$${MODULE_ID}.QT_CONFIG, " ", " ")" \
|
|
"" \
|
|
"QT_MODULES += $$MODULE" \
|
|
"$$MODULE_PRI_EXTRA_CONTENT"
|
|
write_file($$MODULE_PRI, MODULE_PRI_CONT)|error()
|
|
!internal_module:!no_private_module {
|
|
module_build_type += internal_module
|
|
private_deps = $$QT
|
|
private_deps -= $$MODULE_DEPENDS
|
|
private_deps += $$MODULE $$QT_FOR_PRIVATE
|
|
private_deps ~= s,-private$,_private,g
|
|
MODULE_PRIVATE_PRI_CONT = \
|
|
"QT.$${MODULE}_private.VERSION = $${VERSION}" \
|
|
"" \
|
|
"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 = $$private_deps" \
|
|
"QT.$${MODULE}_private.uses =$$join(QMAKE_USE_FOR_PRIVATE, " ", " ")" \
|
|
"QT.$${MODULE}_private.module_config =$$join(module_build_type, " ", " ")" \
|
|
$$qtGetFeaturesForModule($${MODULE}_private) \
|
|
"" \
|
|
$$qtExportDepsForModule($${MODULE}_private) \
|
|
$$qtExportLibsForModule($${MODULE}_private)
|
|
write_file($$MODULE_PRIVATE_PRI, MODULE_PRIVATE_PRI_CONT)|error()
|
|
}
|
|
MODULE_PRI_FILES = $$MODULE_PRI $$MODULE_PRIVATE_PRI
|
|
|
|
need_fwd_pri {
|
|
|
|
!git_build: \
|
|
MODULE_BASE_INCDIR = $$MODULE_BASE_INDIR
|
|
else: \
|
|
MODULE_BASE_INCDIR = $$MODULE_BASE_OUTDIR
|
|
|
|
# Create a forwarding module .pri file
|
|
MODULE_FWD_PRI_CONT = \
|
|
"QT_MODULE_BIN_BASE = $$val_escape(MODULE_BASE_OUTDIR)/bin" \
|
|
"QT_MODULE_INCLUDE_BASE = $$val_escape(MODULE_BASE_INCDIR)/include" \
|
|
"QT_MODULE_LIB_BASE = $$val_escape(MODULE_BASE_OUTDIR)/lib" \
|
|
"QT_MODULE_HOST_LIB_BASE = $$val_escape(MODULE_BASE_OUTDIR)/lib" \
|
|
"include($$val_escape(MODULE_PRI))" \
|
|
"QT.$${MODULE_ID}.priority = 1"
|
|
!internal_module:!no_private_module: MODULE_FWD_PRI_CONT += \
|
|
"include($$val_escape(MODULE_PRIVATE_PRI))" \
|
|
"QT.$${MODULE}_private.priority = 1"
|
|
!isEmpty(MODULE_FWD_INCLUDES) {
|
|
!lib_bundle: \
|
|
pls = +
|
|
MODULE_FWD_PRI_CONT += \
|
|
"QT.$${MODULE_ID}.includes $$pls= $$MODULE_FWD_INCLUDES"
|
|
!internal_module: \
|
|
MODULE_FWD_PRI_CONT += \
|
|
"QT.$${MODULE}_private.includes $$pls= $$MODULE_FWD_PRIVATE_INCLUDES"
|
|
}
|
|
write_file($$MODULE_FWD_PRI, MODULE_FWD_PRI_CONT)|error()
|
|
touch($$MODULE_FWD_PRI, $$MODULE_PRI)
|
|
MODULE_PRI_FILES += $$MODULE_FWD_PRI
|
|
|
|
} else {
|
|
|
|
# This is needed for the direct include() below. Mirrors qt_config.prf
|
|
QT_MODULE_BIN_BASE = $$[QT_INSTALL_BINS]
|
|
QT_MODULE_INCLUDE_BASE = $$[QT_INSTALL_HEADERS]
|
|
QT_MODULE_LIB_BASE = $$[QT_INSTALL_LIBS]
|
|
QT_MODULE_HOST_LIB_BASE = $$[QT_HOST_LIBS]
|
|
|
|
}
|
|
|
|
# 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)
|
|
for(pri, pris_to_load): \
|
|
include($$mod_work_pfx/qt_lib_$${pri}.pri)
|
|
for(mod, mods_to_load) {
|
|
for(var, $$list(VERSION MAJOR_VERSION MINOR_VERSION PATCH_VERSION \
|
|
name module depends run_depends plugin_types module_config CONFIG DEFINES \
|
|
priority includes bins libs frameworks \
|
|
)):defined(QT.$${mod}.$$var, var):cache(QT.$${mod}.$$var, transient)
|
|
}
|
|
cache(QT_MODULES, transient)
|
|
|
|
} else:android:!no_private_module:!internal_module {
|
|
MODULE_PRIVATE_PRI_CONT = $$qtExportLibsForModule($${MODULE}_private, _$${QT_ARCH})
|
|
write_file($$MODULE_PRIVATE_PRI, MODULE_PRIVATE_PRI_CONT, append)|error()
|
|
}
|
|
|
|
# Schedule the regular .pri file for installation
|
|
CONFIG += qt_install_module
|