add support for copying arbitrary files
this adds file_copies.prf, which understands the variable COPIES, which works analogously to INSTALLS. i've been holding this off for a long time, as it is not without caveats. however, similar hacks are proliferating all over the code base, so it's time we formalized it. in fact, it's the easiest way to fix some nasty shadow build problems, which is why i'm adding this on the stable branch. Task-number: QTBUG-52256 Change-Id: Icbe3b9fbb79c952546aad2d467a438d3a69d749f Reviewed-by: Liang Qi <liang.qi@qt.io> Reviewed-by: Joerg Bornemann <joerg.bornemann@theqtcompany.com>
This commit is contained in:
parent
ab06266e15
commit
a060d25ef2
41
mkspecs/features/file_copies.prf
Normal file
41
mkspecs/features/file_copies.prf
Normal file
@ -0,0 +1,41 @@
|
|||||||
|
isEmpty(COPIES): return()
|
||||||
|
contains(TEMPLATE, .*subdirs): error("COPIES does not work with TEMPLATE=subdirs")
|
||||||
|
|
||||||
|
build_pass:build_all: \
|
||||||
|
debug_and_release:debug {
|
||||||
|
# Avoid that multiple build passes race with each other.
|
||||||
|
# This will fail to copy anything if the user explicitly invokes
|
||||||
|
# only the non-primary build. This is unfixable, as at qmake time
|
||||||
|
# we cannot possibly know how make will be invoked, yet we must
|
||||||
|
# predict it here.
|
||||||
|
return()
|
||||||
|
}
|
||||||
|
|
||||||
|
defineReplace(qtStripProPwd) {
|
||||||
|
return($$relative_path($$1, $$_PRO_FILE_PWD_))
|
||||||
|
}
|
||||||
|
|
||||||
|
for (cp, COPIES) {
|
||||||
|
isEmpty($${cp}.files): next()
|
||||||
|
pfx = copy_$${cp}
|
||||||
|
for (f, $${cp}.files): \
|
||||||
|
$${pfx}.files += $$absolute_path($$f, $$_PRO_FILE_PWD_)
|
||||||
|
path = $$eval($${cp}.path)
|
||||||
|
isEmpty(path): error("COPY $cp defines no .path")
|
||||||
|
base = $$eval($${cp}.base)
|
||||||
|
isEmpty(base) {
|
||||||
|
$${pfx}.output = $$path/${QMAKE_FILE_BASE}${QMAKE_FILE_EXT}
|
||||||
|
} else: isEqual(base, $$_PRO_FILE_PWD_) {
|
||||||
|
$${pfx}.output = $$path/${QMAKE_FUNC_FILE_IN_qtStripProPwd}
|
||||||
|
} else {
|
||||||
|
eval(defineReplace(qtStripSrcDir_$$cp) { \
|
||||||
|
return(\$\$relative_path(\$\$1, $$val_escape(base))) \
|
||||||
|
})
|
||||||
|
$${pfx}.output = $$path/${QMAKE_FUNC_FILE_IN_qtStripSrcDir_$$cp}
|
||||||
|
}
|
||||||
|
$${pfx}.input = $${pfx}.files
|
||||||
|
$${pfx}.commands = $$QMAKE_COPY ${QMAKE_FILE_IN} ${QMAKE_FILE_OUT}
|
||||||
|
$${pfx}.name = COPY ${QMAKE_FILE_IN}
|
||||||
|
$${pfx}.CONFIG = no_link no_clean target_predeps
|
||||||
|
QMAKE_EXTRA_COMPILERS += $${pfx}
|
||||||
|
}
|
@ -51,5 +51,5 @@ equals(QMAKE_HOST.os, Windows) {
|
|||||||
QMAKE_SH = sh
|
QMAKE_SH = sh
|
||||||
}
|
}
|
||||||
|
|
||||||
CONFIG = qt warn_on release link_prl
|
CONFIG = file_copies qt warn_on release link_prl
|
||||||
QT = core gui
|
QT = core gui
|
||||||
|
Loading…
Reference in New Issue
Block a user