All of lore.kernel.org
 help / color / mirror / Atom feed
* [for-denzil][meta-oe 01/24] rrdtool: add 1.4.7
@ 2012-07-13  9:11 Koen Kooi
  2012-07-13  9:11 ` [for-denzil][meta-oe 02/24] nodejs: update to 0.6.17 Koen Kooi
                   ` (23 more replies)
  0 siblings, 24 replies; 25+ messages in thread
From: Koen Kooi @ 2012-07-13  9:11 UTC (permalink / raw)
  To: openembedded-devel; +Cc: Koen Kooi, eric

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

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 \
+"
+
+
-- 
1.7.10




^ permalink raw reply related	[flat|nested] 25+ messages in thread

end of thread, other threads:[~2012-07-13 13:38 UTC | newest]

Thread overview: 25+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2012-07-13  9:11 [for-denzil][meta-oe 01/24] rrdtool: add 1.4.7 Koen Kooi
2012-07-13  9:11 ` [for-denzil][meta-oe 02/24] nodejs: update to 0.6.17 Koen Kooi
2012-07-13  9:11 ` [for-denzil][meta-oe 03/24] cloud9: add patch to make it use nodejs 0.6.x for executing scripts Koen Kooi
2012-07-13  9:11 ` [for-denzil][meta-oe 04/24] fb-test: add latest git version Koen Kooi
2012-07-13  9:11 ` [for-denzil][meta-oe 05/24] nodejs: update to 0.6.18 and fix hardfloat detection Koen Kooi
2012-07-13  9:11 ` [for-denzil][meta-oe 06/24] nodejs 0.6.18: fix patch name Koen Kooi
2012-07-13  9:11 ` [for-denzil][meta-oe 07/24] bootchart: update to v1.16 Koen Kooi
2012-07-13  9:11 ` [for-denzil][meta-oe 08/24] libidl: Update LICENSE to contain actual version Koen Kooi
2012-07-13  9:11 ` [for-denzil][meta-oe 09/24] python-numpy: Fixed numpy dependencies Koen Kooi
2012-07-13  9:11 ` [for-denzil][meta-oe 10/24] owfs: update to 2.8p15 Koen Kooi
2012-07-13  9:11 ` [for-denzil][meta-oe 11/24] owfs: enable/disable modules to make build predicable Koen Kooi
2012-07-13  9:11 ` [for-denzil][meta-oe 12/24] gateone: update to 1.1 Koen Kooi
2012-07-13  9:11 ` [for-denzil][meta-oe 13/24] gateone: add config file Koen Kooi
2012-07-13  9:12 ` [for-denzil][meta-oe 14/24] python-numpy : Correct difflib dependency Koen Kooi
2012-07-13  9:12 ` [for-denzil][meta-oe 15/24] kernel.bbclass: pass KERNEL_VERSION to depmod calls in postinst Koen Kooi
2012-07-13  9:12 ` [for-denzil][meta-oe 16/24] libjpeg-turbo: update 1.2.1 / use version 8d to follow oe-core libjpeg update Koen Kooi
2012-07-13  9:12 ` [for-denzil][meta-oe 17/24] edje: explicitly enable libsndfile for target recipe Koen Kooi
2012-07-13  9:12 ` [for-denzil][meta-oe 18/24] libjpeg-turbo: add LEAD_SONAME to fix upgrade to 8d Koen Kooi
2012-07-13  9:12 ` [for-denzil][meta-oe 19/24] yavta: add patch to enable streaming to stdout Koen Kooi
2012-07-13  9:12 ` [for-denzil][meta-oe 20/24] cheese: add 2.30.1 Koen Kooi
2012-07-13  9:12 ` [for-denzil][meta-oe 21/24] python-docutils: update to 0.9.1 Koen Kooi
2012-07-13  9:12 ` [for-denzil][meta-oe 22/24] opencv, opencv-samples: add 2.4.2 Koen Kooi
2012-07-13  9:12 ` [for-denzil][meta-oe 23/24] opencv, opencv-samples: drop 2.3.1 Koen Kooi
2012-07-13  9:12 ` [for-denzil][meta-oe 24/24] ntp: unbreak fetching of ntp-ssl Koen Kooi
2012-07-13 13:27 ` [for-denzil][meta-oe 01/24] rrdtool: add 1.4.7 Eric Bénard

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.