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
This commit is contained in:
parent
8750f1c277
commit
28f6e1b194
@ -105,6 +105,45 @@ IsFunctionBlocked(const cmListFileFunction& lff, cmMakefile &mf)
|
|||||||
variable = "${ARGC}";
|
variable = "${ARGC}";
|
||||||
cmSystemTools::ReplaceString(tmps, variable.c_str(),argcDef.c_str());
|
cmSystemTools::ReplaceString(tmps, variable.c_str(),argcDef.c_str());
|
||||||
}
|
}
|
||||||
|
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)
|
for (unsigned int j = 1; j < m_Args.size(); ++j)
|
||||||
{
|
{
|
||||||
// since this could be slow, first check if there is an ARGV
|
// since this could be slow, first check if there is an ARGV
|
||||||
|
@ -106,7 +106,9 @@ public:
|
|||||||
"the variable ARGC which will be set to the number of arguments "
|
"the variable ARGC which will be set to the number of arguments "
|
||||||
"passed into the function as well as ARGV0 ARGV1 ARGV2 ... which "
|
"passed into the function as well as ARGV0 ARGV1 ARGV2 ... which "
|
||||||
"will have the actual values of the arguments passed in. This "
|
"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);
|
cmTypeMacro(cmMacroCommand, cmCommand);
|
||||||
|
@ -29,6 +29,21 @@ ENDMACRO(TEST_ARGC)
|
|||||||
# invoke the macro
|
# invoke the macro
|
||||||
TEST_ARGC(-DCMAKE_ARGV1 -DCMAKE_ARGV2 -DCMAKE_ARGV3 -DCMAKE_ARGV4)
|
TEST_ARGC(-DCMAKE_ARGV1 -DCMAKE_ARGV2 -DCMAKE_ARGV3 -DCMAKE_ARGV4)
|
||||||
|
|
||||||
|
MACRO(TEST_VAR_ARG fa)
|
||||||
|
IF("${ARGV}" MATCHES "^1;2;3$")
|
||||||
|
MESSAGE(STATUS "ARGV works")
|
||||||
|
ELSE("${ARGV}" MATCHES "^1;2;3$")
|
||||||
|
MESSAGE(FATAL_ERROR "ARGV does not work; got \"${ARGV}\" instead of \"1;2;3\"")
|
||||||
|
ENDIF("${ARGV}" MATCHES "^1;2;3$")
|
||||||
|
IF("${ARGN}" MATCHES "^2;3$")
|
||||||
|
MESSAGE(STATUS "ARGN works")
|
||||||
|
ELSE("${ARGN}" MATCHES "^2;3$")
|
||||||
|
MESSAGE(FATAL_ERROR "ARGV does not work; got \"${ARGN}\" instead of \"2;3\"")
|
||||||
|
ENDIF("${ARGN}" MATCHES "^2;3$")
|
||||||
|
ENDMACRO(TEST_VAR_ARG)
|
||||||
|
|
||||||
|
TEST_VAR_ARG(1 2 3)
|
||||||
|
|
||||||
#
|
#
|
||||||
# Use the ansi CXX compile flag for building cmake
|
# Use the ansi CXX compile flag for building cmake
|
||||||
#
|
#
|
||||||
|
@ -29,6 +29,21 @@ ENDMACRO(TEST_ARGC)
|
|||||||
# invoke the macro
|
# invoke the macro
|
||||||
TEST_ARGC(-DCMAKE_ARGV1 -DCMAKE_ARGV2 -DCMAKE_ARGV3 -DCMAKE_ARGV4)
|
TEST_ARGC(-DCMAKE_ARGV1 -DCMAKE_ARGV2 -DCMAKE_ARGV3 -DCMAKE_ARGV4)
|
||||||
|
|
||||||
|
MACRO(TEST_VAR_ARG fa)
|
||||||
|
IF("${ARGV}" MATCHES "^1;2;3$")
|
||||||
|
MESSAGE(STATUS "ARGV works")
|
||||||
|
ELSE("${ARGV}" MATCHES "^1;2;3$")
|
||||||
|
MESSAGE(FATAL_ERROR "ARGV does not work; got \"${ARGV}\" instead of \"1;2;3\"")
|
||||||
|
ENDIF("${ARGV}" MATCHES "^1;2;3$")
|
||||||
|
IF("${ARGN}" MATCHES "^2;3$")
|
||||||
|
MESSAGE(STATUS "ARGN works")
|
||||||
|
ELSE("${ARGN}" MATCHES "^2;3$")
|
||||||
|
MESSAGE(FATAL_ERROR "ARGV does not work; got \"${ARGN}\" instead of \"2;3\"")
|
||||||
|
ENDIF("${ARGN}" MATCHES "^2;3$")
|
||||||
|
ENDMACRO(TEST_VAR_ARG)
|
||||||
|
|
||||||
|
TEST_VAR_ARG(1 2 3)
|
||||||
|
|
||||||
#
|
#
|
||||||
# Use the ansi CXX compile flag for building cmake
|
# Use the ansi CXX compile flag for building cmake
|
||||||
#
|
#
|
||||||
|
@ -29,6 +29,21 @@ ENDMACRO(TEST_ARGC)
|
|||||||
# invoke the macro
|
# invoke the macro
|
||||||
TEST_ARGC(-DCMAKE_ARGV1 -DCMAKE_ARGV2 -DCMAKE_ARGV3 -DCMAKE_ARGV4)
|
TEST_ARGC(-DCMAKE_ARGV1 -DCMAKE_ARGV2 -DCMAKE_ARGV3 -DCMAKE_ARGV4)
|
||||||
|
|
||||||
|
MACRO(TEST_VAR_ARG fa)
|
||||||
|
IF("${ARGV}" MATCHES "^1;2;3$")
|
||||||
|
MESSAGE(STATUS "ARGV works")
|
||||||
|
ELSE("${ARGV}" MATCHES "^1;2;3$")
|
||||||
|
MESSAGE(FATAL_ERROR "ARGV does not work; got \"${ARGV}\" instead of \"1;2;3\"")
|
||||||
|
ENDIF("${ARGV}" MATCHES "^1;2;3$")
|
||||||
|
IF("${ARGN}" MATCHES "^2;3$")
|
||||||
|
MESSAGE(STATUS "ARGN works")
|
||||||
|
ELSE("${ARGN}" MATCHES "^2;3$")
|
||||||
|
MESSAGE(FATAL_ERROR "ARGV does not work; got \"${ARGN}\" instead of \"2;3\"")
|
||||||
|
ENDIF("${ARGN}" MATCHES "^2;3$")
|
||||||
|
ENDMACRO(TEST_VAR_ARG)
|
||||||
|
|
||||||
|
TEST_VAR_ARG(1 2 3)
|
||||||
|
|
||||||
#
|
#
|
||||||
# Use the ansi CXX compile flag for building cmake
|
# Use the ansi CXX compile flag for building cmake
|
||||||
#
|
#
|
||||||
|
Loading…
x
Reference in New Issue
Block a user