2023-02-07 14:15:30 +08:00
|
|
|
# ##############################################################################
|
|
|
|
# cmake/nuttx_parse_function_args.cmake
|
|
|
|
#
|
|
|
|
# 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)
|
|
|
|
|
2023-07-27 14:50:57 +08:00
|
|
|
# ~~~
|
2023-02-07 14:15:30 +08:00
|
|
|
# nuttx_parse_function_args
|
|
|
|
#
|
|
|
|
# This function simplifies usage of the cmake_parse_arguments module. It is
|
|
|
|
# intended to be called by other functions.
|
|
|
|
#
|
2023-07-27 14:50:57 +08:00
|
|
|
# Usage:
|
|
|
|
# nuttx_parse_function_args( FUNC <name> [ OPTIONS <list> ]
|
|
|
|
# [ ONE_VALUE <list> ] [ MULTI_VALUE <list> ] REQUIRED <list> ARGN <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()
|
2023-02-07 14:15:30 +08:00
|
|
|
#
|
|
|
|
# test(NAME "hello" LIST a b c)
|
|
|
|
#
|
|
|
|
# OUTPUT: name: hello list: a b c
|
2023-07-27 14:50:57 +08:00
|
|
|
# ~~~
|
2023-02-07 14:15:30 +08:00
|
|
|
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()
|