| # Create the super cache so modules will add themselves to it. |
| cache(, super) |
| |
| # Suppress the license check on subsequent "visits". The first |
| # visit will skip it anyway due to not having a compiler set up |
| # yet. This cannot be added to the super cache, because that is |
| # read before spec_pre.prf, which flushes CONFIG. This does not |
| # affect submodules, as they come with a .qmake.conf. But that |
| # one sets the flag via qt_build_config.prf anyway. |
| !QTDIR_build: cache(CONFIG, add, $$list(QTDIR_build)) |
| |
| TEMPLATE = subdirs |
| |
| CONFIG += prepare_docs qt_docs_targets |
| |
| # Extract submodules from .gitmodules. |
| lines = $$cat(.gitmodules, lines) |
| for (line, lines) { |
| mod = $$replace(line, "^\\[submodule \"([^\"]+)\"\\]$", \\1) |
| !equals(mod, $$line) { |
| module = $$mod |
| modules += $$mod |
| } else { |
| prop = $$replace(line, "^$$escape_expand(\\t)([^ =]+) *=.*$", \\1) |
| !equals(prop, $$line) { |
| val = $$replace(line, "^[^=]+= *", ) |
| module.$${module}.$$prop = $$split(val) |
| } else { |
| error("Malformed line in .gitmodules: $$line") |
| } |
| } |
| } |
| QMAKE_INTERNAL_INCLUDED_FILES += $$PWD/.gitmodules |
| |
| QT_SKIP_MODULES = |
| |
| # This is a bit hacky, but a proper implementation is not worth it. |
| args = $$QMAKE_EXTRA_ARGS |
| contains(args, -redo): \ |
| args += $$cat($$OUT_PWD/config.opt, lines) |
| for (ever) { |
| isEmpty(args): break() |
| a = $$take_first(args) |
| |
| equals(a, -skip) { |
| isEmpty(args): break() |
| m = $$take_first(args) |
| contains(m, -.*): next() |
| m ~= s/^(qt)?/qt/ |
| !contains(modules, $$m): \ |
| error("-skip command line argument used with non-existent module '$$m'.") |
| QT_SKIP_MODULES += $$m |
| } |
| } |
| |
| modules = $$sort_depends(modules, module., .depends .recommends .serialize) |
| modules = $$reverse(modules) |
| for (mod, modules) { |
| project = $$eval(module.$${mod}.project) |
| equals(project, -): \ |
| next() |
| |
| deps = $$eval(module.$${mod}.depends) |
| recs = $$eval(module.$${mod}.recommends) $$eval(module.$${mod}.serialize) |
| for (d, $$list($$deps $$recs)): \ |
| !contains(modules, $$d): \ |
| error("'$$mod' depends on undeclared '$$d'.") |
| |
| contains(QT_SKIP_MODULES, $$mod): \ |
| next() |
| !isEmpty(QT_BUILD_MODULES):!contains(QT_BUILD_MODULES, $$mod): \ |
| next() |
| |
| isEmpty(project) { |
| !exists($$mod/$${mod}.pro): \ |
| next() |
| $${mod}.subdir = $$mod |
| } else { |
| !exists($$mod/$$project): \ |
| next() |
| $${mod}.file = $$mod/$$project |
| $${mod}.makefile = Makefile |
| } |
| $${mod}.target = module-$$mod |
| |
| for (d, deps) { |
| !contains(SUBDIRS, $$d) { |
| $${mod}.target = |
| break() |
| } |
| $${mod}.depends += $$d |
| } |
| isEmpty($${mod}.target): \ |
| next() |
| for (d, recs) { |
| contains(SUBDIRS, $$d): \ |
| $${mod}.depends += $$d |
| } |
| |
| SUBDIRS += $$mod |
| } |
| |
| load(qt_configure) |