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 substitute them in all the files listed in AC_OUTPUT
157 dnl Checks for libraries.
158 AC_CHECK_FUNC(acos, , AC_CHECK_LIB(m, acos))
160 dnl add pic flag in any case this makes sure all our code is relocatable
161 eval `./libtool --config | grep pic_flag`
162 CFLAGS="$CFLAGS $pic_flag"
164 dnl Checks for library functions.
170 dnl for each function found we get a definition in config.h
171 dnl of the form HAVE_FUNCTION
173 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)
175 dnl HP-UX 11.00 does not have finite but does have isfinite as a macro so we need
176 dnl actual code to check if this works
177 AC_CHECK_FUNCS(fpclassify, ,
178 [AC_MSG_CHECKING(for fpclassify with <math.h>)
179 AC_LINK_IFELSE([AC_LANG_PROGRAM([[#include <math.h>]], [[float f = 0.0; fpclassify(f)]])],[AC_MSG_RESULT(yes)
180 AC_DEFINE(HAVE_FPCLASSIFY)],[AC_MSG_RESULT(no)])])
181 AC_CHECK_FUNCS(finite, ,
182 [AC_CHECK_FUNCS(isfinite, ,
183 [AC_MSG_CHECKING(for isfinite with <math.h>)
184 AC_LINK_IFELSE([AC_LANG_PROGRAM([[#include <math.h>]], [[float f = 0.0; isfinite(f)]])],[AC_MSG_RESULT(yes)
185 AC_DEFINE(HAVE_ISFINITE)],[AC_MSG_RESULT(no)])])])
186 AC_CHECK_FUNCS(isinf, ,
187 [AC_MSG_CHECKING(for isinf with <math.h>)
188 AC_LINK_IFELSE([AC_LANG_PROGRAM([[#include <math.h>]], [[float f = 0.0; isinf(f)]])],[AC_MSG_RESULT(yes)
189 AC_DEFINE(HAVE_ISINF)],[AC_MSG_RESULT(no)])])
193 dnl How the vertical axis label is printed
194 AC_ARG_VAR(RRDGRAPH_YLEGEND_ANGLE,
195 [Vertical label angle: 90.0 (default) or 270.0])
196 AC_DEFINE_UNQUOTED(RRDGRAPH_YLEGEND_ANGLE,${RRDGRAPH_YLEGEND_ANGLE:-90.0},
197 [Vertical label angle: 90.0 (default) or 270.0])
200 AC_ARG_ENABLE(rrdcgi,[ --disable-rrdcgi disable building of rrdcgi],
201 [],[enable_rrdcgi=yes])
202 AM_CONDITIONAL(BUILD_RRDCGI,[test $enable_rrdcgi != no])
204 if test $enable_rrdcgi != no; then
205 EX_CHECK_ALL(cgi, cgiInit, cgi.h, cgilib, 0.5, http://www.infodrom.org/projects/cgilib)
207 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/)
208 EX_CHECK_ALL(z, zlibVersion, zlib.h, zlib, 1.2.1, http://www.gzip.org/zlib/)
209 EX_CHECK_ALL(png, png_access_version_number, png.h, libpng, 1.2.8, http://prdownloads.sourceforge.net/libpng/)
210 EX_CHECK_ALL(freetype, FT_Init_FreeType, ft2build.h, freetype2, 2.1.9, http://prdownloads.sourceforge.net/freetype/)
212 if test "$EX_CHECK_ALL_ERR" = "YES"; then
213 AC_MSG_ERROR([Please fix the library issues listed above and try again.])
217 dnl solaris has some odd define it need in order to propperly compile ctime_r
218 AC_MSG_CHECKING([if ctime_r need special care to act posixly correct])
221 [[#include <time.h>]],
222 [[ctime_r(NULL,NULL,0)]]
224 [ CPPFLAGS="$CPPFLAGS -D_POSIX_PTHREAD_SEMANTICS"
227 [[#include <time.h>]],
228 [[ctime_r(NULL,NULL)]]
230 [AC_MSG_RESULT([yes, this seems to be solaris style])],
231 [AC_MSG_ERROR([Can't figure how to compile ctime_r])]
236 [[#include <time.h>]],
237 [[ctime_r(NULL,NULL)]]
239 [AC_MSG_RESULT(yes)],
240 [AC_MSG_ERROR([Can't figure how to compile ctime_r])]
246 dnl Check for pthreads
247 dnl http://autoconf-archive.cryp.to/acx_pthread.m4
249 AC_SUBST(MULTITHREAD_CFLAGS)
250 AC_SUBST(MULTITHREAD_LDFLAGS)
253 AC_ARG_ENABLE(pthread,[ --disable-pthread disable multithread support],
254 [],[enable_pthread=yes])
256 if test $enable_pthread != no; then
258 MULTITHREAD_CFLAGS=$PTHREAD_CFLAGS
259 MULTITHREAD_LDFLAGS=$PTHREAD_LIBS
266 AM_CONDITIONAL(BUILD_MULTITHREAD,[test $enable_pthread != no])
269 AC_PATH_PROG(PERL, perl, no)
270 if test "x$PERL" = "xno"; then
273 COMP_PERL="perl_piped perl_shared"
274 AC_MSG_CHECKING(for shared library extension)
275 SO_EXT=`$PERL -e 'use Config; if (defined $Config{so} and $Config{so} ne 'a') {print "$Config{so}\n"} else {print "so\n"};'`
276 AC_MSG_RESULT($SO_EXT)
277 AC_MSG_CHECKING(for the C compiler perl wants to use to build its modules)
278 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}'`
279 if test x$PROBLEMCC != x; then
281 echo Could not find the Compiler: '"'$PROBLEMCC'"'
282 echo which has been used to build perl. You may have to compile
283 echo your own copy of perl to make this work. Binary perls often
284 echo exhibit this problem
295 AC_ARG_WITH(tcllib,[ --with-tcllib=DIR location of the tclConfig.sh])
297 AC_MSG_CHECKING(for tclConfig.sh in $withval)
298 if test -f "$withval/tclConfig.sh" ; then
299 tcl_config=$withval/tclConfig.sh
307 if test $found -eq 0 ; then
308 AC_MSG_WARN([tclConfig.sh not found - Tcl interface won't be built])
313 dnl Pass additional perl options when generating Makefile from Makefile.PL
314 # Options to pass when configuring perl module
315 AC_ARG_WITH(perl-options,
316 [ --with-perl-options=[OPTIONS] options to pass on command-line when
317 generating Makefile from Makefile.PL],
318 [PERL_MAKE_OPTIONS=$withval])
319 AC_SUBST(PERL_MAKE_OPTIONS)
321 AM_CONDITIONAL(COMP_TCL, test x$found = x1 )
324 AC_SUBST(TCL_SHLIB_CFLAGS)
325 AC_SUBST(TCL_SHLIB_LD)
326 AC_SUBST(TCL_SHLIB_SUFFIX)
327 AC_SUBST(TCL_PACKAGE_PATH)
328 AC_SUBST(TCL_LD_SEARCH_FLAGS)
333 AC_PATH_PROGS(NROFF, gnroff nroff)
334 AC_PATH_PROGS(TROFF, groff troff)
336 dnl Does the compiler like -Wall and -pedantic?
337 if test "x$GCC" = "xyes"; then
339 CFLAGS="$CFLAGS -Wall -pedantic -Wshadow -Wpointer-arith -Wcast-align -Wmissing-prototypes -Wmissing-declarations -Wnested-externs -Winline -W"
340 AC_CACHE_CHECK(if we can use GCC-specific compiler options, rd_cv_gcc_opt,
341 [AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]], [[return 0 ]])],[rd_cv_gcc_opt=yes],[rd_cv_gcc_opt=no ])
344 if test $rd_cv_gcc_opt = no; then
349 dnl what does realloc do if it gets called with a NULL pointer
351 AC_CACHE_CHECK([if realloc can deal with NULL], rd_cv_null_realloc,
352 [AC_RUN_IFELSE([AC_LANG_SOURCE([[#include <stdlib.h>
356 if (x==NULL) return 1;
358 }]])],[rd_cv_null_realloc=yes],[rd_cv_null_realloc=nope],[:])])
360 if test x"$rd_cv_null_realloc" = xnope; then
361 AC_DEFINE(NO_NULL_REALLOC)
364 AC_CONFIG_FILES([examples/shared-demo.pl \
365 examples/piped-demo.pl \
366 examples/stripes.pl \
367 examples/bigtops.pl \
369 examples/cgi-demo.cgi \
370 examples/4charts.pl \
375 bindings/tcl/Makefile \
377 AC_CONFIG_COMMANDS([default],[[\
378 chmod +x examples/*.cgi examples/*.pl]],[[]])
382 AC_MSG_RESULT(and out again)
384 echo $ECHO_N "ordering CD from http://people.ee.ethz.ch/~oetiker/wish $ECHO_C" 1>&6
386 echo $ECHO_N ".$ECHO_C" 1>&6
388 echo $ECHO_N ".$ECHO_C" 1>&6
390 echo $ECHO_N ".$ECHO_C" 1>&6
392 echo $ECHO_N ".$ECHO_C" 1>&6
394 AC_MSG_RESULT([ just kidding ;-)])
396 echo "----------------------------------------------------------------"
397 echo "Config is DONE!"
399 echo "Type 'make' to compile the software and use 'make install' to "
400 echo "install everything to: $prefix."
402 echo "If you want to install the perl"
403 echo "modules in site-perl, try 'make site-perl-install'."
405 echo " ... that wishlist is NO JOKE. If you find RRDtool useful"
406 echo "make me happy. Go to http://people.ee.ethz.ch/~oetiker/wish and"
407 echo "place an order."
409 echo " -- Tobi Oetiker <tobi@oetiker.ch>"
410 echo "----------------------------------------------------------------"