Skip to content

Commit 2370b73

Browse files
committed
s
1 parent b0b0573 commit 2370b73

File tree

1 file changed

+21
-43
lines changed

1 file changed

+21
-43
lines changed

selfcheck.sh

Lines changed: 21 additions & 43 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
#!/bin/sh
1+
#!/bin/bash
22

33
output=$(./simplecpp simplecpp.cpp -e -f 2>&1)
44
ec=$?
@@ -15,66 +15,43 @@ if [ -z "$CXX" ]; then
1515
fi
1616

1717
cxx_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)
2020
fi
21-
# TODO: how to get built-in include paths from compiler?
21+
2222
if [ "$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)"
5138
elif [ "$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]')"
7855
elif [ "$cxx_type" = "Apple" ]; then
7956
appleclang_ver=$($CXX -dumpversion)
8057
appleclang_ver=${appleclang_ver%%.*}
@@ -113,6 +90,7 @@ else
11390
exit 1
11491
fi
11592

93+
# run with -std=gnuc++* so __has_include(...) is available
11694
./simplecpp simplecpp.cpp -e -f -std=gnu++11 $defs $inc
11795
ec=$?
11896
if [ $ec -ne 0 ]; then

0 commit comments

Comments
 (0)