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-1.1.0 )
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
48 /* define strrchr, strchr and memcpy, memmove in terms of bsd funcs
49 make sure you are NOT using bcopy, index or rindex in the code */
56 # define strrchr rindex
58 char *strchr (), *strrchr ();
60 # define memcpy(d, s, n) bcopy ((s), (d), (n))
61 # define memmove(d, s, n) bcopy ((s), (d), (n))
67 # define rrd_realloc(a,b) ( (a) == NULL ? malloc( (b) ) : realloc( (a) , (b) ))
69 # define rrd_realloc(a,b) realloc((a), (b))
85 # include <fp_class.h>
89 #if (! defined(HAVE_ISINF) && defined(HAVE_FPCLASS))
91 # define isinf(a) (fpclass(a) == FP_NINF || fpclass(a) == FP_PINF)
94 /* for OSF1 Digital Unix */
95 #if (! defined(HAVE_ISINF) && defined(HAVE_FP_CLASS) && defined(HAVE_FP_CLASS_H))
97 # define isinf(a) (fp_class(a) == FP_NEG_INF || fp_class(a) == FP_POS_INF)
100 #if (! defined(HAVE_ISINF) && defined(HAVE_FPCLASSIFY) && defined(FP_PLUS_INF) && defined(FP_MINUS_INF))
101 # define HAVE_ISINF 1
102 # define isinf(a) (fpclassify(a) == FP_MINUS_INF || fpclassify(a) == FP_PLUS_INF)
105 #if (! defined(HAVE_ISINF) && defined(HAVE_FPCLASSIFY) && defined(FP_INFINITE))
106 # define HAVE_ISINF 1
107 # define isinf(a) (fpclassify(a) == FP_INFINITE)
111 #if (! defined(HAVE_ISINF) && defined(HAVE_CLASS))
112 # define HAVE_ISINF 1
113 # define isinf(a) (class(a) == FP_MINUS_INF || class(a) == FP_PLUS_INF)
116 #if (! defined (HAVE_FINITE) && defined (HAVE_ISFINITE))
117 # define HAVE_FINITE 1
118 # define finite(a) isfinite(a)
121 #if (! defined(HAVE_FINITE) && defined(HAVE_ISNAN) && defined(HAVE_ISINF))
122 # define HAVE_FINITE 1
123 # define finite(a) (! isnan(a) && ! isinf(a))
127 #error "Can't compile without finite function"
131 #error "Can't compile without isinf function"
134 #endif /* CONFIG_H */
139 dnl Check for the compiler and static/shared library creation.
144 dnl Checks for header files.
147 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)
149 dnl Checks for typedefs, structures, and compiler characteristics.
154 dnl Checks for libraries.
155 AC_CHECK_FUNC(acos, , AC_CHECK_LIB(m, acos))
157 dnl add pic flag in any case this makes sure all our code is relocatable
158 eval `./libtool --config | grep pic_flag`
159 CFLAGS="$CFLAGS $pic_flag"
161 dnl Checks for library functions.
167 dnl for each function found we get a definition in config.h
168 dnl of the form HAVE_FUNCTION
170 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)
172 dnl HP-UX 11.00 does not have finite but does have isfinite as a macro so we need
173 dnl actual code to check if this works
174 AC_CHECK_FUNCS(fpclassify, ,
175 [AC_MSG_CHECKING(for fpclassify with <math.h>)
176 AC_LINK_IFELSE([AC_LANG_PROGRAM([[#include <math.h>]], [[float f = 0.0; fpclassify(f)]])],[AC_MSG_RESULT(yes)
177 AC_DEFINE(HAVE_FPCLASSIFY)],[AC_MSG_RESULT(no)])])
178 AC_CHECK_FUNCS(finite, ,
179 [AC_CHECK_FUNCS(isfinite, ,
180 [AC_MSG_CHECKING(for isfinite with <math.h>)
181 AC_LINK_IFELSE([AC_LANG_PROGRAM([[#include <math.h>]], [[float f = 0.0; isfinite(f)]])],[AC_MSG_RESULT(yes)
182 AC_DEFINE(HAVE_ISFINITE)],[AC_MSG_RESULT(no)])])])
183 AC_CHECK_FUNCS(isinf, ,
184 [AC_MSG_CHECKING(for isinf with <math.h>)
185 AC_LINK_IFELSE([AC_LANG_PROGRAM([[#include <math.h>]], [[float f = 0.0; isinf(f)]])],[AC_MSG_RESULT(yes)
186 AC_DEFINE(HAVE_ISINF)],[AC_MSG_RESULT(no)])])
190 dnl How the vertical axis label is printed
191 AC_ARG_VAR(RRDGRAPH_YLEGEND_ANGLE,
192 [Vertical label angle: 90.0 (default) or 270.0])
193 AC_DEFINE_UNQUOTED(RRDGRAPH_YLEGEND_ANGLE,${RRDGRAPH_YLEGEND_ANGLE:-90.0},
194 [Vertical label angle: 90.0 (default) or 270.0])
197 AC_ARG_ENABLE(rrdcgi,[ --disable-rrdcgi disable building of rrdcgi],
198 [],[enable_rrdcgi=yes])
199 AM_CONDITIONAL(BUILD_RRDCGI,[test $enable_rrdcgi != no])
201 if test $enable_rrdcgi != no; then
202 EX_CHECK_ALL(cgi, cgiInit, cgi.h, cgilib, 0.5, http://www.infodrom.org/projects/cgilib)
204 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/)
205 EX_CHECK_ALL(z, zlibVersion, zlib.h, zlib, 1.2.1, http://www.gzip.org/zlib/)
206 EX_CHECK_ALL(png, png_access_version_number, png.h, libpng, 1.2.8, http://prdownloads.sourceforge.net/libpng/)
207 EX_CHECK_ALL(freetype, FT_Init_FreeType, ft2build.h, freetype2, 2.1.9, http://prdownloads.sourceforge.net/freetype/)
209 if test "$EX_CHECK_ALL_ERR" = "YES"; then
210 AC_MSG_ERROR([Please fix the library issues listed above and try again.])
214 dnl solaris has some odd defines it needs in order to propperly compile ctime_r
215 AC_MSG_CHECKING([if ctime_r need special care to act posixly correct])
218 [[#include <time.h>]],
219 [[ctime_r(NULL,NULL,0)]]
221 [ CPPFLAGS="$CPPFLAGS -D_POSIX_PTHREAD_SEMANTICS"
224 [[#include <time.h>]],
225 [[ctime_r(NULL,NULL)]]
227 [AC_MSG_RESULT([yes, this seems to be solaris style])],
228 [AC_MSG_ERROR([Can't figure how to compile ctime_r])]
233 [[#include <time.h>]],
234 [[ctime_r(NULL,NULL)]]
236 [AC_MSG_RESULT(yes)],
237 [AC_MSG_ERROR([Can't figure how to compile ctime_r])]
243 dnl Check for pthreads
244 dnl http://autoconf-archive.cryp.to/acx_pthread.m4
246 AC_SUBST(MULTITHREAD_CFLAGS)
247 AC_SUBST(MULTITHREAD_LDFLAGS)
250 AC_ARG_ENABLE(pthread,[ --disable-pthread disable multithread support],
251 [],[enable_pthread=yes])
253 dnl since we use lots of *_r functions all over the code we better
254 dnl make sure they are known
256 if test "x$x_rflag" != "xno"; then
257 CPPFLAGS="$CPPFLAGS $x_rflag"
260 if test $enable_pthread != no; then
262 MULTITHREAD_CFLAGS=$PTHREAD_CFLAGS
263 MULTITHREAD_LDFLAGS=$PTHREAD_LIBS
270 AM_CONDITIONAL(BUILD_MULTITHREAD,[test $enable_pthread != no])
273 AC_PATH_PROG(PERL, perl, no)
274 if test "x$PERL" = "xno"; then
277 COMP_PERL="perl_piped perl_shared"
278 AC_MSG_CHECKING(for the perl version you are running)
279 PERL_VERSION=`$PERL -MConfig -e 'print $Config{version}'`
280 AC_MSG_RESULT($PERL_VERSION)
281 AC_MSG_CHECKING(for the C compiler perl wants to use to build its modules)
282 perlcc=`$PERL -MConfig -e 'print $Config{cc}'`
283 AC_MSG_RESULT($perlcc)
284 if test ! -x $perlcc; then
285 AC_PATH_PROG(PERLCC, ${perlcc}, no)
286 if test -x $"x$PERLCC" = "xno"; then
288 I would not find the Compiler ($perlcc) that was originally used to compile your
289 perl binary. You should either make sure that this compiler is available on your
290 system, or use a different perl setup that was compiled with $CC.
292 I will disable the compilation of the RRDs perl module.
294 COMP_PERL="perl_piped"
298 AC_MSG_CHECKING(Perl Modules to build)
299 AC_MSG_RESULT(${COMP_PERL:-No Perl Modules will be built})
301 # Options to pass when configuring perl module
302 PERL_MAKE_OPTIONS="PREFIX=$prefix LIB=$prefix/lib/perl/$PERL_VERSION"
304 dnl pass additional perl options when generating Makefile from Makefile.PL
305 AC_ARG_ENABLE(perl-site-install,
306 [ --enable-perl-site-install by default the rrdtool perl modules are installed
307 together with rrdtool in $prefix/lib/perl. You have to
308 put a 'use lib qw($prefix/lib/perl)' into your scripts
309 when you want to use them. When you set this option
310 the perl modules will get installed wherever
311 your perl setup thinks it is best.],
312 [PERL_MAKE_OPTIONS=],[])
314 AC_ARG_WITH(perl-options,
315 [ --with-perl-options=[OPTIONS] options to pass on command-line when
316 generating Makefile from Makefile.PL. If you set this
317 option, interesting things may happen unless you know
318 what you are doing!],
319 [PERL_MAKE_OPTIONS=$withval])
321 AC_SUBST(PERL_MAKE_OPTIONS)
324 AC_SUBST(PERL_VERSION)
328 AC_ARG_WITH(tcllib,[ --with-tcllib=DIR location of the tclConfig.sh])
330 AC_MSG_CHECKING(for tclConfig.sh in $withval)
331 if test -f "$withval/tclConfig.sh" ; then
332 tcl_config=$withval/tclConfig.sh
340 if test $found -eq 0 ; then
341 AC_MSG_WARN([tclConfig.sh not found - Tcl interface won't be built])
347 AM_CONDITIONAL(COMP_TCL, test x$found = x1 )
350 AC_SUBST(TCL_SHLIB_CFLAGS)
351 AC_SUBST(TCL_SHLIB_LD)
352 AC_SUBST(TCL_SHLIB_SUFFIX)
353 AC_SUBST(TCL_PACKAGE_PATH)
354 AC_SUBST(TCL_LD_SEARCH_FLAGS)
359 AC_PATH_PROGS(NROFF, gnroff nroff)
360 AC_PATH_PROGS(TROFF, groff troff)
362 dnl Does the compiler like -Wall and -pedantic?
363 if test "x$GCC" = "xyes"; then
365 CFLAGS="$CFLAGS -Wall -pedantic -Wshadow -Wpointer-arith -Wcast-align -Wmissing-prototypes -Wmissing-declarations -Wnested-externs -Winline -W"
366 AC_CACHE_CHECK(if we can use GCC-specific compiler options, rd_cv_gcc_opt,
367 [AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]], [[return 0 ]])],[rd_cv_gcc_opt=yes],[rd_cv_gcc_opt=no ])
370 if test $rd_cv_gcc_opt = no; then
375 dnl what does realloc do if it gets called with a NULL pointer
377 AC_CACHE_CHECK([if realloc can deal with NULL], rd_cv_null_realloc,
378 [AC_RUN_IFELSE([AC_LANG_SOURCE([[#include <stdlib.h>
382 if (x==NULL) return 1;
384 }]])],[rd_cv_null_realloc=yes],[rd_cv_null_realloc=nope],[:])])
386 if test x"$rd_cv_null_realloc" = xnope; then
387 AC_DEFINE(NO_NULL_REALLOC)
390 AC_CONFIG_FILES([examples/shared-demo.pl \
391 examples/piped-demo.pl \
392 examples/stripes.pl \
393 examples/bigtops.pl \
395 examples/cgi-demo.cgi \
396 examples/4charts.pl \
401 bindings/tcl/Makefile \
403 AC_CONFIG_COMMANDS([default],[[\
404 chmod +x examples/*.cgi examples/*.pl]],[[]])
408 AC_MSG_RESULT(and out again)
410 echo $ECHO_N "ordering CD from http://people.ee.ethz.ch/~oetiker/wish $ECHO_C" 1>&6
412 echo $ECHO_N ".$ECHO_C" 1>&6
414 echo $ECHO_N ".$ECHO_C" 1>&6
416 echo $ECHO_N ".$ECHO_C" 1>&6
418 echo $ECHO_N ".$ECHO_C" 1>&6
420 AC_MSG_RESULT([ just kidding ;-)])
422 echo "----------------------------------------------------------------"
423 echo "Config is DONE!"
425 echo "Type 'make' to compile the software and use 'make install' to "
426 echo "install everything to: $prefix."
428 echo "If you want to install the perl"
429 echo "modules in site-perl, try 'make site-perl-install'."
431 echo " ... that wishlist is NO JOKE. If you find RRDtool useful"
432 echo "make me happy. Go to http://people.ee.ethz.ch/~oetiker/wish and"
433 echo "place an order."
435 echo " -- Tobi Oetiker <tobi@oetiker.ch>"
436 echo "----------------------------------------------------------------"