summary | shortlog | log | commit | commitdiff | tree
raw | patch | inline | side by side (parent: bffe840)
raw | patch | inline | side by side (parent: bffe840)
author | oetiker <oetiker@a5681a0c-68f1-0310-ab6d-d61299d08faa> | |
Wed, 27 May 2009 16:19:46 +0000 (16:19 +0000) | ||
committer | oetiker <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/program@1827 a5681a0c-68f1-0310-ab6d-d61299d08faa
MakeMakefile | patch | blob | history | |
Makefile.am | patch | blob | history | |
acinclude.m4 | [deleted file] | patch | blob | history |
autogen.sh | [new file with mode: 0755] | patch | blob |
configure.ac | patch | blob | history | |
m4/acinclude.m4 | [new file with mode: 0644] | patch | blob |
po/LINGUAS | patch | blob | history | |
po/de.po | [deleted file] | patch | blob | history |
src/Makefile.am | patch | blob | history | |
src/gettext.h | [new file with mode: 0644] | patch | blob |
src/rrd_i18n.h | patch | blob | history |
diff --git a/MakeMakefile b/MakeMakefile
index 4623a72edb6785b0ea26d6fdad96b55e7c5e2c34..03a5f34ce139cc9a7e57bfb71586ad2ce3c51485 100755 (executable)
--- a/MakeMakefile
+++ b/MakeMakefile
# 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";
}
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
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 :
diff --git a/Makefile.am b/Makefile.am
index b703754ef30dce05329957b58f6ca749371e1a2c..bda0889c1254810ba7c5ecf3c563104f70e02a38 100644 (file)
--- a/Makefile.am
+++ b/Makefile.am
-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 \
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/acinclude.m4 b/acinclude.m4
--- a/acinclude.m4
+++ /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/autogen.sh b/autogen.sh
--- /dev/null
+++ b/autogen.sh
@@ -0,0 +1,2 @@
+#!/bin/sh
+autoreconf --force --install --verbose -Iconfig -Im4
diff --git a/configure.ac b/configure.ac
index 10e08f9cee9c02f9e1dbe32eaa546283b8124548..064c1a682f22036c6f3427a9d81fecdc03c8b9db 100644 (file)
--- a/configure.ac
+++ b/configure.ac
dnl
LIBVERS=4:7:0
AC_SUBST(LIBVERS)
-
+AC_USE_SYSTEM_EXTENSIONS
AC_CANONICAL_TARGET
AM_INIT_AUTOMAKE
AM_MAINTAINER_MODE
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)
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])
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/m4/acinclude.m4 b/m4/acinclude.m4
--- /dev/null
+++ b/m4/acinclude.m4
@@ -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
+
+])
+
diff --git a/po/LINGUAS b/po/LINGUAS
index 46ae20d6284439cec5ade4a66b2ac83f5a7238c6..8b137891791fe96927ad78e64b0aad7bded08bdc 100644 (file)
--- a/po/LINGUAS
+++ b/po/LINGUAS
-de
diff --git a/po/de.po b/po/de.po
--- a/po/de.po
+++ /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 ""
diff --git a/src/Makefile.am b/src/Makefile.am
index 74d382f3962e7fd8555f982f471f711423d25a29..ccdd604c1894ea19aef6f195b20587ba0ec8ac24 100644 (file)
--- a/src/Makefile.am
+++ b/src/Makefile.am
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/src/gettext.h b/src/gettext.h
--- /dev/null
+++ b/src/gettext.h
@@ -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 */
diff --git a/src/rrd_i18n.h b/src/rrd_i18n.h
index adeed3795cb2b976ec987f1ac4c91c6df0ac8de2..c7ea78c56e0241b7ed2649f0983a8ff64dfa154b 100644 (file)
--- a/src/rrd_i18n.h
+++ b/src/rrd_i18n.h
#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