File: StandardOptionParsing.cmake

package info (click to toggle)
appstream 0.7.3-1
  • links: PTS, VCS
  • area: main
  • in suites: jessie, jessie-kfreebsd
  • size: 7,660 kB
  • ctags: 2,618
  • sloc: xml: 10,142; ansic: 8,362; cpp: 1,905; python: 236; sh: 58; makefile: 13
file content (49 lines) | stat: -rw-r--r-- 1,909 bytes parent folder | download | duplicates (3)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
# CMake macros to parse options

macro(parse_options _list_names _list_variables)
    list(LENGTH ${_list_names} _list_names_length)
    list(LENGTH ${_list_variables} _list_variables_length)
    #message(STATUS "${_list_names} => ${_list_names_length}")
    #message(STATUS "${_list_variables} => ${_list_variables_length}")

    if(NOT _list_names_length EQUAL _list_variables_length)
        message(SEND_ERROR "names list must have same length as var list")
    endif(NOT _list_names_length EQUAL _list_variables_length)

    set(_list_length ${_list_names_length})

    # Set each list to be empty initially
    foreach(_idx RANGE -${_list_length} -1)
        list(GET ${_list_variables} ${_idx} _variable)
        set(${_variable} "")
    endforeach(_idx RANGE ${_list_length})

    set(_current_list "")
    foreach(_arg ${ARGN})
        set(_skip_arg 0)

        foreach(_idx RANGE -${_list_length} -1)
            list(GET ${_list_names} ${_idx} _name)
            if(_arg STREQUAL _name)
                set(_current_list "${_arg}")
                set(_skip_arg 1)
            endif(_arg STREQUAL _name)
        endforeach(_idx RANGE -${_list_length} -1)

        if(NOT _current_list)
            message(SEND_ERROR "Error parsing args (unknown argument '${_arg}').")
            set(_skip_arg 1)
        endif(NOT _current_list)

        if(NOT _skip_arg)
            #message(STATUS "list: '${_current_list}', arg: '${_arg}'")
            foreach(_idx RANGE -${_list_length} -1)
                list(GET ${_list_names} ${_idx} _name)
                if(_current_list STREQUAL _name)
                    list(GET ${_list_variables} ${_idx} _variable)
                    list(APPEND ${_variable} "${_arg}")
                endif(_current_list STREQUAL _name)
            endforeach(_idx RANGE -${_list_length} -1)
        endif(NOT _skip_arg)
    endforeach(_arg ${ARGN})
endmacro(parse_options)