# ############################################################################## # cmake/nuttx_parse_function_args.cmake # # SPDX-License-Identifier: Apache-2.0 # # Licensed to the Apache Software Foundation (ASF) under one or more contributor # license agreements. See the NOTICE file distributed with this work for # additional information regarding copyright ownership. The ASF licenses this # file to you under the Apache License, Version 2.0 (the "License"); you may not # use this file except in compliance with the License. You may obtain a copy of # the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, WITHOUT # WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the # License for the specific language governing permissions and limitations under # the License. # # ############################################################################## # ============================================================================= # # Defined functions in this file # # utility functions # # * nuttx_parse_function_args # include(CMakeParseArguments) # ~~~ # nuttx_parse_function_args # # This function simplifies usage of the cmake_parse_arguments module. It is # intended to be called by other functions. # # Usage: # nuttx_parse_function_args( FUNC [ OPTIONS ] # [ ONE_VALUE ] [ MULTI_VALUE ] REQUIRED ARGN ) # # Input: # FUNC : the name of the calling function # OPTIONS : boolean flags # ONE_VALUE : single value variables # MULTI_VALUE : multi value variables # REQUIRED : required arguments # ARGN : the function input arguments, typically ${ARGN} # # Output: # The function arguments corresponding to the following are set: # ${OPTIONS}, ${ONE_VALUE}, ${MULTI_VALUE} # # Example: # function test() # nuttx_parse_function_args(FUNC TEST ONE_VALUE NAME MULTI_VALUE # LIST REQUIRED NAME LIST ARGN ${ARGN}) # message(STATUS "name: ${NAME}") # message(STATUS "list: ${LIST}") # endfunction() # # test(NAME "hello" LIST a b c) # # OUTPUT: name: hello list: a b c # ~~~ function(nuttx_parse_function_args) cmake_parse_arguments(IN "" "FUNC" "OPTIONS;ONE_VALUE;MULTI_VALUE;REQUIRED;ARGN" "${ARGN}") cmake_parse_arguments(OUT "${IN_OPTIONS}" "${IN_ONE_VALUE}" "${IN_MULTI_VALUE}" "${IN_ARGN}") if(OUT_UNPARSED_ARGUMENTS) message(FATAL_ERROR "${IN_NAME}: unparsed ${OUT_UNPARSED_ARGUMENTS}") endif() foreach(arg ${IN_REQUIRED}) if(NOT OUT_${arg}) if(NOT "${OUT_${arg}}" STREQUAL "0") message( FATAL_ERROR "${IN_NAME} requires argument ${arg}\nARGN: ${IN_ARGN}") endif() endif() endforeach() foreach(arg ${IN_OPTIONS} ${IN_ONE_VALUE} ${IN_MULTI_VALUE}) set(${arg} ${OUT_${arg}} PARENT_SCOPE) endforeach() endfunction()