#  userv - configure.in
#
#  Copyright (C)1996-1997,1999 Ian Jackson
#   
#  This is free software; you can redistribute it and/or modify it
#  under the terms of the GNU General Public License as published by
#  the Free Software Foundation; either version 2 of the License, or
#  (at your option) any later version.
# 
#  This program is distributed in the hope that it will be useful, but
#  WITHOUT ANY WARRANTY; without even the implied warranty of
#  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
#  General Public License for more details.
# 
#  You should have received a copy of the GNU General Public License
#  along with userv; if not, write to the Free Software
#  Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.

AC_INIT(language.i4)
AC_CONFIG_HEADER(config.h)

AC_PREFIX_DEFAULT(/usr/local)

crdir="`pwd`"
AC_SUBST(DEBUGDEFS)
AC_SUBST(DEBUGLIBS)
DEBUGDEFS=''
DEBUGLIBS=''
AC_ARG_ENABLE(debug,
[  --enable-debug          build debugging version],
[
 if test "x$enable_debug" = xyes; then
  DEBUGDEFS="-DDEBUG -DVARDIR='\"$crdir/vd\"' -DSYSTEMCONFIGDIR='\"$crdir/slash-etc\"' -DSERVICEUSERDIR='\"$crdir/tilde\"'"
  DEBUGLIBS=-lefence
  echo will build debugging version
 elif test "x$enable_debug" != xno; then
  AC_MSG_ERROR(--enable-debug does not allow any arguments except 'yes' and 'no')
 fi
])

AC_PROG_CC
AC_PROG_CPP
AC_PROG_INSTALL

CFLAGS="$CFLAGS -D_GNU_SOURCE"

AC_CHECK_LIB(socket,socket)
AC_CHECK_FUNCS(setenv)

AC_CACHE_CHECK(for EPROTO,userv_cv_hdr_eproto,
 AC_EGREP_CPP(yes,
[
#include <errno.h>
#ifdef EPROTO
 yes
#endif
],userv_cv_hdr_eproto=yes,userv_cv_hdr_eproto=no))
if test $userv_cv_hdr_eproto = yes
then
	AC_DEFINE(HAVE_EPROTO)
fi

AC_CACHE_CHECK(for LOG_AUTHPRIV,userv_cv_hdr_logauthpriv,
 AC_EGREP_CPP(yes,
[
#include <syslog.h>
#ifdef LOG_AUTHPRIV
 yes
#endif
],userv_cv_hdr_logauthpriv=yes,userv_cv_hdr_logauthpriv=no))
if test $userv_cv_hdr_logauthpriv = yes
then
	AC_DEFINE(HAVE_LOG_AUTHPRIV)
fi

AC_SUBST(OPTIMISE)
if test "${GCC-no}" = yes; then
 OPTIMISE=-O2
else
 OPTIMISE=-O
fi

dnl DPKG_CACHED_TRY_COMPILE(<description>,<cachevar>,<include>,<program>,<ifyes>,<ifno>)
define(DPKG_CACHED_TRY_COMPILE,[
 AC_MSG_CHECKING($1)
 AC_CACHE_VAL($2,[
  AC_TRY_COMPILE([$3],[$4],[$2=yes],[$2=no])
 ])
 if test "x$$2" = xyes; then
  true
  $5
 else
  true
  $6
 fi
])

DPKG_CACHED_TRY_COMPILE(your C compiler,dpkg_cv_c_works,
 [#include <string.h>], [strcmp("a","b")],
 AC_MSG_RESULT(works),
 AC_MSG_RESULT(broken)
 AC_MSG_ERROR(C compiler is broken))

DPKG_CACHED_TRY_COMPILE(__attribute__((,,)),dpkg_cv_c_attribute_supported,,
 [extern int testfunction(int x) __attribute__((,,))],
 AC_MSG_RESULT(yes)
 AC_DEFINE(HAVE_GNUC25_ATTRIB)
  DPKG_CACHED_TRY_COMPILE(__attribute__((noreturn)),dpkg_cv_c_attribute_noreturn,,
   [extern int testfunction(int x) __attribute__((noreturn))],
   AC_MSG_RESULT(yes)
   AC_DEFINE(HAVE_GNUC25_NORETURN),
   AC_MSG_RESULT(no))
  DPKG_CACHED_TRY_COMPILE(__attribute__((unused)),dpkg_cv_c_attribute_unused,,
   [extern int testfunction(int x) __attribute__((unused))],
   AC_MSG_RESULT(yes)
   AC_DEFINE(HAVE_GNUC25_UNUSED),
   AC_MSG_RESULT(no))
  DPKG_CACHED_TRY_COMPILE(__attribute__((format...)),dpkg_cv_attribute_format,,
   [extern int testfunction(char *y, ...) __attribute__((format(printf,1,2)))],
   AC_MSG_RESULT(yes)
   AC_DEFINE(HAVE_GNUC25_PRINTFFORMAT),
   AC_MSG_RESULT(no)),
 AC_MSG_RESULT(no))

AC_SUBST(CWARNS)
CWARNS=""

dnl DPKG_C_GCC_TRY_WARNS(<warnings>,<cachevar>)
define(DPKG_C_GCC_TRY_WARNS,[
 AC_MSG_CHECKING([GCC warning flag(s) $1])
 if test "${GCC-no}" = yes
 then
  AC_CACHE_VAL($2,[
   oldcflags="${CFLAGS-}"
   CFLAGS="${CFLAGS-} ${CWARNS} $1 -Werror"
   AC_TRY_COMPILE([
#include <string.h>
#include <stdio.h>
],[
    strcmp("a","b"); fprintf(stdout,"test ok\n");
], [$2=yes], [$2=no])
   CFLAGS="${oldcflags}"])
  if test "x$$2" = xyes; then
   CWARNS="${CWARNS} $1"
   AC_MSG_RESULT(ok)
  else
   $2=''
   AC_MSG_RESULT(no)
  fi
 else
  AC_MSG_RESULT(no, not using GCC)
 fi
])

DPKG_C_GCC_TRY_WARNS(-Wall -Wno-implicit, dpkg_cv_c_gcc_warn_all)
DPKG_C_GCC_TRY_WARNS(-Wwrite-strings, dpkg_cv_c_gcc_warn_writestrings)
DPKG_C_GCC_TRY_WARNS(-Wpointer-arith, dpkg_cv_c_gcc_warn_pointerarith)
DPKG_C_GCC_TRY_WARNS(-Wimplicit -Wnested-externs, dpkg_cv_c_gcc_warn_implicit)

if test "${GCC-no}" = yes; then
 CWARNS="${CWARNS} -Wmissing-prototypes -Wstrict-prototypes"
fi
[CFLAGS="`echo $CFLAGS $CWARNS | sed -e 's/-O[0-9]*/$(OPTIMISE)/'`"]

AC_SUBST(VERSION)
VERSION="`sed -n '/^userv (.*)/!d; s/^userv (//; s/).*//; p; q' debian/changelog`"
echo will build version $VERSION

AC_OUTPUT(Makefile)
