2023-02-22 13:13:38 -06:00
|
|
|
#!/usr/bin/env bash
|
|
|
|
|
|
|
|
|
|
. "$(dirname $0)/util/logging.bash"
|
|
|
|
|
|
|
|
|
|
read -d '' usage <<EOUSAGE
|
|
|
|
|
$0 - List C/C++ toolchain's #include paths.
|
|
|
|
|
|
|
|
|
|
Usage: $0 [clang|gcc|cc] OPTION
|
|
|
|
|
|
|
|
|
|
OPTIONS
|
|
|
|
|
-c Print C compiler's #include paths.
|
|
|
|
|
-p Print C++ compiler's #include paths.
|
|
|
|
|
-P Print C and C++ compilers' #include paths.
|
|
|
|
|
|
|
|
|
|
NOTE
|
|
|
|
|
For a custom C/C++ compiler, set CC and CXX environment variables.
|
|
|
|
|
EOUSAGE
|
|
|
|
|
|
|
|
|
|
# Get C or C++ include paths
|
|
|
|
|
get-incl() {
|
2023-06-26 00:36:59 -05:00
|
|
|
case $(basename "$1") in
|
2023-02-22 13:13:38 -06:00
|
|
|
"cc") ;&
|
2023-06-26 00:36:59 -05:00
|
|
|
"*-gcc") ;&
|
2023-06-26 12:35:01 -05:00
|
|
|
"gcc*") ;&
|
2023-02-22 13:13:38 -06:00
|
|
|
"gcc") ;&
|
2023-06-26 00:36:59 -05:00
|
|
|
"clang") ;&
|
2023-06-26 12:35:01 -05:00
|
|
|
"clang*") ;&
|
2023-06-26 00:36:59 -05:00
|
|
|
"silly-cc")
|
2023-02-22 13:13:38 -06:00
|
|
|
xc='-xc'
|
|
|
|
|
;;
|
|
|
|
|
"cxx") ;&
|
2023-06-26 00:36:59 -05:00
|
|
|
"*-g++") ;&
|
2023-06-26 12:35:01 -05:00
|
|
|
"g++*") ;&
|
2023-02-22 13:13:38 -06:00
|
|
|
"g++") ;&
|
2023-06-26 00:36:59 -05:00
|
|
|
"clang++") ;&
|
2023-06-26 12:35:01 -05:00
|
|
|
"clang++*") ;&
|
2023-06-26 00:36:59 -05:00
|
|
|
"silly-cxx")
|
2023-02-22 13:13:38 -06:00
|
|
|
xc='-xc++'
|
|
|
|
|
;;
|
|
|
|
|
esac
|
|
|
|
|
|
|
|
|
|
$1 -E -Wp,-v $xc /dev/null 2>&1 \
|
|
|
|
|
| sed -e '1,/^\s*#include\s\+<\.\.\.>\s\+search\s\+starts\s\+here:\s*/d' \
|
|
|
|
|
| sed -e '/^\s*End\s\+of\s\+search\s\+list.\s*$/,$d' \
|
|
|
|
|
| sed -e 's/^\s\+//g; s/\s\+$//g'
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
cc=${CC:-cc}
|
|
|
|
|
cxx=${CXX:-cxx}
|
|
|
|
|
|
2023-06-21 23:51:03 -05:00
|
|
|
[ -z "$1" ] && dedcat "$usage"
|
2023-02-22 13:13:38 -06:00
|
|
|
|
|
|
|
|
case "$1" in
|
|
|
|
|
'clang') ;&
|
|
|
|
|
'clang++')
|
|
|
|
|
cc='clang'
|
|
|
|
|
cxx='clang++'
|
|
|
|
|
shift
|
|
|
|
|
;;
|
|
|
|
|
'gcc') ;&
|
|
|
|
|
'g++')
|
|
|
|
|
cc='gcc'
|
|
|
|
|
cxx='g++'
|
|
|
|
|
shift
|
|
|
|
|
;;
|
|
|
|
|
esac
|
|
|
|
|
|
|
|
|
|
get-both() { get-incl $cc; get-incl $cxx; }
|
|
|
|
|
|
|
|
|
|
while getopts 'cpP' opt; do
|
|
|
|
|
case "${opt}" in
|
|
|
|
|
c)
|
|
|
|
|
get-incl $cc
|
|
|
|
|
;;
|
|
|
|
|
p)
|
|
|
|
|
get-incl $cxx
|
|
|
|
|
;;
|
|
|
|
|
P)
|
|
|
|
|
sort -u <<<$(get-both)
|
|
|
|
|
;;
|
|
|
|
|
*)
|
2023-06-21 23:51:03 -05:00
|
|
|
dedcat "$usage"
|
2023-02-22 13:13:38 -06:00
|
|
|
;;
|
|
|
|
|
esac
|
|
|
|
|
done
|
|
|
|
|
|
|
|
|
|
shift $((OPTIND-1))
|