1 dnl RRDtool AutoConf script ...
2 dnl ---------------------------
3 dnl
4 dnl Created by Jeff Allen, Tobi Oetiker, Blair Zajac
5 dnl
6 dnl Inspiration from http://autoconf-archive.cryp.to
8 dnl tell automake the this script is for rrdtool
10 dnl the official version number is
11 dnl a.b.c
12 AC_INIT([rrdtool],[1.3rc2])
14 dnl for testing a numberical version number comes handy
15 dnl the released version are
16 dnl a.bccc
17 dnl the devel versions will be something like
18 dnl a.b999yymmddhh
19 NUMVERS=1.299908051600
20 AC_SUBST(NUMVERS)
22 dnl for the linker to understand which version the library is compatible with
23 dnl we must keep a separate library version cout of the format c:r:a if any
24 dnl functionality is changed do c++ prior to release
25 dnl if only implementation changed but all interfaces are kept, do r++
26 dnl when only functionality was added, do a++ if any functionality was
27 dnl removed to a=0.
28 dnl
29 dnl see http://sourceware.org/autobook/autobook/autobook_91.html
30 dnl
31 LIBVERS=3:0:1
32 AC_SUBST(LIBVERS)
34 AC_CANONICAL_TARGET
35 AM_INIT_AUTOMAKE
36 AM_MAINTAINER_MODE
38 AC_CONFIG_HEADERS([rrd_config.h])
40 dnl all our local stuff like install scripts and include files
41 dnl is in there
44 dnl determine the type of system we are running on
46 AC_SUBST(VERSION)
48 AC_PREFIX_DEFAULT( /usr/local/rrdtool-$PACKAGE_VERSION )
50 dnl Minimum Autoconf version required.
51 AC_PREREQ(2.59)
53 dnl At the TOP of the HEADER
55 AH_TOP([
57 #ifndef RRD_CONFIG_H
58 #define RRD_CONFIG_H
59 /* IEEE can be prevented from raising signals with fpsetmask(0) */
60 #undef MUST_DISABLE_FPMASK
62 /* IEEE math only works if SIGFPE gets actively set to IGNORE */
64 #undef MUST_DISABLE_SIGFPE
66 /* realloc does not support NULL as argument */
67 #undef NO_NULL_REALLOC
69 /* lets enable madvise defines in NetBSD */
70 #if defined(__NetBSD__)
71 # if !defined(_NETBSD_SOURCE)
72 # define _NETBSD_SOURCE
73 # endif
74 #endif
76 ])
78 AH_BOTTOM([
79 /* make sure that we pickup the correct stuff from all headers */
80 #ifdef HAVE_FEATURES_H
81 #undef _XOPEN_SOURCE /* keep unmodified */
82 #undef _BSD_SOURCE /* keep unmodified */
83 #define _XOPEN_SOURCE 600
84 #define _BSD_SOURCE 1
85 # include <features.h>
86 #endif
88 /* FreeBSD 4.8 wants this included BEFORE sys/types.h */
89 #ifdef HAVE_SYS_MMAN_H
90 # include <sys/mman.h>
91 #endif
93 #ifdef HAVE_SYS_TYPES_H
94 # include <sys/types.h>
95 #endif
97 #ifdef HAVE_SYS_PARAM_H
98 # include <sys/param.h>
99 #endif
100 #ifndef MAXPATH
101 # ifdef PATH_MAX
102 # define MAXPATH PATH_MAX
103 # endif
104 #endif
105 #ifndef MAXPATH
106 /* else try the BSD variant */
107 # ifdef MAXPATHLEN
108 # define MAXPATH MAXPATHLEN
109 # endif
110 #endif
112 #ifdef HAVE_ERRNO_H
113 # include <errno.h>
114 #endif
116 #if !defined HAVE_MADVISE && defined HAVE_POSIX_MADVISE
117 /* use posix_madvise family */
118 # define madvise posix_madvise
119 # define MADV_NORMAL POSIX_MADV_NORMAL
120 # define MADV_RANDOM POSIX_MADV_RANDOM
121 # define MADV_SEQUENTIAL POSIX_MADV_SEQUENTIAL
122 # define MADV_WILLNEED POSIX_MADV_WILLNEED
123 # define MADV_DONTNEED POSIX_MADV_DONTNEED
124 #endif
125 #if defined HAVE_MADVISE || defined HAVE_POSIX_MADVISE
126 # define USE_MADVISE 1
127 #endif
129 #ifdef HAVE_SYS_STAT_H
130 # include <sys/stat.h>
131 #endif
133 #ifdef HAVE_FCNTL_H
134 #include <fcntl.h>
135 #endif
137 #ifdef HAVE_UNISTD_H
138 # include <unistd.h>
139 #endif
141 #ifdef TIME_WITH_SYS_TIME
142 # include <sys/time.h>
143 # include <time.h>
144 #else
145 # ifdef HAVE_SYS_TIME_H
146 # include <sys/time.h>
147 # else
148 # include <time.h>
149 # endif
150 #endif
152 #ifdef HAVE_SYS_TIMES_H
153 # include <sys/times.h>
154 #endif
156 #ifdef HAVE_SYS_RESOURCE_H
157 # include <sys/resource.h>
158 #if (defined(__svr4__) && defined(__sun__))
159 /* Solaris headers (pre 2.6) do not have a getrusage prototype.
160 Use this instead. */
161 extern int getrusage(int, struct rusage *);
162 #endif /* __svr4__ && __sun__ */
163 #endif
166 /* define strrchr, strchr and memcpy, memmove in terms of bsd funcs
167 make sure you are NOT using bcopy, index or rindex in the code */
169 #ifdef STDC_HEADERS
170 # include <string.h>
171 #else
172 # ifndef HAVE_STRCHR
173 # define strchr index
174 # define strrchr rindex
175 # endif
176 char *strchr (), *strrchr ();
177 # ifndef HAVE_MEMMOVE
178 # define memcpy(d, s, n) bcopy ((s), (d), (n))
179 # define memmove(d, s, n) bcopy ((s), (d), (n))
180 # endif
181 #endif
183 #ifdef NO_NULL_REALLOC
184 # define rrd_realloc(a,b) ( (a) == NULL ? malloc( (b) ) : realloc( (a) , (b) ))
185 #else
186 # define rrd_realloc(a,b) realloc((a), (b))
187 #endif
189 #ifdef NEED_MALLOC_MALLOC_H
190 # include <malloc/malloc.h>
191 #endif
193 #ifdef HAVE_STDIO_H
194 # include <stdio.h>
195 #endif
197 #ifdef HAVE_STDLIB_H
198 # include <stdlib.h>
199 #endif
201 #ifdef HAVE_CTYPE_H
202 # include <ctype.h>
203 #endif
205 #ifdef HAVE_DIRENT_H
206 # include <dirent.h>
207 # define NAMLEN(dirent) strlen((dirent)->d_name)
208 #else
209 # define dirent direct
210 # define NAMLEN(dirent) (dirent)->d_namlen
211 # ifdef HAVE_SYS_NDIR_H
212 # include <sys/ndir.h>
213 # endif
214 # ifdef HAVE_SYS_DIR_H
215 # include <sys/dir.h>
216 # endif
217 # ifdef HAVE_NDIR_H
218 # include <ndir.h>
219 # endif
220 #endif
222 #ifdef MUST_DISABLE_SIGFPE
223 # include <signal.h>
224 #endif
226 #ifdef MUST_DISABLE_FPMASK
227 # include <floatingpoint.h>
228 #endif
231 #ifdef HAVE_MATH_H
232 # include <math.h>
233 #endif
235 #ifdef HAVE_FLOAT_H
236 # include <float.h>
237 #endif
239 #ifdef HAVE_IEEEFP_H
240 # include <ieeefp.h>
241 #endif
243 #ifdef HAVE_FP_CLASS_H
244 # include <fp_class.h>
245 #endif
247 /* for Solaris */
248 #if (! defined(HAVE_ISINF) && defined(HAVE_FPCLASS))
249 # define HAVE_ISINF 1
250 # ifdef isinf
251 # undef isinf /* confuse autoconf */
252 # endif
253 # define isinf(a) (fpclass(a) == FP_NINF || fpclass(a) == FP_PINF)
254 #endif
256 /* solaris 10 it defines isnan such that only forte can compile it ... bad bad */
257 #if (defined(HAVE_ISNAN) && defined(isnan) && defined(HAVE_FPCLASS))
258 # undef isnan /* confuse autoconf to NOT remove this */
259 # define isnan(a) (fpclass(a) == FP_SNAN || fpclass(a) == FP_QNAN)
260 #endif
262 /* for OSF1 Digital Unix */
263 #if (! defined(HAVE_ISINF) && defined(HAVE_FP_CLASS) && defined(HAVE_FP_CLASS_H))
264 # define HAVE_ISINF 1
265 # define isinf(a) (fp_class(a) == FP_NEG_INF || fp_class(a) == FP_POS_INF)
266 #endif
268 #if (! defined(HAVE_ISINF) && defined(HAVE_FPCLASSIFY) && defined(FP_PLUS_INF) && defined(FP_MINUS_INF))
269 # define HAVE_ISINF 1
270 # define isinf(a) (fpclassify(a) == FP_MINUS_INF || fpclassify(a) == FP_PLUS_INF)
271 #endif
273 #if (! defined(HAVE_ISINF) && defined(HAVE_FPCLASSIFY) && defined(FP_INFINITE))
274 # define HAVE_ISINF 1
275 # define isinf(a) (fpclassify(a) == FP_INFINITE)
276 #endif
278 /* for AIX */
279 #if (! defined(HAVE_ISINF) && defined(HAVE_CLASS))
280 # define HAVE_ISINF 1
281 # define isinf(a) (class(a) == FP_MINUS_INF || class(a) == FP_PLUS_INF)
282 #endif
284 #if (! defined (HAVE_FINITE) && defined (HAVE_ISFINITE))
285 # define HAVE_FINITE 1
286 # define finite(a) isfinite(a)
287 #endif
289 #if (! defined(HAVE_FINITE) && defined(HAVE_ISNAN) && defined(HAVE_ISINF))
290 # define HAVE_FINITE 1
291 # define finite(a) (! isnan(a) && ! isinf(a))
292 #endif
294 #ifndef HAVE_FINITE
295 #error "Can't compile without finite function"
296 #endif
298 #ifndef HAVE_ISINF
299 #error "Can't compile without isinf function"
300 #endif
302 #if (! defined(HAVE_FDATASYNC) && defined(HAVE_FSYNC))
303 #define fdatasync fsync
304 #endif
306 #if (!defined(HAVE_FDATASYNC) && !defined(HAVE_FSYNC))
307 #error "Can't compile with without fsync and fdatasync"
308 #endif
310 #endif /* RRD_CONFIG_H */
311 ])
313 dnl Process Special Options
314 dnl -----------------------------------
316 dnl How the vertical axis label is printed
317 AC_ARG_VAR(RRDGRAPH_YLEGEND_ANGLE,
318 [Vertical label angle: -90.0 (default) or 90.0])
319 AC_DEFINE_UNQUOTED(RRDGRAPH_YLEGEND_ANGLE,${RRDGRAPH_YLEGEND_ANGLE:-90.0},
320 [Vertical label angle: -90.0 (default) or 90.0])
322 AC_ARG_ENABLE(rrdcgi,[ --disable-rrdcgi disable building of rrdcgi],
323 [],[enable_rrdcgi=yes])
325 dnl Check if we run on a system that has fonts
326 AC_ARG_WITH(rrd-default-font,
327 [ --with-rrd-default-font=[OPTIONS] set the full path to your default font.],
328 [RRD_DEFAULT_FONT=$withval],[
329 if test -d ${WINDIR:-nodir}/cour.ttf ; then
330 RRD_DEFAULT_FONT=`cd $WINDIR;pwd`/cour.ttf
331 else
332 RRD_DEFAULT_FONT='"DejaVu Sans Mono,Bitstream Vera Sans Mono,monospace,Courier"'
333 fi
334 ])
336 dnl Use mmap in rrd_update instead of seek+write
337 AC_ARG_ENABLE([mmap],
338 [ --disable-mmap disable mmap in rrd_update, use seek+write instead],
339 [],
340 [enable_mmap=yes])
342 AC_ARG_ENABLE(pthread,[ --disable-pthread disable multithread support],
343 [],[enable_pthread=yes])
345 AC_ARG_ENABLE(static-programs,
346 [ --enable-static-programs Build static programs],
347 [case "${enableval}" in
348 yes) staticprogs=yes ;;
349 no) staticprogs=no ;;
350 *) AC_MSG_ERROR(bad value ${enableval} for --enable-static-programs) ;;
351 esac],[staticprogs=no])
352 AM_CONDITIONAL(STATIC_PROGRAMS,[test "x$staticprogs" = "xyes"])
355 CONFIGURE_PART(Audit Compilation Environment)
358 dnl Check for the compiler and static/shared library creation.
359 AC_PROG_CC
360 AC_PROG_CPP
361 AC_PROG_LIBTOOL
363 dnl Try to detect/use GNU features
364 CFLAGS="$CFLAGS -D_GNU_SOURCE"
366 dnl which flags does the compiler support?
367 if test "x$GCC" = "xyes"; then
368 for flag in -fno-strict-aliasing -Wall -std=c99 -pedantic -Wundef -Wshadow -Wpointer-arith -Wcast-align -Wmissing-prototypes -Wmissing-declarations -Wnested-externs -Winline -Wold-style-definition -W; do
369 oCFLAGS="$CFLAGS"
370 CFLAGS="$CFLAGS $flag"
371 cachename=rd_cv_gcc_flag_`echo $flag|sed 's/[[^A-Za-z]]/_/g'`
372 AC_CACHE_CHECK([if gcc likes the $flag flag], $cachename,
373 [AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]], [[return 0 ]])],[eval $cachename=yes],[eval $cachename=no])])
374 if eval test \$$cachename = no; then
375 CFLAGS="$oCFLAGS"
376 fi
377 done
378 fi
382 AC_SUBST(RRD_DEFAULT_FONT)
384 CONFIGURE_PART(Checking for Header Files)
386 dnl Checks for header files.
387 AC_HEADER_STDC
388 AC_HEADER_DIRENT
389 AC_CHECK_HEADERS(features.h sys/stat.h sys/types.h fcntl.h locale.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)
391 dnl Checks for typedefs, structures, and compiler characteristics.
392 AC_C_CONST
393 AC_HEADER_TIME
394 AC_STRUCT_TM
396 CONFIGURE_PART(Test Library Functions)
398 dnl Checks for libraries.
399 AC_CHECK_FUNC(acos, , AC_CHECK_LIB(m, acos))
403 dnl add pic flag in any case this makes sure all our code is relocatable
404 eval `./libtool --config | grep pic_flag`
405 CFLAGS="$CFLAGS $pic_flag"
408 dnl Checks for library functions.
409 AC_FUNC_STRFTIME
410 AC_FUNC_VPRINTF
412 AC_C_BIGENDIAN
414 dnl for each function found we get a definition in config.h
415 dnl of the form HAVE_FUNCTION
417 AC_CHECK_FUNCS(tzset fsync mbstowcs opendir readdir chdir chroot getuid setlocale strerror strerror_r snprintf vsnprintf fpclass class fp_class isnan memmove strchr mktime getrusage gettimeofday)
419 CONFIGURE_PART(Map/Fadvis/Madvise checking)
421 dnl Could use these to know if we need to provide a prototype
422 dnl AC_CHECK_DECLS(fdatasync, [], [], [#include <unistd.h>])
424 dnl check for fdatasync. Solaris has fdatasync in the librt
426 AC_CHECK_FUNCS(fdatasync, [], AC_CHECK_LIB(rt, fdatasync, [LIBS="${LIBS} -lrt"; AC_DEFINE(HAVE_FDATASYNC)],[]))
427 dnl if there is no fdatasync we may get lucky with fsync
428 AC_CHECK_FUNCS(fsync)
431 dnl XXX: dunno about windows.. add AC_CHECK_FUNCS(munmap) there too?
432 if test "x$enable_mmap" = "xyes"; then
433 case "$host" in
434 *cygwin*)
435 # the normal mmap test does not work in cygwin
436 AC_CHECK_FUNCS(mmap)
437 if test "x$ac_cv_func_mmap" = "xyes"; then
438 ac_cv_func_mmap_fixed_mapped=yes
439 fi
440 ;;
441 *)
442 AC_CHECK_HEADERS(sys/mman.h)
443 AC_FUNC_MMAP
444 AC_CHECK_FUNCS(mmap munmap msync)
445 AC_CHECK_DECLS(madvise, [], [], [#ifdef HAVE_SYS_MMAN_H
446 # include <sys/mman.h>
447 #endif])
448 if test "x$ac_cv_have_decl_madvise" = "xyes";
449 then
450 AC_CHECK_FUNCS(madvise)
451 else
452 AC_CHECK_FUNCS(posix_madvise)
453 if test "x$ac_cv_func_posix_madvise" != "xyes"; then
454 AC_MSG_WARN([madvise() nor posix_madvise() found.])
455 fi
456 fi
457 ;;
458 esac
459 if test "x$ac_cv_func_mmap" != "xyes";
460 then
461 AC_MSG_ERROR([--enable-mmap requested but mmap() was not detected])
462 dnl enable_mmap="no"
463 fi
464 fi
466 dnl can we use posix_fadvise
467 AC_CHECK_DECLS(posix_fadvise, [], [], [#define _XOPEN_SOURCE 600
468 #include <fcntl.h>])
469 AC_CHECK_FUNCS(posix_fadvise)
471 CONFIGURE_PART(Libintl Processing)
474 dnl gettext
475 GETTEXT_PACKAGE=rrdtool
476 AC_SUBST(GETTEXT_PACKAGE)
477 AC_DEFINE_UNQUOTED(GETTEXT_PACKAGE,"$GETTEXT_PACKAGE",[Gettext package])
479 AM_GLIB_GNU_GETTEXT()
480 IT_PROG_INTLTOOL([0.35.0],[no-xml])
482 AC_ARG_ENABLE(libintl,[ --disable-libintl i18n support (libintl)],
483 [],[enable_libintl=yes])
485 if test x$enable_libintl = xyes; then
487 AC_CHECK_HEADERS(libintl.h,[],[AC_MSG_RESULT(disabeling libintl build); enable_libintl=no])
489 if test x$enable_libintl = xyes ; then
490 dnl it seems bsd synstems need to link against libintl
491 dnl when compiling rrdupdate. lets check
492 AC_CHECK_LIB(intl, libintl_gettext,[LIB_LIBINTL="-lintl"])
493 fi
494 fi
496 dnl use for linking rrdupdate
497 AC_SUBST(LIB_LIBINTL)
499 dnl do not touch the po stuff if we are not going to build intl
500 AM_CONDITIONAL(BUILD_LIBINTL,[test x$enable_libintl = xyes])
503 CONFIGURE_PART(IEEE Math Checks)
506 dnl actual code to check if this works
507 AC_CHECK_FUNCS(fpclassify, ,
508 [AC_MSG_CHECKING(for fpclassify with <math.h>)
509 AC_LINK_IFELSE([AC_LANG_PROGRAM([[#include <math.h>
510 volatile int x;volatile float f; ]], [[x = fpclassify(f)]])],[AC_MSG_RESULT(yes)
511 AC_DEFINE(HAVE_FPCLASSIFY,1)],[AC_MSG_RESULT(no)])])
513 AC_CHECK_FUNCS(isinf, ,
514 [AC_MSG_CHECKING(for isinf with <math.h>)
515 AC_LINK_IFELSE([AC_LANG_PROGRAM([[#include <math.h>
516 volatile int x;volatile float f; ]], [[x = isinf(f)]])],[AC_MSG_RESULT(yes)
517 AC_DEFINE(HAVE_ISINF)],[AC_MSG_RESULT(no)])])
519 dnl finite is BSD, isfinite is C99, so prefer the latter
520 AC_CACHE_CHECK([whether isfinite is broken],[have_broken_isfinite],[
521 AC_TRY_RUN([
522 #ifdef HAVE_MATH_H
523 #include <math.h>
524 #endif
525 #ifdef HAVE_FLOAT_H
526 #include <float.h>
527 #endif
528 int main ()
529 {
530 #ifdef isfinite
531 #ifdef LDBL_MAX
532 if (!isfinite(LDBL_MAX)) return 1;
533 #endif
534 #ifdef DBL_MAX
535 if (!isfinite(DBL_MAX)) return 1;
536 #endif
537 #endif
538 return 0;
539 }],[
540 have_broken_isfinite=no],have_broken_isfinite=yes,[
541 case "${target}" in
542 hppa*-*-hpux*) have_broken_isfinite=yes ;;
543 *) have_broken_isfinite=no ;;
544 esac])
545 ])
546 if test "x$have_broken_isfinite" = "xno"; then
547 AC_DEFINE(HAVE_ISFINITE)
548 else
549 AC_CHECK_FUNCS(finite,[],
550 [AC_CHECK_FUNCS(isfinite,[],
551 [AC_MSG_CHECKING(for isfinite with <math.h>)
552 AC_LINK_IFELSE([AC_LANG_PROGRAM([[#include <math.h>
553 volatile int x;volatile float f; ]],[[x = isfinite(f)]])],[AC_MSG_RESULT(yes)
554 AC_DEFINE(HAVE_ISFINITE)],[AC_MSG_RESULT(no)])])])
555 fi
557 AC_FULL_IEEE
559 CONFIGURE_PART(Resolve Portability Issues)
561 dnl what does realloc do if it gets called with a NULL pointer
563 AC_CACHE_CHECK([if realloc can deal with NULL], rd_cv_null_realloc,
564 [AC_RUN_IFELSE([AC_LANG_SOURCE([[#include <stdlib.h>
565 int main(void){
566 char *x = NULL;
567 x = realloc (x,10);
568 if (x==NULL) return 1;
569 return 0;
570 }]])],[rd_cv_null_realloc=yes],[rd_cv_null_realloc=nope],[:])])
572 if test x"$rd_cv_null_realloc" = xnope; then
573 AC_DEFINE(NO_NULL_REALLOC)
574 fi
576 AC_LANG_PUSH(C)
577 dnl solaris has some odd defines it needs in order to propperly compile ctime_r
578 AC_MSG_CHECKING([if ctime_r need special care to act posixly correct])
579 AC_LINK_IFELSE(
580 AC_LANG_PROGRAM(
581 [[#include <time.h>]],
582 [[ctime_r(NULL,NULL,0)]]
583 ),
584 [ CPPFLAGS="$CPPFLAGS -D_POSIX_PTHREAD_SEMANTICS"
585 AC_LINK_IFELSE(
586 AC_LANG_PROGRAM(
587 [[#include <time.h>]],
588 [[ctime_r(NULL,NULL)]]
589 ),
590 [AC_MSG_RESULT([yes, this seems to be solaris style])],
591 [AC_MSG_ERROR([Can't figure how to compile ctime_r])]
592 )
593 ],
594 [ AC_LINK_IFELSE(
595 AC_LANG_PROGRAM(
596 [[#include <time.h>]],
597 [[ctime_r(NULL,NULL)]]
598 ),
599 [AC_MSG_RESULT(no)],
600 [AC_MSG_ERROR([Can't figure how to compile ctime_r])]
601 )
602 ]
603 )
604 AC_LANG_POP(C)
606 dnl Check for pthreads
607 dnl http://autoconf-archive.cryp.to/acx_pthread.m4
609 AC_SUBST(MULTITHREAD_CFLAGS)
610 AC_SUBST(MULTITHREAD_LDFLAGS)
612 if test $enable_pthread != no; then
613 ACX_PTHREAD([
614 MULTITHREAD_CFLAGS=$PTHREAD_CFLAGS
615 MULTITHREAD_LDFLAGS=$PTHREAD_LIBS
616 ],
617 [])
618 fi
620 dnl since we use lots of *_r functions all over the code we better
621 dnl make sure they are known
623 if test "x$x_rflag" != "xno"; then
624 CPPFLAGS="$CPPFLAGS $x_rflag"
625 fi
627 AM_CONDITIONAL(BUILD_MULTITHREAD,[test $enable_pthread != no])
629 AC_LANG_PUSH(C)
630 dnl see if we have to include malloc/malloc.h
631 AC_MSG_CHECKING([do we need malloc/malloc.h])
632 AC_LINK_IFELSE(
633 AC_LANG_PROGRAM(
634 [[#include <stdlib.h>]],
635 [[malloc(1)]]
636 ),
637 [ AC_MSG_RESULT([nope, works out of the box]) ],
638 [ AC_LINK_IFELSE(
639 AC_LANG_PROGRAM(
640 [[#include <stdlib.h>
641 #include <malloc/malloc.h>]],
642 [[malloc(1)]]
643 ),
644 [AC_DEFINE(NEED_MALLOC_MALLOC_H)
645 AC_MSG_RESULT([yes we do])],
646 [AC_MSG_ERROR([Can not figure how to compile malloc])]
647 )
648 ]
649 )
650 AC_LANG_POP(C)
652 CONFIGURE_PART(Find 3rd-Party Libraries)
655 AM_CONDITIONAL(BUILD_RRDCGI,[test $enable_rrdcgi != no])
658 CORE_LIBS="$LIBS"
660 dnl EX_CHECK_ALL(z, zlibVersion, zlib.h, zlib, 1.2.3, http://www.gzip.org/zlib/, "")
661 dnl EX_CHECK_ALL(png, png_access_version_number, png.h, libpng, 1.2.10, http://prdownloads.sourceforge.net/libpng/, "")
662 dnl EX_CHECK_ALL(freetype, FT_Init_FreeType, ft2build.h, freetype2, 2.1.10, http://prdownloads.sourceforge.net/freetype/, /usr/include/freetype2)
663 dnl EX_CHECK_ALL(fontconfig, FcInit, fontconfig.h, fontconfig, 2.3.1, http://fontconfig.org/release/, /usr/include)
664 EX_CHECK_ALL(cairo, cairo_font_options_create, cairo.h, cairo-png, 1.4.6, http://cairographics.org/releases/, "")
665 EX_CHECK_ALL(cairo, cairo_svg_surface_create, cairo-svg.h, cairo-svg, 1.4.6, http://cairographics.org/releases/, "")
666 EX_CHECK_ALL(cairo, cairo_pdf_surface_create, cairo-pdf.h, cairo-pdf, 1.4.6, http://cairographics.org/releases/, "")
667 EX_CHECK_ALL(cairo, cairo_ps_surface_create, cairo-ps.h, cairo-ps, 1.4.6, http://cairographics.org/releases/, "")
668 dnl EX_CHECK_ALL(glib-2.0, glib_check_version, glib.h, glib-2.0, 2.12.12, ftp://ftp.gtk.org/pub/glib/2.12/, "")
669 EX_CHECK_ALL(pango-1.0, pango_cairo_context_set_font_options, pango/pango.h, pangocairo, 1.17, http://ftp.gnome.org/pub/GNOME/sources/pango/1.17, "")
670 EX_CHECK_ALL(xml2, xmlParseFile, libxml/parser.h, libxml-2.0, 2.6.31, http://xmlsoft.org/downloads.html, /usr/include/libxml2)
672 if test "$EX_CHECK_ALL_ERR" = "YES"; then
673 AC_MSG_ERROR([Please fix the library issues listed above and try again.])
674 fi
676 ALL_LIBS="$LIBS"
677 LIBS=
679 AC_SUBST(CORE_LIBS)
680 AC_SUBST(ALL_LIBS)
682 CONFIGURE_PART(Prep for Building Language Bindings)
684 dnl Check for Perl and friends
685 PATH=$PATH:/usr/perl5/bin
686 export PATH
687 AC_PATH_PROG(PERL, perl, no)
688 AC_PATH_PROG(POD2MAN, pod2man, no)
689 AC_PATH_PROG(POD2HTML, pod2html, no)
692 AC_ARG_ENABLE(perl,[ --disable-perl do not build the perl modules],
693 [],[enable_perl=yes])
696 AC_ARG_VAR(PERLCC, [[] C compiler for Perl modules])
697 AC_ARG_VAR(PERLCCFLAGS, [[] CC flags for Perl modules])
698 AC_ARG_VAR(PERLLD, [[same as PERLCC] Linker for Perl modules])
699 AC_ARG_VAR(PERLLDFLAGS, [[] LD flags for Perl modules])
701 if test "x$PERL" = "xno" -o x$enable_perl = xno; then
702 COMP_PERL=
703 else
704 COMP_PERL="perl_piped perl_shared"
705 AC_MSG_CHECKING(for the perl version you are running)
706 PERL_VERSION=`$PERL -MConfig -e 'print $Config{version}'`
707 AC_MSG_RESULT($PERL_VERSION)
708 if test -z "$PERLCC"; then
709 AC_MSG_CHECKING(for the C compiler perl wants to use to build its modules)
710 perlcc=`$PERL -MConfig -e 'print $Config{cc}'`
711 AC_MSG_RESULT($perlcc)
712 if test ! -x "$perlcc"; then
713 AC_PATH_PROG(PERL_CC, ${perlcc}, no)
714 if test "$PERL_CC" = "no"; then
715 AC_MSG_WARN([
716 I would not find the Compiler ($perlcc) that was originally used to compile
717 your perl binary. You should either make sure that this compiler is
718 available on your system, pick an other compiler and set PERLCC
719 appropriately, or use a different perl setup that was compiled locally.
721 I will disable the compilation of the RRDs perl module for now.
722 ])
723 COMP_PERL="perl_piped"
724 fi
725 fi
726 fi
727 fi
729 AC_MSG_CHECKING(Perl Modules to build)
730 AC_MSG_RESULT(${COMP_PERL:-No Perl Modules will be built})
732 # Options to pass when configuring perl module
733 ppref=$prefix
734 test "$ppref" = "NONE" && ppref=$ac_default_prefix
736 PERL_MAKE_OPTIONS="PREFIX=$ppref LIB=$ppref/lib/perl/$PERL_VERSION"
738 dnl pass additional perl options when generating Makefile from Makefile.PL
739 AC_ARG_ENABLE(perl-site-install,
740 [ --enable-perl-site-install by default the rrdtool perl modules are installed
741 together with rrdtool in $prefix/lib/perl. You have to
742 put a 'use lib qw($prefix/lib/perl)' into your scripts
743 when you want to use them. When you set this option
744 the perl modules will get installed wherever
745 your perl setup thinks it is best.],
746 [PERL_MAKE_OPTIONS=],[])
748 if test ! -z "$PERLCC"; then
749 PERL_MAKE_OPTIONS="$PERL_MAKE_OPTIONS CC=$PERLCC"
751 if test ! -z "$PERLCCFLAGS"; then
752 PERL_MAKE_OPTIONS="$PERL_MAKE_OPTIONS CCFLAGS=$PERLCCFLAGS"
753 fi
755 if test -z "$PERLLD"; then
756 PERLLD=$PERLCC
757 fi
758 PERL_MAKE_OPTIONS="$PERL_MAKE_OPTIONS LD=$PERLLD"
760 if test ! -z "$PERLLDFLAGS"; then
761 PERL_MAKE_OPTIONS="$PERL_MAKE_OPTIONS LDFLAGS=$PERLLDFLAGS"
762 fi
763 fi
765 AC_ARG_WITH(perl-options,
766 [ --with-perl-options=[OPTIONS] options to pass on command-line when
767 generating Makefile from Makefile.PL. If you set this
768 option, interesting things may happen unless you know
769 what you are doing!],
770 [PERL_MAKE_OPTIONS=$withval])
772 AC_SUBST(PERL_MAKE_OPTIONS)
773 AC_SUBST(PERL)
774 AC_SUBST(COMP_PERL)
775 AC_SUBST(PERL_VERSION)
777 dnl Check for Ruby.
778 AC_PATH_PROG(RUBY, ruby, no)
780 AC_ARG_ENABLE(ruby,[ --disable-ruby do not build the ruby modules],
781 [],[enable_ruby=yes])
783 AC_MSG_CHECKING(if ruby modules can be built)
785 if test "x$RUBY" = "xno" -o x$enable_ruby = xno; then
786 COMP_RUBY=
787 AC_MSG_RESULT(No .. Ruby not found or disabled)
788 else
789 if $RUBY -e 'require "mkmf"' >/dev/null 2>&1; then
790 COMP_RUBY="ruby"
791 AC_MSG_RESULT(YES)
792 else
793 COMP_RUBY=
794 AC_MSG_RESULT(Ruby found but mkmf is missing! Install the -dev package)
795 fi
796 fi
799 dnl pass additional ruby options when generating Makefile from Makefile.PL
800 AC_ARG_ENABLE(ruby-site-install,
801 [ --enable-ruby-site-install by default the rrdtool ruby modules are installed
802 together with rrdtool in $prefix/lib/ruby. You have to
803 add $prefix/lib/ruby/$ruby_version/$sitearch to you $: variable
804 for ruby to find the RRD.so file.],
805 [RUBY_MAKE_OPTIONS=],[RUBY_MAKE_OPTIONS="sitedir="'$(DESTDIR)'"$prefix/lib/ruby"])
808 AC_ARG_WITH(ruby-options,
809 [ --with-ruby-options=[OPTIONS] options to pass on command-line when
810 generating Makefile from extconf.rb. If you set this
811 option, interesting things may happen unless you know
812 what you are doing!],
813 [RUBY_MAKE_OPTIONS=$withval])
815 AC_SUBST(RUBY_MAKE_OPTIONS)
816 AC_SUBST(RUBY)
817 AC_SUBST(COMP_RUBY)
820 enable_tcl_site=no
822 AC_ARG_ENABLE(tcl,[ --disable-tcl do not build the tcl modules],
823 [],[enable_tcl=yes])
825 if test "$enable_tcl" = "yes"; then
826 dnl Check for Tcl.
827 withval=""
828 AC_ARG_WITH(tcllib,[ --with-tcllib=DIR location of the tclConfig.sh])
829 enable_tcl=no
830 for dir in $withval /usr/lib /usr/local/lib /usr/lib/tcl8.4 /usr/lib/tcl8.3 ; do
831 AC_MSG_CHECKING(for tclConfig.sh in $dir)
832 if test -f "$dir/tclConfig.sh" ; then
833 tcl_config=$dir/tclConfig.sh
834 enable_tcl=yes
835 AC_MSG_RESULT(yes)
836 break
837 else
838 AC_MSG_RESULT(no)
839 fi
840 done
842 if test "$enable_tcl" = "no"; then
843 AC_MSG_WARN([tclConfig.sh not found - Tcl interface will not be built])
844 else
845 . $tcl_config
846 TCL_PACKAGE_DIR="$TCL_PACKAGE_PATH/tclrrd$VERSION"
847 fi
848 AC_ARG_ENABLE(tcl,[ --enable-tcl-site install the tcl extension in the tcl tree],
849 [],[enable_tcl_site=yes])
851 fi
853 AM_CONDITIONAL(BUILD_TCL, test "$enable_tcl" = "yes" )
854 AM_CONDITIONAL(BUILD_TCL_SITE, test "$enable_tcl_site" = "yes" )
857 AC_SUBST(TCL_PREFIX)
858 AC_SUBST(TCL_SHLIB_CFLAGS)
859 AC_SUBST(TCL_SHLIB_LD)
860 AC_SUBST(TCL_SHLIB_SUFFIX)
861 AC_SUBST(TCL_PACKAGE_PATH)
862 AC_SUBST(TCL_LD_SEARCH_FLAGS)
863 AC_SUBST(TCL_STUB_LIB_SPEC)
864 AC_SUBST(TCL_VERSION)
865 AC_SUBST(TCL_PACKAGE_DIR)
866 AC_SUBST(TCL_INC_DIR)
868 AC_ARG_ENABLE(python,[ --disable-python do not build the python modules],
869 [],[enable_python=yes])
871 if test "$enable_python" = "yes"; then
872 dnl Check for python
873 AM_PATH_PYTHON(2.3,[],[enable_python=no])
874 AM_CHECK_PYTHON_HEADERS(,[enable_python=no;AC_MSG_WARN(could not find Python headers)])
875 fi
877 if test x$enable_python = xno; then
878 COMP_PYTHON=
879 else
880 COMP_PYTHON="python"
881 fi
883 AC_SUBST(COMP_PYTHON)
885 dnl Check for nroff
886 AC_PATH_PROGS(NROFF, gnroff nroff)
887 AC_PATH_PROGS(TROFF, groff troff)
889 AC_ARG_VAR(RRDDOCDIR, [[DATADIR/doc/PACKAGE-VERSION] Documentation directory])
890 if test -z "$RRDDOCDIR"; then
891 RRDDOCDIR='${datadir}/doc/${PACKAGE}-${VERSION}'; fi
894 CONFIGURE_PART(Apply Configuration Information)
896 AC_CONFIG_FILES([examples/shared-demo.pl])
897 AC_CONFIG_FILES([examples/piped-demo.pl])
898 AC_CONFIG_FILES([examples/stripes.pl])
899 AC_CONFIG_FILES([examples/bigtops.pl])
900 AC_CONFIG_FILES([examples/minmax.pl])
901 AC_CONFIG_FILES([examples/4charts.pl])
902 AC_CONFIG_FILES([examples/perftest.pl])
903 AC_CONFIG_FILES([examples/Makefile])
904 AC_CONFIG_FILES([doc/Makefile])
905 AC_CONFIG_FILES([po/Makefile.in])
906 AC_CONFIG_FILES([src/Makefile])
907 AC_CONFIG_FILES([bindings/Makefile])
908 AC_CONFIG_FILES([bindings/tcl/Makefile])
909 AC_CONFIG_FILES([bindings/tcl/ifOctets.tcl])
910 AC_CONFIG_FILES([Makefile])
912 AC_CONFIG_COMMANDS([default],[[ chmod +x examples/*.pl]],[[]])
913 AC_OUTPUT
915 AC_MSG_CHECKING(in)
916 AC_MSG_RESULT(and out again)
918 echo $ECHO_N "ordering CD from http://tobi.oetiker.ch/wish $ECHO_C" 1>&6
919 sleep 1
920 echo $ECHO_N ".$ECHO_C" 1>&6
921 sleep 1
922 echo $ECHO_N ".$ECHO_C" 1>&6
923 sleep 1
924 echo $ECHO_N ".$ECHO_C" 1>&6
925 sleep 1
926 echo $ECHO_N ".$ECHO_C" 1>&6
927 sleep 1
928 AC_MSG_RESULT([ just kidding ;-)])
929 echo
930 echo "----------------------------------------------------------------"
931 echo "Config is DONE!"
932 echo
933 echo " With MMAP IO: $enable_mmap"
934 echo " Static programs: $staticprogs"
935 echo " Perl Modules: $COMP_PERL"
936 echo " Perl Binary: $PERL"
937 echo " Perl Version: $PERL_VERSION"
938 echo " Perl Options: $PERL_MAKE_OPTIONS"
939 echo " Ruby Modules: $COMP_RUBY"
940 echo " Ruby Binary: $RUBY"
941 echo " Ruby Options: $RUBY_MAKE_OPTIONS"
942 echo " Build Tcl Bindings: $enable_tcl"
943 echo " Build Python Bindings: $enable_python"
944 echo " Build rrdcgi: $enable_rrdcgi"
945 echo " Build librrd MT: $enable_pthread"
946 echo " Link with libintl: $enable_libintl"
947 echo
948 echo " Libraries: $ALL_LIBS"
949 echo
950 echo "Type 'make' to compile the software and use 'make install' to "
951 echo "install everything to: $prefix."
952 echo
953 echo " ... that wishlist is NO JOKE. If you find RRDtool useful"
954 echo "make me happy. Go to http://tobi.oetiker.ch/wish and"
955 echo "place an order."
956 echo
957 echo " -- Tobi Oetiker <tobi@oetiker.ch>"
958 echo "----------------------------------------------------------------"