From ccbcdf89f97f2c952074409bc95112f3c01c08e9 Mon Sep 17 00:00:00 2001 From: Joerg Bornemann Date: Tue, 11 Mar 2014 15:56:52 +0100 Subject: [PATCH] qmake: add replacement function getenv This is useful for querying environment variables which have parentheses in their name. Such jewels exist on Windows. The usual $$(VARNAME) syntax fails for those. Change-Id: I1d2766cabdc7f637caa9ae6408967685e02f5029 Reviewed-by: Oswald Buddenhagen (cherry picked from qtbase/b73d6be6a0723d5f886f5a8faa9123534e998331) Reviewed-by: Joerg Bornemann --- src/shared/proparser/qmakebuiltins.cpp | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/src/shared/proparser/qmakebuiltins.cpp b/src/shared/proparser/qmakebuiltins.cpp index 9d2d4a9acde..4e2f503e115 100644 --- a/src/shared/proparser/qmakebuiltins.cpp +++ b/src/shared/proparser/qmakebuiltins.cpp @@ -88,7 +88,7 @@ enum ExpandFunc { E_UPPER, E_LOWER, E_TITLE, E_FILES, E_PROMPT, E_RE_ESCAPE, E_VAL_ESCAPE, E_REPLACE, E_SORT_DEPENDS, E_RESOLVE_DEPENDS, E_ENUMERATE_VARS, E_SHADOWED, E_ABSOLUTE_PATH, E_RELATIVE_PATH, E_CLEAN_PATH, - E_SYSTEM_PATH, E_SHELL_PATH, E_SYSTEM_QUOTE, E_SHELL_QUOTE + E_SYSTEM_PATH, E_SHELL_PATH, E_SYSTEM_QUOTE, E_SHELL_QUOTE, E_GETENV }; enum TestFunc { @@ -145,6 +145,7 @@ void QMakeEvaluator::initFunctionStatics() { "shell_path", E_SHELL_PATH }, { "system_quote", E_SYSTEM_QUOTE }, { "shell_quote", E_SHELL_QUOTE }, + { "getenv", E_GETENV }, }; for (unsigned i = 0; i < sizeof(expandInits)/sizeof(expandInits[0]); ++i) statics.expands.insert(ProKey(expandInits[i].name), expandInits[i].func); @@ -1079,6 +1080,15 @@ ProStringList QMakeEvaluator::evaluateBuiltinExpand( ret << (rstr.isSharedWith(m_tmp1) ? args.at(0) : ProString(rstr).setSource(args.at(0))); } break; + case E_GETENV: + if (args.count() != 1) { + evalError(fL1S("getenv(arg) requires one argument.")); + } else { + const ProString &var = args.at(0); + const ProString &val = ProString(m_option->getEnv(var.toQString(m_tmp1))); + ret << val; + } + break; default: evalError(fL1S("Function '%1' is not implemented.").arg(func.toQString(m_tmp1))); break;