From bce30773a7f1a89dbbdbab9e4f3df0b8244b4fbf Mon Sep 17 00:00:00 2001 From: Christian Wiese Date: Thu, 8 Mar 2007 15:16:23 +0000 Subject: [PATCH] * updated rrdtool (1.2.15 -> 1.2.19) git-svn-id: svn://svn.opensde.net/opensde/package/trunk@20285 10447126-35f2-4685-b0cf-6dd780d3921f --- .../rrdtool/rrdtool-1.2.19-parsetime.patch | 30 + .../rrdtool/rrdtool-1.2.19-rrd_dump.patch | 114 + .../rrdtool/rrdtool-1.2.19-rrd_getopt.patch | 2741 +++++++++++++++++ database/rrdtool/rrdtool-1.2.19-rrdcgi.patch | 66 + database/rrdtool/rrdtool-1.2.19-setuppy.patch | 193 ++ database/rrdtool/rrdtool.conf | 5 +- database/rrdtool/rrdtool.desc | 7 +- 7 files changed, 3151 insertions(+), 5 deletions(-) create mode 100644 database/rrdtool/rrdtool-1.2.19-parsetime.patch create mode 100644 database/rrdtool/rrdtool-1.2.19-rrd_dump.patch create mode 100644 database/rrdtool/rrdtool-1.2.19-rrd_getopt.patch create mode 100644 database/rrdtool/rrdtool-1.2.19-rrdcgi.patch create mode 100644 database/rrdtool/rrdtool-1.2.19-setuppy.patch 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/