From 6181a9e00ef50a44d873c771c028f2ca88fd6be5 Mon Sep 17 00:00:00 2001 From: Daniel Pfeifer Date: Sun, 14 May 2017 19:41:55 +0200 Subject: bootstrap: prefer to use standard flags for C and CXX --- bootstrap | 65 ++++++++++++++++++++++++++++++++++++--------------------------- 1 file changed, 37 insertions(+), 28 deletions(-) diff --git a/bootstrap b/bootstrap index b1f8670..a9cf0b2 100755 --- a/bootstrap +++ b/bootstrap @@ -6,6 +6,17 @@ die() { echo "$@" 1>&2 ; exit 1 } +# Compile flag extraction function. +cmake_extract_standard_flags() +{ + cd "${cmake_source_dir}/Modules/Compiler/" + for file in ${1:-*}-${2}.cmake; do + cat "${file}" \ + | sed -n "s/ *set *( *CMAKE_${2}${3}_EXTENSION_COMPILE_OPTION *\"\{0,1\}\([^\")]*\).*/\1/p" \ + | tr ';' ' ' + done +} + # Version number extraction function. cmake_version_component() { @@ -954,6 +965,17 @@ for a in ${cmake_c_compilers}; do cmake_c_compiler="${a}" fi done +for std in 11 99 90; do + try_flags="`cmake_extract_standard_flags \"${cmake_toolchain}\" C \"${std}\"`" + for flag in $try_flags; do + echo "Checking whether ${cmake_c_compiler} supports ${flag}" >> cmake_bootstrap.log 2>&1 + if cmake_try_run "${cmake_c_compiler}" "${cmake_c_flags} ${flag}" \ + "${TMPFILE}.c" >> cmake_bootstrap.log 2>&1; then + cmake_c_flags="${cmake_c_flags} ${flag}" + break 2 + fi + done +done rm -f "${TMPFILE}.c" if [ -z "${cmake_c_compiler}" ]; then @@ -988,6 +1010,10 @@ echo ' # include #endif +#if __cplusplus >= 201103L && defined(__SUNPRO_CC) && __SUNPRO_CC < 0x5140 +#error "SunPro <= 5.13 C++ 11 mode not supported due to bug in move semantics." +#endif + class NeedCXX { public: @@ -1015,6 +1041,17 @@ for a in ${cmake_cxx_compilers}; do fi done done +for std in 14 11 98; do + try_flags="`cmake_extract_standard_flags \"${cmake_toolchain}\" CXX \"${std}\"`" + for flag in $try_flags; do + echo "Checking for wheter ${cmake_cxx_flags} supports ${flag}" >> cmake_bootstrap.log 2>&1 + if cmake_try_run "${cmake_cxx_compiler}" "${cmake_cxx_flags} ${flag} -DTEST1" \ + "${TMPFILE}.cxx" >> cmake_bootstrap.log 2>&1; then + cmake_cxx_flags="${cmake_cxx_flags} ${flag} " + break 2 + fi + done +done rm -f "${TMPFILE}.cxx" if [ -z "${cmake_cxx_compiler}" ]; then @@ -1240,34 +1277,6 @@ if [ "x${cmake_cxx_compiler_is_gnu}" != "x1" ]; then fi -if [ "x${cmake_cxx_compiler_is_gnu}" != "x1" ]; then - # Are we SolarisStudio? - - TMPFILE=`cmake_tmp_file` - echo ' - #if defined(__SUNPRO_CC) - #include - int main() { std::cout << "This is SolarisStudio" << std::endl; return 0;} - #endif - ' > ${TMPFILE}.cxx - cmake_cxx_compiler_is_solarisstudio=0 - if cmake_try_run "${cmake_cxx_compiler}" \ - "${cmake_cxx_flags} " "${TMPFILE}.cxx" >> cmake_bootstrap.log 2>&1; then - cmake_cxx_compiler_is_solarisstudio=1 - fi - if [ "x${cmake_cxx_compiler_is_solarisstudio}" = "x1" ]; then - echo "${cmake_cxx_compiler} is SolarisStudio compiler" - else - echo "${cmake_cxx_compiler} is not SolarisStudio compiler" - fi - rm -f "${TMPFILE}.cxx" - - if [ "x${cmake_cxx_compiler_is_solarisstudio}" = "x1" ]; then - cmake_cxx_flags="${cmake_cxx_flags} -library=stlport4" - fi -fi - - # Test for kwsys features KWSYS_NAME_IS_KWSYS=0 KWSYS_BUILD_SHARED=0 -- cgit v0.12