1dnl Process this file with autoconf or autoreconf to produce a configure script.
2AC_INIT([sarg],[2.4.0])
3AC_CONFIG_SRCDIR([log.c])
4AC_CONFIG_AUX_DIR([cfgaux])
5AC_CONFIG_MACRO_DIR([m4])
6
7dnl We don't use automake but the following macro is required to
8dnl install "install-sh" that is required by configure.
9dnl I may be a bug in autoconf 2.69...
10dnl But if it is enabled, the AM_GNU_GETTEXT produce a warning!
11dnl The solution for now is to manually run automake -a before
12dnl running the configure script
13dnl AM_INIT_AUTOMAKE
14
15AC_CANONICAL_HOST
16
17AC_ARG_WITH(gcc,
18AS_HELP_STRING([--without-gcc],[use CC to compile]))
19
20test -n "$CC" && cc_specified=yes
21case ${with_gcc} in
22  yes ) CC=gcc ;;
23dnl yes ) CC=g++ ;;
24  no  ) CC=cc ;;
25  *   ) AC_PROG_CC;;
26dnl  *   ) AC_PROG_CXX ;;
27esac
28
29dnl The purpose of the following condition is unknown but it is obsolete as it is.
30dnl The -Aa option produces an error claiming that some argument are missing.
31dnl if test "${CC}" = "cc" ; then
32dnl    CFLAGS="${CFLAGS} -g -O2 -Aa"
33dnl fi
34
35dnl C99 support is required to define LLONG_MAX (at least on CentOS 5.7)
36AC_PROG_CC_C99
37
38# Report more warnings to improve code quality.
39CFLAGS="${CFLAGS} -Wall"
40
41dnl Check for supported compiler options
42
43AC_MSG_CHECKING([for extra warnings flag in $CC])
44saved_CFLAGS="${CFLAGS}"
45CFLAGS="${CFLAGS} -Wextra -Wno-unused-parameter"
46AC_COMPILE_IFELSE([AC_LANG_SOURCE([])],[have_extra_warnings="yes"],[have_extra_warnings="no"])
47AC_MSG_RESULT($have_extra_warnings)
48AS_IF([test "$have_extra_warnings" = "no"],[CFLAGS="${saved_CFLAGS}"])
49
50# Don't compare signs as it is a mess
51CFLAGS="${CFLAGS} -Wno-sign-compare"
52
53AC_MSG_CHECKING([for implicit-function-declaration error flag in $CC])
54saved_CFLAGS="${CFLAGS}"
55CFLAGS="${CFLAGS} -Werror=implicit-function-declaration"
56AC_COMPILE_IFELSE([AC_LANG_SOURCE([])],[have_implicit_function_declaration="yes"],[have_implicit_function_declaration="no"])
57AC_MSG_RESULT($have_implicit_function_declaration)
58AS_IF([test "$have_implicit_function_declaration" = "no"],[CFLAGS="${saved_CFLAGS}"])
59
60AC_MSG_CHECKING([for format error flag in $CC])
61saved_CFLAGS="${CFLAGS}"
62CFLAGS="${CFLAGS} -Werror=format"
63AC_COMPILE_IFELSE([AC_LANG_SOURCE([])],[have_error_format="yes"],[have_error_format="no"])
64AC_MSG_RESULT($have_error_format)
65AS_IF([test "$have_error_format" = "no"],[CFLAGS="${saved_CFLAGS}"])
66
67case "$host" in
68   *-solaris*)
69   LDFLAGS="${LDFLAGS} -lsocket -lnsl"
70   CFLAGS="-DSOLARIS ${CFLAGS}"
71   ;;
72esac
73
74#dnl Checks for programs.
75#AC_PROG_CC
76
77dnl Check for headers
78AC_HEADER_DIRENT
79AC_HEADER_STDC
80
81
82AC_CHECK_HEADERS(stdio.h stdlib.h string.h strings.h sys/time.h time.h unistd.h sys/dirent.h \
83		dirent.h sys/types.h sys/socket.h netdb.h arpa/inet.h netinet/in.h sys/stat.h \
84		ctype.h errno.h sys/resource.h sys/wait.h stdarg.h inttypes.h limits.h locale.h \
85		execinfo.h math.h libintl.h libgen.h stdbool.h getopt.h fcntl.h fnmatch.h \
86		winsock.h)
87
88AS_IF([test $ac_cv_header_getopt_h = "no"],[AC_MSG_ERROR("getopt.h is required to compile sarg")])
89
90# Build with gd
91AC_ARG_WITH([gd],
92	AS_HELP_STRING([--with-gd],[Compile with support for the graphical gd library]),
93	[],[with_gd=check])
94AS_IF([test "x$with_gd" != "xno"],
95[
96	AC_CHECK_HEADERS(gd.h gdfontl.h gdfontt.h gdfonts.h gdfontmb.h gdfontg.h)
97	AS_IF([test "x$ac_cv_header_gd_h" = "xyes"],
98	[
99		AC_CHECK_LIB(gd, gdImagePng,LIBS="-lgd ${LIBS}"; HAVE_GD_LIB="yes", HAVE_GD_LIB="")
100		AS_IF([test "x$HAVE_GD_LIB" != "xyes"],
101		[
102			AC_MSG_ERROR([libgd is required to compile sarg with gd])
103		])
104	],[
105		gd_status="not found"
106	])
107],[
108	gd_status="disabled"
109])
110
111# Build with LDAP
112AC_ARG_WITH([ldap],
113	AS_HELP_STRING([--with-ldap],[Compile with LDAP support]),
114	[],[with_ldap=check])
115AS_IF([test "x$with_ldap" != "xno"],
116[
117	AC_CHECK_HEADERS([ldap_cdefs.h] [ldap_features.h] [ldap.h],,break)
118	AS_IF([test "x$ac_cv_header_ldap_h" = "xyes"],
119	[
120		AC_CHECK_LIB(ldap, ldap_init,LIBS="-lldap ${LIBS}"; HAVE_LDAP="yes", HAVE_LDAP="")
121	],[
122		ldap_status="not found"
123	])
124],[
125	ldap_status="disabled"
126])
127
128# Build with iconv
129AC_ARG_WITH([iconv],
130	AS_HELP_STRING([--with-iconv],[Compile with support for iconv]),
131	[],[with_iconv=check])
132AS_IF([test "x$with_iconv" != "xno"],
133[
134	dnl Check for iconv
135	AM_ICONV
136	AS_IF([test -n "$LIBICONV"],[LIBS="$LIBS $LIBICONV"])
137	AC_CHECK_HEADERS(iconv.h)
138],[
139	AC_MSG_NOTICE([Not building with iconv as requested on the configuration command line])
140])
141
142# Build with pcre
143AC_ARG_WITH([pcre],
144	AS_HELP_STRING([--with-pcre],[Compile with support for the Perl Compatible Regular Expressions library]),
145	[],[with_pcre=check])
146AS_IF([test "x$with_pcre" != "xno"],
147[
148	AC_CHECK_HEADERS(pcre.h)
149	AS_IF([test "x$ac_cv_header_pcre_h" = "xyes"],
150	[
151		LIBS="$LIBS $(pcre-config --libs)"
152		CFLAGS="$CFLAGS $(pcre-config --cflags)"
153	],[
154		pcre_status="not found"
155	])
156],[
157	pcre_status="disabled"
158])
159
160# Build with file globbing
161AC_ARG_WITH([glob],
162	AS_HELP_STRING([--without-glob],[Ignore wildcards in file names]),
163	[],[with_glob=yes])
164AS_IF([test "x$with_glob" != "xno"],
165[
166	AC_CHECK_HEADERS([glob.h],[],
167	[
168		AS_IF([test "x$with_glob" != "xcheck"],
169		[
170			AC_MSG_FAILURE([glob.h not found (use --without-glob to compile without file globbing)])
171		])
172	])
173],[
174	glob_status="disabled"
175])
176
177# Build with zlib
178AC_ARG_WITH([zlib],
179	AS_HELP_STRING([--with-zlib],[Compile with support to decompress gz files]),
180	[],[with_zlib=check])
181AS_IF([test "x$with_zlib" != "xno" ],
182[
183	AC_CHECK_HEADERS(zlib.h)
184	AS_IF([test "x$ac_cv_header_zlib_h" = "xyes"],
185	[
186		AC_CHECK_LIB([z],[gzopen],
187		[
188			LIBS="-lz ${LIBS}"
189			HAVE_ZLIB_LIB="yes"
190		],[
191			HAVE_ZLIB_LIB=""
192		])
193		AS_IF([test "x$HAVE_ZLIB_LIB" != "xyes"],[AC_MSG_ERROR([zlib was not found])])
194	],[
195		zlib_status="not found"
196	])
197],[
198	zlib_status="disabled"
199])
200
201# Build with bzlib
202AC_ARG_WITH([bzlib],
203	AS_HELP_STRING([--with-bzlib],[Compile with support to decompress bz2 files]),
204	[],[with_bzlib=check])
205AS_IF([test "x$with_bzlib" != "xno" ],
206[
207	AC_CHECK_HEADERS(bzlib.h)
208	AS_IF([test "x$ac_cv_header_bzlib_h" = "xyes"],
209	[
210		AC_CHECK_LIB([bz2],[BZ2_bzReadOpen],
211		[
212			LIBS="-lbz2 ${LIBS}"
213			HAVE_BZLIB_LIB="yes"
214		],[
215			HAVE_BZLIB_LIB=""
216		])
217		AS_IF([test "x$HAVE_BZLIB_LIB" != "xyes"],[AC_MSG_ERROR([bzlib was not found])])
218	],[
219		bzlib_status="not found"
220	])
221],[
222	bzlib_status="disabled"
223])
224
225# Build with liblzma
226AC_ARG_WITH([liblzma],
227	AS_HELP_STRING([--with-liblzma],[Compile with support to decompress xz files]),
228	[],[with_liblzma=check])
229AS_IF([test "x$with_liblzma" != "xno" ],
230[
231	AC_CHECK_HEADERS(lzma.h)
232	AS_IF([test "x$ac_cv_header_lzma_h" = "xyes"],
233	[
234		AC_CHECK_LIB([lzma],[lzma_stream_decoder],
235		[
236			LIBS="-llzma ${LIBS}"
237			HAVE_LIBLZMA_LIB="yes"
238		],[
239			HAVE_LIBLZMA_LIB=""
240		])
241		AS_IF([test "x$HAVE_LIBLZMA_LIB" != "xyes"],[AC_MSG_ERROR([liblzma was not found])])
242	],[
243		liblzma_status="not found"
244	])
245],[
246	liblzma_status="disabled"
247])
248
249dnl Checks for typedefs, structures, and compiler characteristics.
250AC_C_CONST
251AC_STRUCT_TM
252
253# Change the gettext version according to the available version on your system.
254# It should not be necessary to change it unless you run autoreconf -fi.
255AM_GNU_GETTEXT_VERSION([0.18])
256AM_GNU_GETTEXT([external])
257
258AC_SYS_LARGEFILE
259
260# Check whether fopen64 is available and whether _LARGEFILE64_SOURCE
261# needs to be defined for it
262AC_MSG_CHECKING([for fopen64])
263AC_CACHE_VAL(bu_cv_have_fopen64,
264[noerror_CFLAGS=$CFLAGS
265 CFLAGS="$CFLAGS -Werror"
266 AC_LINK_IFELSE([AC_LANG_PROGRAM([[#include <stdio.h>]], [[FILE *f = fopen64 ("/tmp/foo","r");fclose(f);]])],[bu_cv_have_fopen64=yes],
267 [CFLAGS="$CFLAGS -D_LARGEFILE64_SOURCE"
268 AC_TRY_LINK([#include <stdio.h>], [FILE *f = fopen64 ("/tmp/foo","r");fclose(f);],
269bu_cv_have_fopen64="need -D_LARGEFILE64_SOURCE",
270 CFLAGS=$noerror_CFLAGS
271 AC_LINK_IFELSE([AC_LANG_PROGRAM([[#include <stdio.h>]], [[FILE *f = fopen64 ("/tmp/foo","r");fclose(f);]])],[bu_cv_have_fopen64="yes without -Werror"
272 werror_status="fail"],
273 [CFLAGS="$CFLAGS -D_LARGEFILE64_SOURCE"
274 AC_TRY_LINK([#include <stdio.h>], [FILE *f = fopen64 ("/tmp/foo","r");fclose(f);],
275bu_cv_have_fopen64="need -D_LARGEFILE64_SOURCE and no -Werror"
276werror_status="fail",
277bu_cv_have_fopen64=no)]))
278 ])
279 CFLAGS=$noerror_CFLAGS])
280AC_MSG_RESULT($bu_cv_have_fopen64)
281AS_IF([test "$bu_cv_have_fopen64" != no],
282[
283	AC_DEFINE([HAVE_FOPEN64],1,[Is fopen64 available?])
284	AS_IF([test "$bu_cv_have_fopen64" = "need -D_LARGEFILE64_SOURCE"],
285	[
286		AC_DEFINE([_LARGEFILE64_SOURCE],1,[Enable LFS])
287	])
288])
289
290dnl check for functions
291AC_CHECK_FUNCS(backtrace)
292AC_CHECK_FUNCS(symlink)
293AC_CHECK_FUNCS(lstat)
294AC_CHECK_FUNCS(getnameinfo)
295AC_CHECK_FUNCS(getaddrinfo)
296AC_CHECK_FUNCS(mkstemp)
297AC_CHECK_FUNCS(fnmatch)
298
299dnl check for structure members
300AC_CHECK_MEMBER([struct sockaddr_storage.ss_len],[AC_DEFINE([HAVE_SOCKADDR_SA_LEN],1,[ss_len in sockaddr_storage])])
301
302dnl windows require this library
303AS_IF([test $ac_cv_header_winsock_h = "yes"],
304[
305#   AC_CHECK_LIBS([ws2_32],[WSAGetLastError]) fails because of the __stdcall in the function prototype
306	LIBS="$LIBS -lws2_32"
307])
308
309dnl check for the rlim_t size
310AC_CHECK_SIZEOF(rlim_t,1,[#if HAVE_SYS_RESOURCE_H
311#include <sys/resource.h>
312#endif
313])
314AS_IF([test $ac_cv_sizeof_rlim_t = "4"],
315[
316	AC_DEFINE(RLIM_STRING, "%d", [Rlim string])
317],[test $ac_cv_sizeof_rlim_t = "8"],
318[
319	AC_DEFINE(RLIM_STRING, "%lli", [Rlim string])
320],[
321	AC_MSG_WARN([can not detect the size of your system rlim_t type])
322])
323
324dnl check for the long long int max constant
325AC_CHECK_DECL(LLONG_MAX,HAVE_LLONG_MAX="yes",HAVE_LLONG_MAX="no",[[#include <limits.h>]])
326AS_IF([test "x$ac_cv_have_decl_LLONG_MAX" != "xyes"],
327[
328	AC_MSG_ERROR([LLONG_MAX is not defined on your system.])
329])
330
331dnl Select sarg-php directory
332AC_ARG_ENABLE(sargphp,
333	AS_HELP_STRING([--enable-sargphp=sargphpdir],
334	[Select sargphpdir as the directory to install sarg-php into]),
335	[
336		AS_IF([test "$enableval" -a "x$enableval" != "xno"],[SARGPHPDIR=$enableval])
337	],[SARGPHPDIR="/var/www/html"])
338AS_IF([test "$SARGPHPDIR"],
339[
340	AC_MSG_NOTICE([using $SARGPHPDIR as the directory to install sarg-php])
341	AC_SUBST(SARGPHPDIR)
342])
343
344dnl Select fonts dir
345AC_ARG_ENABLE(fontdir,
346	AS_HELP_STRING([--enable-fontdir=fontdir],
347	[Select fontdir as the directory with the fonts to use in the reports]),
348	[
349		AS_IF([test "$enableval" -a "x$enableval" != "xno"],[FONTDIR=$enableval])
350	],[FONTDIR="${datarootdir}/sarg/fonts"])
351AS_IF([test "$FONTDIR"],
352[
353	AS_IF([test "x$prefix" = "xNONE"],
354	[
355		tempfullpath=`prefix=$ac_default_prefix ; eval "echo $FONTDIR"`
356	],[
357		tempfullpath=`eval "echo $FONTDIR"`
358	])
359	AC_MSG_NOTICE([using $tempfullpath as the directory of the fonts])
360	AC_SUBST(FONTDIR)
361])
362
363dnl Select images dir
364AC_ARG_ENABLE(imagedir,
365	AS_HELP_STRING([--enable-imagedir=imagedir],
366	[Select imagedir as the directory with the images to use in the reports]),
367	[
368		AS_IF([test "$enableval"],[IMAGEDIR=$enableval])
369	],[IMAGEDIR="${datarootdir}/sarg/images"])
370AS_IF([test "x$prefix" = "xNONE"],
371[
372	tempfullpath=`prefix=$ac_default_prefix ; eval "echo $IMAGEDIR"`
373],[
374	tempfullpath=`eval "echo $IMAGEDIR"`
375])
376AC_MSG_NOTICE([using $tempfullpath as the directory of the images])
377AC_SUBST(IMAGEDIR)
378
379dnl Enable extra compile and run time protection
380AC_ARG_ENABLE(extraprotection,
381	AS_HELP_STRING([--enable-extraprotection],
382	[Enable compile and runtime extra protections]),
383[
384	AS_IF([test "$enableval"],
385	[
386		# _FORTIFY_SOURCE may have been defined by the system. It must be undefined before it is changed to the value we want.
387		CFLAGS="${CFLAGS} -fstack-protector -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=2"
388		AS_IF([test "x$werror_status" != "xfail"],[CFLAGS="${CFLAGS} -Werror"])
389
390		AC_MSG_CHECKING([for format security flag in $CC])
391		saved_CFLAGS="${CFLAGS}"
392		CFLAGS="${CFLAGS} -Wformat -Werror=format-security"
393		AC_COMPILE_IFELSE([AC_LANG_SOURCE([])],[have_format_security="yes"],[have_format_security="no"])
394		AC_MSG_RESULT($have_format_security)
395		AS_IF([test "$have_format_security" = "no"],[CFLAGS="${saved_CFLAGS}"])
396
397		AC_MSG_CHECKING([for empty body flag in $CC])
398		saved_CFLAGS="${CFLAGS}"
399		CFLAGS="${CFLAGS} -Wempty-body"
400		AC_COMPILE_IFELSE([AC_LANG_SOURCE([])],[have_empty_body="yes"],[have_empty_body="no"])
401		AC_MSG_RESULT($have_empty_body)
402		AS_IF([test "$have_empty_body" = "no"],[CFLAGS="${saved_CFLAGS}"])
403	])
404])
405
406dnl Enable double check of the data written in the reports
407AC_ARG_ENABLE(doublecheck,
408	AS_HELP_STRING([--enable-doublecheck],
409	[Make sarg double check the data it manipulates and output a warning if an error is found]),
410[
411	AS_IF([test "$enableval"],
412	[
413		AC_DEFINE(ENABLE_DOUBLE_CHECK_DATA)
414	])
415])
416
417dnl Get the xsl stylesheet to produce the manpage
418AC_ARG_ENABLE(xsl-man,
419	AS_HELP_STRING([--enable-xsl-man=man-xsl-style-sheet],
420	[Select the directory containing the the XSL stylesheets to convert DocBook into man page]),
421[
422	AS_IF([test "$enableval"],
423	[
424		XSL_MAN_STYLESHEET=$enableval
425		AC_SUBST(XSL_MAN_STYLESHEET)
426	])
427],
428AC_CHECK_FILES([/usr/share/sgml/docbook/stylesheet/xsl/nwalsh/manpages/docbook.xsl],
429[
430	# debian
431	XSL_MAN_STYLESHEET="/usr/share/sgml/docbook/stylesheet/xsl/nwalsh/manpages/docbook.xsl"
432	AC_SUBST(XSL_MAN_STYLESHEET)
433],[
434	AC_CHECK_FILES([/usr/share/sgml/docbook/xsl-stylesheets/manpages/docbook.xsl],
435	[
436		# gentoo
437		XSL_MAN_STYLESHEET="/usr/share/sgml/docbook/xsl-stylesheets/manpages/docbook.xsl"
438		AC_SUBST(XSL_MAN_STYLESHEET)
439	])
440]))
441
442dnl Get the xsl stylesheet to produce the html page
443AC_ARG_ENABLE(xsl-html,
444	AS_HELP_STRING([--enable-xsl-html=html-xsl-style-sheet],
445	[Select the directory containing the the XSL stylesheets to convert DocBook into html page]),
446[
447	AS_IF([test "$enableval"],
448	[
449		XSL_HTML_STYLESHEET=$enableval
450		AC_SUBST(XSL_HTML_STYLESHEET)
451	])
452],
453AC_CHECK_FILES([/usr/share/sgml/docbook/stylesheet/xsl/docbook-xsl/html/onechunk.xsl],
454[
455	# debian
456	XSL_HTML_STYLESHEET="/usr/share/sgml/docbook/stylesheet/xsl/docbook-xsl/html/onechunk.xsl"
457	AC_SUBST(XSL_HTML_STYLESHEET)
458],
459[
460AC_CHECK_FILES([/usr/share/sgml/docbook/xsl-stylesheets/html/onechunk.xsl],
461[
462	# gentoo
463	XSL_HTML_STYLESHEET="/usr/share/sgml/docbook/xsl-stylesheets/html/onechunk.xsl"
464	AC_SUBST(XSL_HTML_STYLESHEET)
465])
466]))
467
468AC_SUBST(PACKAGE,"$PACKAGE_NAME")
469AC_SUBST(VERSION,"$PACKAGE_VERSION")
470
471AC_CONFIG_FILES([Makefile po/Makefile.in])
472AC_OUTPUT
473
474AS_IF([test "x$gd_status" = "xdisabled"],[
475	AC_MSG_NOTICE([Not building with gd as requested on the configuration command line])
476],[test "x$gd_status" = "xnot found"],[
477	AC_MSG_NOTICE([gd.h was not found so the graphs won't be available in the report])
478])
479
480AS_IF([test "x$pcre_status" = "xdisabled"],[
481	AC_MSG_NOTICE([Not building with pcre as requested on the configuration command line])
482],[test "x$pcre_status" = "xnot found"],[
483	AC_MSG_NOTICE([pcre.h was not found so the regexp won't be available in hostalias])
484])
485
486AS_IF([test "x$ldap_status" = "xdisabled"],[
487	AC_MSG_NOTICE([Not building with LDAP support as requested on the configuration command line])
488],[test "x$ldap_status" = "xnot found"],[
489	AC_MSG_NOTICE([ldap header files not found so LDAP is not available to resolve user's names])
490])
491
492AS_IF([test "x$glob_status" = "xdisabled"],[
493	AC_MSG_NOTICE([Not building with file globbing as requested on the configuration command line])
494])
495
496AS_IF([test "x$zlib_status" = "xdisabled"],[
497	AC_MSG_NOTICE([Not building with zlib as requested on the configuration command line])
498],[test "x$zlib_status" = "xnot found"],[
499	AC_MSG_NOTICE([zlib.h was not found so it won't be possible to process gzipped files])
500])
501
502AS_IF([test "x$bzlib_status" = "xdisabled"],[
503	AC_MSG_NOTICE([Not building with bzlib as requested on the configuration command line])
504],[test "x$bzlib_status" = "xnot found"],[
505	AC_MSG_NOTICE([bzlib.h was not found so it won't be possible to process bzipped files])
506])
507
508AS_IF([test "x$liblzma_status" = "xdisabled"],[
509	AC_MSG_NOTICE([Not building with liblzma as requested on the configuration command line])
510],[test "x$liblzma_status" = "xnot found"],[
511	AC_MSG_NOTICE([lzma.h was not found so it won't be possible to process xz files])
512])
513