summaryrefslogtreecommitdiff
path: root/Source
diff options
context:
space:
mode:
authorAndy Cedilnik <andy.cedilnik@kitware.com>2004-04-29 17:41:33 -0400
committerAndy Cedilnik <andy.cedilnik@kitware.com>2004-04-29 17:41:33 -0400
commit28f6e1b194cd71af7308cd2c91b438d8de72bc0d (patch)
treeca59d213a0c4924ed38c806ba473e19b09795fa4 /Source
parent8750f1c277d8bf3fdf2d2986f473c5f09e293ea5 (diff)
downloadcmake-28f6e1b194cd71af7308cd2c91b438d8de72bc0d.tar.gz
ENH: Add ARGV and ARGN support to MACRO command. ARGV is the list of all arguments and ARGN is the list of all nonexpected arguments
Diffstat (limited to 'Source')
-rw-r--r--Source/cmMacroCommand.cxx39
-rw-r--r--Source/cmMacroCommand.h4
2 files changed, 42 insertions, 1 deletions
diff --git a/Source/cmMacroCommand.cxx b/Source/cmMacroCommand.cxx
index 1fd86544aa..65154fe33c 100644
--- a/Source/cmMacroCommand.cxx
+++ b/Source/cmMacroCommand.cxx
@@ -107,6 +107,45 @@ IsFunctionBlocked(const cmListFileFunction& lff, cmMakefile &mf)
}
for (unsigned int j = 1; j < m_Args.size(); ++j)
{
+ variable = "${ARGV}";
+ std::vector<std::string>::iterator eit;
+ std::string var = "";
+ for ( eit = expandedArguments.begin();
+ eit != expandedArguments.end();
+ ++ eit )
+ {
+ if ( var.size() > 0 )
+ {
+ var += ";";
+ }
+ var += *eit;
+ }
+ cmSystemTools::ReplaceString(tmps, variable.c_str(),var.c_str());
+ }
+ for (unsigned int j = 1; j < m_Args.size(); ++j)
+ {
+ variable = "${ARGN}";
+ std::vector<std::string>::iterator eit;
+ std::string var = "";
+ std::vector<std::string>::size_type cnt = 0;
+ for ( eit = expandedArguments.begin();
+ eit != expandedArguments.end();
+ ++ eit )
+ {
+ if ( cnt >= m_Args.size()-1 )
+ {
+ if ( var.size() > 0 )
+ {
+ var += ";";
+ }
+ var += *eit;
+ }
+ cnt ++;
+ }
+ cmSystemTools::ReplaceString(tmps, variable.c_str(),var.c_str());
+ }
+ for (unsigned int j = 1; j < m_Args.size(); ++j)
+ {
// since this could be slow, first check if there is an ARGV
// only then do the inner loop. PS std::string sucks
char argvName[60];
diff --git a/Source/cmMacroCommand.h b/Source/cmMacroCommand.h
index c614588b42..b0848d1c56 100644
--- a/Source/cmMacroCommand.h
+++ b/Source/cmMacroCommand.h
@@ -106,7 +106,9 @@ public:
"the variable ARGC which will be set to the number of arguments "
"passed into the function as well as ARGV0 ARGV1 ARGV2 ... which "
"will have the actual values of the arguments passed in. This "
- "fascilitates creating macros with optional arguments.";
+ "fascilitates creating macros with optional arguments. Additionally "
+ "ARGV holds the list of all arguments given to the macro and ARGN "
+ "holds the list of argument pass the last expected argument.";
}
cmTypeMacro(cmMacroCommand, cmCommand);