diff --git a/database/rrdtool/rrdtool-1.2.19-parsetime.patch b/database/rrdtool/rrdtool-1.2.19-parsetime.patch
new file mode 100644
index 000000000..842bf23b3
--- /dev/null
+++ b/database/rrdtool/rrdtool-1.2.19-parsetime.patch
@@ -0,0 +1,30 @@
+# --- SDE-COPYRIGHT-NOTE-BEGIN ---
+# This copyright note is auto-generated by ./scripts/Create-CopyPatch.
+#
+# Filename: package/.../rrdtool/rrdtool-1.2.19-parsetime.patch
+# Copyright (C) 2007 The OpenSDE Project
+#
+# More information can be found in the files COPYING and README.
+#
+# This patch file is dual-licensed. It is available under the license the
+# patched project is licensed under, as long as it is an OpenSource license
+# as defined at http://www.opensource.org/ (e.g. BSD, X11) or under the terms
+# of the GNU General Public License as published by the Free Software
+# Foundation; either version 2 of the License, or (at your option) any later
+# version.
+# --- SDE-COPYRIGHT-NOTE-END ---
+
+parsing absolute time should not send us 30,000 years into the future
+(Tatsuki Makino tatsuki_makino hotmail.com)
+
+--- ./src/parsetime.c (Revision 1001)
++++ ./src/parsetime.c (Revision 1002)
+@@ -850,7 +850,7 @@
+ if ( ptv->tm.tm_hour == 30 ){
+ ptv->tm.tm_hour = hour_sv;
+ }
+- if ( ptv->tm.tm_hour == 30000 ){
++ if ( ptv->tm.tm_year == 30000 ){
+ ptv->tm.tm_year = year_sv;
+ }
+ };
diff --git a/database/rrdtool/rrdtool-1.2.19-rrd_dump.patch b/database/rrdtool/rrdtool-1.2.19-rrd_dump.patch
new file mode 100644
index 000000000..441d53c7f
--- /dev/null
+++ b/database/rrdtool/rrdtool-1.2.19-rrd_dump.patch
@@ -0,0 +1,114 @@
+# --- SDE-COPYRIGHT-NOTE-BEGIN ---
+# This copyright note is auto-generated by ./scripts/Create-CopyPatch.
+#
+# Filename: package/.../rrdtool/rrdtool-1.2.19-rrd_dump.patch
+# Copyright (C) 2007 The OpenSDE Project
+#
+# More information can be found in the files COPYING and README.
+#
+# This patch file is dual-licensed. It is available under the license the
+# patched project is licensed under, as long as it is an OpenSource license
+# as defined at http://www.opensource.org/ (e.g. BSD, X11) or under the terms
+# of the GNU General Public License as published by the Free Software
+# Foundation; either version 2 of the License, or (at your option) any later
+# version.
+# --- SDE-COPYRIGHT-NOTE-END ---
+
+fix memmory problem in rrd_dump.c
+
+--- ./src/rrd_dump.c (Revision 1009)
++++ ./src/rrd_dump.c (Revision 1010)
+@@ -115,39 +115,39 @@
+ fprintf(out_file, "\t %ld \n\n",
+ rrd.live_head->last_up,somestring);
+ for(i=0;ids_cnt;i++){
+- fprintf(out_file, "\t\n");
+- fprintf(out_file, "\t\t %s \n",rrd.ds_def[i].ds_nam);
+- fprintf(out_file, "\t\t %s \n",rrd.ds_def[i].dst);
+- if (dst_conv(rrd.ds_def[i].dst) != DST_CDEF) {
+- fprintf(out_file, "\t\t %lu \n",rrd.ds_def[i].par[DS_mrhb_cnt].u_cnt);
+- if (isnan(rrd.ds_def[i].par[DS_min_val].u_val)){
+- fprintf(out_file, "\t\t NaN \n");
+- } else {
+- fprintf(out_file, "\t\t %0.10e \n",rrd.ds_def[i].par[DS_min_val].u_val);
+- }
+- if (isnan(rrd.ds_def[i].par[DS_max_val].u_val)){
+- fprintf(out_file, "\t\t NaN \n");
+- } else {
+- fprintf(out_file, "\t\t %0.10e \n",rrd.ds_def[i].par[DS_max_val].u_val);
+- }
+- } else { /* DST_CDEF */
+- char *str;
+- rpn_compact2str((rpn_cdefds_t *) &(rrd.ds_def[i].par[DS_cdef]),rrd.ds_def,&str);
+- fprintf(out_file, "\t\t %s \n", str);
+- free(str);
+- }
+- fprintf(out_file, "\n\t\t\n");
+- fprintf(out_file, "\t\t %s \n",rrd.pdp_prep[i].last_ds);
+- if (isnan(rrd.pdp_prep[i].scratch[PDP_val].u_val)){
+- fprintf(out_file, "\t\t NaN \n");
+- } else {
+- fprintf(out_file, "\t\t %0.10e \n",rrd.pdp_prep[i].scratch[PDP_val].u_val);
+- }
+- fprintf(out_file, "\t\t %lu \n",
+- rrd.pdp_prep[i].scratch[PDP_unkn_sec_cnt].u_cnt);
++ fprintf(out_file, "\t\n");
++ fprintf(out_file, "\t\t %s \n",rrd.ds_def[i].ds_nam);
++ fprintf(out_file, "\t\t %s \n",rrd.ds_def[i].dst);
++ if (dst_conv(rrd.ds_def[i].dst) != DST_CDEF) {
++ fprintf(out_file, "\t\t %lu \n",rrd.ds_def[i].par[DS_mrhb_cnt].u_cnt);
++ if (isnan(rrd.ds_def[i].par[DS_min_val].u_val)){
++ fprintf(out_file, "\t\t NaN \n");
++ } else {
++ fprintf(out_file, "\t\t %0.10e \n",rrd.ds_def[i].par[DS_min_val].u_val);
++ }
++ if (isnan(rrd.ds_def[i].par[DS_max_val].u_val)){
++ fprintf(out_file, "\t\t NaN \n");
++ } else {
++ fprintf(out_file, "\t\t %0.10e \n",rrd.ds_def[i].par[DS_max_val].u_val);
++ }
++ } else { /* DST_CDEF */
++ char *str=NULL;
++ rpn_compact2str((rpn_cdefds_t *) &(rrd.ds_def[i].par[DS_cdef]),rrd.ds_def,&str);
++ fprintf(out_file, "\t\t %s \n", str);
++ free(str);
++ }
++ fprintf(out_file, "\n\t\t\n");
++ fprintf(out_file, "\t\t %s \n",rrd.pdp_prep[i].last_ds);
++ if (isnan(rrd.pdp_prep[i].scratch[PDP_val].u_val)){
++ fprintf(out_file, "\t\t NaN \n");
++ } else {
++ fprintf(out_file, "\t\t %0.10e \n",rrd.pdp_prep[i].scratch[PDP_val].u_val);
++ }
++ fprintf(out_file, "\t\t %lu \n",
++ rrd.pdp_prep[i].scratch[PDP_unkn_sec_cnt].u_cnt);
+
+- fprintf(out_file, "\t\n\n");
+- }
++ fprintf(out_file, "\t\n\n");
++ }
+
+ fputs("", out_file);
+
+--- ./src/rrd_tune.c (Revision 1009)
++++ ./src/rrd_tune.c (Revision 1010)
+@@ -290,7 +290,7 @@
+ rrd.ds_def[i].par[DS_min_val].u_val,
+ rrd.ds_def[i].par[DS_max_val].u_val);
+ } else {
+- char *buffer;
++ char *buffer = NULL;
+ rpn_compact2str((rpn_cdefds_t *) &(rrd.ds_def[i].par[DS_cdef]),rrd.ds_def,&buffer);
+ printf("DS[%s] typ: %s\tcdef: %s\n", rrd.ds_def[i].ds_nam,rrd.ds_def[i].dst,buffer);
+ free(buffer);
+--- ./src/rrd_info.c (Revision 1009)
++++ ./src/rrd_info.c (Revision 1010)
+@@ -117,7 +117,7 @@
+ switch (current_ds) {
+ case DST_CDEF:
+ {
+- char *buffer = 0;
++ char *buffer = NULL;
+ rpn_compact2str((rpn_cdefds_t *) &(rrd.ds_def[i].par[DS_cdef]),
+ rrd.ds_def, &buffer);
+ info.u_str = buffer;
diff --git a/database/rrdtool/rrdtool-1.2.19-rrd_getopt.patch b/database/rrdtool/rrdtool-1.2.19-rrd_getopt.patch
new file mode 100644
index 000000000..57232c8e3
--- /dev/null
+++ b/database/rrdtool/rrdtool-1.2.19-rrd_getopt.patch
@@ -0,0 +1,2741 @@
+# --- SDE-COPYRIGHT-NOTE-BEGIN ---
+# This copyright note is auto-generated by ./scripts/Create-CopyPatch.
+#
+# Filename: package/.../rrdtool/rrdtool-1.2.19-rrd_getopt.patch
+# Copyright (C) 2007 The OpenSDE Project
+#
+# More information can be found in the files COPYING and README.
+#
+# This patch file is dual-licensed. It is available under the license the
+# patched project is licensed under, as long as it is an OpenSource license
+# as defined at http://www.opensource.org/ (e.g. BSD, X11) or under the terms
+# of the GNU General Public License as published by the Free Software
+# Foundation; either version 2 of the License, or (at your option) any later
+# version.
+# --- SDE-COPYRIGHT-NOTE-END ---
+
+renamed getopt to rrd_getopt to avoid confusion on some systems
+
+--- ./src/getopt1.c (Revision 1006)
++++ ./src/getopt1.c (Revision 1007)
+@@ -1,189 +0,0 @@
+-/* getopt_long and getopt_long_only entry points for GNU getopt.
+- Copyright (C) 1987,88,89,90,91,92,93,94,96,97 Free Software Foundation, Inc.
+-
+- This file is part of the GNU C Library. Its master source is NOT part of
+- the C library, however. The master source lives in /gd/gnu/lib.
+-
+- The GNU C Library is free software; you can redistribute it and/or
+- modify it under the terms of the GNU Library General Public License as
+- published by the Free Software Foundation; either version 2 of the
+- License, or (at your option) any later version.
+-
+- The GNU C Library is distributed in the hope that it will be useful,
+- but WITHOUT ANY WARRANTY; without even the implied warranty of
+- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+- Library General Public License for more details.
+-
+- You should have received a copy of the GNU Library General Public
+- License along with the GNU C Library; see the file COPYING.LIB. If not,
+- write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+- Boston, MA 02111-1307, USA. */
+-
+-#ifdef HAVE_CONFIG_H
+-#include "../rrd_config.h"
+-#endif
+-
+-#include "getopt.h"
+-
+-#if !defined (__STDC__) || !__STDC__
+-/* This is a separate conditional since some stdc systems
+- reject `defined (const)'. */
+-#ifndef const
+-#define const
+-#endif
+-#endif
+-
+-#include
+-
+-/* Comment out all this code if we are using the GNU C Library, and are not
+- actually compiling the library itself. This code is part of the GNU C
+- Library, but also included in many other GNU distributions. Compiling
+- and linking in this code is a waste when using the GNU C library
+- (especially if it is a shared library). Rather than having every GNU
+- program understand `configure --with-gnu-libc' and omit the object files,
+- it is simpler to just do this in the source for each such file. */
+-
+-#define GETOPT_INTERFACE_VERSION 2
+-#if !defined (_LIBC) && defined (__GLIBC__) && __GLIBC__ >= 2
+-#include
+-#if _GNU_GETOPT_INTERFACE_VERSION == GETOPT_INTERFACE_VERSION
+-#define ELIDE_CODE
+-#endif
+-#endif
+-
+-#ifndef ELIDE_CODE
+-
+-
+-/* This needs to come after some library #include
+- to get __GNU_LIBRARY__ defined. */
+-#ifdef __GNU_LIBRARY__
+-#include
+-#endif
+-
+-#ifndef NULL
+-#define NULL 0
+-#endif
+-
+-int
+-getopt_long (argc, argv, options, long_options, opt_index)
+- int argc;
+- char *const *argv;
+- const char *options;
+- const struct option *long_options;
+- int *opt_index;
+-{
+- return _getopt_internal (argc, argv, options, long_options, opt_index, 0);
+-}
+-
+-/* Like getopt_long, but '-' as well as '--' can indicate a long option.
+- If an option that starts with '-' (not '--') doesn't match a long option,
+- but does match a short option, it is parsed as a short option
+- instead. */
+-
+-int
+-getopt_long_only (argc, argv, options, long_options, opt_index)
+- int argc;
+- char *const *argv;
+- const char *options;
+- const struct option *long_options;
+- int *opt_index;
+-{
+- return _getopt_internal (argc, argv, options, long_options, opt_index, 1);
+-}
+-
+-
+-#endif /* Not ELIDE_CODE. */
+-
+-#ifdef TEST
+-
+-#include
+-
+-int
+-main (argc, argv)
+- int argc;
+- char **argv;
+-{
+- int c;
+- int digit_optind = 0;
+-
+- while (1)
+- {
+- int this_option_optind = optind ? optind : 1;
+- int option_index = 0;
+- static struct option long_options[] =
+- {
+- {"add", 1, 0, 0},
+- {"append", 0, 0, 0},
+- {"delete", 1, 0, 0},
+- {"verbose", 0, 0, 0},
+- {"create", 0, 0, 0},
+- {"file", 1, 0, 0},
+- {0, 0, 0, 0}
+- };
+-
+- c = getopt_long (argc, argv, "abc:d:0123456789",
+- long_options, &option_index);
+- if (c == -1)
+- break;
+-
+- switch (c)
+- {
+- case 0:
+- printf ("option %s", long_options[option_index].name);
+- if (optarg)
+- printf (" with arg %s", optarg);
+- printf ("\n");
+- break;
+-
+- case '0':
+- case '1':
+- case '2':
+- case '3':
+- case '4':
+- case '5':
+- case '6':
+- case '7':
+- case '8':
+- case '9':
+- if (digit_optind != 0 && digit_optind != this_option_optind)
+- printf ("digits occur in two different argv-elements.\n");
+- digit_optind = this_option_optind;
+- printf ("option %c\n", c);
+- break;
+-
+- case 'a':
+- printf ("option a\n");
+- break;
+-
+- case 'b':
+- printf ("option b\n");
+- break;
+-
+- case 'c':
+- printf ("option c with value `%s'\n", optarg);
+- break;
+-
+- case 'd':
+- printf ("option d with value `%s'\n", optarg);
+- break;
+-
+- case '?':
+- break;
+-
+- default:
+- printf ("?? getopt returned character code 0%o ??\n", c);
+- }
+- }
+-
+- if (optind < argc)
+- {
+- printf ("non-option ARGV-elements: ");
+- while (optind < argc)
+- printf ("%s ", argv[optind++]);
+- printf ("\n");
+- }
+-
+- exit (0);
+-}
+-
+-#endif /* TEST */
+--- ./src/getopt.c (Revision 1006)
++++ ./src/getopt.c (Revision 1007)
+@@ -1,1002 +0,0 @@
+-/* Getopt for GNU.
+- NOTE: getopt is now part of the C library, so if you don't know what
+- "Keep this file name-space clean" means, talk to roland@gnu.ai.mit.edu
+- before changing it!
+-
+- Copyright (C) 1987, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97
+- Free Software Foundation, Inc.
+-
+- This file is part of the GNU C Library. Its master source is NOT part of
+- the C library, however. The master source lives in /gd/gnu/lib.
+-
+- The GNU C Library is free software; you can redistribute it and/or
+- modify it under the terms of the GNU Library General Public License as
+- published by the Free Software Foundation; either version 2 of the
+- License, or (at your option) any later version.
+-
+- The GNU C Library is distributed in the hope that it will be useful,
+- but WITHOUT ANY WARRANTY; without even the implied warranty of
+- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+- Library General Public License for more details.
+-
+- You should have received a copy of the GNU Library General Public
+- License along with the GNU C Library; see the file COPYING.LIB. If not,
+- write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+- Boston, MA 02111-1307, USA. */
+-
+-/* This tells Alpha OSF/1 not to define a getopt prototype in .
+- Ditto for AIX 3.2 and . */
+-#ifndef _NO_PROTO
+-#define _NO_PROTO
+-#endif
+-
+-#ifdef HAVE_CONFIG_H
+-#include "../rrd_config.h"
+-#endif
+-
+-#if !defined (__STDC__) || !__STDC__
+-/* This is a separate conditional since some stdc systems
+- reject `defined (const)'. */
+-#ifndef const
+-#define const
+-#endif
+-#endif
+-
+-#include
+-
+-/* Comment out all this code if we are using the GNU C Library, and are not
+- actually compiling the library itself. This code is part of the GNU C
+- Library, but also included in many other GNU distributions. Compiling
+- and linking in this code is a waste when using the GNU C library
+- (especially if it is a shared library). Rather than having every GNU
+- program understand `configure --with-gnu-libc' and omit the object files,
+- it is simpler to just do this in the source for each such file. */
+-
+-#define GETOPT_INTERFACE_VERSION 2
+-#if !defined (_LIBC) && defined (__GLIBC__) && __GLIBC__ >= 2
+-#include
+-#if _GNU_GETOPT_INTERFACE_VERSION == GETOPT_INTERFACE_VERSION
+-#define ELIDE_CODE
+-#endif
+-#endif
+-
+-#ifndef ELIDE_CODE
+-
+-
+-/* This needs to come after some library #include
+- to get __GNU_LIBRARY__ defined. */
+-#ifdef __GNU_LIBRARY__
+-/* Don't include stdlib.h for non-GNU C libraries because some of them
+- contain conflicting prototypes for getopt. */
+-#include
+-#include
+-#endif /* GNU C library. */
+-
+-#ifdef VMS
+-#include
+-#if HAVE_STRING_H - 0
+-#include
+-#endif
+-#endif
+-
+-#if defined (_WIN32) && !defined (__CYGWIN32__)
+-/* It's not Unix, really. See? Capital letters. */
+-#include
+-#define getpid() GetCurrentProcessId()
+-#endif
+-
+-#ifndef _
+-/* This is for other GNU distributions with internationalized messages.
+- When compiling libc, the _ macro is predefined. */
+-#ifdef HAVE_LIBINTL_H
+-# include
+-# define _(msgid) gettext (msgid)
+-#else
+-# define _(msgid) (msgid)
+-#endif
+-#endif
+-
+-/* This version of `getopt' appears to the caller like standard Unix `getopt'
+- but it behaves differently for the user, since it allows the user
+- to intersperse the options with the other arguments.
+-
+- As `getopt' works, it permutes the elements of ARGV so that,
+- when it is done, all the options precede everything else. Thus
+- all application programs are extended to handle flexible argument order.
+-
+- Setting the environment variable POSIXLY_CORRECT disables permutation.
+- Then the behavior is completely standard.
+-
+- GNU application programs can use a third alternative mode in which
+- they can distinguish the relative order of options and other arguments. */
+-
+-#include "getopt.h"
+-
+-/* For communication from `getopt' to the caller.
+- When `getopt' finds an option that takes an argument,
+- the argument value is returned here.
+- Also, when `ordering' is RETURN_IN_ORDER,
+- each non-option ARGV-element is returned here. */
+-
+-char *optarg = NULL;
+-
+-/* Index in ARGV of the next element to be scanned.
+- This is used for communication to and from the caller
+- and for communication between successive calls to `getopt'.
+-
+- On entry to `getopt', zero means this is the first call; initialize.
+-
+- When `getopt' returns -1, this is the index of the first of the
+- non-option elements that the caller should itself scan.
+-
+- Otherwise, `optind' communicates from one call to the next
+- how much of ARGV has been scanned so far. */
+-
+-/* 1003.2 says this must be 1 before any call. */
+-int optind = 1;
+-
+-/* Formerly, initialization of getopt depended on optind==0, which
+- causes problems with re-calling getopt as programs generally don't
+- know that. */
+-
+-int __getopt_initialized = 0;
+-
+-/* The next char to be scanned in the option-element
+- in which the last option character we returned was found.
+- This allows us to pick up the scan where we left off.
+-
+- If this is zero, or a null string, it means resume the scan
+- by advancing to the next ARGV-element. */
+-
+-static char *nextchar;
+-
+-/* Callers store zero here to inhibit the error message
+- for unrecognized options. */
+-
+-int opterr = 1;
+-
+-/* Set to an option character which was unrecognized.
+- This must be initialized on some systems to avoid linking in the
+- system's own getopt implementation. */
+-
+-int optopt = '?';
+-
+-/* Describe how to deal with options that follow non-option ARGV-elements.
+-
+- If the caller did not specify anything,
+- the default is REQUIRE_ORDER if the environment variable
+- POSIXLY_CORRECT is defined, PERMUTE otherwise.
+-
+- REQUIRE_ORDER means don't recognize them as options;
+- stop option processing when the first non-option is seen.
+- This is what Unix does.
+- This mode of operation is selected by either setting the environment
+- variable POSIXLY_CORRECT, or using `+' as the first character
+- of the list of option characters.
+-
+- PERMUTE is the default. We permute the contents of ARGV as we scan,
+- so that eventually all the non-options are at the end. This allows options
+- to be given in any order, even with programs that were not written to
+- expect this.
+-
+- RETURN_IN_ORDER is an option available to programs that were written
+- to expect options and other ARGV-elements in any order and that care about
+- the ordering of the two. We describe each non-option ARGV-element
+- as if it were the argument of an option with character code 1.
+- Using `-' as the first character of the list of option characters
+- selects this mode of operation.
+-
+- The special argument `--' forces an end of option-scanning regardless
+- of the value of `ordering'. In the case of RETURN_IN_ORDER, only
+- `--' can cause `getopt' to return -1 with `optind' != ARGC. */
+-
+-static enum
+-{
+- REQUIRE_ORDER, PERMUTE, RETURN_IN_ORDER
+-} ordering;
+-
+-/* Value of POSIXLY_CORRECT environment variable. */
+-static char *posixly_correct;
+-
+-/* we must include string as there are warnings without it ... */
+-#include
+-
+-#ifdef __GNU_LIBRARY__
+-/* We want to avoid inclusion of string.h with non-GNU libraries
+- because there are many ways it can cause trouble.
+- On some systems, it contains special magic macros that don't work
+- in GCC. */
+-#define my_index strchr
+-#else
+-
+-/* Avoid depending on library functions or files
+- whose names are inconsistent. */
+-
+-char *getenv ();
+-
+-static char *
+-my_index (str, chr)
+- const char *str;
+- int chr;
+-{
+- while (*str)
+- {
+- if (*str == chr)
+- return (char *) str;
+- str++;
+- }
+- return 0;
+-}
+-
+-/* If using GCC, we can safely declare strlen this way.
+- If not using GCC, it is ok not to declare it. */
+-#ifdef __GNUC__
+-/* Note that Motorola Delta 68k R3V7 comes with GCC but not stddef.h.
+- That was relevant to code that was here before. */
+-#if !defined (__STDC__) || !__STDC__
+-/* gcc with -traditional declares the built-in strlen to return int,
+- and has done so at least since version 2.4.5. -- rms. */
+-extern int strlen (const char *);
+-#endif /* not __STDC__ */
+-#endif /* __GNUC__ */
+-
+-#endif /* not __GNU_LIBRARY__ */
+-
+-/* Handle permutation of arguments. */
+-
+-/* Describe the part of ARGV that contains non-options that have
+- been skipped. `first_nonopt' is the index in ARGV of the first of them;
+- `last_nonopt' is the index after the last of them. */
+-
+-static int first_nonopt;
+-static int last_nonopt;
+-
+-#ifdef _LIBC
+-/* Bash 2.0 gives us an environment variable containing flags
+- indicating ARGV elements that should not be considered arguments. */
+-
+-static const char *nonoption_flags;
+-static int nonoption_flags_len;
+-
+-static int original_argc;
+-static char *const *original_argv;
+-
+-/* Make sure the environment variable bash 2.0 puts in the environment
+- is valid for the getopt call we must make sure that the ARGV passed
+- to getopt is that one passed to the process. */
+-static void store_args (int argc, char *const *argv) __attribute__ ((unused));
+-static void
+-store_args (int argc, char *const *argv)
+-{
+- /* XXX This is no good solution. We should rather copy the args so
+- that we can compare them later. But we must not use malloc(3). */
+- original_argc = argc;
+- original_argv = argv;
+-}
+-text_set_element (__libc_subinit, store_args);
+-#endif
+-
+-/* Exchange two adjacent subsequences of ARGV.
+- One subsequence is elements [first_nonopt,last_nonopt)
+- which contains all the non-options that have been skipped so far.
+- The other is elements [last_nonopt,optind), which contains all
+- the options processed since those non-options were skipped.
+-
+- `first_nonopt' and `last_nonopt' are relocated so that they describe
+- the new indices of the non-options in ARGV after they are moved. */
+-
+-#if defined (__STDC__) && __STDC__
+-static void exchange (char **);
+-#endif
+-
+-static void
+-exchange (argv)
+- char **argv;
+-{
+- int bottom = first_nonopt;
+- int middle = last_nonopt;
+- int top = optind;
+- char *tem;
+-
+- /* Exchange the shorter segment with the far end of the longer segment.
+- That puts the shorter segment into the right place.
+- It leaves the longer segment in the right place overall,
+- but it consists of two parts that need to be swapped next. */
+-
+- while (top > middle && middle > bottom)
+- {
+- if (top - middle > middle - bottom)
+- {
+- /* Bottom segment is the short one. */
+- int len = middle - bottom;
+- register int i;
+-
+- /* Swap it with the top part of the top segment. */
+- for (i = 0; i < len; i++)
+- {
+- tem = argv[bottom + i];
+- argv[bottom + i] = argv[top - (middle - bottom) + i];
+- argv[top - (middle - bottom) + i] = tem;
+- }
+- /* Exclude the moved bottom segment from further swapping. */
+- top -= len;
+- }
+- else
+- {
+- /* Top segment is the short one. */
+- int len = top - middle;
+- register int i;
+-
+- /* Swap it with the bottom part of the bottom segment. */
+- for (i = 0; i < len; i++)
+- {
+- tem = argv[bottom + i];
+- argv[bottom + i] = argv[middle + i];
+- argv[middle + i] = tem;
+- }
+- /* Exclude the moved top segment from further swapping. */
+- bottom += len;
+- }
+- }
+-
+- /* Update records for the slots the non-options now occupy. */
+-
+- first_nonopt += (optind - last_nonopt);
+- last_nonopt = optind;
+-}
+-
+-/* Initialize the internal data when the first call is made. */
+-
+-#if defined (__STDC__) && __STDC__
+-static const char *_getopt_initialize (int, char *const *, const char *);
+-#endif
+-static const char *
+-_getopt_initialize (argc, argv, optstring)
+- int argc;
+- char *const *argv;
+- const char *optstring;
+-{
+- /* Start processing options with ARGV-element 1 (since ARGV-element 0
+- is the program name); the sequence of previously skipped
+- non-option ARGV-elements is empty. */
+-
+- first_nonopt = last_nonopt = optind = 1;
+-
+- nextchar = NULL;
+-
+- posixly_correct = getenv ("POSIXLY_CORRECT");
+-
+- /* Determine how to handle the ordering of options and nonoptions. */
+-
+- if (optstring[0] == '-')
+- {
+- ordering = RETURN_IN_ORDER;
+- ++optstring;
+- }
+- else if (optstring[0] == '+')
+- {
+- ordering = REQUIRE_ORDER;
+- ++optstring;
+- }
+- else if (posixly_correct != NULL)
+- ordering = REQUIRE_ORDER;
+- else
+- ordering = PERMUTE;
+-
+-#ifdef _LIBC
+- if (posixly_correct == NULL
+- && argc == original_argc && argv == original_argv)
+- {
+- /* Bash 2.0 puts a special variable in the environment for each
+- command it runs, specifying which ARGV elements are the results of
+- file name wildcard expansion and therefore should not be
+- considered as options. */
+- char var[100];
+- sprintf (var, "_%d_GNU_nonoption_argv_flags_", getpid ());
+- nonoption_flags = getenv (var);
+- if (nonoption_flags == NULL)
+- nonoption_flags_len = 0;
+- else
+- nonoption_flags_len = strlen (nonoption_flags);
+- }
+- else
+- nonoption_flags_len = 0;
+-#endif
+-
+- return optstring;
+-}
+-
+-/* Scan elements of ARGV (whose length is ARGC) for option characters
+- given in OPTSTRING.
+-
+- If an element of ARGV starts with '-', and is not exactly "-" or "--",
+- then it is an option element. The characters of this element
+- (aside from the initial '-') are option characters. If `getopt'
+- is called repeatedly, it returns successively each of the option characters
+- from each of the option elements.
+-
+- If `getopt' finds another option character, it returns that character,
+- updating `optind' and `nextchar' so that the next call to `getopt' can
+- resume the scan with the following option character or ARGV-element.
+-
+- If there are no more option characters, `getopt' returns -1.
+- Then `optind' is the index in ARGV of the first ARGV-element
+- that is not an option. (The ARGV-elements have been permuted
+- so that those that are not options now come last.)
+-
+- OPTSTRING is a string containing the legitimate option characters.
+- If an option character is seen that is not listed in OPTSTRING,
+- return '?' after printing an error message. If you set `opterr' to
+- zero, the error message is suppressed but we still return '?'.
+-
+- If a char in OPTSTRING is followed by a colon, that means it wants an arg,
+- so the following text in the same ARGV-element, or the text of the following
+- ARGV-element, is returned in `optarg'. Two colons mean an option that
+- wants an optional arg; if there is text in the current ARGV-element,
+- it is returned in `optarg', otherwise `optarg' is set to zero.
+-
+- If OPTSTRING starts with `-' or `+', it requests different methods of
+- handling the non-option ARGV-elements.
+- See the comments about RETURN_IN_ORDER and REQUIRE_ORDER, above.
+-
+- Long-named options begin with `--' instead of `-'.
+- Their names may be abbreviated as long as the abbreviation is unique
+- or is an exact match for some defined option. If they have an
+- argument, it follows the option name in the same ARGV-element, separated
+- from the option name by a `=', or else the in next ARGV-element.
+- When `getopt' finds a long-named option, it returns 0 if that option's
+- `flag' field is nonzero, the value of the option's `val' field
+- if the `flag' field is zero.
+-
+- The elements of ARGV aren't really const, because we permute them.
+- But we pretend they're const in the prototype to be compatible
+- with other systems.
+-
+- LONGOPTS is a vector of `struct option' terminated by an
+- element containing a name which is zero.
+-
+- LONGIND returns the index in LONGOPT of the long-named option found.
+- It is only valid when a long-named option has been found by the most
+- recent call.
+-
+- If LONG_ONLY is nonzero, '-' as well as '--' can introduce
+- long-named options. */
+-
+-int
+-_getopt_internal (argc, argv, optstring, longopts, longind, long_only)
+- int argc;
+- char *const *argv;
+- const char *optstring;
+- const struct option *longopts;
+- int *longind;
+- int long_only;
+-{
+- optarg = NULL;
+-
+- if (!__getopt_initialized || optind == 0)
+- {
+- optstring = _getopt_initialize (argc, argv, optstring);
+- optind = 1; /* Don't scan ARGV[0], the program name. */
+- __getopt_initialized = 1;
+- }
+-
+- /* Test whether ARGV[optind] points to a non-option argument.
+- Either it does not have option syntax, or there is an environment flag
+- from the shell indicating it is not an option. The later information
+- is only used when the used in the GNU libc. */
+-#ifdef _LIBC
+-#define NONOPTION_P (argv[optind][0] != '-' || argv[optind][1] == '\0' \
+- || (optind < nonoption_flags_len \
+- && nonoption_flags[optind] == '1'))
+-#else
+-#define NONOPTION_P (argv[optind][0] != '-' || argv[optind][1] == '\0')
+-#endif
+-
+- if (nextchar == NULL || *nextchar == '\0')
+- {
+- /* Advance to the next ARGV-element. */
+-
+- /* Give FIRST_NONOPT & LAST_NONOPT rational values if OPTIND has been
+- moved back by the user (who may also have changed the arguments). */
+- if (last_nonopt > optind)
+- last_nonopt = optind;
+- if (first_nonopt > optind)
+- first_nonopt = optind;
+-
+- if (ordering == PERMUTE)
+- {
+- /* If we have just processed some options following some non-options,
+- exchange them so that the options come first. */
+-
+- if (first_nonopt != last_nonopt && last_nonopt != optind)
+- exchange ((char **) argv);
+- else if (last_nonopt != optind)
+- first_nonopt = optind;
+-
+- /* Skip any additional non-options
+- and extend the range of non-options previously skipped. */
+-
+- while (optind < argc && NONOPTION_P)
+- optind++;
+- last_nonopt = optind;
+- }
+-
+- /* The special ARGV-element `--' means premature end of options.
+- Skip it like a null option,
+- then exchange with previous non-options as if it were an option,
+- then skip everything else like a non-option. */
+-
+- if (optind != argc && !strcmp (argv[optind], "--"))
+- {
+- optind++;
+-
+- if (first_nonopt != last_nonopt && last_nonopt != optind)
+- exchange ((char **) argv);
+- else if (first_nonopt == last_nonopt)
+- first_nonopt = optind;
+- last_nonopt = argc;
+-
+- optind = argc;
+- }
+-
+- /* If we have done all the ARGV-elements, stop the scan
+- and back over any non-options that we skipped and permuted. */
+-
+- if (optind == argc)
+- {
+- /* Set the next-arg-index to point at the non-options
+- that we previously skipped, so the caller will digest them. */
+- if (first_nonopt != last_nonopt)
+- optind = first_nonopt;
+- return -1;
+- }
+-
+- /* If we have come to a non-option and did not permute it,
+- either stop the scan or describe it to the caller and pass it by. */
+-
+- if (NONOPTION_P)
+- {
+- if (ordering == REQUIRE_ORDER)
+- return -1;
+- optarg = argv[optind++];
+- return 1;
+- }
+-
+- /* We have found another option-ARGV-element.
+- Skip the initial punctuation. */
+-
+- nextchar = (argv[optind] + 1
+- + (longopts != NULL && argv[optind][1] == '-'));
+- }
+-
+- /* Decode the current option-ARGV-element. */
+-
+- /* Check whether the ARGV-element is a long option.
+-
+- If long_only and the ARGV-element has the form "-f", where f is
+- a valid short option, don't consider it an abbreviated form of
+- a long option that starts with f. Otherwise there would be no
+- way to give the -f short option.
+-
+- On the other hand, if there's a long option "fubar" and
+- the ARGV-element is "-fu", do consider that an abbreviation of
+- the long option, just like "--fu", and not "-f" with arg "u".
+-
+- This distinction seems to be the most useful approach. */
+-
+- if (longopts != NULL
+- && (argv[optind][1] == '-'
+- || (long_only && (argv[optind][2] || !my_index (optstring, argv[optind][1])))))
+- {
+- char *nameend;
+- const struct option *p;
+- const struct option *pfound = NULL;
+- int exact = 0;
+- int ambig = 0;
+- int indfound = -1;
+- int option_index;
+-
+- for (nameend = nextchar; *nameend && *nameend != '='; nameend++)
+- /* Do nothing. */ ;
+-
+- /* Test all long options for either exact match
+- or abbreviated matches. */
+- for (p = longopts, option_index = 0; p->name; p++, option_index++)
+- if (!strncmp (p->name, nextchar, nameend - nextchar))
+- {
+- if ((unsigned int) (nameend - nextchar)
+- == (unsigned int) strlen (p->name))
+- {
+- /* Exact match found. */
+- pfound = p;
+- indfound = option_index;
+- exact = 1;
+- break;
+- }
+- else if (pfound == NULL)
+- {
+- /* First nonexact match found. */
+- pfound = p;
+- indfound = option_index;
+- }
+- else
+- /* Second or later nonexact match found. */
+- ambig = 1;
+- }
+-
+- if (ambig && !exact)
+- {
+- if (opterr)
+- fprintf (stderr, _("%s: option `%s' is ambiguous\n"),
+- argv[0], argv[optind]);
+- nextchar += strlen (nextchar);
+- optind++;
+- optopt = 0;
+- return '?';
+- }
+-
+- if (pfound != NULL)
+- {
+- option_index = indfound;
+- optind++;
+- if (*nameend)
+- {
+- /* Don't test has_arg with >, because some C compilers don't
+- allow it to be used on enums. */
+- if (pfound->has_arg)
+- optarg = nameend + 1;
+- else
+- {
+- if (opterr) {
+- if (argv[optind - 1][1] == '-')
+- /* --option */
+- fprintf (stderr,
+- _("%s: option `--%s' doesn't allow an argument\n"),
+- argv[0], pfound->name);
+- else
+- /* +option or -option */
+- fprintf (stderr,
+- _("%s: option `%c%s' doesn't allow an argument\n"),
+- argv[0], argv[optind - 1][0], pfound->name);
+- }
+- nextchar += strlen (nextchar);
+-
+- optopt = pfound->val;
+- return '?';
+- }
+- }
+- else if (pfound->has_arg == 1)
+- {
+- if (optind < argc)
+- optarg = argv[optind++];
+- else
+- {
+- if (opterr)
+- fprintf (stderr,
+- _("%s: option `%s' requires an argument\n"),
+- argv[0], argv[optind - 1]);
+- nextchar += strlen (nextchar);
+- optopt = pfound->val;
+- return optstring[0] == ':' ? ':' : '?';
+- }
+- }
+- nextchar += strlen (nextchar);
+- if (longind != NULL)
+- *longind = option_index;
+- if (pfound->flag)
+- {
+- *(pfound->flag) = pfound->val;
+- return 0;
+- }
+- return pfound->val;
+- }
+-
+- /* Can't find it as a long option. If this is not getopt_long_only,
+- or the option starts with '--' or is not a valid short
+- option, then it's an error.
+- Otherwise interpret it as a short option. */
+- if (!long_only || argv[optind][1] == '-'
+- || my_index (optstring, *nextchar) == NULL)
+- {
+- if (opterr)
+- {
+- if (argv[optind][1] == '-')
+- /* --option */
+- fprintf (stderr, _("%s: unrecognized option `--%s'\n"),
+- argv[0], nextchar);
+- else
+- /* +option or -option */
+- fprintf (stderr, _("%s: unrecognized option `%c%s'\n"),
+- argv[0], argv[optind][0], nextchar);
+- }
+- nextchar = (char *) "";
+- optind++;
+- optopt = 0;
+- return '?';
+- }
+- }
+-
+- /* Look at and handle the next short option-character. */
+-
+- {
+- char c = *nextchar++;
+- char *temp = my_index (optstring, c);
+-
+- /* Increment `optind' when we start to process its last character. */
+- if (*nextchar == '\0')
+- ++optind;
+-
+- if (temp == NULL || c == ':')
+- {
+- if (opterr)
+- {
+- if (posixly_correct)
+- /* 1003.2 specifies the format of this message. */
+- fprintf (stderr, _("%s: illegal option -- %c\n"),
+- argv[0], c);
+- else
+- fprintf (stderr, _("%s: invalid option -- %c\n"),
+- argv[0], c);
+- }
+- optopt = c;
+- return '?';
+- }
+- /* Convenience. Treat POSIX -W foo same as long option --foo */
+- if (temp[0] == 'W' && temp[1] == ';')
+- {
+- char *nameend;
+- const struct option *p;
+- const struct option *pfound = NULL;
+- int exact = 0;
+- int ambig = 0;
+- int indfound = 0;
+- int option_index;
+-
+- /* This is an option that requires an argument. */
+- if (*nextchar != '\0')
+- {
+- optarg = nextchar;
+- /* If we end this ARGV-element by taking the rest as an arg,
+- we must advance to the next element now. */
+- optind++;
+- }
+- else if (optind == argc)
+- {
+- if (opterr)
+- {
+- /* 1003.2 specifies the format of this message. */
+- fprintf (stderr, _("%s: option requires an argument -- %c\n"),
+- argv[0], c);
+- }
+- optopt = c;
+- if (optstring[0] == ':')
+- c = ':';
+- else
+- c = '?';
+- return c;
+- }
+- else
+- /* We already incremented `optind' once;
+- increment it again when taking next ARGV-elt as argument. */
+- optarg = argv[optind++];
+-
+- /* optarg is now the argument, see if it's in the
+- table of longopts. */
+-
+- for (nextchar = nameend = optarg; *nameend && *nameend != '='; nameend++)
+- /* Do nothing. */ ;
+-
+- /* Test all long options for either exact match
+- or abbreviated matches. */
+- for (p = longopts, option_index = 0; p->name; p++, option_index++)
+- if (!strncmp (p->name, nextchar, nameend - nextchar))
+- {
+- if ((unsigned int) (nameend - nextchar) == strlen (p->name))
+- {
+- /* Exact match found. */
+- pfound = p;
+- indfound = option_index;
+- exact = 1;
+- break;
+- }
+- else if (pfound == NULL)
+- {
+- /* First nonexact match found. */
+- pfound = p;
+- indfound = option_index;
+- }
+- else
+- /* Second or later nonexact match found. */
+- ambig = 1;
+- }
+- if (ambig && !exact)
+- {
+- if (opterr)
+- fprintf (stderr, _("%s: option `-W %s' is ambiguous\n"),
+- argv[0], argv[optind]);
+- nextchar += strlen (nextchar);
+- optind++;
+- return '?';
+- }
+- if (pfound != NULL)
+- {
+- option_index = indfound;
+- if (*nameend)
+- {
+- /* Don't test has_arg with >, because some C compilers don't
+- allow it to be used on enums. */
+- if (pfound->has_arg)
+- optarg = nameend + 1;
+- else
+- {
+- if (opterr)
+- fprintf (stderr, _("\
+-%s: option `-W %s' doesn't allow an argument\n"),
+- argv[0], pfound->name);
+-
+- nextchar += strlen (nextchar);
+- return '?';
+- }
+- }
+- else if (pfound->has_arg == 1)
+- {
+- if (optind < argc)
+- optarg = argv[optind++];
+- else
+- {
+- if (opterr)
+- fprintf (stderr,
+- _("%s: option `%s' requires an argument\n"),
+- argv[0], argv[optind - 1]);
+- nextchar += strlen (nextchar);
+- return optstring[0] == ':' ? ':' : '?';
+- }
+- }
+- nextchar += strlen (nextchar);
+- if (longind != NULL)
+- *longind = option_index;
+- if (pfound->flag)
+- {
+- *(pfound->flag) = pfound->val;
+- return 0;
+- }
+- return pfound->val;
+- }
+- nextchar = NULL;
+- return 'W'; /* Let the application handle it. */
+- }
+- if (temp[1] == ':')
+- {
+- if (temp[2] == ':')
+- {
+- /* This is an option that accepts an argument optionally. */
+- if (*nextchar != '\0')
+- {
+- optarg = nextchar;
+- optind++;
+- }
+- else
+- optarg = NULL;
+- nextchar = NULL;
+- }
+- else
+- {
+- /* This is an option that requires an argument. */
+- if (*nextchar != '\0')
+- {
+- optarg = nextchar;
+- /* If we end this ARGV-element by taking the rest as an arg,
+- we must advance to the next element now. */
+- optind++;
+- }
+- else if (optind == argc)
+- {
+- if (opterr)
+- {
+- /* 1003.2 specifies the format of this message. */
+- fprintf (stderr,
+- _("%s: option requires an argument -- %c\n"),
+- argv[0], c);
+- }
+- optopt = c;
+- if (optstring[0] == ':')
+- c = ':';
+- else
+- c = '?';
+- }
+- else
+- /* We already incremented `optind' once;
+- increment it again when taking next ARGV-elt as argument. */
+- optarg = argv[optind++];
+- nextchar = NULL;
+- }
+- }
+- return c;
+- }
+-}
+-
+-int
+-getopt (argc, argv, optstring)
+- int argc;
+- char *const *argv;
+- const char *optstring;
+-{
+- return _getopt_internal (argc, argv, optstring,
+- (const struct option *) 0,
+- (int *) 0,
+- 0);
+-}
+-
+-#endif /* Not ELIDE_CODE. */
+-
+-#ifdef TEST
+-
+-/* Compile with -DTEST to make an executable for use in testing
+- the above definition of `getopt'. */
+-
+-int
+-main (argc, argv)
+- int argc;
+- char **argv;
+-{
+- int c;
+- int digit_optind = 0;
+-
+- while (1)
+- {
+- int this_option_optind = optind ? optind : 1;
+-
+- c = getopt (argc, argv, "abc:d:0123456789");
+- if (c == -1)
+- break;
+-
+- switch (c)
+- {
+- case '0':
+- case '1':
+- case '2':
+- case '3':
+- case '4':
+- case '5':
+- case '6':
+- case '7':
+- case '8':
+- case '9':
+- if (digit_optind != 0 && digit_optind != this_option_optind)
+- printf ("digits occur in two different argv-elements.\n");
+- digit_optind = this_option_optind;
+- printf ("option %c\n", c);
+- break;
+-
+- case 'a':
+- printf ("option a\n");
+- break;
+-
+- case 'b':
+- printf ("option b\n");
+- break;
+-
+- case 'c':
+- printf ("option c with value `%s'\n", optarg);
+- break;
+-
+- case '?':
+- break;
+-
+- default:
+- printf ("?? getopt returned character code 0%o ??\n", c);
+- }
+- }
+-
+- if (optind < argc)
+- {
+- printf ("non-option ARGV-elements: ");
+- while (optind < argc)
+- printf ("%s ", argv[optind++]);
+- printf ("\n");
+- }
+-
+- exit (0);
+-}
+-
+-#endif /* TEST */
+--- ./src/getopt.h (Revision 1006)
++++ ./src/getopt.h (Revision 1007)
+@@ -1,133 +0,0 @@
+-/* Declarations for getopt.
+- Copyright (C) 1989,90,91,92,93,94,96,97 Free Software Foundation, Inc.
+-
+- This file is part of the GNU C Library. Its master source is NOT part of
+- the C library, however. The master source lives in /gd/gnu/lib.
+-
+- The GNU C Library is free software; you can redistribute it and/or
+- modify it under the terms of the GNU Library General Public License as
+- published by the Free Software Foundation; either version 2 of the
+- License, or (at your option) any later version.
+-
+- The GNU C Library is distributed in the hope that it will be useful,
+- but WITHOUT ANY WARRANTY; without even the implied warranty of
+- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+- Library General Public License for more details.
+-
+- You should have received a copy of the GNU Library General Public
+- License along with the GNU C Library; see the file COPYING.LIB. If not,
+- write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+- Boston, MA 02111-1307, USA. */
+-
+-#ifndef _GETOPT_H
+-#define _GETOPT_H 1
+-
+-#ifdef __cplusplus
+-extern "C" {
+-#endif
+-
+-/* For communication from `getopt' to the caller.
+- When `getopt' finds an option that takes an argument,
+- the argument value is returned here.
+- Also, when `ordering' is RETURN_IN_ORDER,
+- each non-option ARGV-element is returned here. */
+-
+-extern char *optarg;
+-
+-/* Index in ARGV of the next element to be scanned.
+- This is used for communication to and from the caller
+- and for communication between successive calls to `getopt'.
+-
+- On entry to `getopt', zero means this is the first call; initialize.
+-
+- When `getopt' returns -1, this is the index of the first of the
+- non-option elements that the caller should itself scan.
+-
+- Otherwise, `optind' communicates from one call to the next
+- how much of ARGV has been scanned so far. */
+-
+-extern int optind;
+-
+-/* Callers store zero here to inhibit the error message `getopt' prints
+- for unrecognized options. */
+-
+-extern int opterr;
+-
+-/* Set to an option character which was unrecognized. */
+-
+-extern int optopt;
+-
+-/* Describe the long-named options requested by the application.
+- The LONG_OPTIONS argument to getopt_long or getopt_long_only is a vector
+- of `struct option' terminated by an element containing a name which is
+- zero.
+-
+- The field `has_arg' is:
+- no_argument (or 0) if the option does not take an argument,
+- required_argument (or 1) if the option requires an argument,
+- optional_argument (or 2) if the option takes an optional argument.
+-
+- If the field `flag' is not NULL, it points to a variable that is set
+- to the value given in the field `val' when the option is found, but
+- left unchanged if the option is not found.
+-
+- To have a long-named option do something other than set an `int' to
+- a compiled-in constant, such as set a value from `optarg', set the
+- option's `flag' field to zero and its `val' field to a nonzero
+- value (the equivalent single-letter option character, if there is
+- one). For long options that have a zero `flag' field, `getopt'
+- returns the contents of the `val' field. */
+-
+-struct option
+-{
+-#if defined (__STDC__) && __STDC__
+- const char *name;
+-#else
+- char *name;
+-#endif
+- /* has_arg can't be an enum because some compilers complain about
+- type mismatches in all the code that assumes it is an int. */
+- int has_arg;
+- int *flag;
+- int val;
+-};
+-
+-/* Names for the values of the `has_arg' field of `struct option'. */
+-
+-#define no_argument 0
+-#define required_argument 1
+-#define optional_argument 2
+-
+-#if defined (__STDC__) && __STDC__
+-#ifdef __GNU_LIBRARY__
+-/* Many other libraries have conflicting prototypes for getopt, with
+- differences in the consts, in stdlib.h. To avoid compilation
+- errors, only prototype getopt for the GNU C library. */
+-extern int getopt (int argc, char *const *argv, const char *shortopts);
+-#else /* not __GNU_LIBRARY__ */
+-extern int getopt ();
+-#endif /* __GNU_LIBRARY__ */
+-extern int getopt_long (int argc, char *const *argv, const char *shortopts,
+- const struct option *longopts, int *longind);
+-extern int getopt_long_only (int argc, char *const *argv,
+- const char *shortopts,
+- const struct option *longopts, int *longind);
+-
+-/* Internal only. Users should not call this directly. */
+-extern int _getopt_internal (int argc, char *const *argv,
+- const char *shortopts,
+- const struct option *longopts, int *longind,
+- int long_only);
+-#else /* not __STDC__ */
+-extern int getopt ();
+-extern int getopt_long ();
+-extern int getopt_long_only ();
+-
+-extern int _getopt_internal ();
+-#endif /* __STDC__ */
+-
+-#ifdef __cplusplus
+-}
+-#endif
+-
+-#endif /* _GETOPT_H */
+--- ./src/rrd_getopt.c (Revision 0)
++++ ./src/rrd_getopt.c (Revision 1007)
+@@ -0,0 +1,1002 @@
++/* Getopt for GNU.
++ NOTE: getopt is now part of the C library, so if you don't know what
++ "Keep this file name-space clean" means, talk to roland@gnu.ai.mit.edu
++ before changing it!
++
++ Copyright (C) 1987, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97
++ Free Software Foundation, Inc.
++
++ This file is part of the GNU C Library. Its master source is NOT part of
++ the C library, however. The master source lives in /gd/gnu/lib.
++
++ The GNU C Library is free software; you can redistribute it and/or
++ modify it under the terms of the GNU Library General Public License as
++ published by the Free Software Foundation; either version 2 of the
++ License, or (at your option) any later version.
++
++ The GNU C Library is distributed in the hope that it will be useful,
++ but WITHOUT ANY WARRANTY; without even the implied warranty of
++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
++ Library General Public License for more details.
++
++ You should have received a copy of the GNU Library General Public
++ License along with the GNU C Library; see the file COPYING.LIB. If not,
++ write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
++ Boston, MA 02111-1307, USA. */
++
++/* This tells Alpha OSF/1 not to define a getopt prototype in .
++ Ditto for AIX 3.2 and . */
++#ifndef _NO_PROTO
++#define _NO_PROTO
++#endif
++
++#ifdef HAVE_CONFIG_H
++#include "../rrd_config.h"
++#endif
++
++#if !defined (__STDC__) || !__STDC__
++/* This is a separate conditional since some stdc systems
++ reject `defined (const)'. */
++#ifndef const
++#define const
++#endif
++#endif
++
++#include
++
++/* Comment out all this code if we are using the GNU C Library, and are not
++ actually compiling the library itself. This code is part of the GNU C
++ Library, but also included in many other GNU distributions. Compiling
++ and linking in this code is a waste when using the GNU C library
++ (especially if it is a shared library). Rather than having every GNU
++ program understand `configure --with-gnu-libc' and omit the object files,
++ it is simpler to just do this in the source for each such file. */
++
++#define GETOPT_INTERFACE_VERSION 2
++#if !defined (_LIBC) && defined (__GLIBC__) && __GLIBC__ >= 2
++#include
++#if _GNU_GETOPT_INTERFACE_VERSION == GETOPT_INTERFACE_VERSION
++#define ELIDE_CODE
++#endif
++#endif
++
++#ifndef ELIDE_CODE
++
++
++/* This needs to come after some library #include
++ to get __GNU_LIBRARY__ defined. */
++#ifdef __GNU_LIBRARY__
++/* Don't include stdlib.h for non-GNU C libraries because some of them
++ contain conflicting prototypes for getopt. */
++#include
++#include
++#endif /* GNU C library. */
++
++#ifdef VMS
++#include
++#if HAVE_STRING_H - 0
++#include
++#endif
++#endif
++
++#if defined (_WIN32) && !defined (__CYGWIN32__)
++/* It's not Unix, really. See? Capital letters. */
++#include
++#define getpid() GetCurrentProcessId()
++#endif
++
++#ifndef _
++/* This is for other GNU distributions with internationalized messages.
++ When compiling libc, the _ macro is predefined. */
++#ifdef HAVE_LIBINTL_H
++# include
++# define _(msgid) gettext (msgid)
++#else
++# define _(msgid) (msgid)
++#endif
++#endif
++
++/* This version of `getopt' appears to the caller like standard Unix `getopt'
++ but it behaves differently for the user, since it allows the user
++ to intersperse the options with the other arguments.
++
++ As `getopt' works, it permutes the elements of ARGV so that,
++ when it is done, all the options precede everything else. Thus
++ all application programs are extended to handle flexible argument order.
++
++ Setting the environment variable POSIXLY_CORRECT disables permutation.
++ Then the behavior is completely standard.
++
++ GNU application programs can use a third alternative mode in which
++ they can distinguish the relative order of options and other arguments. */
++
++#include "rrd_getopt.h"
++
++/* For communication from `getopt' to the caller.
++ When `getopt' finds an option that takes an argument,
++ the argument value is returned here.
++ Also, when `ordering' is RETURN_IN_ORDER,
++ each non-option ARGV-element is returned here. */
++
++char *optarg = NULL;
++
++/* Index in ARGV of the next element to be scanned.
++ This is used for communication to and from the caller
++ and for communication between successive calls to `getopt'.
++
++ On entry to `getopt', zero means this is the first call; initialize.
++
++ When `getopt' returns -1, this is the index of the first of the
++ non-option elements that the caller should itself scan.
++
++ Otherwise, `optind' communicates from one call to the next
++ how much of ARGV has been scanned so far. */
++
++/* 1003.2 says this must be 1 before any call. */
++int optind = 1;
++
++/* Formerly, initialization of getopt depended on optind==0, which
++ causes problems with re-calling getopt as programs generally don't
++ know that. */
++
++int __getopt_initialized = 0;
++
++/* The next char to be scanned in the option-element
++ in which the last option character we returned was found.
++ This allows us to pick up the scan where we left off.
++
++ If this is zero, or a null string, it means resume the scan
++ by advancing to the next ARGV-element. */
++
++static char *nextchar;
++
++/* Callers store zero here to inhibit the error message
++ for unrecognized options. */
++
++int opterr = 1;
++
++/* Set to an option character which was unrecognized.
++ This must be initialized on some systems to avoid linking in the
++ system's own getopt implementation. */
++
++int optopt = '?';
++
++/* Describe how to deal with options that follow non-option ARGV-elements.
++
++ If the caller did not specify anything,
++ the default is REQUIRE_ORDER if the environment variable
++ POSIXLY_CORRECT is defined, PERMUTE otherwise.
++
++ REQUIRE_ORDER means don't recognize them as options;
++ stop option processing when the first non-option is seen.
++ This is what Unix does.
++ This mode of operation is selected by either setting the environment
++ variable POSIXLY_CORRECT, or using `+' as the first character
++ of the list of option characters.
++
++ PERMUTE is the default. We permute the contents of ARGV as we scan,
++ so that eventually all the non-options are at the end. This allows options
++ to be given in any order, even with programs that were not written to
++ expect this.
++
++ RETURN_IN_ORDER is an option available to programs that were written
++ to expect options and other ARGV-elements in any order and that care about
++ the ordering of the two. We describe each non-option ARGV-element
++ as if it were the argument of an option with character code 1.
++ Using `-' as the first character of the list of option characters
++ selects this mode of operation.
++
++ The special argument `--' forces an end of option-scanning regardless
++ of the value of `ordering'. In the case of RETURN_IN_ORDER, only
++ `--' can cause `getopt' to return -1 with `optind' != ARGC. */
++
++static enum
++{
++ REQUIRE_ORDER, PERMUTE, RETURN_IN_ORDER
++} ordering;
++
++/* Value of POSIXLY_CORRECT environment variable. */
++static char *posixly_correct;
++
++/* we must include string as there are warnings without it ... */
++#include
++
++#ifdef __GNU_LIBRARY__
++/* We want to avoid inclusion of string.h with non-GNU libraries
++ because there are many ways it can cause trouble.
++ On some systems, it contains special magic macros that don't work
++ in GCC. */
++#define my_index strchr
++#else
++
++/* Avoid depending on library functions or files
++ whose names are inconsistent. */
++
++char *getenv ();
++
++static char *
++my_index (str, chr)
++ const char *str;
++ int chr;
++{
++ while (*str)
++ {
++ if (*str == chr)
++ return (char *) str;
++ str++;
++ }
++ return 0;
++}
++
++/* If using GCC, we can safely declare strlen this way.
++ If not using GCC, it is ok not to declare it. */
++#ifdef __GNUC__
++/* Note that Motorola Delta 68k R3V7 comes with GCC but not stddef.h.
++ That was relevant to code that was here before. */
++#if !defined (__STDC__) || !__STDC__
++/* gcc with -traditional declares the built-in strlen to return int,
++ and has done so at least since version 2.4.5. -- rms. */
++extern int strlen (const char *);
++#endif /* not __STDC__ */
++#endif /* __GNUC__ */
++
++#endif /* not __GNU_LIBRARY__ */
++
++/* Handle permutation of arguments. */
++
++/* Describe the part of ARGV that contains non-options that have
++ been skipped. `first_nonopt' is the index in ARGV of the first of them;
++ `last_nonopt' is the index after the last of them. */
++
++static int first_nonopt;
++static int last_nonopt;
++
++#ifdef _LIBC
++/* Bash 2.0 gives us an environment variable containing flags
++ indicating ARGV elements that should not be considered arguments. */
++
++static const char *nonoption_flags;
++static int nonoption_flags_len;
++
++static int original_argc;
++static char *const *original_argv;
++
++/* Make sure the environment variable bash 2.0 puts in the environment
++ is valid for the getopt call we must make sure that the ARGV passed
++ to getopt is that one passed to the process. */
++static void store_args (int argc, char *const *argv) __attribute__ ((unused));
++static void
++store_args (int argc, char *const *argv)
++{
++ /* XXX This is no good solution. We should rather copy the args so
++ that we can compare them later. But we must not use malloc(3). */
++ original_argc = argc;
++ original_argv = argv;
++}
++text_set_element (__libc_subinit, store_args);
++#endif
++
++/* Exchange two adjacent subsequences of ARGV.
++ One subsequence is elements [first_nonopt,last_nonopt)
++ which contains all the non-options that have been skipped so far.
++ The other is elements [last_nonopt,optind), which contains all
++ the options processed since those non-options were skipped.
++
++ `first_nonopt' and `last_nonopt' are relocated so that they describe
++ the new indices of the non-options in ARGV after they are moved. */
++
++#if defined (__STDC__) && __STDC__
++static void exchange (char **);
++#endif
++
++static void
++exchange (argv)
++ char **argv;
++{
++ int bottom = first_nonopt;
++ int middle = last_nonopt;
++ int top = optind;
++ char *tem;
++
++ /* Exchange the shorter segment with the far end of the longer segment.
++ That puts the shorter segment into the right place.
++ It leaves the longer segment in the right place overall,
++ but it consists of two parts that need to be swapped next. */
++
++ while (top > middle && middle > bottom)
++ {
++ if (top - middle > middle - bottom)
++ {
++ /* Bottom segment is the short one. */
++ int len = middle - bottom;
++ register int i;
++
++ /* Swap it with the top part of the top segment. */
++ for (i = 0; i < len; i++)
++ {
++ tem = argv[bottom + i];
++ argv[bottom + i] = argv[top - (middle - bottom) + i];
++ argv[top - (middle - bottom) + i] = tem;
++ }
++ /* Exclude the moved bottom segment from further swapping. */
++ top -= len;
++ }
++ else
++ {
++ /* Top segment is the short one. */
++ int len = top - middle;
++ register int i;
++
++ /* Swap it with the bottom part of the bottom segment. */
++ for (i = 0; i < len; i++)
++ {
++ tem = argv[bottom + i];
++ argv[bottom + i] = argv[middle + i];
++ argv[middle + i] = tem;
++ }
++ /* Exclude the moved top segment from further swapping. */
++ bottom += len;
++ }
++ }
++
++ /* Update records for the slots the non-options now occupy. */
++
++ first_nonopt += (optind - last_nonopt);
++ last_nonopt = optind;
++}
++
++/* Initialize the internal data when the first call is made. */
++
++#if defined (__STDC__) && __STDC__
++static const char *_getopt_initialize (int, char *const *, const char *);
++#endif
++static const char *
++_getopt_initialize (argc, argv, optstring)
++ int argc;
++ char *const *argv;
++ const char *optstring;
++{
++ /* Start processing options with ARGV-element 1 (since ARGV-element 0
++ is the program name); the sequence of previously skipped
++ non-option ARGV-elements is empty. */
++
++ first_nonopt = last_nonopt = optind = 1;
++
++ nextchar = NULL;
++
++ posixly_correct = getenv ("POSIXLY_CORRECT");
++
++ /* Determine how to handle the ordering of options and nonoptions. */
++
++ if (optstring[0] == '-')
++ {
++ ordering = RETURN_IN_ORDER;
++ ++optstring;
++ }
++ else if (optstring[0] == '+')
++ {
++ ordering = REQUIRE_ORDER;
++ ++optstring;
++ }
++ else if (posixly_correct != NULL)
++ ordering = REQUIRE_ORDER;
++ else
++ ordering = PERMUTE;
++
++#ifdef _LIBC
++ if (posixly_correct == NULL
++ && argc == original_argc && argv == original_argv)
++ {
++ /* Bash 2.0 puts a special variable in the environment for each
++ command it runs, specifying which ARGV elements are the results of
++ file name wildcard expansion and therefore should not be
++ considered as options. */
++ char var[100];
++ sprintf (var, "_%d_GNU_nonoption_argv_flags_", getpid ());
++ nonoption_flags = getenv (var);
++ if (nonoption_flags == NULL)
++ nonoption_flags_len = 0;
++ else
++ nonoption_flags_len = strlen (nonoption_flags);
++ }
++ else
++ nonoption_flags_len = 0;
++#endif
++
++ return optstring;
++}
++
++/* Scan elements of ARGV (whose length is ARGC) for option characters
++ given in OPTSTRING.
++
++ If an element of ARGV starts with '-', and is not exactly "-" or "--",
++ then it is an option element. The characters of this element
++ (aside from the initial '-') are option characters. If `getopt'
++ is called repeatedly, it returns successively each of the option characters
++ from each of the option elements.
++
++ If `getopt' finds another option character, it returns that character,
++ updating `optind' and `nextchar' so that the next call to `getopt' can
++ resume the scan with the following option character or ARGV-element.
++
++ If there are no more option characters, `getopt' returns -1.
++ Then `optind' is the index in ARGV of the first ARGV-element
++ that is not an option. (The ARGV-elements have been permuted
++ so that those that are not options now come last.)
++
++ OPTSTRING is a string containing the legitimate option characters.
++ If an option character is seen that is not listed in OPTSTRING,
++ return '?' after printing an error message. If you set `opterr' to
++ zero, the error message is suppressed but we still return '?'.
++
++ If a char in OPTSTRING is followed by a colon, that means it wants an arg,
++ so the following text in the same ARGV-element, or the text of the following
++ ARGV-element, is returned in `optarg'. Two colons mean an option that
++ wants an optional arg; if there is text in the current ARGV-element,
++ it is returned in `optarg', otherwise `optarg' is set to zero.
++
++ If OPTSTRING starts with `-' or `+', it requests different methods of
++ handling the non-option ARGV-elements.
++ See the comments about RETURN_IN_ORDER and REQUIRE_ORDER, above.
++
++ Long-named options begin with `--' instead of `-'.
++ Their names may be abbreviated as long as the abbreviation is unique
++ or is an exact match for some defined option. If they have an
++ argument, it follows the option name in the same ARGV-element, separated
++ from the option name by a `=', or else the in next ARGV-element.
++ When `getopt' finds a long-named option, it returns 0 if that option's
++ `flag' field is nonzero, the value of the option's `val' field
++ if the `flag' field is zero.
++
++ The elements of ARGV aren't really const, because we permute them.
++ But we pretend they're const in the prototype to be compatible
++ with other systems.
++
++ LONGOPTS is a vector of `struct option' terminated by an
++ element containing a name which is zero.
++
++ LONGIND returns the index in LONGOPT of the long-named option found.
++ It is only valid when a long-named option has been found by the most
++ recent call.
++
++ If LONG_ONLY is nonzero, '-' as well as '--' can introduce
++ long-named options. */
++
++int
++_getopt_internal (argc, argv, optstring, longopts, longind, long_only)
++ int argc;
++ char *const *argv;
++ const char *optstring;
++ const struct option *longopts;
++ int *longind;
++ int long_only;
++{
++ optarg = NULL;
++
++ if (!__getopt_initialized || optind == 0)
++ {
++ optstring = _getopt_initialize (argc, argv, optstring);
++ optind = 1; /* Don't scan ARGV[0], the program name. */
++ __getopt_initialized = 1;
++ }
++
++ /* Test whether ARGV[optind] points to a non-option argument.
++ Either it does not have option syntax, or there is an environment flag
++ from the shell indicating it is not an option. The later information
++ is only used when the used in the GNU libc. */
++#ifdef _LIBC
++#define NONOPTION_P (argv[optind][0] != '-' || argv[optind][1] == '\0' \
++ || (optind < nonoption_flags_len \
++ && nonoption_flags[optind] == '1'))
++#else
++#define NONOPTION_P (argv[optind][0] != '-' || argv[optind][1] == '\0')
++#endif
++
++ if (nextchar == NULL || *nextchar == '\0')
++ {
++ /* Advance to the next ARGV-element. */
++
++ /* Give FIRST_NONOPT & LAST_NONOPT rational values if OPTIND has been
++ moved back by the user (who may also have changed the arguments). */
++ if (last_nonopt > optind)
++ last_nonopt = optind;
++ if (first_nonopt > optind)
++ first_nonopt = optind;
++
++ if (ordering == PERMUTE)
++ {
++ /* If we have just processed some options following some non-options,
++ exchange them so that the options come first. */
++
++ if (first_nonopt != last_nonopt && last_nonopt != optind)
++ exchange ((char **) argv);
++ else if (last_nonopt != optind)
++ first_nonopt = optind;
++
++ /* Skip any additional non-options
++ and extend the range of non-options previously skipped. */
++
++ while (optind < argc && NONOPTION_P)
++ optind++;
++ last_nonopt = optind;
++ }
++
++ /* The special ARGV-element `--' means premature end of options.
++ Skip it like a null option,
++ then exchange with previous non-options as if it were an option,
++ then skip everything else like a non-option. */
++
++ if (optind != argc && !strcmp (argv[optind], "--"))
++ {
++ optind++;
++
++ if (first_nonopt != last_nonopt && last_nonopt != optind)
++ exchange ((char **) argv);
++ else if (first_nonopt == last_nonopt)
++ first_nonopt = optind;
++ last_nonopt = argc;
++
++ optind = argc;
++ }
++
++ /* If we have done all the ARGV-elements, stop the scan
++ and back over any non-options that we skipped and permuted. */
++
++ if (optind == argc)
++ {
++ /* Set the next-arg-index to point at the non-options
++ that we previously skipped, so the caller will digest them. */
++ if (first_nonopt != last_nonopt)
++ optind = first_nonopt;
++ return -1;
++ }
++
++ /* If we have come to a non-option and did not permute it,
++ either stop the scan or describe it to the caller and pass it by. */
++
++ if (NONOPTION_P)
++ {
++ if (ordering == REQUIRE_ORDER)
++ return -1;
++ optarg = argv[optind++];
++ return 1;
++ }
++
++ /* We have found another option-ARGV-element.
++ Skip the initial punctuation. */
++
++ nextchar = (argv[optind] + 1
++ + (longopts != NULL && argv[optind][1] == '-'));
++ }
++
++ /* Decode the current option-ARGV-element. */
++
++ /* Check whether the ARGV-element is a long option.
++
++ If long_only and the ARGV-element has the form "-f", where f is
++ a valid short option, don't consider it an abbreviated form of
++ a long option that starts with f. Otherwise there would be no
++ way to give the -f short option.
++
++ On the other hand, if there's a long option "fubar" and
++ the ARGV-element is "-fu", do consider that an abbreviation of
++ the long option, just like "--fu", and not "-f" with arg "u".
++
++ This distinction seems to be the most useful approach. */
++
++ if (longopts != NULL
++ && (argv[optind][1] == '-'
++ || (long_only && (argv[optind][2] || !my_index (optstring, argv[optind][1])))))
++ {
++ char *nameend;
++ const struct option *p;
++ const struct option *pfound = NULL;
++ int exact = 0;
++ int ambig = 0;
++ int indfound = -1;
++ int option_index;
++
++ for (nameend = nextchar; *nameend && *nameend != '='; nameend++)
++ /* Do nothing. */ ;
++
++ /* Test all long options for either exact match
++ or abbreviated matches. */
++ for (p = longopts, option_index = 0; p->name; p++, option_index++)
++ if (!strncmp (p->name, nextchar, nameend - nextchar))
++ {
++ if ((unsigned int) (nameend - nextchar)
++ == (unsigned int) strlen (p->name))
++ {
++ /* Exact match found. */
++ pfound = p;
++ indfound = option_index;
++ exact = 1;
++ break;
++ }
++ else if (pfound == NULL)
++ {
++ /* First nonexact match found. */
++ pfound = p;
++ indfound = option_index;
++ }
++ else
++ /* Second or later nonexact match found. */
++ ambig = 1;
++ }
++
++ if (ambig && !exact)
++ {
++ if (opterr)
++ fprintf (stderr, _("%s: option `%s' is ambiguous\n"),
++ argv[0], argv[optind]);
++ nextchar += strlen (nextchar);
++ optind++;
++ optopt = 0;
++ return '?';
++ }
++
++ if (pfound != NULL)
++ {
++ option_index = indfound;
++ optind++;
++ if (*nameend)
++ {
++ /* Don't test has_arg with >, because some C compilers don't
++ allow it to be used on enums. */
++ if (pfound->has_arg)
++ optarg = nameend + 1;
++ else
++ {
++ if (opterr) {
++ if (argv[optind - 1][1] == '-')
++ /* --option */
++ fprintf (stderr,
++ _("%s: option `--%s' doesn't allow an argument\n"),
++ argv[0], pfound->name);
++ else
++ /* +option or -option */
++ fprintf (stderr,
++ _("%s: option `%c%s' doesn't allow an argument\n"),
++ argv[0], argv[optind - 1][0], pfound->name);
++ }
++ nextchar += strlen (nextchar);
++
++ optopt = pfound->val;
++ return '?';
++ }
++ }
++ else if (pfound->has_arg == 1)
++ {
++ if (optind < argc)
++ optarg = argv[optind++];
++ else
++ {
++ if (opterr)
++ fprintf (stderr,
++ _("%s: option `%s' requires an argument\n"),
++ argv[0], argv[optind - 1]);
++ nextchar += strlen (nextchar);
++ optopt = pfound->val;
++ return optstring[0] == ':' ? ':' : '?';
++ }
++ }
++ nextchar += strlen (nextchar);
++ if (longind != NULL)
++ *longind = option_index;
++ if (pfound->flag)
++ {
++ *(pfound->flag) = pfound->val;
++ return 0;
++ }
++ return pfound->val;
++ }
++
++ /* Can't find it as a long option. If this is not getopt_long_only,
++ or the option starts with '--' or is not a valid short
++ option, then it's an error.
++ Otherwise interpret it as a short option. */
++ if (!long_only || argv[optind][1] == '-'
++ || my_index (optstring, *nextchar) == NULL)
++ {
++ if (opterr)
++ {
++ if (argv[optind][1] == '-')
++ /* --option */
++ fprintf (stderr, _("%s: unrecognized option `--%s'\n"),
++ argv[0], nextchar);
++ else
++ /* +option or -option */
++ fprintf (stderr, _("%s: unrecognized option `%c%s'\n"),
++ argv[0], argv[optind][0], nextchar);
++ }
++ nextchar = (char *) "";
++ optind++;
++ optopt = 0;
++ return '?';
++ }
++ }
++
++ /* Look at and handle the next short option-character. */
++
++ {
++ char c = *nextchar++;
++ char *temp = my_index (optstring, c);
++
++ /* Increment `optind' when we start to process its last character. */
++ if (*nextchar == '\0')
++ ++optind;
++
++ if (temp == NULL || c == ':')
++ {
++ if (opterr)
++ {
++ if (posixly_correct)
++ /* 1003.2 specifies the format of this message. */
++ fprintf (stderr, _("%s: illegal option -- %c\n"),
++ argv[0], c);
++ else
++ fprintf (stderr, _("%s: invalid option -- %c\n"),
++ argv[0], c);
++ }
++ optopt = c;
++ return '?';
++ }
++ /* Convenience. Treat POSIX -W foo same as long option --foo */
++ if (temp[0] == 'W' && temp[1] == ';')
++ {
++ char *nameend;
++ const struct option *p;
++ const struct option *pfound = NULL;
++ int exact = 0;
++ int ambig = 0;
++ int indfound = 0;
++ int option_index;
++
++ /* This is an option that requires an argument. */
++ if (*nextchar != '\0')
++ {
++ optarg = nextchar;
++ /* If we end this ARGV-element by taking the rest as an arg,
++ we must advance to the next element now. */
++ optind++;
++ }
++ else if (optind == argc)
++ {
++ if (opterr)
++ {
++ /* 1003.2 specifies the format of this message. */
++ fprintf (stderr, _("%s: option requires an argument -- %c\n"),
++ argv[0], c);
++ }
++ optopt = c;
++ if (optstring[0] == ':')
++ c = ':';
++ else
++ c = '?';
++ return c;
++ }
++ else
++ /* We already incremented `optind' once;
++ increment it again when taking next ARGV-elt as argument. */
++ optarg = argv[optind++];
++
++ /* optarg is now the argument, see if it's in the
++ table of longopts. */
++
++ for (nextchar = nameend = optarg; *nameend && *nameend != '='; nameend++)
++ /* Do nothing. */ ;
++
++ /* Test all long options for either exact match
++ or abbreviated matches. */
++ for (p = longopts, option_index = 0; p->name; p++, option_index++)
++ if (!strncmp (p->name, nextchar, nameend - nextchar))
++ {
++ if ((unsigned int) (nameend - nextchar) == strlen (p->name))
++ {
++ /* Exact match found. */
++ pfound = p;
++ indfound = option_index;
++ exact = 1;
++ break;
++ }
++ else if (pfound == NULL)
++ {
++ /* First nonexact match found. */
++ pfound = p;
++ indfound = option_index;
++ }
++ else
++ /* Second or later nonexact match found. */
++ ambig = 1;
++ }
++ if (ambig && !exact)
++ {
++ if (opterr)
++ fprintf (stderr, _("%s: option `-W %s' is ambiguous\n"),
++ argv[0], argv[optind]);
++ nextchar += strlen (nextchar);
++ optind++;
++ return '?';
++ }
++ if (pfound != NULL)
++ {
++ option_index = indfound;
++ if (*nameend)
++ {
++ /* Don't test has_arg with >, because some C compilers don't
++ allow it to be used on enums. */
++ if (pfound->has_arg)
++ optarg = nameend + 1;
++ else
++ {
++ if (opterr)
++ fprintf (stderr, _("\
++%s: option `-W %s' doesn't allow an argument\n"),
++ argv[0], pfound->name);
++
++ nextchar += strlen (nextchar);
++ return '?';
++ }
++ }
++ else if (pfound->has_arg == 1)
++ {
++ if (optind < argc)
++ optarg = argv[optind++];
++ else
++ {
++ if (opterr)
++ fprintf (stderr,
++ _("%s: option `%s' requires an argument\n"),
++ argv[0], argv[optind - 1]);
++ nextchar += strlen (nextchar);
++ return optstring[0] == ':' ? ':' : '?';
++ }
++ }
++ nextchar += strlen (nextchar);
++ if (longind != NULL)
++ *longind = option_index;
++ if (pfound->flag)
++ {
++ *(pfound->flag) = pfound->val;
++ return 0;
++ }
++ return pfound->val;
++ }
++ nextchar = NULL;
++ return 'W'; /* Let the application handle it. */
++ }
++ if (temp[1] == ':')
++ {
++ if (temp[2] == ':')
++ {
++ /* This is an option that accepts an argument optionally. */
++ if (*nextchar != '\0')
++ {
++ optarg = nextchar;
++ optind++;
++ }
++ else
++ optarg = NULL;
++ nextchar = NULL;
++ }
++ else
++ {
++ /* This is an option that requires an argument. */
++ if (*nextchar != '\0')
++ {
++ optarg = nextchar;
++ /* If we end this ARGV-element by taking the rest as an arg,
++ we must advance to the next element now. */
++ optind++;
++ }
++ else if (optind == argc)
++ {
++ if (opterr)
++ {
++ /* 1003.2 specifies the format of this message. */
++ fprintf (stderr,
++ _("%s: option requires an argument -- %c\n"),
++ argv[0], c);
++ }
++ optopt = c;
++ if (optstring[0] == ':')
++ c = ':';
++ else
++ c = '?';
++ }
++ else
++ /* We already incremented `optind' once;
++ increment it again when taking next ARGV-elt as argument. */
++ optarg = argv[optind++];
++ nextchar = NULL;
++ }
++ }
++ return c;
++ }
++}
++
++int
++getopt (argc, argv, optstring)
++ int argc;
++ char *const *argv;
++ const char *optstring;
++{
++ return _getopt_internal (argc, argv, optstring,
++ (const struct option *) 0,
++ (int *) 0,
++ 0);
++}
++
++#endif /* Not ELIDE_CODE. */
++
++#ifdef TEST
++
++/* Compile with -DTEST to make an executable for use in testing
++ the above definition of `getopt'. */
++
++int
++main (argc, argv)
++ int argc;
++ char **argv;
++{
++ int c;
++ int digit_optind = 0;
++
++ while (1)
++ {
++ int this_option_optind = optind ? optind : 1;
++
++ c = getopt (argc, argv, "abc:d:0123456789");
++ if (c == -1)
++ break;
++
++ switch (c)
++ {
++ case '0':
++ case '1':
++ case '2':
++ case '3':
++ case '4':
++ case '5':
++ case '6':
++ case '7':
++ case '8':
++ case '9':
++ if (digit_optind != 0 && digit_optind != this_option_optind)
++ printf ("digits occur in two different argv-elements.\n");
++ digit_optind = this_option_optind;
++ printf ("option %c\n", c);
++ break;
++
++ case 'a':
++ printf ("option a\n");
++ break;
++
++ case 'b':
++ printf ("option b\n");
++ break;
++
++ case 'c':
++ printf ("option c with value `%s'\n", optarg);
++ break;
++
++ case '?':
++ break;
++
++ default:
++ printf ("?? getopt returned character code 0%o ??\n", c);
++ }
++ }
++
++ if (optind < argc)
++ {
++ printf ("non-option ARGV-elements: ");
++ while (optind < argc)
++ printf ("%s ", argv[optind++]);
++ printf ("\n");
++ }
++
++ exit (0);
++}
++
++#endif /* TEST */
+
+Eigenschaftsänderungen: src/rrd_getopt.c
+___________________________________________________________________
+Name: svn:keywords
+ + Author Date Id Revision
+Name: svn:eol-style
+ + native
+
+--- ./src/rrd_getopt.h (Revision 0)
++++ ./src/rrd_getopt.h (Revision 1007)
+@@ -0,0 +1,133 @@
++/* Declarations for getopt.
++ Copyright (C) 1989,90,91,92,93,94,96,97 Free Software Foundation, Inc.
++
++ This file is part of the GNU C Library. Its master source is NOT part of
++ the C library, however. The master source lives in /gd/gnu/lib.
++
++ The GNU C Library is free software; you can redistribute it and/or
++ modify it under the terms of the GNU Library General Public License as
++ published by the Free Software Foundation; either version 2 of the
++ License, or (at your option) any later version.
++
++ The GNU C Library is distributed in the hope that it will be useful,
++ but WITHOUT ANY WARRANTY; without even the implied warranty of
++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
++ Library General Public License for more details.
++
++ You should have received a copy of the GNU Library General Public
++ License along with the GNU C Library; see the file COPYING.LIB. If not,
++ write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
++ Boston, MA 02111-1307, USA. */
++
++#ifndef _GETOPT_H
++#define _GETOPT_H 1
++
++#ifdef __cplusplus
++extern "C" {
++#endif
++
++/* For communication from `getopt' to the caller.
++ When `getopt' finds an option that takes an argument,
++ the argument value is returned here.
++ Also, when `ordering' is RETURN_IN_ORDER,
++ each non-option ARGV-element is returned here. */
++
++extern char *optarg;
++
++/* Index in ARGV of the next element to be scanned.
++ This is used for communication to and from the caller
++ and for communication between successive calls to `getopt'.
++
++ On entry to `getopt', zero means this is the first call; initialize.
++
++ When `getopt' returns -1, this is the index of the first of the
++ non-option elements that the caller should itself scan.
++
++ Otherwise, `optind' communicates from one call to the next
++ how much of ARGV has been scanned so far. */
++
++extern int optind;
++
++/* Callers store zero here to inhibit the error message `getopt' prints
++ for unrecognized options. */
++
++extern int opterr;
++
++/* Set to an option character which was unrecognized. */
++
++extern int optopt;
++
++/* Describe the long-named options requested by the application.
++ The LONG_OPTIONS argument to getopt_long or getopt_long_only is a vector
++ of `struct option' terminated by an element containing a name which is
++ zero.
++
++ The field `has_arg' is:
++ no_argument (or 0) if the option does not take an argument,
++ required_argument (or 1) if the option requires an argument,
++ optional_argument (or 2) if the option takes an optional argument.
++
++ If the field `flag' is not NULL, it points to a variable that is set
++ to the value given in the field `val' when the option is found, but
++ left unchanged if the option is not found.
++
++ To have a long-named option do something other than set an `int' to
++ a compiled-in constant, such as set a value from `optarg', set the
++ option's `flag' field to zero and its `val' field to a nonzero
++ value (the equivalent single-letter option character, if there is
++ one). For long options that have a zero `flag' field, `getopt'
++ returns the contents of the `val' field. */
++
++struct option
++{
++#if defined (__STDC__) && __STDC__
++ const char *name;
++#else
++ char *name;
++#endif
++ /* has_arg can't be an enum because some compilers complain about
++ type mismatches in all the code that assumes it is an int. */
++ int has_arg;
++ int *flag;
++ int val;
++};
++
++/* Names for the values of the `has_arg' field of `struct option'. */
++
++#define no_argument 0
++#define required_argument 1
++#define optional_argument 2
++
++#if defined (__STDC__) && __STDC__
++#ifdef __GNU_LIBRARY__
++/* Many other libraries have conflicting prototypes for getopt, with
++ differences in the consts, in stdlib.h. To avoid compilation
++ errors, only prototype getopt for the GNU C library. */
++extern int getopt (int argc, char *const *argv, const char *shortopts);
++#else /* not __GNU_LIBRARY__ */
++extern int getopt ();
++#endif /* __GNU_LIBRARY__ */
++extern int getopt_long (int argc, char *const *argv, const char *shortopts,
++ const struct option *longopts, int *longind);
++extern int getopt_long_only (int argc, char *const *argv,
++ const char *shortopts,
++ const struct option *longopts, int *longind);
++
++/* Internal only. Users should not call this directly. */
++extern int _getopt_internal (int argc, char *const *argv,
++ const char *shortopts,
++ const struct option *longopts, int *longind,
++ int long_only);
++#else /* not __STDC__ */
++extern int getopt ();
++extern int getopt_long ();
++extern int getopt_long_only ();
++
++extern int _getopt_internal ();
++#endif /* __STDC__ */
++
++#ifdef __cplusplus
++}
++#endif
++
++#endif /* _GETOPT_H */
+
+Eigenschaftsänderungen: src/rrd_getopt.h
+___________________________________________________________________
+Name: svn:keywords
+ + Author Date Id Revision
+Name: svn:eol-style
+ + native
+
+--- ./src/rrd_tool.h (Revision 1006)
++++ ./src/rrd_tool.h (Revision 1007)
+@@ -115,7 +115,7 @@
+ #endif
+
+ /* local include files -- need to be after the system ones */
+-#include "getopt.h"
++#include "rrd_getopt.h"
+ #include "rrd_format.h"
+
+ #ifndef max
+--- ./src/rrd_getopt1.c (Revision 0)
++++ ./src/rrd_getopt1.c (Revision 1007)
+@@ -0,0 +1,189 @@
++/* getopt_long and getopt_long_only entry points for GNU getopt.
++ Copyright (C) 1987,88,89,90,91,92,93,94,96,97 Free Software Foundation, Inc.
++
++ This file is part of the GNU C Library. Its master source is NOT part of
++ the C library, however. The master source lives in /gd/gnu/lib.
++
++ The GNU C Library is free software; you can redistribute it and/or
++ modify it under the terms of the GNU Library General Public License as
++ published by the Free Software Foundation; either version 2 of the
++ License, or (at your option) any later version.
++
++ The GNU C Library is distributed in the hope that it will be useful,
++ but WITHOUT ANY WARRANTY; without even the implied warranty of
++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
++ Library General Public License for more details.
++
++ You should have received a copy of the GNU Library General Public
++ License along with the GNU C Library; see the file COPYING.LIB. If not,
++ write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
++ Boston, MA 02111-1307, USA. */
++
++#ifdef HAVE_CONFIG_H
++#include "../rrd_config.h"
++#endif
++
++#include "rrd_getopt.h"
++
++#if !defined (__STDC__) || !__STDC__
++/* This is a separate conditional since some stdc systems
++ reject `defined (const)'. */
++#ifndef const
++#define const
++#endif
++#endif
++
++#include
++
++/* Comment out all this code if we are using the GNU C Library, and are not
++ actually compiling the library itself. This code is part of the GNU C
++ Library, but also included in many other GNU distributions. Compiling
++ and linking in this code is a waste when using the GNU C library
++ (especially if it is a shared library). Rather than having every GNU
++ program understand `configure --with-gnu-libc' and omit the object files,
++ it is simpler to just do this in the source for each such file. */
++
++#define GETOPT_INTERFACE_VERSION 2
++#if !defined (_LIBC) && defined (__GLIBC__) && __GLIBC__ >= 2
++#include
++#if _GNU_GETOPT_INTERFACE_VERSION == GETOPT_INTERFACE_VERSION
++#define ELIDE_CODE
++#endif
++#endif
++
++#ifndef ELIDE_CODE
++
++
++/* This needs to come after some library #include
++ to get __GNU_LIBRARY__ defined. */
++#ifdef __GNU_LIBRARY__
++#include
++#endif
++
++#ifndef NULL
++#define NULL 0
++#endif
++
++int
++getopt_long (argc, argv, options, long_options, opt_index)
++ int argc;
++ char *const *argv;
++ const char *options;
++ const struct option *long_options;
++ int *opt_index;
++{
++ return _getopt_internal (argc, argv, options, long_options, opt_index, 0);
++}
++
++/* Like getopt_long, but '-' as well as '--' can indicate a long option.
++ If an option that starts with '-' (not '--') doesn't match a long option,
++ but does match a short option, it is parsed as a short option
++ instead. */
++
++int
++getopt_long_only (argc, argv, options, long_options, opt_index)
++ int argc;
++ char *const *argv;
++ const char *options;
++ const struct option *long_options;
++ int *opt_index;
++{
++ return _getopt_internal (argc, argv, options, long_options, opt_index, 1);
++}
++
++
++#endif /* Not ELIDE_CODE. */
++
++#ifdef TEST
++
++#include
++
++int
++main (argc, argv)
++ int argc;
++ char **argv;
++{
++ int c;
++ int digit_optind = 0;
++
++ while (1)
++ {
++ int this_option_optind = optind ? optind : 1;
++ int option_index = 0;
++ static struct option long_options[] =
++ {
++ {"add", 1, 0, 0},
++ {"append", 0, 0, 0},
++ {"delete", 1, 0, 0},
++ {"verbose", 0, 0, 0},
++ {"create", 0, 0, 0},
++ {"file", 1, 0, 0},
++ {0, 0, 0, 0}
++ };
++
++ c = getopt_long (argc, argv, "abc:d:0123456789",
++ long_options, &option_index);
++ if (c == -1)
++ break;
++
++ switch (c)
++ {
++ case 0:
++ printf ("option %s", long_options[option_index].name);
++ if (optarg)
++ printf (" with arg %s", optarg);
++ printf ("\n");
++ break;
++
++ case '0':
++ case '1':
++ case '2':
++ case '3':
++ case '4':
++ case '5':
++ case '6':
++ case '7':
++ case '8':
++ case '9':
++ if (digit_optind != 0 && digit_optind != this_option_optind)
++ printf ("digits occur in two different argv-elements.\n");
++ digit_optind = this_option_optind;
++ printf ("option %c\n", c);
++ break;
++
++ case 'a':
++ printf ("option a\n");
++ break;
++
++ case 'b':
++ printf ("option b\n");
++ break;
++
++ case 'c':
++ printf ("option c with value `%s'\n", optarg);
++ break;
++
++ case 'd':
++ printf ("option d with value `%s'\n", optarg);
++ break;
++
++ case '?':
++ break;
++
++ default:
++ printf ("?? getopt returned character code 0%o ??\n", c);
++ }
++ }
++
++ if (optind < argc)
++ {
++ printf ("non-option ARGV-elements: ");
++ while (optind < argc)
++ printf ("%s ", argv[optind++]);
++ printf ("\n");
++ }
++
++ exit (0);
++}
++
++#endif /* TEST */
+
+Eigenschaftsänderungen: src/rrd_getopt1.c
+___________________________________________________________________
+Name: svn:keywords
+ + Author Date Id Revision
+Name: svn:eol-style
+ + native
+
+--- ./src/Makefile.am (Revision 1006)
++++ ./src/Makefile.am (Revision 1007)
+@@ -13,8 +13,8 @@
+ AM_CPPFLAGS = -DRRD_DEFAULT_FONT=\"$(RRD_DEFAULT_FONT)\" -DNUMVERS=@NUMVERS@
+
+ UPD_C_FILES = \
+- getopt.c \
+- getopt1.c \
++ rrd_getopt.c \
++ rrd_getopt1.c \
+ parsetime.c \
+ rrd_hw.c \
+ rrd_diff.c \
+@@ -51,7 +51,7 @@
+ art_rgba_svp.h \
+ unused.h \
+ rrd_gfx.h \
+- getopt.h parsetime.h \
++ rrd_getopt.h parsetime.h \
+ rrd_format.h rrd_tool.h rrd_xport.h rrd.h rrd_hw.h rrd_rpncalc.h \
+ rrd_nan_inf.h fnv.h rrd_graph.h rrd_afm.h rrd_afm_data.h \
+ rrd_is_thread_safe.h
diff --git a/database/rrdtool/rrdtool-1.2.19-rrdcgi.patch b/database/rrdtool/rrdtool-1.2.19-rrdcgi.patch
new file mode 100644
index 000000000..69bb0d2c8
--- /dev/null
+++ b/database/rrdtool/rrdtool-1.2.19-rrdcgi.patch
@@ -0,0 +1,66 @@
+# --- SDE-COPYRIGHT-NOTE-BEGIN ---
+# This copyright note is auto-generated by ./scripts/Create-CopyPatch.
+#
+# Filename: package/.../rrdtool/rrdtool-1.2.19-rrdcgi.patch
+# Copyright (C) 2007 The OpenSDE Project
+#
+# More information can be found in the files COPYING and README.
+#
+# This patch file is dual-licensed. It is available under the license the
+# patched project is licensed under, as long as it is an OpenSource license
+# as defined at http://www.opensource.org/ (e.g. BSD, X11) or under the terms
+# of the GNU General Public License as published by the Free Software
+# Foundation; either version 2 of the License, or (at your option) any later
+# version.
+# --- SDE-COPYRIGHT-NOTE-END ---
+
+Printstrftime on rrd_cgi.c returns an illegal value.
+It causes segmentation fault error. (Tatsuki Makino tatsuki_makino hotmail.com)
+
+--- ./src/rrd_cgi.c (Revision 1000)
++++ ./src/rrd_cgi.c (Revision 1001)
+@@ -574,7 +574,7 @@
+ /* Make sure that we were given the right number of args */
+ if( argc != 4) {
+ rrd_set_error( "wrong number of args %d", argc);
+- return (char *) -1;
++ return stralloc("");
+ }
+
+ /* Init start and end time */
+@@ -584,14 +584,14 @@
+ /* Parse the start and end times we were given */
+ if( (parsetime_error = parsetime( args[1], &start_tv))) {
+ rrd_set_error( "start time: %s", parsetime_error);
+- return (char *) -1;
++ return stralloc("");
+ }
+ if( (parsetime_error = parsetime( args[2], &end_tv))) {
+ rrd_set_error( "end time: %s", parsetime_error);
+- return (char *) -1;
++ return stralloc("");
+ }
+ if( proc_start_end( &start_tv, &end_tv, &start_tmp, &end_tmp) == -1) {
+- return (char *) -1;
++ return stralloc("");
+ }
+
+ /* Do we do the start or end */
+@@ -603,7 +603,7 @@
+ }
+ else {
+ rrd_set_error( "start/end not found in '%s'", args[0]);
+- return (char *) -1;
++ return stralloc("");
+ }
+
+ /* now format it */
+@@ -612,7 +612,7 @@
+ }
+ else {
+ rrd_set_error( "strftime failed");
+- return (char *) -1;
++ return stralloc("");
+ }
+ }
+
diff --git a/database/rrdtool/rrdtool-1.2.19-setuppy.patch b/database/rrdtool/rrdtool-1.2.19-setuppy.patch
new file mode 100644
index 000000000..da7c3dc07
--- /dev/null
+++ b/database/rrdtool/rrdtool-1.2.19-setuppy.patch
@@ -0,0 +1,193 @@
+# --- SDE-COPYRIGHT-NOTE-BEGIN ---
+# This copyright note is auto-generated by ./scripts/Create-CopyPatch.
+#
+# Filename: package/.../rrdtool/rrdtool-1.2.19-setuppy.patch
+# Copyright (C) 2007 The OpenSDE Project
+#
+# More information can be found in the files COPYING and README.
+#
+# This patch file is dual-licensed. It is available under the license the
+# patched project is licensed under, as long as it is an OpenSource license
+# as defined at http://www.opensource.org/ (e.g. BSD, X11) or under the terms
+# of the GNU General Public License as published by the Free Software
+# Foundation; either version 2 of the License, or (at your option) any later
+# version.
+# --- SDE-COPYRIGHT-NOTE-END ---
+
+use setup.py for python install and build work instad of trying todo
+it on our own
+
+--- /dev/null 2007-03-06 16:53:58.620152249 +0200
++++ ./bindings/python/setup.py 2007-03-08 14:42:01.000000000 +0200
+@@ -0,0 +1,56 @@
++#! /usr/bin/env python
++#
++# setup.py
++#
++# py-rrdtool distutil setup
++#
++# Author : Hye-Shik Chang
++# Date : $Date: 2003/02/14 02:38:16 $
++# Created : 24 May 2002
++#
++# $Revision: 1.7 $
++#
++# ==========================================================================
++# This file is part of py-rrdtool.
++#
++# py-rrdtool is free software; you can redistribute it and/or modify
++# it under the terms of the GNU Lesser General Public License as published
++# by the Free Software Foundation; either version 2 of the License, or
++# (at your option) any later version.
++#
++# py-rrdtool is distributed in the hope that it will be useful,
++# but WITHOUT ANY WARRANTY; without even the implied warranty of
++# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++# GNU Lesser General Public License for more details.
++#
++# You should have received a copy of the GNU Lesser General Public License
++# along with Foobar; if not, write to the Free Software
++# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
++#
++
++from distutils.core import setup, Extension
++import sys, os
++
++RRDBASE = os.environ.get('LOCALBASE', '../../src')
++library_dir = os.environ.get('LIBDIR', os.path.join(RRDBASE, 'lib'))
++include_dir = os.environ.get('INCDIR', RRDBASE)
++
++setup(name = "py-rrdtool",
++ version = "0.2.1",
++ description = "Python Interface to RRDTool",
++ author = "Hye-Shik Chang",
++ author_email = "perky@fallin.lv",
++ license = "LGPL",
++ url = "http://oss.oetiker.ch/rrdtool",
++ #packages = ['rrdtool'],
++ ext_modules = [
++ Extension(
++ "rrdtoolmodule",
++ ["rrdtoolmodule.c"],
++ libraries=['rrd'],
++ runtime_library_dirs=[library_dir],
++ library_dirs=[library_dir],
++ include_dirs=[include_dir],
++ )
++ ]
++)
+--- ./bindings/python/Makefile.am (Revision 990)
++++ ./bindings/python/Makefile.am (Revision 993)
+@@ -1,12 +0,0 @@
+-AM_CPPFLAGS = @CFLAGS@ -I$(top_srcdir)/src @PYTHON_INCLUDES@
+-
+-pyexec_PROGRAMS = rrdtoolmodule.so
+-
+-rrdtoolmodule_so_LDADD = $(top_builddir)/src/librrd.la
+-rrdtoolmodule_so_SOURCES = rrdtoolmodule.c
+-
+-noinst_HEADERS = rrd_extra.h
+-
+-clean-local:
+- rm -rf build
+-
+--- ./bindings/Makefile.am (Revision 990)
++++ ./bindings/Makefile.am (Revision 993)
+@@ -1,3 +1,5 @@
++.PHONY: python ruby
++
+ if BUILD_TCL
+ SUB_tcl = tcl
+ endif
+@@ -2,16 +4,13 @@
+
+-if BUILD_PYTHON
+-SUB_python = python
+-endif
++SUBDIRS = $(SUB_tcl)
+
+-SUBDIRS = $(SUB_tcl) $(SUB_python)
+-
+ # 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 \
+- perl-shared/ntmake.pl perl-shared/MANIFEST perl-shared/README perl-shared/Makefile.PL perl-shared/RRDs.pm perl-shared/RRDs.xs perl-shared/t/base.t \
+- ruby/CHANGES ruby/README ruby/extconf.rb ruby/main.c ruby/test.rb
++ perl-shared/ntmake.pl perl-shared/MANIFEST perl-shared/README perl-shared/Makefile.PL perl-shared/RRDs.pm perl-shared/RRDs.xs perl-shared/t/base.t \
++ ruby/CHANGES ruby/README ruby/extconf.rb ruby/main.c ruby/test.rb \
++ python/ACKNOWLEDGEMENT python/AUTHORS python/COPYING python/README python/rrd_extra.h python/rrdtoolmodule.c python/setup.py
+
+
+ # add the following to the all target
+-all-local: @COMP_PERL@ @COMP_RUBY@
++all-local: @COMP_PERL@ @COMP_RUBY@ @COMP_PYTHON@
+
+@@ -21,11 +20,16 @@
+ test -f perl-piped/Makefile && cd perl-piped && $(MAKE) install || true
+ test -f perl-shared/Makefile && cd perl-shared && $(MAKE) install || true
+ test -f ruby/Makefile && cd ruby && $(MAKE) EPREFIX=$(exec_prefix) $(RUBY_MAKE_OPTIONS) install || true
++ test -d python/build && cd python && rm -rf build && env LIBDIR=$(libdir) $(PYTHON) setup.py install --prefix=$(prefix) --exec-prefix=$(exec_prefix) || true
+
+ # rules for buildung the ruby module
+ ruby:
+ cd ruby && $(RUBY) extconf.rb && $(MAKE) EPREFIX=$(exec_prefix) $(RUBY_MAKE_OPTIONS)
+
++# rules for buildung the pyton module
++python:
++ cd python && env LIBDIR=../../src/.libs $(PYTHON) setup.py build
++
+ # rules for building the perl module
+ perl_piped: perl-piped/Makefile
+ cd perl-piped && $(MAKE)
+@@ -46,5 +50,5 @@
+ test -f perl-shared/Makefile && cd perl-shared && $(MAKE) clean || true
+ test -f perl-shared/Makefile && rm -f perl-shared/Makefile || true
+ test -f ruby/Makefile && cd ruby && $(MAKE) clean && rm Makefile || true
+-
++ test -d python/build && cd python && rm -rf build || true
+ ##END##
+--- ./configure.ac (Revision 990)
++++ ./configure.ac (Revision 993)
+@@ -504,6 +504,7 @@
+
+ fi
+
++
+ AC_MSG_CHECKING(Ruby Modules to build)
+ AC_MSG_RESULT(${COMP_RUBY:-No Ruby Modules will be built})
+
+@@ -583,8 +584,14 @@
+ AM_CHECK_PYTHON_HEADERS(,[enable_python=no;AC_MSG_WARN(could not find Python headers)])
+ fi
+
+-AM_CONDITIONAL(BUILD_PYTHON,[test "$enable_python" = "yes"])
++if test x$enable_python = xno; then
++ COMP_PYTHON=
++else
++ COMP_PYTHON="python"
++fi
+
++AC_SUBST(COMP_PYTHON)
++
+ dnl Check for nroff
+ AC_PATH_PROGS(NROFF, gnroff nroff)
+ AC_PATH_PROGS(TROFF, groff troff)
+--- ./Makefile.am (Revision 990)
++++ ./Makefile.am (Revision 993)
+@@ -45,6 +45,6 @@
+ cd bindings/tcl && $(MAKE) tcl-install
+
+ site-python-install: all
+- cd bindings/python && $(MAKE) python-install
++ cd bindings/python && $(PYTHON) setup.py install
+
+ ##END##
+--- ./configure.ac (Revision 994)
++++ ./configure.ac (Revision 995)
+@@ -616,7 +616,6 @@
+ AC_CONFIG_FILES([bindings/Makefile])
+ AC_CONFIG_FILES([bindings/tcl/Makefile])
+ AC_CONFIG_FILES([bindings/tcl/ifOctets.tcl])
+-AC_CONFIG_FILES([bindings/python/Makefile])
+ AC_CONFIG_FILES([Makefile])
+
+ AC_CONFIG_COMMANDS([default],[[ chmod +x examples/*.pl]],[[]])
diff --git a/database/rrdtool/rrdtool.conf b/database/rrdtool/rrdtool.conf
index 1987f62a6..4de36ee1c 100644
--- a/database/rrdtool/rrdtool.conf
+++ b/database/rrdtool/rrdtool.conf
@@ -2,7 +2,7 @@
# This copyright note is auto-generated by ./scripts/Create-CopyPatch.
#
# Filename: package/.../rrdtool/rrdtool.conf
-# Copyright (C) 2006 The OpenSDE Project
+# Copyright (C) 2006 - 2007 The OpenSDE Project
# Copyright (C) 2004 - 2006 The T2 SDE Project
# Copyright (C) 1998 - 2003 Clifford Wolf
#
@@ -14,6 +14,9 @@
# GNU General Public License can be found in the file COPYING.
# --- SDE-COPYRIGHT-NOTE-END ---
+# we have to run auto*crap because we patch .am and .ac files
+# for rrdtool-1.2.19
+hook_add preconf 5 "aclocal && automake --add-missing ; autoconf"
var_append extraconfopt " " "--enable-shared"
diff --git a/database/rrdtool/rrdtool.desc b/database/rrdtool/rrdtool.desc
index a0838b989..a53f12a28 100644
--- a/database/rrdtool/rrdtool.desc
+++ b/database/rrdtool/rrdtool.desc
@@ -3,7 +3,7 @@
[COPY] This copyright note is auto-generated by ./scripts/Create-CopyPatch.
[COPY]
[COPY] Filename: package/.../rrdtool/rrdtool.desc
-[COPY] Copyright (C) 2006 The OpenSDE Project
+[COPY] Copyright (C) 2006 - 2007 The OpenSDE Project
[COPY] Copyright (C) 2004 - 2006 The T2 SDE Project
[COPY] Copyright (C) 1998 - 2003 Clifford Wolf
[COPY]
@@ -35,8 +35,7 @@
[L] GPL
[S] Stable
-[V] 1.2.15
+[V] 1.2.19
[P] X -----5---9 125.000
-[D] 674169420 rrdtool-1.2.15.tar.gz http://people.ee.ethz.ch/~oetiker/webtools/rrdtool/pub/
-
+[D] 3686089427 rrdtool-1.2.19.tar.gz http://oss.oetiker.ch/rrdtool/pub/