* Updated perl compile system. It now uses Makefile.PL for everything,
[rrdtool.git] / configure.ac
index 89da80c..f385ebc 100644 (file)
@@ -151,12 +151,42 @@ AC_C_CONST
 AC_HEADER_TIME
 AC_STRUCT_TM
 
-dnl substitute them in all the files listed in AC_OUTPUT
-AC_SUBST(PERLFLAGS)
-
 dnl Checks for libraries.
 AC_CHECK_FUNC(acos, , AC_CHECK_LIB(m, acos))
 
+dnl add pic flag in any case this makes sure all our code is relocatable
+eval `./libtool --config | grep pic_flag`
+CFLAGS="$CFLAGS $pic_flag"
+
+dnl Checks for library functions.
+AC_FUNC_STRFTIME
+AC_FUNC_VPRINTF
+
+AC_C_BIGENDIAN
+
+dnl for each function found we get a definition in config.h 
+dnl of the form HAVE_FUNCTION
+
+AC_CHECK_FUNCS(tzset opendir readdir chdir chroot getuid setlocale strerror strerror_r snprintf vsnprintf fpclass class fp_class isnan memmove strchr mktime getrusage gettimeofday)
+
+dnl HP-UX 11.00 does not have finite but does have isfinite as a macro so we need
+dnl actual code to check if this works
+AC_CHECK_FUNCS(fpclassify, ,
+  [AC_MSG_CHECKING(for fpclassify with <math.h>)
+    AC_LINK_IFELSE([AC_LANG_PROGRAM([[#include <math.h>]], [[float f = 0.0; fpclassify(f)]])],[AC_MSG_RESULT(yes)
+      AC_DEFINE(HAVE_FPCLASSIFY)],[AC_MSG_RESULT(no)])])
+AC_CHECK_FUNCS(finite, ,
+  [AC_CHECK_FUNCS(isfinite, ,
+    [AC_MSG_CHECKING(for isfinite with <math.h>)
+    AC_LINK_IFELSE([AC_LANG_PROGRAM([[#include <math.h>]], [[float f = 0.0; isfinite(f)]])],[AC_MSG_RESULT(yes)
+      AC_DEFINE(HAVE_ISFINITE)],[AC_MSG_RESULT(no)])])])
+AC_CHECK_FUNCS(isinf, ,
+  [AC_MSG_CHECKING(for isinf with <math.h>)
+    AC_LINK_IFELSE([AC_LANG_PROGRAM([[#include <math.h>]], [[float f = 0.0; isinf(f)]])],[AC_MSG_RESULT(yes)
+      AC_DEFINE(HAVE_ISINF)],[AC_MSG_RESULT(no)])])
+
+AC_FULL_IEEE
+
 dnl How the vertical axis label is printed
 AC_ARG_VAR(RRDGRAPH_YLEGEND_ANGLE, 
  [Vertical label angle: 90.0 (default) or 270.0])
@@ -171,16 +201,17 @@ AM_CONDITIONAL(BUILD_RRDCGI,[test $enable_rrdcgi != no])
 if test $enable_rrdcgi != no; then
 EX_CHECK_ALL(cgi,        cgiInit,                   cgi.h,                  cgilib,      0.5,    http://www.infodrom.org/projects/cgilib)
 fi
-EX_CHECK_ALL(art_lgpl_2, art_vpath_add_point,       libart_lgpl/libart.h,   libart_lgpl, 2.3.17, ftp://ftp.gnome.org/pub/GNOME/sources/libart_lgpl/2.3/)
+EX_CHECK_ALL(art_lgpl_2, art_vpath_add_point,       libart_lgpl/libart.h,   libart-2.0,  2.3.17, ftp://ftp.gnome.org/pub/GNOME/sources/libart_lgpl/2.3/)
 EX_CHECK_ALL(z,          zlibVersion,               zlib.h,                 zlib,        1.2.1,  http://www.gzip.org/zlib/)
 EX_CHECK_ALL(png,        png_access_version_number, png.h,                  libpng,      1.2.8,  http://prdownloads.sourceforge.net/libpng/)
-EX_CHECK_ALL(freetype,   FT_Init_FreeType,          ft2build.h,             freetype,    2.1.9,  http://prdownloads.sourceforge.net/freetype/)
+EX_CHECK_ALL(freetype,   FT_Init_FreeType,          ft2build.h,                     freetype2,   2.1.9,  http://prdownloads.sourceforge.net/freetype/)
 
 if test "$EX_CHECK_ALL_ERR" = "YES"; then
   AC_MSG_ERROR([Please fix the library issues listed above and try again.])
 fi
 
-dnl solaris has some odd define it need in order to propperly compile ctime_r
+AC_LANG_PUSH(C)
+dnl solaris has some odd defines it needs in order to propperly compile ctime_r
 AC_MSG_CHECKING([if ctime_r need special care to act posixly correct])
 AC_LINK_IFELSE(
     AC_LANG_PROGRAM(
@@ -207,6 +238,7 @@ AC_LINK_IFELSE(
       )
     ]  
 )
+AC_LANG_POP(C)
 
 dnl Check for pthreads
 dnl http://autoconf-archive.cryp.to/acx_pthread.m4
@@ -217,7 +249,14 @@ AC_SUBST(MULTITHREAD_LDFLAGS)
  
 AC_ARG_ENABLE(pthread,[  --disable-pthread       disable multithread support],
 [],[enable_pthread=yes])
+
+dnl since we use lots of *_r functions all over the code we better
+dnl make sure they are known
+
+if test  "x$x_rflag" != "xno"; then
+   CPPFLAGS="$CPPFLAGS $x_rflag"
+fi
+
 if test $enable_pthread != no; then 
  ACX_PTHREAD([
     MULTITHREAD_CFLAGS=$PTHREAD_CFLAGS
@@ -236,24 +275,53 @@ if test "x$PERL" = "xno"; then
        COMP_PERL=
 else
        COMP_PERL="perl_piped perl_shared"
-       AC_MSG_CHECKING(for shared library extension)
-       SO_EXT=`$PERL -e 'use Config; if (defined $Config{so} and $Config{so} ne 'a') {print "$Config{so}\n"} else {print "so\n"};'`
-       AC_MSG_RESULT($SO_EXT)
+        AC_MSG_CHECKING(for the perl version you are running)
+       PERL_VERSION=`$PERL -MConfig -e 'print $Config{version}'`
+       AC_MSG_RESULT($PERL_VERSION)
         AC_MSG_CHECKING(for the C compiler perl wants to use to build its modules)
-        PROBLEMCC=`$PERL -e 'use Config; ($cc = $Config{cc}) =~ s/\s.*//; exit 0 if -x $cc; map {if (-x "$_/$cc"){exit 0}} split /:/, $ENV{PATH};print $Config{cc}'`
-        if test x$PROBLEMCC != x; then
-                AC_MSG_RESULT(no)
-                echo Could not find the Compiler: '"'$PROBLEMCC'"'
-                echo which has been used to build perl. You may have to compile
-                echo your own copy of perl to make this work. Binary perls often
-                echo exhibit this problem
-                exit 1
-        else
-                AC_MSG_RESULT(found)
+       perlcc=`$PERL -MConfig -e 'print $Config{cc}'`
+       AC_MSG_RESULT($perlcc)
+       if test ! -x $perlcc; then
+              AC_PATH_PROG(PERLCC, ${perlcc}, no)
+              if test -x $"x$PERLCC" = "xno"; then
+                  AC_MSG_WARN([
+I would not find the Compiler ($perlcc) that was originally used to compile your
+perl binary. You should either make sure that this compiler is available on your
+system, or use a different perl setup that was compiled with $CC.
+
+I will disable the compilation of the RRDs perl module.
+])
+                 COMP_PERL="perl_piped"
+              fi
         fi
 fi
+AC_MSG_CHECKING(Perl Modules to build)
+AC_MSG_RESULT(${COMP_PERL:-No Perl Modules will be built})
+
+# Options to pass when configuring perl module
+PERL_MAKE_OPTIONS="PREFIX=$prefix LIB=$prefix/lib/perl/$PERL_VERSION"
+
+dnl pass additional perl options when generating Makefile from Makefile.PL
+AC_ARG_ENABLE(perl-site-install,
+[  --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.],
+[PERL_MAKE_OPTIONS=],[])
+
+AC_ARG_WITH(perl-options,
+[  --with-perl-options=[OPTIONS]  options to pass on command-line when
+                          generating Makefile from Makefile.PL. If you set this
+                          option, interesting things may happen unless you know
+                          what you are doing!],
+[PERL_MAKE_OPTIONS=$withval])
+
+AC_SUBST(PERL_MAKE_OPTIONS)
+AC_SUBST(PERL)
 AC_SUBST(COMP_PERL)
-AC_SUBST(SO_EXT)
+AC_SUBST(PERL_VERSION)
 
 dnl Check for Tcl.
 withval=""
@@ -275,13 +343,6 @@ else
        . $tcl_config
 fi
 
-dnl Pass additional perl options when generating Makefile from Makefile.PL
-# Options to pass when configuring perl module
-AC_ARG_WITH(perl-options,
-[  --with-perl-options=[OPTIONS]  options to pass on command-line when
-                          generating Makefile from Makefile.PL],
-[PERL_MAKE_OPTIONS=$withval])
-AC_SUBST(PERL_MAKE_OPTIONS)
 
 AM_CONDITIONAL(COMP_TCL, test x$found = x1 )
 
@@ -311,43 +372,6 @@ if test "x$GCC" = "xyes"; then
   fi
 fi
 
-dnl add pic flag in any case this makes sure all our code is relocatable
-CFLAGS="$CFLAGS "`grep pic_flag= libtool | head -1|sed -e 's/.*pic_flag=//' -e 's/"//g'` 
-dnl" make joes highliter happy it does not grasp the quote in the line above
-
-ZLIB_CFLAGS=$CFLAGS
-dnl it seems that hpux chockes on -fPIC for some reason
-case $target_os in
-*hpux*)
-        ZLIB_CFLAGS=`echo $CFLAGS|sed -e 's/-fPIC/-fpic/g'`
-;;
-esac
-AC_SUBST(ZLIB_CFLAGS)
-
-dnl Checks for library functions.
-AC_FUNC_STRFTIME
-AC_FUNC_VPRINTF
-
-dnl for each function found we get a definition in config.h 
-dnl of the form HAVE_FUNCTION
-
-AC_CHECK_FUNCS(tzset opendir readdir chdir chroot getuid setlocale strerror strerror_r snprintf vsnprintf fpclass class fp_class isnan memmove strchr mktime getrusage gettimeofday)
-
-dnl HP-UX 11.00 does not have finite but does have isfinite as a macro
-AC_CHECK_FUNCS(fpclassify, ,
-  [AC_MSG_CHECKING(for fpclassify with <math.h>)
-    AC_LINK_IFELSE([AC_LANG_PROGRAM([[#include <math.h>]], [[float f = 0.0; fpclassify(f)]])],[AC_MSG_RESULT(yes)
-      AC_DEFINE(HAVE_FPCLASSIFY)],[AC_MSG_RESULT(no)])])
-AC_CHECK_FUNCS(finite, ,
-  [AC_CHECK_FUNCS(isfinite, ,
-    [AC_MSG_CHECKING(for isfinite with <math.h>)
-    AC_LINK_IFELSE([AC_LANG_PROGRAM([[#include <math.h>]], [[float f = 0.0; isfinite(f)]])],[AC_MSG_RESULT(yes)
-      AC_DEFINE(HAVE_ISFINITE)],[AC_MSG_RESULT(no)])])])
-AC_CHECK_FUNCS(isinf, ,
-  [AC_MSG_CHECKING(for isinf with <math.h>)
-    AC_LINK_IFELSE([AC_LANG_PROGRAM([[#include <math.h>]], [[float f = 0.0; isinf(f)]])],[AC_MSG_RESULT(yes)
-      AC_DEFINE(HAVE_ISINF)],[AC_MSG_RESULT(no)])])
-
 dnl what does realloc do if it gets called with a NULL pointer
 
 AC_CACHE_CHECK([if realloc can deal with NULL], rd_cv_null_realloc,
@@ -363,123 +387,6 @@ if test x"$rd_cv_null_realloc" = xnope; then
 AC_DEFINE(NO_NULL_REALLOC)
 fi
 
-dnl determine how to get IEEE math working
-dnl AC_IEEE(MESSAGE, set rd_cv_ieee_[var] variable, INCLUDES,
-dnl   FUNCTION-BODY, [ACTION-IF-FOUND [,ACTION-IF-NOT-FOUND]])
-
-AC_C_BIGENDIAN
-
-AC_DEFUN([AC_IEEE], 
-AC_MSG_CHECKING([if IEEE math works $1])
-AC_CACHE_VAL([rd_cv_ieee_$2],
-[AC_RUN_IFELSE([AC_LANG_SOURCE([[$3
-
-#if HAVE_MATH_H
-#  include <math.h>
-#endif
-
-#if HAVE_FLOAT_H
-#  include <float.h>  
-#endif
-
-#if HAVE_IEEEFP_H
-#  include <ieeefp.h>
-#endif
-
-#if HAVE_FP_CLASS_H
-#  include <fp_class.h>
-#endif
-
-/* Solaris */
-#if (! defined(HAVE_ISINF) && defined(HAVE_FPCLASS))
-#  define HAVE_ISINF 1
-#  define isinf(a) (fpclass(a) == FP_NINF || fpclass(a) == FP_PINF)
-#endif
-
-/* Digital UNIX */
-#if (! defined(HAVE_ISINF) && defined(HAVE_FP_CLASS) && defined(HAVE_FP_CLASS_H))
-#  define HAVE_ISINF 1
-#  define isinf(a) (fp_class(a) == FP_NEG_INF || fp_class(a) == FP_POS_INF)
-#endif 
-
-/* AIX */
-#if (! defined(HAVE_ISINF) && defined(HAVE_CLASS))
-#  define HAVE_ISINF 1
-#  define isinf(a) (class(a) == FP_MINUS_INF || class(a) == FP_PLUS_INF)
-#endif
-
-#if (! defined(HAVE_ISINF) && defined(HAVE_FPCLASSIFY) && defined(FP_PLUS_INF) && defined(FP_MINUS_INF))
-#  define HAVE_ISINF 1
-#  define isinf(a) (fpclassify(a) == FP_MINUS_INF || fpclassify(a) == FP_PLUS_INF)
-#endif
-
-#if (! defined(HAVE_ISINF) && defined(HAVE_FPCLASSIFY) && defined(FP_INFINITE))
-#  define HAVE_ISINF 1
-#  define isinf(a) (fpclassify(a) == FP_INFINITE)
-#endif
-
-#include <stdio.h>
-int main(void){
-    double nan,inf,c,zero;
-    $4;
-    /* some math to see if we get a floating point exception */
-    zero=sin(0.0); /* don't let the compiler optimize us away */
-    nan=0.0/zero; /* especially here */
-    inf=1.0/zero; /* and here. I want to know if it can do the magic */
-                 /* at run time without sig fpe */
-    c = inf + nan;
-    c = inf / nan;
-    if (! isnan(nan)) {printf ("not isnan(NaN) ... "); return 1;}
-    if (nan == nan) {printf ("nan == nan ... "); return 1;}
-    if (! isinf(inf)) {printf ("not isinf(oo) ... "); return 1;}
-    if (! isinf(-inf)) {printf ("not isinf(-oo) ... "); return 1;}
-    if (! inf > 0) {printf ("not inf > 0 ... "); return 1;}
-    if (! -inf < 0) {printf ("not -inf < 0 ... "); return 1;}
-    return 0;
- }]])],[rd_cv_ieee_$2=yes],[rd_cv_ieee_$2=no],[:])])
-dnl these we run regardles is cached or not
-if test x${rd_cv_ieee_$2} = "xyes"; then
- AC_MSG_RESULT(yes)
- $5
-else
- AC_MSG_RESULT(no)
- $6
-fi
-
-)
-
-_cflags=${CFLAGS}
-AC_IEEE([out of the box], works, , , ,
-  [CFLAGS="$_cflags -ieee"
-  AC_IEEE([with the -ieee switch], switch, , , ,
-    [CFLAGS="$_cflags -qfloat=nofold"
-    AC_IEEE([with the -qfloat=nofold switch], nofold, , , ,
-      [CFLAGS="$_cflags -w -qflttrap=enable:zerodivide"
-      AC_IEEE([with the -w -qflttrap=enable:zerodivide], flttrap, , , ,
-       [CFLAGS="$_cflags -mieee"
-       AC_IEEE([with the -mieee switch], mswitch, , , ,
-         [CFLAGS="$_cflags -q float=rndsngl"
-         AC_IEEE([with the -q float=rndsngl switch], qswitch, , , ,
-           [CFLAGS="$_cflags -OPT:IEEE_NaN_inf=ON"
-           AC_IEEE([with the -OPT:IEEE_NaN_inf=ON switch], ieeenaninfswitch, , , ,
-             [CFLAGS="$_cflags -OPT:IEEE_comparisons=ON"
-             AC_IEEE([with the -OPT:IEEE_comparisons=ON switch], ieeecmpswitch, , , ,
-               [CFLAGS=$_cflags
-               AC_IEEE([with fpsetmask(0)], mask,
-                 [#include <floatingpoint.h>], [fpsetmask(0)],
-                 [AC_DEFINE(MUST_DISABLE_FPMASK)
-                PERLFLAGS="CCFLAGS=-DMUST_DISABLE_FPMASK"],
-                 [AC_IEEE([with signal(SIGFPE,SIG_IGN)], sigfpe,
-                   [#include <signal.h>], [signal(SIGFPE,SIG_IGN)],
-                   [AC_DEFINE(MUST_DISABLE_SIGFPE)
-                   PERLFLAGS="CCFLAGS=-DMUST_DISABLE_SIGFPE"],         
-                   AC_MSG_ERROR([
-Your Compiler does not do propper IEEE math ... Please find out how to
-make IEEE math work with your compiler and let me know (oetiker@ee.ethz.ch).
-Check config.log to see what went wrong ...
-]))])])])])])])])])])
-
-
 AC_CONFIG_FILES([examples/shared-demo.pl                       \
           examples/piped-demo.pl                       \
           examples/stripes.pl                          \