|
|
@ -21,38 +21,50 @@ |
|
|
|
|
|
|
|
|
|
|
|
cxx="${AUTOPCHCXX:-g++}" |
|
|
|
cppfile="$( echo "$*" | sed -r 's,.* ([^ ]*\.cpp).*,\1,'; )" |
|
|
|
cppargs="$( echo "$*" | sed -r 's, ([^- ]|-[MCSEco])[^ ]*,,g'; )" |
|
|
|
[ "$cxx" == "$0" ] && exit 2 |
|
|
|
|
|
|
|
# echo "AutoPCH> $cxx $*" >&2 |
|
|
|
# echo "AutoPCH - cppfile> $cppfile" >&2 |
|
|
|
# echo "AutoPCH - cppargs> $cppargs" >&2 |
|
|
|
cppfile="$( echo " $* " | sed -r 's,((.* )([^ ]*\.(cc|cp|cpp|CPP|cxx|c\+\+|C))) .*,\3,' )" |
|
|
|
cppdir="$( echo "$cppfile" | sed -r 's,[^/]*$,,'; )" |
|
|
|
cppargs="$( echo " $* " | sed -r 's, ([^- ]|-[MCSEco])[^ ]*,,g'; )" |
|
|
|
|
|
|
|
if [ ".$cppfile" == ".$*" ]; then |
|
|
|
echo "AutoPCH> $cxx $*" >&2 |
|
|
|
echo "AutoPCH - cppargs> \"$cppargs\"" >&2 |
|
|
|
echo "AutoPCH - cppdir, cppfile> \"$cppdir\", \"$cppfile\"" >&2 |
|
|
|
|
|
|
|
if [ ! -f "$cppfile" ]; then |
|
|
|
exec $cxx "$@" |
|
|
|
exit 1 |
|
|
|
fi |
|
|
|
|
|
|
|
if [ ! -f autopch.h -a ! -f autopch_oops.h ]; then |
|
|
|
autopch="$cppdir${cppdir:+/}autopch" |
|
|
|
if [ ! -f "${autopch}.h" -a ! -f "${autopch}_oops.h" ]; then |
|
|
|
{ |
|
|
|
echo "#ifndef _AUTOPCH_H_" |
|
|
|
echo "#define _AUTOPCH_H_" |
|
|
|
echo "#warning AutoPCH: THEWARNING" |
|
|
|
[ -f autopch_incl.h ] && cat autopch_incl.h |
|
|
|
egrep -h '^#(include.*\.h[">]|if|endif|define.*[^\\]$|undef)' *.cpp | \ |
|
|
|
egrep -v "[<\"](${AUTOPCHEXCL:-autopch.h})[\">]" |
|
|
|
[ -f "${autopch}_incl.h" ] && cat "${autopch}_incl.h" |
|
|
|
sed -r '/^( | )*#( | )*(include|if|endif|define|undef)/ { |
|
|
|
: label /\\$/ { N ; P ; b label ; } ; p |
|
|
|
} ; d' "$cppdir"${cppdir:+/}*.{cc,cp,cpp,CPP,cxx,c++,C} 2&>1 |
|
|
|
# \ |
|
|
|
# | egrep -v "[<\"](${AUTOPCHEXCL:-autopch.h})[\">]" |
|
|
|
echo "#endif /* _AUTOPCH_H_ */" |
|
|
|
} > autopch.h.plain |
|
|
|
sed 's,THEWARNING,New pre-compiled header.,' < autopch.h.plain > autopch.h |
|
|
|
echo "exec $cxx -I. $cppargs -x c++ -c autopch.h" > autopch.sh |
|
|
|
if ! sh autopch.sh; then mv -f autopch.h autopch_oops.h; fi |
|
|
|
sed 's,THEWARNING,Pre-compiled header not used!,' < autopch.h.plain > autopch.h |
|
|
|
} > "${autopch}.h.plain" |
|
|
|
sed 's,THEWARNING,New pre-compiled header.,' \ |
|
|
|
< "${autopch}.h.plain" > "${autopch}.h" |
|
|
|
# Precompile the autopch.h file |
|
|
|
echo "exec $cxx -I. $cppargs -x c++ -c \"${autopch}.h\"" \ |
|
|
|
> "${autopch}.sh" |
|
|
|
if ! sh "${autopch}.sh" ; then |
|
|
|
mv -f "${autopch}.h" "${autopch}_oops.h" |
|
|
|
fi |
|
|
|
sed 's,THEWARNING,Pre-compiled header not used!,' \ |
|
|
|
< "${autopch}.h.plain" > "${autopch}.h" |
|
|
|
fi |
|
|
|
|
|
|
|
if ! test -f autopch.h || ! $cxx -include autopch.h "$@"; then |
|
|
|
if test -f ${autopch}.h && ! $cxx -include ${autopch}.h "$@"; then |
|
|
|
echo "AutoPCH: Fallback to non pre-compiled headers!" >&2 |
|
|
|
exec $cxx "$@" |
|
|
|
exit 1 |
|
|
|
fi |
|
|
|
exit 0 |
|
|
|
|