240.2.1
by Sergio Schvezov
Adding test artifact output. |
1 |
# Parse arguments passed to a function into several lists separated by
|
2 |
# upper-case identifiers and options that do not have an associated list e.g.:
|
|
3 |
#
|
|
4 |
# SET(arguments
|
|
5 |
# hello OPTION3 world
|
|
6 |
# LIST3 foo bar
|
|
7 |
# OPTION2
|
|
8 |
# LIST1 fuz baz
|
|
9 |
# )
|
|
10 |
# PARSE_ARGUMENTS(ARG "LIST1;LIST2;LIST3" "OPTION1;OPTION2;OPTION3" ${arguments})
|
|
11 |
#
|
|
12 |
# results in 7 distinct variables:
|
|
13 |
# * ARG_DEFAULT_ARGS: hello;world
|
|
14 |
# * ARG_LIST1: fuz;baz
|
|
15 |
# * ARG_LIST2:
|
|
16 |
# * ARG_LIST3: foo;bar
|
|
17 |
# * ARG_OPTION1: FALSE
|
|
18 |
# * ARG_OPTION2: TRUE
|
|
19 |
# * ARG_OPTION3: TRUE
|
|
20 |
#
|
|
21 |
# taken from http://www.cmake.org/Wiki/CMakeMacroParseArguments
|
|
22 |
||
23 |
MACRO(PARSE_ARGUMENTS prefix arg_names option_names) |
|
24 |
SET(DEFAULT_ARGS) |
|
25 |
FOREACH(arg_name ${arg_names}) |
|
26 |
SET(${prefix}_${arg_name}) |
|
27 |
ENDFOREACH(arg_name) |
|
28 |
FOREACH(option ${option_names}) |
|
29 |
SET(${prefix}_${option} FALSE) |
|
30 |
ENDFOREACH(option) |
|
31 |
||
32 |
SET(current_arg_name DEFAULT_ARGS) |
|
33 |
SET(current_arg_list) |
|
34 |
FOREACH(arg ${ARGN}) |
|
35 |
SET(larg_names ${arg_names}) |
|
36 |
LIST(FIND larg_names "${arg}" is_arg_name) |
|
37 |
IF (is_arg_name GREATER -1) |
|
38 |
SET(${prefix}_${current_arg_name} ${current_arg_list}) |
|
39 |
SET(current_arg_name ${arg}) |
|
40 |
SET(current_arg_list) |
|
41 |
ELSE (is_arg_name GREATER -1) |
|
42 |
SET(loption_names ${option_names}) |
|
43 |
LIST(FIND loption_names "${arg}" is_option) |
|
44 |
IF (is_option GREATER -1) |
|
45 |
SET(${prefix}_${arg} TRUE) |
|
46 |
ELSE (is_option GREATER -1) |
|
47 |
SET(current_arg_list ${current_arg_list} ${arg}) |
|
48 |
ENDIF (is_option GREATER -1) |
|
49 |
ENDIF (is_arg_name GREATER -1) |
|
50 |
ENDFOREACH(arg) |
|
51 |
SET(${prefix}_${current_arg_name} ${current_arg_list}) |
|
52 |
ENDMACRO(PARSE_ARGUMENTS) |