prepare for the release of rrdtool-1.3rc2
[rrdtool.git] / configure.ac
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
7  
8 dnl tell automake the this script is for rrdtool
9
10 dnl the official version number is
11 dnl a.b.c
12 AC_INIT([rrdtool],[1.3rc2])
13
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)
21
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)
33
34 AC_CANONICAL_TARGET
35 AM_INIT_AUTOMAKE
36 AM_MAINTAINER_MODE
37
38 AC_CONFIG_HEADERS([rrd_config.h])
39
40 dnl all our local stuff like install scripts and include files
41 dnl is in there
42
43
44 dnl determine the type of system we are running on
45
46 AC_SUBST(VERSION)
47
48 AC_PREFIX_DEFAULT( /usr/local/rrdtool-$PACKAGE_VERSION )
49
50 dnl Minimum Autoconf version required.
51 AC_PREREQ(2.59)
52
53 dnl At the TOP of the HEADER
54
55 AH_TOP([
56
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
61
62 /* IEEE math only works if SIGFPE gets actively set to IGNORE */
63
64 #undef MUST_DISABLE_SIGFPE
65
66 /* realloc does not support NULL as argument */
67 #undef NO_NULL_REALLOC
68
69 /* lets enable madvise defines in NetBSD */ 
70 #if defined(__NetBSD__)
71 # if !defined(_NETBSD_SOURCE)
72 #  define _NETBSD_SOURCE
73 # endif
74 #endif
75
76  ])
77
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
87
88 /* FreeBSD 4.8 wants this included BEFORE sys/types.h */
89 #ifdef HAVE_SYS_MMAN_H
90 # include <sys/mman.h>
91 #endif
92
93 #ifdef HAVE_SYS_TYPES_H
94 # include <sys/types.h>
95 #endif
96
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
111
112 #ifdef HAVE_ERRNO_H
113 # include <errno.h>
114 #endif
115
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
128
129 #ifdef HAVE_SYS_STAT_H
130 # include <sys/stat.h>
131 #endif
132
133 #ifdef HAVE_FCNTL_H
134 #include <fcntl.h>
135 #endif
136
137 #ifdef HAVE_UNISTD_H
138 # include <unistd.h>
139 #endif
140
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
151
152 #ifdef HAVE_SYS_TIMES_H
153 # include <sys/times.h>
154 #endif
155
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
164
165
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 */
168       
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
182
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
188
189 #ifdef NEED_MALLOC_MALLOC_H
190 #  include <malloc/malloc.h>
191 #endif
192
193 #ifdef HAVE_STDIO_H
194 # include <stdio.h>
195 #endif
196
197 #ifdef HAVE_STDLIB_H
198 # include <stdlib.h>
199 #endif
200
201 #ifdef HAVE_CTYPE_H
202 # include <ctype.h>
203 #endif
204
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
221
222 #ifdef MUST_DISABLE_SIGFPE
223 # include <signal.h>
224 #endif
225
226 #ifdef MUST_DISABLE_FPMASK
227 # include <floatingpoint.h>
228 #endif
229
230
231 #ifdef HAVE_MATH_H
232 # include <math.h>
233 #endif
234
235 #ifdef HAVE_FLOAT_H
236 # include <float.h>
237 #endif
238
239 #ifdef HAVE_IEEEFP_H
240 # include <ieeefp.h>
241 #endif
242
243 #ifdef HAVE_FP_CLASS_H
244 # include <fp_class.h>
245 #endif
246
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
255
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
261
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
267
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
272
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
277
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
283
284 #if (! defined (HAVE_FINITE) && defined (HAVE_ISFINITE))
285 #  define HAVE_FINITE 1
286 #  define finite(a) isfinite(a)
287 #endif
288
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
293
294 #ifndef HAVE_FINITE
295 #error "Can't compile without finite function"
296 #endif
297
298 #ifndef HAVE_ISINF
299 #error "Can't compile without isinf function"
300 #endif
301
302 #if (! defined(HAVE_FDATASYNC) && defined(HAVE_FSYNC))
303 #define fdatasync fsync
304 #endif
305
306 #if (!defined(HAVE_FDATASYNC) && !defined(HAVE_FSYNC))
307 #error "Can't compile with without fsync and fdatasync"
308 #endif
309
310 #endif /* RRD_CONFIG_H */
311 ])
312
313 dnl Process Special Options
314 dnl -----------------------------------
315
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])
321
322 AC_ARG_ENABLE(rrdcgi,[  --disable-rrdcgi        disable building of rrdcgi],
323 [],[enable_rrdcgi=yes])
324
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 ])
335
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])
341
342 AC_ARG_ENABLE(pthread,[  --disable-pthread       disable multithread support],
343 [],[enable_pthread=yes])
344
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"])
353
354
355 CONFIGURE_PART(Audit Compilation Environment)
356
357
358 dnl Check for the compiler and static/shared library creation.
359 AC_PROG_CC
360 AC_PROG_CPP
361 AC_PROG_LIBTOOL
362
363 dnl Try to detect/use GNU features
364 CFLAGS="$CFLAGS -D_GNU_SOURCE"
365
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
379
380
381
382 AC_SUBST(RRD_DEFAULT_FONT)
383
384 CONFIGURE_PART(Checking for Header Files)
385  
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)
390
391 dnl Checks for typedefs, structures, and compiler characteristics.
392 AC_C_CONST
393 AC_HEADER_TIME
394 AC_STRUCT_TM
395
396 CONFIGURE_PART(Test Library Functions)
397
398 dnl Checks for libraries.
399 AC_CHECK_FUNC(acos, , AC_CHECK_LIB(m, acos))
400
401
402
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"
406
407
408 dnl Checks for library functions.
409 AC_FUNC_STRFTIME
410 AC_FUNC_VPRINTF
411
412 AC_C_BIGENDIAN
413
414 dnl for each function found we get a definition in config.h 
415 dnl of the form HAVE_FUNCTION
416
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)
418
419 CONFIGURE_PART(Map/Fadvis/Madvise checking)
420
421 dnl Could use these to know if we need to provide a prototype
422 dnl AC_CHECK_DECLS(fdatasync, [], [], [#include <unistd.h>])
423
424 dnl check for fdatasync. Solaris has fdatasync in the librt
425
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)
429
430
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
465
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)
470
471 CONFIGURE_PART(Libintl Processing)
472
473
474 dnl gettext
475 GETTEXT_PACKAGE=rrdtool
476 AC_SUBST(GETTEXT_PACKAGE)
477 AC_DEFINE_UNQUOTED(GETTEXT_PACKAGE,"$GETTEXT_PACKAGE",[Gettext package])
478
479 AM_GLIB_GNU_GETTEXT()
480 IT_PROG_INTLTOOL([0.35.0],[no-xml])
481
482 AC_ARG_ENABLE(libintl,[  --disable-libintl        i18n support (libintl)],
483 [],[enable_libintl=yes])
484
485 if test x$enable_libintl = xyes; then
486
487   AC_CHECK_HEADERS(libintl.h,[],[AC_MSG_RESULT(disabeling libintl build); enable_libintl=no])
488
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
495
496 dnl use for linking rrdupdate
497 AC_SUBST(LIB_LIBINTL)
498
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])
501
502
503 CONFIGURE_PART(IEEE Math Checks)
504  
505
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)])])
512
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)])])
518
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
556
557 AC_FULL_IEEE
558
559 CONFIGURE_PART(Resolve Portability Issues)
560
561 dnl what does realloc do if it gets called with a NULL pointer
562
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],[:])])
571
572 if test x"$rd_cv_null_realloc" = xnope; then
573 AC_DEFINE(NO_NULL_REALLOC)
574 fi
575
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)
605
606 dnl Check for pthreads
607 dnl http://autoconf-archive.cryp.to/acx_pthread.m4
608  
609 AC_SUBST(MULTITHREAD_CFLAGS)
610 AC_SUBST(MULTITHREAD_LDFLAGS)
611
612 if test $enable_pthread != no; then 
613  ACX_PTHREAD([
614     MULTITHREAD_CFLAGS=$PTHREAD_CFLAGS
615     MULTITHREAD_LDFLAGS=$PTHREAD_LIBS
616              ],
617              [])
618 fi
619
620 dnl since we use lots of *_r functions all over the code we better
621 dnl make sure they are known
622
623 if test  "x$x_rflag" != "xno"; then
624    CPPFLAGS="$CPPFLAGS $x_rflag"
625 fi
626
627 AM_CONDITIONAL(BUILD_MULTITHREAD,[test $enable_pthread != no])
628
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)
651
652 CONFIGURE_PART(Find 3rd-Party Libraries)
653
654
655 AM_CONDITIONAL(BUILD_RRDCGI,[test $enable_rrdcgi != no])
656
657
658 CORE_LIBS="$LIBS"
659
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)
671
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
675
676 ALL_LIBS="$LIBS"
677 LIBS=
678
679 AC_SUBST(CORE_LIBS)
680 AC_SUBST(ALL_LIBS)
681
682 CONFIGURE_PART(Prep for Building Language Bindings)
683   
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)
690
691
692 AC_ARG_ENABLE(perl,[  --disable-perl          do not build the perl modules],
693 [],[enable_perl=yes])
694
695
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])
700
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.
720
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
728
729 AC_MSG_CHECKING(Perl Modules to build)
730 AC_MSG_RESULT(${COMP_PERL:-No Perl Modules will be built})
731
732 # Options to pass when configuring perl module
733 ppref=$prefix
734 test "$ppref" = "NONE" && ppref=$ac_default_prefix
735
736 PERL_MAKE_OPTIONS="PREFIX=$ppref LIB=$ppref/lib/perl/$PERL_VERSION"
737
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=],[])
747
748 if test ! -z "$PERLCC"; then
749    PERL_MAKE_OPTIONS="$PERL_MAKE_OPTIONS CC=$PERLCC"
750
751    if test ! -z "$PERLCCFLAGS"; then
752        PERL_MAKE_OPTIONS="$PERL_MAKE_OPTIONS CCFLAGS=$PERLCCFLAGS"
753    fi
754    
755    if test -z "$PERLLD"; then
756        PERLLD=$PERLCC
757    fi
758    PERL_MAKE_OPTIONS="$PERL_MAKE_OPTIONS LD=$PERLLD"
759   
760    if test ! -z "$PERLLDFLAGS"; then
761        PERL_MAKE_OPTIONS="$PERL_MAKE_OPTIONS LDFLAGS=$PERLLDFLAGS"
762    fi
763 fi
764         
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])
771
772 AC_SUBST(PERL_MAKE_OPTIONS)
773 AC_SUBST(PERL)
774 AC_SUBST(COMP_PERL)
775 AC_SUBST(PERL_VERSION)
776
777 dnl Check for Ruby.
778 AC_PATH_PROG(RUBY, ruby, no)
779
780 AC_ARG_ENABLE(ruby,[  --disable-ruby          do not build the ruby modules],
781 [],[enable_ruby=yes])
782
783 AC_MSG_CHECKING(if ruby modules can be built)
784
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
797
798
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"])
806
807     
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])
814
815 AC_SUBST(RUBY_MAKE_OPTIONS)
816 AC_SUBST(RUBY)
817 AC_SUBST(COMP_RUBY)
818
819
820 enable_tcl_site=no
821
822 AC_ARG_ENABLE(tcl,[  --disable-tcl           do not build the tcl modules],
823 [],[enable_tcl=yes])
824
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
841
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])
850
851 fi
852
853 AM_CONDITIONAL(BUILD_TCL, test "$enable_tcl" = "yes" )
854 AM_CONDITIONAL(BUILD_TCL_SITE, test "$enable_tcl_site" = "yes" )
855
856
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)
867
868 AC_ARG_ENABLE(python,[  --disable-python        do not build the python modules],
869 [],[enable_python=yes])
870
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
876
877 if test  x$enable_python = xno; then
878         COMP_PYTHON=
879 else
880         COMP_PYTHON="python"
881 fi
882
883 AC_SUBST(COMP_PYTHON)
884
885 dnl Check for nroff
886 AC_PATH_PROGS(NROFF, gnroff nroff)
887 AC_PATH_PROGS(TROFF, groff troff)
888
889 AC_ARG_VAR(RRDDOCDIR, [[DATADIR/doc/PACKAGE-VERSION] Documentation directory])
890 if test -z "$RRDDOCDIR"; then
891    RRDDOCDIR='${datadir}/doc/${PACKAGE}-${VERSION}'; fi
892
893
894 CONFIGURE_PART(Apply Configuration Information)
895  
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])          
911
912 AC_CONFIG_COMMANDS([default],[[ chmod +x examples/*.pl]],[[]])
913 AC_OUTPUT
914
915 AC_MSG_CHECKING(in)
916 AC_MSG_RESULT(and out again)
917
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 "----------------------------------------------------------------"