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.1.9901])
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 ...
24 AC_PREFIX_DEFAULT( /usr/local/rrdtool-$PACKAGE_VERSION )
26 dnl Minimum Autoconf version required.
29 dnl At the TOP of the HEADER
35 /* IEEE can be prevented from raising signals with fpsetmask(0) */
36 #undef MUST_DISABLE_FPMASK
38 /* IEEE math only works if SIGFPE gets actively set to IGNORE */
40 #undef MUST_DISABLE_SIGFPE
42 /* realloc does not support NULL as argument */
43 #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 Checks for libraries.
156 AC_CHECK_FUNC(acos, , AC_CHECK_LIB(m, acos))
158 dnl add pic flag in any case this makes sure all our code is relocatable
159 eval `./libtool --config | grep pic_flag`
160 CFLAGS="$CFLAGS $pic_flag"
162 dnl Checks for library functions.
168 dnl for each function found we get a definition in config.h
169 dnl of the form HAVE_FUNCTION
171 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)
173 dnl Use mmap in rrd_update instead of seek+write
174 AC_ARG_ENABLE([mmap],
175 [ --disable-mmap disable mmap in rrd_update, use seek+write instead],
179 if test "x$enable_mmap" = xyes; then
183 dnl HP-UX 11.00 does not have finite but does have isfinite as a macro so we need
184 dnl actual code to check if this works
185 AC_CHECK_FUNCS(fpclassify, ,
186 [AC_MSG_CHECKING(for fpclassify with <math.h>)
187 AC_LINK_IFELSE([AC_LANG_PROGRAM([[#include <math.h>]], [[float f = 0.0; fpclassify(f)]])],[AC_MSG_RESULT(yes)
188 AC_DEFINE(HAVE_FPCLASSIFY)],[AC_MSG_RESULT(no)])])
189 AC_CHECK_FUNCS(finite, ,
190 [AC_CHECK_FUNCS(isfinite, ,
191 [AC_MSG_CHECKING(for isfinite with <math.h>)
192 AC_LINK_IFELSE([AC_LANG_PROGRAM([[#include <math.h>]], [[float f = 0.0; isfinite(f)]])],[AC_MSG_RESULT(yes)
193 AC_DEFINE(HAVE_ISFINITE)],[AC_MSG_RESULT(no)])])])
194 AC_CHECK_FUNCS(isinf, ,
195 [AC_MSG_CHECKING(for isinf with <math.h>)
196 AC_LINK_IFELSE([AC_LANG_PROGRAM([[#include <math.h>]], [[float f = 0.0; isinf(f)]])],[AC_MSG_RESULT(yes)
197 AC_DEFINE(HAVE_ISINF)],[AC_MSG_RESULT(no)])])
201 dnl How the vertical axis label is printed
202 AC_ARG_VAR(RRDGRAPH_YLEGEND_ANGLE,
203 [Vertical label angle: 90.0 (default) or 270.0])
204 AC_DEFINE_UNQUOTED(RRDGRAPH_YLEGEND_ANGLE,${RRDGRAPH_YLEGEND_ANGLE:-90.0},
205 [Vertical label angle: 90.0 (default) or 270.0])
208 AC_ARG_ENABLE(rrdcgi,[ --disable-rrdcgi disable building of rrdcgi],
209 [],[enable_rrdcgi=yes])
210 AM_CONDITIONAL(BUILD_RRDCGI,[test $enable_rrdcgi != no])
212 if test $enable_rrdcgi != no; then
213 EX_CHECK_ALL(cgi, cgiInit, cgi.h, cgilib, 0.5, http://www.infodrom.org/projects/cgilib)
215 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/)
216 EX_CHECK_ALL(z, zlibVersion, zlib.h, zlib, 1.2.1, http://www.gzip.org/zlib/)
217 EX_CHECK_ALL(png, png_access_version_number, png.h, libpng, 1.2.8, http://prdownloads.sourceforge.net/libpng/)
218 EX_CHECK_ALL(freetype, FT_Init_FreeType, ft2build.h, freetype2, 2.1.9, http://prdownloads.sourceforge.net/freetype/)
220 if test "$EX_CHECK_ALL_ERR" = "YES"; then
221 AC_MSG_ERROR([Please fix the library issues listed above and try again.])
225 dnl solaris has some odd defines it needs in order to propperly compile ctime_r
226 AC_MSG_CHECKING([if ctime_r need special care to act posixly correct])
229 [[#include <time.h>]],
230 [[ctime_r(NULL,NULL,0)]]
232 [ CPPFLAGS="$CPPFLAGS -D_POSIX_PTHREAD_SEMANTICS"
235 [[#include <time.h>]],
236 [[ctime_r(NULL,NULL)]]
238 [AC_MSG_RESULT([yes, this seems to be solaris style])],
239 [AC_MSG_ERROR([Can't figure how to compile ctime_r])]
244 [[#include <time.h>]],
245 [[ctime_r(NULL,NULL)]]
247 [AC_MSG_RESULT(yes)],
248 [AC_MSG_ERROR([Can't figure how to compile ctime_r])]
254 dnl Check for pthreads
255 dnl http://autoconf-archive.cryp.to/acx_pthread.m4
257 AC_SUBST(MULTITHREAD_CFLAGS)
258 AC_SUBST(MULTITHREAD_LDFLAGS)
261 AC_ARG_ENABLE(pthread,[ --disable-pthread disable multithread support],
262 [],[enable_pthread=yes])
265 if test $enable_pthread != no; then
267 MULTITHREAD_CFLAGS=$PTHREAD_CFLAGS
268 MULTITHREAD_LDFLAGS=$PTHREAD_LIBS
273 dnl since we use lots of *_r functions all over the code we better
274 dnl make sure they are known
276 if test "x$x_rflag" != "xno"; then
277 CPPFLAGS="$CPPFLAGS $x_rflag"
281 AM_CONDITIONAL(BUILD_MULTITHREAD,[test $enable_pthread != no])
284 AC_PATH_PROG(PERL, perl, no)
285 if test "x$PERL" = "xno"; then
288 COMP_PERL="perl_piped perl_shared"
289 AC_MSG_CHECKING(for the perl version you are running)
290 PERL_VERSION=`$PERL -MConfig -e 'print $Config{version}'`
291 AC_MSG_RESULT($PERL_VERSION)
292 AC_MSG_CHECKING(for the C compiler perl wants to use to build its modules)
293 perlcc=`$PERL -MConfig -e 'print $Config{cc}'`
294 AC_MSG_RESULT($perlcc)
295 if test ! -x $perlcc; then
296 AC_PATH_PROG(PERLCC, ${perlcc}, no)
297 if test -x $"x$PERLCC" = "xno"; then
299 I would not find the Compiler ($perlcc) that was originally used to compile your
300 perl binary. You should either make sure that this compiler is available on your
301 system, or use a different perl setup that was compiled with $CC.
303 I will disable the compilation of the RRDs perl module.
305 COMP_PERL="perl_piped"
309 AC_MSG_CHECKING(Perl Modules to build)
310 AC_MSG_RESULT(${COMP_PERL:-No Perl Modules will be built})
312 # Options to pass when configuring perl module
313 PERL_MAKE_OPTIONS="PREFIX=$prefix LIB=$prefix/lib/perl/$PERL_VERSION"
315 dnl pass additional perl options when generating Makefile from Makefile.PL
316 AC_ARG_ENABLE(perl-site-install,
317 [ --enable-perl-site-install by default the rrdtool perl modules are installed
318 together with rrdtool in $prefix/lib/perl. You have to
319 put a 'use lib qw($prefix/lib/perl)' into your scripts
320 when you want to use them. When you set this option
321 the perl modules will get installed wherever
322 your perl setup thinks it is best.],
323 [PERL_MAKE_OPTIONS=],[])
325 AC_ARG_WITH(perl-options,
326 [ --with-perl-options=[OPTIONS] options to pass on command-line when
327 generating Makefile from Makefile.PL. If you set this
328 option, interesting things may happen unless you know
329 what you are doing!],
330 [PERL_MAKE_OPTIONS=$withval])
332 AC_SUBST(PERL_MAKE_OPTIONS)
335 AC_SUBST(PERL_VERSION)
340 AC_ARG_WITH(tcllib,[ --with-tcllib=DIR location of the tclConfig.sh])
342 AC_MSG_CHECKING(for tclConfig.sh in $withval)
343 if test -f "$withval/tclConfig.sh" ; then
344 tcl_config=$withval/tclConfig.sh
352 if test $found -eq 0 ; then
353 AC_MSG_WARN([tclConfig.sh not found - Tcl interface won't be built])
359 AM_CONDITIONAL(COMP_TCL, test x$found = x1 )
362 AC_SUBST(TCL_SHLIB_CFLAGS)
363 AC_SUBST(TCL_SHLIB_LD)
364 AC_SUBST(TCL_SHLIB_SUFFIX)
365 AC_SUBST(TCL_PACKAGE_PATH)
366 AC_SUBST(TCL_LD_SEARCH_FLAGS)
371 AC_PATH_PROGS(NROFF, gnroff nroff)
372 AC_PATH_PROGS(TROFF, groff troff)
374 dnl Does the compiler like -Wall and -pedantic?
375 if test "x$GCC" = "xyes"; then
377 CFLAGS="$CFLAGS -Wall -pedantic -Wshadow -Wpointer-arith -Wcast-align -Wmissing-prototypes -Wmissing-declarations -Wnested-externs -Winline -W"
378 AC_CACHE_CHECK(if we can use GCC-specific compiler options, rd_cv_gcc_opt,
379 [AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]], [[return 0 ]])],[rd_cv_gcc_opt=yes],[rd_cv_gcc_opt=no ])
382 if test $rd_cv_gcc_opt = no; then
387 dnl what does realloc do if it gets called with a NULL pointer
389 AC_CACHE_CHECK([if realloc can deal with NULL], rd_cv_null_realloc,
390 [AC_RUN_IFELSE([AC_LANG_SOURCE([[#include <stdlib.h>
394 if (x==NULL) return 1;
396 }]])],[rd_cv_null_realloc=yes],[rd_cv_null_realloc=nope],[:])])
398 if test x"$rd_cv_null_realloc" = xnope; then
399 AC_DEFINE(NO_NULL_REALLOC)
402 AC_CONFIG_FILES([examples/shared-demo.pl \
403 examples/piped-demo.pl \
404 examples/stripes.pl \
405 examples/bigtops.pl \
407 examples/cgi-demo.cgi \
408 examples/4charts.pl \
413 bindings/tcl/Makefile \
415 AC_CONFIG_COMMANDS([default],[[\
416 chmod +x examples/*.cgi examples/*.pl]],[[]])
420 AC_MSG_RESULT(and out again)
422 echo $ECHO_N "ordering CD from http://people.ee.ethz.ch/~oetiker/wish $ECHO_C" 1>&6
424 echo $ECHO_N ".$ECHO_C" 1>&6
426 echo $ECHO_N ".$ECHO_C" 1>&6
428 echo $ECHO_N ".$ECHO_C" 1>&6
430 echo $ECHO_N ".$ECHO_C" 1>&6
432 AC_MSG_RESULT([ just kidding ;-)])
434 echo "----------------------------------------------------------------"
435 echo "Config is DONE!"
437 echo "Type 'make' to compile the software and use 'make install' to "
438 echo "install everything to: $prefix."
440 echo "If you want to install the perl"
441 echo "modules in site-perl, try 'make site-perl-install'."
443 echo " ... that wishlist is NO JOKE. If you find RRDtool useful"
444 echo "make me happy. Go to http://people.ee.ethz.ch/~oetiker/wish and"
445 echo "place an order."
447 echo " -- Tobi Oetiker <tobi@oetiker.ch>"
448 echo "----------------------------------------------------------------"