diff options
author | Cory Fields <cory-nospam-@coryfields.com> | 2023-05-08 18:46:42 (GMT) |
---|---|---|
committer | Brad King <brad.king@kitware.com> | 2023-05-08 21:25:59 (GMT) |
commit | db9af7e00c2db594f03d4e4111c426398cdbb7f6 (patch) | |
tree | e0c2cee351298c316bf15d573c3c4f1a659b197c | |
parent | 2ead798f1d7419efb44609b15255e97d7a6c870f (diff) | |
download | CMake-db9af7e00c2db594f03d4e4111c426398cdbb7f6.zip CMake-db9af7e00c2db594f03d4e4111c426398cdbb7f6.tar.gz CMake-db9af7e00c2db594f03d4e4111c426398cdbb7f6.tar.bz2 |
bootstrap: Add support for CXX containing flags
Rather than treating the user-provided CXX as a space-separated series of
compilers, treat it as a single command-line fragment which possibly
contains flags.
-rwxr-xr-x | bootstrap | 40 |
1 files changed, 27 insertions, 13 deletions
@@ -1288,14 +1288,17 @@ cmake_cxx_compiler= # If CC is set, use that for compiler, otherwise use list of known compilers if test -n "${cmake_toolchain}"; then eval cmake_cxx_compilers="\${cmake_toolchain_${cmake_toolchain}_CXX}" -elif test -n "${CXX}"; then - cmake_cxx_compilers="${CXX}" else cmake_cxx_compilers="${CMAKE_KNOWN_CXX_COMPILERS}" fi # Check if C++ compiler works -TMPFILE=`cmake_tmp_file` +cmake_cxx_compiler_try_set() +{ + test_compiler="$1" + test_thread_flags="$2" + + TMPFILE=`cmake_tmp_file` echo ' #include <iostream> #include <memory> @@ -1374,23 +1377,34 @@ int main() return 0; } ' > "${TMPFILE}.cxx" -for std in 17 14 11; do - std_flags="`cmake_extract_standard_flags \"${cmake_toolchain}\" CXX \"${std}\"`" - for compiler in ${cmake_cxx_compilers}; do + for std in 17 14 11; do + std_flags="`cmake_extract_standard_flags \"${cmake_toolchain}\" CXX \"${std}\"`" for std_flag in '' $std_flags; do - for thread_flag in '' $thread_flags; do - echo "Checking whether '${compiler} ${cmake_cxx_flags} ${cmake_ld_flags} ${std_flag} ${thread_flag}' works." >> cmake_bootstrap.log 2>&1 - if cmake_try_run "${compiler}" "${cmake_cxx_flags} ${cmake_ld_flags} ${std_flag} ${thread_flag}" \ + for thread_flag in '' $test_thread_flags; do + echo "Checking whether '${test_compiler} ${cmake_cxx_flags} ${cmake_ld_flags} ${std_flag} ${thread_flag}' works." >> cmake_bootstrap.log 2>&1 + if cmake_try_run "${test_compiler}" "${cmake_cxx_flags} ${cmake_ld_flags} ${std_flag} ${thread_flag}" \ "${TMPFILE}.cxx" >> cmake_bootstrap.log 2>&1; then - cmake_cxx_compiler="${compiler}" + cmake_cxx_compiler="${test_compiler}" cmake_cxx_flags="${cmake_cxx_flags} ${std_flag} ${thread_flag} " - break 4 + rm -f "${TMPFILE}.cxx" + return 0 fi done done done -done -rm -f "${TMPFILE}.cxx" + rm -f "${TMPFILE}.cxx" + return 1 +} + +if test -n "${CXX}"; then + cmake_cxx_compiler_try_set "${CXX}" "${thread_flags}" +else + for compiler in ${cmake_cxx_compilers}; do + if cmake_cxx_compiler_try_set "${compiler}" "${thread_flags}"; then + break + fi + done +fi if test -z "${cmake_cxx_compiler}"; then cmake_error 7 "Cannot find a C++ compiler that supports both C++11 and the specified C++ flags. |