diff options
Diffstat (limited to 'build_files/cmake/macros.cmake')
-rw-r--r-- | build_files/cmake/macros.cmake | 64 |
1 files changed, 52 insertions, 12 deletions
diff --git a/build_files/cmake/macros.cmake b/build_files/cmake/macros.cmake index 3acea19079b..73883376060 100644 --- a/build_files/cmake/macros.cmake +++ b/build_files/cmake/macros.cmake @@ -57,6 +57,25 @@ macro(path_ensure_trailing_slash unset(_path_sep) endmacro() +# Our own version of `cmake_path(IS_PREFIX ..)`. +# This can be removed when 3.20 or greater is the minimum supported version. +macro(path_is_prefix + path_prefix path result_var + ) + # Remove when CMAKE version is bumped to "3.20" or greater. + # `cmake_path(IS_PREFIX ${path_prefix} ${path} NORMALIZE result_var)` + # Get the normalized paths (needed to remove `..`). + get_filename_component(_abs_prefix "${${path_prefix}}" ABSOLUTE) + get_filename_component(_abs_suffix "${${path}}" ABSOLUTE) + string(LENGTH "${_abs_prefix}" _len) + string(SUBSTRING "${_abs_suffix}" 0 "${_len}" _substr) + string(COMPARE EQUAL "${_abs_prefix}" "${_substr}" "${result_var}") + unset(_abs_prefix) + unset(_abs_suffix) + unset(_len) + unset(_substr) +endmacro() + # foo_bar.spam --> foo_barMySuffix.spam macro(file_suffix file_name_new file_name file_suffix @@ -995,7 +1014,8 @@ function(data_to_c_simple_icons add_custom_command( OUTPUT ${_file_from} ${_file_to} COMMAND ${CMAKE_COMMAND} -E make_directory ${_file_to_path} - # COMMAND python3 ${CMAKE_SOURCE_DIR}/source/blender/datatoc/datatoc_icon.py ${_path_from_abs} ${_file_from} + # COMMAND python3 ${CMAKE_SOURCE_DIR}/source/blender/datatoc/datatoc_icon.py + # ${_path_from_abs} ${_file_from} COMMAND "$<TARGET_FILE:datatoc_icon>" ${_path_from_abs} ${_file_from} COMMAND "$<TARGET_FILE:datatoc>" ${_file_from} ${_file_to} DEPENDS @@ -1073,23 +1093,27 @@ function(msgfmt_simple endfunction() function(find_python_package - package - relative_include_dir + package + relative_include_dir ) string(TOUPPER ${package} _upper_package) - # set but invalid + # Set but invalid. if((NOT ${PYTHON_${_upper_package}_PATH} STREQUAL "") AND (NOT ${PYTHON_${_upper_package}_PATH} MATCHES NOTFOUND)) -# if(NOT EXISTS "${PYTHON_${_upper_package}_PATH}/${package}") -# message(WARNING "PYTHON_${_upper_package}_PATH is invalid, ${package} not found in '${PYTHON_${_upper_package}_PATH}' " -# "WITH_PYTHON_INSTALL_${_upper_package} option will be ignored when installing python") -# set(WITH_PYTHON_INSTALL${_upper_package} OFF) -# endif() - # not set, so initialize + # if(NOT EXISTS "${PYTHON_${_upper_package}_PATH}/${package}") + # message( + # WARNING + # "PYTHON_${_upper_package}_PATH is invalid, ${package} not found in " + # "'${PYTHON_${_upper_package}_PATH}' " + # "WITH_PYTHON_INSTALL_${_upper_package} option will be ignored when installing Python" + # ) + # set(WITH_PYTHON_INSTALL${_upper_package} OFF) + # endif() + # Not set, so initialize. else() - string(REPLACE "." ";" _PY_VER_SPLIT "${PYTHON_VERSION}") + string(REPLACE "." ";" _PY_VER_SPLIT "${PYTHON_VERSION}") list(GET _PY_VER_SPLIT 0 _PY_VER_MAJOR) # re-cache @@ -1205,11 +1229,27 @@ macro(set_and_warn_dependency _dependency _setting _val) # when $_dependency is disabled, forces $_setting = $_val if(NOT ${${_dependency}} AND ${${_setting}}) - message(STATUS "'${_dependency}' is disabled: forcing 'set(${_setting} ${_val})'") + if(WITH_STRICT_BUILD_OPTIONS) + message(SEND_ERROR "${_dependency} disabled but required by ${_setting}") + else() + message(STATUS "${_dependency} is disabled, setting ${_setting}=${_val}") + endif() set(${_setting} ${_val}) endif() endmacro() +macro(set_and_warn_library_found + _library_name _library_found _setting) + if(NOT ${${_library_found}} AND ${${_setting}}) + if(WITH_STRICT_BUILD_OPTIONS) + message(SEND_ERROR "${_library_name} required but not found") + else() + message(STATUS "${_library_name} not found, disabling ${_setting}") + endif() + set(${_setting} OFF) + endif() +endmacro() + macro(without_system_libs_begin) set(CMAKE_IGNORE_PATH "${CMAKE_PLATFORM_IMPLICIT_LINK_DIRECTORIES};${CMAKE_SYSTEM_INCLUDE_PATH};${CMAKE_C_IMPLICIT_INCLUDE_DIRECTORIES};${CMAKE_CXX_IMPLICIT_INCLUDE_DIRECTORIES}") endmacro() |