dnl Process this file with autoconf to produce a configure script.

dnl Prolog

AC_INIT(NX.h)
AC_PREREQ(2.13)

pkgconfigdir=${libdir}/pkgconfig
AC_SUBST(pkgconfigdir)

dnl Set our default compilation flags.

CXXFLAGS="$CXXFLAGS -O3 -fno-rtti -fno-exceptions"
CFLAGS="$CFLAGS -O3"

dnl Reset default linking directives.

LIBSTATIC=""
LIBSHARED=""

dnl Prefer headers and libraries from nx-X11, if present.

if test -d "../nx-X11/include" ; then
    CXXFLAGS="$CXXFLAGS -I../nx-X11/exports/include"
    CFLAGS="$CFLAGS -I../nx-X11/exports/include"
    LIBS="$LIBS -L../nx-X11/exports/lib"
fi

dnl Check whether --with-ipaq was given.

if test "${with_ipaq}" = yes; then
  echo -e "enabling IPAQ configuration"
  CXX="arm-linux-c++"
  CC="arm-linux-gcc"
  unset ac_cv_prog_armcxx
  unset ac_cv_prog_armcc
  unset ac_cv_prog_CXXCPP
  AC_CHECK_PROG([armcxx],["$CXX"],[yes],[no],[$PATH])
  AC_CHECK_PROG([armcc],["$CC"],[yes],[no],[$PATH])
  if test $armcxx = "yes" && test $armcc = "yes" ; then
    ac_cv_prog_CXX="$CXX"
    ac_cv_prog_CC="$CC"
  else
    AC_MSG_ERROR(Installation or configuration problem. Cannot find compiler for arm-linux.)
  fi
else
  unset ac_cv_prog_CXX
  unset ac_cv_prog_CC
  unset ac_cv_prog_CXXCPP
fi  

dnl Check for programs.

AC_PROG_CXX
AC_PROG_CC
AC_LANG_CPLUSPLUS

dnl Check whether option -Wno-deprecated
dnl is needed by GCC compiler.

AC_MSG_CHECKING([whether compiler needs -Wno-deprecated])
gcc_version=`${CC} --version | grep 'gcc (GCC) [[3-4]].' | head -n 1`
case "${gcc_version}" in
     gcc*)
        AC_MSG_RESULT([yes])
        CXXFLAGS="$CXXFLAGS -Wno-deprecated"
        ;;

     *)
        AC_MSG_RESULT([no])
        ;;
esac

AC_MSG_CHECKING([whether compiler accepts -Wmissing-declarations])
gcc_version=`${CC} --version | grep 'gcc (GCC) [[3-4]].' | head -n 1`
case "${gcc_version}" in
     gcc*)
        AC_MSG_RESULT([no])
        ;;

     *)
        AC_MSG_RESULT([yes])
        CXXFLAGS="$CXXFLAGS -Wmissing-declarations"
        ;;
esac

dnl Check for BSD compatible install.

AC_PROG_INSTALL

dnl Check for extra header files.

AC_PATH_XTRA

dnl Custom addition.

ac_help="$ac_help
  --with-symbols          add the -g flag to produce the debug symbols
  --with-use-malloc       add the __USE_MALLOC flag to avoid the STL allocators
  --with-info             define INFO at compile time to get basic log output
  --with-valgrind         clean up allocated buffers to avoid valgrind warnings
  --with-version          use this version for produced libraries

  --with-static-png       enable static linking of PNG library
  --with-static-jpeg      enable static linking of JPEG library
  --with-static-z         enable static linking of Z library"

dnl Check to see if we're running under Cygwin32.

AC_DEFUN(nxconf_CYGWIN32,
[AC_CACHE_CHECK(for Cygwin32 environment, nxconf_cv_cygwin32,
[AC_TRY_COMPILE(,[return __CYGWIN32__;],
nxconf_cv_cygwin32=yes, nxconf_cv_cygwin32=no)
rm -f conftest*])
CYGWIN32=
test "$nxconf_cv_cygwin32" = yes && CYGWIN32=yes])
nxconf_CYGWIN32

dnl Check whether we're building on a AMD64.

AC_DEFUN(nxconf_AMD64,
[AC_CACHE_CHECK(for Amd64 environment, nxconf_cv_amd64,
[AC_TRY_COMPILE(,[return (__amd64__ || __x86_64__);],
nxconf_cv_amd64=yes, nxconf_cv_amd64=no)
rm -f conftest*])
AMD64=
test "$nxconf_cv_amd64" = yes && AMD64=yes])
nxconf_AMD64

dnl Check for Darwin environment.

AC_DEFUN(nxconf_DARWIN,
[AC_CACHE_CHECK(for Darwin environment, nxconf_cv_darwin,
[AC_TRY_COMPILE(,[return __APPLE__;],
nxconf_cv_darwin=yes, nxconf_cv_darwin=no)
rm -f conftest*])
DARWIN=
test "$nxconf_cv_darwin" = yes && DARWIN=yes])
nxconf_DARWIN

dnl Check to see if we're running under Solaris.

AC_DEFUN(nxconf_SUN,
[AC_CACHE_CHECK(for Solaris environment, nxconf_cv_sun,
[AC_TRY_COMPILE(,[return __sun;],
nxconf_cv_sun=yes, nxconf_cv_sun=no)
rm -f conftest*])
SUN=
test "$nxconf_cv_sun" = yes && SUN=yes])
nxconf_SUN

dnl Check to see if we're running under FreeBSD.

AC_DEFUN(nxconf_FreeBSD,
[AC_CACHE_CHECK(for FreeBSD environment, nxconf_cv_freebsd,
[AC_TRY_COMPILE(,[return __FreeBSD__;],
nxconf_cv_freebsd=yes, nxconf_cv_freebsd=no)
rm -f conftest*])
FreeBSD=
test "$nxconf_cv_freebsd" = yes && FreeBSD=yes])
nxconf_FreeBSD

dnl Build PIC libraries.

if test "$CYGWIN32" != yes -a "$DARWIN" != yes; then
  CXXFLAGS="$CXXFLAGS -fPIC"
  CFLAGS="$CFLAGS -fPIC"
fi

dnl Solaris requires the socket and gcc_s libs explicitly linked.
dnl Note also that headers from default /usr/openwin/include/X11
dnl cause a warning due to pragma in Xmd.h.

if test "$SUN" = yes; then
  LIBS="$LIBS -L/usr/sfw/lib -lsocket "
  CXXFLAGS="$CXXFLAGS -I/usr/sfw/include"
  CFLAGS="$CFLAGS -I/usr/sfw/include"
fi

dnl On FreeBSD search libraries and includes under /usr/local.

if test "$FreeBSD" = yes; then
  LIBS="$LIBS -L/usr/local/lib"
  CXXFLAGS="$CXXFLAGS -I/usr/local/include"
  CFLAGS="$CFLAGS -I/usr/local/include"
fi

dnl Under Darwin we don't have support for -soname option and
dnl we need the -dynamiclib flag. Under Solaris, instead, we need
dnl the options -G -h.

if test "$DARWIN" = yes; then
  LDFLAGS="$LDFLAGS -dynamiclib"
elif test "$SUN" = yes; then
  LDFLAGS="$LDFLAGS -G -h \$(LIBLOAD)"
else
  LDFLAGS="$LDFLAGS -Wl,-soname,\$(LIBLOAD)"
fi

dnl Check to see if in_addr_t is defined.
dnl Could use a specific configure test.

AC_DEFUN(nxconf_INADDRT,
[AC_CACHE_CHECK(for in_addr_t, nxconf_cv_inaddrt,
[AC_TRY_COMPILE([#include <netinet/in.h>],[in_addr_t t; t = 1; return t;],
nxconf_cv_inaddrt=yes, nxconf_cv_inaddrt=no)
rm -f conftest*])
INADDRT=
test "$nxconf_cv_inaddrt" = yes && INADDRT=yes])
nxconf_INADDRT

dnl If in_addr_t is not defined use unsigned int.

if test "$INADDRT" != yes ; then
  echo -e "using unsigned int for type in_addr_t"
  CXXFLAGS="$CXXFLAGS -DIN_ADDR_T=unsigned"
  CFLAGS="$CFLAGS -DIN_ADDR_T=unsigned"
else
  CXXFLAGS="$CXXFLAGS -DIN_ADDR_T=in_addr_t"
  CFLAGS="$CFLAGS -DIN_ADDR_T=in_addr_t"
fi

dnl Check whether --with-version was given.

AC_SUBST(LIBVERSION)
AC_SUBST(VERSION)
if test "${with_version}" = yes; then
  VERSION=${ac_option}
else
  VERSION=`cat VERSION`
fi
echo -e "compiling version ${VERSION}"

LIBVERSION=`echo ${VERSION} | cut -d '.' -f 1`

CXXFLAGS="$CXXFLAGS -DVERSION=\\\"${VERSION}\\\""
CFLAGS="$CFLAGS -DVERSION=\\\"${VERSION}\\\""

dnl Check whether --with-static-png was given and
dnl add -lpng or libpng.a to linking.

if test "${with_static_png}" = yes; then
  echo -e "enabling static linking of PNG library"
  if test "$SUN" = yes && test -f "/usr/sfw/lib/libpng.a"; then
    LIBSTATIC="$LIBSTATIC /usr/sfw/lib/libpng.a"
  else
    if test -f "/usr/lib/libpng.a" ; then
      LIBSTATIC="$LIBSTATIC /usr/lib/libpng.a"
    else
      if test -f "/usr/local/lib/libpng.a" ; then
        echo -e "assuming libpng.a in /usr/local/lib"
        LIBSTATIC="$LIBSTATIC /usr/local/lib/libpng.a"
      else
        echo -e "Warning: assuming libpng.a in the local path"
        LIBSTATIC="$LIBSTATIC libpng.a"
      fi
    fi
  fi
else
  echo -e "enabling dynamic linking of PNG library"
  LIBSHARED="$LIBSHARED -lpng"
fi

dnl Check whether --with-static-jpeg was given and
dnl add -ljpeg or libjpeg.a to linking.

if test "${with_static_jpeg}" = yes; then
  echo -e "enabling static linking of JPEG library"
  if test "$SUN" = yes && test -f "/usr/sfw/lib/libjpeg.a"; then
    LIBSTATIC="$LIBSTATIC /usr/sfw/lib/libjpeg.a"
  else
    if test -f "/usr/lib/libjpeg.a" ; then
      LIBSTATIC="$LIBSTATIC /usr/lib/libjpeg.a"
    else
      if test -f "/usr/local/lib/libjpeg.a" ; then
        echo -e "assuming libjpeg.a in /usr/local/lib"
        LIBSTATIC="$LIBSTATIC /usr/local/lib/libjpeg.a"
      else
        echo -e "Warning: assuming libjpeg.a in the local path"
        LIBSTATIC="$LIBSTATIC libjpeg.a"
      fi
    fi
  fi
else
  echo -e "enabling dynamic linking of JPEG library"
  LIBSHARED="$LIBSHARED -ljpeg"
fi

dnl Check whether --with-static-z was given and
dnl add -lz or libz.a to linking.

if test "${with_static_z}" = yes; then
  echo -e "enabling static linking of Z library"
  if test "$SUN" = yes && test -f "/usr/sfw/lib/libz.a"; then
    LIBSTATIC="$LIBSTATIC /usr/sfw/lib/libz.a"
  else
    if test -f "/usr/lib/libz.a" ; then
      LIBSTATIC="$LIBSTATIC /usr/lib/libz.a"
    else
      if test -f "/usr/local/lib/libz.a" ; then
        echo -e "assuming libz.a in /usr/local/lib"
        LIBSTATIC="$LIBSTATIC /usr/local/lib/libz.a"
      else
        echo -e "Warning: assuming libz.a in the local path"
        LIBSTATIC="$LIBSTATIC libz.a"
      fi
    fi
  fi
else
  echo -e "enabling dynamic linking of Z library"
  LIBSHARED="$LIBSHARED -lz"
fi

dnl Finally compose the LIB variable.

if test "$DARWIN" = yes ; then
  LIBS="$LIBS $LIBSTATIC $LIBSHARED"
elif test "$SUN" = yes ; then
  LIBS="$LIBS $LIBSTATIC $LIBSHARED"
else
  LIBS="$LIBS $LIBSTATIC -shared $LIBSHARED"
fi

dnl Check whether --with-symbols or --without-symbols was
dnl given and set the required optimization level.

if test "${with_symbols}" = yes; then
  echo -e "enabling production of debug symbols"
  CXXFLAGS="-g $CXXFLAGS"
  CFLAGS="-g $CFLAGS"
else
  echo -e "disabling production of debug symbols"
fi

dnl Check whether --with-use-malloc or --without-use-malloc
dnl was given.

if test "${with_use_malloc}" = yes; then
  echo -e "disabling use of the STL allocators"
  CXXFLAGS="$CXXFLAGS -D__USE_MALLOC"
else
  echo -e "enabling use of the STL allocators"
fi

dnl Check whether --with-info or --without-info was given.

if test "${with_info}" = yes; then
  echo -e "enabling info output in the log file"
  CXXFLAGS="$CXXFLAGS -DINFO"
  CFLAGS="$CFLAGS -DINFO"
else
  echo -e "disabling info output in the log file"
fi

dnl Check whether --with-valgrind or --without-valgrind was given.

if test "${with_valgrind}" = yes; then
  echo -e "enabling valgrind memory checker workarounds"
  CXXFLAGS="$CXXFLAGS -DVALGRIND"
  CFLAGS="$CFLAGS -DVALGRIND"
else
  echo -e "disabling valgrind memory checker workarounds"
fi

dnl Find makedepend somewhere.

AC_SUBST(MAKEDEPEND)
MAKEDEPEND="$(which makedepend)"

# Try to desperately find makedepend.
# Set MAKEDEPEND to the shipped makedepend binary. This will not
# exist in nx-libs-lite, though, in which case MAKEDEPEND
# will stay empty.
if test -z "${MAKEDEPEND}"; then
  if test -x "../nx-X11/config/makedepend/makedepend"; then
    MAKEDEPEND="../nx-X11/config/makedepend/makedepend"
  fi
fi

dnl Determine what to build based on the platform.
dnl Override the LIBS settings on Cygwin32 so that
dnl we always link with the exact set of libraries.

AC_SUBST(ALL)

if test "$CYGWIN32" = yes; then
    ALL="\$(LIBCYGARCHIVE) \$(LIBCYGSHARED) \$(LIBARCHIVE)"
    LIBS="-lstdc++ -lpng -ljpeg -lz"
else
    ALL="\$(LIBFULL) \$(LIBLOAD) \$(LIBSHARED) \$(LIBARCHIVE)"
fi

AC_OUTPUT(Makefile nxcomp.pc)