updated build instructions
[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 dnl the official version number is
10 dnl a.b.c
11 AC_INIT([rrdtool],[1.2.99907080300])
12 dnl for testing a numberical version number comes handy
13 dnl the released version are
14 dnl a.bccc
15 dnl the devel versions will be something like
16 dnl a.b999yymmddhh 
17 NUMVERS=1.299907080300
18 AC_SUBST(NUMVERS)
19 AC_CANONICAL_TARGET
20 AM_INIT_AUTOMAKE
21 AC_CONFIG_HEADERS([rrd_config.h])
22
23 dnl all our local stuff like install scripts and include files
24 dnl is in there
25
26
27 dnl determine the type of system we are running on
28
29 AC_SUBST(VERSION)
30
31 AC_PREFIX_DEFAULT( /usr/local/rrdtool-$PACKAGE_VERSION )
32
33 dnl Minimum Autoconf version required.
34 AC_PREREQ(2.59)
35
36 dnl At the TOP of the HEADER
37
38 AH_TOP([
39
40 #ifndef RRD_CONFIG_H
41 #define RRD_CONFIG_H
42 /* IEEE can be prevented from raising signals with fpsetmask(0) */
43 #undef MUST_DISABLE_FPMASK
44
45 /* IEEE math only works if SIGFPE gets actively set to IGNORE */
46
47 #undef MUST_DISABLE_SIGFPE
48
49 /* realloc does not support NULL as argument */
50 #undef NO_NULL_REALLOC
51
52  ])
53
54 AH_BOTTOM([
55 /* make sure that we pickup the correct stuff from all headers */
56 #define _XOPEN_SOURCE 600
57 #ifdef HAVE_FEATURES_H
58 # include <features.h>
59 #endif
60
61 #ifdef HAVE_SYS_TYPES_H
62 # include <sys/types.h>
63 #endif
64
65 #ifdef HAVE_SYS_PARAM_H
66 # include <sys/param.h>
67 #endif
68 #ifndef MAXPATH
69 # ifdef PATH_MAX
70 #  define MAXPATH PATH_MAX
71 # endif
72 #endif
73 #ifndef MAXPATH
74 /* else try the BSD variant */
75 # ifdef MAXPATHLEN
76 #  define MAXPATH MAXPATHLEN
77 # endif
78 #endif
79
80 #ifdef HAVE_ERRNO_H
81 # include <errno.h>
82 #endif
83
84 #ifdef HAVE_SYS_MMAN_H
85 # include <sys/mman.h>
86 #endif
87 #if !defined HAVE_MADVISE && defined HAVE_POSIX_MADVISE
88 /* use posix_madvise family */
89 # define madvise posix_madvise
90 # define MADV_NORMAL POSIX_MADV_NORMAL
91 # define MADV_RANDOM POSIX_MADV_RANDOM
92 # define MADV_SEQUENTIAL POSIX_MADV_SEQUENTIAL
93 # define MADV_WILLNEED POSIX_MADV_WILLNEED
94 # define MADV_DONTNEED POSIX_MADV_DONTNEED
95 #endif
96 #if defined HAVE_MADVISE || defined HAVE_POSIX_MADVISE
97 # define USE_MADVISE 1
98 #endif
99
100 #ifdef HAVE_SYS_STAT_H
101 # include <sys/stat.h>
102 #endif
103
104 #ifdef HAVE_FCNTL_H
105 #include <fcntl.h>
106 #endif
107
108 #ifdef HAVE_UNISTD_H
109 # include <unistd.h>
110 #endif
111
112 #ifdef TIME_WITH_SYS_TIME
113 # include <sys/time.h>
114 # include <time.h>
115 #else
116 # ifdef HAVE_SYS_TIME_H
117 #  include <sys/time.h>
118 # else
119 #  include <time.h>
120 # endif
121 #endif
122
123 #ifdef HAVE_SYS_TIMES_H
124 # include <sys/times.h>
125 #endif
126
127 #ifdef HAVE_SYS_RESOURCE_H
128 # include <sys/resource.h>
129 #if (defined(__svr4__) && defined(__sun__))
130 /* Solaris headers (pre 2.6) don't have a getrusage prototype.
131    Use this instead. */
132 extern int getrusage(int, struct rusage *);
133 #endif /* __svr4__ && __sun__ */
134 #endif
135
136
137 /* define strrchr, strchr and memcpy, memmove in terms of bsd funcs
138    make sure you are NOT using bcopy, index or rindex in the code */
139       
140 #ifdef STDC_HEADERS
141 # include <string.h>
142 #else
143 # ifndef HAVE_STRCHR
144 #  define strchr index
145 #  define strrchr rindex
146 # endif
147 char *strchr (), *strrchr ();
148 # ifndef HAVE_MEMMOVE
149 #  define memcpy(d, s, n) bcopy ((s), (d), (n))
150 #  define memmove(d, s, n) bcopy ((s), (d), (n))
151 # endif
152 #endif
153
154 #ifdef NO_NULL_REALLOC
155 # define rrd_realloc(a,b) ( (a) == NULL ? malloc( (b) ) : realloc( (a) , (b) ))
156 #else
157 # define rrd_realloc(a,b) realloc((a), (b))
158 #endif
159
160 #ifdef NEED_MALLOC_MALLOC_H
161 #  include <malloc/malloc.h>
162 #endif
163
164 #ifdef HAVE_STDIO_H
165 # include <stdio.h>
166 #endif
167
168 #ifdef HAVE_STDLIB_H
169 # include <stdlib.h>
170 #endif
171
172 #ifdef HAVE_CTYPE_H
173 # include <ctype.h>
174 #endif
175
176 #ifdef HAVE_DIRENT_H
177 # include <dirent.h>
178 # define NAMLEN(dirent) strlen((dirent)->d_name)
179 #else
180 # define dirent direct
181 # define NAMLEN(dirent) (dirent)->d_namlen
182 # ifdef HAVE_SYS_NDIR_H
183 #  include <sys/ndir.h>
184 # endif
185 # ifdef HAVE_SYS_DIR_H
186 #  include <sys/dir.h>
187 # endif
188 # ifdef HAVE_NDIR_H
189 #  include <ndir.h>
190 # endif
191 #endif
192
193 #ifdef MUST_DISABLE_SIGFPE
194 # include <signal.h>
195 #endif
196
197 #ifdef MUST_DISABLE_FPMASK
198 # include <floatingpoint.h>
199 #endif
200
201
202 #ifdef HAVE_MATH_H
203 # include <math.h>
204 #endif
205
206 #ifdef HAVE_FLOAT_H
207 # include <float.h>
208 #endif
209
210 #ifdef HAVE_IEEEFP_H
211 # include <ieeefp.h>
212 #endif
213
214 #ifdef HAVE_FP_CLASS_H
215 # include <fp_class.h>
216 #endif
217
218 /* for Solaris */
219 #if (! defined(HAVE_ISINF) && defined(HAVE_FPCLASS))
220 #  define HAVE_ISINF 1
221 #  define isinf(a) (fpclass(a) == FP_NINF || fpclass(a) == FP_PINF)
222 #endif
223
224 /* solaris 10 it defines isnan such that only forte can compile it ... bad bad  */
225 #if (defined(HAVE_ISNAN) && defined(isnan) && defined(HAVE_FPCLASS))
226 #  undef isnan
227 #  define isnan(a) (fpclass(a) == FP_SNAN || fpclass(a) == FP_QNAN)
228 #endif
229
230 /* for OSF1 Digital Unix */
231 #if (! defined(HAVE_ISINF) && defined(HAVE_FP_CLASS) && defined(HAVE_FP_CLASS_H))
232 #  define HAVE_ISINF 1
233 #  define isinf(a) (fp_class(a) == FP_NEG_INF || fp_class(a) == FP_POS_INF)
234 #endif
235
236 #if (! defined(HAVE_ISINF) && defined(HAVE_FPCLASSIFY) && defined(FP_PLUS_INF) && defined(FP_MINUS_INF))
237 #  define HAVE_ISINF 1
238 #  define isinf(a) (fpclassify(a) == FP_MINUS_INF || fpclassify(a) == FP_PLUS_INF)
239 #endif
240
241 #if (! defined(HAVE_ISINF) && defined(HAVE_FPCLASSIFY) && defined(FP_INFINITE))
242 #  define HAVE_ISINF 1
243 #  define isinf(a) (fpclassify(a) == FP_INFINITE)
244 #endif
245
246 /* for AIX */
247 #if (! defined(HAVE_ISINF) && defined(HAVE_CLASS))
248 #  define HAVE_ISINF 1
249 #  define isinf(a) (class(a) == FP_MINUS_INF || class(a) == FP_PLUS_INF)
250 #endif
251
252 #if (! defined (HAVE_FINITE) && defined (HAVE_ISFINITE))
253 #  define HAVE_FINITE 1
254 #  define finite(a) isfinite(a)
255 #endif
256
257 #if (! defined(HAVE_FINITE) && defined(HAVE_ISNAN) && defined(HAVE_ISINF))
258 #  define HAVE_FINITE 1
259 #  define finite(a) (! isnan(a) && ! isinf(a))
260 #endif
261
262 #ifndef HAVE_FINITE
263 #error "Can't compile without finite function"
264 #endif
265
266 #ifndef HAVE_ISINF
267 #error "Can't compile without isinf function"
268 #endif
269
270 #endif /* RRD_CONFIG_H */
271 ])
272
273 dnl Process Special Options
274 dnl -----------------------------------
275
276 dnl How the vertical axis label is printed
277 AC_ARG_VAR(RRDGRAPH_YLEGEND_ANGLE, 
278  [Vertical label angle: -90.0 (default) or 90.0])
279 AC_DEFINE_UNQUOTED(RRDGRAPH_YLEGEND_ANGLE,${RRDGRAPH_YLEGEND_ANGLE:-90.0},
280  [Vertical label angle: -90.0 (default) or 90.0])
281
282 AC_ARG_ENABLE(rrdcgi,[  --disable-rrdcgi        disable building of rrdcgi],
283 [],[enable_rrdcgi=yes])
284
285 dnl Check if we run on a system that has fonts
286 AC_ARG_WITH(rrd-default-font,
287 [  --with-rrd-default-font=[OPTIONS]  set the full path to your default font.],
288 [RRD_DEFAULT_FONT=$withval],[
289   if test -d ${WINDIR:-nodir}/cour.ttf ; then
290         RRD_DEFAULT_FONT=`cd $WINDIR;pwd`/cour.ttf
291   else
292         RRD_DEFAULT_FONT='"DejaVu Sans Mono,Bitstream Vera Sans Mono,monospace,Courier"'
293   fi
294 ])
295
296 dnl Use mmap in rrd_update instead of seek+write
297 AC_ARG_ENABLE([mmap],
298 [  --disable-mmap          disable mmap in rrd_update, use seek+write instead],
299 [],
300 [enable_mmap=yes])
301
302 AC_ARG_ENABLE(pthread,[  --disable-pthread       disable multithread support],
303 [],[enable_pthread=yes])
304
305 AC_ARG_ENABLE(static-programs,
306      [  --enable-static-programs  Build static programs],
307      [case "${enableval}" in
308        yes) staticprogs=yes ;;
309        no)  staticprogs=no ;;
310        *) AC_MSG_ERROR(bad value ${enableval} for --enable-static-programs) ;;
311      esac],[staticprogs=no])
312 AM_CONDITIONAL(STATIC_PROGRAMS,[test "x$staticprogs" = "xyes"])
313
314
315 CONFIGURE_PART(Audit Compilation Environment)
316
317
318 dnl Check for the compiler and static/shared library creation.
319 AC_PROG_CC
320 AC_PROG_CPP
321 AC_PROG_LIBTOOL
322
323 dnl Try to detect/use GNU features
324 CFLAGS="$CFLAGS -D_GNU_SOURCE"
325
326 dnl which flags does the compiler support?
327 if test "x$GCC" = "xyes"; then
328   for flag in -fno-strict-aliasing -Wall -std=c99 -pedantic -Wundef -Wshadow -Wpointer-arith -Wcast-align -Wmissing-prototypes -Wmissing-declarations -Wnested-externs -Winline -Wc++-compat -Wold-style-definition -W; do
329     oCFLAGS="$CFLAGS"
330     CFLAGS="$CFLAGS $flag"
331     cachename=rd_cv_gcc_flag_`echo $flag|sed 's/[[^A-Za-z]]/_/g'`
332     AC_CACHE_CHECK([if gcc likes the $flag flag], $cachename,
333        [AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]], [[return 0 ]])],[eval $cachename=yes],[eval $cachename=no])])
334     if eval test \$$cachename = no; then
335          CFLAGS="$oCFLAGS"
336     fi
337   done
338 fi
339
340
341
342 AC_SUBST(RRD_DEFAULT_FONT)
343
344 CONFIGURE_PART(Checking for Header Files)
345  
346 dnl Checks for header files.
347 AC_HEADER_STDC
348 AC_HEADER_DIRENT
349 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)
350
351 dnl Checks for typedefs, structures, and compiler characteristics.
352 AC_C_CONST
353 AC_HEADER_TIME
354 AC_STRUCT_TM
355
356 dnl Checks for libraries.
357 AC_CHECK_FUNC(acos, , AC_CHECK_LIB(m, acos))
358
359 dnl add pic flag in any case this makes sure all our code is relocatable
360 eval `./libtool --config | grep pic_flag`
361 CFLAGS="$CFLAGS $pic_flag"
362
363 CONFIGURE_PART(Test Library Functions)
364
365 dnl Checks for library functions.
366 AC_FUNC_STRFTIME
367 AC_FUNC_VPRINTF
368
369 AC_C_BIGENDIAN
370
371 dnl for each function found we get a definition in config.h 
372 dnl of the form HAVE_FUNCTION
373
374 AC_CHECK_FUNCS(tzset mbstowcs opendir readdir chdir chroot getuid setlocale strerror strerror_r snprintf vsnprintf fpclass class fp_class isnan memmove strchr mktime getrusage gettimeofday)
375
376 dnl Could use these to know if we need to provide a prototype
377 dnl AC_CHECK_DECLS(fdatasync, [], [], [#include <unistd.h>])
378
379 dnl XXX: dunno about windows.. add AC_CHECK_FUNCS(munmap) there too?
380 if test "x$enable_mmap" = "xyes"; then
381   case "$host" in
382   *cygwin*)
383     # the normal mmap test does not work in cygwin
384     AC_CHECK_FUNCS(mmap)
385     if test "x$ac_cv_func_mmap" = "xyes"; then
386       ac_cv_func_mmap_fixed_mapped=yes
387     fi
388   ;;
389   *)
390     AC_CHECK_HEADERS(sys/mman.h)
391     AC_FUNC_MMAP
392     AC_CHECK_FUNCS(mmap munmap msync)
393     AC_CHECK_DECLS(madvise, [], [], [#ifdef HAVE_SYS_MMAN_H
394                                      # include <sys/mman.h>
395                                      #endif])
396     if test "x$ac_cv_have_decl_madvise" = "xyes";
397     then
398       AC_CHECK_FUNCS(madvise)
399     else
400       AC_CHECK_FUNCS(posix_madvise)
401       if test "x$ac_cv_func_posix_madvise" != "xyes"; then
402         AC_MSG_WARN([madvise() nor posix_madvise() found.])
403       fi
404     fi
405   ;;
406   esac
407   if test "x$ac_cv_func_mmap" != "xyes";
408   then
409     AC_MSG_ERROR([--enable-mmap requested but mmap() was not detected])
410 dnl enable_mmap="no"
411   fi
412 fi
413
414 dnl can we use posix_fadvise
415 AC_CHECK_DECLS(posix_fadvise, [], [], [#define _XOPEN_SOURCE 600
416 #include <fcntl.h>])
417 AC_CHECK_FUNCS(posix_fadvise)
418
419
420
421 CONFIGURE_PART(IEEE Math Checks)
422  
423
424 dnl actual code to check if this works
425 AC_CHECK_FUNCS(fpclassify, ,
426   [AC_MSG_CHECKING(for fpclassify with <math.h>)
427     AC_LINK_IFELSE([AC_LANG_PROGRAM([[#include <math.h>
428 volatile int x;volatile float f; ]], [[x = fpclassify(f)]])],[AC_MSG_RESULT(yes)
429       AC_DEFINE(HAVE_FPCLASSIFY)],[AC_MSG_RESULT(no)])])
430
431 AC_CHECK_FUNCS(isinf, ,
432   [AC_MSG_CHECKING(for isinf with <math.h>)
433     AC_LINK_IFELSE([AC_LANG_PROGRAM([[#include <math.h>
434 volatile int x;volatile float f;  ]], [[x = isinf(f)]])],[AC_MSG_RESULT(yes)
435       AC_DEFINE(HAVE_ISINF)],[AC_MSG_RESULT(no)])])
436
437 dnl finite is BSD, isfinite is C99, so prefer the latter
438 AC_CACHE_CHECK([whether isfinite is broken],[have_broken_isfinite],[
439 AC_TRY_RUN([
440 #ifdef HAVE_MATH_H
441 #include <math.h>
442 #endif
443 #ifdef HAVE_FLOAT_H
444 #include <float.h>
445 #endif
446 int main ()
447 {
448 #ifdef isfinite
449 #ifdef LDBL_MAX
450   if (!isfinite(LDBL_MAX)) return 1;
451 #endif
452 #ifdef DBL_MAX
453   if (!isfinite(DBL_MAX)) return 1;
454 #endif
455 #endif
456 return 0;
457 }],[
458 have_broken_isfinite=no],have_broken_isfinite=yes,[
459 case "${target}" in
460   hppa*-*-hpux*) have_broken_isfinite=yes ;;
461   *) have_broken_isfinite=no ;;
462 esac])
463 ])
464 if test "x$have_broken_isfinite" = "xno"; then
465   AC_DEFINE(HAVE_ISFINITE)
466 else
467 AC_CHECK_FUNCS(finite,[],
468   [AC_CHECK_FUNCS(isfinite,[],
469       [AC_MSG_CHECKING(for isfinite with <math.h>)
470        AC_LINK_IFELSE([AC_LANG_PROGRAM([[#include <math.h>
471 volatile int x;volatile float f;  ]],[[x = isfinite(f)]])],[AC_MSG_RESULT(yes)
472                 AC_DEFINE(HAVE_ISFINITE)],[AC_MSG_RESULT(no)])])])
473 fi
474
475 AC_FULL_IEEE
476
477 CONFIGURE_PART(Resolve Portability Issues)
478
479 dnl what does realloc do if it gets called with a NULL pointer
480
481 AC_CACHE_CHECK([if realloc can deal with NULL], rd_cv_null_realloc,
482 [AC_RUN_IFELSE([AC_LANG_SOURCE([[#include <stdlib.h>
483               int main(void){
484               char *x = NULL;
485               x = realloc (x,10);
486               if (x==NULL) return 1;
487               return 0;
488              }]])],[rd_cv_null_realloc=yes],[rd_cv_null_realloc=nope],[:])])
489
490 if test x"$rd_cv_null_realloc" = xnope; then
491 AC_DEFINE(NO_NULL_REALLOC)
492 fi
493
494 AC_LANG_PUSH(C)
495 dnl solaris has some odd defines it needs in order to propperly compile ctime_r
496 AC_MSG_CHECKING([if ctime_r need special care to act posixly correct])
497 AC_LINK_IFELSE(
498     AC_LANG_PROGRAM(
499            [[#include <time.h>]],
500            [[ctime_r(NULL,NULL,0)]]
501                    ),
502     [ CPPFLAGS="$CPPFLAGS -D_POSIX_PTHREAD_SEMANTICS"
503       AC_LINK_IFELSE(
504           AC_LANG_PROGRAM(
505                 [[#include <time.h>]],
506                 [[ctime_r(NULL,NULL)]]
507                          ),
508           [AC_MSG_RESULT([yes, this seems to be solaris style])],
509           [AC_MSG_ERROR([Can't figure how to compile ctime_r])]
510       )
511     ],  
512     [ AC_LINK_IFELSE(
513           AC_LANG_PROGRAM(
514                 [[#include <time.h>]],
515                 [[ctime_r(NULL,NULL)]]
516                          ),
517           [AC_MSG_RESULT(no)],
518           [AC_MSG_ERROR([Can't figure how to compile ctime_r])]
519       )
520     ]  
521 )
522 AC_LANG_POP(C)
523
524 dnl Check for pthreads
525 dnl http://autoconf-archive.cryp.to/acx_pthread.m4
526  
527 AC_SUBST(MULTITHREAD_CFLAGS)
528 AC_SUBST(MULTITHREAD_LDFLAGS)
529
530 if test $enable_pthread != no; then 
531  ACX_PTHREAD([
532     MULTITHREAD_CFLAGS=$PTHREAD_CFLAGS
533     MULTITHREAD_LDFLAGS=$PTHREAD_LIBS
534              ],
535              [])
536 fi
537
538 dnl since we use lots of *_r functions all over the code we better
539 dnl make sure they are known
540
541 if test  "x$x_rflag" != "xno"; then
542    CPPFLAGS="$CPPFLAGS $x_rflag"
543 fi
544
545 AM_CONDITIONAL(BUILD_MULTITHREAD,[test $enable_pthread != no])
546
547 AC_LANG_PUSH(C)
548 dnl see if we have to include malloc/malloc.h
549 AC_MSG_CHECKING([do we need malloc/malloc.h])
550 AC_LINK_IFELSE(
551     AC_LANG_PROGRAM(
552            [[#include <stdlib.h>]],
553            [[malloc(1)]]
554                    ),
555     [ AC_MSG_RESULT([nope, works out of the box]) ],
556     [ AC_LINK_IFELSE(
557           AC_LANG_PROGRAM(
558                 [[#include <stdlib.h>
559                   #include <malloc/malloc.h>]],
560                 [[malloc(1)]]
561                          ),
562           [AC_DEFINE(NEED_MALLOC_MALLOC_H)
563            AC_MSG_RESULT([yes we do])],
564           [AC_MSG_ERROR([Can not figure how to compile malloc])]
565       )
566     ]  
567 )
568 AC_LANG_POP(C)
569
570 CONFIGURE_PART(Find 3rd-Party Libraries)
571
572
573 AM_CONDITIONAL(BUILD_RRDCGI,[test $enable_rrdcgi != no])
574
575 CORE_LIBS="$LIBS"
576
577 dnl EX_CHECK_ALL(z,          zlibVersion,               zlib.h,                 zlib,        1.2.3,  http://www.gzip.org/zlib/, "")
578 dnl EX_CHECK_ALL(png,        png_access_version_number, png.h,                  libpng,      1.2.10,  http://prdownloads.sourceforge.net/libpng/, "")
579 dnl EX_CHECK_ALL(freetype,   FT_Init_FreeType,          ft2build.h,                     freetype2,   2.1.10,  http://prdownloads.sourceforge.net/freetype/, /usr/include/freetype2)
580 dnl EX_CHECK_ALL(fontconfig, FcInit,                    fontconfig.h,               fontconfig,  2.3.1,  http://fontconfig.org/release/, /usr/include)
581 EX_CHECK_ALL(cairo,      cairo_font_options_create,     cairo.h,                cairo-png,   1.4.6,  http://cairographics.org/releases/, "")
582 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/, "")
583 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, "")
584
585 if test "$EX_CHECK_ALL_ERR" = "YES"; then
586   AC_MSG_ERROR([Please fix the library issues listed above and try again.])
587 fi
588
589 ALL_LIBS="$LIBS"
590 LIBS=
591
592 AC_SUBST(CORE_LIBS)
593 AC_SUBST(ALL_LIBS)
594
595 CONFIGURE_PART(Prep for Building Language Bindings)
596   
597 dnl Check for Perl.
598 AC_PATH_PROG(PERL, perl, no)
599
600 AC_ARG_ENABLE(perl,[  --disable-perl          do not build the perl modules],
601 [],[enable_perl=yes])
602
603
604 AC_ARG_VAR(PERLCC, [[] C compiler for Perl modules])
605 AC_ARG_VAR(PERLCCFLAGS, [[] CC flags for Perl modules])
606 AC_ARG_VAR(PERLLD, [[same as PERLCC] Linker for Perl modules])
607 AC_ARG_VAR(PERLLDFLAGS, [[] LD flags for Perl modules])
608
609 if test "x$PERL" = "xno" -o  x$enable_perl = xno; then
610         COMP_PERL=
611 else
612         COMP_PERL="perl_piped perl_shared"
613         AC_MSG_CHECKING(for the perl version you are running)
614         PERL_VERSION=`$PERL -MConfig -e 'print $Config{version}'`
615         AC_MSG_RESULT($PERL_VERSION)
616         if test -z "$PERLCC"; then
617             AC_MSG_CHECKING(for the C compiler perl wants to use to build its modules)
618             perlcc=`$PERL -MConfig -e 'print $Config{cc}'`
619             AC_MSG_RESULT($perlcc)
620             if test ! -x "$perlcc"; then
621                 AC_PATH_PROG(PERL_CC, ${perlcc}, no)
622                 if test "$PERL_CC" = "no"; then
623                     AC_MSG_WARN([
624 I would not find the Compiler ($perlcc) that was originally used to compile
625 your perl binary. You should either make sure that this compiler is
626 available on your system, pick an other compiler and set PERLCC
627 appropriately, or use a different perl setup that was compiled locally.
628
629 I will disable the compilation of the RRDs perl module for now.
630 ])
631                     COMP_PERL="perl_piped"
632                 fi
633             fi    
634         fi
635 fi
636
637 AC_MSG_CHECKING(Perl Modules to build)
638 AC_MSG_RESULT(${COMP_PERL:-No Perl Modules will be built})
639
640 # Options to pass when configuring perl module
641 ppref=$prefix
642 test "$ppref" = "NONE" && ppref=$ac_default_prefix
643
644 PERL_MAKE_OPTIONS="PREFIX=$ppref LIB=$ppref/lib/perl/$PERL_VERSION"
645
646 dnl pass additional perl options when generating Makefile from Makefile.PL
647 AC_ARG_ENABLE(perl-site-install,
648 [  --enable-perl-site-install   by default the rrdtool perl modules are installed
649                           together with rrdtool in $prefix/lib/perl. You have to
650                           put a 'use lib qw($prefix/lib/perl)' into your scripts
651                           when you want to use them. When you set this option
652                           the perl modules will get installed wherever
653                           your perl setup thinks it is best.],
654 [PERL_MAKE_OPTIONS=],[])
655
656 if test ! -z "$PERLCC"; then
657    PERL_MAKE_OPTIONS="$PERL_MAKE_OPTIONS CC=$PERLCC"
658
659    if test ! -z "$PERLCCFLAGS"; then
660        PERL_MAKE_OPTIONS="$PERL_MAKE_OPTIONS CCFLAGS=$PERLCCFLAGS"
661    fi
662    
663    if test -z "$PERLLD"; then
664        PERLLD=$PERLCC
665    fi
666    PERL_MAKE_OPTIONS="$PERL_MAKE_OPTIONS LD=$PERLLD"
667   
668    if test ! -z "$PERLLDFLAGS"; then
669        PERL_MAKE_OPTIONS="$PERL_MAKE_OPTIONS LDFLAGS=$PERLLDFLAGS"
670    fi
671 fi
672         
673 AC_ARG_WITH(perl-options,
674 [  --with-perl-options=[OPTIONS]  options to pass on command-line when
675                           generating Makefile from Makefile.PL. If you set this
676                           option, interesting things may happen unless you know
677                           what you are doing!],
678 [PERL_MAKE_OPTIONS=$withval])
679
680 AC_SUBST(PERL_MAKE_OPTIONS)
681 AC_SUBST(PERL)
682 AC_SUBST(COMP_PERL)
683 AC_SUBST(PERL_VERSION)
684
685 dnl Check for Ruby.
686 AC_PATH_PROG(RUBY, ruby, no)
687
688 AC_ARG_ENABLE(ruby,[  --disable-ruby          do not build the ruby modules],
689 [],[enable_ruby=yes])
690
691 AC_MSG_CHECKING(if ruby modules can be built)
692
693 if test "x$RUBY" = "xno" -o  x$enable_ruby = xno; then
694         COMP_RUBY=
695         AC_MSG_RESULT(No .. Ruby not found or disabled)
696 else
697         if $RUBY -e 'require "mkmf"' >/dev/null 2>&1; then
698                 COMP_RUBY="ruby"
699                 AC_MSG_RESULT(YES)
700         else
701                 COMP_RUBY=
702                 AC_MSG_RESULT(Ruby found but mkmf is missing! Install the -dev package)         
703         fi                              
704 fi
705
706
707 dnl pass additional ruby options when generating Makefile from Makefile.PL
708 AC_ARG_ENABLE(ruby-site-install,
709 [  --enable-ruby-site-install   by default the rrdtool ruby modules are installed
710                           together with rrdtool in $prefix/lib/ruby. You have to
711                           add $prefix/lib/ruby/$ruby_version/$sitearch to you $: variable
712                           for ruby to find the RRD.so file.],
713 [RUBY_MAKE_OPTIONS=],[RUBY_MAKE_OPTIONS="sitedir=$prefix/lib/ruby"])
714
715     
716 AC_ARG_WITH(ruby-options,
717 [  --with-ruby-options=[OPTIONS]  options to pass on command-line when
718                           generating Makefile from extconf.rb. If you set this
719                           option, interesting things may happen unless you know
720                           what you are doing!],
721 [RUBY_MAKE_OPTIONS=$withval])
722
723 AC_SUBST(RUBY_MAKE_OPTIONS)
724 AC_SUBST(RUBY)
725 AC_SUBST(COMP_RUBY)
726
727
728 enable_tcl_site=no
729
730 AC_ARG_ENABLE(tcl,[  --disable-tcl           do not build the tcl modules],
731 [],[enable_tcl=yes])
732
733 if test  "$enable_tcl" = "yes"; then
734   dnl Check for Tcl.
735   withval=""
736   AC_ARG_WITH(tcllib,[  --with-tcllib=DIR       location of the tclConfig.sh])
737   enable_tcl=no
738   for dir in $withval /usr/lib /usr/local/lib /usr/lib/tcl8.4 /usr/lib/tcl8.3 ; do
739     AC_MSG_CHECKING(for tclConfig.sh in $dir)
740     if test -f "$dir/tclConfig.sh" ; then
741         tcl_config=$dir/tclConfig.sh
742         enable_tcl=yes
743         AC_MSG_RESULT(yes)
744         break
745     else
746         AC_MSG_RESULT(no)
747     fi
748   done
749
750   if test "$enable_tcl" = "no"; then
751         AC_MSG_WARN([tclConfig.sh not found - Tcl interface won't be built])
752   else
753         . $tcl_config
754         TCL_PACKAGE_DIR="$TCL_PACKAGE_PATH/tclrrd$VERSION"
755   fi
756   AC_ARG_ENABLE(tcl,[  --enable-tcl-site        install the tcl extension in the tcl tree],
757   [],[enable_tcl_site=yes])
758
759 fi
760
761 AM_CONDITIONAL(BUILD_TCL, test "$enable_tcl" = "yes" )
762 AM_CONDITIONAL(BUILD_TCL_SITE, test "$enable_tcl_site" = "yes" )
763
764 AC_SUBST(TCL_PREFIX)
765 AC_SUBST(TCL_SHLIB_CFLAGS)
766 AC_SUBST(TCL_SHLIB_LD)
767 AC_SUBST(TCL_SHLIB_SUFFIX)
768 AC_SUBST(TCL_PACKAGE_PATH)
769 AC_SUBST(TCL_LD_SEARCH_FLAGS)
770 AC_SUBST(TCL_STUB_LIB_SPEC)
771 AC_SUBST(TCL_VERSION)
772 AC_SUBST(TCL_PACKAGE_DIR)
773 AC_SUBST(TCL_INC_DIR)
774
775 AC_ARG_ENABLE(python,[  --disable-python        do not build the python modules],
776 [],[enable_python=yes])
777
778 if test  "$enable_python" = "yes"; then
779 dnl Check for python
780 AM_PATH_PYTHON(2.3,[],[enable_python=no])
781 AM_CHECK_PYTHON_HEADERS(,[enable_python=no;AC_MSG_WARN(could not find Python headers)])
782 fi
783
784 if test  x$enable_python = xno; then
785         COMP_PYTHON=
786 else
787         COMP_PYTHON="python"
788 fi
789
790 AC_SUBST(COMP_PYTHON)
791
792 dnl Check for nroff
793 AC_PATH_PROGS(NROFF, gnroff nroff)
794 AC_PATH_PROGS(TROFF, groff troff)
795
796 AC_ARG_VAR(RRDDOCDIR, [[DATADIR/doc/PACKAGE-VERSION] Documentation directory])
797 if test -z "$RRDDOCDIR"; then
798    RRDDOCDIR='${datadir}/doc/${PACKAGE}-${VERSION}'; fi
799
800
801 CONFIGURE_PART(Apply Configuration Information)
802  
803 AC_CONFIG_FILES([examples/shared-demo.pl])
804 AC_CONFIG_FILES([examples/piped-demo.pl])
805 AC_CONFIG_FILES([examples/stripes.pl])
806 AC_CONFIG_FILES([examples/bigtops.pl])
807 AC_CONFIG_FILES([examples/minmax.pl])
808 AC_CONFIG_FILES([examples/4charts.pl])
809 AC_CONFIG_FILES([examples/perftest.pl])
810 AC_CONFIG_FILES([examples/Makefile])
811 AC_CONFIG_FILES([doc/Makefile])
812 AC_CONFIG_FILES([src/Makefile])
813 AC_CONFIG_FILES([bindings/Makefile])
814 AC_CONFIG_FILES([bindings/tcl/Makefile])
815 AC_CONFIG_FILES([bindings/tcl/ifOctets.tcl])
816 AC_CONFIG_FILES([Makefile])          
817
818 AC_CONFIG_COMMANDS([default],[[ chmod +x examples/*.pl]],[[]])
819 AC_OUTPUT
820
821 AC_MSG_CHECKING(in)
822 AC_MSG_RESULT(and out again)
823
824 echo $ECHO_N "ordering CD from http://tobi.oetiker.ch/wish $ECHO_C" 1>&6
825 sleep 1
826 echo $ECHO_N ".$ECHO_C" 1>&6
827 sleep 1
828 echo $ECHO_N ".$ECHO_C" 1>&6
829 sleep 1
830 echo $ECHO_N ".$ECHO_C" 1>&6
831 sleep 1
832 echo $ECHO_N ".$ECHO_C" 1>&6
833 sleep 1
834 AC_MSG_RESULT([ just kidding ;-)])
835 echo
836 echo "----------------------------------------------------------------"
837 echo "Config is DONE!"
838 echo
839 echo "          With MMAP IO: $enable_mmap"
840 echo "       Static programs: $staticprogs"
841 echo "          Perl Modules: $COMP_PERL"
842 echo "           Perl Binary: $PERL"
843 echo "          Perl Version: $PERL_VERSION"
844 echo "          Perl Options: $PERL_MAKE_OPTIONS"
845 echo "          Ruby Modules: $COMP_RUBY"
846 echo "           Ruby Binary: $RUBY"
847 echo "          Ruby Options: $RUBY_MAKE_OPTIONS"
848 echo "    Build Tcl Bindings: $enable_tcl"
849 echo " Build Python Bindings: $enable_python"
850 echo "          Build rrdcgi: $enable_rrdcgi"
851 echo "       Build librrd MT: $enable_pthread"
852 echo
853 echo
854 echo "Type 'make' to compile the software and use 'make install' to "
855 echo "install everything to: $prefix."
856 echo 
857 echo "       ... that wishlist is NO JOKE. If you find RRDtool useful"
858 echo "make me happy. Go to http://tobi.oetiker.ch/wish and"
859 echo "place an order."
860 echo 
861 echo "                               -- Tobi Oetiker <tobi@oetiker.ch>"
862 echo "----------------------------------------------------------------"