Warning, /system/qtcurve/cmake/CMakeBaseMacros.cmake is written in an unsupported language. File is not indexed.
0001 # Copyright (C) 2013~2014 by Yichao Yu
0002 # yyc1992@gmail.com
0003 #
0004 # Redistribution and use in source and binary forms, with or without
0005 # modification, are permitted provided that the following conditions
0006 # are met:
0007 #
0008 # 1. Redistributions of source code must retain the above copyright
0009 # notice, this list of conditions and the following disclaimer.
0010 # 2. Redistributions in binary form must reproduce the above copyright
0011 # notice, this list of conditions and the following disclaimer in the
0012 # documentation and/or other materials provided with the distribution.
0013 #
0014 # THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
0015 # IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
0016 # OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
0017 # IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
0018 # INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
0019 # NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
0020 # DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
0021 # THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
0022 # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
0023 # THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
0024
0025 # Public functions and macros provided by this file
0026 # (See comment of each for more detail):
0027 # cmake_utils_call
0028 # cmake_utils_call_with_var
0029 # cmake_utils_call_once
0030 # cmake_utils_set_and_make_dir
0031
0032 # Public globals registered by this file:
0033 # (See ##cmake_utils_get_global and the comment
0034 # for each of them for more detail)
0035 # CMAKE_GENERAL_BASE
0036
0037 if(COMMAND cmake_utils_call)
0038 return()
0039 endif()
0040
0041 include(CMakeVarMacros)
0042
0043 function(__cmake_utils_call_helper func_name var_name)
0044 cmake_utils_get_unique_name(
0045 "___cmake_utils_call_helper_${func_name}" unique_name)
0046 set("${unique_name}" 0 PARENT_SCOPE)
0047 variable_watch("${unique_name}" "${func_name}")
0048 set("${var_name}" "${unique_name}" PARENT_SCOPE)
0049 endfunction()
0050
0051 # cmake_utils_call(function_name)
0052 # @function_name: the name of function or macro to be called.
0053 #
0054 # This macro will call the function or macro by name. The scope of the
0055 # function call is the same with the scope to call this macro therefore
0056 # setting variables in a macro or setting PARENT_SCOPE variables in a
0057 # function WILL work. This version of the function does not support
0058 # passing arbitrary arguments, use #cmake_utils_wrap_call,
0059 # #cmake_utils_call_args or #cmake_utils_call_args_with_var if you
0060 # need to do that.
0061 macro(cmake_utils_call ___func_name)
0062 __cmake_utils_call_helper("${___func_name}"
0063 __cmake_utils_call_watch_var_name_${___func_name})
0064 set("${__cmake_utils_call_watch_var_name_${___func_name}}")
0065 endmacro()
0066
0067 # cmake_utils_call_with_var(var_names function_name)
0068 # @var_names: the variable names to be propagate to parent scope.
0069 # @function_name: the name of function or macro to be called.
0070 #
0071 # This functionis just like #cmake_utils_call except the macro or function
0072 # will be executed in a separate scope. You can control the allowed
0073 # variables to be passed to the caller scope using @var_names. This function
0074 # doesn't support calling functions or macros with arbitrary number of
0075 # arguments, use #cmake_utils_call_args_with_var if you need to do that.
0076 function(cmake_utils_call_with_var varnames func_name)
0077 cmake_utils_call("${func_name}")
0078 foreach(varname ${varnames})
0079 set("${varname}" "${${varname}}" PARENT_SCOPE)
0080 endforeach()
0081 endfunction()
0082
0083 # cmake_utils_call_once(function_name)
0084 # @function_name: the name of function or macro to be called.
0085 #
0086 # This macro is just like #cmake_utils_call except it will not
0087 # call the function if it has already be called by this function before.
0088 # This is useful for a one-time global init function of a cmake module
0089 # that might be included more once.
0090 #
0091 # NOTE: This macro does NOT interfere with #cmake_utils_call
0092 # and you will still be able to call the function before or after
0093 # calling this macro using #cmake_utils_call or directly.
0094 macro(cmake_utils_call_once ___func_name)
0095 cmake_utils_check_and_set_bool(
0096 "__cmake_utils_call_once_${___func_name}__"
0097 ___cmake_utils_call_once_already_called_${___func_name})
0098 if("${___cmake_utils_call_once_already_called_${___func_name}}" STREQUAL 1)
0099 return()
0100 endif()
0101 cmake_utils_call("${___func_name}")
0102 endmacro()
0103
0104 # cmake_utils_set_and_make_dir(dir global_name var_name)
0105 # @dir: directory name
0106 # @global_name: name of global to save "${dir}",
0107 # see #cmake_utils_get_global for more detail.
0108 # @var_name: name of variable to save "${dir}"
0109 #
0110 # This is a helper function for cmake modules that needs working
0111 # directory (typically under #CMAKE_GENERAL_BASE global). This function
0112 # will save "${dir}" into the variable and the global as well as creating
0113 # the directory if it doesn't exist yet.
0114 function(cmake_utils_set_and_make_dir dir global var)
0115 file(MAKE_DIRECTORY "${dir}")
0116 cmake_utils_set_global("${global}" "${dir}")
0117 set("${var}" "${dir}" PARENT_SCOPE)
0118 endfunction()
0119
0120 macro(__cmake_utils_run_hook name isolate reverse)
0121 macro(__cmake_utils_run_hook_single)
0122 foreach(__cmake_utils_hook_${name} ${__cmake_utils_hooks_${name}})
0123 if("${isolate}")
0124 cmake_utils_call_with_var("" "${__cmake_utils_hook_${name}}")
0125 else()
0126 cmake_utils_call("${__cmake_utils_hook_${name}}")
0127 endif()
0128 endforeach()
0129 endmacro()
0130 foreach("__cmake_utils_hooks_${name}" "")
0131 if(NOT "${reverse}")
0132 cmake_utils_get_global("__cmake_utils_hooks_${name}"
0133 "__cmake_utils_hooks_${name}")
0134 __cmake_utils_run_hook_single()
0135 cmake_utils_get_global("__cmake_utils_hooks_reverse_${name}"
0136 "__cmake_utils_hooks_${name}")
0137 __cmake_utils_run_hook_single()
0138 else()
0139 macro(__cmake_utils_run_hook_single_reverse)
0140 if(NOT "x${__cmake_utils_hooks_${name}}x" STREQUAL xx)
0141 list(REVERSE "__cmake_utils_hooks_${name}")
0142 __cmake_utils_run_hook_single()
0143 endif()
0144 endmacro()
0145 cmake_utils_get_global("__cmake_utils_hooks_reverse_${name}"
0146 "__cmake_utils_hooks_${name}")
0147 __cmake_utils_run_hook_single_reverse()
0148 cmake_utils_get_global("__cmake_utils_hooks_${name}"
0149 "__cmake_utils_hooks_${name}")
0150 __cmake_utils_run_hook_single_reverse()
0151 endif()
0152 endforeach()
0153 endmacro()
0154
0155 function(_cmake_utils_run_hook_isolated name reverse)
0156 __cmake_utils_run_hook("${name}" True "${reverse}")
0157 endfunction()
0158
0159 macro(cmake_utils_run_hook name reverse)
0160 if("${ARGC}" LESS 3 OR NOT "${ARGV2}")
0161 __cmake_utils_run_hook("${name}" False "${reverse}")
0162 elseif("${ARGV2}" STREQUAL 2)
0163 _cmake_utils_run_hook_isolated("${name}" "${reverse}")
0164 else()
0165 __cmake_utils_run_hook("${name}" True "${reverse}")
0166 endif()
0167 endmacro()
0168
0169 function(cmake_utils_reg_hook name func)
0170 if("${ARGC}" LESS "3" OR NOT "${ARGV2}")
0171 cmake_utils_get_global("__cmake_utils_hooks_${name}" hooks)
0172 cmake_utils_set_global("__cmake_utils_hooks_${name}" "${hooks};${func}")
0173 else()
0174 cmake_utils_get_global("__cmake_utils_hooks_reverse_${name}" hooks)
0175 cmake_utils_set_global("__cmake_utils_hooks_reverse_${name}"
0176 "${func};${hooks}")
0177 endif()
0178 endfunction()
0179
0180 function(cmake_utils_config_end_hook func)
0181 cmake_utils_reg_hook("__cmake_utils_end_of_configure_hook"
0182 "${func}" ${ARGN})
0183 endfunction()
0184
0185 function(___cmake_utils_parent_file_hook var acc value cur_lst stack)
0186 if(NOT "x${value}x" STREQUAL xx)
0187 return()
0188 endif()
0189 cmake_utils_run_hook("__cmake_utils_end_of_configure_hook" False 2)
0190 endfunction()
0191
0192 # CMAKE_GENERAL_BASE
0193 # This global contains the path to a hidden directory the binary directory
0194 # that can be used as a base directory for saving building files.
0195 function(__cmake_base_utils_init)
0196 cmake_utils_set_and_make_dir("${CMAKE_BINARY_DIR}/.cmake_utils_base"
0197 CMAKE_GENERAL_BASE base_dir)
0198 variable_watch(CMAKE_PARENT_LIST_FILE ___cmake_utils_parent_file_hook)
0199 endfunction()
0200 cmake_utils_call_once(__cmake_base_utils_init)