Files
build_infra/0_cmake_library/cmake_bash_library/base.cmake
T
2026-06-16 10:23:51 +08:00

72 lines
2.1 KiB
CMake

include_guard(GLOBAL)
function(cbl_detect_bash OUT_VAR)
set(__cbl_bash_exe "")
if(CMAKE_HOST_WIN32)
set(__cbl_candidates
"C:/Program Files/Git/bin/bash.exe"
"C:/Program Files/Git/usr/bin/bash.exe"
"C:/msys64/usr/bin/bash.exe"
"C:/msys64/ucrt64/bin/bash.exe"
"C:/msys64/mingw64/bin/bash.exe"
)
foreach(__cbl_candidate IN LISTS __cbl_candidates)
if(EXISTS "${__cbl_candidate}")
set(__cbl_bash_exe "${__cbl_candidate}")
break()
endif()
endforeach()
endif()
if("${__cbl_bash_exe}" STREQUAL "")
execute_process(
COMMAND bash --version
RESULT_VARIABLE __cbl_bash_result
OUTPUT_QUIET
ERROR_QUIET
TIMEOUT 5
)
if(__cbl_bash_result EQUAL 0)
set(__cbl_bash_exe "bash")
endif()
endif()
if("${__cbl_bash_exe}" STREQUAL "")
message(FATAL_ERROR "bash not found. Install Git Bash or MSYS2, or set a ctx bash executable explicitly.")
endif()
set(${OUT_VAR} "${__cbl_bash_exe}" PARENT_SCOPE)
endfunction()
function(cbl_detect_program OUT_VAR PROGRAM_NAME)
execute_process(
COMMAND "${PROGRAM_NAME}" ${ARGN}
RESULT_VARIABLE __cbl_program_result
OUTPUT_QUIET
ERROR_QUIET
)
if(__cbl_program_result EQUAL 0)
set(${OUT_VAR} "${PROGRAM_NAME}" PARENT_SCOPE)
else()
set(${OUT_VAR} "" PARENT_SCOPE)
endif()
endfunction()
function(cbl_detect_ninja OUT_VAR)
set(__cbl_ninja_exe "")
if(DEFINED CMAKE_MAKE_PROGRAM AND NOT "${CMAKE_MAKE_PROGRAM}" STREQUAL "")
set(__cbl_ninja_exe "${CMAKE_MAKE_PROGRAM}")
else()
cbl_detect_program(__cbl_ninja_exe "ninja" --version)
endif()
if("${__cbl_ninja_exe}" STREQUAL "")
message(FATAL_ERROR "ninja not found. This feature requires a Ninja build directory.")
endif()
set(${OUT_VAR} "${__cbl_ninja_exe}" PARENT_SCOPE)
endfunction()