| # |
| # 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}.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" |
| winrt: MODULE_PRI_CONT += \ |
| "QT.$${MODULE_ID}.winrt_capabilities =$$join(MODULE_WINRT_CAPABILITIES, " ", " ")" \ |
| "QT.$${MODULE_ID}.winrt_capabilities_device =$$join(MODULE_WINRT_CAPABILITIES_DEVICE, " ", " ")" |
| 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 \ |
| winrt_capabilities winrt_capabilities_device \ |
| )):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 |