~ci-train-bot/media-hub/media-hub-ubuntu-yakkety-1823

« back to all changes in this revision

Viewing changes to cmake/ParseArguments.cmake

  • Committer: Thomas Voß
  • Date: 2013-08-13 14:07:37 UTC
  • Revision ID: thomas.voss@canonical.com-20130813140737-ke081xhuotug54hd
Initial commit.

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
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)