c686e885c0
Building examples inside a Qt source tree is considered unsupported. Instead of checking, whether the build is done "in source" inside the source directory, we also have to check for "shadowed example builds" as they are done by Creator. An example would be: qtbase/examples/widgets/widgets/build-wiggly as a shadow build for qtbase/examples/widgets/widgets/wiggly. Fixes: QTBUG-76237 Change-Id: Iceb88af006fad249a4c13fa0b0345cf3f7086252 Reviewed-by: Joerg Bornemann <joerg.bornemann@qt.io>
146 lines
4.4 KiB
Plaintext
146 lines
4.4 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.
|
|
#
|
|
|
|
defineTest(addInstallFiles) {
|
|
for(sf, 2) {
|
|
sf = $$relative_path($$sf, $$_PRO_FILE_PWD_)
|
|
contains(sf, \\..*) {
|
|
check_examples: message("Notice: $$_PRO_FILE_ refers to $$sf")
|
|
} else {
|
|
sfp = $$replace(sf, /.*, )
|
|
!equals(sfp, $$sf): \
|
|
$$1 *= $$sfp
|
|
else: \
|
|
$$1 += $$sf
|
|
}
|
|
}
|
|
export($$1)
|
|
}
|
|
|
|
moduleRoot = $$dirname(_QMAKE_CONF_)
|
|
probase = $$relative_path($$_PRO_FILE_PWD_, $$moduleRoot/examples)
|
|
isEmpty(probase)|contains(probase, ^\\..*): \
|
|
return()
|
|
|
|
isEmpty(_QMAKE_CACHE_) {
|
|
moduleRootRelativeToBuildDir = $$relative_path($$moduleRoot, $$OUT_PWD)
|
|
# Check if OUT_PWD is inside module root
|
|
equals(moduleRootRelativeToBuildDir, .)|contains(moduleRootRelativeToBuildDir, \(\.\./\)+\(\.\.\)?): \
|
|
error("You cannot build examples inside the Qt source tree, except as part of a proper Qt build.")
|
|
}
|
|
|
|
contains(TEMPLATE, "vc.*"): \
|
|
return()
|
|
|
|
contains(TEMPLATE, .*app): \
|
|
qtSetQmlPath()
|
|
|
|
for(ex, EXAMPLE_FILES): \
|
|
sourcefiles += $$files($$absolute_path($$ex, $$_PRO_FILE_PWD_))
|
|
for(res, RESOURCES) {
|
|
!contains(res, .*\\.qrc): \
|
|
next()
|
|
rfile = $$absolute_path($$res, $$_PRO_FILE_PWD_)
|
|
rpath = $$dirname(rfile)
|
|
rcont = $$cat($$rfile, lines)
|
|
for (rline, rcont) {
|
|
resrc = $$replace(rline, ^[ \\t]*<file[^>]*>([^<]+)</file>[ \\t]*$, \\1)
|
|
!equals(resrc, $$rline): \
|
|
sourcefiles += $$absolute_path($$resrc, $$rpath)
|
|
}
|
|
}
|
|
for(res, RC_FILE) {
|
|
rfile = $$absolute_path($$res, $$_PRO_FILE_PWD_)
|
|
rpath = $$dirname(rfile)
|
|
rcont = $$cat($$rfile, lines)
|
|
for (rline, rcont) {
|
|
resrc = $$replace(rline, "^\\d+\\s+ICON\\s+[^\"]*\"([^\"]+)\"\$", \\1)
|
|
!equals(resrc, $$rline): \
|
|
sourcefiles += $$absolute_path($$resrc, $$rpath)
|
|
}
|
|
}
|
|
sourcefiles += \
|
|
$$ANDROID_PACKAGE_SOURCE_DIR \
|
|
$$QMAKE_INFO_PLIST \
|
|
$$DISTFILES
|
|
extras = \
|
|
$$_PRO_FILE_PWD_/README \
|
|
$$_PRO_FILE_PWD_/README.TXT \
|
|
$$files($$_PRO_FILE_PWD_/*.pri) \
|
|
$$replace(_PRO_FILE_, \\.pro$, .qmlproject) \
|
|
$$replace(_PRO_FILE_, \\.pro$, .json) \
|
|
$$replace(_PRO_FILE_, \\.pro$, .inf)
|
|
for(extra, extras): \
|
|
exists($$extra): \
|
|
sourcefiles += $$extra
|
|
|
|
# Just for Qt Creator
|
|
OTHER_FILES += $$sourcefiles
|
|
|
|
sourcefiles += \
|
|
$$_PRO_FILE_ $$RC_FILE $$DEF_FILE \
|
|
$$SOURCES $$HEADERS $$FORMS $$RESOURCES $$TRANSLATIONS \
|
|
$$DBUS_ADAPTORS $$DBUS_INTERFACES
|
|
addInstallFiles(sources.files, $$sourcefiles)
|
|
sources.path = $$[QT_INSTALL_EXAMPLES]/$$probase
|
|
INSTALLS += sources
|
|
|
|
check_examples {
|
|
srcfiles = $$sources.files
|
|
for(inst, INSTALLS): \
|
|
!equals(inst, target):!contains($${inst}.CONFIG, no_check_exist): \
|
|
for(file, $${inst}.files): \
|
|
instfiles += $$files($$absolute_path($$file, $$_PRO_FILE_PWD_))
|
|
addInstallFiles(srcfiles, $$instfiles)
|
|
|
|
thefiles = $$files($$_PRO_FILE_PWD_/*)
|
|
for(i, thefiles): \
|
|
allfiles += $$relative_path($$i, $$_PRO_FILE_PWD_)
|
|
for(i, srcfiles): \
|
|
allfiles -= $$relative_path($$i, $$_PRO_FILE_PWD_)
|
|
for(i, SUBDIRS) {
|
|
sd = $$eval($${i}.file)
|
|
!isEmpty(sd) {
|
|
sd ~= s,/.*,,
|
|
} else {
|
|
sd = $$eval($${i}.subdir)
|
|
isEmpty(sd): sd = $$i
|
|
}
|
|
allfiles -= $$sd
|
|
}
|
|
allfiles -= doc
|
|
!isEmpty(allfiles): warning("remaining files in $$_PRO_FILE_PWD_: $$allfiles")
|
|
}
|
|
|
|
equals(TEMPLATE, app)|equals(TEMPLATE, lib) {
|
|
!contains(INSTALLS, target) {
|
|
!install_ok: \
|
|
error("$$_PRO_FILE_ is lacking an install target.")
|
|
else: check_examples: \
|
|
warning("$$_PRO_FILE_ is lacking an install target.")
|
|
} else: !equals(target.path, $$sources.path) {
|
|
!install_ok: \
|
|
error("$$_PRO_FILE_ installs target to unexpected location.")
|
|
else: check_examples: \
|
|
warning("$$_PRO_FILE_ installs target to unexpected location.")
|
|
}
|
|
}
|
|
|
|
!equals(TEMPLATE, subdirs):!compile_examples {
|
|
TEMPLATE = aux
|
|
CONFIG -= have_target qt staticlib dll
|
|
SOURCES =
|
|
OBJECTIVE_SOURCES =
|
|
INSTALLS -= target
|
|
} else {
|
|
CONFIG += relative_qt_rpath # Examples built as part of Qt should be relocatable
|
|
}
|