Utilities.cmake (3156B)
1 #*************************************************************************** 2 # _ _ ____ _ 3 # Project ___| | | | _ \| | 4 # / __| | | | |_) | | 5 # | (__| |_| | _ <| |___ 6 # \___|\___/|_| \_\_____| 7 # 8 # Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al. 9 # 10 # This software is licensed as described in the file COPYING, which 11 # you should have received as part of this distribution. The terms 12 # are also available at https://curl.se/docs/copyright.html. 13 # 14 # You may opt to use, copy, modify, merge, publish, distribute and/or sell 15 # copies of the Software, and permit persons to whom the Software is 16 # furnished to do so, under the terms of the COPYING file. 17 # 18 # This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY 19 # KIND, either express or implied. 20 # 21 # SPDX-License-Identifier: curl 22 # 23 ########################################################################### 24 # File containing various utilities 25 26 # Return number of arguments that evaluate to true 27 function(curl_count_true _output_count_var) 28 set(_list_len 0) 29 foreach(_option_var IN LISTS ARGN) 30 if(${_option_var}) 31 math(EXPR _list_len "${_list_len} + 1") 32 endif() 33 endforeach() 34 set(${_output_count_var} ${_list_len} PARENT_SCOPE) 35 endfunction() 36 37 # Dump all defined variables with their values 38 function(curl_dumpvars) 39 message("::group::CMake Variable Dump") 40 get_cmake_property(_vars VARIABLES) 41 foreach(_var IN ITEMS ${_vars}) 42 get_property(_var_type CACHE ${_var} PROPERTY TYPE) 43 get_property(_var_advanced CACHE ${_var} PROPERTY ADVANCED) 44 if(_var_type) 45 set(_var_type ":${_var_type}") 46 endif() 47 if(_var_advanced) 48 set(_var_advanced " [adv]") 49 endif() 50 message("${_var}${_var_type}${_var_advanced} = '${${_var}}'") 51 endforeach() 52 message("::endgroup::") 53 endfunction() 54 55 # Dump all target properties 56 function(curl_dumptargetprops _target) 57 if(CMAKE_VERSION VERSION_GREATER_EQUAL 3.19 AND TARGET "${_target}") 58 execute_process(COMMAND "${CMAKE_COMMAND}" "--help-property-list" OUTPUT_VARIABLE _cmake_property_list) 59 string(REPLACE "\n" ";" _cmake_property_list "${_cmake_property_list}") 60 list(REMOVE_DUPLICATES _cmake_property_list) 61 list(REMOVE_ITEM _cmake_property_list "") 62 foreach(_prop IN LISTS _cmake_property_list) 63 if(_prop MATCHES "<CONFIG>") 64 foreach(_config IN ITEMS "DEBUG" "RELEASE" "MINSIZEREL" "RELWITHDEBINFO") 65 string(REPLACE "<CONFIG>" "${_config}" _propconfig "${_prop}") 66 get_property(_is_set TARGET "${_target}" PROPERTY "${_propconfig}" SET) 67 if(_is_set) 68 get_target_property(_val "${_target}" "${_propconfig}") 69 message("${_target}.${_propconfig} = '${_val}'") 70 endif() 71 endforeach() 72 else() 73 get_property(_is_set TARGET "${_target}" PROPERTY "${_prop}" SET) 74 if(_is_set) 75 get_target_property(_val "${_target}" "${_prop}") 76 message("${_target}.${_prop} = '${_val}'") 77 endif() 78 endif() 79 endforeach() 80 endif() 81 endfunction()