1e4801c7ce
configure -no-compile-examples means that the examples won't be compiled, but processed by qmake to generate install targets. So we shouldn't do any substitution (like it is done for CMake targets), or extra compilers / copies (like it is done for qmltypes). Also install the qmldir files that some qml examples need. Fixes: QTBUG-83375 Fixes: QTBUG-83704 Change-Id: I6a9393bd914d98a5d85f4089205510e49a435842 Reviewed-by: Joerg Bornemann <joerg.bornemann@qt.io> Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
150 lines
4.5 KiB
Plaintext
150 lines
4.5 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 \
|
|
$$_PRO_FILE_PWD_/qmldir \
|
|
$$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
|
|
QMAKE_SUBSTITUTES =
|
|
QMAKE_EXTRA_COMPILERS =
|
|
COPIES =
|
|
} else {
|
|
CONFIG += relative_qt_rpath # Examples built as part of Qt should be relocatable
|
|
}
|