| #! /bin/sh |
| # Create wrappers for include files instead of replacing them. |
| # |
| # This script is designed for systems whose include files can be fixed |
| # by creating small wrappers around them. |
| # An advantage of this method is that if the system include files are changed |
| # (e.g. by OS upgrade), you need not re-run fixincludes. |
| # |
| # See README-fixinc for more information. |
| |
| # Directory containing the original header files. |
| # (This was named INCLUDES, but that conflicts with a name in Makefile.in.) |
| INPUT=${2-${INPUT-/usr/include}} |
| |
| # Directory in which to store the results. |
| LIB=${1?"fixincludes: output directory not specified"} |
| |
| # Make sure it exists. |
| if [ ! -d $LIB ]; then |
| mkdir $LIB || exit 1 |
| fi |
| |
| echo Building fixed headers in ${LIB} |
| |
| # Some math.h files define struct exception, which conflicts with |
| # the class exception defined in the C++ file std/stdexcept.h. We |
| # redefine it to __math_exception. This is not a great fix, but I |
| # haven't been able to think of anything better. |
| file=math.h |
| if [ -r $INPUT/$file ]; then |
| echo Checking $INPUT/$file |
| if grep 'struct exception' $INPUT/$file >/dev/null |
| then |
| echo Fixed $file |
| rm -f $LIB/$file |
| cat <<'__EOF__' >$LIB/$file |
| #ifndef _MATH_H_WRAPPER |
| #ifdef __cplusplus |
| # define exception __math_exception |
| #endif |
| #include_next <math.h> |
| #ifdef __cplusplus |
| # undef exception |
| #endif |
| #define _MATH_H_WRAPPER |
| #endif /* _MATH_H_WRAPPER */ |
| __EOF__ |
| # Define _MATH_H_WRAPPER at the end of the wrapper, not the start, |
| # so that if #include_next gets another instance of the wrapper, |
| # this will follow the #include_next chain until we arrive at |
| # the real <math.h>. |
| chmod a+r $LIB/$file |
| fi |
| fi |
| |
| # Avoid the definition of the bool type in the Solaris 2.x curses.h when using |
| # g++, since it's now an official type in the C++ language. |
| file=curses.h |
| if [ -r $INPUT/$file ]; then |
| echo Checking $INPUT/$file |
| w='[ ]' |
| if grep "typedef$w$w*char$w$w*bool$w*;" $INPUT/$file >/dev/null |
| then |
| echo Fixed $file |
| rm -f $LIB/$file |
| cat <<'__EOF__' >$LIB/$file |
| #ifndef _CURSES_H_WRAPPER |
| #ifdef __cplusplus |
| # define bool __curses_bool_t |
| #endif |
| #include_next <curses.h> |
| #ifdef __cplusplus |
| # undef bool |
| #endif |
| #define _CURSES_H_WRAPPER |
| #endif /* _CURSES_H_WRAPPER */ |
| __EOF__ |
| # Define _CURSES_H_WRAPPER at the end of the wrapper, not the start, |
| # so that if #include_next gets another instance of the wrapper, |
| # this will follow the #include_next chain until we arrive at |
| # the real <curses.h>. |
| chmod a+r $LIB/$file |
| fi |
| fi |
| |
| exit 0 |