Code

The tcl binding supports tcl < 8.5, too.
[pkg-rrdtool.git] / configure.ac
1 dnl RRDtool AutoConf script ... 
2 dnl ---------------------------
3 dnl $Id: configure.ac 2267 2012-01-24 10:08:48Z oetiker $
4 dnl
5 dnl Created by Jeff Allen, Tobi Oetiker, Blair Zajac
6 dnl
7 dnl Inspiration from http://autoconf-archive.cryp.to
8  
9 dnl tell automake the this script is for rrdtool
11 dnl Minimum Autoconf version required.
12 AC_PREREQ(2.59)
14 dnl the official version number is
15 dnl a.b.c
16 AC_INIT([rrdtool],[1.4.7])
18 dnl for testing a numberical version number comes handy
19 dnl the released version are
20 dnl a.bccc
21 dnl the devel versions will be something like
22 dnl a.b999yymmddhh 
23 NUMVERS=1.4007
24 AC_SUBST(NUMVERS)
26 dnl for the linker to understand which versions the library are compatible with
27 dnl each other we must keep a separate library version cout of the format c:r:a.
28 dnl - if only implementation changed but all interfaces are kept, do r++
29 dnl - if only functionality was added do c++,r=0,a++
30 dnl - if any functionality was removed do c++,r=0,a=0.
31 dnl
32 dnl see http://sourceware.org/autobook/autobook/autobook_91.html
33 dnl 
34 LIBVERS=6:0:2
35 AC_SUBST(LIBVERS)
37 AC_CANONICAL_TARGET
38 m4_version_prereq(2.60, [AC_USE_SYSTEM_EXTENSIONS], [#])
39 AM_INIT_AUTOMAKE
40 AM_MAINTAINER_MODE
41 # Enable silent build rules by default, requires at least
42 # Automake-1.11. Disable by either passing --disable-silent-rules to
43 # configure or passing V=1 to make
44 m4_ifdef([AM_SILENT_RULES], [AM_SILENT_RULES([yes])])
45 AC_CONFIG_HEADERS([rrd_config.h])
46 AC_CONFIG_MACRO_DIR([m4])
48 dnl all our local stuff like install scripts and include files
49 dnl is in there
52 dnl determine the type of system we are running on
54 AC_SUBST(VERSION)
56 AC_PREFIX_DEFAULT( /opt/rrdtool-$PACKAGE_VERSION )
58 dnl At the TOP of the HEADER
60 AH_TOP([
61 #ifndef RRD_CONFIG_H
62 #define RRD_CONFIG_H
64 /* IEEE can be prevented from raising signals with fpsetmask(0) */
65 #undef MUST_DISABLE_FPMASK
67 /* IEEE math only works if SIGFPE gets actively set to IGNORE */
68 #undef MUST_DISABLE_SIGFPE
70 /* realloc does not support NULL as argument */
71 #undef NO_NULL_REALLOC
73 /* lets enable madvise defines in NetBSD */ 
74 #if defined(__NetBSD__)
75 # if !defined(_NETBSD_SOURCE)
76 #  define _NETBSD_SOURCE
77 # endif
78 #endif
80 ])
82 AH_BOTTOM([
84 #ifdef MUST_HAVE_MALLOC_MALLOC_H
85 #  include <malloc/malloc.h>
86 #endif
88 #include "src/rrd_config_bottom.h"
90 #endif
91 ])
93 dnl Process Special Options
94 dnl -----------------------------------
96 dnl How the vertical axis label is printed
97 AC_ARG_VAR(RRDGRAPH_YLEGEND_ANGLE, 
98  [Vertical label angle: -90.0 (default) or 90.0])
99 AC_DEFINE_UNQUOTED(RRDGRAPH_YLEGEND_ANGLE,${RRDGRAPH_YLEGEND_ANGLE:-90.0},
100  [Vertical label angle: -90.0 (default) or 90.0])
102 AC_ARG_ENABLE(rrdcgi,AS_HELP_STRING([--disable-rrdcgi],[disable building of rrdcgi]),
103 [],[enable_rrdcgi=yes])
105 AM_CONDITIONAL(BUILD_RRDCGI,[test $enable_rrdcgi != no])
107 AC_ARG_ENABLE(rrd_graph,AS_HELP_STRING([--disable-rrd_graph],[disable all rrd_graph functions]),
108 [enable_rrdcgi=no],[enable_rrd_graph=yes])
110 if test $enable_rrd_graph != no; then
111  AC_DEFINE([HAVE_RRD_GRAPH], [], [is rrd_graph supported by this install])
112 fi
114 dnl Check if we run on a system that has fonts
115 AC_ARG_WITH(rrd-default-font,
116 [  --with-rrd-default-font=[OPTIONS]  set the full path to your default font.],
117 [RRD_DEFAULT_FONT=$withval],[
118   if test -d ${WINDIR:-nodir}/cour.ttf ; then
119         RRD_DEFAULT_FONT=`cd $WINDIR;pwd`/cour.ttf
120   else
121         RRD_DEFAULT_FONT='"DejaVu Sans Mono,Bitstream Vera Sans Mono,monospace,Courier"'
122   fi
123 ])
125 dnl Use mmap in rrd_update instead of seek+write
126 AC_ARG_ENABLE([mmap],
127 AS_HELP_STRING([--disable-mmap],[disable mmap in rrd_update, use seek+write instead]),
128 [],
129 [enable_mmap=yes])
131 AC_ARG_ENABLE(pthread,AS_HELP_STRING([--disable-pthread],[disable multithread support]),
132 [],[enable_pthread=yes])
134 AC_ARG_ENABLE(static-programs,
135      AS_HELP_STRING([--enable-static-programs],[Build static programs]),
136      [case "${enableval}" in
137        yes) staticprogs=yes ;;
138        no)  staticprogs=no ;;
139        *) AC_MSG_ERROR(bad value ${enableval} for --enable-static-programs) ;;
140      esac],[staticprogs=no])
141 AM_CONDITIONAL(STATIC_PROGRAMS,[test "x$staticprogs" = "xyes"])
144 CONFIGURE_PART(Audit Compilation Environment)
147 dnl Check for the compiler and static/shared library creation.
148 AC_PROG_CPP
149 AC_PROG_CC
150 AM_PROG_CC_C_O
151 AC_PROG_LIBTOOL
153 dnl Try to detect/use GNU features
154 CFLAGS="$CFLAGS -D_GNU_SOURCE"
156 dnl check for -Werror separatly
157 dnl (quite a few autotool checks do not work with -Werror; also, the
158 dnl check for -Werror fails after checking and adding the other flags)
159 AC_CACHE_CHECK([if gcc likes the -Werror flag], rd_cv_gcc_flag__Werror,
160   [AC_COMPILE_IFELSE(
161     [AC_LANG_PROGRAM([[]], [[return 0 ]])],
162     [rd_cv_gcc_flag__Werror="yes"],
163     [rd_cv_gcc_flag__Werror="no"])])
164 if test "x$rd_cv_gcc_flag__Werror" = "xyes"; then
165   WERROR="-Werror"
166 else
167   WERROR=""
168 fi
169 AC_SUBST(WERROR)
171 dnl which flags does the compiler support?
172 if test "x$GCC" = "xyes"; then
173   for flag in -fno-strict-aliasing -Wall -std=gnu99 -pedantic -Wundef -Wshadow -Wpointer-arith -Wcast-align -Wmissing-prototypes -Wmissing-declarations -Wnested-externs -Winline -Wold-style-definition -W; do
174     oCFLAGS="$CFLAGS"
175     CFLAGS="$CFLAGS $flag"
176     cachename=rd_cv_gcc_flag_`echo $flag|sed 's/[[^A-Za-z]]/_/g'`
177     AC_CACHE_CHECK([if gcc likes the $flag flag], $cachename,
178        [AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]], [[return 0 ]])],[eval $cachename=yes],[eval $cachename=no])])
179     if eval test \$$cachename = no; then
180          CFLAGS="$oCFLAGS"
181     fi
182   done
183 fi
187 AC_SUBST(RRD_DEFAULT_FONT)
189 CONFIGURE_PART(Checking for Header Files)
190  
191 dnl Checks for header files.
192 AC_HEADER_STDC
193 AC_HEADER_DIRENT
194 AC_CHECK_HEADERS(langinfo.h stdint.h inttypes.h libgen.h features.h sys/stat.h sys/types.h fcntl.h fp_class.h malloc.h unistd.h ieeefp.h math.h sys/times.h sys/param.h sys/resource.h signal.h float.h stdio.h stdlib.h errno.h string.h ctype.h)
196 dnl Checks for typedefs, structures, and compiler characteristics.
197 AC_C_CONST
198 AC_HEADER_TIME
199 AC_STRUCT_TM
201 CONFIGURE_PART(Test Library Functions)
203 dnl Checks for libraries.
204 AC_CHECK_FUNC(acos, , AC_CHECK_LIB(m, acos))
207 dnl add pic flag in any case this makes sure all our code is relocatable
208 eval `./libtool --config | grep pic_flag=` 
209 CFLAGS="$CFLAGS $pic_flag"
212 dnl Checks for library functions.
213 AC_FUNC_STRFTIME
214 AC_FUNC_VPRINTF
216 AC_C_BIGENDIAN
218 dnl for each function found we get a definition in config.h 
219 dnl of the form HAVE_FUNCTION
221 AC_CHECK_FUNCS(nl_langinfo tzset round rint fsync mbstowcs opendir readdir chdir chroot getuid strerror snprintf vsnprintf vasprintf fpclass class fp_class isnan memmove strchr mktime getrusage gettimeofday)
223 AC_FUNC_STRERROR_R
225 CONFIGURE_PART(Map/Fadvis/Madvise checking)
227 dnl Could use these to know if we need to provide a prototype
228 dnl AC_CHECK_DECLS(fdatasync, [], [], [#include <unistd.h>])
230 dnl check for fdatasync. Solaris has fdatasync in the librt
232 AC_CHECK_FUNCS(fdatasync, [],  AC_CHECK_LIB(rt, fdatasync, [LIBS="${LIBS} -lrt"; AC_DEFINE(HAVE_FDATASYNC)],[]))
233 dnl if there is no fdatasync we may get lucky with fsync
234 AC_CHECK_FUNCS(fsync)
236 dnl check for socket and nsl solaris again ... we need this for the new rrd_daemon stuff
238 AC_CHECK_FUNCS(socket, [],  AC_CHECK_LIB(socket, socket, [LIBS="${LIBS} -lsocket"; AC_DEFINE(HAVE_SOCKET)],[]))
239 AC_CHECK_FUNCS(getaddrinfo, [],  AC_CHECK_LIB(nsl, getaddrinfo, [LIBS="${LIBS} -lnsl"; AC_DEFINE(HAVE_GETADDRINFO)],[]))
243 dnl XXX: dunno about windows.. add AC_CHECK_FUNCS(munmap) there too?
244 if test "x$enable_mmap" = "xyes"; then
245   case "$host" in
246   *cygwin*)
247     # the normal mmap test does not work in cygwin
248     AC_CHECK_FUNCS(mmap)
249     if test "x$ac_cv_func_mmap" = "xyes"; then
250       ac_cv_func_mmap_fixed_mapped=yes
251     fi
252   ;;
253   *)
254     AC_CHECK_HEADERS(sys/mman.h)
255     AC_FUNC_MMAP
256     AC_CHECK_FUNCS(mmap munmap msync)
257     AC_CHECK_DECLS(madvise, [], [], [#ifdef HAVE_SYS_MMAN_H
258                                      # include <sys/mman.h>
259                                      #endif])
260     if test "x$ac_cv_have_decl_madvise" = "xyes";
261     then
262       AC_CHECK_FUNCS(madvise)
263     else
264       AC_CHECK_FUNCS(posix_madvise)
265       if test "x$ac_cv_func_posix_madvise" != "xyes"; then
266         AC_MSG_WARN([madvise() nor posix_madvise() found.])
267       fi
268     fi
269   ;;
270   esac
271   if test "x$ac_cv_func_mmap" != "xyes";
272   then
273     AC_MSG_ERROR([--enable-mmap requested but mmap() was not detected])
274 dnl enable_mmap="no"
275   fi
276 fi
278 dnl can we use posix_fadvise
279 AC_CHECK_DECLS(posix_fadvise, [], [], [#define _XOPEN_SOURCE 600
280 #include <fcntl.h>])
281 AC_CHECK_FUNCS(posix_fadvise)
283 CONFIGURE_PART(Libintl Processing)
285 AM_GNU_GETTEXT_VERSION(0.17)
286 AM_GNU_GETTEXT(external)
288 CONFIGURE_PART(IEEE Math Checks)
289  
291 dnl actual code to check if this works
292 AC_CHECK_FUNCS(fpclassify, ,
293   [AC_MSG_CHECKING(for fpclassify with <math.h>)
294     AC_LINK_IFELSE([AC_LANG_PROGRAM([[#include <math.h>
295 volatile int x;volatile float f; ]], [[x = fpclassify(f)]])],[AC_MSG_RESULT(yes)
296       AC_DEFINE(HAVE_FPCLASSIFY)],[AC_MSG_RESULT(no)])])
298 AC_CHECK_FUNCS(isinf, ,
299   [AC_MSG_CHECKING(for isinf with <math.h>)
300     AC_LINK_IFELSE([AC_LANG_PROGRAM([[#include <math.h>
301 volatile int x;volatile float f;  ]], [[x = isinf(f)]])],[AC_MSG_RESULT(yes)
302       AC_DEFINE(HAVE_ISINF)],[AC_MSG_RESULT(no)])])
304 dnl finite is BSD, isfinite is C99, so prefer the latter
305 AC_CACHE_CHECK([whether isfinite is broken],[ac_cv_have_broken_isfinite],[
306 AC_TRY_RUN([
307 #ifdef HAVE_MATH_H
308 #include <math.h>
309 #endif
310 #ifdef HAVE_FLOAT_H
311 #include <float.h>
312 #endif
313 int main ()
315 #ifdef isfinite
316 #ifdef LDBL_MAX
317   if (!isfinite(LDBL_MAX)) return 1;
318 #endif
319 #ifdef DBL_MAX
320   if (!isfinite(DBL_MAX)) return 1;
321 #endif
322 #endif
323 return 0;
324 }],[ac_cv_have_broken_isfinite=no],[ac_cv_have_broken_isfinite=yes],[
325 case "${target}" in
326   hppa*-*-hpux*) ac_cv_have_broken_isfinite=yes ;;
327   *-solaris2.8) ac_cv_have_broken_isfinite=yes ;;
328   *-solaris2.9) ac_cv_have_broken_isfinite=yes ;;
329   *) ac_cv_have_broken_isfinite=no ;;
330 esac])
331 ])
333 dnl the test does not seem to work on solaris 2.8
334 dnl so lets fix this by hand
335 case "${target}" in
336   *-solaris2.8) ac_cv_have_broken_isfinite=yes ;;
337   *-solaris2.9) ac_cv_have_broken_isfinite=yes ;;
338 esac
340 if test "x$ac_cv_have_broken_isfinite" = "xno"; then
341   AC_DEFINE(HAVE_ISFINITE)
342 else
343   AC_CHECK_FUNCS(finite,[],
344       [AC_CHECK_FUNCS(isfinite,[],
345          [AC_MSG_CHECKING(for isfinite with <math.h>)
346           AC_LINK_IFELSE([AC_LANG_PROGRAM([[#include <math.h>
347 volatile int x;volatile float f;  ]],[[x = isfinite(f)]])],[AC_MSG_RESULT(yes)
348                 AC_DEFINE(HAVE_ISFINITE)],[AC_MSG_RESULT(no)])])])
349 fi  
351 AC_FULL_IEEE
353 CONFIGURE_PART(Resolve Portability Issues)
355 GC_TIMEZONE()
357 CHECK_FOR_WORKING_MS_ASYNC
359 dnl do we have nl_langinfo(_NL_TIME_WEEK_1STDAY)
360 AC_CHECK_FUNCS(_NL_TIME_WEEK_1STDAY, ,
361   [AC_MSG_CHECKING([for nl_langinfo(_NL_TIME_WEEK_1STDAY) with langinfo.h])
362     AC_LINK_IFELSE([AC_LANG_PROGRAM([[#include <langinfo.h>]], [[nl_langinfo(_NL_TIME_WEEK_1STDAY)]])],[AC_MSG_RESULT(yes)
363       AC_DEFINE(HAVE__NL_TIME_WEEK_1STDAY)],[AC_MSG_RESULT(no)])])
365 dnl Do we need getopt_long
367 dnl even when including our own getopt implementation
368 dnl we may want to make sure we use the external
369 dnl defined by libc to not run into linker resolve trouble
371 AC_CACHE_CHECK([for opterr], rd_cv_var_int_opterr,
372 [AC_TRY_LINK([#include <unistd.h>],
373   [extern int opterr; opterr = 1;],
374   [rd_cv_var_int_opterr=yes],
375   [rd_cv_var_int_opterr=no])])
376 if test x"$rd_cv_var_int_opterr" = x"yes"; then
377   AC_DEFINE(HAVE_INT_OPTERR, 1, [Define to 1 if you have the global variable 'int opterr'.])
378 fi
380 build_getopt=no
381 RRD_GETOPT_LONG="LIBC_HAS_GETOPT_LONG"
382 AC_CHECK_FUNC(getopt_long,[],[
383 RRD_GETOPT_LONG="getopt_long"
384 build_getopt=yes
385 ])
386 AC_SUBST(RRD_GETOPT_LONG)
387 AM_CONDITIONAL(BUILD_GETOPT,[test $build_getopt = yes])
389 dnl what does realloc do if it gets called with a NULL pointer
391 AC_CACHE_CHECK([if realloc can deal with NULL], rd_cv_null_realloc,
392 [AC_RUN_IFELSE([AC_LANG_SOURCE([[#include <stdlib.h>
393               int main(void){
394               char *x = NULL;
395               x = realloc (x,10);
396               if (x==NULL) return 1;
397               return 0;
398              }]])],[rd_cv_null_realloc=yes],[rd_cv_null_realloc=nope],[:])])
400 if test x"$rd_cv_null_realloc" = xnope; then
401 AC_DEFINE(NO_NULL_REALLOC)
402 fi
404 AC_LANG_PUSH(C)
405 dnl solaris has some odd defines it needs in order to propperly compile ctime_r
406 AC_MSG_CHECKING([if ctime_r need special care to act posixly correct])
407 AC_LINK_IFELSE(
408     AC_LANG_PROGRAM(
409            [[#include <time.h>]],
410            [[ctime_r(NULL,NULL,0)]]
411                    ),
412     [ CPPFLAGS="$CPPFLAGS -D_POSIX_PTHREAD_SEMANTICS"
413       AC_LINK_IFELSE(
414           AC_LANG_PROGRAM(
415                 [[#include <time.h>]],
416                 [[ctime_r(NULL,NULL)]]
417                          ),
418           [AC_MSG_RESULT([yes, this seems to be solaris style])],
419           [AC_MSG_ERROR([Can't figure how to compile ctime_r])]
420       )
421     ],  
422     [ AC_LINK_IFELSE(
423           AC_LANG_PROGRAM(
424                 [[#include <time.h>]],
425                 [[ctime_r(NULL,NULL)]]
426                          ),
427           [AC_MSG_RESULT(no)],
428           [AC_MSG_ERROR([Can't figure how to compile ctime_r])]
429       )
430     ]  
432 AC_LANG_POP(C)
434 dnl Check for pthreads
435 dnl http://autoconf-archive.cryp.to/acx_pthread.m4
436  
437 AC_SUBST(MULTITHREAD_CFLAGS)
438 AC_SUBST(MULTITHREAD_LDFLAGS)
440 if test $enable_pthread != no; then 
441  ACX_PTHREAD([
442     MULTITHREAD_CFLAGS=$PTHREAD_CFLAGS
443     MULTITHREAD_LDFLAGS=$PTHREAD_LIBS
444              ],
445              [])
446 fi
448 dnl since we use lots of *_r functions all over the code we better
449 dnl make sure they are known
451 if test  "x$x_rflag" != "xno"; then
452    CPPFLAGS="$CPPFLAGS $x_rflag"
453 fi
455 AM_CONDITIONAL(BUILD_MULTITHREAD,[test $enable_pthread != no])
457 AC_LANG_PUSH(C)
458 dnl see if we have to include malloc/malloc.h
459 AC_MSG_CHECKING([do we need malloc/malloc.h])
460 AC_LINK_IFELSE(
461     AC_LANG_PROGRAM(
462            [[#include <stdlib.h>]],
463            [[malloc(1)]]
464                    ),
465     [ AC_MSG_RESULT([nope, works out of the box]) ],
466     [ AC_LINK_IFELSE(
467           AC_LANG_PROGRAM(
468                 [[#include <stdlib.h>
469                   #include <malloc/malloc.h>]],
470                 [[malloc(1)]]
471                          ),[
472            AC_DEFINE([MUST_HAVE_MALLOC_MALLOC_H])
473            AC_MSG_RESULT([yes we do])],
474           [AC_MSG_ERROR([Can not figure how to compile malloc])]
475       )
476     ]  
479 dnl is time_t 32 of 64 bit ?
480 AC_DEFINE([TIME_T_IS_32BIT], [], [time_t is 32bit])
481 AC_DEFINE([TIME_T_IS_64BIT], [], [time_t is 64bit])
482 AC_MSG_CHECKING([the type of time_t])
483 AC_CHECK_SIZEOF([time_t])
484 if test "x$ac_cv_sizeof_time_t" = "x4"; then
485   AC_MSG_RESULT([time_t is 32 bit])
486   AC_DEFINE([TIME_T_IS_32BIT])
487 elif test "x$ac_cv_sizeof_time_t" = "x8"; then
488   AC_MSG_RESULT([time_t is 64 bit])
489   AC_DEFINE([TIME_T_IS_64BIT])
490 else
491   AC_MSG_ERROR([can not figure type of time_t])
492 fi
494 AC_LANG_POP(C)
496 CONFIGURE_PART(Find 3rd-Party Libraries)
498 have_libdbi=no
500 AC_ARG_ENABLE(libdbi,AS_HELP_STRING([--disable-libdbi],[do not build in support for libdbi]),[],[
501     AC_CHECK_HEADER(dbi/dbi.h, [ 
502        AC_CHECK_LIB(dbi, dbi_initialize, [
503            AC_DEFINE(HAVE_LIBDBI,[1],[have got libdbi installed])
504            LIBS="${LIBS} -ldbi -ldl"
505            have_libdbi=yes
506        ])
507     ])
508 ])
510 AM_CONDITIONAL(BUILD_LIBDBI,[test $have_libdbi != no])
512 have_libwrap=no
514 AC_ARG_ENABLE(libwrap, AS_HELP_STRING([--disable-libwrap], [do not build in support for libwrap (tcp wrapper)]),[],[ 
515     AC_CHECK_HEADER(tcpd.h,[       
516         AC_CHECK_FUNCS(hosts_access, [
517             AC_DEFINE(HAVE_LIBWRAP,[1],[have got libwrap installed])
518             have_libwrap=yes 
519         ],  
520         [
521             AC_CHECK_LIB(wrap, hosts_access, [
522                AC_DEFINE(HAVE_LIBWRAP,[1],[have got libwrap installed])
523                LIBS="${LIBS} -lwrap"
524                have_libwrap=yes
525             ])
526         ])
527     ])
528 ])
531 AM_CONDITIONAL(BUILD_LIBWRAP,[test $have_libwrap != no])
533 AM_CONDITIONAL(BUILD_RRDGRAPH,[test $enable_rrd_graph != no])
536 CORE_LIBS="$LIBS"
538 if test $enable_rrd_graph != no; then
539 dnl EX_CHECK_ALL(z,          zlibVersion,               zlib.h,                 zlib,        1.2.5,  http://zlib.net/, "")
540 dnl EX_CHECK_ALL(png,        png_access_version_number, png.h,                  libpng,      1.4.8,  ftp://ftp.simplesystems.org/pub/libpng/png/src/, "")
541 dnl EX_CHECK_ALL(freetype,   FT_Init_FreeType,          ft2build.h,             freetype2,   2.4.6,  http://download.savannah.gnu.org/releases/freetype/, /usr/include/freetype2)
542 dnl EX_CHECK_ALL(fontconfig, FcInit,                    fontconfig.h,           fontconfig,  2.8.0,  http://www.freedesktop.org/software/fontconfig/release/, /usr/include)
543 EX_CHECK_ALL(cairo,      cairo_font_options_create,     cairo.h,                cairo-png,   1.10.2,  http://cairographics.org/releases/, "")
544 EX_CHECK_ALL(cairo,      cairo_svg_surface_create,      cairo-svg.h,            cairo-svg,   1.10.2,  http://cairographics.org/releases/, "")
545 EX_CHECK_ALL(cairo,      cairo_pdf_surface_create,      cairo-pdf.h,            cairo-pdf,   1.10.2,  http://cairographics.org/releases/, "")
546 EX_CHECK_ALL(cairo,      cairo_ps_surface_create,       cairo-ps.h,             cairo-ps,    1.10.2,  http://cairographics.org/releases/, "")
547 EX_CHECK_ALL(pangocairo-1.0,  pango_cairo_context_set_font_options,  pango/pango.h,  pangocairo,  1.28.4,    http://ftp.gnome.org/pub/GNOME/sources/pango/1.28, "")
549 fi
550 EX_CHECK_ALL(glib-2.0,   glib_check_version,            glib.h,                 glib-2.0,    2.28.7, ftp://ftp.gtk.org/pub/glib/2.28/, "")
551 EX_CHECK_ALL(xml2,       xmlParseFile,                  libxml/parser.h,        libxml-2.0,        2.7.8,  http://xmlsoft.org/downloads.html, /usr/include/libxml2)
553 if test "$EX_CHECK_ALL_ERR" = "YES"; then
554   AC_MSG_ERROR([Please fix the library issues listed above and try again.])
555 fi
557 ALL_LIBS="$LIBS"
558 LIBS=
560 AC_SUBST(CORE_LIBS)
561 AC_SUBST(ALL_LIBS)
563 CONFIGURE_PART(Prep for Building Language Bindings)
564   
565 dnl Check for Perl and friends
566 PATH=$PATH:/usr/perl5/bin
567 export PATH
568 AC_PATH_PROG(PERL, perl, no)
569 AC_PATH_PROG(POD2MAN, pod2man, no)
570 AC_PATH_PROG(POD2HTML, pod2html, no)
573 AC_ARG_ENABLE(perl,AS_HELP_STRING([--disable-perl],[do not build the perl modules]),
574 [],[enable_perl=yes])
577 AC_ARG_VAR(PERLCC, [C compiler for Perl modules])
578 AC_ARG_VAR(PERLCCFLAGS, [CC flags for Perl modules])
579 AC_ARG_VAR(PERLLD, [Linker for Perl modules])
580 AC_ARG_VAR(PERLLDFLAGS, [LD flags for Perl modules])
582 if test "x$PERL" = "xno" -o  x$enable_perl = xno; then
583         COMP_PERL=
584 else
585         COMP_PERL="perl_piped perl_shared"
586         AC_MSG_CHECKING(for the perl version you are running)
587         PERL_VERSION=`$PERL -MConfig -e 'print $Config{version}'`
588         AC_MSG_RESULT($PERL_VERSION)
589         if test -z "$PERLCC"; then
590             AC_MSG_CHECKING(for the C compiler perl wants to use to build its modules)
591             perlcc=`$PERL -MConfig -e 'print $Config{cc}'`
592             AC_MSG_RESULT($perlcc)
593             if test ! -x "$perlcc"; then
594                 AC_PATH_PROG(PERL_CC, ${perlcc}, no)
595                 if test "$PERL_CC" = "no"; then
596                     AC_MSG_WARN([
597 I would not find the Compiler ($perlcc) that was originally used to compile
598 your perl binary. You should either make sure that this compiler is
599 available on your system, pick an other compiler and set PERLCC
600 appropriately, or use a different perl setup that was compiled locally.
602 I will disable the compilation of the RRDs perl module for now.
603 ])
604                     COMP_PERL="perl_piped"
605                 fi
606             fi    
607         fi
608 fi
610 AC_MSG_CHECKING(Perl Modules to build)
611 AC_MSG_RESULT(${COMP_PERL:-No Perl Modules will be built})
613 # Options to pass when configuring perl module
614 langpref=$prefix
615 test "$langpref" = '$(DESTDIR)NONE' && langpref='$(DESTDIR)'$ac_default_prefix
616 test "$langpref" = "NONE" && langpref=$ac_default_prefix
618 PERL_MAKE_OPTIONS="PREFIX=$langpref LIB=$langpref/lib/perl/$PERL_VERSION"
620 dnl pass additional perl options when generating Makefile from Makefile.PL
621 AC_ARG_ENABLE(perl-site-install,
622 AS_HELP_STRING([--enable-perl-site-install],[by default the rrdtool perl modules are installed together with rrdtool in $prefix/lib/perl. You have to put a 'use lib qw($prefix/lib/perl)' into your scripts when you want to use them. When you set this option the perl modules will get installed wherever your perl setup thinks it is best.]),
623 [PERL_MAKE_OPTIONS=],[])
625 if test ! -z "$PERLCC"; then
626    PERL_MAKE_OPTIONS="$PERL_MAKE_OPTIONS CC=$PERLCC"
628    if test ! -z "$PERLCCFLAGS"; then
629        PERL_MAKE_OPTIONS="$PERL_MAKE_OPTIONS CCFLAGS=$PERLCCFLAGS"
630    fi
631    
632    if test -z "$PERLLD"; then
633        PERLLD=$PERLCC
634    fi
635    PERL_MAKE_OPTIONS="$PERL_MAKE_OPTIONS LD=$PERLLD"
636   
637    if test ! -z "$PERLLDFLAGS"; then
638        PERL_MAKE_OPTIONS="$PERL_MAKE_OPTIONS LDFLAGS=$PERLLDFLAGS"
639    fi
640 fi
641         
642 AC_ARG_WITH(perl-options,
643 [  --with-perl-options=[OPTIONS]  options to pass on command-line when
644                           generating Makefile from Makefile.PL. If you set this
645                           option, interesting things may happen unless you know
646                           what you are doing!],
647 [PERL_MAKE_OPTIONS=$withval])
649 AC_SUBST(PERL_MAKE_OPTIONS)
650 AC_SUBST(PERL)
651 AC_SUBST(COMP_PERL)
652 AC_SUBST(PERL_VERSION)
654 dnl Check for Ruby.
655 AC_PATH_PROG(RUBY, ruby, no)
657 AC_ARG_ENABLE(ruby,AS_HELP_STRING([--disable-ruby],[do not build the ruby modules]),
658 [],[enable_ruby=yes])
660 AC_MSG_CHECKING(if ruby modules can be built)
662 if test "x$RUBY" = "xno" -o  x$enable_ruby = xno; then
663         COMP_RUBY=
664         AC_MSG_RESULT(No .. Ruby not found or disabled)
665 else
666         if $RUBY -e 'require "mkmf"' >/dev/null 2>&1; then
667                 COMP_RUBY="ruby"
668                 AC_MSG_RESULT(YES)
669         else
670                 COMP_RUBY=
671                 AC_MSG_RESULT(Ruby found but mkmf is missing! Install the -dev package)         
672         fi                              
673 fi
675 dnl pass additional ruby options when generating Makefile from Makefile.PL
676 AC_ARG_ENABLE(ruby-site-install,
677 AS_HELP_STRING([--enable-ruby-site-install],[by default the rrdtool ruby modules are installed together with rrdtool in $prefix/lib/ruby. You have to add $prefix/lib/ruby/$ruby_version/$sitearch to your $: variable for ruby to find the RRD.so file.]),
678 [RUBY_MAKE_OPTIONS=],[RUBY_MAKE_OPTIONS="sitedir=$langpref/lib/ruby"])
680     
681 AC_ARG_WITH(ruby-options,
682 [  --with-ruby-options=[OPTIONS]  options to pass on command-line when
683                           generating Makefile from extconf.rb. If you set this
684                           option, interesting things may happen unless you know
685                           what you are doing!],
686 [RUBY_MAKE_OPTIONS=$withval])
688 AC_SUBST(RUBY_MAKE_OPTIONS)
689 AC_SUBST(RUBY)
690 AC_SUBST(COMP_RUBY)
692 dnl Check for Lua.
693 AC_PATH_PROG(LUA, lua, no)
695 AC_ARG_ENABLE(lua,AS_HELP_STRING([--disable-lua],[do not build the lua modules]),
696 [],[enable_lua=yes])
698 COMP_LUA=
699 if test "$LUA" = "no" -o "$enable_lua" = "no"; then
700   enable_lua=no
701 else
702   AC_MSG_CHECKING(for lua >= 5.0)
703   read LUA_MAJOR LUA_MINOR LUA_POINT <<LUA_EOF
704     $($LUA -v 2>&1 | cut -f2 -d' ' | sed -e 's/\./ /g')
705 LUA_EOF
706   if test 0$LUA_MAJOR -lt 5; then
707     AC_MSG_RESULT([no, version found is $LUA_MAJOR.$LUA_MINOR])
708   else
709     AC_MSG_RESULT([$LUA_MAJOR.$LUA_MINOR found])
710     lua_vdot=$LUA_MAJOR.$LUA_MINOR
711     lua_vndot=$LUA_MAJOR$LUA_MINOR
712     lua_version=$LUA_MAJOR.$LUA_MINOR.$LUA_POINT
713     AC_CHECK_HEADERS(lua$lua_vndot/lua.h,
714       [AC_CHECK_HEADERS(lua$lua_vndot/lualib.h,
715         [AC_CHECK_HEADER(lua$lua_vndot/lauxlib.h,
716           [lua_headerdir=lua$lua_vndot],
717           [])],
718         [])],
719       [AC_CHECK_HEADERS(lua$lua_vdot/lua.h,
720         [AC_CHECK_HEADERS(lua$lua_vdot/lualib.h,
721           [AC_CHECK_HEADER(lua$lua_vdot/lauxlib.h,
722             [lua_headerdir=lua$lua_vdot],
723             [])],
724           [])],
725         [AC_CHECK_HEADERS(lua.h,
726           [AC_CHECK_HEADERS(lualib.h,
727             [AC_CHECK_HEADER(lauxlib.h,
728               [lua_headerdir=""],
729               [lua_headerdir="no"])],
730             [])],
731           [])])])
733     if test "$lua_headerdir" = "no"; then
734       enable_lua=no
735     else
736       COMP_LUA=lua
737     fi
739     if test "$COMP_LUA" != "lua"; then
740       enable_lua=no
741       AC_MSG_WARN([Lua $lua_vdot found but not lua.h, lualib.h and lauxlib.h! Please install the -dev packages for Lua $lua_vdot])
742     else
743       # OK, headers found, let's check the libraries (LIBS is not used)
744       LIBS=
745       lua_havelib=no
746       LUA_HAVE_COMPAT51=DONT_HAVE_COMPAT51
747       AC_SEARCH_LIBS(lua_call, lua$lua_vdot lua$lua_vndot lua,
748         [AC_SEARCH_LIBS(luaL_register, lua$lua_vdot lua$lua_vndot lua,
749           [lua_havelib=LUA$lua_vndot],
750           [AC_SEARCH_LIBS(luaL_module, lualib$lua_vndot lualib$lua_vdot lualib,
751             [lua_havelib=$lua_vndot; $LUA -l compat-5.1 2>/dev/null;
752              test "$?" = "0" && LUA_HAVE_COMPAT51=HAVE_COMPAT51],
753             [AC_SEARCH_LIBS(luaL_openlib, lualib$lua_vdot lualib$lua_vndot lualib,
754               [lua_havelib=$lua_vndot],
755               [COMP_LUA=], [-lm])], [-lm])], [-lm])],
756         [COMP_LUA=], [-lm])
757       lua_libs=$LIBS
758       LIBS=
760       # Options to pass when configuring Lua module
761       if test  "$lua_havelib" != "no"; then
762         # OK, headers and libs found. Try to set lua flags
763         # and modules installation dirs with pkg-config
764         if test "$PKGCONFIG" != "no"; then
765           if test "$lua_vndot" = "50"; then
766             lua_pkg_prefix=lualib
767           else
768             lua_pkg_prefix=lua
769           fi
770           # try with dot, without dot and finally without version
771           for f in $lua_pkg_prefix$lua_vdot $lua_pkg_prefix$lua_vndot $lua_pkg_prefix; do
772             lua_exec_prefix=`$PKGCONFIG --variable=prefix $f 2>/dev/null`
773             # same binaries?
774             if test "$lua_exec_prefix/bin/lua" = "$LUA"; then 
775                 # OK, found CFLAGS. Get Lua LFLAGS and modules install dir
776                 LUA_CFLAGS=`$PKGCONFIG --cflags $f 2>/dev/null`
777                 LUA_LFLAGS=`$PKGCONFIG --libs $f 2>/dev/null`
778                 LUA_INSTALL_CMOD=`$PKGCONFIG --variable=INSTALL_CMOD $f 2>/dev/null`
779                 LUA_INSTALL_LMOD=`$PKGCONFIG --variable=INSTALL_LMOD $f 2>/dev/null`
780                 break
781             fi
782           done
783         fi
785         LUA_RRD_LIBDIR="$langpref/lib/lua/$lua_vdot"
786         # if lua 5.0 can't find compat-5.1, force installation of
787         # compat-5.1.lua together with RRDtool.
788         if test "$lua_vdot" = "5.0" -a "$LUA_HAVE_COMPAT51" != "HAVE_COMPAT51"; then
789           lua_need_compat51=1 
790           LUA_INSTALL_LMOD="$LUA_RRD_LIBDIR"
791         fi
793         # if not set with pkg-config, use default values in src packages compat-5.1, lua 5.1
794         if test "$LUA_CFLAGS" = ""; then
795           AC_MSG_WARN(Setting Lua include and lib flags to defaults in compat-5.1 and lua 5.1 sources)
796           LUA_CFLAGS="-I/usr/local/include -I/usr/local/include/lua -I/usr/local/include/lua/$lua_vdot"
797           LUA_LFLAGS="-L/usr/local/lib -L/usr/local/lib/lua -L/usr/local/lib/lua/$lua_vdot $lua_libs"
798           LUA_INSTALL_CMOD="/usr/local/lib/lua/$lua_vdot"
799         fi
801         dnl pass additional lua options
802         dnl if lua-site-install is not set, overwrite LUA_INSTALL_CMOD already
803         dnl found and install together with RRDtool, under $langpref.
804         AC_ARG_ENABLE(lua-site-install,
805         AS_HELP_STRING([--enable-lua-site-install],[by default the lua module is installed together with rrdtool in $prefix/lib/lua/$lua_version. You have to add $prefix/lib/lua/$lua_version/?.so to package.cpath for lua to find 'rrd.so'. For lua 5.0 you may also need to change LUA_PATH to the same dir, to require 'compat-5.1'. When you set this option the lua modules will get installed wherever your Lua setup thinks it is best. WARNING: if you set this option, system lua modules compat-5.1.lua and rrd.so, if any, may be overwritten.]),
806         [],
807         [LUA_INSTALL_CMOD="$LUA_RRD_LIBDIR"; LUA_INSTALL_LMOD="$LUA_RRD_LIBDIR"])
809         LUA_DEFINES="-DLUA$lua_vndot -D$LUA_HAVE_COMPAT51"
810         AC_SUBST(LUA)
811         AC_SUBST(COMP_LUA)
812         AC_SUBST(LUA_INSTALL_CMOD)
813         AC_SUBST(LUA_INSTALL_LMOD)
814         AC_SUBST(LUA_CFLAGS)
815         AC_SUBST(LUA_LFLAGS)
816         AC_SUBST(LUA_DEFINES)
817       else
818         enable_lua=no
819         AC_MSG_RESULT([Lua headers found but not the libraries! Please reinstall the dev packages for Lua $LUA_MAJOR.$LUA_MINOR])
820       fi
821     fi
822   fi
823 fi
824 dnl If Lua 5.0, we need compat-5.1. Add ours unless already
825 dnl integrated as in Debian/Ubuntu 5.0 -dev packages.
826 AM_CONDITIONAL(LUA_NEED_OUR_COMPAT51,
827       [test "$lua_vdot" = "5.0" -a "$LUA_HAVE_COMPAT51" != "HAVE_COMPAT51"])
828 AM_CONDITIONAL(LUA_SITE_CINSTALL, [test "$LUA_INSTALL_CMOD" != "$LUA_RRD_LIBDIR"])
829 AM_CONDITIONAL(LUA_SITE_LINSTALL, [test "$LUA_INSTALL_LMOD" != "$LUA_RRD_LIBDIR"])
830 AM_CONDITIONAL(LUA50, [test "$lua_vndot" = "50"])
831 AM_CONDITIONAL(BUILD_LUA, [test "$enable_lua" = "yes"])
833 enable_tcl_site=no
835 AC_ARG_ENABLE(tcl,AS_HELP_STRING([--disable-tcl],[do not build the tcl modules]),
836 [],[enable_tcl=yes])
838 if test  "$enable_tcl" = "yes"; then
839   dnl Check for Tcl.
840   withval=""
841   AC_ARG_WITH(tcllib,[  --with-tcllib=DIR       location of the tclConfig.sh])
842   enable_tcl=no
843   for dir in $withval /usr/lib /usr/lib64 /usr/local/lib /usr/lib/tcl8.4 /usr/lib/tcl8.3 ; do
844     AC_MSG_CHECKING(for tclConfig.sh in $dir)
845     if test -f "$dir/tclConfig.sh" ; then
846         tcl_config=$dir/tclConfig.sh
847         enable_tcl=yes
848         AC_MSG_RESULT(yes)
849         break
850     else
851         AC_MSG_RESULT(no)
852     fi
853   done
855   if test "$enable_tcl" = "no"; then
856         AC_MSG_WARN([tclConfig.sh not found - Tcl interface will not be built])
857   else
858         . $tcl_config
859         TCL_PACKAGE_DIR="$TCL_PACKAGE_PATH/tclrrd$VERSION"
860         if test -n "$TCL_INC_DIR"; then
861           TCL_INCLUDE_SPEC="$TCL_INCLUDE_SPEC -I$TCL_INC_DIR"
862         fi
863   fi
864   AC_ARG_ENABLE(tcl-site,AS_HELP_STRING([--enable-tcl-site],[install the tcl extension in the tcl tree]),
865   [],[enable_tcl_site=yes])
867 fi
869 AM_CONDITIONAL(BUILD_TCL, test "$enable_tcl" = "yes" )
870 AM_CONDITIONAL(BUILD_TCL_SITE, test "$enable_tcl_site" = "yes" )
873 AC_SUBST(TCL_PREFIX)
874 AC_SUBST(TCL_SHLIB_CFLAGS)
875 AC_SUBST(TCL_SHLIB_LD)
876 AC_SUBST(TCL_SHLIB_SUFFIX)
877 AC_SUBST(TCL_PACKAGE_PATH)
878 AC_SUBST(TCL_LD_SEARCH_FLAGS)
879 AC_SUBST(TCL_STUB_LIB_SPEC)
880 AC_SUBST(TCL_VERSION)
881 AC_SUBST(TCL_PACKAGE_DIR)
882 AC_SUBST(TCL_INCLUDE_SPEC)
884 AC_ARG_ENABLE(python,AS_HELP_STRING([--disable-python],[do not build the python modules]),
885 [],[enable_python=yes])
887 if test  "$enable_python" = "yes"; then
888 dnl Check for python
889 AM_PATH_PYTHON(2.3,[],[enable_python=no])
890 AM_CHECK_PYTHON_HEADERS(,[enable_python=no;AC_MSG_WARN(could not find Python headers)])
891 fi
893 if test  x$enable_python = xno; then
894         COMP_PYTHON=
895 else
896         COMP_PYTHON="python"
897 fi
899 AC_SUBST(COMP_PYTHON)
901 dnl Check for nroff
902 AC_ARG_VAR(NROFF, [path to the local nroff version])
903 AC_PATH_PROGS(NROFF, [gnroff nroff])
904 if test x$NROFF = x; then
905   AC_MSG_ERROR([I need a copy of *nroff to format the documentation])
906 fi
907 AC_ARG_VAR(TROFF, [path to the local troff version])
908 AC_PATH_PROGS(TROFF, [groff troff])
909 if test x$TROFF = x; then
910   AC_MSG_ERROR([I need a copy of *troff to format the documentation])
911 fi
913 AC_ARG_VAR(RRDDOCDIR, [[DATADIR/doc/PACKAGE-VERSION] Documentation directory])
914 if test -z "$RRDDOCDIR"; then
915    RRDDOCDIR='${datadir}/doc/${PACKAGE}-${VERSION}'; fi
918 CONFIGURE_PART(Apply Configuration Information)
919  
920 AC_CONFIG_FILES([examples/shared-demo.pl])
921 AC_CONFIG_FILES([examples/piped-demo.pl])
922 AC_CONFIG_FILES([examples/stripes.pl])
923 AC_CONFIG_FILES([examples/bigtops.pl])
924 AC_CONFIG_FILES([examples/minmax.pl])
925 AC_CONFIG_FILES([examples/4charts.pl])
926 AC_CONFIG_FILES([examples/perftest.pl])
927 AC_CONFIG_FILES([examples/Makefile])
928 AC_CONFIG_FILES([examples/rrdcached/Makefile])
929 AC_CONFIG_FILES([doc/Makefile])
930 AC_CONFIG_FILES([po/Makefile.in]) 
931 AC_CONFIG_FILES([src/Makefile])
932 AC_CONFIG_FILES([src/librrd.sym.in])
933 AC_CONFIG_FILES([src/librrd.pc])
934 AC_CONFIG_FILES([bindings/Makefile])
935 AC_CONFIG_FILES([bindings/tcl/Makefile])
936 AC_CONFIG_FILES([bindings/tcl/ifOctets.tcl])
937 AC_CONFIG_FILES([Makefile])          
938 AC_CONFIG_FILES([bindings/lua/Makefile])
940 AC_CONFIG_COMMANDS([default],[[ chmod +x examples/*.pl]],[[]])
942 dnl intl requires our config to be called config.h. indulge it.
943 AC_CONFIG_COMMANDS_POST([ test -f config.h || ln -s rrd_config.h config.h ])
945 AC_OUTPUT
947 AC_MSG_CHECKING(in)
948 AC_MSG_RESULT(and out again)
950 echo $ECHO_N "ordering CD from http://tobi.oetiker.ch/wish $ECHO_C" 1>&6
951 sleep 1
952 echo $ECHO_N ".$ECHO_C" 1>&6
953 sleep 1
954 echo $ECHO_N ".$ECHO_C" 1>&6
955 sleep 1
956 echo $ECHO_N ".$ECHO_C" 1>&6
957 sleep 1
958 echo $ECHO_N ".$ECHO_C" 1>&6
959 sleep 1
960 AC_MSG_RESULT([ just kidding ;-)])
961 echo
962 echo "----------------------------------------------------------------"
963 echo "Config is DONE!"
964 echo
965 echo "          With MMAP IO: $enable_mmap"
966 echo "      Build rrd_getopt: $build_getopt"
967 echo "       Build rrd_graph: $enable_rrd_graph"
968 echo "       Static programs: $staticprogs"
969 echo "          Perl Modules: $COMP_PERL"
970 echo "           Perl Binary: $PERL"
971 echo "          Perl Version: $PERL_VERSION"
972 echo "          Perl Options: $PERL_MAKE_OPTIONS"
973 echo "          Ruby Modules: $COMP_RUBY"
974 echo "           Ruby Binary: $RUBY"
975 echo "          Ruby Options: $RUBY_MAKE_OPTIONS"
976 echo "    Build Lua Bindings: $enable_lua"
977 if test "$enable_lua" = "yes"; then
978 echo "            Lua Binary: $LUA"
979 echo "           Lua Version: $lua_version"
980 echo "     Lua C-modules dir: $LUA_INSTALL_CMOD"
981 if test "$lua_need_compat51" = "1"; then
982 echo "   Lua Lua-modules dir: $LUA_INSTALL_LMOD"
983 fi
984 fi
985 echo "    Build Tcl Bindings: $enable_tcl"
986 echo " Build Python Bindings: $enable_python"
987 echo "          Build rrdcgi: $enable_rrdcgi"
988 echo "       Build librrd MT: $enable_pthread"
989 echo "           Use gettext: $USE_NLS"
990 echo "           With libDBI: $have_libdbi"
991 echo "          With libwrap: $have_libwrap"
992 echo
993 echo "             Libraries: $ALL_LIBS"
994 echo
995 echo "Type 'make' to compile the software and use 'make install' to "
996 echo "install everything to: $prefix."
997 echo 
998 echo "       ... that wishlist is NO JOKE. If you find RRDtool useful"
999 echo "make me happy. Go to http://tobi.oetiker.ch/wish and"
1000 echo "place an order."
1001 echo 
1002 echo "                               -- Tobi Oetiker <tobi@oetiker.ch>"
1003 echo "----------------------------------------------------------------"