67 lines
2.8 KiB
CMake
Executable File
67 lines
2.8 KiB
CMake
Executable File
# Analogue for standard CMake module with same name, appeared in CMake 2.8.3.
|
|
#
|
|
# Used for compatibility with older versions of cmake.
|
|
|
|
function(cmake_parse_arguments prefix options one_value_keywords multi_value_keywords)
|
|
set(all_keywords ${options} ${one_value_keywords} ${multi_value_keywords})
|
|
# Clear variables before parsing.
|
|
foreach(arg ${one_value_keywords} ${multie_value_keywords})
|
|
set(cpa_${arg})
|
|
endforeach()
|
|
|
|
foreach(arg ${options})
|
|
set(cpa_${arg} FALSE)
|
|
endforeach()
|
|
|
|
set(cpa_UNPARSED_ARGUMENTS)
|
|
|
|
set(current_keyword)
|
|
# Classification for current_keyword:
|
|
# 'ONE' or 'MULTY'.
|
|
set(current_keyword_type)
|
|
|
|
# now iterate over all arguments and fill the result variables
|
|
foreach(arg ${ARGN})
|
|
list(FIND all_keywords ${arg} keyword_index)
|
|
|
|
if(keyword_index EQUAL -1)
|
|
if(current_keyword)
|
|
if(current_keyword_type STREQUAL "ONE")
|
|
set(cpa_${current_keyword} ${arg})
|
|
set(current_keyword)
|
|
else(current_keyword_type STREQUAL "ONE")
|
|
list(APPEND cpa_${current_keyword} ${arg})
|
|
endif(current_keyword_type STREQUAL "ONE")
|
|
else(current_keyword)
|
|
list(APPEND cpa_UNPARSED_ARGUMENTS ${arg})
|
|
endif(current_keyword)
|
|
else(keyword_index EQUAL -1)
|
|
if(current_keyword AND current_keyword_type STREQUAL "ONE")
|
|
message(SEND_ERROR "Value is expected for one-value-keyword ${current_keyword}")
|
|
endif(current_keyword AND current_keyword_type STREQUAL "ONE")
|
|
list(FIND options ${arg} option_index)
|
|
if(option_index EQUAL -1)
|
|
set(current_keyword ${arg})
|
|
list(FIND one_value_keywords ${arg} one_value_index)
|
|
if(one_value_index EQUAL -1)
|
|
set(current_keyword_type "MULTI")
|
|
else(one_value_index EQUAL -1)
|
|
set(current_keyword_type "ONE")
|
|
endif(one_value_index EQUAL -1)
|
|
else(option_index EQUAL -1)
|
|
set(current_keyword)
|
|
set(cpa_${arg} TRUE)
|
|
endif(option_index EQUAL -1)
|
|
endif(keyword_index EQUAL -1)
|
|
endforeach(arg ${ARGN})
|
|
|
|
if(current_keyword AND current_keyword_type STREQUAL "ONE")
|
|
message(SEND_ERROR "Value is expected for one-value-keyword ${current_keyword}")
|
|
endif(current_keyword AND current_keyword_type STREQUAL "ONE")
|
|
|
|
# propagate the result variables to the caller:
|
|
foreach(keyword ${all_keywords} UNPARSED_ARGUMENTS)
|
|
set(${prefix}_${keyword} ${cpa_${keyword}} PARENT_SCOPE)
|
|
endforeach(keyword ${all_keywords})
|
|
endfunction(cmake_parse_arguments prefix options one_value_keywords multi_value_keywords)
|