# configure.in - input to autoconf
#  
#  This file is part of adns, which is Copyright Ian Jackson
#  and contributors (see the file INSTALL for full details).
#  
#  This program 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 3, 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 this program; if not, write to the Free Software Foundation.

AC_INIT(src/adns.h)
AC_CONFIG_HEADER(src/config.h)

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
])

AC_MSG_CHECKING(whether you requested dynamic linking)
AC_SUBST(ENABLE_DYNAMIC)
AC_ARG_ENABLE(dynamic,
[  --disable-dynamic       use static linking
  --enable-dynamic[=elf]  create and use ELF dynamic library (default)],
[	case "$enableval" in
	elf|yes)
		ENABLE_DYNAMIC=elf
		AC_MSG_RESULT([yes (ELF)])
		;;
	no)	ENABLE_DYNAMIC=no
		AC_MSG_RESULT(no)
		;;
	*)	AC_MSG_ERROR(
["invalid value $enableval for --enable-dynamic, try yes or elf"])
		;;
	esac
],[
		ENABLE_DYNAMIC=elf
		AC_MSG_RESULT([yes, by default])
])

AC_PROG_CC
AC_PROG_CPP
AC_PROG_RANLIB
AC_PROG_INSTALL

AC_CHECK_FUNCS(poll)
ADNS_C_GETFUNC(socket,socket)
ADNS_C_GETFUNC(inet_ntoa,nsl)

PROGS_IF_TSEARCH=adnsresfilter
AC_SUBST(PROGS_HAVE_TSEARCH)
AC_CHECK_FUNC(tsearch,[
 PROGS_HAVE_TSEARCH=$PROGS_IF_TSEARCH
],[
 PROGS_HAVE_TSEARCH='';
 AC_MSG_WARN([tsearch missing - not building client program(s) $PROGS_IF_TSEARCH])
])

AC_MSG_CHECKING(for INADDR_LOOPBACK)
AC_CACHE_VAL(adns_cv_decl_inaddrloopback,[
 AC_TRY_COMPILE([
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
 ],[
  INADDR_LOOPBACK;
 ],
 adns_cv_decl_inaddrloopback=yes,
 adns_cv_decl_inaddrloopback=no)])
if test "$adns_cv_decl_inaddrloopback" = yes; then
 AC_MSG_RESULT(found)
else
 AC_MSG_RESULT([not in standard headers, urgh...])
 AC_CHECK_HEADER(rpc/types.h,[
  AC_DEFINE(HAVEUSE_RPCTYPES_H)
 ],[
  AC_MSG_ERROR([cannot find INADDR_LOOPBACK or rpc/types.h])
 ])
fi

ADNS_C_GETFUNC(inet_aton,resolv,[
 LIBS="-lresolv $LIBS";
 AC_MSG_WARN([inet_aton is in libresolv, urgh.  Must use -lresolv.])
])

DPKG_CACHED_TRY_COMPILE(inlines,dpkg_cv_c_inline,,
 [} inline int foo (int x) {],
 AC_MSG_RESULT(yes)
 AC_DEFINE(HAVE_INLINE),
 AC_MSG_RESULT(no))

AC_SUBST(WARNS)

if test "${GCC-no}" = yes; then
	WARNS="-Wall -Wmissing-prototypes -Wwrite-strings -Wstrict-prototypes -Wcast-qual -Wpointer-arith"
	saved_cflags="$CFLAGS"
	CFLAGS="$CFLAGS -Wno-pointer-sign"
	DPKG_CACHED_TRY_COMPILE(-Wno-pointer-sign,adns_cv_c_wnoptrsign,,
	 [],
	 AC_MSG_RESULT(yes)
	 WARNS="$WARNS -Wno-pointer-sign",
	 AC_MSG_RESULT(no))
	CFLAGS="$saved_cflags"
else
	WARNS=
fi

ADNS_C_GCCATTRIB

AC_SUBST(SHLIBCC)
AC_SUBST(MKSHLIB_1)
AC_SUBST(MKSHLIB_2)
AC_SUBST(MKSHLIB_3)

AC_SUBST(SHLIBFORLINK)
AC_SUBST(SHLIBFILE)
AC_SUBST(SHLIBSONAME)

SHLIBFORLINK='libadns.so'
SHLIBSONAME='$(SHLIBFORLINK).$(MAJOR)'
SHLIBFILE='$(SHLIBSONAME).$(MINOR)'

SHLIBCC='$(CC) $(CFLAGS) -fpic'
MKSHLIB_1='$(CC) $(LDFLAGS) -shared -Wl,-soname=$(SHLIBSONAME) -o'
MKSHLIB_2=''
MKSHLIB_3='-lc'

AC_OUTPUT(
	common.make settings.make Makefile
	src/Makefile client/Makefile dynamic/Makefile regress/Makefile
)
