:
#!/bin/sh -x
# The above : is necessary on some buggy systems.

# configure: Guess values for system-dependent variables
# Output the flag definitions to the file "flags".
# Parameters: $1 = $CC, $2 = $CFLAGS
# To construct unzip automatically using this file, type
# "make -f unix/Makefile generic".
# If this fails, then type "make list" to get a list of special targets.

trap "rm -f conftest* core a.out; exit 1" 1 2 3 15

CC=${1-cc}
CFLAGS=${2-"-O2 -I. -DUNIX"}
CFLAGSR=${CFLAGS}
LFLAGS1=""
LN="ln -s"

echo Check for the C preprocessor
# on SVR4, cc -E does not produce correct assembler files. Need /lib/cpp.
CPP="${CC} -E"
# solaris as(1) needs -P, maybe others as well ?
[ -f /usr/ccs/lib/cpp ] && CPP="/usr/ccs/lib/cpp -P"
[ -f /usr/lib/cpp ] && CPP=/usr/lib/cpp
[ -f /lib/cpp ] && CPP=/lib/cpp
[ -f /usr/bin/cpp ] && CPP=/usr/bin/cpp
[ -f /xenix ] && CPP="${CC} -E"
[ -f /lynx.os ] && CPP="${CC} -E"

echo "#include <stdio.h>" > conftest.c
$CPP conftest.c >/dev/null 2>/dev/null || CPP="${CC} -E"

echo Check if we can use asm code
CRC32A="crc32"
if eval "$CPP crc_i386.S > _crc_i386.s 2>/dev/null"; then
  if test ! -s _crc_i386.s || grep error < _crc_i386.s > /dev/null; then
    :
  elif eval "$CC -c _crc_i386.s >/dev/null 2>/dev/null" && [ -f _crc_i386.o ]; then
    CFLAGSR="${CFLAGSR} -DASM_CRC"
    CRC32A="crc_gcc"
    echo "int foo() { return 0;}" > conftest.c
    $CC -c conftest.c >/dev/null 2>/dev/null
    echo Check if compiler generates underlines
    nm conftest.o | grep "(^|[^_])foo" >/dev/null 2>/dev/null
    [ $? -eq 0 ] && CPP="${CPP} -DNO_UNDERLINE"
  fi
fi
rm -f _crc_i386.s _crc_i386.o

# ANSI options for compilers that don't have __STDC__ defined by default
# Currently HPUX, pyramid, Dynix, AIX, OSF/1 and ultrix

echo Check for ANSI options
cat > conftest.c << _EOF_
int main()
{
#ifndef __STDC__
   forget it
#endif
   return 0;
}
_EOF_
$CC $CFLAGS -c conftest.c > /dev/null 2>/dev/null
if [ $? -ne 0 ]; then
  for OPT in "-Aa -D_HPUX_SOURCE" -Xa -qlanglvl=ansi -std1 -std
  do
    $CC $CFLAGS $OPT -c conftest.c > /dev/null 2>/dev/null
    [ $? -eq 0 ] && CFLAGSR="${CFLAGSR} ${OPT}" && break
  done
fi

echo Check for prototypes
echo "int main(int argc, char *argv[]) { return 0; }" > conftest.c
$CC $CFLAGS -c conftest.c > /dev/null 2>/dev/null
[ $? -ne 0 ] && CFLAGSR="${CFLAGSR} -DNO_PROTO"

# const check currently handles mips cc and non ANSI compilers.
# does it need more ?
echo Check the handling of const
cat > conftest.c << _EOF_
typedef int charset[2];
int main()
{
  const charset x;
  const char *foo;
  return 0;
}
_EOF_
$CC $CFLAGS -c conftest.c >/dev/null 2>/dev/null
[ $? -ne 0 ] && CFLAGSR="${CFLAGSR} -DNO_CONST"

echo Check for time_t
cat > conftest.c << _EOF_
#include <sys/types.h>
#include <time.h>
int main()
{
  time_t t;
  return 0;
}
_EOF_
$CC $CFLAGS -c conftest.c >/dev/null 2>/dev/null
[ $? -ne 0 ] && CFLAGSR="${CFLAGSR} -DNO_TIME_T"

echo Check for size_t
cat > conftest.c << _EOF_
#include <sys/types.h>
int main()
{
  size_t s;
  return 0;
}
_EOF_
$CC $CFLAGS -c conftest.c >/dev/null 2>/dev/null
[ $? -ne 0 ] && CFLAGSR="${CFLAGSR} -DNO_SIZE_T"

echo Check for off_t
cat > conftest.c << _EOF_
#include <sys/types.h>
int main()
{
  off_t s;
  return 0;
}
_EOF_
$CC $CFLAGS -c conftest.c >/dev/null 2>/dev/null
[ $? -ne 0 ] && CFLAGSR="${CFLAGSR} -DNO_OFF_T"

# Added 11/4/2003 EG
# Revised 8/12/04 EG
# Now we set the 64-bit file environment and check the size of off_t
echo Check for Large File Support
cat > conftest.c << _EOF_
# define _LARGEFILE_SOURCE       /* some OSes need this for fseeko */
# define _LARGEFILE64_SOURCE
# define _FILE_OFFSET_BITS 64       /* select default interface as 64 bit */
# define _LARGE_FILES        /* some OSes need this for 64-bit off_t */
#include <sys/types.h>
#include <sys/stat.h>
#include <unistd.h>
#include <stdio.h>
int main()
{
  off_t offset;
  struct stat s;
  /* see if have 64-bit off_t */
  if (sizeof(offset) < 8)
    return 1;
  printf("  off_t is %d bytes\n", sizeof(off_t));
  /* see if have 64-bit stat */
  if (sizeof(s.st_size) < 8) {
    printf("  s.st_size is %d bytes\n", sizeof(s.st_size));
    return 2;
  }
  return 3;
}
_EOF_
# compile it
$CC -o conftest conftest.c >/dev/null 2>/dev/null
if [ $? -ne 0 ]; then
  echo -- no Large File Support
else
# run it
  ./conftest
  r=$?
  if [ $r -eq 1 ]; then
    echo -- no Large File Support - no 64-bit off_t
  elif [ $r -eq 2 ]; then
    echo -- no Large File Support - no 64-bit stat
  elif [ $r -eq 3 ]; then
    echo -- yes we have Large File Support!
    CFLAGSR="${CFLAGSR} -DLARGE_FILE_SUPPORT"
  else
    echo -- no Large File Support - conftest returned $r
  fi
fi

# from configure 2.4i (Onno) 12/5/04
echo Check for gcc no-builtin flag
# -fno-builtin since version 2
cat > conftest.c << _EOF_
int main()
{
#if __GNUC__ >= 2
   return 0;
#else
   forget it
#endif
}
_EOF_
$CC $CFLAGS -c conftest.c >/dev/null 2>/dev/null
[ $? -eq 0 ] && BFLAG="-fno-builtin"

# Check for missing functions
# add NO_'function_name' to flags if missing
for func in fchmod fchown
do
  echo Check for $func
  echo "int main(){ $func(); return 0; }" > conftest.c
  $CC $BFLAG -o conftest conftest.c >/dev/null 2>/dev/null
  [ $? -ne 0 ] && CFLAGSR="${CFLAGSR} -DNO_`echo $func | tr '[a-z]' '[A-Z]'`"
done

echo Check for memset
echo "int main(){ char k; memset(&k,0,0); return 0; }" > conftest.c
$CC -o conftest conftest.c >/dev/null 2>/dev/null
[ $? -ne 0 ] && CFLAGSR="${CFLAGSR} -DZMEM"

echo Check for errno declaration
cat > conftest.c << _EOF_
#include <errno.h>
main()
{
  errno = 0;
  return 0;
}
_EOF_
$CC $CFLAGS -c conftest.c >/dev/null 2>/dev/null
[ $? -ne 0 ] && CFLAGSR="${CFLAGSR} -DNO_ERRNO"

echo Check for directory libraries
cat > conftest.c << _EOF_
int main() { return closedir(opendir(".")); }
_EOF_

$CC -o conftest conftest.c >/dev/null 2>/dev/null
if [ $? -ne 0 ]; then
  OPT=""
  for lib in ndir dir ucb bsd BSD PW x dirent
  do
    $CC -o conftest conftest.c -l$lib >/dev/null 2>/dev/null
    [ $? -eq 0 ] && OPT=-l$lib && break
  done
  if [ ${OPT} ]; then
    LFLAGS2="${LFLAGS2} ${OPT}"
  else
    CFLAGSR="${CFLAGSR} -DNO_DIR"
  fi
fi

# Dynix/ptx 1.3 needed this
echo Check for readlink
echo "int main(){ return readlink(); }" > conftest.c
$CC -o conftest conftest.c >/dev/null 2>/dev/null
if [ $? -ne 0 ]; then
  $CC -o conftest conftest.c -lseq >/dev/null 2>/dev/null
  [ $? -eq 0 ] && LFLAGS2="${LFLAGS2} -lseq"
fi

echo Check for directory include file
OPT=""
for inc in dirent.h sys/ndir.h ndir.h sys/dir.h
do
   echo "#include <$inc>" > conftest.c
   $CPP conftest.c > /dev/null 2>/dev/null
   [ $? -eq 0 ] && OPT="-DHAVE_`echo $inc | tr '[a-z]./' '[A-Z]__'`" && break
done
CFLAGSR="${CFLAGSR} ${OPT}"

echo Check for non existent include files
for inc in stdlib.h stddef.h unistd.h fcntl.h string.h
do
   echo "#include <$inc>" > conftest.c
   $CPP conftest.c >/dev/null 2>/dev/null
   [ $? -ne 0 ] && CFLAGSR="${CFLAGSR} -DNO_`echo $inc | tr '[a-z]./' '[A-Z]__'`"
done

echo Check for term I/O include file
OPT=""
for inc in termios.h termio.h sgtty.h
do
   echo "#include <$inc>" > conftest.c
   $CPP conftest.c > /dev/null 2>/dev/null
   [ $? -eq 0 ] && OPT="-DHAVE_`echo $inc | tr '[a-z]./' '[A-Z]__'`" && break
done
CFLAGSR="${CFLAGSR} ${OPT}"

# needed for AIX (and others ?) when mmap is used
echo Check for valloc
cat > conftest.c << _EOF_
main()
{
#ifdef MMAP
    valloc();
#endif
}
_EOF_
$CC ${CFLAGS} -c conftest.c > /dev/null 2>/dev/null
[ $? -ne 0 ] && CFLAGSR="${CFLAGSR} -DNO_VALLOC"

echo Check for /usr/local/bin and /usr/local/man
BINDIR=$HOME/bin
[ -d /usr/local/bin ] && BINDIR=/usr/local/bin

MANDIR=manl
[ -d /usr/man/manl ]       && MANDIR=/usr/man/manl
[ -d /usr/local/man/manl ] && MANDIR=/usr/local/man/manl
[ -d /usr/local/man/man1 ] && MANDIR=/usr/local/man/man1

echo Checking for OS specialties
if [ -f /usr/bin/hostinfo ]; then
  if /usr/bin/hostinfo | grep NeXT > /dev/null; then
    CFLAGSR="${CFLAGSR} -posix"
    LFLAGS1="${LFLAGS1} -posix -object"
  fi
# XXX ATT6300, Cray
elif [ -f /xenix ]; then
  if uname -p | grep 286 > /dev/null; then
    CFLAGSR="${CFLAGSR} -LARGE -Mel2 -DMEDIUM_MEM -DWSIZE=16384 -DNO_VOID"
    LFLAGS1="${LFLAGS1} -LARGE -Mel2"
  fi
elif uname -X >/dev/null 2>/dev/null; then
# SCO shared library check
  echo "int main() { return 0;}" > conftest.c
  $CC -o conftest conftest.c -lc_s -nointl >/dev/null 2> /dev/null
  [ $? -eq 0 ] && LFLAGS2="-lc_s -nointl"
else
  SYSTEM=`uname -s 2>/dev/null` || SYSTEM="unknown"
  echo "int main() { return 0;}" > conftest.c
  case $SYSTEM in
     OSF1|ULTRIX)
        echo Check for -Olimit option
        $CC ${CFLAGS} -Olimit 1000 -o conftest conftest.c >/dev/null 2>/dev/null
        [ $? -eq 0 ] && CFLAGSR="${CFLAGSR} -Olimit 1000"
        ;;
     HP-UX)
        echo Check for +Onolimit option
        $CC ${CFLAGS} +Onolimit -o conftest conftest.c >/dev/null 2>/dev/null
        [ $? -eq 0 ] && CFLAGSR="${CFLAGSR} +Onolimit"
        ;;
     SunOS)
        CFLAGSR="${CFLAGSR} -D_FILE_OFFSET_BITS=64"
        ;;
  esac
fi

echo Check for symbolic links
ln -s /dev/null null > /dev/null 2>/dev/null || LN=ln

rm -f a.out conftest.c conftest.o conftest null

echo CF=\"${CFLAGSR}\" CRC32=\"${CRC32A}\" AS=\"${CC} -c\" > flags
