1- #! /bin/sh
1+ #! /bin/bash
22
33output=$( ./simplecpp simplecpp.cpp -e -f 2>&1 )
44ec=$?
@@ -15,66 +15,43 @@ if [ -z "$CXX" ]; then
1515fi
1616
1717cxx_type=$( $CXX --version | head -1 | cut -d' ' -f1)
18- if [ " $cxx_type " = " Ubuntu" ]; then
18+ if [ " $cxx_type " = " Ubuntu" ] || [ " $cxx_type " = " Debian " ] ; then
1919 cxx_type=$( $CXX --version | head -1 | cut -d' ' -f2)
2020fi
21- # TODO: how to get built-in include paths from compiler?
21+
2222if [ " $cxx_type " = " g++" ]; then
23- gcc_ver=$( $CXX -dumpversion)
2423 defs=
2524 defs=" $defs -D__GNUC__"
2625 defs=" $defs -D__STDC__"
26+ defs=" $defs -D__x86_64__"
2727 defs=" $defs -D__STDC_HOSTED__"
2828 defs=" $defs -D__CHAR_BIT__=8"
29- defs=" $defs -D__x86_64__"
3029 defs=" $defs -D__has_builtin(x)=(1)"
3130 defs=" $defs -D__has_cpp_attribute(x)=(1)"
3231 defs=" $defs -D__has_attribute(x)=(1)"
33- # some required include paths might differ per distro
32+
3433 inc=
35- inc=" $inc -I/usr/include"
36- inc=" $inc -I/usr/include/linux"
37- inc=" $inc -I/usr/include/c++/$gcc_ver "
38- if [ -d " /usr/include/c++/$gcc_ver /x86_64-pc-linux-gnu" ]; then
39- inc=" $inc -I/usr/include/c++/$gcc_ver /x86_64-pc-linux-gnu"
40- fi
41- if [ -d " /usr/lib/gcc/x86_64-pc-linux-gnu/$gcc_ver /include" ]; then
42- inc=" $inc -I/usr/lib/gcc/x86_64-pc-linux-gnu/$gcc_ver /include"
43- fi
44- if [ -d " /usr/lib/gcc/x86_64-linux-gnu/$gcc_ver /include" ]; then
45- inc=" $inc -I/usr/lib/gcc/x86_64-linux-gnu/$gcc_ver /include"
46- fi
47- if [ -d " /usr/include/x86_64-linux-gnu" ]; then
48- inc=" $inc -I/usr/include/x86_64-linux-gnu"
49- inc=" $inc -I/usr/include/x86_64-linux-gnu/c++/$gcc_ver "
50- fi
34+ while read line
35+ do
36+ inc=" $inc -I$line "
37+ done <<< " $($CXX -x c++ -v -c -S - 2>&1 < /dev/null | grep -e'^ [/A-Z]' | grep -v /cc1plus)"
5138elif [ " $cxx_type " = " clang" ]; then
52- clang_ver=$( $CXX -dumpversion)
53- clang_ver=${clang_ver%% .* }
5439 defs=
55- defs=" $defs -D__BYTE_ORDER__"
56- defs=" $defs -D__linux__"
5740 defs=" $defs -D__x86_64__"
58- defs=" $defs -D__SIZEOF_SIZE_T__=8"
41+ defs=" $defs -D__STDC_HOSTED__"
42+ defs=" $defs -D__CHAR_BIT__=8"
43+ defs=" $defs -D__has_builtin(x)=(1)"
44+ defs=" $defs -D__has_cpp_attribute(x)=(1)"
5945 defs=" $defs -D__has_feature(x)=(1)"
60- defs=" $defs -D__has_extension(x)=(1)"
61- defs=" $defs -D__has_attribute(x)=(0)"
62- defs=" $defs -D__has_cpp_attribute(x)=(0)"
6346 defs=" $defs -D__has_include_next(x)=(0)"
64- defs=" $defs -D__has_builtin(x)=(1)"
65- # some required include paths might differ per distro
47+ defs=" $defs -D__has_attribute(x)=(0)"
48+
49+ # TODO: use libc++
6650 inc=
67- if [ -d " /usr/include/c++/v1" ]; then
68- inc=" $inc -I/usr/include/c++/v1"
69- fi
70- if [ -d " /usr/lib/llvm-$clang_ver /include/c++/v1" ]; then
71- inc=" $inc -I/usr/lib/llvm-$clang_ver /include/c++/v1"
72- fi
73- inc=" $inc -I/usr/include"
74- inc=" $inc -I/usr/lib/clang/$clang_ver /include"
75- if [ -d " /usr/include/x86_64-linux-gnu" ]; then
76- inc=" $inc -I/usr/include/x86_64-linux-gnu"
77- fi
51+ while read line
52+ do
53+ inc=" $inc -I$line "
54+ done <<< " $($CXX -x c++ -v -c -S - 2>&1 < /dev/null | grep -e'^ [/A-Z]')"
7855elif [ " $cxx_type " = " Apple" ]; then
7956 appleclang_ver=$( $CXX -dumpversion)
8057 appleclang_ver=${appleclang_ver%% .* }
11390 exit 1
11491fi
11592
93+ # run with -std=gnuc++* so __has_include(...) is available
11694./simplecpp simplecpp.cpp -e -f -std=gnu++11 $defs $inc
11795ec=$?
11896if [ $ec -ne 0 ]; then
0 commit comments