2012-12-11 21:08:15 +00:00
|
|
|
#
|
|
|
|
# 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.
|
|
|
|
#
|
|
|
|
|
2013-01-28 20:07:14 +00:00
|
|
|
load(qt_build_paths)
|
2016-03-01 20:08:51 +00:00
|
|
|
force_independent|split_incpath: \
|
2013-06-07 14:23:25 +00:00
|
|
|
CONFIG += need_fwd_pri
|
2013-10-21 19:05:35 +00:00
|
|
|
mod_work_pfx = $$MODULE_QMAKE_OUTDIR/mkspecs/modules
|
2013-06-07 14:23:25 +00:00
|
|
|
need_fwd_pri: \
|
2013-10-21 19:05:35 +00:00
|
|
|
mod_inst_pfx = $$MODULE_QMAKE_OUTDIR/mkspecs/modules-inst
|
2013-01-28 19:25:44 +00:00
|
|
|
else: \
|
2013-10-21 19:05:35 +00:00
|
|
|
mod_inst_pfx = $$mod_work_pfx
|
|
|
|
!internal_module {
|
|
|
|
MODULE_ID = $$MODULE
|
2015-04-16 16:09:01 +00:00
|
|
|
mods_to_load = $$MODULE
|
|
|
|
!no_private_module {
|
|
|
|
MODULE_PRIVATE_PRI = $$mod_inst_pfx/qt_lib_$${MODULE}_private.pri
|
|
|
|
mods_to_load += $${MODULE}_private
|
|
|
|
}
|
2013-10-21 19:05:35 +00:00
|
|
|
} 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
|
2013-01-28 20:07:14 +00:00
|
|
|
|
Modularize the new configure system (infrastructure part)
This change implements the required infrastructure to modularize the new
configuration system.
This requires a hierarchy of configuration files, both for handling
multiple repositories and for individual modules inside the same
repository.
When configuring, they all need to get loaded first, as command line
processing needs to know about all possible command line options.
When the command line has been processed, the individual configuration
files need to get processed one after the other and independently from
each other.
Configure is now automatically invoked when building the a project
tree's "root" project; this works with both modular and top-level builds
of Qt (the latter with an according change in the super repo). As an
immediate consequence, the -skip option moves to the super repo with a
different implementation, as configuration is now done after the repo
list is determined. The option belongs there anyway.
This commit also adds an optional testDir entry to the json file. Like
this, we can still have all configure tests in qtbase/config.tests and
the configuration file in, e.g., corelib can reference those.
The files section can now be left out as long as a 'module' entry is
present, specifying the module name. The names of the files to generate
can then be deduced from that name. We still need to be able to specify
names directly for the global configuration files.
qtConfig() now also queries features which are module-specific. As it is
sometimes necessary to query the configuration of modules which should
not be actually linked (and cannot in the case of subdirs projects), the
new variable QT_FOR_CONFIG which allows specifying configuration-only
dependencies is introduced.
Done-with: Oswald Buddenhagen <oswald.buddenhagen@theqtcompany.com>
Change-Id: Id1b518a3aa34044748b87fb8fac14d79653f6b18
Reviewed-by: Lars Knoll <lars.knoll@qt.io>
Reviewed-by: Oswald Buddenhagen <oswald.buddenhagen@theqtcompany.com>
2016-08-25 13:45:44 +00:00
|
|
|
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)
|
|
|
|
}
|
|
|
|
|
2019-08-01 05:56:59 +00:00
|
|
|
defineReplace(qtExportDepsForModule) {
|
Modularize the new configure system (infrastructure part)
This change implements the required infrastructure to modularize the new
configuration system.
This requires a hierarchy of configuration files, both for handling
multiple repositories and for individual modules inside the same
repository.
When configuring, they all need to get loaded first, as command line
processing needs to know about all possible command line options.
When the command line has been processed, the individual configuration
files need to get processed one after the other and independently from
each other.
Configure is now automatically invoked when building the a project
tree's "root" project; this works with both modular and top-level builds
of Qt (the latter with an according change in the super repo). As an
immediate consequence, the -skip option moves to the super repo with a
different implementation, as configuration is now done after the repo
list is determined. The option belongs there anyway.
This commit also adds an optional testDir entry to the json file. Like
this, we can still have all configure tests in qtbase/config.tests and
the configuration file in, e.g., corelib can reference those.
The files section can now be left out as long as a 'module' entry is
present, specifying the module name. The names of the files to generate
can then be deduced from that name. We still need to be able to specify
names directly for the global configuration files.
qtConfig() now also queries features which are module-specific. As it is
sometimes necessary to query the configuration of modules which should
not be actually linked (and cannot in the case of subdirs projects), the
new variable QT_FOR_CONFIG which allows specifying configuration-only
dependencies is introduced.
Done-with: Oswald Buddenhagen <oswald.buddenhagen@theqtcompany.com>
Change-Id: Id1b518a3aa34044748b87fb8fac14d79653f6b18
Reviewed-by: Lars Knoll <lars.knoll@qt.io>
Reviewed-by: Oswald Buddenhagen <oswald.buddenhagen@theqtcompany.com>
2016-08-25 13:45:44 +00:00
|
|
|
result =
|
|
|
|
for (lib, QT.$${1}.libraries) {
|
|
|
|
NAME = $$upper($$lib)
|
|
|
|
vars = \
|
2018-04-17 17:17:25 +00:00
|
|
|
QMAKE_DEPENDS_$${NAME}_CC QMAKE_DEPENDS_$${NAME}_LD \
|
2016-10-11 16:09:07 +00:00
|
|
|
QMAKE_DEFINES_$$NAME QMAKE_INCDIR_$$NAME
|
Modularize the new configure system (infrastructure part)
This change implements the required infrastructure to modularize the new
configuration system.
This requires a hierarchy of configuration files, both for handling
multiple repositories and for individual modules inside the same
repository.
When configuring, they all need to get loaded first, as command line
processing needs to know about all possible command line options.
When the command line has been processed, the individual configuration
files need to get processed one after the other and independently from
each other.
Configure is now automatically invoked when building the a project
tree's "root" project; this works with both modular and top-level builds
of Qt (the latter with an according change in the super repo). As an
immediate consequence, the -skip option moves to the super repo with a
different implementation, as configuration is now done after the repo
list is determined. The option belongs there anyway.
This commit also adds an optional testDir entry to the json file. Like
this, we can still have all configure tests in qtbase/config.tests and
the configuration file in, e.g., corelib can reference those.
The files section can now be left out as long as a 'module' entry is
present, specifying the module name. The names of the files to generate
can then be deduced from that name. We still need to be able to specify
names directly for the global configuration files.
qtConfig() now also queries features which are module-specific. As it is
sometimes necessary to query the configuration of modules which should
not be actually linked (and cannot in the case of subdirs projects), the
new variable QT_FOR_CONFIG which allows specifying configuration-only
dependencies is introduced.
Done-with: Oswald Buddenhagen <oswald.buddenhagen@theqtcompany.com>
Change-Id: Id1b518a3aa34044748b87fb8fac14d79653f6b18
Reviewed-by: Lars Knoll <lars.knoll@qt.io>
Reviewed-by: Oswald Buddenhagen <oswald.buddenhagen@theqtcompany.com>
2016-08-25 13:45:44 +00:00
|
|
|
for (var, vars) {
|
2019-04-29 10:39:52 +00:00
|
|
|
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)"
|
Modularize the new configure system (infrastructure part)
This change implements the required infrastructure to modularize the new
configuration system.
This requires a hierarchy of configuration files, both for handling
multiple repositories and for individual modules inside the same
repository.
When configuring, they all need to get loaded first, as command line
processing needs to know about all possible command line options.
When the command line has been processed, the individual configuration
files need to get processed one after the other and independently from
each other.
Configure is now automatically invoked when building the a project
tree's "root" project; this works with both modular and top-level builds
of Qt (the latter with an according change in the super repo). As an
immediate consequence, the -skip option moves to the super repo with a
different implementation, as configuration is now done after the repo
list is determined. The option belongs there anyway.
This commit also adds an optional testDir entry to the json file. Like
this, we can still have all configure tests in qtbase/config.tests and
the configuration file in, e.g., corelib can reference those.
The files section can now be left out as long as a 'module' entry is
present, specifying the module name. The names of the files to generate
can then be deduced from that name. We still need to be able to specify
names directly for the global configuration files.
qtConfig() now also queries features which are module-specific. As it is
sometimes necessary to query the configuration of modules which should
not be actually linked (and cannot in the case of subdirs projects), the
new variable QT_FOR_CONFIG which allows specifying configuration-only
dependencies is introduced.
Done-with: Oswald Buddenhagen <oswald.buddenhagen@theqtcompany.com>
Change-Id: Id1b518a3aa34044748b87fb8fac14d79653f6b18
Reviewed-by: Lars Knoll <lars.knoll@qt.io>
Reviewed-by: Oswald Buddenhagen <oswald.buddenhagen@theqtcompany.com>
2016-08-25 13:45:44 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
return($$result)
|
|
|
|
}
|
|
|
|
|
2019-08-01 05:56:59 +00:00
|
|
|
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)
|
|
|
|
}
|
|
|
|
|
2012-04-16 12:13:12 +00:00
|
|
|
!build_pass {
|
|
|
|
|
2013-01-28 20:07:14 +00:00
|
|
|
# Create a module .pri file
|
2013-05-08 13:30:56 +00:00
|
|
|
host_build: \
|
|
|
|
module_libs = "\$\$QT_MODULE_HOST_LIB_BASE"
|
2013-01-28 20:07:14 +00:00
|
|
|
else: \
|
2013-05-08 13:30:56 +00:00
|
|
|
module_libs = "\$\$QT_MODULE_LIB_BASE"
|
2016-03-03 13:29:53 +00:00
|
|
|
# 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)"
|
2013-02-01 16:30:31 +00:00
|
|
|
else: \
|
|
|
|
module_rundep =
|
2015-11-19 16:11:05 +00:00
|
|
|
module_build_type = v2
|
2015-04-27 16:20:04 +00:00
|
|
|
static: \
|
2015-11-19 16:11:05 +00:00
|
|
|
module_build_type += staticlib
|
2016-12-23 18:35:45 +00:00
|
|
|
lib_bundle: \
|
2015-11-19 16:11:05 +00:00
|
|
|
module_build_type += lib_bundle
|
2016-12-23 18:35:45 +00:00
|
|
|
module_frameworks: \
|
2015-11-19 16:11:05 +00:00
|
|
|
MODULE_FRAMEWORKS = " \$\$QT_MODULE_LIB_BASE"
|
2013-07-04 16:20:44 +00:00
|
|
|
internal_module: \
|
|
|
|
module_build_type += internal_module
|
2014-11-23 05:00:34 +00:00
|
|
|
ltcg: \
|
|
|
|
module_build_type += ltcg
|
2015-11-19 16:11:05 +00:00
|
|
|
module_module =
|
|
|
|
!equals(TEMPLATE, aux) {
|
|
|
|
module_module = $$TARGET$$QT_LIBINFIX
|
|
|
|
!lib_bundle: module_module ~= s,^Qt,Qt$$QT_MAJOR_VERSION,
|
|
|
|
}
|
2013-01-28 20:07:14 +00:00
|
|
|
!isEmpty(MODULE_CONFIG): \
|
2013-10-21 19:05:35 +00:00
|
|
|
module_config = "QT.$${MODULE_ID}.CONFIG = $$MODULE_CONFIG"
|
2013-01-28 20:07:14 +00:00
|
|
|
else: \
|
|
|
|
module_config =
|
2014-04-02 20:17:40 +00:00
|
|
|
!isEmpty(MODULE_PLUGIN_TYPES): \
|
2016-10-10 15:51:33 +00:00
|
|
|
module_plugtypes = "QT.$${MODULE_ID}.plugin_types = $$replace(MODULE_PLUGIN_TYPES, /[^.]+\\.[^.]+$, )"
|
2014-04-02 20:17:40 +00:00
|
|
|
else: \
|
|
|
|
module_plugtypes =
|
2014-10-13 12:47:13 +00:00
|
|
|
!isEmpty(MODULE_MASTER_HEADER): \
|
|
|
|
module_master = "QT.$${MODULE_ID}.master_header = $$MODULE_MASTER_HEADER"
|
|
|
|
else: \
|
|
|
|
module_master =
|
2013-01-28 20:07:14 +00:00
|
|
|
MODULE_PRI_CONT = \
|
2013-10-21 19:05:35 +00:00
|
|
|
"QT.$${MODULE_ID}.VERSION = $${VERSION}" \
|
2013-01-28 20:07:14 +00:00
|
|
|
"" \
|
2013-10-21 19:05:35 +00:00
|
|
|
"QT.$${MODULE_ID}.name = $$TARGET" \
|
2015-11-19 16:11:05 +00:00
|
|
|
"QT.$${MODULE_ID}.module = $$module_module" \
|
2020-11-02 16:12:32 +00:00
|
|
|
"QT.$${MODULE_ID}.ldflags = $$MODULE_LDFLAGS" \
|
2013-10-21 19:05:35 +00:00
|
|
|
"QT.$${MODULE_ID}.libs = $$module_libs" \
|
2014-10-13 12:47:13 +00:00
|
|
|
$$module_master \
|
2015-11-19 16:11:05 +00:00
|
|
|
"QT.$${MODULE_ID}.includes = $$MODULE_INCLUDES" \
|
|
|
|
"QT.$${MODULE_ID}.frameworks =$$MODULE_FRAMEWORKS"
|
2013-05-08 13:30:56 +00:00
|
|
|
!host_build: MODULE_PRI_CONT += \
|
2013-10-21 19:05:35 +00:00
|
|
|
"QT.$${MODULE_ID}.bins = \$\$QT_MODULE_BIN_BASE" \
|
2014-04-02 20:17:40 +00:00
|
|
|
$$module_plugtypes
|
2013-05-08 13:30:56 +00:00
|
|
|
MODULE_PRI_CONT += \
|
2013-10-21 19:05:35 +00:00
|
|
|
"QT.$${MODULE_ID}.depends =$$join(MODULE_DEPENDS, " ", " ")" \
|
2013-02-01 16:30:31 +00:00
|
|
|
$$module_rundep \
|
2016-10-12 09:30:58 +00:00
|
|
|
"QT.$${MODULE_ID}.uses =$$join(QMAKE_USE, " ", " ")" \
|
2013-10-21 19:05:35 +00:00
|
|
|
"QT.$${MODULE_ID}.module_config =$$join(module_build_type, " ", " ")" \
|
2013-01-28 20:07:14 +00:00
|
|
|
$$module_config \
|
2014-11-27 13:12:40 +00:00
|
|
|
"QT.$${MODULE_ID}.DEFINES = $$val_escape(MODULE_DEFINES)" \
|
Modularize the new configure system (infrastructure part)
This change implements the required infrastructure to modularize the new
configuration system.
This requires a hierarchy of configuration files, both for handling
multiple repositories and for individual modules inside the same
repository.
When configuring, they all need to get loaded first, as command line
processing needs to know about all possible command line options.
When the command line has been processed, the individual configuration
files need to get processed one after the other and independently from
each other.
Configure is now automatically invoked when building the a project
tree's "root" project; this works with both modular and top-level builds
of Qt (the latter with an according change in the super repo). As an
immediate consequence, the -skip option moves to the super repo with a
different implementation, as configuration is now done after the repo
list is determined. The option belongs there anyway.
This commit also adds an optional testDir entry to the json file. Like
this, we can still have all configure tests in qtbase/config.tests and
the configuration file in, e.g., corelib can reference those.
The files section can now be left out as long as a 'module' entry is
present, specifying the module name. The names of the files to generate
can then be deduced from that name. We still need to be able to specify
names directly for the global configuration files.
qtConfig() now also queries features which are module-specific. As it is
sometimes necessary to query the configuration of modules which should
not be actually linked (and cannot in the case of subdirs projects), the
new variable QT_FOR_CONFIG which allows specifying configuration-only
dependencies is introduced.
Done-with: Oswald Buddenhagen <oswald.buddenhagen@theqtcompany.com>
Change-Id: Id1b518a3aa34044748b87fb8fac14d79653f6b18
Reviewed-by: Lars Knoll <lars.knoll@qt.io>
Reviewed-by: Oswald Buddenhagen <oswald.buddenhagen@theqtcompany.com>
2016-08-25 13:45:44 +00:00
|
|
|
$$qtGetFeaturesForModule($$MODULE_ID) \
|
|
|
|
$$qtGetExportsForModule($$MODULE_ID) \
|
|
|
|
"QT_CONFIG +=$$join(QT.$${MODULE_ID}.QT_CONFIG, " ", " ")" \
|
2013-01-28 20:07:14 +00:00
|
|
|
"" \
|
2020-10-27 15:50:51 +00:00
|
|
|
"QT_MODULES += $$MODULE" \
|
|
|
|
"$$MODULE_PRI_EXTRA_CONTENT"
|
2016-07-14 14:50:02 +00:00
|
|
|
write_file($$MODULE_PRI, MODULE_PRI_CONT)|error()
|
2015-03-16 12:05:46 +00:00
|
|
|
!internal_module:!no_private_module {
|
2015-11-19 16:11:05 +00:00
|
|
|
module_build_type += internal_module
|
unbreak propagation of dependencies on private modules
most module project files define two logical modules: a public one and
the corresponding private one. these are really separate modules as far
as qmake is concerned (even though the private one contains just
headers), and consequently have separate dependencies - QT and
QT_FOR_PRIVATE.
as public modules cannot depend on private ones, all private
dependencies would have to go to QT_FOR_PRIVATE, and a dependency on the
respective public module would have to be added to QT. this would be a
bit tedious, so we have a convenience feature which allows putting
private dependencies into QT, but automatically "downgrades" them to
their public counterpart when creating the public module's .pri file.
however, we failed to put verbatim versions of these private
dependencies into the private modules, which meant that these
dependencies were not pulled in transitively by the private modules'
users.
note that this entirely unrelated to QT_PRIVATE - this one defines the
private (non-propagated) dependencies of the module's implementation,
i.e., the libraries (and headers) that are not part of the link
interface. there is no QT_PRIVATE_FOR_PRIVATE, because there is
obviously no point in assigning the dependencies to a particular
logical submodule when neither one inherits them as far as the qt
module system is concerned.
Change-Id: Ib056b47dde3341ef9a52ffff13efaf8ef8e6817b
Reviewed-by: Joerg Bornemann <joerg.bornemann@theqtcompany.com>
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
2016-01-08 17:45:21 +00:00
|
|
|
private_deps = $$QT
|
|
|
|
private_deps -= $$MODULE_DEPENDS
|
|
|
|
private_deps += $$MODULE $$QT_FOR_PRIVATE
|
|
|
|
private_deps ~= s,-private$,_private,g
|
2013-10-21 19:05:35 +00:00
|
|
|
MODULE_PRIVATE_PRI_CONT = \
|
|
|
|
"QT.$${MODULE}_private.VERSION = $${VERSION}" \
|
|
|
|
"" \
|
|
|
|
"QT.$${MODULE}_private.name = $${TARGET}" \ # Same name as base module
|
2015-11-19 16:11:05 +00:00
|
|
|
"QT.$${MODULE}_private.module =" \
|
2013-10-21 19:05:35 +00:00
|
|
|
"QT.$${MODULE}_private.libs = $$module_libs" \
|
|
|
|
"QT.$${MODULE}_private.includes = $$MODULE_PRIVATE_INCLUDES" \
|
2015-11-19 16:11:05 +00:00
|
|
|
"QT.$${MODULE}_private.frameworks =" \
|
unbreak propagation of dependencies on private modules
most module project files define two logical modules: a public one and
the corresponding private one. these are really separate modules as far
as qmake is concerned (even though the private one contains just
headers), and consequently have separate dependencies - QT and
QT_FOR_PRIVATE.
as public modules cannot depend on private ones, all private
dependencies would have to go to QT_FOR_PRIVATE, and a dependency on the
respective public module would have to be added to QT. this would be a
bit tedious, so we have a convenience feature which allows putting
private dependencies into QT, but automatically "downgrades" them to
their public counterpart when creating the public module's .pri file.
however, we failed to put verbatim versions of these private
dependencies into the private modules, which meant that these
dependencies were not pulled in transitively by the private modules'
users.
note that this entirely unrelated to QT_PRIVATE - this one defines the
private (non-propagated) dependencies of the module's implementation,
i.e., the libraries (and headers) that are not part of the link
interface. there is no QT_PRIVATE_FOR_PRIVATE, because there is
obviously no point in assigning the dependencies to a particular
logical submodule when neither one inherits them as far as the qt
module system is concerned.
Change-Id: Ib056b47dde3341ef9a52ffff13efaf8ef8e6817b
Reviewed-by: Joerg Bornemann <joerg.bornemann@theqtcompany.com>
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
2016-01-08 17:45:21 +00:00
|
|
|
"QT.$${MODULE}_private.depends = $$private_deps" \
|
2016-10-12 09:30:58 +00:00
|
|
|
"QT.$${MODULE}_private.uses =$$join(QMAKE_USE_FOR_PRIVATE, " ", " ")" \
|
Modularize the new configure system (infrastructure part)
This change implements the required infrastructure to modularize the new
configuration system.
This requires a hierarchy of configuration files, both for handling
multiple repositories and for individual modules inside the same
repository.
When configuring, they all need to get loaded first, as command line
processing needs to know about all possible command line options.
When the command line has been processed, the individual configuration
files need to get processed one after the other and independently from
each other.
Configure is now automatically invoked when building the a project
tree's "root" project; this works with both modular and top-level builds
of Qt (the latter with an according change in the super repo). As an
immediate consequence, the -skip option moves to the super repo with a
different implementation, as configuration is now done after the repo
list is determined. The option belongs there anyway.
This commit also adds an optional testDir entry to the json file. Like
this, we can still have all configure tests in qtbase/config.tests and
the configuration file in, e.g., corelib can reference those.
The files section can now be left out as long as a 'module' entry is
present, specifying the module name. The names of the files to generate
can then be deduced from that name. We still need to be able to specify
names directly for the global configuration files.
qtConfig() now also queries features which are module-specific. As it is
sometimes necessary to query the configuration of modules which should
not be actually linked (and cannot in the case of subdirs projects), the
new variable QT_FOR_CONFIG which allows specifying configuration-only
dependencies is introduced.
Done-with: Oswald Buddenhagen <oswald.buddenhagen@theqtcompany.com>
Change-Id: Id1b518a3aa34044748b87fb8fac14d79653f6b18
Reviewed-by: Lars Knoll <lars.knoll@qt.io>
Reviewed-by: Oswald Buddenhagen <oswald.buddenhagen@theqtcompany.com>
2016-08-25 13:45:44 +00:00
|
|
|
"QT.$${MODULE}_private.module_config =$$join(module_build_type, " ", " ")" \
|
|
|
|
$$qtGetFeaturesForModule($${MODULE}_private) \
|
|
|
|
"" \
|
2019-08-01 05:56:59 +00:00
|
|
|
$$qtExportDepsForModule($${MODULE}_private) \
|
Modularize the new configure system (infrastructure part)
This change implements the required infrastructure to modularize the new
configuration system.
This requires a hierarchy of configuration files, both for handling
multiple repositories and for individual modules inside the same
repository.
When configuring, they all need to get loaded first, as command line
processing needs to know about all possible command line options.
When the command line has been processed, the individual configuration
files need to get processed one after the other and independently from
each other.
Configure is now automatically invoked when building the a project
tree's "root" project; this works with both modular and top-level builds
of Qt (the latter with an according change in the super repo). As an
immediate consequence, the -skip option moves to the super repo with a
different implementation, as configuration is now done after the repo
list is determined. The option belongs there anyway.
This commit also adds an optional testDir entry to the json file. Like
this, we can still have all configure tests in qtbase/config.tests and
the configuration file in, e.g., corelib can reference those.
The files section can now be left out as long as a 'module' entry is
present, specifying the module name. The names of the files to generate
can then be deduced from that name. We still need to be able to specify
names directly for the global configuration files.
qtConfig() now also queries features which are module-specific. As it is
sometimes necessary to query the configuration of modules which should
not be actually linked (and cannot in the case of subdirs projects), the
new variable QT_FOR_CONFIG which allows specifying configuration-only
dependencies is introduced.
Done-with: Oswald Buddenhagen <oswald.buddenhagen@theqtcompany.com>
Change-Id: Id1b518a3aa34044748b87fb8fac14d79653f6b18
Reviewed-by: Lars Knoll <lars.knoll@qt.io>
Reviewed-by: Oswald Buddenhagen <oswald.buddenhagen@theqtcompany.com>
2016-08-25 13:45:44 +00:00
|
|
|
$$qtExportLibsForModule($${MODULE}_private)
|
2016-07-14 14:50:02 +00:00
|
|
|
write_file($$MODULE_PRIVATE_PRI, MODULE_PRIVATE_PRI_CONT)|error()
|
2013-10-21 19:05:35 +00:00
|
|
|
}
|
|
|
|
MODULE_PRI_FILES = $$MODULE_PRI $$MODULE_PRIVATE_PRI
|
2012-04-16 12:13:12 +00:00
|
|
|
|
2013-06-07 14:23:25 +00:00
|
|
|
need_fwd_pri {
|
|
|
|
|
2015-11-18 16:19:46 +00:00
|
|
|
!git_build: \
|
2013-06-07 14:23:25 +00:00
|
|
|
MODULE_BASE_INCDIR = $$MODULE_BASE_INDIR
|
|
|
|
else: \
|
|
|
|
MODULE_BASE_INCDIR = $$MODULE_BASE_OUTDIR
|
2012-04-16 12:13:12 +00:00
|
|
|
|
2013-01-28 19:25:44 +00:00
|
|
|
# Create a forwarding module .pri file
|
|
|
|
MODULE_FWD_PRI_CONT = \
|
2014-11-27 13:12:40 +00:00
|
|
|
"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))" \
|
2014-07-25 17:44:50 +00:00
|
|
|
"QT.$${MODULE_ID}.priority = 1"
|
2015-03-16 12:05:46 +00:00
|
|
|
!internal_module:!no_private_module: MODULE_FWD_PRI_CONT += \
|
2014-11-27 13:12:40 +00:00
|
|
|
"include($$val_escape(MODULE_PRIVATE_PRI))" \
|
2014-07-25 17:44:50 +00:00
|
|
|
"QT.$${MODULE}_private.priority = 1"
|
2015-11-18 16:19:46 +00:00
|
|
|
!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"
|
|
|
|
}
|
2016-07-14 14:50:02 +00:00
|
|
|
write_file($$MODULE_FWD_PRI, MODULE_FWD_PRI_CONT)|error()
|
2013-01-28 19:25:44 +00:00
|
|
|
touch($$MODULE_FWD_PRI, $$MODULE_PRI)
|
|
|
|
MODULE_PRI_FILES += $$MODULE_FWD_PRI
|
|
|
|
|
2013-06-07 14:23:25 +00:00
|
|
|
} else {
|
2013-01-28 19:25:44 +00:00
|
|
|
|
2013-06-07 12:06:24 +00:00
|
|
|
# This is needed for the direct include() below. Mirrors qt_config.prf
|
2013-01-28 19:25:44 +00:00
|
|
|
QT_MODULE_BIN_BASE = $$[QT_INSTALL_BINS]
|
|
|
|
QT_MODULE_INCLUDE_BASE = $$[QT_INSTALL_HEADERS]
|
|
|
|
QT_MODULE_LIB_BASE = $$[QT_INSTALL_LIBS]
|
2013-05-08 13:30:56 +00:00
|
|
|
QT_MODULE_HOST_LIB_BASE = $$[QT_HOST_LIBS]
|
2012-04-16 12:13:12 +00:00
|
|
|
|
|
|
|
}
|
2013-01-28 19:25:44 +00:00
|
|
|
|
|
|
|
# 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)
|
2013-10-21 19:05:35 +00:00
|
|
|
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 \
|
2015-11-19 16:11:05 +00:00
|
|
|
name module depends run_depends plugin_types module_config CONFIG DEFINES \
|
2016-12-21 16:10:25 +00:00
|
|
|
priority includes bins libs frameworks \
|
2013-10-21 19:05:35 +00:00
|
|
|
)):defined(QT.$${mod}.$$var, var):cache(QT.$${mod}.$$var, transient)
|
|
|
|
}
|
2013-03-01 12:11:06 +00:00
|
|
|
cache(QT_MODULES, transient)
|
2012-04-16 12:13:12 +00:00
|
|
|
|
2019-08-01 05:56:59 +00:00
|
|
|
} 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()
|
|
|
|
}
|
2012-04-16 12:13:12 +00:00
|
|
|
|
|
|
|
# Schedule the regular .pri file for installation
|
|
|
|
CONFIG += qt_install_module
|