1 dnl RRDtool AutoConf script ...
2 dnl ---------------------------
4 dnl Created by Jeff Allen, Tobi Oetiker, Blair Zajac
6 dnl Inspiration from http://autoconf-archive.cryp.to
8 dnl tell automake the this script is for rrdtool
9 AC_INIT([rrdtool],[1.2rc1])
12 AC_CONFIG_HEADERS([config.h])
14 dnl all our local stuff like install scripts and include files
18 dnl determine the type of system we are running on
23 dnl where we install our stuff ...
25 AC_PREFIX_DEFAULT( /opt/rrdtool-$PACKAGE_VERSION )
27 AC_PREFIX_DEFAULT( /usr/local/rrdtool-$PACKAGE_VERSION )
30 dnl Minimum Autoconf version required.
33 dnl At the TOP of the HEADER
39 /* IEEE can be prevented from raising signals with fpsetmask(0) */
40 #undef MUST_DISABLE_FPMASK
42 /* IEEE math only works if SIGFPE gets actively set to IGNORE */
44 #undef MUST_DISABLE_SIGFPE
46 /* realloc does not support NULL as argument */
47 #undef NO_NULL_REALLOC
53 /* define strrchr, strchr and memcpy, memmove in terms of bsd funcs
54 make sure you are NOT using bcopy, index or rindex in the code */
61 # define strrchr rindex
63 char *strchr (), *strrchr ();
65 # define memcpy(d, s, n) bcopy ((s), (d), (n))
66 # define memmove(d, s, n) bcopy ((s), (d), (n))
72 # define rrd_realloc(a,b) ( (a) == NULL ? malloc( (b) ) : realloc( (a) , (b) ))
74 # define rrd_realloc(a,b) realloc((a), (b))
90 # include <fp_class.h>
94 #if (! defined(HAVE_ISINF) && defined(HAVE_FPCLASS))
96 # define isinf(a) (fpclass(a) == FP_NINF || fpclass(a) == FP_PINF)
99 /* for OSF1 Digital Unix */
100 #if (! defined(HAVE_ISINF) && defined(HAVE_FP_CLASS) && defined(HAVE_FP_CLASS_H))
101 # define HAVE_ISINF 1
102 # define isinf(a) (fp_class(a) == FP_NEG_INF || fp_class(a) == FP_POS_INF)
105 #if (! defined(HAVE_ISINF) && defined(HAVE_FPCLASSIFY) && defined(FP_PLUS_INF) && defined(FP_MINUS_INF))
106 # define HAVE_ISINF 1
107 # define isinf(a) (fpclassify(a) == FP_MINUS_INF || fpclassify(a) == FP_PLUS_INF)
110 #if (! defined(HAVE_ISINF) && defined(HAVE_FPCLASSIFY) && defined(FP_INFINITE))
111 # define HAVE_ISINF 1
112 # define isinf(a) (fpclassify(a) == FP_INFINITE)
116 #if (! defined(HAVE_ISINF) && defined(HAVE_CLASS))
117 # define HAVE_ISINF 1
118 # define isinf(a) (class(a) == FP_MINUS_INF || class(a) == FP_PLUS_INF)
121 #if (! defined (HAVE_FINITE) && defined (HAVE_ISFINITE))
122 # define HAVE_FINITE 1
123 # define finite(a) isfinite(a)
126 #if (! defined(HAVE_FINITE) && defined(HAVE_ISNAN) && defined(HAVE_ISINF))
127 # define HAVE_FINITE 1
128 # define finite(a) (! isnan(a) && ! isinf(a))
132 #error "Can't compile without finite function"
136 #error "Can't compile without isinf function"
139 #endif /* CONFIG_H */
144 dnl Check for the compiler and static/shared library creation.
149 dnl Checks for header files.
152 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)
154 dnl Checks for typedefs, structures, and compiler characteristics.
159 dnl Checks for libraries.
160 AC_CHECK_FUNC(acos, , AC_CHECK_LIB(m, acos))
162 dnl add pic flag in any case this makes sure all our code is relocatable
163 eval `./libtool --config | grep pic_flag`
164 CFLAGS="$CFLAGS $pic_flag"
166 dnl Checks for library functions.
172 dnl for each function found we get a definition in config.h
173 dnl of the form HAVE_FUNCTION
175 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)
177 dnl Use mmap in rrd_update instead of seek+write
178 AC_ARG_ENABLE([mmap],
179 [ --disable-mmap disable mmap in rrd_update, use seek+write instead],
183 if test "x$enable_mmap" = xyes; then
187 dnl HP-UX 11.00 does not have finite but does have isfinite as a macro so we need
188 dnl actual code to check if this works
189 AC_CHECK_FUNCS(fpclassify, ,
190 [AC_MSG_CHECKING(for fpclassify with <math.h>)
191 AC_LINK_IFELSE([AC_LANG_PROGRAM([[#include <math.h>]], [[float f = 0.0; fpclassify(f)]])],[AC_MSG_RESULT(yes)
192 AC_DEFINE(HAVE_FPCLASSIFY)],[AC_MSG_RESULT(no)])])
193 AC_CHECK_FUNCS(finite, ,
194 [AC_CHECK_FUNCS(isfinite, ,
195 [AC_MSG_CHECKING(for isfinite with <math.h>)
196 AC_LINK_IFELSE([AC_LANG_PROGRAM([[#include <math.h>]], [[float f = 0.0; isfinite(f)]])],[AC_MSG_RESULT(yes)
197 AC_DEFINE(HAVE_ISFINITE)],[AC_MSG_RESULT(no)])])])
198 AC_CHECK_FUNCS(isinf, ,
199 [AC_MSG_CHECKING(for isinf with <math.h>)
200 AC_LINK_IFELSE([AC_LANG_PROGRAM([[#include <math.h>]], [[float f = 0.0; isinf(f)]])],[AC_MSG_RESULT(yes)
201 AC_DEFINE(HAVE_ISINF)],[AC_MSG_RESULT(no)])])
205 dnl How the vertical axis label is printed
206 AC_ARG_VAR(RRDGRAPH_YLEGEND_ANGLE,
207 [Vertical label angle: 90.0 (default) or 270.0])
208 AC_DEFINE_UNQUOTED(RRDGRAPH_YLEGEND_ANGLE,${RRDGRAPH_YLEGEND_ANGLE:-90.0},
209 [Vertical label angle: 90.0 (default) or 270.0])
212 AC_ARG_ENABLE(rrdcgi,[ --disable-rrdcgi disable building of rrdcgi],
213 [],[enable_rrdcgi=yes])
214 AM_CONDITIONAL(BUILD_RRDCGI,[test $enable_rrdcgi != no])
216 if test $enable_rrdcgi != no; then
217 EX_CHECK_ALL(cgi, cgiInit, cgi.h, cgilib, 0.5, http://www.infodrom.org/projects/cgilib, "")
219 EX_CHECK_ALL(art_lgpl_2, art_vpath_add_point, libart_lgpl/libart.h, libart-2.0, 2.3.17, ftp://ftp.gnome.org/pub/GNOME/sources/libart_lgpl/2.3/, /usr/include/libart-2.0)
220 EX_CHECK_ALL(z, zlibVersion, zlib.h, zlib, 1.2.1, http://www.gzip.org/zlib/, "")
221 EX_CHECK_ALL(png, png_access_version_number, png.h, libpng, 1.2.8, http://prdownloads.sourceforge.net/libpng/, "")
222 EX_CHECK_ALL(freetype, FT_Init_FreeType, ft2build.h, freetype2, 2.1.9, http://prdownloads.sourceforge.net/freetype/, /usr/include/freetype2)
224 if test "$EX_CHECK_ALL_ERR" = "YES"; then
225 AC_MSG_ERROR([Please fix the library issues listed above and try again.])
229 dnl solaris has some odd defines it needs in order to propperly compile ctime_r
230 AC_MSG_CHECKING([if ctime_r need special care to act posixly correct])
233 [[#include <time.h>]],
234 [[ctime_r(NULL,NULL,0)]]
236 [ CPPFLAGS="$CPPFLAGS -D_POSIX_PTHREAD_SEMANTICS"
239 [[#include <time.h>]],
240 [[ctime_r(NULL,NULL)]]
242 [AC_MSG_RESULT([yes, this seems to be solaris style])],
243 [AC_MSG_ERROR([Can't figure how to compile ctime_r])]
248 [[#include <time.h>]],
249 [[ctime_r(NULL,NULL)]]
251 [AC_MSG_RESULT(yes)],
252 [AC_MSG_ERROR([Can't figure how to compile ctime_r])]
258 dnl Check for pthreads
259 dnl http://autoconf-archive.cryp.to/acx_pthread.m4
261 AC_SUBST(MULTITHREAD_CFLAGS)
262 AC_SUBST(MULTITHREAD_LDFLAGS)
265 AC_ARG_ENABLE(pthread,[ --disable-pthread disable multithread support],
266 [],[enable_pthread=yes])
269 if test $enable_pthread != no; then
271 MULTITHREAD_CFLAGS=$PTHREAD_CFLAGS
272 MULTITHREAD_LDFLAGS=$PTHREAD_LIBS
277 dnl since we use lots of *_r functions all over the code we better
278 dnl make sure they are known
280 if test "x$x_rflag" != "xno"; then
281 CPPFLAGS="$CPPFLAGS $x_rflag"
285 AM_CONDITIONAL(BUILD_MULTITHREAD,[test $enable_pthread != no])
288 AC_PATH_PROG(PERL, perl, no)
289 if test "x$PERL" = "xno"; then
292 COMP_PERL="perl_piped perl_shared"
293 AC_MSG_CHECKING(for the perl version you are running)
294 PERL_VERSION=`$PERL -MConfig -e 'print $Config{version}'`
295 AC_MSG_RESULT($PERL_VERSION)
296 AC_MSG_CHECKING(for the C compiler perl wants to use to build its modules)
297 perlcc=`$PERL -MConfig -e 'print $Config{cc}'`
298 AC_MSG_RESULT($perlcc)
299 if test ! -x $perlcc; then
300 AC_PATH_PROG(PERLCC, ${perlcc}, no)
301 if test -x $"x$PERLCC" = "xno"; then
303 I would not find the Compiler ($perlcc) that was originally used to compile your
304 perl binary. You should either make sure that this compiler is available on your
305 system, or use a different perl setup that was compiled with $CC.
307 I will disable the compilation of the RRDs perl module.
309 COMP_PERL="perl_piped"
313 AC_MSG_CHECKING(Perl Modules to build)
314 AC_MSG_RESULT(${COMP_PERL:-No Perl Modules will be built})
316 # Options to pass when configuring perl module
317 PERL_MAKE_OPTIONS="PREFIX=$prefix LIB=$prefix/lib/perl/$PERL_VERSION"
319 dnl pass additional perl options when generating Makefile from Makefile.PL
320 AC_ARG_ENABLE(perl-site-install,
321 [ --enable-perl-site-install by default the rrdtool perl modules are installed
322 together with rrdtool in $prefix/lib/perl. You have to
323 put a 'use lib qw($prefix/lib/perl)' into your scripts
324 when you want to use them. When you set this option
325 the perl modules will get installed wherever
326 your perl setup thinks it is best.],
327 [PERL_MAKE_OPTIONS=],[])
329 AC_ARG_WITH(perl-options,
330 [ --with-perl-options=[OPTIONS] options to pass on command-line when
331 generating Makefile from Makefile.PL. If you set this
332 option, interesting things may happen unless you know
333 what you are doing!],
334 [PERL_MAKE_OPTIONS=$withval])
336 AC_SUBST(PERL_MAKE_OPTIONS)
339 AC_SUBST(PERL_VERSION)
344 AC_ARG_WITH(tcllib,[ --with-tcllib=DIR location of the tclConfig.sh])
346 AC_MSG_CHECKING(for tclConfig.sh in $withval)
347 if test -f "$withval/tclConfig.sh" ; then
348 tcl_config=$withval/tclConfig.sh
356 if test $found -eq 0 ; then
357 AC_MSG_WARN([tclConfig.sh not found - Tcl interface won't be built])
363 AM_CONDITIONAL(COMP_TCL, test x$found = x1 )
366 AC_SUBST(TCL_SHLIB_CFLAGS)
367 AC_SUBST(TCL_SHLIB_LD)
368 AC_SUBST(TCL_SHLIB_SUFFIX)
369 AC_SUBST(TCL_PACKAGE_PATH)
370 AC_SUBST(TCL_LD_SEARCH_FLAGS)
375 AC_PATH_PROGS(NROFF, gnroff nroff)
376 AC_PATH_PROGS(TROFF, groff troff)
378 dnl Does the compiler like -Wall and -pedantic?
379 if test "x$GCC" = "xyes"; then
381 CFLAGS="$CFLAGS -Wall -pedantic -Wshadow -Wpointer-arith -Wcast-align -Wmissing-prototypes -Wmissing-declarations -Wnested-externs -Winline -W"
382 AC_CACHE_CHECK(if we can use GCC-specific compiler options, rd_cv_gcc_opt,
383 [AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]], [[return 0 ]])],[rd_cv_gcc_opt=yes],[rd_cv_gcc_opt=no ])
386 if test $rd_cv_gcc_opt = no; then
391 dnl what does realloc do if it gets called with a NULL pointer
393 AC_CACHE_CHECK([if realloc can deal with NULL], rd_cv_null_realloc,
394 [AC_RUN_IFELSE([AC_LANG_SOURCE([[#include <stdlib.h>
398 if (x==NULL) return 1;
400 }]])],[rd_cv_null_realloc=yes],[rd_cv_null_realloc=nope],[:])])
402 if test x"$rd_cv_null_realloc" = xnope; then
403 AC_DEFINE(NO_NULL_REALLOC)
406 AC_CONFIG_FILES([examples/shared-demo.pl \
407 examples/piped-demo.pl \
408 examples/stripes.pl \
409 examples/bigtops.pl \
411 examples/cgi-demo.cgi \
412 examples/4charts.pl \
417 bindings/tcl/Makefile \
419 AC_CONFIG_COMMANDS([default],[[\
420 chmod +x examples/*.cgi examples/*.pl]],[[]])
424 AC_MSG_RESULT(and out again)
426 echo $ECHO_N "ordering CD from http://people.ee.ethz.ch/~oetiker/wish $ECHO_C" 1>&6
428 echo $ECHO_N ".$ECHO_C" 1>&6
430 echo $ECHO_N ".$ECHO_C" 1>&6
432 echo $ECHO_N ".$ECHO_C" 1>&6
434 echo $ECHO_N ".$ECHO_C" 1>&6
436 AC_MSG_RESULT([ just kidding ;-)])
438 echo "----------------------------------------------------------------"
439 echo "Config is DONE!"
441 echo " With MMAP IO: $ac_cv_func_mmap_fixed_mapped"
442 echo " Perl Modules: $COMP_PERL"
443 echo " Perl Binary: $PERL"
444 echo " Perl Version: $PERL_VERSION"
445 echo " Perl Options: $PERL_MAKE_OPTIONS"
446 echo " Tcl Config: $tcl_config"
447 echo " Build rrdcgi: $enable_rrdcgi"
448 echo " Build librrd MT: $enable_pthread"
451 echo "Type 'make' to compile the software and use 'make install' to "
452 echo "install everything to: $prefix."
454 echo " ... that wishlist is NO JOKE. If you find RRDtool useful"
455 echo "make me happy. Go to http://people.ee.ethz.ch/oetiker/wish and"
456 echo "place an order."
458 echo " -- Tobi Oetiker <tobi@oetiker.ch>"
459 echo "----------------------------------------------------------------"