Patchwork [meta-oe] rrdtool: add 1.4.7

login
register
mail settings
Submitter Koen Kooi
Date May 13, 2012, 1:14 p.m.
Message ID <1336914852-19766-1-git-send-email-koen@dominion.thruhere.net>
Download mbox | patch
Permalink /patch/27519/
State Accepted
Commit fbfa12572611748c87c8d1f63aab5ae355b86571
Headers show

Comments

Koen Kooi - May 13, 2012, 1:14 p.m.
All binding are disabled since they are not safe for cross-compilation.

Signed-off-by: Koen Kooi <koen@dominion.thruhere.net>
---
 .../0001-rrdtool-eradicate-tcl-support.patch       | 1733 ++++++++++++++++++++
 meta-oe/recipes-extended/rrdtool/rrdtool_1.4.7.bb  |   33 +
 2 files changed, 1766 insertions(+)
 create mode 100644 meta-oe/recipes-extended/rrdtool/rrdtool/0001-rrdtool-eradicate-tcl-support.patch
 create mode 100644 meta-oe/recipes-extended/rrdtool/rrdtool_1.4.7.bb

Patch

diff --git a/meta-oe/recipes-extended/rrdtool/rrdtool/0001-rrdtool-eradicate-tcl-support.patch b/meta-oe/recipes-extended/rrdtool/rrdtool/0001-rrdtool-eradicate-tcl-support.patch
new file mode 100644
index 0000000..1157dc7
--- /dev/null
+++ b/meta-oe/recipes-extended/rrdtool/rrdtool/0001-rrdtool-eradicate-tcl-support.patch
@@ -0,0 +1,1733 @@ 
+From 2dcb4bb8aadfead3e77bdb78b96ec8022e605a0d Mon Sep 17 00:00:00 2001
+From: Koen Kooi <koen@dominion.thruhere.net>
+Date: Sat, 12 May 2012 20:41:35 +0200
+Subject: [PATCH] rrdtool: eradicate tcl support
+
+TCL breaks autoreconf
+
+Signed-off-by: Koen Kooi <koen@dominion.thruhere.net>
+---
+ Makefile.am                  |    3 -
+ bindings/Makefile.am         |    5 +-
+ bindings/tcl/Makefile.am     |   58 ----
+ bindings/tcl/Makefile.in     |  668 ------------------------------------
+ bindings/tcl/README          |   31 --
+ bindings/tcl/ifOctets.tcl.in |   45 ---
+ bindings/tcl/tclrrd.c        |  762 ------------------------------------------
+ configure.ac                 |   54 ---
+ 8 files changed, 1 insertion(+), 1625 deletions(-)
+ delete mode 100644 bindings/tcl/Makefile.am
+ delete mode 100644 bindings/tcl/Makefile.in
+ delete mode 100644 bindings/tcl/README
+ delete mode 100644 bindings/tcl/ifOctets.tcl.in
+ delete mode 100644 bindings/tcl/tclrrd.c
+
+diff --git a/Makefile.am b/Makefile.am
+index 2003373..969e36b 100644
+--- a/Makefile.am
++++ b/Makefile.am
+@@ -36,9 +36,6 @@ site-perl-install: all bindings/perl-piped/Makefile bindings/perl-shared/Makefil
+ 	cd bindings/perl-piped && $(MAKE) install
+ 	cd bindings/perl-shared && $(MAKE) install
+ 
+-site-tcl-install: all
+-	cd bindings/tcl && $(MAKE) tcl-install
+-
+ site-python-install: all
+ 	cd bindings/python && $(PYTHON) setup.py install $(if $(DESTDIR),--root=$(DESTDIR))
+ 
+diff --git a/bindings/Makefile.am b/bindings/Makefile.am
+index c4fdc10..3574a60 100644
+--- a/bindings/Makefile.am
++++ b/bindings/Makefile.am
+@@ -1,13 +1,10 @@
+ .PHONY: python ruby
+ 
+-if BUILD_TCL
+-SUB_tcl = tcl
+-endif
+ if BUILD_LUA
+ SUB_lua = lua
+ endif
+ 
+-SUBDIRS = $(SUB_tcl) $(SUB_lua)
++SUBDIRS = $(SUB_lua)
+ 
+ # the following files are not mentioned in any other Makefile
+ EXTRA_DIST = perl-piped/MANIFEST perl-piped/README perl-piped/Makefile.PL perl-piped/RRDp.pm perl-piped/t/base.t \
+diff --git a/bindings/tcl/Makefile.am b/bindings/tcl/Makefile.am
+deleted file mode 100644
+index c0e8b0f..0000000
+--- a/bindings/tcl/Makefile.am
++++ /dev/null
+@@ -1,58 +0,0 @@
+-
+-EXTRA_DIST = README tclrrd.c
+-
+-VERSION = @VERSION@
+-
+-AM_CFLAGS = @CFLAGS@
+-### no including this by default @WERROR@
+-
+-TCL_PREFIX = @TCL_PREFIX@
+-TCL_SHLIB_LD = @TCL_SHLIB_LD@
+-TCL_SHLIB_CFLAGS = @TCL_SHLIB_CFLAGS@
+-TCL_SHLIB_SUFFIX = @TCL_SHLIB_SUFFIX@
+-TCL_PACKAGE_PATH = @TCL_PACKAGE_PATH@
+-TCL_LD_SEARCH_FLAGS = @TCL_LD_SEARCH_FLAGS@
+-TCL_STUB_LIB_SPEC = @TCL_STUB_LIB_SPEC@
+-TCL_INCLUDE_SPEC = @TCL_INCLUDE_SPEC@
+-
+-CLEANFILES = tclrrd.o tclrrd.so
+-
+-SRC_DIR            = $(top_srcdir)/src
+-AM_CPPFLAGS        = $(TCL_INCLUDE_SPEC) -I$(SRC_DIR) -DUSE_TCL_STUBS
+-LIBDIRS            = -L$(top_builddir)/src/.libs -L$(top_builddir)/src -L$(libdir)
+-LIB_RUNTIME_DIR    = $(libdir)
+-
+-if BUILD_TCL_SITE
+-tclpkgdir = @TCL_PACKAGE_DIR@
+-tclpkg_DATA = pkgIndex.tcl
+-tclpkg_SCRIPTS = ifOctets.tcl
+-else
+-pkglib_DATA = pkgIndex.tcl
+-pkglib_SCRIPTS = ifOctets.tcl
+-endif
+-
+-# Automake doen't like `tclrrd$(VERSION)$(TCL_SHLIB_SUFFIX)' as
+-# library name. So we build and install this library `by hand'.
+-#
+-# We do, however, specify a lib_LIBRARIES target such that
+-# automake creates the directory (if neecessary).
+-#
+-TCL_RRD_LIB = tclrrd$(VERSION)$(TCL_SHLIB_SUFFIX)
+-
+-lib_LIBRARIES =
+-
+-all-local: $(TCL_RRD_LIB)
+-
+-$(TCL_RRD_LIB): tclrrd.o
+-	$(TCL_SHLIB_LD) $(TCL_LD_SEARCH_FLAGS) $(LIBDIRS) $< -o $@ -lrrd_th -lm $(TCL_STUB_LIB_SPEC) $(LDFLAGS) $(LIBS)
+-
+-tclrrd.o: tclrrd.c
+-	$(CC) $(AM_CFLAGS) $(CFLAGS) $(TCL_SHLIB_CFLAGS) $(AM_CPPFLAGS) -c tclrrd.c -DVERSION=\"$(VERSION)\"
+-
+-pkgIndex.tcl:
+-	echo "package ifneeded Rrd $(VERSION) \"load $(libdir)/tclrrd$(VERSION)[info sharedlibextension]\"" > $@
+-
+-install-exec-local: $(TCL_RRD_LIB)
+-	@$(NORMAL_INSTALL)
+-	$(INSTALL_PROGRAM) $(TCL_RRD_LIB) $(DESTDIR)$(libdir)/$(TCL_RRD_LIB)
+-
+diff --git a/bindings/tcl/Makefile.in b/bindings/tcl/Makefile.in
+deleted file mode 100644
+index 0a36517..0000000
+--- a/bindings/tcl/Makefile.in
++++ /dev/null
+@@ -1,668 +0,0 @@
+-# Makefile.in generated by automake 1.11 from Makefile.am.
+-# @configure_input@
+-
+-# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+-# 2003, 2004, 2005, 2006, 2007, 2008, 2009  Free Software Foundation,
+-# Inc.
+-# This Makefile.in is free software; the Free Software Foundation
+-# gives unlimited permission to copy and/or distribute it,
+-# with or without modifications, as long as this notice is preserved.
+-
+-# This program is distributed in the hope that it will be useful,
+-# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+-# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+-# PARTICULAR PURPOSE.
+-
+-@SET_MAKE@
+-
+-
+-
+-VPATH = @srcdir@
+-pkgdatadir = $(datadir)/@PACKAGE@
+-pkgincludedir = $(includedir)/@PACKAGE@
+-pkglibdir = $(libdir)/@PACKAGE@
+-pkglibexecdir = $(libexecdir)/@PACKAGE@
+-am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+-install_sh_DATA = $(install_sh) -c -m 644
+-install_sh_PROGRAM = $(install_sh) -c
+-install_sh_SCRIPT = $(install_sh) -c
+-INSTALL_HEADER = $(INSTALL_DATA)
+-transform = $(program_transform_name)
+-NORMAL_INSTALL = :
+-PRE_INSTALL = :
+-POST_INSTALL = :
+-NORMAL_UNINSTALL = :
+-PRE_UNINSTALL = :
+-POST_UNINSTALL = :
+-build_triplet = @build@
+-host_triplet = @host@
+-target_triplet = @target@
+-subdir = bindings/tcl
+-DIST_COMMON = README $(srcdir)/Makefile.am $(srcdir)/Makefile.in \
+-	$(srcdir)/ifOctets.tcl.in
+-ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+-am__aclocal_m4_deps = $(top_srcdir)/m4/acinclude.m4 \
+-	$(top_srcdir)/m4/gettext.m4 $(top_srcdir)/m4/iconv.m4 \
+-	$(top_srcdir)/m4/intlmacosx.m4 $(top_srcdir)/m4/lib-ld.m4 \
+-	$(top_srcdir)/m4/lib-link.m4 $(top_srcdir)/m4/lib-prefix.m4 \
+-	$(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \
+-	$(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \
+-	$(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/m4/nls.m4 \
+-	$(top_srcdir)/m4/po.m4 $(top_srcdir)/m4/progtest.m4 \
+-	$(top_srcdir)/configure.ac
+-am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+-	$(ACLOCAL_M4)
+-mkinstalldirs = $(install_sh) -d
+-CONFIG_HEADER = $(top_builddir)/rrd_config.h
+-CONFIG_CLEAN_FILES = ifOctets.tcl
+-CONFIG_CLEAN_VPATH_FILES =
+-am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
+-am__vpath_adj = case $$p in \
+-    $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
+-    *) f=$$p;; \
+-  esac;
+-am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`;
+-am__install_max = 40
+-am__nobase_strip_setup = \
+-  srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'`
+-am__nobase_strip = \
+-  for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||"
+-am__nobase_list = $(am__nobase_strip_setup); \
+-  for p in $$list; do echo "$$p $$p"; done | \
+-  sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \
+-  $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \
+-    if (++n[$$2] == $(am__install_max)) \
+-      { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \
+-    END { for (dir in files) print dir, files[dir] }'
+-am__base_list = \
+-  sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \
+-  sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g'
+-am__installdirs = "$(DESTDIR)$(libdir)" "$(DESTDIR)$(pkglibdir)" \
+-	"$(DESTDIR)$(tclpkgdir)" "$(DESTDIR)$(pkglibdir)" \
+-	"$(DESTDIR)$(tclpkgdir)"
+-LIBRARIES = $(lib_LIBRARIES)
+-SCRIPTS = $(pkglib_SCRIPTS) $(tclpkg_SCRIPTS)
+-AM_V_GEN = $(am__v_GEN_$(V))
+-am__v_GEN_ = $(am__v_GEN_$(AM_DEFAULT_VERBOSITY))
+-am__v_GEN_0 = @echo "  GEN   " $@;
+-AM_V_at = $(am__v_at_$(V))
+-am__v_at_ = $(am__v_at_$(AM_DEFAULT_VERBOSITY))
+-am__v_at_0 = @
+-SOURCES =
+-DIST_SOURCES =
+-DATA = $(pkglib_DATA) $(tclpkg_DATA)
+-DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+-ACLOCAL = @ACLOCAL@
+-ALL_LIBS = @ALL_LIBS@
+-AMTAR = @AMTAR@
+-AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
+-AR = @AR@
+-AUTOCONF = @AUTOCONF@
+-AUTOHEADER = @AUTOHEADER@
+-AUTOMAKE = @AUTOMAKE@
+-AWK = @AWK@
+-CC = @CC@
+-CCDEPMODE = @CCDEPMODE@
+-CFLAGS = @CFLAGS@
+-COMP_LUA = @COMP_LUA@
+-COMP_PERL = @COMP_PERL@
+-COMP_PYTHON = @COMP_PYTHON@
+-COMP_RUBY = @COMP_RUBY@
+-CORE_LIBS = @CORE_LIBS@
+-CPP = @CPP@
+-CPPFLAGS = @CPPFLAGS@
+-CYGPATH_W = @CYGPATH_W@
+-DEFS = @DEFS@
+-DEPDIR = @DEPDIR@
+-DSYMUTIL = @DSYMUTIL@
+-DUMPBIN = @DUMPBIN@
+-ECHO_C = @ECHO_C@
+-ECHO_N = @ECHO_N@
+-ECHO_T = @ECHO_T@
+-EGREP = @EGREP@
+-EXEEXT = @EXEEXT@
+-FGREP = @FGREP@
+-GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@
+-GMSGFMT = @GMSGFMT@
+-GMSGFMT_015 = @GMSGFMT_015@
+-GREP = @GREP@
+-INSTALL = @INSTALL@
+-INSTALL_DATA = @INSTALL_DATA@
+-INSTALL_PROGRAM = @INSTALL_PROGRAM@
+-INSTALL_SCRIPT = @INSTALL_SCRIPT@
+-INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+-INTLLIBS = @INTLLIBS@
+-INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@
+-LD = @LD@
+-LDFLAGS = @LDFLAGS@
+-LIBICONV = @LIBICONV@
+-LIBINTL = @LIBINTL@
+-LIBOBJS = @LIBOBJS@
+-LIBS = @LIBS@
+-LIBTOOL = @LIBTOOL@
+-LIBVERS = @LIBVERS@
+-LIPO = @LIPO@
+-LN_S = @LN_S@
+-LTLIBICONV = @LTLIBICONV@
+-LTLIBINTL = @LTLIBINTL@
+-LTLIBOBJS = @LTLIBOBJS@
+-LUA = @LUA@
+-LUA_CFLAGS = @LUA_CFLAGS@
+-LUA_DEFINES = @LUA_DEFINES@
+-LUA_INSTALL_CMOD = @LUA_INSTALL_CMOD@
+-LUA_INSTALL_LMOD = @LUA_INSTALL_LMOD@
+-LUA_LFLAGS = @LUA_LFLAGS@
+-MAINT = @MAINT@
+-MAKEINFO = @MAKEINFO@
+-MKDIR_P = @MKDIR_P@
+-MSGFMT = @MSGFMT@
+-MSGFMT_015 = @MSGFMT_015@
+-MSGMERGE = @MSGMERGE@
+-MULTITHREAD_CFLAGS = @MULTITHREAD_CFLAGS@
+-MULTITHREAD_LDFLAGS = @MULTITHREAD_LDFLAGS@
+-NM = @NM@
+-NMEDIT = @NMEDIT@
+-NROFF = @NROFF@
+-NUMVERS = @NUMVERS@
+-OBJDUMP = @OBJDUMP@
+-OBJEXT = @OBJEXT@
+-OTOOL = @OTOOL@
+-OTOOL64 = @OTOOL64@
+-PACKAGE = @PACKAGE@
+-PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+-PACKAGE_NAME = @PACKAGE_NAME@
+-PACKAGE_STRING = @PACKAGE_STRING@
+-PACKAGE_TARNAME = @PACKAGE_TARNAME@
+-PACKAGE_VERSION = @PACKAGE_VERSION@
+-PATH_SEPARATOR = @PATH_SEPARATOR@
+-PERL = @PERL@
+-PERLCC = @PERLCC@
+-PERLCCFLAGS = @PERLCCFLAGS@
+-PERLFLAGS = @PERLFLAGS@
+-PERLLD = @PERLLD@
+-PERLLDFLAGS = @PERLLDFLAGS@
+-PERL_CC = @PERL_CC@
+-PERL_MAKE_OPTIONS = @PERL_MAKE_OPTIONS@
+-PERL_VERSION = @PERL_VERSION@
+-PKGCONFIG = @PKGCONFIG@
+-POD2HTML = @POD2HTML@
+-POD2MAN = @POD2MAN@
+-POSUB = @POSUB@
+-PTHREAD_CC = @PTHREAD_CC@
+-PTHREAD_CFLAGS = @PTHREAD_CFLAGS@
+-PTHREAD_LIBS = @PTHREAD_LIBS@
+-PYTHON = @PYTHON@
+-PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@
+-PYTHON_INCLUDES = @PYTHON_INCLUDES@
+-PYTHON_PLATFORM = @PYTHON_PLATFORM@
+-PYTHON_PREFIX = @PYTHON_PREFIX@
+-PYTHON_VERSION = @PYTHON_VERSION@
+-RANLIB = @RANLIB@
+-RRDDOCDIR = @RRDDOCDIR@
+-RRDGRAPH_YLEGEND_ANGLE = @RRDGRAPH_YLEGEND_ANGLE@
+-RRD_DEFAULT_FONT = @RRD_DEFAULT_FONT@
+-RRD_GETOPT_LONG = @RRD_GETOPT_LONG@
+-RUBY = @RUBY@
+-RUBY_MAKE_OPTIONS = @RUBY_MAKE_OPTIONS@
+-SED = @SED@
+-SET_MAKE = @SET_MAKE@
+-SHELL = @SHELL@
+-STRIP = @STRIP@
+-TCL_INCLUDE_SPEC = @TCL_INCLUDE_SPEC@
+-TCL_LD_SEARCH_FLAGS = @TCL_LD_SEARCH_FLAGS@
+-TCL_PACKAGE_DIR = @TCL_PACKAGE_DIR@
+-TCL_PACKAGE_PATH = @TCL_PACKAGE_PATH@
+-### no including this by default @WERROR@
+-TCL_PREFIX = @TCL_PREFIX@
+-TCL_SHLIB_CFLAGS = @TCL_SHLIB_CFLAGS@
+-TCL_SHLIB_LD = @TCL_SHLIB_LD@
+-TCL_SHLIB_SUFFIX = @TCL_SHLIB_SUFFIX@
+-TCL_STUB_LIB_SPEC = @TCL_STUB_LIB_SPEC@
+-TCL_VERSION = @TCL_VERSION@
+-TROFF = @TROFF@
+-USE_NLS = @USE_NLS@
+-VERSION = @VERSION@
+-WERROR = @WERROR@
+-XGETTEXT = @XGETTEXT@
+-XGETTEXT_015 = @XGETTEXT_015@
+-XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@
+-abs_builddir = @abs_builddir@
+-abs_srcdir = @abs_srcdir@
+-abs_top_builddir = @abs_top_builddir@
+-abs_top_srcdir = @abs_top_srcdir@
+-ac_ct_CC = @ac_ct_CC@
+-ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+-acx_pthread_config = @acx_pthread_config@
+-am__include = @am__include@
+-am__leading_dot = @am__leading_dot@
+-am__quote = @am__quote@
+-am__tar = @am__tar@
+-am__untar = @am__untar@
+-bindir = @bindir@
+-build = @build@
+-build_alias = @build_alias@
+-build_cpu = @build_cpu@
+-build_os = @build_os@
+-build_vendor = @build_vendor@
+-builddir = @builddir@
+-datadir = @datadir@
+-datarootdir = @datarootdir@
+-docdir = @docdir@
+-dvidir = @dvidir@
+-exec_prefix = @exec_prefix@
+-host = @host@
+-host_alias = @host_alias@
+-host_cpu = @host_cpu@
+-host_os = @host_os@
+-host_vendor = @host_vendor@
+-htmldir = @htmldir@
+-includedir = @includedir@
+-infodir = @infodir@
+-install_sh = @install_sh@
+-libdir = @libdir@
+-libexecdir = @libexecdir@
+-localedir = @localedir@
+-localstatedir = @localstatedir@
+-lt_ECHO = @lt_ECHO@
+-mandir = @mandir@
+-mkdir_p = @mkdir_p@
+-oldincludedir = @oldincludedir@
+-pdfdir = @pdfdir@
+-pkgpyexecdir = @pkgpyexecdir@
+-pkgpythondir = @pkgpythondir@
+-prefix = @prefix@
+-program_transform_name = @program_transform_name@
+-psdir = @psdir@
+-pyexecdir = @pyexecdir@
+-pythondir = @pythondir@
+-sbindir = @sbindir@
+-sharedstatedir = @sharedstatedir@
+-srcdir = @srcdir@
+-sysconfdir = @sysconfdir@
+-target = @target@
+-target_alias = @target_alias@
+-target_cpu = @target_cpu@
+-target_os = @target_os@
+-target_vendor = @target_vendor@
+-top_build_prefix = @top_build_prefix@
+-top_builddir = @top_builddir@
+-top_srcdir = @top_srcdir@
+-EXTRA_DIST = README tclrrd.c
+-AM_CFLAGS = @CFLAGS@
+-CLEANFILES = tclrrd.o tclrrd.so
+-SRC_DIR = $(top_srcdir)/src
+-AM_CPPFLAGS = $(TCL_INCLUDE_SPEC) -I$(SRC_DIR) -DUSE_TCL_STUBS
+-LIBDIRS = -L$(top_builddir)/src/.libs -L$(top_builddir)/src -L$(libdir)
+-LIB_RUNTIME_DIR = $(libdir)
+-@BUILD_TCL_SITE_TRUE@tclpkgdir = @TCL_PACKAGE_DIR@
+-@BUILD_TCL_SITE_TRUE@tclpkg_DATA = pkgIndex.tcl
+-@BUILD_TCL_SITE_TRUE@tclpkg_SCRIPTS = ifOctets.tcl
+-@BUILD_TCL_SITE_FALSE@pkglib_DATA = pkgIndex.tcl
+-@BUILD_TCL_SITE_FALSE@pkglib_SCRIPTS = ifOctets.tcl
+-
+-# Automake doen't like `tclrrd$(VERSION)$(TCL_SHLIB_SUFFIX)' as
+-# library name. So we build and install this library `by hand'.
+-#
+-# We do, however, specify a lib_LIBRARIES target such that
+-# automake creates the directory (if neecessary).
+-#
+-TCL_RRD_LIB = tclrrd$(VERSION)$(TCL_SHLIB_SUFFIX)
+-lib_LIBRARIES = 
+-all: all-am
+-
+-.SUFFIXES:
+-$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am  $(am__configure_deps)
+-	@for dep in $?; do \
+-	  case '$(am__configure_deps)' in \
+-	    *$$dep*) \
+-	      ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+-	        && { if test -f $@; then exit 0; else break; fi; }; \
+-	      exit 1;; \
+-	  esac; \
+-	done; \
+-	echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu bindings/tcl/Makefile'; \
+-	$(am__cd) $(top_srcdir) && \
+-	  $(AUTOMAKE) --gnu bindings/tcl/Makefile
+-.PRECIOUS: Makefile
+-Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+-	@case '$?' in \
+-	  *config.status*) \
+-	    cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+-	  *) \
+-	    echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+-	    cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+-	esac;
+-
+-$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+-	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+-
+-$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
+-	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+-$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
+-	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+-$(am__aclocal_m4_deps):
+-ifOctets.tcl: $(top_builddir)/config.status $(srcdir)/ifOctets.tcl.in
+-	cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@
+-install-libLIBRARIES: $(lib_LIBRARIES)
+-	@$(NORMAL_INSTALL)
+-	test -z "$(libdir)" || $(MKDIR_P) "$(DESTDIR)$(libdir)"
+-	@list='$(lib_LIBRARIES)'; test -n "$(libdir)" || list=; \
+-	list2=; for p in $$list; do \
+-	  if test -f $$p; then \
+-	    list2="$$list2 $$p"; \
+-	  else :; fi; \
+-	done; \
+-	test -z "$$list2" || { \
+-	  echo " $(INSTALL_DATA) $$list2 '$(DESTDIR)$(libdir)'"; \
+-	  $(INSTALL_DATA) $$list2 "$(DESTDIR)$(libdir)" || exit $$?; }
+-	@$(POST_INSTALL)
+-	@list='$(lib_LIBRARIES)'; test -n "$(libdir)" || list=; \
+-	for p in $$list; do \
+-	  if test -f $$p; then \
+-	    $(am__strip_dir) \
+-	    echo " ( cd '$(DESTDIR)$(libdir)' && $(RANLIB) $$f )"; \
+-	    ( cd "$(DESTDIR)$(libdir)" && $(RANLIB) $$f ) || exit $$?; \
+-	  else :; fi; \
+-	done
+-
+-uninstall-libLIBRARIES:
+-	@$(NORMAL_UNINSTALL)
+-	@list='$(lib_LIBRARIES)'; test -n "$(libdir)" || list=; \
+-	files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \
+-	test -n "$$files" || exit 0; \
+-	echo " ( cd '$(DESTDIR)$(libdir)' && rm -f "$$files" )"; \
+-	cd "$(DESTDIR)$(libdir)" && rm -f $$files
+-
+-clean-libLIBRARIES:
+-	-test -z "$(lib_LIBRARIES)" || rm -f $(lib_LIBRARIES)
+-install-pkglibSCRIPTS: $(pkglib_SCRIPTS)
+-	@$(NORMAL_INSTALL)
+-	test -z "$(pkglibdir)" || $(MKDIR_P) "$(DESTDIR)$(pkglibdir)"
+-	@list='$(pkglib_SCRIPTS)'; test -n "$(pkglibdir)" || list=; \
+-	for p in $$list; do \
+-	  if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
+-	  if test -f "$$d$$p"; then echo "$$d$$p"; echo "$$p"; else :; fi; \
+-	done | \
+-	sed -e 'p;s,.*/,,;n' \
+-	    -e 'h;s|.*|.|' \
+-	    -e 'p;x;s,.*/,,;$(transform)' | sed 'N;N;N;s,\n, ,g' | \
+-	$(AWK) 'BEGIN { files["."] = ""; dirs["."] = 1; } \
+-	  { d=$$3; if (dirs[d] != 1) { print "d", d; dirs[d] = 1 } \
+-	    if ($$2 == $$4) { files[d] = files[d] " " $$1; \
+-	      if (++n[d] == $(am__install_max)) { \
+-		print "f", d, files[d]; n[d] = 0; files[d] = "" } } \
+-	    else { print "f", d "/" $$4, $$1 } } \
+-	  END { for (d in files) print "f", d, files[d] }' | \
+-	while read type dir files; do \
+-	     if test "$$dir" = .; then dir=; else dir=/$$dir; fi; \
+-	     test -z "$$files" || { \
+-	       echo " $(INSTALL_SCRIPT) $$files '$(DESTDIR)$(pkglibdir)$$dir'"; \
+-	       $(INSTALL_SCRIPT) $$files "$(DESTDIR)$(pkglibdir)$$dir" || exit $$?; \
+-	     } \
+-	; done
+-
+-uninstall-pkglibSCRIPTS:
+-	@$(NORMAL_UNINSTALL)
+-	@list='$(pkglib_SCRIPTS)'; test -n "$(pkglibdir)" || exit 0; \
+-	files=`for p in $$list; do echo "$$p"; done | \
+-	       sed -e 's,.*/,,;$(transform)'`; \
+-	test -n "$$list" || exit 0; \
+-	echo " ( cd '$(DESTDIR)$(pkglibdir)' && rm -f" $$files ")"; \
+-	cd "$(DESTDIR)$(pkglibdir)" && rm -f $$files
+-install-tclpkgSCRIPTS: $(tclpkg_SCRIPTS)
+-	@$(NORMAL_INSTALL)
+-	test -z "$(tclpkgdir)" || $(MKDIR_P) "$(DESTDIR)$(tclpkgdir)"
+-	@list='$(tclpkg_SCRIPTS)'; test -n "$(tclpkgdir)" || list=; \
+-	for p in $$list; do \
+-	  if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
+-	  if test -f "$$d$$p"; then echo "$$d$$p"; echo "$$p"; else :; fi; \
+-	done | \
+-	sed -e 'p;s,.*/,,;n' \
+-	    -e 'h;s|.*|.|' \
+-	    -e 'p;x;s,.*/,,;$(transform)' | sed 'N;N;N;s,\n, ,g' | \
+-	$(AWK) 'BEGIN { files["."] = ""; dirs["."] = 1; } \
+-	  { d=$$3; if (dirs[d] != 1) { print "d", d; dirs[d] = 1 } \
+-	    if ($$2 == $$4) { files[d] = files[d] " " $$1; \
+-	      if (++n[d] == $(am__install_max)) { \
+-		print "f", d, files[d]; n[d] = 0; files[d] = "" } } \
+-	    else { print "f", d "/" $$4, $$1 } } \
+-	  END { for (d in files) print "f", d, files[d] }' | \
+-	while read type dir files; do \
+-	     if test "$$dir" = .; then dir=; else dir=/$$dir; fi; \
+-	     test -z "$$files" || { \
+-	       echo " $(INSTALL_SCRIPT) $$files '$(DESTDIR)$(tclpkgdir)$$dir'"; \
+-	       $(INSTALL_SCRIPT) $$files "$(DESTDIR)$(tclpkgdir)$$dir" || exit $$?; \
+-	     } \
+-	; done
+-
+-uninstall-tclpkgSCRIPTS:
+-	@$(NORMAL_UNINSTALL)
+-	@list='$(tclpkg_SCRIPTS)'; test -n "$(tclpkgdir)" || exit 0; \
+-	files=`for p in $$list; do echo "$$p"; done | \
+-	       sed -e 's,.*/,,;$(transform)'`; \
+-	test -n "$$list" || exit 0; \
+-	echo " ( cd '$(DESTDIR)$(tclpkgdir)' && rm -f" $$files ")"; \
+-	cd "$(DESTDIR)$(tclpkgdir)" && rm -f $$files
+-
+-mostlyclean-libtool:
+-	-rm -f *.lo
+-
+-clean-libtool:
+-	-rm -rf .libs _libs
+-install-pkglibDATA: $(pkglib_DATA)
+-	@$(NORMAL_INSTALL)
+-	test -z "$(pkglibdir)" || $(MKDIR_P) "$(DESTDIR)$(pkglibdir)"
+-	@list='$(pkglib_DATA)'; test -n "$(pkglibdir)" || list=; \
+-	for p in $$list; do \
+-	  if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
+-	  echo "$$d$$p"; \
+-	done | $(am__base_list) | \
+-	while read files; do \
+-	  echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(pkglibdir)'"; \
+-	  $(INSTALL_DATA) $$files "$(DESTDIR)$(pkglibdir)" || exit $$?; \
+-	done
+-
+-uninstall-pkglibDATA:
+-	@$(NORMAL_UNINSTALL)
+-	@list='$(pkglib_DATA)'; test -n "$(pkglibdir)" || list=; \
+-	files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \
+-	test -n "$$files" || exit 0; \
+-	echo " ( cd '$(DESTDIR)$(pkglibdir)' && rm -f" $$files ")"; \
+-	cd "$(DESTDIR)$(pkglibdir)" && rm -f $$files
+-install-tclpkgDATA: $(tclpkg_DATA)
+-	@$(NORMAL_INSTALL)
+-	test -z "$(tclpkgdir)" || $(MKDIR_P) "$(DESTDIR)$(tclpkgdir)"
+-	@list='$(tclpkg_DATA)'; test -n "$(tclpkgdir)" || list=; \
+-	for p in $$list; do \
+-	  if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
+-	  echo "$$d$$p"; \
+-	done | $(am__base_list) | \
+-	while read files; do \
+-	  echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(tclpkgdir)'"; \
+-	  $(INSTALL_DATA) $$files "$(DESTDIR)$(tclpkgdir)" || exit $$?; \
+-	done
+-
+-uninstall-tclpkgDATA:
+-	@$(NORMAL_UNINSTALL)
+-	@list='$(tclpkg_DATA)'; test -n "$(tclpkgdir)" || list=; \
+-	files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \
+-	test -n "$$files" || exit 0; \
+-	echo " ( cd '$(DESTDIR)$(tclpkgdir)' && rm -f" $$files ")"; \
+-	cd "$(DESTDIR)$(tclpkgdir)" && rm -f $$files
+-tags: TAGS
+-TAGS:
+-
+-ctags: CTAGS
+-CTAGS:
+-
+-
+-distdir: $(DISTFILES)
+-	@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+-	topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+-	list='$(DISTFILES)'; \
+-	  dist_files=`for file in $$list; do echo $$file; done | \
+-	  sed -e "s|^$$srcdirstrip/||;t" \
+-	      -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+-	case $$dist_files in \
+-	  */*) $(MKDIR_P) `echo "$$dist_files" | \
+-			   sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+-			   sort -u` ;; \
+-	esac; \
+-	for file in $$dist_files; do \
+-	  if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+-	  if test -d $$d/$$file; then \
+-	    dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+-	    if test -d "$(distdir)/$$file"; then \
+-	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+-	    fi; \
+-	    if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+-	      cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+-	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+-	    fi; \
+-	    cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+-	  else \
+-	    test -f "$(distdir)/$$file" \
+-	    || cp -p $$d/$$file "$(distdir)/$$file" \
+-	    || exit 1; \
+-	  fi; \
+-	done
+-check-am: all-am
+-check: check-am
+-all-am: Makefile $(LIBRARIES) $(SCRIPTS) $(DATA) all-local
+-installdirs:
+-	for dir in "$(DESTDIR)$(libdir)" "$(DESTDIR)$(pkglibdir)" "$(DESTDIR)$(tclpkgdir)" "$(DESTDIR)$(pkglibdir)" "$(DESTDIR)$(tclpkgdir)"; do \
+-	  test -z "$$dir" || $(MKDIR_P) "$$dir"; \
+-	done
+-install: install-am
+-install-exec: install-exec-am
+-install-data: install-data-am
+-uninstall: uninstall-am
+-
+-install-am: all-am
+-	@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+-
+-installcheck: installcheck-am
+-install-strip:
+-	$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+-	  install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+-	  `test -z '$(STRIP)' || \
+-	    echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+-mostlyclean-generic:
+-
+-clean-generic:
+-	-test -z "$(CLEANFILES)" || rm -f $(CLEANFILES)
+-
+-distclean-generic:
+-	-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+-	-test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+-
+-maintainer-clean-generic:
+-	@echo "This command is intended for maintainers to use"
+-	@echo "it deletes files that may require special tools to rebuild."
+-clean: clean-am
+-
+-clean-am: clean-generic clean-libLIBRARIES clean-libtool \
+-	mostlyclean-am
+-
+-distclean: distclean-am
+-	-rm -f Makefile
+-distclean-am: clean-am distclean-generic
+-
+-dvi: dvi-am
+-
+-dvi-am:
+-
+-html: html-am
+-
+-html-am:
+-
+-info: info-am
+-
+-info-am:
+-
+-install-data-am: install-tclpkgDATA install-tclpkgSCRIPTS
+-
+-install-dvi: install-dvi-am
+-
+-install-dvi-am:
+-
+-install-exec-am: install-exec-local install-libLIBRARIES \
+-	install-pkglibDATA install-pkglibSCRIPTS
+-
+-install-html: install-html-am
+-
+-install-html-am:
+-
+-install-info: install-info-am
+-
+-install-info-am:
+-
+-install-man:
+-
+-install-pdf: install-pdf-am
+-
+-install-pdf-am:
+-
+-install-ps: install-ps-am
+-
+-install-ps-am:
+-
+-installcheck-am:
+-
+-maintainer-clean: maintainer-clean-am
+-	-rm -f Makefile
+-maintainer-clean-am: distclean-am maintainer-clean-generic
+-
+-mostlyclean: mostlyclean-am
+-
+-mostlyclean-am: mostlyclean-generic mostlyclean-libtool
+-
+-pdf: pdf-am
+-
+-pdf-am:
+-
+-ps: ps-am
+-
+-ps-am:
+-
+-uninstall-am: uninstall-libLIBRARIES uninstall-pkglibDATA \
+-	uninstall-pkglibSCRIPTS uninstall-tclpkgDATA \
+-	uninstall-tclpkgSCRIPTS
+-
+-.MAKE: install-am install-strip
+-
+-.PHONY: all all-am all-local check check-am clean clean-generic \
+-	clean-libLIBRARIES clean-libtool distclean distclean-generic \
+-	distclean-libtool distdir dvi dvi-am html html-am info info-am \
+-	install install-am install-data install-data-am install-dvi \
+-	install-dvi-am install-exec install-exec-am install-exec-local \
+-	install-html install-html-am install-info install-info-am \
+-	install-libLIBRARIES install-man install-pdf install-pdf-am \
+-	install-pkglibDATA install-pkglibSCRIPTS install-ps \
+-	install-ps-am install-strip install-tclpkgDATA \
+-	install-tclpkgSCRIPTS installcheck installcheck-am installdirs \
+-	maintainer-clean maintainer-clean-generic mostlyclean \
+-	mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
+-	uninstall uninstall-am uninstall-libLIBRARIES \
+-	uninstall-pkglibDATA uninstall-pkglibSCRIPTS \
+-	uninstall-tclpkgDATA uninstall-tclpkgSCRIPTS
+-
+-
+-all-local: $(TCL_RRD_LIB)
+-
+-$(TCL_RRD_LIB): tclrrd.o
+-	$(TCL_SHLIB_LD) $(TCL_LD_SEARCH_FLAGS) $(LIBDIRS) $< -o $@ -lrrd_th -lm $(TCL_STUB_LIB_SPEC) $(LDFLAGS) $(LIBS)
+-
+-tclrrd.o: tclrrd.c
+-	$(CC) $(AM_CFLAGS) $(CFLAGS) $(TCL_SHLIB_CFLAGS) $(AM_CPPFLAGS) -c tclrrd.c -DVERSION=\"$(VERSION)\"
+-
+-pkgIndex.tcl:
+-	echo "package ifneeded Rrd $(VERSION) \"load $(libdir)/tclrrd$(VERSION)[info sharedlibextension]\"" > $@
+-
+-install-exec-local: $(TCL_RRD_LIB)
+-	@$(NORMAL_INSTALL)
+-	$(INSTALL_PROGRAM) $(TCL_RRD_LIB) $(DESTDIR)$(libdir)/$(TCL_RRD_LIB)
+-
+-# Tell versions [3.59,3.63) of GNU make to not export all variables.
+-# Otherwise a system limit (for SysV at least) may be exceeded.
+-.NOEXPORT:
+diff --git a/bindings/tcl/README b/bindings/tcl/README
+deleted file mode 100644
+index 065a03a..0000000
+--- a/bindings/tcl/README
++++ /dev/null
+@@ -1,31 +0,0 @@
+-TCLRRD -- A TCL interpreter extension to access the RRD library,
+-	  contributed to Tobias Oetiker's RRD tools.
+-
+-Copyright (c) 1999,2000 Frank Strauss, Technical University of Braunschweig.
+-
+-See the file "COPYING" for information on usage and redistribution
+-of this file, and for a DISCLAIMER OF ALL WARRANTIES.
+-
+-TCLRRD adds a dynamically loadable package to the Tcl 8.x interpreter
+-to access all RRD functions as of RRDtool 1.0.13. All command names
+-and arguments are equal to those of RRDtool. They are assigned to the
+-namespace `Rrd', e.g.  `Rrd::create'. Return values are a bit
+-different from plain RRDtool behavior to enable more native Tcl
+-usage. Errors are mapped to the TCL_ERROR return code together with
+-the RRD error strings.
+-
+-TCLRRD makes it easy to combine RRD use with advanced SNMP functionality
+-of scotty (http://wwwsnmp.cs.utwente.nl/~schoenw/scotty/). E.g., it's easy
+-to use some scotty code to get the counters of some interfaces by their
+-interface name and then use Rrd::update to store the values. Furthermore,
+-data source types (see RRD::create documentation) and integer value ranges
+-could be easily retrieved from MIB information.
+-
+-TCLRRD has been written on a Linux system for use with Tcl 8.x. It should
+-work on many other platforms, although it has not been tested. There are
+-no fool proof installation procedures. Take a look at Makefile.am and
+-adapt it, if required.
+-
+-TCLRRD has been written for RRD 1.0.13.
+-
+-	Frank Strauss <strauss@ibr.cs.tu-bs.de>, 09-Mar-2000
+diff --git a/bindings/tcl/ifOctets.tcl.in b/bindings/tcl/ifOctets.tcl.in
+deleted file mode 100644
+index 7a36397..0000000
+--- a/bindings/tcl/ifOctets.tcl.in
++++ /dev/null
+@@ -1,45 +0,0 @@
+-#!/bin/sh
+-# the next line restarts using tclsh -*- tcl -*- \
+-exec tclsh@TCL_VERSION@ "$0" "$@"
+-
+-#package require Tnm 3.0
+-package require Rrd @VERSION@
+-
+-set rrdfile "[lindex $argv 0]-[lindex $argv 1].rrd"
+-
+-# create rrdfile if not yet existent
+-if {[file exists $rrdfile] == 0} {
+-    Rrd::create $rrdfile --step 5 \
+-	    DS:inOctets:COUNTER:10:U:U DS:outOctets:COUNTER:10:U:U \
+-	    RRA:AVERAGE:0.5:1:12
+-}
+-
+-# get an snmp session context
+-set session [Tnm::snmp generator -address [lindex $argv 0]]
+-
+-# walk through the ifDescr column to find the right interface
+-$session walk descr IF-MIB!ifDescr {
+-
+-    # is this the right interface?
+-    if {"[Tnm::snmp value $descr 0]" == "[lindex $argv 1]"} {
+-
+-	# get the instance part of this table row
+-	set inst [lindex [Tnm::mib split [Tnm::snmp oid $descr 0]] 1]
+-
+-	# get the two interface's octet counter values
+-	set in [lindex [lindex [$session get IF-MIB!ifInOctets.$inst] 0] 2]
+-	set out [lindex [lindex [$session get IF-MIB!ifOutOctets.$inst] 0] 2]
+-
+-	# write the values to the rrd
+-	puts "$in $out"
+-	Rrd::update $rrdfile --template inOctets:outOctets N:$in:$out
+-
+-	Rrd::graph gaga.png --title "gaga" \
+-		DEF:in=$rrdfile:inOctets:AVERAGE \
+-		DEF:out=$rrdfile:outOctets:AVERAGE \
+-		AREA:in#0000FF:inOctets \
+-		LINE2:out#00C000:outOctets
+-
+-	#puts [Rrd::fetch $rrdfile AVERAGE]
+-    }
+-}
+diff --git a/bindings/tcl/tclrrd.c b/bindings/tcl/tclrrd.c
+deleted file mode 100644
+index f1f0234..0000000
+--- a/bindings/tcl/tclrrd.c
++++ /dev/null
+@@ -1,762 +0,0 @@
+-/*
+- * tclrrd.c -- A TCL interpreter extension to access the RRD library.
+- *
+- * Copyright (c) 1999,2000 Frank Strauss, Technical University of Braunschweig.
+- *
+- * Thread-safe code copyright (c) 2005 Oleg Derevenetz, CenterTelecom Voronezh ISP.
+- *
+- * See the file "COPYING" for information on usage and redistribution
+- * of this file, and for a DISCLAIMER OF ALL WARRANTIES.
+- *
+- * $Id: tclrrd.c 1854 2009-06-07 14:46:21Z oetiker $
+- */
+-
+-
+-
+-#include <errno.h>
+-#include <string.h>
+-#include <time.h>
+-#include <unistd.h>
+-#include <tcl.h>
+-#include <stdlib.h>
+-#include "../../src/rrd_tool.h"
+-#include "../../src/rrd_format.h"
+-
+-/* support pre-8.4 tcl */
+-
+-#ifndef CONST84
+-#   define CONST84
+-#endif
+-
+-extern int Tclrrd_Init(
+-    Tcl_Interp *interp);
+-extern int Tclrrd_SafeInit(
+-    Tcl_Interp *interp);
+-
+-
+-/*
+- * some rrd_XXX() and new thread-safe versions of Rrd_XXX()
+- * functions might modify the argv strings passed to it.
+- * Hence, we need to do some preparation before
+- * calling the rrd library functions.
+- */
+-static char **getopt_init(
+-    int argc,
+-    CONST84 char *argv[])
+-{
+-    char    **argv2;
+-    int       i;
+-
+-    argv2 = calloc(argc, sizeof(char *));
+-    for (i = 0; i < argc; i++) {
+-        argv2[i] = strdup(argv[i]);
+-    }
+-    return argv2;
+-}
+-
+-static void getopt_cleanup(
+-    int argc,
+-    char **argv2)
+-{
+-    int       i;
+-
+-    for (i = 0; i < argc; i++) {
+-        if (argv2[i] != NULL) {
+-            free(argv2[i]);
+-        }
+-    }
+-    free(argv2);
+-}
+-
+-static void getopt_free_element(
+-    char *argv2[],
+-    int argn)
+-{
+-    if (argv2[argn] != NULL) {
+-        free(argv2[argn]);
+-        argv2[argn] = NULL;
+-    }
+-}
+-
+-static void getopt_squieeze(
+-    int *argc,
+-    char *argv2[])
+-{
+-    int       i, null_i = 0, argc_tmp = *argc;
+-
+-    for (i = 0; i < argc_tmp; i++) {
+-        if (argv2[i] == NULL) {
+-            (*argc)--;
+-        } else {
+-            argv2[null_i++] = argv2[i];
+-        }
+-    }
+-}
+-
+-
+-
+-/* Thread-safe version */
+-static int Rrd_Create(
+-    ClientData __attribute__((unused)) clientData,
+-    Tcl_Interp *interp,
+-    int argc,
+-    CONST84 char *argv[])
+-{
+-    int       argv_i;
+-    char    **argv2;
+-    char     *parsetime_error = NULL;
+-    time_t    last_up = time(NULL) - 10;
+-    long int  long_tmp;
+-    unsigned long int pdp_step = 300;
+-    rrd_time_value_t last_up_tv;
+-
+-    argv2 = getopt_init(argc, argv);
+-
+-    for (argv_i = 1; argv_i < argc; argv_i++) {
+-        if (!strcmp(argv2[argv_i], "--start") || !strcmp(argv2[argv_i], "-b")) {
+-            if (argv_i++ >= argc) {
+-                Tcl_AppendResult(interp, "RRD Error: option '",
+-                                 argv2[argv_i - 1], "' needs an argument",
+-                                 (char *) NULL);
+-                getopt_cleanup(argc, argv2);
+-                return TCL_ERROR;
+-            }
+-            if ((parsetime_error = rrd_parsetime(argv2[argv_i], &last_up_tv))) {
+-                Tcl_AppendResult(interp, "RRD Error: invalid time format: '",
+-                                 argv2[argv_i], "'", (char *) NULL);
+-                getopt_cleanup(argc, argv2);
+-                return TCL_ERROR;
+-            }
+-            if (last_up_tv.type == RELATIVE_TO_END_TIME ||
+-                last_up_tv.type == RELATIVE_TO_START_TIME) {
+-                Tcl_AppendResult(interp,
+-                                 "RRD Error: specifying time relative to the 'start' ",
+-                                 "or 'end' makes no sense here",
+-                                 (char *) NULL);
+-                getopt_cleanup(argc, argv2);
+-                return TCL_ERROR;
+-            }
+-            last_up = mktime(&last_up_tv.tm) +last_up_tv.offset;
+-            if (last_up < 3600 * 24 * 365 * 10) {
+-                Tcl_AppendResult(interp,
+-                                 "RRD Error: the first entry to the RRD should be after 1980",
+-                                 (char *) NULL);
+-                getopt_cleanup(argc, argv2);
+-                return TCL_ERROR;
+-            }
+-            getopt_free_element(argv2, argv_i - 1);
+-            getopt_free_element(argv2, argv_i);
+-        } else if (!strcmp(argv2[argv_i], "--step")
+-                   || !strcmp(argv2[argv_i], "-s")) {
+-            if (argv_i++ >= argc) {
+-                Tcl_AppendResult(interp, "RRD Error: option '",
+-                                 argv2[argv_i - 1], "' needs an argument",
+-                                 (char *) NULL);
+-                getopt_cleanup(argc, argv2);
+-                return TCL_ERROR;
+-            }
+-            long_tmp = atol(argv2[argv_i]);
+-            if (long_tmp < 1) {
+-                Tcl_AppendResult(interp,
+-                                 "RRD Error: step size should be no less than one second",
+-                                 (char *) NULL);
+-                getopt_cleanup(argc, argv2);
+-                return TCL_ERROR;
+-            }
+-            pdp_step = long_tmp;
+-            getopt_free_element(argv2, argv_i - 1);
+-            getopt_free_element(argv2, argv_i);
+-        } else if (!strcmp(argv2[argv_i], "--")) {
+-            getopt_free_element(argv2, argv_i);
+-            break;
+-        } else if (argv2[argv_i][0] == '-') {
+-            Tcl_AppendResult(interp, "RRD Error: unknown option '",
+-                             argv2[argv_i], "'", (char *) NULL);
+-            getopt_cleanup(argc, argv2);
+-            return TCL_ERROR;
+-        }
+-    }
+-
+-    getopt_squieeze(&argc, argv2);
+-
+-    if (argc < 2) {
+-        Tcl_AppendResult(interp, "RRD Error: needs rrd filename",
+-                         (char *) NULL);
+-        getopt_cleanup(argc, argv2);
+-        return TCL_ERROR;
+-    }
+-
+-    rrd_create_r(argv2[1], pdp_step, last_up, argc - 2,
+-                 (const char **)argv2 + 2);
+-
+-    getopt_cleanup(argc, argv2);
+-
+-    if (rrd_test_error()) {
+-        Tcl_AppendResult(interp, "RRD Error: ",
+-                         rrd_get_error(), (char *) NULL);
+-        rrd_clear_error();
+-        return TCL_ERROR;
+-    }
+-
+-    return TCL_OK;
+-}
+-
+-
+-
+-/* Thread-safe version */
+-static int Rrd_Dump(
+-    ClientData __attribute__((unused)) clientData,
+-    Tcl_Interp *interp,
+-    int argc,
+-    CONST84 char *argv[])
+-{
+-    if (argc < 2) {
+-        Tcl_AppendResult(interp, "RRD Error: needs rrd filename",
+-                         (char *) NULL);
+-        return TCL_ERROR;
+-    }
+-
+-    rrd_dump_r(argv[1], NULL);
+-
+-    /* NOTE: rrd_dump() writes to stdout. No interaction with TCL. */
+-
+-    if (rrd_test_error()) {
+-        Tcl_AppendResult(interp, "RRD Error: ",
+-                         rrd_get_error(), (char *) NULL);
+-        rrd_clear_error();
+-        return TCL_ERROR;
+-    }
+-
+-    return TCL_OK;
+-}
+-
+-/* Thread-safe version */
+-static int Rrd_Flushcached(
+-    ClientData __attribute__((unused)) clientData,
+-    Tcl_Interp *interp,
+-    int argc,
+-    CONST84 char *argv[])
+-{
+-    if (argc < 2) {
+-        Tcl_AppendResult(interp, "RRD Error: needs rrd filename",
+-                         (char *) NULL);
+-        return TCL_ERROR;
+-    }
+-
+-    rrd_flushcached(argc, (char**)argv);
+-
+-    if (rrd_test_error()) {
+-        Tcl_AppendResult(interp, "RRD Error: ",
+-                         rrd_get_error(), (char *) NULL);
+-        rrd_clear_error();
+-        return TCL_ERROR;
+-    }
+-
+-    return TCL_OK;
+-}
+-
+-
+-/* Thread-safe version */
+-static int Rrd_Last(
+-    ClientData __attribute__((unused)) clientData,
+-    Tcl_Interp *interp,
+-    int argc,
+-    CONST84 char *argv[])
+-{
+-    time_t    t;
+-
+-    if (argc < 2) {
+-        Tcl_AppendResult(interp, "RRD Error: needs rrd filename",
+-                         (char *) NULL);
+-        return TCL_ERROR;
+-    }
+-
+-    t = rrd_last_r(argv[1]);
+-
+-    if (rrd_test_error()) {
+-        Tcl_AppendResult(interp, "RRD Error: ",
+-                         rrd_get_error(), (char *) NULL);
+-        rrd_clear_error();
+-        return TCL_ERROR;
+-    }
+-
+-    Tcl_SetIntObj(Tcl_GetObjResult(interp), t);
+-
+-    return TCL_OK;
+-}
+-
+-
+-
+-/* Thread-safe version */
+-static int Rrd_Update(
+-    ClientData __attribute__((unused)) clientData,
+-    Tcl_Interp *interp,
+-    int argc,
+-    CONST84 char *argv[])
+-{
+-    int       argv_i;
+-    char    **argv2, *template = NULL;
+-
+-    argv2 = getopt_init(argc, argv);
+-
+-    for (argv_i = 1; argv_i < argc; argv_i++) {
+-        if (!strcmp(argv2[argv_i], "--template")
+-            || !strcmp(argv2[argv_i], "-t")) {
+-            if (argv_i++ >= argc) {
+-                Tcl_AppendResult(interp, "RRD Error: option '",
+-                                 argv2[argv_i - 1], "' needs an argument",
+-                                 (char *) NULL);
+-                if (template != NULL) {
+-                    free(template);
+-                }
+-                getopt_cleanup(argc, argv2);
+-                return TCL_ERROR;
+-            }
+-            if (template != NULL) {
+-                free(template);
+-            }
+-            template = strdup(argv2[argv_i]);
+-            getopt_free_element(argv2, argv_i - 1);
+-            getopt_free_element(argv2, argv_i);
+-        } else if (!strcmp(argv2[argv_i], "--")) {
+-            getopt_free_element(argv2, argv_i);
+-            break;
+-        } else if (argv2[argv_i][0] == '-') {
+-            Tcl_AppendResult(interp, "RRD Error: unknown option '",
+-                             argv2[argv_i], "'", (char *) NULL);
+-            if (template != NULL) {
+-                free(template);
+-            }
+-            getopt_cleanup(argc, argv2);
+-            return TCL_ERROR;
+-        }
+-    }
+-
+-    getopt_squieeze(&argc, argv2);
+-
+-    if (argc < 2) {
+-        Tcl_AppendResult(interp, "RRD Error: needs rrd filename",
+-                         (char *) NULL);
+-        if (template != NULL) {
+-            free(template);
+-        }
+-        getopt_cleanup(argc, argv2);
+-        return TCL_ERROR;
+-    }
+-
+-    rrd_update_r(argv2[1], template, argc - 2, (const char **)argv2 + 2);
+-
+-    if (template != NULL) {
+-        free(template);
+-    }
+-    getopt_cleanup(argc, argv2);
+-
+-    if (rrd_test_error()) {
+-        Tcl_AppendResult(interp, "RRD Error: ",
+-                         rrd_get_error(), (char *) NULL);
+-        rrd_clear_error();
+-        return TCL_ERROR;
+-    }
+-
+-    return TCL_OK;
+-}
+-
+-static int Rrd_Lastupdate(
+-    ClientData __attribute__((unused)) clientData,
+-    Tcl_Interp *interp,
+-    int argc,
+-    CONST84 char *argv[])
+-{
+-    time_t    last_update;
+-    char    **argv2;
+-    char    **ds_namv;
+-    char    **last_ds;
+-    char      s[30];
+-    Tcl_Obj  *listPtr;
+-    unsigned long ds_cnt, i;
+-
+-    /* TODO: support for rrdcached */
+-    if (argc != 2) {
+-        Tcl_AppendResult(interp, "RRD Error: needs a single rrd filename",
+-                         (char *) NULL);
+-        return TCL_ERROR;
+-    }
+-
+-    argv2 = getopt_init(argc, argv);
+-    if (rrd_lastupdate_r(argv2[1], &last_update,
+-                       &ds_cnt, &ds_namv, &last_ds) == 0) {
+-        listPtr = Tcl_GetObjResult(interp);
+-        for (i = 0; i < ds_cnt; i++) {
+-            sprintf(s, " %28s", ds_namv[i]);
+-            Tcl_ListObjAppendElement(interp, listPtr,
+-                                     Tcl_NewStringObj(s, -1));
+-            sprintf(s, "\n\n%10lu:", last_update);
+-            Tcl_ListObjAppendElement(interp, listPtr,
+-                                     Tcl_NewStringObj(s, -1));
+-            for (i = 0; i < ds_cnt; i++) {
+-                sprintf(s, " %s", last_ds[i]);
+-                Tcl_ListObjAppendElement(interp, listPtr,
+-                                         Tcl_NewStringObj(s, -1));
+-                free(last_ds[i]);
+-                free(ds_namv[i]);
+-            }
+-            sprintf(s, "\n");
+-            Tcl_ListObjAppendElement(interp, listPtr,
+-                                     Tcl_NewStringObj(s, -1));
+-            free(last_ds);
+-            free(ds_namv);
+-        }
+-    }
+-    return TCL_OK;
+-}
+-
+-static int Rrd_Fetch(
+-    ClientData __attribute__((unused)) clientData,
+-    Tcl_Interp *interp,
+-    int argc,
+-    CONST84 char *argv[])
+-{
+-    time_t    start, end, j;
+-    unsigned long step, ds_cnt, i, ii;
+-    rrd_value_t *data, *datai;
+-    char    **ds_namv;
+-    Tcl_Obj  *listPtr;
+-    char      s[30];
+-    char    **argv2;
+-
+-    argv2 = getopt_init(argc, argv);
+-    if (rrd_fetch(argc, argv2, &start, &end, &step,
+-                  &ds_cnt, &ds_namv, &data) != -1) {
+-        datai = data;
+-        listPtr = Tcl_GetObjResult(interp);
+-        for (j = start; j <= end; j += step) {
+-            for (ii = 0; ii < ds_cnt; ii++) {
+-                sprintf(s, "%.2f", *(datai++));
+-                Tcl_ListObjAppendElement(interp, listPtr,
+-                                         Tcl_NewStringObj(s, -1));
+-            }
+-        }
+-        for (i = 0; i < ds_cnt; i++)
+-            free(ds_namv[i]);
+-        free(ds_namv);
+-        free(data);
+-    }
+-    getopt_cleanup(argc, argv2);
+-
+-    if (rrd_test_error()) {
+-        Tcl_AppendResult(interp, "RRD Error: ",
+-                         rrd_get_error(), (char *) NULL);
+-        rrd_clear_error();
+-        return TCL_ERROR;
+-    }
+-
+-    return TCL_OK;
+-}
+-
+-
+-
+-static int Rrd_Graph(
+-    ClientData __attribute__((unused)) clientData,
+-    Tcl_Interp *interp,
+-    int argc,
+-    CONST84 char *argv[])
+-{
+-    Tcl_Channel channel;
+-    int       mode, fd2;
+-    ClientData fd1;
+-    FILE     *stream = NULL;
+-    char    **calcpr = NULL;
+-    int       rc, xsize, ysize;
+-    double    ymin, ymax;
+-    char      dimensions[50];
+-    char    **argv2;
+-    CONST84 char *save;
+-
+-    /*
+-     * If the "filename" is a Tcl fileID, then arrange for rrd_graph() to write to
+-     * that file descriptor.  Will this work with windoze?  I have no idea.
+-     */
+-    if ((channel = Tcl_GetChannel(interp, argv[1], &mode)) != NULL) {
+-        /*
+-         * It >is< a Tcl fileID
+-         */
+-        if (!(mode & TCL_WRITABLE)) {
+-            Tcl_AppendResult(interp, "channel \"", argv[1],
+-                             "\" wasn't opened for writing", (char *) NULL);
+-            return TCL_ERROR;
+-        }
+-        /*
+-         * Must flush channel to make sure any buffered data is written before
+-         * rrd_graph() writes to the stream
+-         */
+-        if (Tcl_Flush(channel) != TCL_OK) {
+-            Tcl_AppendResult(interp, "flush failed for \"", argv[1], "\": ",
+-                             strerror(Tcl_GetErrno()), (char *) NULL);
+-            return TCL_ERROR;
+-        }
+-        if (Tcl_GetChannelHandle(channel, TCL_WRITABLE, &fd1) != TCL_OK) {
+-            Tcl_AppendResult(interp,
+-                             "cannot get file descriptor associated with \"",
+-                             argv[1], "\"", (char *) NULL);
+-            return TCL_ERROR;
+-        }
+-        /*
+-         * Must dup() file descriptor so we can fclose(stream), otherwise the fclose()
+-         * would close Tcl's file descriptor
+-         */
+-        if ((fd2 = dup((int)fd1)) == -1) {
+-            Tcl_AppendResult(interp,
+-                             "dup() failed for file descriptor associated with \"",
+-                             argv[1], "\": ", strerror(errno), (char *) NULL);
+-            return TCL_ERROR;
+-        }
+-        /*
+-         * rrd_graph() wants a FILE*
+-         */
+-        if ((stream = fdopen(fd2, "wb")) == NULL) {
+-            Tcl_AppendResult(interp,
+-                             "fdopen() failed for file descriptor associated with \"",
+-                             argv[1], "\": ", strerror(errno), (char *) NULL);
+-            close(fd2); /* plug potential file descriptor leak */
+-            return TCL_ERROR;
+-        }
+-
+-        save = argv[1];
+-        argv[1] = "-";
+-        argv2 = getopt_init(argc, argv);
+-        argv[1] = save;
+-    } else {
+-        Tcl_ResetResult(interp);    /* clear error from Tcl_GetChannel() */
+-        argv2 = getopt_init(argc, argv);
+-    }
+-
+-    rc = rrd_graph(argc, argv2, &calcpr, &xsize, &ysize, stream, &ymin,
+-                   &ymax);
+-    getopt_cleanup(argc, argv2);
+-
+-    if (stream != NULL)
+-        fclose(stream); /* plug potential malloc & file descriptor leak */
+-
+-    if (rc != -1) {
+-        sprintf(dimensions, "%d %d", xsize, ysize);
+-        Tcl_AppendResult(interp, dimensions, (char *) NULL);
+-        if (calcpr) {
+-#if 0
+-            int       i;
+-
+-            for (i = 0; calcpr[i]; i++) {
+-                printf("%s\n", calcpr[i]);
+-                free(calcpr[i]);
+-            }
+-#endif
+-            free(calcpr);
+-        }
+-    }
+-
+-    if (rrd_test_error()) {
+-        Tcl_AppendResult(interp, "RRD Error: ",
+-                         rrd_get_error(), (char *) NULL);
+-        rrd_clear_error();
+-        return TCL_ERROR;
+-    }
+-
+-    return TCL_OK;
+-}
+-
+-
+-
+-static int Rrd_Tune(
+-    ClientData __attribute__((unused)) clientData,
+-    Tcl_Interp *interp,
+-    int argc,
+-    CONST84 char *argv[])
+-{
+-    char    **argv2;
+-
+-    argv2 = getopt_init(argc, argv);
+-    rrd_tune(argc, argv2);
+-    getopt_cleanup(argc, argv2);
+-
+-    if (rrd_test_error()) {
+-        Tcl_AppendResult(interp, "RRD Error: ",
+-                         rrd_get_error(), (char *) NULL);
+-        rrd_clear_error();
+-        return TCL_ERROR;
+-    }
+-
+-    return TCL_OK;
+-}
+-
+-
+-
+-static int Rrd_Resize(
+-    ClientData __attribute__((unused)) clientData,
+-    Tcl_Interp *interp,
+-    int argc,
+-    CONST84 char *argv[])
+-{
+-    char    **argv2;
+-
+-    argv2 = getopt_init(argc, argv);
+-    rrd_resize(argc, argv2);
+-    getopt_cleanup(argc, argv2);
+-
+-    if (rrd_test_error()) {
+-        Tcl_AppendResult(interp, "RRD Error: ",
+-                         rrd_get_error(), (char *) NULL);
+-        rrd_clear_error();
+-        return TCL_ERROR;
+-    }
+-
+-    return TCL_OK;
+-}
+-
+-
+-
+-static int Rrd_Restore(
+-    ClientData __attribute__((unused)) clientData,
+-    Tcl_Interp *interp,
+-    int argc,
+-    CONST84 char *argv[])
+-{
+-    char    **argv2;
+-
+-    argv2 = getopt_init(argc, argv);
+-    rrd_restore(argc, argv2);
+-    getopt_cleanup(argc, argv2);
+-
+-    if (rrd_test_error()) {
+-        Tcl_AppendResult(interp, "RRD Error: ",
+-                         rrd_get_error(), (char *) NULL);
+-        rrd_clear_error();
+-        return TCL_ERROR;
+-    }
+-
+-    return TCL_OK;
+-}
+-
+-
+-
+-/*
+- * The following structure defines the commands in the Rrd extension.
+- */
+-
+-typedef struct {
+-    char     *name;     /* Name of the command. */
+-    Tcl_CmdProc *proc;  /* Procedure for command. */
+-    int       hide;     /* Hide if safe interpreter */
+-} CmdInfo;
+-
+-static CmdInfo rrdCmds[] = {
+-    {"Rrd::create", Rrd_Create, 1}, /* Thread-safe version */
+-    {"Rrd::dump", Rrd_Dump, 0}, /* Thread-safe version */
+-    {"Rrd::flushcached", Rrd_Flushcached, 0},
+-    {"Rrd::last", Rrd_Last, 0}, /* Thread-safe version */
+-    {"Rrd::lastupdate", Rrd_Lastupdate, 0}, /* Thread-safe version */
+-    {"Rrd::update", Rrd_Update, 1}, /* Thread-safe version */
+-    {"Rrd::fetch", Rrd_Fetch, 0},
+-    {"Rrd::graph", Rrd_Graph, 1},   /* Due to RRD's API, a safe
+-                                       interpreter cannot create
+-                                       a graph since it writes to
+-                                       a filename supplied by the
+-                                       caller */
+-    {"Rrd::tune", Rrd_Tune, 1},
+-    {"Rrd::resize", Rrd_Resize, 1},
+-    {"Rrd::restore", Rrd_Restore, 1},
+-    {(char *) NULL, (Tcl_CmdProc *) NULL, 0}
+-};
+-
+-
+-
+-static int init(
+-    Tcl_Interp *interp,
+-    int safe)
+-{
+-    CmdInfo  *cmdInfoPtr;
+-    Tcl_CmdInfo info;
+-
+-    if (Tcl_InitStubs(interp, TCL_VERSION, 0) == NULL)
+-        return TCL_ERROR;
+-
+-    if (Tcl_PkgRequire(interp, "Tcl", TCL_VERSION, 1) == NULL) {
+-        return TCL_ERROR;
+-    }
+-
+-    /*
+-     * Why a global array?  In keeping with the Rrd:: namespace, why
+-     * not simply create a normal variable Rrd::version and set it?
+-     */
+-    Tcl_SetVar2(interp, "rrd", "version", VERSION, TCL_GLOBAL_ONLY);
+-
+-    for (cmdInfoPtr = rrdCmds; cmdInfoPtr->name != NULL; cmdInfoPtr++) {
+-        /*
+-         * Check if the command already exists and return an error
+-         * to ensure we detect name clashes while loading the Rrd
+-         * extension.
+-         */
+-        if (Tcl_GetCommandInfo(interp, cmdInfoPtr->name, &info)) {
+-            Tcl_AppendResult(interp, "command \"", cmdInfoPtr->name,
+-                             "\" already exists", (char *) NULL);
+-            return TCL_ERROR;
+-        }
+-        if (safe && cmdInfoPtr->hide) {
+-#if 0
+-            /*
+-             * Turns out the one cannot hide a command in a namespace
+-             * due to a limitation of Tcl, one can only hide global
+-             * commands.  Thus, if we created the commands without
+-             * the Rrd:: namespace in a safe interpreter, then the
+-             * "unsafe" commands could be hidden -- which would allow
+-             * an owning interpreter either un-hiding them or doing
+-             * an "interp invokehidden".  If the Rrd:: namespace is
+-             * used, then it's still possible for the owning interpreter
+-             * to fake out the missing commands:
+-             *
+-             *   # Make all Rrd::* commands available in master interperter
+-             *   package require Rrd
+-             *   set safe [interp create -safe]
+-             *   # Make safe Rrd::* commands available in safe interperter
+-             *   interp invokehidden $safe -global load ./tclrrd1.2.11.so
+-             *   # Provide the safe interpreter with the missing commands
+-             *   $safe alias Rrd::update do_update $safe
+-             *   proc do_update {which_interp $args} {
+-             *     # Do some checking maybe...
+-             *       :
+-             *     return [eval Rrd::update $args]
+-             *   }
+-             *
+-             * Our solution for now is to just not create the "unsafe"
+-             * commands in a safe interpreter.
+-             */
+-            if (Tcl_HideCommand(interp, cmdInfoPtr->name, cmdInfoPtr->name) !=
+-                TCL_OK)
+-                return TCL_ERROR;
+-#endif
+-        } else
+-            Tcl_CreateCommand(interp, cmdInfoPtr->name, cmdInfoPtr->proc,
+-                              (ClientData) NULL, (Tcl_CmdDeleteProc *) NULL);
+-    }
+-
+-    if (Tcl_PkgProvide(interp, "Rrd", VERSION) != TCL_OK) {
+-        return TCL_ERROR;
+-    }
+-
+-    return TCL_OK;
+-}
+-
+-int Tclrrd_Init(
+-    Tcl_Interp *interp)
+-{
+-    return init(interp, 0);
+-}
+-
+-/*
+- * See the comments above and note how few commands are considered "safe"...
+- * Using rrdtool in a safe interpreter has very limited functionality.  It's
+- * tempting to just return TCL_ERROR and forget about it.
+- */
+-int Tclrrd_SafeInit(
+-    Tcl_Interp *interp)
+-{
+-    return init(interp, 1);
+-}
+diff --git a/configure.ac b/configure.ac
+index 73ef4ec..acd74e8 100644
+--- a/configure.ac
++++ b/configure.ac
+@@ -830,57 +830,6 @@ AM_CONDITIONAL(LUA_SITE_LINSTALL, [test "$LUA_INSTALL_LMOD" != "$LUA_RRD_LIBDIR"
+ AM_CONDITIONAL(LUA50, [test "$lua_vndot" = "50"])
+ AM_CONDITIONAL(BUILD_LUA, [test "$enable_lua" = "yes"])
+ 
+-enable_tcl_site=no
+-
+-AC_ARG_ENABLE(tcl,AS_HELP_STRING([--disable-tcl],[do not build the tcl modules]),
+-[],[enable_tcl=yes])
+-
+-if test  "$enable_tcl" = "yes"; then
+-  dnl Check for Tcl.
+-  withval=""
+-  AC_ARG_WITH(tcllib,[  --with-tcllib=DIR       location of the tclConfig.sh])
+-  enable_tcl=no
+-  for dir in $withval /usr/lib /usr/lib64 /usr/local/lib /usr/lib/tcl8.4 /usr/lib/tcl8.3 ; do
+-    AC_MSG_CHECKING(for tclConfig.sh in $dir)
+-    if test -f "$dir/tclConfig.sh" ; then
+-    	tcl_config=$dir/tclConfig.sh
+-        enable_tcl=yes
+-        AC_MSG_RESULT(yes)
+-        break
+-    else
+-        AC_MSG_RESULT(no)
+-    fi
+-  done
+-
+-  if test "$enable_tcl" = "no"; then
+-        AC_MSG_WARN([tclConfig.sh not found - Tcl interface will not be built])
+-  else
+-	. $tcl_config
+-	TCL_PACKAGE_DIR="$TCL_PACKAGE_PATH/tclrrd$VERSION"
+-	if test -n "$TCL_INC_DIR"; then
+-	  TCL_INCLUDE_SPEC="$TCL_INCLUDE_SPEC -I$TCL_INC_DIR"
+-	fi
+-  fi
+-  AC_ARG_ENABLE(tcl-site,AS_HELP_STRING([--enable-tcl-site],[install the tcl extension in the tcl tree]),
+-  [],[enable_tcl_site=yes])
+-
+-fi
+-
+-AM_CONDITIONAL(BUILD_TCL, test "$enable_tcl" = "yes" )
+-AM_CONDITIONAL(BUILD_TCL_SITE, test "$enable_tcl_site" = "yes" )
+-
+-
+-AC_SUBST(TCL_PREFIX)
+-AC_SUBST(TCL_SHLIB_CFLAGS)
+-AC_SUBST(TCL_SHLIB_LD)
+-AC_SUBST(TCL_SHLIB_SUFFIX)
+-AC_SUBST(TCL_PACKAGE_PATH)
+-AC_SUBST(TCL_LD_SEARCH_FLAGS)
+-AC_SUBST(TCL_STUB_LIB_SPEC)
+-AC_SUBST(TCL_VERSION)
+-AC_SUBST(TCL_PACKAGE_DIR)
+-AC_SUBST(TCL_INCLUDE_SPEC)
+-
+ AC_ARG_ENABLE(python,AS_HELP_STRING([--disable-python],[do not build the python modules]),
+ [],[enable_python=yes])
+ 
+@@ -932,8 +881,6 @@ AC_CONFIG_FILES([src/Makefile])
+ AC_CONFIG_FILES([src/librrd.sym.in])
+ AC_CONFIG_FILES([src/librrd.pc])
+ AC_CONFIG_FILES([bindings/Makefile])
+-AC_CONFIG_FILES([bindings/tcl/Makefile])
+-AC_CONFIG_FILES([bindings/tcl/ifOctets.tcl])
+ AC_CONFIG_FILES([Makefile])          
+ AC_CONFIG_FILES([bindings/lua/Makefile])
+ 
+@@ -982,7 +929,6 @@ if test "$lua_need_compat51" = "1"; then
+ echo "   Lua Lua-modules dir: $LUA_INSTALL_LMOD"
+ fi
+ fi
+-echo "    Build Tcl Bindings: $enable_tcl"
+ echo " Build Python Bindings: $enable_python"
+ echo "          Build rrdcgi: $enable_rrdcgi"
+ echo "       Build librrd MT: $enable_pthread"
+-- 
+1.7.10
+
diff --git a/meta-oe/recipes-extended/rrdtool/rrdtool_1.4.7.bb b/meta-oe/recipes-extended/rrdtool/rrdtool_1.4.7.bb
new file mode 100644
index 0000000..76a7133
--- /dev/null
+++ b/meta-oe/recipes-extended/rrdtool/rrdtool_1.4.7.bb
@@ -0,0 +1,33 @@ 
+DESCRIPTION = "High performance data logging and graphing system for time series data."
+HOMEPAGE = "http://oss.oetiker.ch/rrdtool/"
+
+LICENSE = "GPLv2"
+LIC_FILES_CHKSUM = "file://COPYING;md5=44fee82a1d2ed0676cf35478283e0aa0"
+
+DEPENDS = "libpng zlib cairo glib-2.0 libxml2"
+
+SRC_URI = "http://oss.oetiker.ch/rrdtool/pub/rrdtool-${PV}.tar.gz \
+           file://0001-rrdtool-eradicate-tcl-support.patch \
+          "
+SRC_URI[md5sum] = "ffe369d8921b4dfdeaaf43812100c38f"
+SRC_URI[sha256sum] = "956aaf431c955ba88dd7d98920ade3a8c4bad04adb1f9431377950a813a7af11"
+
+inherit autotools gettext
+
+EXTRA_AUTORECONF = "-I m4"
+
+EXTRA_OECONF = " \
+	--enable-shared \
+	--enable-local-libpng \
+	--enable-local-zlib \
+	 --disable-libwrap \
+	--program-prefix='' \
+	rd_cv_ieee_works=yes \
+	--disable-perl \
+	--disable-python \
+	--disable-ruby \
+	--disable-lua \
+	--disable-rpath \
+"
+
+