1 #!/bin/sh |
1 #!/bin/sh |
2 # |
2 # |
3 # toolchain detection |
3 # toolchain detection |
4 # |
4 # |
5 |
5 |
6 C_COMPILERS="gcc clang suncc cc" |
6 if isplatform "bsd" && notisplatform "openbsd"; then |
7 CPP_COMPILERS="g++ clang++ sunCC CC" |
7 C_COMPILERS="clang gcc cc" |
|
8 CPP_COMPILERS="clang++ g++ CC" |
|
9 else |
|
10 C_COMPILERS="gcc clang suncc cc" |
|
11 CPP_COMPILERS="g++ clang++ sunCC CC" |
|
12 fi |
|
13 unset TOOLCHAIN |
8 unset TOOLCHAIN_NAME |
14 unset TOOLCHAIN_NAME |
9 unset TOOLCHAIN_CC |
15 unset TOOLCHAIN_CC |
10 unset TOOLCHAIN_CXX |
16 unset TOOLCHAIN_CXX |
11 |
17 |
12 check_c_compiler() |
18 check_c_compiler() |
13 { |
19 { |
14 cat > "$TEMP_DIR/test.c" << __EOF__ |
20 cat > "$TEMP_DIR/test.c" << __EOF__ |
15 /* test file */ |
21 /* test file */ |
16 #include <stdio.h> |
22 #include <stdio.h> |
17 int main(int argc, char **argv) { |
23 int main(int argc, char **argv) { |
18 #if defined(__clang__) |
24 #if defined(_MSC_VER) |
19 printf("clang\n"); |
25 printf("msc\n"); |
|
26 #elif defined(__clang__) |
|
27 printf("clang gnuc\n"); |
20 #elif defined(__GNUC__) |
28 #elif defined(__GNUC__) |
21 printf("gcc\n"); |
29 printf("gcc gnuc\n"); |
22 #elif defined(__sun) |
30 #elif defined(__sun) |
23 printf("suncc\n"); |
31 printf("suncc\n"); |
24 #else |
32 #else |
25 printf("unknown\n"); |
33 printf("unknown\n"); |
26 #endif |
34 #endif |
27 return 0; |
35 return 0; |
28 } |
36 } |
29 __EOF__ |
37 __EOF__ |
30 rm -f "$TEMP_DIR/checkcc" |
38 rm -f "$TEMP_DIR/checkcc" |
31 $1 -o "$TEMP_DIR/checkcc" $CFLAGS $LDFLAGS "$TEMP_DIR/test.c" 2> /dev/null |
39 $1 -o "$TEMP_DIR/checkcc" $CFLAGS $LDFLAGS "$TEMP_DIR/test.c" 2> /dev/null |
32 } |
40 } |
33 |
41 |
34 check_cpp_compiler() |
42 check_cpp_compiler() |
35 { |
43 { |
36 cat > "$TEMP_DIR/test.cpp" << __EOF__ |
44 cat > "$TEMP_DIR/test.cpp" << __EOF__ |
37 /* test file */ |
45 /* test file */ |
38 #include <iostream> |
46 #include <iostream> |
39 int main(int argc, char **argv) { |
47 int main(int argc, char **argv) { |
40 #if defined(__clang__) |
48 #if defined(_MSC_VER) |
41 std::cout << "clang" << std::endl; |
49 std::cout << "msc" << std::endl; |
|
50 #elif defined(__clang__) |
|
51 std::cout << "clang gnuc" << std::endl; |
42 #elif defined(__GNUC__) |
52 #elif defined(__GNUC__) |
43 std::cout << "gcc" << std::endl; |
53 std::cout << "gcc gnuc" << std::endl; |
44 #elif defined(__sun) |
54 #elif defined(__sun) |
45 std::cout << "suncc" << std::endl; |
55 std::cout << "suncc" << std::endl; |
46 #else |
56 #else |
47 std::cout << "cc" << std::endl; |
57 std::cout << "cc" << std::endl; |
48 #endif |
58 #endif |
49 return 0; |
59 return 0; |
50 } |
60 } |
51 __EOF__ |
61 __EOF__ |
52 rm -f "$TEMP_DIR/checkcc" |
62 rm -f "$TEMP_DIR/checkcc" |
53 $1 -o "$TEMP_DIR/checkcc" $CXXFLAGS $LDFLAGS "$TEMP_DIR/test.cpp" 2> /dev/null |
63 $1 -o "$TEMP_DIR/checkcc" $CXXFLAGS $LDFLAGS "$TEMP_DIR/test.cpp" 2> /dev/null |
54 } |
64 } |
55 |
65 |
56 create_libtest_source() |
66 create_libtest_source() |
57 { |
67 { |
58 # $1: filename |
68 # $1: filename |
59 # $2: optional include |
69 # $2: optional include |
60 cat > "$TEMP_DIR/$1" << __EOF__ |
70 cat > "$TEMP_DIR/$1" << __EOF__ |
61 /* libtest file */ |
71 /* libtest file */ |
62 int main(int argc, char **argv) { |
72 int main(int argc, char **argv) { |
63 return 0; |
73 return 0; |
64 } |
74 } |
65 __EOF__ |
75 __EOF__ |
66 if [ -n "$2" ]; then |
76 if [ -n "$2" ]; then |
67 echo "#include <$2>" >> "$TEMP_DIR/$1" |
77 echo "#include <$2>" >> "$TEMP_DIR/$1" |
68 fi |
78 fi |
75 if [ -z "$TOOLCHAIN_CC" ]; then |
85 if [ -z "$TOOLCHAIN_CC" ]; then |
76 return 1 |
86 return 1 |
77 fi |
87 fi |
78 create_libtest_source "test.c" "$2" |
88 create_libtest_source "test.c" "$2" |
79 rm -f "$TEMP_DIR/checklib" |
89 rm -f "$TEMP_DIR/checklib" |
80 $TOOLCHAIN_CC -o "$TEMP_DIR/checklib" $CFLAGS $LDFLAGS "-l$1" "$TEMP_DIR/test.c" 2> /dev/null |
90 $TOOLCHAIN_CC -o "$TEMP_DIR/checklib" $CFLAGS $LDFLAGS "-l$1" "$TEMP_DIR/test.c" 2> /dev/null |
81 } |
91 } |
82 |
92 |
83 check_cpp_lib() |
93 check_cpp_lib() |
84 { |
94 { |
85 # $1: libname |
95 # $1: libname |
86 # $2: optional include |
96 # $2: optional include |
87 if [ -z "$TOOLCHAIN_CXX" ]; then |
97 if [ -z "$TOOLCHAIN_CXX" ]; then |
88 return 1 |
98 return 1 |
89 fi |
99 fi |
90 create_libtest_source "test.cpp" "$2" |
100 create_libtest_source "test.cpp" "$2" |
91 rm -f "$TEMP_DIR/checklib" |
101 rm -f "$TEMP_DIR/checklib" |
92 $TOOLCHAIN_CXX -o "$TEMP_DIR/checklib" $CXXFLAGS $LDFLAGS "-l$1" "$TEMP_DIR/test.cpp" 2> /dev/null |
102 $TOOLCHAIN_CXX -o "$TEMP_DIR/checklib" $CXXFLAGS $LDFLAGS "-l$1" "$TEMP_DIR/test.cpp" 2> /dev/null |
93 } |
103 } |
94 |
104 |
95 check_lib() |
105 check_lib() |
96 { |
106 { |
97 # $1: libname |
107 # $1: libname |
98 # $2: optional include |
108 # $2: optional include |
99 if [ -n "$TOOLCHAIN_CC" ]; then |
109 if [ -n "$TOOLCHAIN_CC" ]; then |
100 check_c_lib "$1" "$2" |
110 check_c_lib "$1" "$2" |
101 elif [ -n "$TOOLCHAIN_CXX" ]; then |
111 elif [ -n "$TOOLCHAIN_CXX" ]; then |
102 check_cpp_lib "$1" "$2" |
112 check_cpp_lib "$1" "$2" |
103 fi |
113 fi |
104 } |
114 } |
105 |
115 |
106 detect_c_compiler() |
116 detect_c_compiler() |
107 { |
117 { |
108 if [ -n "$TOOLCHAIN_CC" ]; then |
118 if [ -n "$TOOLCHAIN_CC" ]; then |