Code

switch from intltoolize to autopoint ... for a more happy gettext experiance
authoroetiker <oetiker@a5681a0c-68f1-0310-ab6d-d61299d08faa>
Wed, 27 May 2009 16:19:46 +0000 (16:19 +0000)
committeroetiker <oetiker@a5681a0c-68f1-0310-ab6d-d61299d08faa>
Wed, 27 May 2009 16:19:46 +0000 (16:19 +0000)
git-svn-id: svn://svn.oetiker.ch/rrdtool/branches/1.3@1827 a5681a0c-68f1-0310-ab6d-d61299d08faa

program/MakeMakefile
program/Makefile.am
program/acinclude.m4 [deleted file]
program/autogen.sh [new file with mode: 0755]
program/configure.ac
program/m4/acinclude.m4 [new file with mode: 0644]
program/po/LINGUAS
program/po/de.po [deleted file]
program/src/Makefile.am
program/src/gettext.h [new file with mode: 0644]
program/src/rrd_i18n.h

index 4623a72edb6785b0ea26d6fdad96b55e7c5e2c34..03a5f34ce139cc9a7e57bfb71586ad2ce3c51485 100755 (executable)
@@ -3,9 +3,8 @@
 # Run this script after the first cvs checkout to build
 # makefiles and friends
 
-PATH="/usr/pack/automake-1.9.6-rp/bin:/usr/pack/autoconf-2.61-rp/bin:/usr/pack/libtool-1.5.22-rp/amd64-debian-linux3.1/bin:$PATH"
-#export PATH
-
+PATH="/usr/pack/automake-1.11-to/amd64-linux-debian3.1/:/usr/pack/automake-1.11-to/amd64-linux-ubuntu8.04/bin:$PATH"
+export PATH
 vcheck (){
   perl <<PERL
 @t = split /\./, "$1";
@@ -17,10 +16,9 @@ PERL
 }
 
 ERROR=0
-LIBTOOL_VER="1.5.6"
-AUTOMAKE_VER="1.9.2"
-AUTOCONF_VER="2.59"
-INTLTOOL_VER="0.35.0"
+LIBTOOL_VER="2.2.6"
+AUTOMAKE_VER="1.11"
+AUTOCONF_VER="2.63"
 
 if vcheck $LIBTOOL_VER "libtool --version"
 then
@@ -30,61 +28,29 @@ fi
 
 if vcheck $AUTOMAKE_VER  "automake  --version"
 then
-  if vcheck $AUTOMAKE_VER  "automake-1.9 --version"
+  if vcheck $AUTOMAKE_VER  "automake-1.11 --version"
   then
     echo "get a copy of GNU automake >= $AUTOMAKE_VER"
     ERROR=1
   else
-    automake=automake-1.9
-    aclocal="aclocal-1.9"
-    for d in /usr/pack/automake-1.9.5-to/share/aclocal-1.9 /usr/share/aclocal-1.9 /usr/share/aclocal /usr/pack/rrdtool-1.3svn-to/share/aclocal /usr/pack/intltool-0.37.0-to/share/aclocal ; do
-      [ -d $d ] && aclocal="$aclocal -I $d"
-    done
+    AUTOMAKE="automake-1.11"
+    ACLOCAL="aclocal-1.11"
+    export AUTOMAKE ACLOCAL
   fi
-else
-    automake="automake"
-    aclocal="aclocal"
-#    aclocal="aclocal -I /usr/pack/libtool-1.5.14-to/share/aclocal"
 fi
 
+
 if vcheck $AUTOCONF_VER "autoconf --version"
 then
   echo "get a copy of GNU autoconf >= $autoconf_ver"
   ERROR=1
 fi
 
-if vcheck $INTLTOOL_VER "intltoolize --version"
-then
-  echo "get a copy of GNU intltoolize >= $INTLTOOL_VER"
-  ERROR=1
-fi
-       
 if [ $ERROR -ne 0 ]
 then
   exit 1
 fi
 
-# remove the bits we are going to recreate
-
-echo Removing old Makefiles
-touch Makefile
-find . -name "Makefile" -or -name "Makefile.in" -print0 | xargs -0 rm 
-echo Cleaning out other leftovers
-for x in configure install-sh intltool-merge.in rrd_config.h.in \
-         missing intltool-update po/Makefile.in.in config.sub \
-         intltool-extract intltool-extract.in config.guess \
-         depcomp intltool-update.in autom4te.cache \
-         intltool-merge compile; do
-  [ ! -L $x -a -d $x ] && rm -r "$x"
-  [ ! -L $x -a -f $x ] && rm "$x"
-done
-set -x
-intltoolize --automake -c -f
-$aclocal
-libtoolize --copy --force
-autoheader --force  
-$aclocal
-$automake --foreign --add-missing --force-missing --copy 
-autoconf --force
+./autogen.sh
 
 # vim: set syntax=sh :
index b703754ef30dce05329957b58f6ca749371e1a2c..bda0889c1254810ba7c5ecf3c563104f70e02a38 100644 (file)
@@ -1,19 +1,11 @@
-ACLOCAL_AMFLAGS = -I m4
 ## Process this file with automake to produce Makefile.in
 RSYNC = rsync --rsh=ssh
 
-# build the following subdirectories
-if BUILD_LIBINTL
-PO=po
-else
-PO=
-endif
-
-SUBDIRS = $(PO) src examples doc bindings
+SUBDIRS = po src examples doc bindings intl
 
  # the following files are not mentioned in any other Makefile
 EXTRA_DIST = COPYRIGHT CHANGES WIN32-BUILD-TIPS.txt TODO CONTRIBUTORS THREADS \
-             intltool-extract.in  intltool-merge.in    intltool-update.in \
+             autogen.sh \
             rrdtool.spec favicon.ico win32/Makefile win32/config.h \
             win32/rrd.dsp win32/rrd.sln win32/rrd.vcproj \
             win32/rrd_config.h.msvc win32/rrdlib.vcproj win32/rrdtool.dsp \
@@ -27,7 +19,7 @@ CLEANFILES = config.cache
 AUTOMAKE_OPTIONS= foreign 
 
 # where we keep local rules for automake
-
+ACLOCAL_AMFLAGS = -I m4
 ACLOCAL_M4= $(top_srcdir)/aclocal.m4
 #AUTOHEADER = @AUTOHEADER@ --localdir=$(top_srcdir)/config
 #AUTOCONF = @AUTOCONF@ --localdir=$(top_srcdir)/config
diff --git a/program/acinclude.m4 b/program/acinclude.m4
deleted file mode 100644 (file)
index 5ea34f0..0000000
+++ /dev/null
@@ -1,592 +0,0 @@
-dnl Helper Functions for the RRDtool configure.ac script
-dnl 
-dnl this file gets included into aclocal.m4 when runnning aclocal
-dnl
-dnl
-dnl
-dnl Check for the presence of a particular library and its header files
-dnl if this check fails set the environment variable EX_CHECK_ALL_ERR to YES
-dnl and prints out a helful message
-dnl
-dnl
-dnl EX_CHECK_ALL(library, function, header, pkgconf name, tested-version, homepage, cppflags)
-dnl              $1       $2        $3      $4            $5              $6        $7
-dnl
-dnl
-AC_DEFUN([EX_CHECK_ALL],
-[
- AC_LANG_PUSH(C)
- EX_CHECK_STATE=NO
- ex_check_save_LIBS=${LIBS}
- ex_check_save_CPPFLAGS=${CPPFLAGS}
- ex_check_save_LDFLAGS=${LDFLAGS}
- if test "x$7" != "x"; then
-   CPPFLAGS="$CPPFLAGS -I$7"
- fi
- dnl try compiling naked first
- AC_CHECK_LIB($1,$2, [
-    AC_CHECK_HEADER($3,[LIBS="-l$1 ${LIBS}";EX_CHECK_STATE=YES],[])],[])
- if test $EX_CHECK_STATE = NO; then
-    dnl now asking pkg-config for help
-    AC_CHECK_PROGS(PKGCONFIG,[pkg-config],no)
-    if test "$PKGCONFIG" != "no"; then
-          if $PKGCONFIG --exists $4; then
-             CPPFLAGS=${CPPFLAGS}" "`$PKGCONFIG --cflags $4`
-             LDFLAGS=${LDFLAGS}" "`$PKGCONFIG --libs-only-L $4`
-             LDFLAGS=${LDFLAGS}" "`$PKGCONFIG --libs-only-other $4`
-             LIBS=${LIBS}" "`$PKGCONFIG --libs-only-l $4`
-            dnl remove the cached value and test again
-            unset ac_cv_lib_`echo $1 | sed ['s/[^_a-zA-Z0-9]/_/g;s/^[0-9]/_/']`_$2
-             AC_CHECK_LIB($1,$2,[
-                unset ac_cv_header_`echo $3 | sed ['s/[^_a-zA-Z0-9]/_/g;s/^[0-9]/_/']`
-                AC_CHECK_HEADER($3,[EX_CHECK_STATE=YES],[])
-            ],[])
-          else
-             AC_MSG_WARN([
-----------------------------------------------------------------------------
-* I found a copy of pkgconfig, but there is no $4.pc file around.
-  You may want to set the PKG_CONFIG_PATH variable to point to its
-  location.
-----------------------------------------------------------------------------
-                       ])
-           fi
-     fi
-  fi  
-
-  if test ${EX_CHECK_STATE} = NO; then
-     AC_MSG_WARN([
-----------------------------------------------------------------------------
-* I could not find a working copy of $4. Check config.log for hints on why
-  this is the case. Maybe you need to set LDFLAGS and CPPFLAGS appropriately
-  so that compiler and the linker can find lib$1 and its header files. If
-  you have not installed $4, you can get it either from its original home on
-
-     $6
-
-  You can find also find an archive copy on
-
-     http://oss.oetiker.ch/rrdtool/pub/libs
-
-  The last tested version of $4 is $5.
-
-       LIBS=$LIBS
-   LDFLAGS=$LDFLAGS
-  CPPFLAGS=$CPPFLAGS
-
-----------------------------------------------------------------------------
-                ])
-       EX_CHECK_ALL_ERR=YES
-       LIBS="${ex_check_save_LIBS}"
-       CPPFLAGS="${ex_check_save_CPPFLAGS}"
-       LDFLAGS="${ex_check_save_LDFLAGS}"
-    fi
-    AC_LANG_POP(C)
-]
-)
-
-dnl
-dnl  Ptherad check from http://autoconf-archive.cryp.to/acx_pthread.m4
-dnl
-dnl @synopsis ACX_PTHREAD([ACTION-IF-FOUND[, ACTION-IF-NOT-FOUND]])
-dnl
-dnl This macro figures out how to build C programs using POSIX threads.
-dnl It sets the PTHREAD_LIBS output variable to the threads library and
-dnl linker flags, and the PTHREAD_CFLAGS output variable to any special
-dnl C compiler flags that are needed. (The user can also force certain
-dnl compiler flags/libs to be tested by setting these environment
-dnl variables.)
-dnl
-dnl Also sets PTHREAD_CC to any special C compiler that is needed for
-dnl multi-threaded programs (defaults to the value of CC otherwise).
-dnl (This is necessary on AIX to use the special cc_r compiler alias.)
-dnl
-dnl NOTE: You are assumed to not only compile your program with these
-dnl flags, but also link it with them as well. e.g. you should link
-dnl with $PTHREAD_CC $CFLAGS $PTHREAD_CFLAGS $LDFLAGS ... $PTHREAD_LIBS
-dnl $LIBS
-dnl
-dnl If you are only building threads programs, you may wish to use
-dnl these variables in your default LIBS, CFLAGS, and CC:
-dnl
-dnl        LIBS="$PTHREAD_LIBS $LIBS"
-dnl        CFLAGS="$CFLAGS $PTHREAD_CFLAGS"
-dnl        CC="$PTHREAD_CC"
-dnl
-dnl In addition, if the PTHREAD_CREATE_JOINABLE thread-attribute
-dnl constant has a nonstandard name, defines PTHREAD_CREATE_JOINABLE to
-dnl that name (e.g. PTHREAD_CREATE_UNDETACHED on AIX).
-dnl
-dnl ACTION-IF-FOUND is a list of shell commands to run if a threads
-dnl library is found, and ACTION-IF-NOT-FOUND is a list of commands to
-dnl run it if it is not found. If ACTION-IF-FOUND is not specified, the
-dnl default action will define HAVE_PTHREAD.
-dnl
-dnl Please let the authors know if this macro fails on any platform, or
-dnl if you have any other suggestions or comments. This macro was based
-dnl on work by SGJ on autoconf scripts for FFTW (www.fftw.org) (with
-dnl help from M. Frigo), as well as ac_pthread and hb_pthread macros
-dnl posted by Alejandro Forero Cuervo to the autoconf macro repository.
-dnl We are also grateful for the helpful feedback of numerous users.
-dnl
-dnl @category InstalledPackages
-dnl @author Steven G. Johnson <stevenj@alum.mit.edu>
-dnl @version 2005-01-14
-dnl @license GPLWithACException
-
-AC_DEFUN([ACX_PTHREAD], [
-AC_REQUIRE([AC_CANONICAL_HOST])
-AC_LANG_PUSH(C)
-acx_pthread_ok=no
-
-# We used to check for pthread.h first, but this fails if pthread.h
-# requires special compiler flags (e.g. on True64 or Sequent).
-# It gets checked for in the link test anyway.
-
-# First of all, check if the user has set any of the PTHREAD_LIBS,
-# etcetera environment variables, and if threads linking works using
-# them:
-if test x"$PTHREAD_LIBS$PTHREAD_CFLAGS" != x; then
-        save_CFLAGS="$CFLAGS"
-        CFLAGS="$CFLAGS $PTHREAD_CFLAGS"
-        save_LIBS="$LIBS"
-        LIBS="$PTHREAD_LIBS $LIBS"
-        AC_MSG_CHECKING([for pthread_join in LIBS=$PTHREAD_LIBS with CFLAGS=$PTHREAD_CFLAGS])
-        AC_TRY_LINK_FUNC(pthread_join, acx_pthread_ok=yes)
-        AC_MSG_RESULT($acx_pthread_ok)
-        if test x"$acx_pthread_ok" = xno; then
-                PTHREAD_LIBS=""
-                PTHREAD_CFLAGS=""
-        fi
-        LIBS="$save_LIBS"
-        CFLAGS="$save_CFLAGS"
-fi
-
-# We must check for the threads library under a number of different
-# names; the ordering is very important because some systems
-# (e.g. DEC) have both -lpthread and -lpthreads, where one of the
-# libraries is broken (non-POSIX).
-
-# Create a list of thread flags to try.  Items starting with a "-" are
-# C compiler flags, and other items are library names, except for "none"
-# which indicates that we try without any flags at all, and "pthread-config"
-# which is a program returning the flags for the Pth emulation library.
-
-acx_pthread_flags="pthreads none -Kthread -kthread lthread -pthread -pthreads -mthreads pthread --thread-safe -mt pthread-config"
-
-# The ordering *is* (sometimes) important.  Some notes on the
-# individual items follow:
-
-# pthreads: AIX (must check this before -lpthread)
-# none: in case threads are in libc; should be tried before -Kthread and
-#       other compiler flags to prevent continual compiler warnings
-# -Kthread: Sequent (threads in libc, but -Kthread needed for pthread.h)
-# -kthread: FreeBSD kernel threads (preferred to -pthread since SMP-able)
-# lthread: LinuxThreads port on FreeBSD (also preferred to -pthread)
-# -pthread: Linux/gcc (kernel threads), BSD/gcc (userland threads)
-# -pthreads: Solaris/gcc
-# -mthreads: Mingw32/gcc, Lynx/gcc
-# -mt: Sun Workshop C (may only link SunOS threads [-lthread], but it
-#      doesn't hurt to check since this sometimes defines pthreads too;
-#      also defines -D_REENTRANT)
-# pthread: Linux, etcetera
-# --thread-safe: KAI C++
-# pthread-config: use pthread-config program (for GNU Pth library)
-
-case "${host_cpu}-${host_os}" in
-        *solaris*)
-
-        # On Solaris (at least, for some versions), libc contains stubbed
-        # (non-functional) versions of the pthreads routines, so link-based
-        # tests will erroneously succeed.  (We need to link with -pthread or
-        # -lpthread.)  (The stubs are missing pthread_cleanup_push, or rather
-        # a function called by this macro, so we could check for that, but
-        # who knows whether they'll stub that too in a future libc.)  So,
-        # we'll just look for -pthreads and -lpthread first:
-
-        acx_pthread_flags="-pthread -pthreads pthread -mt $acx_pthread_flags"
-        ;;
-esac
-
-if test x"$acx_pthread_ok" = xno; then
-for flag in $acx_pthread_flags; do
-
-        case $flag in
-                none)
-                AC_MSG_CHECKING([whether pthreads work without any flags])
-                ;;
-
-                -*)
-                AC_MSG_CHECKING([whether pthreads work with $flag])
-                PTHREAD_CFLAGS="$flag"
-                ;;
-
-               pthread-config)
-               AC_CHECK_PROG(acx_pthread_config, pthread-config, yes, no)
-               if test x"$acx_pthread_config" = xno; then continue; fi
-               PTHREAD_CFLAGS="`pthread-config --cflags`"
-               PTHREAD_LIBS="`pthread-config --ldflags` `pthread-config --libs`"
-               ;;
-
-                *)
-                AC_MSG_CHECKING([for the pthreads library -l$flag])
-                PTHREAD_LIBS="-l$flag"
-                ;;
-        esac
-
-        save_LIBS="$LIBS"
-        save_CFLAGS="$CFLAGS"
-        LIBS="$PTHREAD_LIBS $LIBS"
-        CFLAGS="$CFLAGS $PTHREAD_CFLAGS"
-
-        # Check for various functions.  We must include pthread.h,
-        # since some functions may be macros.  (On the Sequent, we
-        # need a special flag -Kthread to make this header compile.)
-        # We check for pthread_join because it is in -lpthread on IRIX
-        # while pthread_create is in libc.  We check for pthread_attr_init
-        # due to DEC craziness with -lpthreads.  We check for
-        # pthread_cleanup_push because it is one of the few pthread
-        # functions on Solaris that doesn't have a non-functional libc stub.
-        # We try pthread_create on general principles.
-        AC_LINK_IFELSE([AC_LANG_PROGRAM([[#include <pthread.h>]], [[pthread_t th; pthread_join(th, 0);
-                     pthread_attr_init(0); pthread_cleanup_push(0, 0);
-                     pthread_create(0,0,0,0); pthread_cleanup_pop(0); ]])],[acx_pthread_ok=yes],[])
-
-        LIBS="$save_LIBS"
-        CFLAGS="$save_CFLAGS"
-
-        AC_MSG_RESULT($acx_pthread_ok)
-        if test "x$acx_pthread_ok" = xyes; then
-                break;
-        fi
-
-        PTHREAD_LIBS=""
-        PTHREAD_CFLAGS=""
-done
-fi
-
-# Various other checks:
-if test "x$acx_pthread_ok" = xyes; then
-        save_LIBS="$LIBS"
-        LIBS="$PTHREAD_LIBS $LIBS"
-        save_CFLAGS="$CFLAGS"
-        CFLAGS="$CFLAGS $PTHREAD_CFLAGS"
-
-        # Detect AIX lossage: JOINABLE attribute is called UNDETACHED.
-       AC_MSG_CHECKING([for joinable pthread attribute])
-       attr_name=unknown
-       for attr in PTHREAD_CREATE_JOINABLE PTHREAD_CREATE_UNDETACHED; do
-           AC_LINK_IFELSE([AC_LANG_PROGRAM([[#include <pthread.h>]], [[int attr=$attr;]])],[attr_name=$attr; break],[])
-       done
-        AC_MSG_RESULT($attr_name)
-        if test "$attr_name" != PTHREAD_CREATE_JOINABLE; then
-            AC_DEFINE_UNQUOTED(PTHREAD_CREATE_JOINABLE, $attr_name,
-                               [Define to necessary symbol if this constant
-                                uses a non-standard name on your system.])
-        fi
-
-        AC_MSG_CHECKING([if more special flags are required for pthreads])
-        x_rflag=no
-        case "${host_cpu}-${host_os}" in
-            *-aix* | *-freebsd* | *-darwin*) x_rflag="-D_THREAD_SAFE";;
-            *solaris* | *-osf* | *-hpux*) x_rflag="-D_REENTRANT";;
-            *-linux*)
-            if test x"$PTHREAD_CFLAGS" = "x-pthread"; then
-                # For Linux/gcc "-pthread" implies "-lpthread". We need, however, to make this explicit
-                # in PTHREAD_LIBS such that a shared library to be built properly depends on libpthread.
-                PTHREAD_LIBS="-lpthread $PTHREAD_LIBS"
-            fi;;
-        esac
-        AC_MSG_RESULT(${x_rflag})
-        if test "x$x_rflag" != xno; then
-            PTHREAD_CFLAGS="$x_rflag $PTHREAD_CFLAGS"
-        fi
-
-        LIBS="$save_LIBS"
-        CFLAGS="$save_CFLAGS"
-
-        # More AIX lossage: must compile with cc_r
-        AC_CHECK_PROG(PTHREAD_CC, cc_r, cc_r, ${CC})
-else
-        PTHREAD_CC="$CC"
-fi
-
-AC_SUBST(PTHREAD_LIBS)
-AC_SUBST(PTHREAD_CFLAGS)
-AC_SUBST(PTHREAD_CC)
-
-# Finally, execute ACTION-IF-FOUND/ACTION-IF-NOT-FOUND:
-if test x"$acx_pthread_ok" = xyes; then
-        ifelse([$1],,AC_DEFINE(HAVE_PTHREAD,1,[Define if you have POSIX threads libraries and header files.]),[$1])
-        :
-else
-        acx_pthread_ok=no
-        $2
-fi
-AC_LANG_POP(C)
-])dnl ACX_PTHREAD
-
-
-dnl
-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]])
-dnl
-
-dnl substitute them in all the files listed in AC_OUTPUT
-AC_SUBST(PERLFLAGS)
-
-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
-
-/* solaris 10 it defines isnan such that only forte can compile it ... bad bad  */
-#if (defined(HAVE_ISNAN) && defined(isnan) && defined(HAVE_FPCLASS))
-#  undef isnan
-#  define isnan(a) (fpclass(a) == FP_SNAN || fpclass(a) == FP_QNAN)
-#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 rrdnan,rrdinf,rrdc,rrdzero;
-    $4;
-    /* some math to see if we get a floating point exception */
-    rrdzero=sin(0.0); /* don't let the compiler optimize us away */
-    rrdnan=0.0/rrdzero; /* especially here */
-    rrdinf=1.0/rrdzero; /* and here. I want to know if it can do the magic */
-                 /* at run time without sig fpe */
-    rrdc = rrdinf + rrdnan;
-    rrdc = rrdinf / rrdnan;
-    if (! isnan(rrdnan)) {printf ("not isnan(NaN) ... "); return 1;}
-    if (rrdnan == rrdnan) {printf ("nan == nan ... "); return 1;}
-    if (! isinf(rrdinf)) {printf ("not isinf(oo) ... "); return 1;}
-    if (! isinf(-rrdinf)) {printf ("not isinf(-oo) ... "); return 1;}
-    if (! rrdinf > 0) {printf ("not inf > 0 ... "); return 1;}
-    if (! -rrdinf < 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
-
-])
-
-AC_DEFUN([AC_FULL_IEEE],[
-AC_LANG_PUSH(C)
-_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 (tobi@oetiker.ch).
-Check config.log to see what went wrong ...
-]))])])])])])])])])])
-
-AC_LANG_POP(C)
-
-])
-
-
-dnl a macro to check for ability to create python extensions
-dnl  AM_CHECK_PYTHON_HEADERS([ACTION-IF-POSSIBLE], [ACTION-IF-NOT-POSSIBLE])
-dnl function also defines PYTHON_INCLUDES
-AC_DEFUN([AM_CHECK_PYTHON_HEADERS],
-[AC_REQUIRE([AM_PATH_PYTHON])
-AC_MSG_CHECKING(for headers required to compile python extensions)
-dnl deduce PYTHON_INCLUDES
-py_prefix=`$PYTHON -c "import sys; print sys.prefix"`
-py_exec_prefix=`$PYTHON -c "import sys; print sys.exec_prefix"`
-PYTHON_INCLUDES="-I${py_prefix}/include/python${PYTHON_VERSION}"
-if test "$py_prefix" != "$py_exec_prefix"; then
-  PYTHON_INCLUDES="$PYTHON_INCLUDES -I${py_exec_prefix}/include/python${PYTHON_VERSION}"
-fi
-AC_SUBST(PYTHON_INCLUDES)
-dnl check if the headers exist:
-save_CPPFLAGS="$CPPFLAGS"
-CPPFLAGS="$CPPFLAGS $PYTHON_INCLUDES"
-AC_TRY_CPP([#include <Python.h>],dnl
-[AC_MSG_RESULT(found)
-$1],dnl
-[AC_MSG_RESULT(not found)
-$2])
-CPPFLAGS="$save_CPPFLAGS"
-])
-
-dnl a macro to add some color to the build process.
-dnl CONFIGURE_PART(MESSAGE)
-
-AC_DEFUN([CONFIGURE_PART],[
-case $TERM in
-       #   for the most important terminal types we directly know the sequences
-       xterm|xterm*|vt220|vt220*)
-               T_MD=`awk 'BEGIN { printf("%c%c%c%c", 27, 91, 49, 109); }' </dev/null 2>/dev/null`
-               T_ME=`awk 'BEGIN { printf("%c%c%c", 27, 91, 109); }' </dev/null 2>/dev/null`
-       ;;
-       vt100|vt100*|cygwin)
-               T_MD=`awk 'BEGIN { printf("%c%c%c%c%c%c", 27, 91, 49, 109, 0, 0); }' </dev/null 2>/dev/null`
-               T_ME=`awk 'BEGIN { printf("%c%c%c%c%c", 27, 91, 109, 0, 0); }' </dev/null 2>/dev/null`
-       ;;
-       *)
-               T_MD=''
-               T_ME=''
-       ;;
-esac
-  AC_MSG_RESULT()
-  AC_MSG_RESULT([${T_MD}$1${T_ME}])
-])
-
-dnl check 
-
-AC_DEFUN([CHECK_FOR_WORKING_MS_ASYNC], [
-AC_MSG_CHECKING([if msync with MS_ASYNC updates the files mtime])
-AC_CACHE_VAL([rd_cv_ms_async],
-[AC_RUN_IFELSE([AC_LANG_SOURCE([[
-#include <fcntl.h>
-#include <sys/types.h>
-#include <sys/stat.h>
-#include <unistd.h>
-#include <stdio.h>
-#include <sys/mman.h>
-#include <stdlib.h>
-#include <utime.h>
-int main(void){
-        int fd;
-        struct stat stbuf;
-        char *addr;
-        int res;
-        char temp[] = "mmaptestXXXXXX";
-        struct utimbuf newtime;
-
-        time_t create_ts;
-        fd = mkstemp(temp);
-        if (fd == -1){
-            perror(temp);
-            return 1;
-        }
-        write(fd,"12345\n", 6);        
-        stat(temp, &stbuf);
-        create_ts = stbuf.st_mtime;
-        newtime.actime = 0;
-        newtime.modtime = 0;
-        utime(temp,&newtime);
-        addr = mmap(NULL, 4096, PROT_READ | PROT_WRITE, MAP_SHARED, fd, 0);
-        if (addr == MAP_FAILED) {
-            perror("mmap");
-            goto bad_exit;
-        }
-        addr[0]='x';
-        res = msync(addr, 4, MS_ASYNC);
-        if (res == -1) {
-           perror("msync");
-           goto bad_exit;
-        }
-        res = close(fd);        
-        if (res == -1) {
-           perror("close");
-           goto bad_exit;
-        }
-        /* The ASYNC means that we schedule the msync and return immediately.
-           Since we want to see if the modification time is updated upon
-           msync(), we have to make sure that our asynchronous request
-           completes before we stat below. In a real application, the
-           request would be completed at a random time in the future
-           but for this test we do not want to wait an arbitrary amount of
-           time, so force a commit now.  */
-        sync();
-        stat(temp, &stbuf);
-        if (create_ts > stbuf.st_mtime){
-           goto bad_exit;
-        }      
-        unlink(temp);  
-        return 0;
-     bad_exit:
-        unlink(temp);
-        return 1;
-}
-]])],[rd_cv_ms_async=ok],[rd_cv_ms_async=broken],[:])])
-
-
-if test "${rd_cv_ms_async}" = "ok"; then
- AC_MSG_RESULT(yes)
-else
- AC_DEFINE_UNQUOTED(HAVE_BROKEN_MS_ASYNC, 1 , [set to 1 if msync with MS_ASYNC fails to update mtime])
- AC_MSG_RESULT(no)
- AC_MSG_WARN([With mmap access, your platform fails to update the files])
- AC_MSG_WARN([mtime. RRDtool will work around this problem by calling utime on each])
- AC_MSG_WARN([file it opens for rw access.])
- sleep 2
-fi
-
-])
-
diff --git a/program/autogen.sh b/program/autogen.sh
new file mode 100755 (executable)
index 0000000..0f4bfad
--- /dev/null
@@ -0,0 +1,2 @@
+#!/bin/sh
+autoreconf --force --install --verbose -Iconfig -Im4
index 10e08f9cee9c02f9e1dbe32eaa546283b8124548..064c1a682f22036c6f3427a9d81fecdc03c8b9db 100644 (file)
@@ -29,7 +29,7 @@ dnl see http://sourceware.org/autobook/autobook/autobook_91.html
 dnl 
 LIBVERS=4:7:0
 AC_SUBST(LIBVERS)
-
+AC_USE_SYSTEM_EXTENSIONS
 AC_CANONICAL_TARGET
 AM_INIT_AUTOMAKE
 AM_MAINTAINER_MODE
@@ -246,45 +246,8 @@ AC_CHECK_FUNCS(posix_fadvise)
 
 CONFIGURE_PART(Libintl Processing)
 
-
-dnl gettext
-GETTEXT_PACKAGE=rrdtool
-AC_SUBST(GETTEXT_PACKAGE)
-AC_DEFINE_UNQUOTED(GETTEXT_PACKAGE,"$GETTEXT_PACKAGE",[Gettext package])
-
-AM_GLIB_GNU_GETTEXT()
-
-AC_ARG_ENABLE(libintl,[  --disable-libintl        i18n support (libintl)],
-[],[enable_libintl=yes])
-
-if test x$enable_libintl = xyes; then
-  IT_PROG_INTLTOOL([0.35.0],[no-xml])
-fi
-
-if test x$enable_libintl = xyes -a x$MSGFMT = xno; then
-  AC_MSG_WARN(I could not find msgfmt. Diabeling libintl build.)
-  enable_libintl=no
-fi
-
-if test x$enable_libintl = xyes; then
-  AC_CHECK_HEADERS(libintl.h,[],[AC_MSG_RESULT(disabeling libintl build); enable_libintl=no])
-fi
-
-if test x$enable_libintl = xyes ; then
-  dnl it seems bsd synstems need to link against libintl
-  dnl when compiling rrdupdate. lets check        
-  AC_CHECK_LIB(intl, libintl_gettext,[LIB_LIBINTL="-lintl"])
-fi
-
-dnl use for linking rrdupdate
-AC_SUBST(LIB_LIBINTL)
-
-dnl do not touch the po stuff if we are not going to build intl
-AM_CONDITIONAL(BUILD_LIBINTL,[test x$enable_libintl = xyes])
-
-if test x$enable_libintl = xyes; then
-   AC_DEFINE([BUILD_LIBINTL], [], [Use this in code sections to mark them for libintl build])
-fi
+AM_GNU_GETTEXT_VERSION(0.17)
+AM_GNU_GETTEXT()
 
 CONFIGURE_PART(IEEE Math Checks)
  
@@ -729,6 +692,7 @@ AC_CONFIG_FILES([examples/perftest.pl])
 AC_CONFIG_FILES([examples/Makefile])
 AC_CONFIG_FILES([doc/Makefile])
 AC_CONFIG_FILES([po/Makefile.in])
+AC_CONFIG_FILES([intl/Makefile])  
 AC_CONFIG_FILES([src/Makefile])
 AC_CONFIG_FILES([src/librrd.sym.in])
 AC_CONFIG_FILES([src/librrd.pc])          
@@ -772,7 +736,7 @@ echo "    Build Tcl Bindings: $enable_tcl"
 echo " Build Python Bindings: $enable_python"
 echo "          Build rrdcgi: $enable_rrdcgi"
 echo "       Build librrd MT: $enable_pthread"
-echo "     Link with libintl: $enable_libintl"
+echo "           Use gettext: $USE_NLS"
 echo
 echo "             Libraries: $ALL_LIBS"
 echo
diff --git a/program/m4/acinclude.m4 b/program/m4/acinclude.m4
new file mode 100644 (file)
index 0000000..5ea34f0
--- /dev/null
@@ -0,0 +1,592 @@
+dnl Helper Functions for the RRDtool configure.ac script
+dnl 
+dnl this file gets included into aclocal.m4 when runnning aclocal
+dnl
+dnl
+dnl
+dnl Check for the presence of a particular library and its header files
+dnl if this check fails set the environment variable EX_CHECK_ALL_ERR to YES
+dnl and prints out a helful message
+dnl
+dnl
+dnl EX_CHECK_ALL(library, function, header, pkgconf name, tested-version, homepage, cppflags)
+dnl              $1       $2        $3      $4            $5              $6        $7
+dnl
+dnl
+AC_DEFUN([EX_CHECK_ALL],
+[
+ AC_LANG_PUSH(C)
+ EX_CHECK_STATE=NO
+ ex_check_save_LIBS=${LIBS}
+ ex_check_save_CPPFLAGS=${CPPFLAGS}
+ ex_check_save_LDFLAGS=${LDFLAGS}
+ if test "x$7" != "x"; then
+   CPPFLAGS="$CPPFLAGS -I$7"
+ fi
+ dnl try compiling naked first
+ AC_CHECK_LIB($1,$2, [
+    AC_CHECK_HEADER($3,[LIBS="-l$1 ${LIBS}";EX_CHECK_STATE=YES],[])],[])
+ if test $EX_CHECK_STATE = NO; then
+    dnl now asking pkg-config for help
+    AC_CHECK_PROGS(PKGCONFIG,[pkg-config],no)
+    if test "$PKGCONFIG" != "no"; then
+          if $PKGCONFIG --exists $4; then
+             CPPFLAGS=${CPPFLAGS}" "`$PKGCONFIG --cflags $4`
+             LDFLAGS=${LDFLAGS}" "`$PKGCONFIG --libs-only-L $4`
+             LDFLAGS=${LDFLAGS}" "`$PKGCONFIG --libs-only-other $4`
+             LIBS=${LIBS}" "`$PKGCONFIG --libs-only-l $4`
+            dnl remove the cached value and test again
+            unset ac_cv_lib_`echo $1 | sed ['s/[^_a-zA-Z0-9]/_/g;s/^[0-9]/_/']`_$2
+             AC_CHECK_LIB($1,$2,[
+                unset ac_cv_header_`echo $3 | sed ['s/[^_a-zA-Z0-9]/_/g;s/^[0-9]/_/']`
+                AC_CHECK_HEADER($3,[EX_CHECK_STATE=YES],[])
+            ],[])
+          else
+             AC_MSG_WARN([
+----------------------------------------------------------------------------
+* I found a copy of pkgconfig, but there is no $4.pc file around.
+  You may want to set the PKG_CONFIG_PATH variable to point to its
+  location.
+----------------------------------------------------------------------------
+                       ])
+           fi
+     fi
+  fi  
+
+  if test ${EX_CHECK_STATE} = NO; then
+     AC_MSG_WARN([
+----------------------------------------------------------------------------
+* I could not find a working copy of $4. Check config.log for hints on why
+  this is the case. Maybe you need to set LDFLAGS and CPPFLAGS appropriately
+  so that compiler and the linker can find lib$1 and its header files. If
+  you have not installed $4, you can get it either from its original home on
+
+     $6
+
+  You can find also find an archive copy on
+
+     http://oss.oetiker.ch/rrdtool/pub/libs
+
+  The last tested version of $4 is $5.
+
+       LIBS=$LIBS
+   LDFLAGS=$LDFLAGS
+  CPPFLAGS=$CPPFLAGS
+
+----------------------------------------------------------------------------
+                ])
+       EX_CHECK_ALL_ERR=YES
+       LIBS="${ex_check_save_LIBS}"
+       CPPFLAGS="${ex_check_save_CPPFLAGS}"
+       LDFLAGS="${ex_check_save_LDFLAGS}"
+    fi
+    AC_LANG_POP(C)
+]
+)
+
+dnl
+dnl  Ptherad check from http://autoconf-archive.cryp.to/acx_pthread.m4
+dnl
+dnl @synopsis ACX_PTHREAD([ACTION-IF-FOUND[, ACTION-IF-NOT-FOUND]])
+dnl
+dnl This macro figures out how to build C programs using POSIX threads.
+dnl It sets the PTHREAD_LIBS output variable to the threads library and
+dnl linker flags, and the PTHREAD_CFLAGS output variable to any special
+dnl C compiler flags that are needed. (The user can also force certain
+dnl compiler flags/libs to be tested by setting these environment
+dnl variables.)
+dnl
+dnl Also sets PTHREAD_CC to any special C compiler that is needed for
+dnl multi-threaded programs (defaults to the value of CC otherwise).
+dnl (This is necessary on AIX to use the special cc_r compiler alias.)
+dnl
+dnl NOTE: You are assumed to not only compile your program with these
+dnl flags, but also link it with them as well. e.g. you should link
+dnl with $PTHREAD_CC $CFLAGS $PTHREAD_CFLAGS $LDFLAGS ... $PTHREAD_LIBS
+dnl $LIBS
+dnl
+dnl If you are only building threads programs, you may wish to use
+dnl these variables in your default LIBS, CFLAGS, and CC:
+dnl
+dnl        LIBS="$PTHREAD_LIBS $LIBS"
+dnl        CFLAGS="$CFLAGS $PTHREAD_CFLAGS"
+dnl        CC="$PTHREAD_CC"
+dnl
+dnl In addition, if the PTHREAD_CREATE_JOINABLE thread-attribute
+dnl constant has a nonstandard name, defines PTHREAD_CREATE_JOINABLE to
+dnl that name (e.g. PTHREAD_CREATE_UNDETACHED on AIX).
+dnl
+dnl ACTION-IF-FOUND is a list of shell commands to run if a threads
+dnl library is found, and ACTION-IF-NOT-FOUND is a list of commands to
+dnl run it if it is not found. If ACTION-IF-FOUND is not specified, the
+dnl default action will define HAVE_PTHREAD.
+dnl
+dnl Please let the authors know if this macro fails on any platform, or
+dnl if you have any other suggestions or comments. This macro was based
+dnl on work by SGJ on autoconf scripts for FFTW (www.fftw.org) (with
+dnl help from M. Frigo), as well as ac_pthread and hb_pthread macros
+dnl posted by Alejandro Forero Cuervo to the autoconf macro repository.
+dnl We are also grateful for the helpful feedback of numerous users.
+dnl
+dnl @category InstalledPackages
+dnl @author Steven G. Johnson <stevenj@alum.mit.edu>
+dnl @version 2005-01-14
+dnl @license GPLWithACException
+
+AC_DEFUN([ACX_PTHREAD], [
+AC_REQUIRE([AC_CANONICAL_HOST])
+AC_LANG_PUSH(C)
+acx_pthread_ok=no
+
+# We used to check for pthread.h first, but this fails if pthread.h
+# requires special compiler flags (e.g. on True64 or Sequent).
+# It gets checked for in the link test anyway.
+
+# First of all, check if the user has set any of the PTHREAD_LIBS,
+# etcetera environment variables, and if threads linking works using
+# them:
+if test x"$PTHREAD_LIBS$PTHREAD_CFLAGS" != x; then
+        save_CFLAGS="$CFLAGS"
+        CFLAGS="$CFLAGS $PTHREAD_CFLAGS"
+        save_LIBS="$LIBS"
+        LIBS="$PTHREAD_LIBS $LIBS"
+        AC_MSG_CHECKING([for pthread_join in LIBS=$PTHREAD_LIBS with CFLAGS=$PTHREAD_CFLAGS])
+        AC_TRY_LINK_FUNC(pthread_join, acx_pthread_ok=yes)
+        AC_MSG_RESULT($acx_pthread_ok)
+        if test x"$acx_pthread_ok" = xno; then
+                PTHREAD_LIBS=""
+                PTHREAD_CFLAGS=""
+        fi
+        LIBS="$save_LIBS"
+        CFLAGS="$save_CFLAGS"
+fi
+
+# We must check for the threads library under a number of different
+# names; the ordering is very important because some systems
+# (e.g. DEC) have both -lpthread and -lpthreads, where one of the
+# libraries is broken (non-POSIX).
+
+# Create a list of thread flags to try.  Items starting with a "-" are
+# C compiler flags, and other items are library names, except for "none"
+# which indicates that we try without any flags at all, and "pthread-config"
+# which is a program returning the flags for the Pth emulation library.
+
+acx_pthread_flags="pthreads none -Kthread -kthread lthread -pthread -pthreads -mthreads pthread --thread-safe -mt pthread-config"
+
+# The ordering *is* (sometimes) important.  Some notes on the
+# individual items follow:
+
+# pthreads: AIX (must check this before -lpthread)
+# none: in case threads are in libc; should be tried before -Kthread and
+#       other compiler flags to prevent continual compiler warnings
+# -Kthread: Sequent (threads in libc, but -Kthread needed for pthread.h)
+# -kthread: FreeBSD kernel threads (preferred to -pthread since SMP-able)
+# lthread: LinuxThreads port on FreeBSD (also preferred to -pthread)
+# -pthread: Linux/gcc (kernel threads), BSD/gcc (userland threads)
+# -pthreads: Solaris/gcc
+# -mthreads: Mingw32/gcc, Lynx/gcc
+# -mt: Sun Workshop C (may only link SunOS threads [-lthread], but it
+#      doesn't hurt to check since this sometimes defines pthreads too;
+#      also defines -D_REENTRANT)
+# pthread: Linux, etcetera
+# --thread-safe: KAI C++
+# pthread-config: use pthread-config program (for GNU Pth library)
+
+case "${host_cpu}-${host_os}" in
+        *solaris*)
+
+        # On Solaris (at least, for some versions), libc contains stubbed
+        # (non-functional) versions of the pthreads routines, so link-based
+        # tests will erroneously succeed.  (We need to link with -pthread or
+        # -lpthread.)  (The stubs are missing pthread_cleanup_push, or rather
+        # a function called by this macro, so we could check for that, but
+        # who knows whether they'll stub that too in a future libc.)  So,
+        # we'll just look for -pthreads and -lpthread first:
+
+        acx_pthread_flags="-pthread -pthreads pthread -mt $acx_pthread_flags"
+        ;;
+esac
+
+if test x"$acx_pthread_ok" = xno; then
+for flag in $acx_pthread_flags; do
+
+        case $flag in
+                none)
+                AC_MSG_CHECKING([whether pthreads work without any flags])
+                ;;
+
+                -*)
+                AC_MSG_CHECKING([whether pthreads work with $flag])
+                PTHREAD_CFLAGS="$flag"
+                ;;
+
+               pthread-config)
+               AC_CHECK_PROG(acx_pthread_config, pthread-config, yes, no)
+               if test x"$acx_pthread_config" = xno; then continue; fi
+               PTHREAD_CFLAGS="`pthread-config --cflags`"
+               PTHREAD_LIBS="`pthread-config --ldflags` `pthread-config --libs`"
+               ;;
+
+                *)
+                AC_MSG_CHECKING([for the pthreads library -l$flag])
+                PTHREAD_LIBS="-l$flag"
+                ;;
+        esac
+
+        save_LIBS="$LIBS"
+        save_CFLAGS="$CFLAGS"
+        LIBS="$PTHREAD_LIBS $LIBS"
+        CFLAGS="$CFLAGS $PTHREAD_CFLAGS"
+
+        # Check for various functions.  We must include pthread.h,
+        # since some functions may be macros.  (On the Sequent, we
+        # need a special flag -Kthread to make this header compile.)
+        # We check for pthread_join because it is in -lpthread on IRIX
+        # while pthread_create is in libc.  We check for pthread_attr_init
+        # due to DEC craziness with -lpthreads.  We check for
+        # pthread_cleanup_push because it is one of the few pthread
+        # functions on Solaris that doesn't have a non-functional libc stub.
+        # We try pthread_create on general principles.
+        AC_LINK_IFELSE([AC_LANG_PROGRAM([[#include <pthread.h>]], [[pthread_t th; pthread_join(th, 0);
+                     pthread_attr_init(0); pthread_cleanup_push(0, 0);
+                     pthread_create(0,0,0,0); pthread_cleanup_pop(0); ]])],[acx_pthread_ok=yes],[])
+
+        LIBS="$save_LIBS"
+        CFLAGS="$save_CFLAGS"
+
+        AC_MSG_RESULT($acx_pthread_ok)
+        if test "x$acx_pthread_ok" = xyes; then
+                break;
+        fi
+
+        PTHREAD_LIBS=""
+        PTHREAD_CFLAGS=""
+done
+fi
+
+# Various other checks:
+if test "x$acx_pthread_ok" = xyes; then
+        save_LIBS="$LIBS"
+        LIBS="$PTHREAD_LIBS $LIBS"
+        save_CFLAGS="$CFLAGS"
+        CFLAGS="$CFLAGS $PTHREAD_CFLAGS"
+
+        # Detect AIX lossage: JOINABLE attribute is called UNDETACHED.
+       AC_MSG_CHECKING([for joinable pthread attribute])
+       attr_name=unknown
+       for attr in PTHREAD_CREATE_JOINABLE PTHREAD_CREATE_UNDETACHED; do
+           AC_LINK_IFELSE([AC_LANG_PROGRAM([[#include <pthread.h>]], [[int attr=$attr;]])],[attr_name=$attr; break],[])
+       done
+        AC_MSG_RESULT($attr_name)
+        if test "$attr_name" != PTHREAD_CREATE_JOINABLE; then
+            AC_DEFINE_UNQUOTED(PTHREAD_CREATE_JOINABLE, $attr_name,
+                               [Define to necessary symbol if this constant
+                                uses a non-standard name on your system.])
+        fi
+
+        AC_MSG_CHECKING([if more special flags are required for pthreads])
+        x_rflag=no
+        case "${host_cpu}-${host_os}" in
+            *-aix* | *-freebsd* | *-darwin*) x_rflag="-D_THREAD_SAFE";;
+            *solaris* | *-osf* | *-hpux*) x_rflag="-D_REENTRANT";;
+            *-linux*)
+            if test x"$PTHREAD_CFLAGS" = "x-pthread"; then
+                # For Linux/gcc "-pthread" implies "-lpthread". We need, however, to make this explicit
+                # in PTHREAD_LIBS such that a shared library to be built properly depends on libpthread.
+                PTHREAD_LIBS="-lpthread $PTHREAD_LIBS"
+            fi;;
+        esac
+        AC_MSG_RESULT(${x_rflag})
+        if test "x$x_rflag" != xno; then
+            PTHREAD_CFLAGS="$x_rflag $PTHREAD_CFLAGS"
+        fi
+
+        LIBS="$save_LIBS"
+        CFLAGS="$save_CFLAGS"
+
+        # More AIX lossage: must compile with cc_r
+        AC_CHECK_PROG(PTHREAD_CC, cc_r, cc_r, ${CC})
+else
+        PTHREAD_CC="$CC"
+fi
+
+AC_SUBST(PTHREAD_LIBS)
+AC_SUBST(PTHREAD_CFLAGS)
+AC_SUBST(PTHREAD_CC)
+
+# Finally, execute ACTION-IF-FOUND/ACTION-IF-NOT-FOUND:
+if test x"$acx_pthread_ok" = xyes; then
+        ifelse([$1],,AC_DEFINE(HAVE_PTHREAD,1,[Define if you have POSIX threads libraries and header files.]),[$1])
+        :
+else
+        acx_pthread_ok=no
+        $2
+fi
+AC_LANG_POP(C)
+])dnl ACX_PTHREAD
+
+
+dnl
+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]])
+dnl
+
+dnl substitute them in all the files listed in AC_OUTPUT
+AC_SUBST(PERLFLAGS)
+
+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
+
+/* solaris 10 it defines isnan such that only forte can compile it ... bad bad  */
+#if (defined(HAVE_ISNAN) && defined(isnan) && defined(HAVE_FPCLASS))
+#  undef isnan
+#  define isnan(a) (fpclass(a) == FP_SNAN || fpclass(a) == FP_QNAN)
+#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 rrdnan,rrdinf,rrdc,rrdzero;
+    $4;
+    /* some math to see if we get a floating point exception */
+    rrdzero=sin(0.0); /* don't let the compiler optimize us away */
+    rrdnan=0.0/rrdzero; /* especially here */
+    rrdinf=1.0/rrdzero; /* and here. I want to know if it can do the magic */
+                 /* at run time without sig fpe */
+    rrdc = rrdinf + rrdnan;
+    rrdc = rrdinf / rrdnan;
+    if (! isnan(rrdnan)) {printf ("not isnan(NaN) ... "); return 1;}
+    if (rrdnan == rrdnan) {printf ("nan == nan ... "); return 1;}
+    if (! isinf(rrdinf)) {printf ("not isinf(oo) ... "); return 1;}
+    if (! isinf(-rrdinf)) {printf ("not isinf(-oo) ... "); return 1;}
+    if (! rrdinf > 0) {printf ("not inf > 0 ... "); return 1;}
+    if (! -rrdinf < 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
+
+])
+
+AC_DEFUN([AC_FULL_IEEE],[
+AC_LANG_PUSH(C)
+_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 (tobi@oetiker.ch).
+Check config.log to see what went wrong ...
+]))])])])])])])])])])
+
+AC_LANG_POP(C)
+
+])
+
+
+dnl a macro to check for ability to create python extensions
+dnl  AM_CHECK_PYTHON_HEADERS([ACTION-IF-POSSIBLE], [ACTION-IF-NOT-POSSIBLE])
+dnl function also defines PYTHON_INCLUDES
+AC_DEFUN([AM_CHECK_PYTHON_HEADERS],
+[AC_REQUIRE([AM_PATH_PYTHON])
+AC_MSG_CHECKING(for headers required to compile python extensions)
+dnl deduce PYTHON_INCLUDES
+py_prefix=`$PYTHON -c "import sys; print sys.prefix"`
+py_exec_prefix=`$PYTHON -c "import sys; print sys.exec_prefix"`
+PYTHON_INCLUDES="-I${py_prefix}/include/python${PYTHON_VERSION}"
+if test "$py_prefix" != "$py_exec_prefix"; then
+  PYTHON_INCLUDES="$PYTHON_INCLUDES -I${py_exec_prefix}/include/python${PYTHON_VERSION}"
+fi
+AC_SUBST(PYTHON_INCLUDES)
+dnl check if the headers exist:
+save_CPPFLAGS="$CPPFLAGS"
+CPPFLAGS="$CPPFLAGS $PYTHON_INCLUDES"
+AC_TRY_CPP([#include <Python.h>],dnl
+[AC_MSG_RESULT(found)
+$1],dnl
+[AC_MSG_RESULT(not found)
+$2])
+CPPFLAGS="$save_CPPFLAGS"
+])
+
+dnl a macro to add some color to the build process.
+dnl CONFIGURE_PART(MESSAGE)
+
+AC_DEFUN([CONFIGURE_PART],[
+case $TERM in
+       #   for the most important terminal types we directly know the sequences
+       xterm|xterm*|vt220|vt220*)
+               T_MD=`awk 'BEGIN { printf("%c%c%c%c", 27, 91, 49, 109); }' </dev/null 2>/dev/null`
+               T_ME=`awk 'BEGIN { printf("%c%c%c", 27, 91, 109); }' </dev/null 2>/dev/null`
+       ;;
+       vt100|vt100*|cygwin)
+               T_MD=`awk 'BEGIN { printf("%c%c%c%c%c%c", 27, 91, 49, 109, 0, 0); }' </dev/null 2>/dev/null`
+               T_ME=`awk 'BEGIN { printf("%c%c%c%c%c", 27, 91, 109, 0, 0); }' </dev/null 2>/dev/null`
+       ;;
+       *)
+               T_MD=''
+               T_ME=''
+       ;;
+esac
+  AC_MSG_RESULT()
+  AC_MSG_RESULT([${T_MD}$1${T_ME}])
+])
+
+dnl check 
+
+AC_DEFUN([CHECK_FOR_WORKING_MS_ASYNC], [
+AC_MSG_CHECKING([if msync with MS_ASYNC updates the files mtime])
+AC_CACHE_VAL([rd_cv_ms_async],
+[AC_RUN_IFELSE([AC_LANG_SOURCE([[
+#include <fcntl.h>
+#include <sys/types.h>
+#include <sys/stat.h>
+#include <unistd.h>
+#include <stdio.h>
+#include <sys/mman.h>
+#include <stdlib.h>
+#include <utime.h>
+int main(void){
+        int fd;
+        struct stat stbuf;
+        char *addr;
+        int res;
+        char temp[] = "mmaptestXXXXXX";
+        struct utimbuf newtime;
+
+        time_t create_ts;
+        fd = mkstemp(temp);
+        if (fd == -1){
+            perror(temp);
+            return 1;
+        }
+        write(fd,"12345\n", 6);        
+        stat(temp, &stbuf);
+        create_ts = stbuf.st_mtime;
+        newtime.actime = 0;
+        newtime.modtime = 0;
+        utime(temp,&newtime);
+        addr = mmap(NULL, 4096, PROT_READ | PROT_WRITE, MAP_SHARED, fd, 0);
+        if (addr == MAP_FAILED) {
+            perror("mmap");
+            goto bad_exit;
+        }
+        addr[0]='x';
+        res = msync(addr, 4, MS_ASYNC);
+        if (res == -1) {
+           perror("msync");
+           goto bad_exit;
+        }
+        res = close(fd);        
+        if (res == -1) {
+           perror("close");
+           goto bad_exit;
+        }
+        /* The ASYNC means that we schedule the msync and return immediately.
+           Since we want to see if the modification time is updated upon
+           msync(), we have to make sure that our asynchronous request
+           completes before we stat below. In a real application, the
+           request would be completed at a random time in the future
+           but for this test we do not want to wait an arbitrary amount of
+           time, so force a commit now.  */
+        sync();
+        stat(temp, &stbuf);
+        if (create_ts > stbuf.st_mtime){
+           goto bad_exit;
+        }      
+        unlink(temp);  
+        return 0;
+     bad_exit:
+        unlink(temp);
+        return 1;
+}
+]])],[rd_cv_ms_async=ok],[rd_cv_ms_async=broken],[:])])
+
+
+if test "${rd_cv_ms_async}" = "ok"; then
+ AC_MSG_RESULT(yes)
+else
+ AC_DEFINE_UNQUOTED(HAVE_BROKEN_MS_ASYNC, 1 , [set to 1 if msync with MS_ASYNC fails to update mtime])
+ AC_MSG_RESULT(no)
+ AC_MSG_WARN([With mmap access, your platform fails to update the files])
+ AC_MSG_WARN([mtime. RRDtool will work around this problem by calling utime on each])
+ AC_MSG_WARN([file it opens for rw access.])
+ sleep 2
+fi
+
+])
+
index 46ae20d6284439cec5ade4a66b2ac83f5a7238c6..8b137891791fe96927ad78e64b0aad7bded08bdc 100644 (file)
@@ -1,2 +1 @@
-de
 
diff --git a/program/po/de.po b/program/po/de.po
deleted file mode 100644 (file)
index 4c556c7..0000000
+++ /dev/null
@@ -1,334 +0,0 @@
-#: ../src/rrd_getopt.c:615
-#, c-format
-msgid "%s: option `%s' is ambiguous\n"
-msgstr ""
-
-#: ../src/rrd_getopt.c:637
-#, c-format
-msgid "%s: option `--%s' doesn't allow an argument\n"
-msgstr ""
-
-#: ../src/rrd_getopt.c:643
-#, c-format
-msgid "%s: option `%c%s' doesn't allow an argument\n"
-msgstr ""
-
-#: ../src/rrd_getopt.c:658 ../src/rrd_getopt.c:811
-#, c-format
-msgid "%s: option `%s' requires an argument\n"
-msgstr ""
-
-#. --option
-#: ../src/rrd_getopt.c:684
-#, c-format
-msgid "%s: unrecognized option `--%s'\n"
-msgstr ""
-
-#. +option or -option
-#: ../src/rrd_getopt.c:688
-#, c-format
-msgid "%s: unrecognized option `%c%s'\n"
-msgstr ""
-
-#. 1003.2 specifies the format of this message.
-#: ../src/rrd_getopt.c:712
-#, c-format
-msgid "%s: illegal option -- %c\n"
-msgstr ""
-
-#: ../src/rrd_getopt.c:715
-#, c-format
-msgid "%s: invalid option -- %c\n"
-msgstr ""
-
-#: ../src/rrd_getopt.c:741 ../src/rrd_getopt.c:849
-#, c-format
-msgid "%s: option requires an argument -- %c\n"
-msgstr ""
-
-#: ../src/rrd_getopt.c:783
-#, c-format
-msgid "%s: option `-W %s' is ambiguous\n"
-msgstr ""
-
-#: ../src/rrd_getopt.c:798
-#, c-format
-msgid "%s: option `-W %s' doesn't allow an argument\n"
-msgstr ""
-
-#: ../src/rrd_tool.c:49
-#, c-format
-msgid ""
-"RRDtool %s  Copyright 1997-2007 by Tobias Oetiker <tobi@oetiker.ch>\n"
-"               Compiled %s %s\n"
-"\n"
-"Usage: rrdtool [options] command command_options\n"
-"\n"
-msgstr ""
-
-#: ../src/rrd_tool.c:55
-msgid ""
-"Valid commands: create, update, updatev, graph, dump, restore,\n"
-"\t\tlast, lastupdate, first, info, fetch, tune,\n"
-"\t\tresize, xport\n"
-"\n"
-msgstr ""
-
-#: ../src/rrd_tool.c:60
-msgid ""
-"Valid remote commands: quit, ls, cd, mkdir, pwd\n"
-"\n"
-msgstr ""
-
-#: ../src/rrd_tool.c:64
-msgid ""
-"* create - create a new RRD\n"
-"\n"
-"\trrdtool create filename [--start|-b start time]\n"
-"\t\t[--step|-s step]\n"
-"\t\t[DS:ds-name:DST:dst arguments]\n"
-"\t\t[RRA:CF:cf arguments]\n"
-"\n"
-msgstr ""
-
-#: ../src/rrd_tool.c:71
-msgid ""
-"* dump - dump an RRD to XML\n"
-"\n"
-"\trrdtool dump filename.rrd >filename.xml\n"
-"\n"
-msgstr ""
-
-#: ../src/rrd_tool.c:75
-msgid ""
-"* info - returns the configuration and status of the RRD\n"
-"\n"
-"\trrdtool info filename.rrd\n"
-"\n"
-msgstr ""
-
-#: ../src/rrd_tool.c:79
-msgid ""
-"* restore - restore an RRD file from its XML form\n"
-"\n"
-"\trrdtool restore [--range-check|-r] [--force-overwrite|-f] filename.xml "
-"filename.rrd\n"
-"\n"
-msgstr ""
-
-#: ../src/rrd_tool.c:83
-msgid ""
-"* last - show last update time for RRD\n"
-"\n"
-"\trrdtool last filename.rrd\n"
-"\n"
-msgstr ""
-
-#: ../src/rrd_tool.c:87
-msgid ""
-"* lastupdate - returns the most recent datum stored for\n"
-"  each DS in an RRD\n"
-"\n"
-"\trrdtool lastupdate filename.rrd\n"
-"\n"
-msgstr ""
-
-#: ../src/rrd_tool.c:91
-msgid ""
-"* first - show first update time for RRA within an RRD\n"
-"\n"
-"\trrdtool first filename.rrd [--rraindex number]\n"
-"\n"
-msgstr ""
-
-#: ../src/rrd_tool.c:95
-msgid ""
-"* update - update an RRD\n"
-"\n"
-"\trrdtool update filename\n"
-"\t\t--template|-t ds-name:ds-name:...\n"
-"\t\ttime|N:value[:value...]\n"
-"\n"
-"\t\tat-time@value[:value...]\n"
-"\n"
-"\t\t[ time:value[:value...] ..]\n"
-"\n"
-msgstr ""
-
-#: ../src/rrd_tool.c:103
-msgid ""
-"* updatev - a verbose version of update\n"
-"\treturns information about values, RRAs, and datasources updated\n"
-"\n"
-"\trrdtool updatev filename\n"
-"\t\t--template|-t ds-name:ds-name:...\n"
-"\t\ttime|N:value[:value...]\n"
-"\n"
-"\t\tat-time@value[:value...]\n"
-"\n"
-"\t\t[ time:value[:value...] ..]\n"
-"\n"
-msgstr ""
-
-#: ../src/rrd_tool.c:112
-msgid ""
-"* fetch - fetch data out of an RRD\n"
-"\n"
-"\trrdtool fetch filename.rrd CF\n"
-"\t\t[-r|--resolution resolution]\n"
-"\t\t[-s|--start start] [-e|--end end]\n"
-"\n"
-msgstr ""
-
-#: ../src/rrd_tool.c:120
-msgid ""
-"* graph - generate a graph from one or several RRD\n"
-"\n"
-"\trrdtool graph filename [-s|--start seconds] [-e|--end seconds]\n"
-"\t\t[-x|--x-grid x-axis grid and label]\n"
-"\t\t[-Y|--alt-y-grid]\n"
-"\t\t[-y|--y-grid y-axis grid and label]\n"
-"\t\t[-v|--vertical-label string] [-w|--width pixels]\n"
-"\t\t[-h|--height pixels] [-o|--logarithmic]\n"
-"\t\t[-u|--upper-limit value] [-z|--lazy]\n"
-"\t\t[-l|--lower-limit value] [-r|--rigid]\n"
-"\t\t[-g|--no-legend]\n"
-"\t\t[-F|--force-rules-legend]\n"
-"\t\t[-j|--only-graph]\n"
-msgstr ""
-
-#: ../src/rrd_tool.c:132
-msgid ""
-"\t\t[-n|--font FONTTAG:size:font]\n"
-"\t\t[-m|--zoom factor]\n"
-"\t\t[-A|--alt-autoscale]\n"
-"\t\t[-M|--alt-autoscale-max]\n"
-"\t\t[-R|--font-render-mode {normal,light,mono}]\n"
-"\t\t[-B|--font-smoothing-threshold size]\n"
-"\t\t[-E|--slope-mode]\n"
-"\t\t[-N|--no-gridfit]\n"
-"\t\t[-X|--units-exponent value]\n"
-"\t\t[-L|--units-length value]\n"
-"\t\t[-S|--step seconds]\n"
-"\t\t[-f|--imginfo printfstr]\n"
-"\t\t[-a|--imgformat PNG]\n"
-"\t\t[-c|--color COLORTAG#rrggbb[aa]] [-t|--title string]\n"
-"\t\t[-W|--watermark string]\n"
-"\t\t[DEF:vname=rrd:ds-name:CF]\n"
-msgstr ""
-
-#: ../src/rrd_tool.c:148
-msgid ""
-"\t\t[CDEF:vname=rpn-expression]\n"
-"\t\t[VDEF:vdefname=rpn-expression]\n"
-"\t\t[PRINT:vdefname:format]\n"
-"\t\t[GPRINT:vdefname:format]\n"
-"\t\t[COMMENT:text]\n"
-"\t\t[SHIFT:vname:offset]\n"
-"\t\t[TICK:vname#rrggbb[aa][:[fraction][:legend]]]\n"
-"\t\t[HRULE:value#rrggbb[aa][:legend]]\n"
-"\t\t[VRULE:value#rrggbb[aa][:legend]]\n"
-"\t\t[LINE[width]:vname[#rrggbb[aa][:[legend][:STACK]]]]\n"
-"\t\t[AREA:vname[#rrggbb[aa][:[legend][:STACK]]]]\n"
-"\t\t[PRINT:vname:CF:format] (deprecated)\n"
-"\t\t[GPRINT:vname:CF:format] (deprecated)\n"
-"\t\t[STACK:vname[#rrggbb[aa][:legend]]] (deprecated)\n"
-"\n"
-msgstr ""
-
-#: ../src/rrd_tool.c:164
-msgid ""
-" * tune -  Modify some basic properties of an RRD\n"
-"\n"
-"\trrdtool tune filename\n"
-"\t\t[--heartbeat|-h ds-name:heartbeat]\n"
-"\t\t[--data-source-type|-d ds-name:DST]\n"
-"\t\t[--data-source-rename|-r old-name:new-name]\n"
-"\t\t[--minimum|-i ds-name:min] [--maximum|-a ds-name:max]\n"
-"\t\t[--deltapos scale-value] [--deltaneg scale-value]\n"
-"\t\t[--failure-threshold integer]\n"
-"\t\t[--window-length integer]\n"
-"\t\t[--alpha adaptation-parameter]\n"
-msgstr ""
-
-#: ../src/rrd_tool.c:175
-msgid ""
-" * tune -  Modify some basic properties of an RRD\n"
-"\n"
-"\t\t[--beta adaptation-parameter]\n"
-"\t\t[--gamma adaptation-parameter]\n"
-"\t\t[--gamma-deviation adaptation-parameter]\n"
-"\t\t[--aberrant-reset ds-name]\n"
-"\n"
-msgstr ""
-
-#: ../src/rrd_tool.c:182
-msgid ""
-" * resize - alter the length of one of the RRAs in an RRD\n"
-"\n"
-"\trrdtool resize filename rranum GROW|SHRINK rows\n"
-"\n"
-msgstr ""
-
-#: ../src/rrd_tool.c:186
-msgid ""
-"* xport - generate XML dump from one or several RRD\n"
-"\n"
-"\trrdtool xport [-s|--start seconds] [-e|--end seconds]\n"
-"\t\t[-m|--maxrows rows]\n"
-"\t\t[--step seconds]\n"
-"\t\t[--enumds]\n"
-"\t\t[DEF:vname=rrd:ds-name:CF]\n"
-"\t\t[CDEF:vname=rpn-expression]\n"
-"\t\t[XPORT:vname:legend]\n"
-"\n"
-msgstr ""
-
-#: ../src/rrd_tool.c:195
-msgid ""
-" * quit - closing a session in remote mode\n"
-"\n"
-"\trrdtool quit\n"
-"\n"
-msgstr ""
-
-#: ../src/rrd_tool.c:198
-msgid ""
-" * ls - lists all *.rrd files in current directory\n"
-"\n"
-"\trrdtool ls\n"
-"\n"
-msgstr ""
-
-#: ../src/rrd_tool.c:202
-msgid ""
-" * cd - changes the current directory\n"
-"\n"
-"\trrdtool cd new directory\n"
-"\n"
-msgstr ""
-
-#: ../src/rrd_tool.c:206
-msgid ""
-" * mkdir - creates a new directory\n"
-"\n"
-"\trrdtool mkdir newdirectoryname\n"
-"\n"
-msgstr ""
-
-#: ../src/rrd_tool.c:210
-msgid ""
-" * pwd - returns the current working directory\n"
-"\n"
-"\trrdtool pwd\n"
-"\n"
-msgstr ""
-
-#: ../src/rrd_tool.c:214
-msgid ""
-"RRDtool is distributed under the Terms of the GNU General\n"
-"Public License Version 2. (www.gnu.org/copyleft/gpl.html)\n"
-"\n"
-"For more information read the RRD manpages\n"
-"\n"
-msgstr ""
index 74d382f3962e7fd8555f982f471f711423d25a29..ccdd604c1894ea19aef6f195b20587ba0ec8ac24 100644 (file)
@@ -52,7 +52,7 @@ noinst_HEADERS = \
        rrd_format.h rrd_tool.h rrd_xport.h rrd.h rrd_rpncalc.h \
        rrd_hw.h rrd_hw_math.h rrd_hw_update.h \
        fnv.h rrd_graph.h \
-       rrd_is_thread_safe.h
+       rrd_is_thread_safe.h gettext.h
 
 if BUILD_GETOPT
 noinst_HEADERS += rrd_getopt.h
diff --git a/program/src/gettext.h b/program/src/gettext.h
new file mode 100644 (file)
index 0000000..209921e
--- /dev/null
@@ -0,0 +1,271 @@
+/* Convenience header for conditional use of GNU <libintl.h>.
+   Copyright (C) 1995-1998, 2000-2002, 2004-2006 Free Software Foundation, Inc.
+
+   This program is free software; you can redistribute it and/or modify it
+   under the terms of the GNU General Public License as published
+   by the Free Software Foundation; either version 2, or (at your option)
+   any later version.
+
+   This program is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Library General Public License for more details.
+
+   You should have received a copy of the GNU General Public
+   License along with this program; if not, write to the Free Software
+   Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
+   USA.  */
+
+#ifndef _LIBGETTEXT_H
+#define _LIBGETTEXT_H 1
+
+/* NLS can be disabled through the configure --disable-nls option.  */
+#if ENABLE_NLS
+
+/* Get declarations of GNU message catalog functions.  */
+# include <libintl.h>
+
+/* You can set the DEFAULT_TEXT_DOMAIN macro to specify the domain used by
+   the gettext() and ngettext() macros.  This is an alternative to calling
+   textdomain(), and is useful for libraries.  */
+# ifdef DEFAULT_TEXT_DOMAIN
+#  undef gettext
+#  define gettext(Msgid) \
+     dgettext (DEFAULT_TEXT_DOMAIN, Msgid)
+#  undef ngettext
+#  define ngettext(Msgid1, Msgid2, N) \
+     dngettext (DEFAULT_TEXT_DOMAIN, Msgid1, Msgid2, N)
+# endif
+
+#else
+
+/* Solaris /usr/include/locale.h includes /usr/include/libintl.h, which
+   chokes if dcgettext is defined as a macro.  So include it now, to make
+   later inclusions of <locale.h> a NOP.  We don't include <libintl.h>
+   as well because people using "gettext.h" will not include <libintl.h>,
+   and also including <libintl.h> would fail on SunOS 4, whereas <locale.h>
+   is OK.  */
+#if defined(__sun)
+# include <locale.h>
+#endif
+
+/* Many header files from the libstdc++ coming with g++ 3.3 or newer include
+   <libintl.h>, which chokes if dcgettext is defined as a macro.  So include
+   it now, to make later inclusions of <libintl.h> a NOP.  */
+#if defined(__cplusplus) && defined(__GNUG__) && (__GNUC__ >= 3)
+# include <cstdlib>
+# if (__GLIBC__ >= 2) || _GLIBCXX_HAVE_LIBINTL_H
+#  include <libintl.h>
+# endif
+#endif
+
+/* Disabled NLS.
+   The casts to 'const char *' serve the purpose of producing warnings
+   for invalid uses of the value returned from these functions.
+   On pre-ANSI systems without 'const', the config.h file is supposed to
+   contain "#define const".  */
+# define gettext(Msgid) ((const char *) (Msgid))
+# define dgettext(Domainname, Msgid) ((void) (Domainname), gettext (Msgid))
+# define dcgettext(Domainname, Msgid, Category) \
+    ((void) (Category), dgettext (Domainname, Msgid))
+# define ngettext(Msgid1, Msgid2, N) \
+    ((N) == 1 \
+     ? ((void) (Msgid2), (const char *) (Msgid1)) \
+     : ((void) (Msgid1), (const char *) (Msgid2)))
+# define dngettext(Domainname, Msgid1, Msgid2, N) \
+    ((void) (Domainname), ngettext (Msgid1, Msgid2, N))
+# define dcngettext(Domainname, Msgid1, Msgid2, N, Category) \
+    ((void) (Category), dngettext(Domainname, Msgid1, Msgid2, N))
+# define textdomain(Domainname) ((const char *) (Domainname))
+# define bindtextdomain(Domainname, Dirname) \
+    ((void) (Domainname), (const char *) (Dirname))
+# define bind_textdomain_codeset(Domainname, Codeset) \
+    ((void) (Domainname), (const char *) (Codeset))
+
+#endif
+
+/* A pseudo function call that serves as a marker for the automated
+   extraction of messages, but does not call gettext().  The run-time
+   translation is done at a different place in the code.
+   The argument, String, should be a literal string.  Concatenated strings
+   and other string expressions won't work.
+   The macro's expansion is not parenthesized, so that it is suitable as
+   initializer for static 'char[]' or 'const char[]' variables.  */
+#define gettext_noop(String) String
+
+/* The separator between msgctxt and msgid in a .mo file.  */
+#define GETTEXT_CONTEXT_GLUE "\004"
+
+/* Pseudo function calls, taking a MSGCTXT and a MSGID instead of just a
+   MSGID.  MSGCTXT and MSGID must be string literals.  MSGCTXT should be
+   short and rarely need to change.
+   The letter 'p' stands for 'particular' or 'special'.  */
+#ifdef DEFAULT_TEXT_DOMAIN
+# define pgettext(Msgctxt, Msgid) \
+   pgettext_aux (DEFAULT_TEXT_DOMAIN, Msgctxt GETTEXT_CONTEXT_GLUE Msgid, Msgid, LC_MESSAGES)
+#else
+# define pgettext(Msgctxt, Msgid) \
+   pgettext_aux (NULL, Msgctxt GETTEXT_CONTEXT_GLUE Msgid, Msgid, LC_MESSAGES)
+#endif
+#define dpgettext(Domainname, Msgctxt, Msgid) \
+  pgettext_aux (Domainname, Msgctxt GETTEXT_CONTEXT_GLUE Msgid, Msgid, LC_MESSAGES)
+#define dcpgettext(Domainname, Msgctxt, Msgid, Category) \
+  pgettext_aux (Domainname, Msgctxt GETTEXT_CONTEXT_GLUE Msgid, Msgid, Category)
+#ifdef DEFAULT_TEXT_DOMAIN
+# define npgettext(Msgctxt, Msgid, MsgidPlural, N) \
+   npgettext_aux (DEFAULT_TEXT_DOMAIN, Msgctxt GETTEXT_CONTEXT_GLUE Msgid, Msgid, MsgidPlural, N, LC_MESSAGES)
+#else
+# define npgettext(Msgctxt, Msgid, MsgidPlural, N) \
+   npgettext_aux (NULL, Msgctxt GETTEXT_CONTEXT_GLUE Msgid, Msgid, MsgidPlural, N, LC_MESSAGES)
+#endif
+#define dnpgettext(Domainname, Msgctxt, Msgid, MsgidPlural, N) \
+  npgettext_aux (Domainname, Msgctxt GETTEXT_CONTEXT_GLUE Msgid, Msgid, MsgidPlural, N, LC_MESSAGES)
+#define dcnpgettext(Domainname, Msgctxt, Msgid, MsgidPlural, N, Category) \
+  npgettext_aux (Domainname, Msgctxt GETTEXT_CONTEXT_GLUE Msgid, Msgid, MsgidPlural, N, Category)
+
+#ifdef __GNUC__
+__inline
+#else
+#ifdef __cplusplus
+inline
+#endif
+#endif
+static const char *
+pgettext_aux (const char *domain,
+             const char *msg_ctxt_id, const char *msgid,
+             int category)
+{
+  const char *translation = dcgettext (domain, msg_ctxt_id, category);
+  if (translation == msg_ctxt_id)
+    return msgid;
+  else
+    return translation;
+}
+
+#ifdef __GNUC__
+__inline
+#else
+#ifdef __cplusplus
+inline
+#endif
+#endif
+static const char *
+npgettext_aux (const char *domain,
+              const char *msg_ctxt_id, const char *msgid,
+              const char *msgid_plural, unsigned long int n,
+              int category)
+{
+  const char *translation =
+    dcngettext (domain, msg_ctxt_id, msgid_plural, n, category);
+  if (translation == msg_ctxt_id || translation == msgid_plural)
+    return (n == 1 ? msgid : msgid_plural);
+  else
+    return translation;
+}
+
+/* The same thing extended for non-constant arguments.  Here MSGCTXT and MSGID
+   can be arbitrary expressions.  But for string literals these macros are
+   less efficient than those above.  */
+
+#include <string.h>
+
+#define _LIBGETTEXT_HAVE_VARIABLE_SIZE_ARRAYS \
+  (((__GNUC__ >= 3 || __GNUG__ >= 2) && !__STRICT_ANSI__) \
+   /* || __STDC_VERSION__ >= 199901L */ )
+
+#if !_LIBGETTEXT_HAVE_VARIABLE_SIZE_ARRAYS
+#include <stdlib.h>
+#endif
+
+#define pgettext_expr(Msgctxt, Msgid) \
+  dcpgettext_expr (NULL, Msgctxt, Msgid, LC_MESSAGES)
+#define dpgettext_expr(Domainname, Msgctxt, Msgid) \
+  dcpgettext_expr (Domainname, Msgctxt, Msgid, LC_MESSAGES)
+
+#ifdef __GNUC__
+__inline
+#else
+#ifdef __cplusplus
+inline
+#endif
+#endif
+static const char *
+dcpgettext_expr (const char *domain,
+                const char *msgctxt, const char *msgid,
+                int category)
+{
+  size_t msgctxt_len = strlen (msgctxt) + 1;
+  size_t msgid_len = strlen (msgid) + 1;
+  const char *translation;
+#if _LIBGETTEXT_HAVE_VARIABLE_SIZE_ARRAYS
+  char msg_ctxt_id[msgctxt_len + msgid_len];
+#else
+  char buf[1024];
+  char *msg_ctxt_id =
+    (msgctxt_len + msgid_len <= sizeof (buf)
+     ? buf
+     : (char *) malloc (msgctxt_len + msgid_len));
+  if (msg_ctxt_id != NULL)
+#endif
+    {
+      memcpy (msg_ctxt_id, msgctxt, msgctxt_len - 1);
+      msg_ctxt_id[msgctxt_len - 1] = '\004';
+      memcpy (msg_ctxt_id + msgctxt_len, msgid, msgid_len);
+      translation = dcgettext (domain, msg_ctxt_id, category);
+#if !_LIBGETTEXT_HAVE_VARIABLE_SIZE_ARRAYS
+      if (msg_ctxt_id != buf)
+       free (msg_ctxt_id);
+#endif
+      if (translation != msg_ctxt_id)
+       return translation;
+    }
+  return msgid;
+}
+
+#define npgettext_expr(Msgctxt, Msgid, MsgidPlural, N) \
+  dcnpgettext_expr (NULL, Msgctxt, Msgid, MsgidPlural, N, LC_MESSAGES)
+#define dnpgettext_expr(Domainname, Msgctxt, Msgid, MsgidPlural, N) \
+  dcnpgettext_expr (Domainname, Msgctxt, Msgid, MsgidPlural, N, LC_MESSAGES)
+
+#ifdef __GNUC__
+__inline
+#else
+#ifdef __cplusplus
+inline
+#endif
+#endif
+static const char *
+dcnpgettext_expr (const char *domain,
+                 const char *msgctxt, const char *msgid,
+                 const char *msgid_plural, unsigned long int n,
+                 int category)
+{
+  size_t msgctxt_len = strlen (msgctxt) + 1;
+  size_t msgid_len = strlen (msgid) + 1;
+  const char *translation;
+#if _LIBGETTEXT_HAVE_VARIABLE_SIZE_ARRAYS
+  char msg_ctxt_id[msgctxt_len + msgid_len];
+#else
+  char buf[1024];
+  char *msg_ctxt_id =
+    (msgctxt_len + msgid_len <= sizeof (buf)
+     ? buf
+     : (char *) malloc (msgctxt_len + msgid_len));
+  if (msg_ctxt_id != NULL)
+#endif
+    {
+      memcpy (msg_ctxt_id, msgctxt, msgctxt_len - 1);
+      msg_ctxt_id[msgctxt_len - 1] = '\004';
+      memcpy (msg_ctxt_id + msgctxt_len, msgid, msgid_len);
+      translation = dcngettext (domain, msg_ctxt_id, msgid_plural, n, category);
+#if !_LIBGETTEXT_HAVE_VARIABLE_SIZE_ARRAYS
+      if (msg_ctxt_id != buf)
+       free (msg_ctxt_id);
+#endif
+      if (!(translation == msg_ctxt_id || translation == msgid_plural))
+       return translation;
+    }
+  return (n == 1 ? msgid : msgid_plural);
+}
+
+#endif /* _LIBGETTEXT_H */
index adeed3795cb2b976ec987f1ac4c91c6df0ac8de2..c7ea78c56e0241b7ed2649f0983a8ff64dfa154b 100644 (file)
@@ -11,19 +11,23 @@ extern    "C" {
 #ifndef _RRD_I18N_H
 #define _RRD_I18N_H
 
-#ifndef _
-/* This is for other GNU distributions with internationalized messages.
-   When compiling libc, the _ macro is predefined.  */
-#if defined(HAVE_LIBINTL_H) && defined(BUILD_LIBINTL)
-#  include <libintl.h>
-#define _(String) gettext (String)
+#ifdef ENABLE_NLS
+#  ifdef _LIBC
+#    include <libintl.h>
+#  else
+#    include "gettext.h"
+#    define _(String) gettext (String)
+#  endif
 #else
-#define _(String) (String)
-#endif
-#define N_(String) (String)
+#  define _(String) (String)
 #endif
 
+#define N_(String) String
+
+#endif
 
+#ifdef  __cplusplus
+}
 #endif
 
 #ifdef  __cplusplus