#! /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
