diff options
Diffstat (limited to 'mkspecs/features/qt_functions.prf')
-rw-r--r-- | mkspecs/features/qt_functions.prf | 61 |
1 files changed, 51 insertions, 10 deletions
diff --git a/mkspecs/features/qt_functions.prf b/mkspecs/features/qt_functions.prf index 00f4bdf93e..abb7439f18 100644 --- a/mkspecs/features/qt_functions.prf +++ b/mkspecs/features/qt_functions.prf @@ -70,6 +70,7 @@ defineTest(qtPrepareTool) { } } QT_TOOL_ENV += $$eval(QT_TOOL.$${2}.envvars) + QT_TOOL_NAME = $$2 !isEmpty(3)|!isEmpty(4) { $$1$$3 = for (arg, cmd): \ @@ -90,6 +91,7 @@ defineTest(qtAddToolEnv) { ds = $$QMAKE_DIR_SEP else: \ ds = $$DIR_SEPARATOR + batch_sets = for(env, 2) { value = $$eval($${env}.value) !isEmpty(value) { @@ -97,22 +99,61 @@ defineTest(qtAddToolEnv) { equals(ds, /) { contains($${env}.CONFIG, prepend): infix = \${$$name:+:\$$$name} else: infix = - val = "$$name=$$shell_quote($$join(value, :))$$infix" + # Under msys, this path is taken only in the non-system() + # case, so using shell_quote() always works. + batch_sets += \ + "$$name=$$shell_quote($$join(value, :))$$infix" \ + "export $$name" } else { - # Escape closing parens when expanding the variable, otherwise cmd confuses itself. - contains($${env}.CONFIG, prepend): infix = ;%$$name:)=^)% - else: infix = + value ~= s,\\^,^^^^,g + value ~= s,!,^^!,g value ~= s,\\),^),g - val = "(set $$name=$$join(value, ;)$$infix) &" - } - isEmpty(3): !contains(TEMPLATE, vc.*) { - contains(MAKEFILE_GENERATOR, MS.*): val ~= s,%,%%,g - val ~= s,\\\$,\$\$,g + contains($${env}.CONFIG, prepend) { + batch_sets += \ + "if defined $$name (" \ + " set $$name=$$join(value, ;);!$$name!" \ + ") else (" \ + " set $$name=$$join(value, ;)" \ + ")" + } else { + batch_sets += "(set $$name=$$join(value, ;))" + } } - $$1 = "$$val $$eval($$1)" } } + !isEmpty(batch_sets) { + batch_name = wrapper + !isEmpty(QT_TOOL_NAME): batch_name = $${QT_TOOL_NAME}_wrapper + cmd = $$eval($$1) + !isEmpty(cmd): cmd = "$$cmd " + equals(ds, /) { + batch_name = $${batch_name}.sh + batch_cont = \ + "$$LITERAL_HASH!/bin/sh" \ + $$batch_sets \ + "exec $$cmd\"$@\"" + # It would be nicer to use the '.' command (without 'exec' above), + # but that doesn't set the positional arguments under (d)ash. + $$1 = + } else { + batch_name = $${batch_name}.bat + batch_cont = \ + "@echo off" \ + "SetLocal EnableDelayedExpansion" \ + $$batch_sets \ + "$$cmd%*" \ + "EndLocal" + $$1 = call + } + !build_pass:!write_file($$OUT_PWD/$$batch_name, batch_cont, exe): error("Aborting.") + isEmpty(3): \ + $$1 += $$shell_quote($$shell_path($$OUT_PWD/$$batch_name)) + else: \ + $$1 += $$system_quote($$system_path($$OUT_PWD/$$batch_name)) + QMAKE_DISTCLEAN += $$OUT_PWD/$$batch_name + } export($$1) + export(QMAKE_DISTCLEAN) } # target variable, dependency var name, [non-empty: prepare for system(), not make] |