1 dnl RRDtool AutoConf script ...
2 dnl ---------------------------
4 dnl Created by Jeff Allen, Tobi Oetiker, Blair Zajac
8 dnl tell automake the this script is for rrdtool
9 AC_INIT(src/rrd_tool.c)
10 AC_CONFIG_AUX_DIR(config)
11 AC_CANONICAL_TARGET([])
12 AM_INIT_AUTOMAKE(rrdtool, 1.1.0)
13 AM_CONFIG_HEADER(config.h)
15 dnl all our local stuff like install scripts and include files
19 dnl determine the type of system we are running on
24 dnl where we install our stuff ...
25 AC_PREFIX_DEFAULT( /usr/local/rrdtool-1.1.0 )
27 dnl Minimum Autoconf version required.
30 dnl At the TOP of the HEADER
36 /* IEEE can be prevented from raising signals with fpsetmask(0) */
37 #undef MUST_DISABLE_FPMASK
39 /* IEEE math only works if SIGFPE gets actively set to IGNORE */
41 #undef MUST_DISABLE_SIGFPE
43 /* realloc does not support NULL as argument */
44 #undef NO_NULL_REALLOC
49 /* define strrchr, strchr and memcpy, memmove in terms of bsd funcs
50 make sure you are NOT using bcopy, index or rindex in the code */
57 # define strrchr rindex
59 char *strchr (), *strrchr ();
61 # define memcpy(d, s, n) bcopy ((s), (d), (n))
62 # define memmove(d, s, n) bcopy ((s), (d), (n))
68 # define rrd_realloc(a,b) ( (a) == NULL ? malloc( (b) ) : realloc( (a) , (b) ))
70 # define rrd_realloc(a,b) realloc((a), (b))
86 # include <fp_class.h>
90 #if (! defined(HAVE_ISINF) && defined(HAVE_FPCLASS))
92 # define isinf(a) (fpclass(a) == FP_NINF || fpclass(a) == FP_PINF)
95 /* for OSF1 Digital Unix */
96 #if (! defined(HAVE_ISINF) && defined(HAVE_FP_CLASS) && defined(HAVE_FP_CLASS_H))
98 # define isinf(a) (fp_class(a) == FP_NEG_INF || fp_class(a) == FP_POS_INF)
101 #if (! defined(HAVE_ISINF) && defined(HAVE_FPCLASSIFY) && defined(FP_PLUS_INF) && defined(FP_MINUS_INF))
102 # define HAVE_ISINF 1
103 # define isinf(a) (fpclassify(a) == FP_MINUS_INF || fpclassify(a) == FP_PLUS_INF)
106 #if (! defined(HAVE_ISINF) && defined(HAVE_FPCLASSIFY) && defined(FP_INFINITE))
107 # define HAVE_ISINF 1
108 # define isinf(a) (fpclassify(a) == FP_INFINITE)
112 #if (! defined(HAVE_ISINF) && defined(HAVE_CLASS))
113 # define HAVE_ISINF 1
114 # define isinf(a) (class(a) == FP_MINUS_INF || class(a) == FP_PLUS_INF)
117 #if (! defined (HAVE_FINITE) && defined (HAVE_ISFINITE))
118 # define HAVE_FINITE 1
119 # define finite(a) isfinite(a)
122 #if (! defined(HAVE_FINITE) && defined(HAVE_ISNAN) && defined(HAVE_ISINF))
123 # define HAVE_FINITE 1
124 # define finite(a) (! isnan(a) && ! isinf(a))
128 #error "Can't compile without finite function"
132 #error "Can't compile without isinf function"
135 #endif /* CONFIG_H */
140 dnl Check for the compiler and static/shared library creation.
145 dnl Checks for header files.
148 AC_CHECK_HEADERS(sys/stat.h sys/types.h fcntl.h time.h locale.h fp_class.h malloc.h unistd.h ieeefp.h math.h sys/time.h sys/times.h sys/param.h sys/resource.h float.h)
150 dnl Checks for typedefs, structures, and compiler characteristics.
155 dnl substitute them in all the files listed in AC_OUTPUT
158 dnl Checks for libraries.
159 AC_CHECK_FUNC(acos, , AC_CHECK_LIB(m, acos))
161 AC_DEFUN(EX_CHECK_ALL,
162 [ AC_CHECK_LIB($1,$2,
163 [ AC_CHECK_HEADER($3,[LIBS="-l$1 ${LIBS}"],AC_MSG_ERROR([Adjust CPPFLAGS so that the $4 header $3 gets found])) ],
165 ############################################################################
166 I could not find a working copy of $4. Check config.log for hints on why
167 this is the case. Maybe you need to set LDFLAGS appropriately so that the
168 linker can find lib$1. If you have not installed $4, you can get it
169 either from its original home on
173 Or you can find an archive copy on
175 http://people.ee.ethz.ch/~oetiker/webtools/rrdtool/pub/libs
177 The last tested version of $4 is $5.
178 ############################################################################
183 EX_CHECK_ALL(cgi, cgiInit, cgi.h, cgilib, 0.5, http://www.infodrom.org/projects/cgilib)
184 EX_CHECK_ALL(art_lgpl_2, art_vpath_add_point, libart_lgpl/libart.h, libart_lgpl, 2.3.16, ftp://ftp.gnome.org/pub/GNOME/sources/libart_lgpl/2.3/)
185 EX_CHECK_ALL(z, zlibVersion, zlib.h, zlib, 1.2.1, http://www.gzip.org/zlib/)
186 EX_CHECK_ALL(png, png_access_version_number, png.h, libpng, 1.2.5, http://prdownloads.sourceforge.net/libpng/)
187 EX_CHECK_ALL(freetype, FT_Init_FreeType, ft2build.h, freetype, 2.1.5, http://prdownloads.sourceforge.net/freetype/)
190 AC_PATH_PROG(PERL, perl, no)
191 if test "x$PERL" = "xno"; then
194 COMP_PERL="perl_piped perl_shared"
195 AC_MSG_CHECKING(for shared library extension)
196 SO_EXT=`$PERL -e 'use Config; if (defined $Config{so} and $Config{so} ne 'a') {print "$Config{so}\n"} else {print "so\n"};'`
197 AC_MSG_RESULT($SO_EXT)
198 AC_MSG_CHECKING(for the C compiler perl wants to use to build its modules)
199 PROBLEMCC=`$PERL -e 'use Config; ($cc = $Config{cc}) =~ s/\s.*//; exit 0 if -x $cc; map {if (-x "$_/$cc"){exit 0}} split /:/, $ENV{PATH};print $Config{cc}'`
200 if test x$PROBLEMCC != x; then
202 echo Could not find the Compiler: '"'$PROBLEMCC'"'
203 echo which has been used to build perl. You may have to compile
204 echo your own copy of perl to make this work. Binary perls often
205 echo exhibit this problem
216 AC_ARG_WITH(tcllib,[ --with-tcllib=DIR location of the tclConfig.sh])
218 AC_MSG_CHECKING(for tclConfig.sh in $withval)
219 if test -f "$withval/tclConfig.sh" ; then
220 tcl_config=$withval/tclConfig.sh
228 if test $found -eq 0 ; then
229 AC_MSG_WARN([tclConfig.sh not found - Tcl interface won't be built])
234 dnl Pass additional perl options when generating Makefile from Makefile.PL
235 # Options to pass when configuring perl module
236 AC_ARG_WITH(perl-options,
237 [ --with-perl-options=[OPTIONS] options to pass on command-line when
238 generating Makefile from Makefile.PL],
239 [PERL_MAKE_OPTIONS=$withval])
240 AC_SUBST(PERL_MAKE_OPTIONS)
242 AM_CONDITIONAL(COMP_TCL, test x$found = x1 )
245 AC_SUBST(TCL_SHLIB_CFLAGS)
246 AC_SUBST(TCL_SHLIB_LD)
247 AC_SUBST(TCL_SHLIB_SUFFIX)
248 AC_SUBST(TCL_PACKAGE_PATH)
249 AC_SUBST(TCL_LD_SEARCH_FLAGS)
254 AC_PATH_PROGS(NROFF, gnroff nroff)
255 AC_PATH_PROGS(TROFF, groff troff)
257 dnl Does the compiler like -Wall and -pedantic?
258 if test "x$GCC" = "xyes"; then
260 CFLAGS="$CFLAGS -Wall -pedantic -Wshadow -Wpointer-arith -Wcast-align -Wmissing-prototypes -Wmissing-declarations -Wnested-externs -Winline -W"
261 AC_CACHE_CHECK(if we can use GCC-specific compiler options, rd_cv_gcc_opt,
262 [AC_TRY_COMPILE( , return 0 ,
267 if test $rd_cv_gcc_opt = no; then
272 dnl add pic flag in any case this makes sure all our code is relocatable
273 CFLAGS="$CFLAGS "`grep pic_flag= libtool | head -1|sed -e 's/.*pic_flag=//' -e 's/"//g'`
276 dnl it seems that hpux chockes on -fPIC for some reason
279 ZLIB_CFLAGS=`echo $CFLAGS|sed -e 's/-fPIC/-fpic/g'`
282 AC_SUBST(ZLIB_CFLAGS)
284 dnl Checks for library functions.
288 dnl for each function found we get a definition in config.h
289 dnl of the form HAVE_FUNCTION
291 AC_CHECK_FUNCS(tzset opendir readdir chdir chroot getuid setlocale strerror strerror_r snprintf vsnprintf fpclass class fp_class isnan memmove strchr mktime getrusage gettimeofday)
293 dnl HP-UX 11.00 does not have finite but does have isfinite as a macro
294 AC_CHECK_FUNCS(fpclassify, ,
295 [AC_MSG_CHECKING(for fpclassify with <math.h>)
296 AC_TRY_LINK([#include <math.h>], [float f = 0.0; fpclassify(f)],
298 AC_DEFINE(HAVE_FPCLASSIFY), AC_MSG_RESULT(no))])
299 AC_CHECK_FUNCS(finite, ,
300 [AC_CHECK_FUNCS(isfinite, ,
301 [AC_MSG_CHECKING(for isfinite with <math.h>)
302 AC_TRY_LINK([#include <math.h>], [float f = 0.0; isfinite(f)],
304 AC_DEFINE(HAVE_ISFINITE), AC_MSG_RESULT(no))])])
305 AC_CHECK_FUNCS(isinf, ,
306 [AC_MSG_CHECKING(for isinf with <math.h>)
307 AC_TRY_LINK([#include <math.h>], [float f = 0.0; isinf(f)],
309 AC_DEFINE(HAVE_ISINF), AC_MSG_RESULT(no))])
311 dnl what does realloc do if it gets called with a NULL pointer
313 AC_CACHE_CHECK([if realloc can deal with NULL], rd_cv_null_realloc,
314 [AC_TRY_RUN([#include <stdlib.h>
318 if (x==NULL) return 1;
321 [rd_cv_null_realloc=yes],[rd_cv_null_realloc=nope],:)])
323 if test x"$rd_cv_null_realloc" = xnope; then
324 AC_DEFINE(NO_NULL_REALLOC)
327 dnl determine how to get IEEE math working
328 dnl AC_IEEE(MESSAGE, set rd_cv_ieee_[var] variable, INCLUDES,
329 dnl FUNCTION-BODY, [ACTION-IF-FOUND [,ACTION-IF-NOT-FOUND]])
334 AC_MSG_CHECKING([if IEEE math works $1])
335 AC_CACHE_VAL([rd_cv_ieee_$2],
351 # include <fp_class.h>
355 #if (! defined(HAVE_ISINF) && defined(HAVE_FPCLASS))
356 # define HAVE_ISINF 1
357 # define isinf(a) (fpclass(a) == FP_NINF || fpclass(a) == FP_PINF)
361 #if (! defined(HAVE_ISINF) && defined(HAVE_FP_CLASS) && defined(HAVE_FP_CLASS_H))
362 # define HAVE_ISINF 1
363 # define isinf(a) (fp_class(a) == FP_NEG_INF || fp_class(a) == FP_POS_INF)
367 #if (! defined(HAVE_ISINF) && defined(HAVE_CLASS))
368 # define HAVE_ISINF 1
369 # define isinf(a) (class(a) == FP_MINUS_INF || class(a) == FP_PLUS_INF)
372 #if (! defined(HAVE_ISINF) && defined(HAVE_FPCLASSIFY) && defined(FP_PLUS_INF) && defined(FP_MINUS_INF))
373 # define HAVE_ISINF 1
374 # define isinf(a) (fpclassify(a) == FP_MINUS_INF || fpclassify(a) == FP_PLUS_INF)
377 #if (! defined(HAVE_ISINF) && defined(HAVE_FPCLASSIFY) && defined(FP_INFINITE))
378 # define HAVE_ISINF 1
379 # define isinf(a) (fpclassify(a) == FP_INFINITE)
384 double nan,inf,c,zero;
386 /* some math to see if we get a floating point exception */
387 zero=sin(0.0); /* don't let the compiler optimize us away */
388 nan=0.0/zero; /* especially here */
389 inf=1.0/zero; /* and here. I want to know if it can do the magic */
390 /* at run time without sig fpe */
393 if (! isnan(nan)) {printf ("not isnan(NaN) ... "); return 1;}
394 if (nan == nan) {printf ("nan == nan ... "); return 1;}
395 if (! isinf(inf)) {printf ("not isinf(oo) ... "); return 1;}
396 if (! isinf(-inf)) {printf ("not isinf(-oo) ... "); return 1;}
397 if (! inf > 0) {printf ("not inf > 0 ... "); return 1;}
398 if (! -inf < 0) {printf ("not -inf < 0 ... "); return 1;}
405 dnl these we run regardles is cached or not
406 if test x${rd_cv_ieee_$2} = "xyes"; then
417 AC_IEEE([out of the box], works, , , ,
418 [CFLAGS="$_cflags -ieee"
419 AC_IEEE([with the -ieee switch], switch, , , ,
420 [CFLAGS="$_cflags -qfloat=nofold"
421 AC_IEEE([with the -qfloat=nofold switch], nofold, , , ,
422 [CFLAGS="$_cflags -w -qflttrap=enable:zerodivide"
423 AC_IEEE([with the -w -qflttrap=enable:zerodivide], flttrap, , , ,
424 [CFLAGS="$_cflags -mieee"
425 AC_IEEE([with the -mieee switch], mswitch, , , ,
426 [CFLAGS="$_cflags -q float=rndsngl"
427 AC_IEEE([with the -q float=rndsngl switch], qswitch, , , ,
428 [CFLAGS="$_cflags -OPT:IEEE_NaN_inf=ON"
429 AC_IEEE([with the -OPT:IEEE_NaN_inf=ON switch], ieeenaninfswitch, , , ,
430 [CFLAGS="$_cflags -OPT:IEEE_comparisons=ON"
431 AC_IEEE([with the -OPT:IEEE_comparisons=ON switch], ieeecmpswitch, , , ,
433 AC_IEEE([with fpsetmask(0)], mask,
434 [#include <floatingpoint.h>], [fpsetmask(0)],
435 [AC_DEFINE(MUST_DISABLE_FPMASK)
436 PERLFLAGS="CCFLAGS=-DMUST_DISABLE_FPMASK"],
437 [AC_IEEE([with signal(SIGFPE,SIG_IGN)], sigfpe,
438 [#include <signal.h>], [signal(SIGFPE,SIG_IGN)],
439 [AC_DEFINE(MUST_DISABLE_SIGFPE)
440 PERLFLAGS="CCFLAGS=-DMUST_DISABLE_SIGFPE"],
442 Your Compiler does not do propper IEEE math ... Please find out how to
443 make IEEE math work with your compiler and let me know (oetiker@ee.ethz.ch).
444 Check config.log to see what went wrong ...
445 ]))])])])])])])])])])
448 AC_CONFIG_FILES([examples/shared-demo.pl \
449 examples/piped-demo.pl \
450 examples/stripes.pl \
451 examples/bigtops.pl \
453 examples/cgi-demo.cgi \
458 bindings/tcl/Makefile \
460 AC_CONFIG_COMMANDS([default],[[\
461 chmod +x examples/*.cgi examples/*.pl]],[[]])
465 AC_MSG_RESULT(and out again)
467 echo $ECHO_N "ordering CD from http://people.ee.ethz.ch/~oetiker/wish $ECHO_C" 1>&6
469 echo $ECHO_N ".$ECHO_C" 1>&6
471 echo $ECHO_N ".$ECHO_C" 1>&6
473 echo $ECHO_N ".$ECHO_C" 1>&6
475 echo $ECHO_N ".$ECHO_C" 1>&6
477 AC_MSG_RESULT([ just kidding ;-)])
479 echo "----------------------------------------------------------------"
480 echo "Config is DONE!"
482 echo "Type 'make' to compile the software and use 'make install' to "
483 echo "install everything to: $prefix."
485 echo "If you want to install the perl"
486 echo "modules in site-perl, try 'make site-perl-install'."
488 echo " ... that wishlist is NO JOKE. If you find RRDtool useful"
489 echo "make me happy. Go to http://people.ee.ethz.ch/~oetiker/wish and"
490 echo "place an order."
492 echo " -- Tobi Oetiker <tobi@oetiker.ch>"
493 echo "----------------------------------------------------------------"