summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJoerg Bornemann <joerg.bornemann@digia.com>2014-03-11 15:56:52 +0100
committerThe Qt Project <gerrit-noreply@qt-project.org>2014-03-20 08:35:24 +0100
commitb73d6be6a0723d5f886f5a8faa9123534e998331 (patch)
tree786ad6dd3d53ccd21b1e8db3f1e49178879c0f2f
parent5fe0c9e9b02669c8690d78b5305e1291d0f807bf (diff)
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 <oswald.buddenhagen@digia.com>
-rw-r--r--qmake/doc/src/qmake-manual.qdoc7
-rw-r--r--qmake/library/qmakebuiltins.cpp12
2 files changed, 18 insertions, 1 deletions
diff --git a/qmake/doc/src/qmake-manual.qdoc b/qmake/doc/src/qmake-manual.qdoc
index 958550ce91..01313b405f 100644
--- a/qmake/doc/src/qmake-manual.qdoc
+++ b/qmake/doc/src/qmake-manual.qdoc
@@ -2559,6 +2559,13 @@
See also \l{infile(filename, var, val)}{infile()}.
+ \section2 getenv(variablename)
+
+ Returns the value of the environment variable \c variablename.
+ This is mostly equivalent to the \c $$(variablename) syntax.
+ The \c getenv function, however, supports environment variables with
+ parentheses in their name.
+
\section2 join(variablename, glue, before, after)
Joins the value of \c variablename with \c glue. If this value is
diff --git a/qmake/library/qmakebuiltins.cpp b/qmake/library/qmakebuiltins.cpp
index 96de34fd14..36f808197a 100644
--- a/qmake/library/qmakebuiltins.cpp
+++ b/qmake/library/qmakebuiltins.cpp
@@ -99,7 +99,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 {
@@ -156,6 +156,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);
@@ -1090,6 +1091,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;