1.1 --- a/make/toolchain.sh Wed Jan 17 21:01:50 2024 +0100 1.2 +++ b/make/toolchain.sh Sat Jan 20 16:02:04 2024 +0100 1.3 @@ -3,64 +3,74 @@ 1.4 # toolchain detection 1.5 # 1.6 1.7 -C_COMPILERS="gcc clang suncc cc" 1.8 -CPP_COMPILERS="g++ clang++ sunCC CC" 1.9 +if isplatform "bsd" && notisplatform "openbsd"; then 1.10 + C_COMPILERS="clang gcc cc" 1.11 + CPP_COMPILERS="clang++ g++ CC" 1.12 +else 1.13 + C_COMPILERS="gcc clang suncc cc" 1.14 + CPP_COMPILERS="g++ clang++ sunCC CC" 1.15 +fi 1.16 +unset TOOLCHAIN 1.17 unset TOOLCHAIN_NAME 1.18 unset TOOLCHAIN_CC 1.19 unset TOOLCHAIN_CXX 1.20 1.21 check_c_compiler() 1.22 { 1.23 - cat > "$TEMP_DIR/test.c" << __EOF__ 1.24 + cat > "$TEMP_DIR/test.c" << __EOF__ 1.25 /* test file */ 1.26 #include <stdio.h> 1.27 int main(int argc, char **argv) { 1.28 -#if defined(__clang__) 1.29 - printf("clang\n"); 1.30 +#if defined(_MSC_VER) 1.31 + printf("msc\n"); 1.32 +#elif defined(__clang__) 1.33 + printf("clang gnuc\n"); 1.34 #elif defined(__GNUC__) 1.35 - printf("gcc\n"); 1.36 + printf("gcc gnuc\n"); 1.37 #elif defined(__sun) 1.38 - printf("suncc\n"); 1.39 + printf("suncc\n"); 1.40 #else 1.41 - printf("unknown\n"); 1.42 + printf("unknown\n"); 1.43 #endif 1.44 - return 0; 1.45 + return 0; 1.46 } 1.47 __EOF__ 1.48 - rm -f "$TEMP_DIR/checkcc" 1.49 - $1 -o "$TEMP_DIR/checkcc" $CFLAGS $LDFLAGS "$TEMP_DIR/test.c" 2> /dev/null 1.50 + rm -f "$TEMP_DIR/checkcc" 1.51 + $1 -o "$TEMP_DIR/checkcc" $CFLAGS $LDFLAGS "$TEMP_DIR/test.c" 2> /dev/null 1.52 } 1.53 1.54 check_cpp_compiler() 1.55 { 1.56 - cat > "$TEMP_DIR/test.cpp" << __EOF__ 1.57 + cat > "$TEMP_DIR/test.cpp" << __EOF__ 1.58 /* test file */ 1.59 #include <iostream> 1.60 int main(int argc, char **argv) { 1.61 -#if defined(__clang__) 1.62 - std::cout << "clang" << std::endl; 1.63 +#if defined(_MSC_VER) 1.64 + std::cout << "msc" << std::endl; 1.65 +#elif defined(__clang__) 1.66 + std::cout << "clang gnuc" << std::endl; 1.67 #elif defined(__GNUC__) 1.68 - std::cout << "gcc" << std::endl; 1.69 + std::cout << "gcc gnuc" << std::endl; 1.70 #elif defined(__sun) 1.71 - std::cout << "suncc" << std::endl; 1.72 + std::cout << "suncc" << std::endl; 1.73 #else 1.74 - std::cout << "cc" << std::endl; 1.75 + std::cout << "cc" << std::endl; 1.76 #endif 1.77 - return 0; 1.78 + return 0; 1.79 } 1.80 __EOF__ 1.81 - rm -f "$TEMP_DIR/checkcc" 1.82 - $1 -o "$TEMP_DIR/checkcc" $CXXFLAGS $LDFLAGS "$TEMP_DIR/test.cpp" 2> /dev/null 1.83 + rm -f "$TEMP_DIR/checkcc" 1.84 + $1 -o "$TEMP_DIR/checkcc" $CXXFLAGS $LDFLAGS "$TEMP_DIR/test.cpp" 2> /dev/null 1.85 } 1.86 1.87 create_libtest_source() 1.88 { 1.89 # $1: filename 1.90 # $2: optional include 1.91 - cat > "$TEMP_DIR/$1" << __EOF__ 1.92 + cat > "$TEMP_DIR/$1" << __EOF__ 1.93 /* libtest file */ 1.94 int main(int argc, char **argv) { 1.95 - return 0; 1.96 + return 0; 1.97 } 1.98 __EOF__ 1.99 if [ -n "$2" ]; then 1.100 @@ -77,7 +87,7 @@ 1.101 fi 1.102 create_libtest_source "test.c" "$2" 1.103 rm -f "$TEMP_DIR/checklib" 1.104 - $TOOLCHAIN_CC -o "$TEMP_DIR/checklib" $CFLAGS $LDFLAGS "-l$1" "$TEMP_DIR/test.c" 2> /dev/null 1.105 + $TOOLCHAIN_CC -o "$TEMP_DIR/checklib" $CFLAGS $LDFLAGS "-l$1" "$TEMP_DIR/test.c" 2> /dev/null 1.106 } 1.107 1.108 check_cpp_lib() 1.109 @@ -87,20 +97,20 @@ 1.110 if [ -z "$TOOLCHAIN_CXX" ]; then 1.111 return 1 1.112 fi 1.113 - create_libtest_source "test.cpp" "$2" 1.114 + create_libtest_source "test.cpp" "$2" 1.115 rm -f "$TEMP_DIR/checklib" 1.116 - $TOOLCHAIN_CXX -o "$TEMP_DIR/checklib" $CXXFLAGS $LDFLAGS "-l$1" "$TEMP_DIR/test.cpp" 2> /dev/null 1.117 + $TOOLCHAIN_CXX -o "$TEMP_DIR/checklib" $CXXFLAGS $LDFLAGS "-l$1" "$TEMP_DIR/test.cpp" 2> /dev/null 1.118 } 1.119 1.120 check_lib() 1.121 { 1.122 # $1: libname 1.123 # $2: optional include 1.124 - if [ -n "$TOOLCHAIN_CC" ]; then 1.125 - check_c_lib "$1" "$2" 1.126 - elif [ -n "$TOOLCHAIN_CXX" ]; then 1.127 - check_cpp_lib "$1" "$2" 1.128 - fi 1.129 + if [ -n "$TOOLCHAIN_CC" ]; then 1.130 + check_c_lib "$1" "$2" 1.131 + elif [ -n "$TOOLCHAIN_CXX" ]; then 1.132 + check_cpp_lib "$1" "$2" 1.133 + fi 1.134 } 1.135 1.136 detect_c_compiler() 1.137 @@ -112,7 +122,8 @@ 1.138 if [ -n "$CC" ]; then 1.139 if check_c_compiler "$CC"; then 1.140 TOOLCHAIN_CC=$CC 1.141 - TOOLCHAIN_NAME=`"$TEMP_DIR/checkcc"` 1.142 + TOOLCHAIN=`"$TEMP_DIR/checkcc"` 1.143 + TOOLCHAIN_NAME=`echo "$TOOLCHAIN" | cut -f1 -d' ' -` 1.144 echo "$CC" 1.145 return 0 1.146 else 1.147 @@ -124,7 +135,8 @@ 1.148 do 1.149 if check_c_compiler "$COMP"; then 1.150 TOOLCHAIN_CC=$COMP 1.151 - TOOLCHAIN_NAME=`"$TEMP_DIR/checkcc"` 1.152 + TOOLCHAIN=`"$TEMP_DIR/checkcc"` 1.153 + TOOLCHAIN_NAME=`echo "$TOOLCHAIN" | cut -f1 -d' ' -` 1.154 echo "$COMP" 1.155 return 0 1.156 fi 1.157 @@ -144,7 +156,8 @@ 1.158 if [ -n "$CXX" ]; then 1.159 if check_cpp_compiler "$CXX"; then 1.160 TOOLCHAIN_CXX=$CXX 1.161 - TOOLCHAIN_NAME=`"$TEMP_DIR/checkcc"` 1.162 + TOOLCHAIN=`"$TEMP_DIR/checkcc"` 1.163 + TOOLCHAIN_NAME=`echo "$TOOLCHAIN" | cut -f1 -d' ' -` 1.164 echo "$CXX" 1.165 return 0 1.166 else 1.167 @@ -156,7 +169,8 @@ 1.168 do 1.169 if check_cpp_compiler "$COMP"; then 1.170 TOOLCHAIN_CXX=$COMP 1.171 - TOOLCHAIN_NAME=`"$TEMP_DIR/checkcc"` 1.172 + TOOLCHAIN=`"$TEMP_DIR/checkcc"` 1.173 + TOOLCHAIN_NAME=`echo "$TOOLCHAIN" | cut -f1 -d' ' -` 1.174 echo "$COMP" 1.175 return 0 1.176 fi