1dnl Process this file with autoconf to produce a configure script.
2dnl $Id: configure.in,v 1.12 2017/08/16 13:47:27 bulkstream Exp $
3AC_INIT(main.c)
4AC_CONFIG_HEADER(config.h)
5AC_CANONICAL_TARGET
6
7case "$build_os" in
8  freebsd*)
9	OS=FREEBSD
10	AC_DEFINE(FREEBSD)
11	;;
12  solaris*)
13	OS=SOLARIS
14	AC_DEFINE(SOLARIS)
15	;;
16  linux*)
17	case "$host_cpu" in
18	  i*86|mips*|powerpc*|sparc*|x86_64*)
19	    OS=LINUX
20	    AC_DEFINE(LINUX)
21	    ;;
22        esac
23	;;
24  darwin*)
25	OS=MACOSX
26	AC_DEFINE(MACOSX)
27	;;
28esac
29
30CFLAGS="$CFLAGS -O2 -Wall"
31if test "$OS" = "LINUX"; then
32    CFLAGS="$CFLAGS -Wno-unused-result -Wno-unused-but-set-variable"
33fi
34dnl LDFLAGS="$LDFLAGS -s"
35
36dnl Local libralies.
37if test -d /usr/local/lib; then
38    LIBS="-L/usr/local/lib $LIBS"
39fi
40
41dnl Solaris 2.6 depends libbind.
42dnl libbind default installation base directory.
43LIBBIND="/usr/local/bind"
44
45dnl Checks for programs.
46GCC=yes
47AC_PROG_CC
48
49
50#dnl Checks for libraries.
51
52AC_ARG_WITH(libbind,
53[ --with-libbind[[=PATH]]		to use libbind.],
54libbind="$withval",
55libbind="no")
56if test "$libbind" = "yes"; then
57  if test -d "$LIBBIND/include"; then
58    CFLAGS="-I$LIBBIND/include $CFLAGS"
59  fi
60elif test "$libbind" != "no"; then
61  if test -d "$libbind"/lib; then
62    LIBS="-L${libbind}/lib $LIBS"
63  fi
64  if test -d "$libbind"/include; then
65    CFLAGS="-I${libbind}/include $CFLAGS"
66  fi
67fi
68
69if test "$OS" = "SOLARIS"; then
70  if test "$libbind" = "no"; then
71    AC_CHECK_LIB(socket, socket)
72  else
73    AC_CHECK_LIB(xnet, socket)
74  fi
75  AC_CHECK_LIB(nsl, getaddrinfo,,
76	if test "$libbind" != "no"; then
77	  AC_CHECK_LIB(bind_r, getaddrinfo,,
78	    AC_CHECK_LIB(bind, getaddrinfo,,
79	      AC_MSG_ERROR("required functions may not work", -1)))
80        else
81	  AC_MSG_ERROR("required functions may not work", -1)
82	fi
83      )
84fi
85
86AC_ARG_WITH(libwrap,
87[ --with-libwrap[[=PATH|yes|no]]	with tcp_wrapper access control.],
88libwrap="$withval",
89libwrap="yes")
90if test "$libwrap" != "no"; then
91   if test "$libwrap" != "yes"; then
92      if test -d "$libwrap"; then
93         LIBS="-L$libwrap $LIBS"
94      fi
95   fi
96   AC_CHECK_HEADER(tcpd.h, AC_DEFINE(HAVE_TCPD_H), tcpdh="no")
97   if test "$tcpdh" != "no"; then
98#      if test "$OS" = "LINUX" -o "$OS" = "SOLARIS"; then
99#          AC_MSG_CHECKING([for hosts_ctl in -lwrap])
100#          saveLIBS="$LIBS"
101#	  LIBS="-lwrap -lnsl $LIBS"
102#	  AC_COMPILE_IFELSE(
103#	      AC_LANG_PROGRAM([
104#[int allow_severity;]
105#[int deny_severity;]],
106#[[hosts_ctl();]]),
107#	AC_DEFINE(HAVE_LIBWRAP)
108#	AC_MSG_RESULT([yes]),
109#	LIBS="$saveLIBS"
110#	AC_MSG_RESULT([no]))
111#      else
112	  AC_CHECK_LIB(wrap, hosts_ctl)
113#      fi
114   fi
115fi
116
117AC_ARG_WITH(syslog-fac,
118[ --with-syslog-fac=FACILITY	syslog facility (LOG_DAEMON).],
119syslogfac="$withval",
120syslogfac="no")
121if test "$syslogfac" != "no"; then
122  if test "$syslogfac" != "yes"; then
123    AC_MSG_CHECKING([syslog facility is])
124    AC_MSG_RESULT("$withval")
125    echo "$withval" |grep "LOG_LOCAL" > /dev/null 2>&1
126    r=$?
127    if test $r -eq 0; then
128      AC_DEFINE_UNQUOTED(LOCAL_FAC, $withval)
129    else
130      AC_DEFINE_UNQUOTED(SYSLOG_FAC, $withval)
131    fi
132  fi
133fi
134
135AC_ARG_ENABLE(thread,
136[ --disable-thread		disable pthread feature.],
137thread="$enableval",
138thread="yes")
139if test "$thread" != "no"; then
140    AC_CHECK_HEADER(pthread.h, header_ok="yes", header_ok="no")
141    if test "$header_ok" = "yes"; then
142	AC_MSG_CHECKING([whether enabling thread])
143	save_CFLAGS="$CFLAGS";
144	if test "$OS" = "FREEBSD" -o "$OS" = "MACOSX"; then
145	    CFLAGS="$CFLAGS -pthread"
146	fi
147	save_LDFLAGS="$LDFLAGS"
148	if test "$OS" = "FREEBSD" -o "$OS" = "LINUX" -o "$OS" = "MACOSX"; then
149	    LDFLAGS="$LDFLAGS -pthread"
150	elif test "$OS" = "SOLARIS"; then
151	    LDFLAGS="$LDFLAGS -lpthread"
152	fi
153	AC_RUN_IFELSE([AC_LANG_SOURCE([
154[#include <pthread.h>
155void
156init_routine()
157{
158    return;
159}
160main()
161{
162    pthread_once_t once_control = PTHREAD_ONCE_INIT;
163    pthread_once(&once_control, &init_routine);
164    return(0);
165}]])],
166	AC_DEFINE(USE_THREAD) AC_MSG_RESULT([yes]),
167	CFLAGS="$save_CFLAGS"; LDFLAGS="$save_LDFLAGS"; AC_MSG_RESULT([no])
168	)
169    fi
170fi
171
172AC_CHECK_LIB(crypt, crypt)
173
174dnl Checks for header files.
175AC_HEADER_STDC
176AC_HEADER_SYS_WAIT
177AC_CHECK_HEADERS(fcntl.h sys/time.h limits.h syslog.h unistd.h\
178	sys/resource.h)
179
180dnl Checks for typedefs, structures, and compiler characteristics.
181AC_CHECK_TYPES(socklen_t,,,
182	[#include <sys/types.h>
183#include <sys/socket.h>])
184
185AC_CHECK_TYPES([u_int8_t, u_int16_t, u_int32_t, uint8_t, uint16_t, uint32_t],,,
186	[#include <sys/types.h>
187#include <netdb.h>])
188
189AC_HEADER_TIME
190
191AC_CHECK_MEMBER(struct sockaddr_dl.sdl_family,
192	[AC_DEFINE(HAVE_SOCKADDR_DL_STRUCT)],,
193	[#include <sys/types.h>
194#include <net/if_dl.h>])
195
196AC_CHECK_MEMBER(struct sockaddr.sa_len,
197	[AC_DEFINE(HAVE_SOCKADDR_SA_LEN)],,
198	[#include <sys/types.h>
199#include <sys/socket.h>])
200
201dnl Checks for library functions.
202AC_TYPE_SIGNAL
203AC_CHECK_FUNCS(\
204		select\
205		socket\
206		getaddrinfo\
207		getnameinfo\
208		freeaddrinfo\
209		)
210
211AC_OUTPUT(Makefile)
212
213dnl from acconfig.h
214AH_TEMPLATE([FREEBSD],
215	[Define if the build system is FreeBSD])
216AH_TEMPLATE([SOLARIS],
217	[Define if the build system is Solaris])
218AH_TEMPLATE([LINUX],
219	[Define if the build system is Linux])
220AH_TEMPLATE([MACOSX],
221	[Define if the build system is MacOSX])
222AH_TEMPLATE([HAVE_LIMITS_H],
223	[Define if you have the <limits.h> header file.])
224AH_TEMPLATE([HAVE_TCPD_H],
225	[Define if you have the <tcpd.h> header file.])
226AH_TEMPLATE([SYSLOG_FAC],
227	[Define if you indicate your favor syslog facility.])
228AH_TEMPLATE([LOCAL_FAC],
229	[Define if you indicate LOG_LOCALx syslog facility.])
230AH_TEMPLATE([USE_THREAD],
231	[Define if you build a POSIX threading version.])
232AH_TEMPLATE([HAVE_SOCKADDR_DL_STRUCT],
233	[Define if you have the sockaddr_dl structure.])
234AH_TEMPLATE([HAVE_SOCKADDR_SA_LEN],
235	[Define if `sa_len' is member of `struct sockaddr'.])
236