Code

Initial revision
authoroetiker <oetiker@a5681a0c-68f1-0310-ab6d-d61299d08faa>
Sun, 25 Feb 2001 22:30:32 +0000 (22:30 +0000)
committeroetiker <oetiker@a5681a0c-68f1-0310-ab6d-d61299d08faa>
Sun, 25 Feb 2001 22:30:32 +0000 (22:30 +0000)
git-svn-id: svn://svn.oetiker.ch/rrdtool/trunk@9 a5681a0c-68f1-0310-ab6d-d61299d08faa

218 files changed:
contrib/README [new file with mode: 0644]
contrib/add_ds/README [new file with mode: 0644]
contrib/add_ds/add_ds.pl [new file with mode: 0755]
contrib/add_ds/batch.pl [new file with mode: 0755]
contrib/killspike/README [new file with mode: 0644]
contrib/killspike/killspike.pl [new file with mode: 0755]
contrib/killspike/killspike.pl.in [new file with mode: 0755]
contrib/log2rrd/README [new file with mode: 0644]
contrib/log2rrd/log2rrd.pl [new file with mode: 0755]
contrib/log2rrd/log2rrd.pl.in [new file with mode: 0755]
contrib/php3/INSTALL [new file with mode: 0644]
contrib/php3/Makefile [new file with mode: 0644]
contrib/php3/README [new file with mode: 0644]
contrib/php3/USAGE [new file with mode: 0644]
contrib/php3/VERSION [new file with mode: 0644]
contrib/php3/examples/rrd_create.php [new file with mode: 0644]
contrib/php3/examples/rrd_fetch.php [new file with mode: 0644]
contrib/php3/examples/rrd_graph.php [new file with mode: 0644]
contrib/php3/examples/rrd_last.php [new file with mode: 0644]
contrib/php3/examples/rrd_update.php [new file with mode: 0644]
contrib/php3/php3_rrdtool.c [new file with mode: 0644]
contrib/php3/php3_rrdtool.h [new file with mode: 0644]
contrib/php4/.cvsignore [new file with mode: 0644]
contrib/php4/INSTALL [new file with mode: 0644]
contrib/php4/Makefile.in [new file with mode: 0644]
contrib/php4/README [new file with mode: 0644]
contrib/php4/USAGE [new file with mode: 0644]
contrib/php4/acinclude.m4 [new file with mode: 0644]
contrib/php4/aclocal.m4 [new file with mode: 0644]
contrib/php4/build/dynlib.mk [new file with mode: 0644]
contrib/php4/build/fastgen.sh [new file with mode: 0755]
contrib/php4/build/library.mk [new file with mode: 0644]
contrib/php4/build/ltlib.mk [new file with mode: 0644]
contrib/php4/build/program.mk [new file with mode: 0644]
contrib/php4/build/rules.mk [new file with mode: 0644]
contrib/php4/build/shtool [new file with mode: 0755]
contrib/php4/config.guess [new file with mode: 0755]
contrib/php4/config.m4 [new file with mode: 0644]
contrib/php4/config.sub [new file with mode: 0755]
contrib/php4/configure [new file with mode: 0755]
contrib/php4/configure.in [new file with mode: 0644]
contrib/php4/dynlib.m4 [new file with mode: 0644]
contrib/php4/examples/rrd_create.php [new file with mode: 0644]
contrib/php4/examples/rrd_fetch.php [new file with mode: 0644]
contrib/php4/examples/rrd_graph.php [new file with mode: 0644]
contrib/php4/examples/rrd_last.php [new file with mode: 0644]
contrib/php4/examples/rrd_update.php [new file with mode: 0644]
contrib/php4/install-sh [new file with mode: 0644]
contrib/php4/ltconfig [new file with mode: 0755]
contrib/php4/ltmain.sh [new file with mode: 0644]
contrib/php4/missing [new file with mode: 0644]
contrib/php4/mkinstalldirs [new file with mode: 0644]
contrib/php4/php_config.h.in [new file with mode: 0644]
contrib/php4/php_rrdtool.h [new file with mode: 0644]
contrib/php4/rrdtool.c [new file with mode: 0644]
contrib/rrd-file-icon/README [new file with mode: 0644]
contrib/rrd-file-icon/rrd.png [new file with mode: 0644]
contrib/rrdexplorer/README.txt [new file with mode: 0644]
contrib/rrdexplorer/map.cgi [new file with mode: 0644]
contrib/rrdexplorer/png.cgi [new file with mode: 0644]
contrib/rrdfetchnames/README [new file with mode: 0644]
contrib/rrdfetchnames/rrdfetchnames.pl [new file with mode: 0755]
contrib/rrdlastds/README [new file with mode: 0644]
contrib/rrdlastds/rrdlastds.pl [new file with mode: 0755]
contrib/rrdproc/README [new file with mode: 0644]
contrib/rrdproc/rrdproc.c [new file with mode: 0644]
contrib/rrdview/README [new file with mode: 0644]
contrib/rrdview/rrdview.cgi [new file with mode: 0644]
contrib/snmpstats/README [new file with mode: 0644]
contrib/snmpstats/SNMPstats.pl [new file with mode: 0755]
contrib/trytime/.deps/trytime.P [new file with mode: 0644]
contrib/trytime/Makefile [new file with mode: 0644]
contrib/trytime/Makefile.am [new file with mode: 0644]
contrib/trytime/Makefile.in [new file with mode: 0644]
contrib/trytime/README [new file with mode: 0644]
contrib/trytime/trytime.c [new file with mode: 0644]
website/.img/.imgdot-1x1-transp.gif [new file with mode: 0644]
website/.pics/CAIDAlogo.120.gif [new file with mode: 0644]
website/.pics/CAIDAlogo.120.png [new file with mode: 0644]
website/.pics/CAIDAlogo.gif [new file with mode: 0644]
website/.pics/CAIDAlogo.png [new file with mode: 0644]
website/.pics/CAIDAlogo.spons.png [new file with mode: 0644]
website/.pics/CAIDAlogo.xpm [new file with mode: 0644]
website/.pics/CAIDAlogo2.gif [new file with mode: 0644]
website/.pics/CAIDAlogo_small.gif [new file with mode: 0644]
website/.pics/b.gif [new file with mode: 0644]
website/.pics/b.png [new file with mode: 0644]
website/.pics/background.xcf [new file with mode: 0644]
website/.pics/bbo.gif [new file with mode: 0644]
website/.pics/bbo.png [new file with mode: 0644]
website/.pics/bco.gif [new file with mode: 0644]
website/.pics/bco.png [new file with mode: 0644]
website/.pics/border.gif [new file with mode: 0644]
website/.pics/bro.gif [new file with mode: 0644]
website/.pics/bro.png [new file with mode: 0644]
website/.pics/ecke.gif [new file with mode: 0644]
website/.pics/logo-apache.gif [new file with mode: 0644]
website/.pics/logo-apache.small.gif [new file with mode: 0644]
website/.pics/logo-extra.gif [new file with mode: 0755]
website/.pics/logo-linux.gif [new file with mode: 0644]
website/.pics/logo-wml.gif [new file with mode: 0644]
website/.pics/rrddemo.gif [new file with mode: 0644]
website/.pics/rrdlogdemo.gif [new file with mode: 0644]
website/.pics/rrdtool.gif [new file with mode: 0644]
website/.pics/rrdtool.xar [new file with mode: 0644]
website/.pics/unten.gif [new file with mode: 0644]
website/.ttf/futurab.ttf [new file with mode: 0644]
website/.ttf/futurabc.ttf [new file with mode: 0644]
website/.ttf/futurabi.ttf [new file with mode: 0644]
website/.ttf/futurah.ttf [new file with mode: 0644]
website/.ttf/futurahi.ttf [new file with mode: 0644]
website/.ttf/futurak.ttf [new file with mode: 0644]
website/.ttf/futural.ttf [new file with mode: 0644]
website/.ttf/futuralc.ttf [new file with mode: 0644]
website/.ttf/futurali.ttf [new file with mode: 0644]
website/.ttf/futuram.ttf [new file with mode: 0644]
website/.ttf/futuramc.ttf [new file with mode: 0644]
website/.ttf/futurami.ttf [new file with mode: 0644]
website/.ttf/futuran.ttf [new file with mode: 0644]
website/.ttf/futurani.ttf [new file with mode: 0644]
website/.ttf/futuraxk.ttf [new file with mode: 0644]
website/.ttf/futurbci.ttf [new file with mode: 0644]
website/.ttf/futurlci.ttf [new file with mode: 0644]
website/.ttf/futurmci.ttf [new file with mode: 0644]
website/.ttf/futurxkc.ttf [new file with mode: 0644]
website/.ttf/futurxki.ttf [new file with mode: 0644]
website/.ttf/futuxkci.ttf [new file with mode: 0644]
website/.ttf/trebuc.ttf [new file with mode: 0644]
website/.ttf/trebucbd.ttf [new file with mode: 0644]
website/.ttf/trebucbi.ttf [new file with mode: 0644]
website/.ttf/trebucit.ttf [new file with mode: 0644]
website/.ttf/zinjaron.ttf [new file with mode: 0644]
website/.wml/navbar.inc [new file with mode: 0644]
website/.wml/nestednavbar.inc [new file with mode: 0644]
website/.wml/template.inc [new file with mode: 0644]
website/.wml/tobis.inc [new file with mode: 0644]
website/.wmlrc [new file with mode: 0644]
website/compiling.wml [new file with mode: 0644]
website/contributors.wml [new file with mode: 0644]
website/developers.wml [new file with mode: 0644]
website/download.wml [new file with mode: 0644]
website/frontends/bigsister.wml [new file with mode: 0644]
website/frontends/bronc.wml [new file with mode: 0644]
website/frontends/cricket.wml [new file with mode: 0644]
website/frontends/flowscan.wml [new file with mode: 0644]
website/frontends/fwgold.wml [new file with mode: 0644]
website/frontends/hoth.wml [new file with mode: 0644]
website/frontends/index.wml [new file with mode: 0644]
website/frontends/nmis.wml [new file with mode: 0644]
website/frontends/nrg.wml [new file with mode: 0644]
website/frontends/ntop.wml [new file with mode: 0644]
website/frontends/orca.wml [new file with mode: 0644]
website/frontends/remstats.wml [new file with mode: 0644]
website/frontends/rrgrapher.wml [new file with mode: 0644]
website/frontends/slamon.wml [new file with mode: 0644]
website/gallery/alex-01.bash [new file with mode: 0644]
website/gallery/alex-01.png [new file with mode: 0644]
website/gallery/alex-01.wml [new file with mode: 0644]
website/gallery/bkw-01.gif [new file with mode: 0644]
website/gallery/bkw-01.pl [new file with mode: 0644]
website/gallery/bkw-01.wml [new file with mode: 0644]
website/gallery/blair-01-a.png [new file with mode: 0644]
website/gallery/blair-01-b.png [new file with mode: 0644]
website/gallery/blair-01-c.png [new file with mode: 0644]
website/gallery/blair-01-d.png [new file with mode: 0644]
website/gallery/blair-01-e.png [new file with mode: 0644]
website/gallery/blair-01-f.png [new file with mode: 0644]
website/gallery/blair-01.wml [new file with mode: 0644]
website/gallery/chris-01.wml [new file with mode: 0644]
website/gallery/chris-01temp.png [new file with mode: 0644]
website/gallery/chris-01wind.png [new file with mode: 0644]
website/gallery/colleen-01.gif [new file with mode: 0644]
website/gallery/colleen-01.wml [new file with mode: 0644]
website/gallery/edvard-01.png [new file with mode: 0644]
website/gallery/edvard-01.wml [new file with mode: 0644]
website/gallery/index.wml [new file with mode: 0644]
website/gallery/jeff-01.png [new file with mode: 0644]
website/gallery/jeff-01.wml [new file with mode: 0644]
website/gallery/neal-01.png [new file with mode: 0644]
website/gallery/neal-01.wml [new file with mode: 0644]
website/gallery/simon-01.png [new file with mode: 0644]
website/gallery/simon-01.wml [new file with mode: 0644]
website/gallery/steve-01.gif [new file with mode: 0644]
website/gallery/steve-01.wml [new file with mode: 0644]
website/index.wml [new file with mode: 0644]
website/license.wml [new file with mode: 0644]
website/mailinglists.wml [new file with mode: 0644]
website/manual/bin_dec_hex.wml [new file with mode: 0644]
website/manual/cdeftutorial.wml [new file with mode: 0644]
website/manual/index.wml [new file with mode: 0644]
website/manual/rpntutorial.wml [new file with mode: 0644]
website/manual/rrdcgi.wml [new file with mode: 0644]
website/manual/rrdcreate.wml [new file with mode: 0644]
website/manual/rrddump.wml [new file with mode: 0644]
website/manual/rrdfetch.wml [new file with mode: 0644]
website/manual/rrdgraph.wml [new file with mode: 0644]
website/manual/rrdinfo.wml [new file with mode: 0644]
website/manual/rrdlast.wml [new file with mode: 0644]
website/manual/rrdresize.wml [new file with mode: 0644]
website/manual/rrdrestore.wml [new file with mode: 0644]
website/manual/rrdtune.wml [new file with mode: 0644]
website/manual/rrdtutorial.es.wml [new file with mode: 0644]
website/manual/rrdtutorial.wml [new file with mode: 0644]
website/manual/rrdupdate.wml [new file with mode: 0644]
website/news.wml [new file with mode: 0644]
website/perlbind/RRDp.wml [new file with mode: 0644]
website/perlbind/RRDs.wml [new file with mode: 0644]
website/perlbind/index.wml [new file with mode: 0644]
website/rrdcgi.wml [new file with mode: 0644]
website/screen.wml [new file with mode: 0644]
website/site-sync [new file with mode: 0755]
website/tutorial/bin_dec_hex.wml [new file with mode: 0644]
website/tutorial/cdeftutorial.wml [new file with mode: 0644]
website/tutorial/index.wml [new file with mode: 0644]
website/tutorial/rpntutorial.wml [new file with mode: 0644]
website/tutorial/rrdtutorial.es.wml [new file with mode: 0644]
website/tutorial/rrdtutorial.ps [new file with mode: 0644]
website/tutorial/rrdtutorial.wml [new file with mode: 0644]

diff --git a/contrib/README b/contrib/README
new file mode 100644 (file)
index 0000000..606633f
--- /dev/null
@@ -0,0 +1,6 @@
+This directory should contain YOUR scripts ... please sent them to me ...
+
+each script should come with an appropriate README file ...
+
+cheers
+Tobi
diff --git a/contrib/add_ds/README b/contrib/add_ds/README
new file mode 100644 (file)
index 0000000..28e3e12
--- /dev/null
@@ -0,0 +1,32 @@
+# README
+# From: Selena Brewington <selena@chesnok.com>
+
+The two scripts included in here are for taking an existing RRD,
+dumping out its XML contents, mucking with the XML to add an
+arbitrary number of datasources, and then creating a new RRD with
+the new XML information. 'add_ds.pl' is what is doing all the
+work.  'batch.pl' does the legwork of running rrdtool and 
+moving around the output from the various commands.
+
+Easiest way to use these:
+* Put batch.pl and add_ds.pl in the same directory as the RRDs
+you want to modify and run:
+
+    $ ls -1 | ./batch.pl <# new datasources you want to add>
+
+You'll end up with an 'xml' directory where all the xml files
+and your new RRDs are available.  Copy the new RRDs back over
+the old RRDs once you've convinced yourself that the new RRDs
+have been formed correctly (try using the rrd-dump tool that is
+in the cricket/utils directory, for example).
+
+I put some options that you can configure at the top of the
+batch.pl script.  Also, add_ds.pl has a bunch of stuff you can
+modify at the command line or, again, change inside the script
+itself - warning: it's not fancy.  Try: ./add_ds.pl -h
+
+batch.pl has an 'overwrite' option that can be invoked, but I
+highly recommend that you check that this script does what you want,
+the way you want it, before you go and trample all over your 
+existing RRDs. 
+
diff --git a/contrib/add_ds/add_ds.pl b/contrib/add_ds/add_ds.pl
new file mode 100755 (executable)
index 0000000..2c870a7
--- /dev/null
@@ -0,0 +1,113 @@
+#! /usr/bin/perl
+
+# add_ds.pl, program to add datasources to an existing RRD 
+#
+#    Copyright (C) 2000 Selena M. Brewington 
+#
+#    This program is free software; you can redistribute it and/or modify
+#    it under the terms of the GNU General Public License as published by
+#    the Free Software Foundation; either version 2 of the License, or
+#    (at your option) any later version.
+#
+#    This program is distributed in the hope that it will be useful,
+#    but WITHOUT ANY WARRANTY; without even the implied warranty of
+#    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+#    GNU General Public License for more details.
+#
+#    You should have received a copy of the GNU General Public License
+#    along with this program; if not, write to the Free Software
+#    Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+
+use strict;
+
+my $ds = shift || die "need number of additional datasources desired";
+if ($ds eq '-h') {
+  &Usage;
+  exit 0;
+}
+
+my $default_val = shift || 'NaN';
+my $type = shift || 'COUNTER';
+my $heartbeat = shift || '1800';
+my $rrdmin = shift || 'NaN';
+my $rrdmax = shift || 'NaN';
+
+my $cdp_prep_end = '</cdp_prep>';
+
+my $row_end = '</row>';
+my $name = '<name>';
+my $name_end = '</name>';
+
+my $field = '<v> ' . $default_val . ' </v>';
+
+my $found_ds = 0;
+my $num_sources = 0;
+my $last;
+my $fields = " ";
+my $datasource;
+my $x;
+
+while (<STDIN>) {
+
+  if (($_ =~ s/$row_end$/$fields$row_end/) && $found_ds) {
+    # need to hit <ds> types first, if we don't, we're screwed
+    print $_; 
+
+  } elsif (/$cdp_prep_end/) {
+    print "\t\t\t<ds><value> NaN </value>  <unknown_datapoints> 0 </unknown_datapoints></ds>\n" x $ds;
+    print $_;
+
+  } elsif (/$name_end$/) {
+    ($datasource) = /$name (\w+)/;
+    $found_ds++;
+    print $_;
+
+  } elsif (/Round Robin Archives/) {
+    # print out additional datasource definitions
+
+    ($num_sources) = ($datasource =~ /(\d+)/);
+    
+    for ($x = $num_sources+1; $x < $num_sources+$ds+1; $x++) {
+
+      $fields .= $field;
+      
+      print "\n\t<ds>\n";
+      print "\t\t<name> ds$x <\/name>\n";
+      print "\t\t<type> $type <\/type>\n";
+      print "\t\t<minimal_heartbeat> $heartbeat <\/minimal_heartbeat>\n";
+      print "\t\t<min> $rrdmin <\/min>\n";
+      print "\t\t<max> $rrdmax <\/max>\n\n";
+      print "\t\t<!-- PDP Status-->\n";
+      print "\t\t<last_ds> NaN <\/last_ds>\n";
+      print "\t\t<value> NaN <\/value>\n";
+      print "\t\t<unknown_sec> NaN <\/unknown_sec>\n"; 
+      print "\t<\/ds>\n\n";
+
+    }
+
+    print $_;
+  } else {
+    print $_;
+  }
+
+  $last = $_;
+}
+
+
+
+
+sub Usage {
+
+  print "add-ds.pl <add'l ds> [default_val] [type] [heartbeat] [rrdmin] [rrdmax] < file.xml\n";
+  print "\t<add'l ds>\tnumber of additional datasources\n";
+  print "\t[default_val]\tdefault value to be entered in add'l fields\n";
+  print "\t[type]\ttype of datasource (i.e. COUNTER, GAUGE...)\n";
+  print "\t[heatbeat]\tlength of time in seconds before RRD thinks your DS is dead\n";
+  print "\t[rrdmin]\tminimum value allowed for each datasource\n";
+  print "\t[rrdmax]\tmax value allowed for each datasource\n\n";
+  print "\tOptions are read in order, so if you want to change the\n";
+  print "\tdefault heartbeat, you need to specify the default_val and\n";
+  print "\ttype as well, etc.\n";
+  print "\n\tOutput goes to STDOUT.\n";
+}
+
diff --git a/contrib/add_ds/batch.pl b/contrib/add_ds/batch.pl
new file mode 100755 (executable)
index 0000000..5fa6a33
--- /dev/null
@@ -0,0 +1,95 @@
+#! /usr/sepp/bin/perl
+
+# batch.pl, simple program to help add datasources to an existing RRD
+#   goes with add_ds.pl
+#
+#    Copyright (C) 2000 Selena M. Brewington
+#
+#    This program is free software; you can redistribute it and/or modify
+#    it under the terms of the GNU General Public License as published by
+#    the Free Software Foundation; either version 2 of the License, or
+#    (at your option) any later version.
+#
+#    This program is distributed in the hope that it will be useful,
+#    but WITHOUT ANY WARRANTY; without even the implied warranty of
+#    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+#    GNU General Public License for more details.
+#
+#    You should have received a copy of the GNU General Public License
+#    along with this program; if not, write to the Free Software
+#    Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+# 
+# for use with add_ds.pl script to add datasources to an RRD
+#
+# usage: ls -1 | ./batch.pl [-o] <# ds to add>
+#
+# -o will let you overwrite your rrds.  i don't recommend using this 
+# switch the first time you run this program.  If something
+# gets messed up, the original xml files will be in the xml
+# directory and you can run 'rrdtool restore' on all of them
+# uncomment the commented out lines below to make this work.
+#
+# also, you can change the name of the directory the XML is
+# getting dumped to, where your rrdtool binary is located, 
+# and where add_ds.pl is located.  the variables are listed 
+# below.
+#
+# This script could theoretically take fully-qualified pathnames
+# as input from STDIN rather than the output from ls -1. 
+#
+
+use strict;
+
+########### USER CONFIGURABLE SECTION #######################
+
+my $newdir = "xml";
+my $rrdtool = "/usr/local/rrdtool-1.0.30/bin/rrdtool";
+my $add_ds = "./add_ds.pl";  # path to add_ds.pl script
+
+########### END CONFIGURE SECTION ###########################
+
+
+my $ds = shift || die 'need number of datasources to add';
+
+my $overwrite = 0;
+
+if ($ds eq '-o') {
+  $overwrite = 1;
+  $ds = shift || die 'need number of datasources to add';
+} 
+
+if (! (-x $newdir)) {
+  `mkdir xml` || die "can't make directory xml";
+}
+
+while (<STDIN>) {
+
+  next if (! /rrd/);
+  chop;
+  my $file = $_;
+
+  $_ =~ s/rrd$/xml/;
+
+  open(FILE, ">$newdir/$_");
+
+  my @output = `$rrdtool dump $file`;
+  print FILE @output;
+
+  close(FILE);
+
+  open (FILE, ">$newdir/$_.2");
+
+  my @new = `cat $newdir/$_ | $add_ds $ds`; 
+
+  print FILE @new;
+
+  close (FILE);
+
+  system("$rrdtool restore $newdir/$_.2 $newdir/$file") == 0 
+    or die "rrdtool restore failed for $file";
+
+  if ($overwrite == 1) {
+    system("mv $newdir/$file $file") == 0
+      or die "can't overwrite $file";
+  }
+}
diff --git a/contrib/killspike/README b/contrib/killspike/README
new file mode 100644 (file)
index 0000000..9b979a9
--- /dev/null
@@ -0,0 +1,19 @@
+From: Bert Driehuis <driehuis@playbeing.org>
+Date: Fri, 14 Jan 2000 03:41:07 +0100 (CET)
+
+This script will read an XML file produced by
+
+       rrdtool dump foo.rrd >in.xml
+
+and look at the $maxspike highest samples per datasource. It then finds the
+records with the most hits and ditches the data. The resulting file can be
+read back into the RRD database with the command
+
+       rrdtool restore out.xml foo.rrd
+
+The whole idea is to find and eradicate "spikes" caused by erroneous
+readings affecting entire records.
+
+This tool is not for the faint of heart, will require tweaking per case
+(even though that should just be picking values for cutoff and to a lesser
+extent, maxspike). It will cause data loss, for obvious reasons.
diff --git a/contrib/killspike/killspike.pl b/contrib/killspike/killspike.pl
new file mode 100755 (executable)
index 0000000..4642b3c
--- /dev/null
@@ -0,0 +1,137 @@
+#! /usr/sepp/bin/perl -w
+
+# $Id$
+# $Source$
+
+# This script will read an XML file produced by
+#      rrdtool dump foo.rrd >in.xml
+# and look at the $maxspike highest samples per datasource. It then finds
+# the records with the most hits and ditches the data. The resulting file
+# can be read back into the RRD database with the command
+#      rrdtool restore out.xml foo.rrd
+#
+# The whole idea is to find and eradicate "spikes" caused by erroneous
+# readings affecting entire records.
+#
+# This tool is not for the faint of heart, will require tweaking per case
+# (even though that should just be picking values for cutoff and to a lesser
+# extent, maxspike). It will cause data loss, for obvious reasons.
+#
+# THIS SOFTWARE IS DISTRIBUTED IN THE HOPE THAT IT IS USEFUL, AND COMES WITH
+# NO WARRANTY. USE AT YOUR OWN RISK!
+#
+#                      Bert Driehuis <driehuis@playbeing.org>
+
+use strict;
+
+my $maxspike = 25;     # How many top samples to consider per datasource
+my $cutoff = 20;       # How many records to ditch
+my $debug = 1;
+my $file = "in.xml";
+my $outfile = "out.xml";
+
+my $nds = 0;
+my @dsl = ();
+my @dsi = ();
+my @topindx = ();
+my @botindx = ();
+my @dsname = ();
+my $i;
+my $j;
+
+# Count the number of data sources
+open(IN, $file) || die;
+while(<IN>) {
+       if (/<name>\s*(\w+)\s*/) {
+               $dsname[$nds] = $1;
+               $nds++;
+       }
+}
+close IN;
+
+print "Found $nds datasources\n" if $debug;
+
+# Set up the list of lists for the datasource data
+for ($i = 0; $i < $nds; $i++) {
+       my @dsdata = ();
+       push @dsl, \@dsdata;
+       my @dsindex = ();
+       push @dsi, \@dsindex;
+       my @top = ();
+       push @topindx, \@top;
+       my @bot = ();
+       push @botindx, \@bot;
+}
+
+# Slurp all datasource fields into the @dsl Lol
+my $recno = -1;
+open(IN, $file) || die;
+while(<IN>) {
+       next if !/<row>/;
+       $recno++;
+       my @data = split(/ /);
+       die "Malformed input" if $data[5] ne "<row><v>";
+       die "Malformed record" if $data[5 + ($nds * 2)] ne "</v></row>\n";
+       for ($i = 0; $i < $nds; $i++) {
+               my $sample = $data[($i * 2) + 6];
+               #print "$sample\n";
+               push @{$dsl[$i]}, $sample;
+       }
+}
+close IN;
+
+# Set up a LoL with indexes, and ditch the values that represent NaN's
+for ($i = 0; $i < $nds; $i++) {
+       @{$dsi[$i]} = grep { ${$dsl[$i]}[$_] ne "NaN" } (0..$recno);
+       print "$dsname[$i] has $#{$dsi[$i]} valid samples\n" if $debug;
+}
+
+sub sortit {
+       ${$dsl[$i]}[$a] <=> ${$dsl[$i]}[$b];
+}
+my %indexes;
+for ($i = 0; $i < $nds; $i++) {
+       next if ($#{$dsi[$i]} < $maxspike);
+       @{$dsi[$i]} = sort sortit @{$dsi[$i]};
+       @{$botindx[$i]} = @{$dsi[$i]};
+       @{$topindx[$i]} = splice(@{$botindx[$i]}, -$maxspike);
+       print "$dsname[$i] top $maxspike: ".join(' ', @{$topindx[$i]})."\n";
+       for($j = 0; $j < $maxspike; $j++) {
+               $indexes{${$topindx[$i]}[$j]} = 0 if
+                               !defined($indexes{${$topindx[$i]}[$j]});
+               $indexes{${$topindx[$i]}[$j]}++;
+               printf "%1.1e ", ${$dsl[$i]}[${$topindx[$i]}[$j]];
+       }
+       print "\n";
+}
+
+# Report on the hit rate of the records to be dumped, and a few for
+# reference.
+$j = 0;
+my %ditch;
+foreach $i (sort {$indexes{$b} <=> $indexes{$a}} keys %indexes) {
+       print "Record index $i: $indexes{$i} hits\n";
+       $ditch{$i} = 1 if $j < $cutoff;
+       print "----------\n" if $j + 1 == $cutoff;
+       last if $j++ > $maxspike;
+}
+
+# Okay, so we start ditching the records. You can always re-run the script
+# if the results don't suit you after adjusting $cutoff or $maxspike.
+$recno = -1;
+open(IN, $file) || die;
+open(OUT, ">$outfile") || die;
+while(<IN>) {
+       print OUT if !/<row>/;
+       next if !/<row>/;
+       $recno++;
+       print OUT if !defined($ditch{$recno});
+       next if !defined($ditch{$recno});
+       my @data = split(/ /);
+       for ($i = 0; $i < $nds; $i++) {
+               $data[($i * 2) + 6] = "NaN";
+       }
+       print OUT join(' ', @data);
+}
+close IN;
+close OUT;
diff --git a/contrib/killspike/killspike.pl.in b/contrib/killspike/killspike.pl.in
new file mode 100755 (executable)
index 0000000..1248920
--- /dev/null
@@ -0,0 +1,137 @@
+#! @PERL@ -w
+
+# $Id$
+# $Source$
+
+# This script will read an XML file produced by
+#      rrdtool dump foo.rrd >in.xml
+# and look at the $maxspike highest samples per datasource. It then finds
+# the records with the most hits and ditches the data. The resulting file
+# can be read back into the RRD database with the command
+#      rrdtool restore out.xml foo.rrd
+#
+# The whole idea is to find and eradicate "spikes" caused by erroneous
+# readings affecting entire records.
+#
+# This tool is not for the faint of heart, will require tweaking per case
+# (even though that should just be picking values for cutoff and to a lesser
+# extent, maxspike). It will cause data loss, for obvious reasons.
+#
+# THIS SOFTWARE IS DISTRIBUTED IN THE HOPE THAT IT IS USEFUL, AND COMES WITH
+# NO WARRANTY. USE AT YOUR OWN RISK!
+#
+#                      Bert Driehuis <driehuis@playbeing.org>
+
+use strict;
+
+my $maxspike = 25;     # How many top samples to consider per datasource
+my $cutoff = 20;       # How many records to ditch
+my $debug = 1;
+my $file = "in.xml";
+my $outfile = "out.xml";
+
+my $nds = 0;
+my @dsl = ();
+my @dsi = ();
+my @topindx = ();
+my @botindx = ();
+my @dsname = ();
+my $i;
+my $j;
+
+# Count the number of data sources
+open(IN, $file) || die;
+while(<IN>) {
+       if (/<name>\s*(\w+)\s*/) {
+               $dsname[$nds] = $1;
+               $nds++;
+       }
+}
+close IN;
+
+print "Found $nds datasources\n" if $debug;
+
+# Set up the list of lists for the datasource data
+for ($i = 0; $i < $nds; $i++) {
+       my @dsdata = ();
+       push @dsl, \@dsdata;
+       my @dsindex = ();
+       push @dsi, \@dsindex;
+       my @top = ();
+       push @topindx, \@top;
+       my @bot = ();
+       push @botindx, \@bot;
+}
+
+# Slurp all datasource fields into the @dsl Lol
+my $recno = -1;
+open(IN, $file) || die;
+while(<IN>) {
+       next if !/<row>/;
+       $recno++;
+       my @data = split(/ /);
+       die "Malformed input" if $data[5] ne "<row><v>";
+       die "Malformed record" if $data[5 + ($nds * 2)] ne "</v></row>\n";
+       for ($i = 0; $i < $nds; $i++) {
+               my $sample = $data[($i * 2) + 6];
+               #print "$sample\n";
+               push @{$dsl[$i]}, $sample;
+       }
+}
+close IN;
+
+# Set up a LoL with indexes, and ditch the values that represent NaN's
+for ($i = 0; $i < $nds; $i++) {
+       @{$dsi[$i]} = grep { ${$dsl[$i]}[$_] ne "NaN" } (0..$recno);
+       print "$dsname[$i] has $#{$dsi[$i]} valid samples\n" if $debug;
+}
+
+sub sortit {
+       ${$dsl[$i]}[$a] <=> ${$dsl[$i]}[$b];
+}
+my %indexes;
+for ($i = 0; $i < $nds; $i++) {
+       next if ($#{$dsi[$i]} < $maxspike);
+       @{$dsi[$i]} = sort sortit @{$dsi[$i]};
+       @{$botindx[$i]} = @{$dsi[$i]};
+       @{$topindx[$i]} = splice(@{$botindx[$i]}, -$maxspike);
+       print "$dsname[$i] top $maxspike: ".join(' ', @{$topindx[$i]})."\n";
+       for($j = 0; $j < $maxspike; $j++) {
+               $indexes{${$topindx[$i]}[$j]} = 0 if
+                               !defined($indexes{${$topindx[$i]}[$j]});
+               $indexes{${$topindx[$i]}[$j]}++;
+               printf "%1.1e ", ${$dsl[$i]}[${$topindx[$i]}[$j]];
+       }
+       print "\n";
+}
+
+# Report on the hit rate of the records to be dumped, and a few for
+# reference.
+$j = 0;
+my %ditch;
+foreach $i (sort {$indexes{$b} <=> $indexes{$a}} keys %indexes) {
+       print "Record index $i: $indexes{$i} hits\n";
+       $ditch{$i} = 1 if $j < $cutoff;
+       print "----------\n" if $j + 1 == $cutoff;
+       last if $j++ > $maxspike;
+}
+
+# Okay, so we start ditching the records. You can always re-run the script
+# if the results don't suit you after adjusting $cutoff or $maxspike.
+$recno = -1;
+open(IN, $file) || die;
+open(OUT, ">$outfile") || die;
+while(<IN>) {
+       print OUT if !/<row>/;
+       next if !/<row>/;
+       $recno++;
+       print OUT if !defined($ditch{$recno});
+       next if !defined($ditch{$recno});
+       my @data = split(/ /);
+       for ($i = 0; $i < $nds; $i++) {
+               $data[($i * 2) + 6] = "NaN";
+       }
+       print OUT join(' ', @data);
+}
+close IN;
+close OUT;
diff --git a/contrib/log2rrd/README b/contrib/log2rrd/README
new file mode 100644 (file)
index 0000000..6322c94
--- /dev/null
@@ -0,0 +1,62 @@
+                              log2rrd
+
+Usage:
+
+log2rrd.pl {mrtg logfile} {destination directory}
+
+Log2rrd is a simple tool for converting MRTG logfiles into round robin
+database (RRD) files.  The original version was written last year by
+Wrolf Courtney <wrolf@concentric.net> and Russ Wright <wright@LBL.Gov>
+with an early test version of RRDTOOL (mrtg-19980526.08).  This
+version has been modified to work with the current shared-perl release
+of RRD (RRDs).
+
+This script only moves the input/output data averages and does not
+make any effort to retain the maximum data rate info that is present
+in the mrtg logfiles.  This means that when you request maximum values
+for a given time range from your new rrd archive, it will only show
+you the averaged max values and not the original data peaks that
+occured in the averaged time period.  This may or may not be a problem
+at your site.
+
+The conversion script expects 2 arguments - the mrtg logfile to read
+and the path for the resulting rrd file.  The script will attempt to
+isolate the filename from any path specified for the mrtg input
+logfile to create the rrd output file name with the specified
+destination directory.  If no destination directory name is included,
+the rrd file will be written in the connected directory. 
+
+Note that the resulting rrd DS type is GAUGE.  With a DS type of
+counter, rrdupdate will attempt to interpret input data as a counter
+value and make a new data average for the specified time interval.
+In this case, we need to trick rrdcreate/rrdupdate into letting us
+input the data values directly because mrtg had already consolidated
+the counter data.  The script contains lines of code that can be
+uncommented to allow log2rrd to automatically call rrdtune to change
+the resulting file to use the COUNTER data type after the mrtg
+logfiles have been read in.  Since not all mrtg data files are counter
+data, I leave this option up to the user as to whether to convert
+later by hand with rrdtune or let log2rrd perform the task.
+
+Considerations for filenames and converting large numbers of files:
+
+At my own site, I have over 40 Cisco 75xx routers with lots of
+interfaces being monitored per router plus about 60 Cisco 5300
+terminal servers.  Running log2rrd for each interface individually
+would be a very painful process.  Since I am in the process of moving
+all of my mrtg datasets over to Cricket, I hacked a separate version
+of log2rrd that had more specific file name conversion code to match
+my Cricket target names.  This version of log2rrd was called up by
+another script that looped through an entire mrtg workdir and
+converted all logfiles present in that directory.  This code was far
+too specific to my site's version of mrtg logfile names and desired
+Cricket target info to be included here.  It would not be a difficult
+task to wrap this log2rrd script in a similar fashion tailored to your
+own needs.  If you have 100's or 1000's of logfiles to move, the
+effort is well worthwhile.
+
+Alan Lichty
+Internetworking Planner
+Electric Lightwave, Inc.
+(360)816-4167
+
diff --git a/contrib/log2rrd/log2rrd.pl b/contrib/log2rrd/log2rrd.pl
new file mode 100755 (executable)
index 0000000..3a6237e
--- /dev/null
@@ -0,0 +1,231 @@
+#! /usr/sepp/bin/perl
+#
+# Log 2 RRD.  This script translates a MRTG 2.x log file
+# into a RRD archive.  The original version was written by
+# Wrolf Courtney <wrolf@concentric.net> and
+# Russ Wright <wright@LBL.Gov> with an early test version
+# of RRDTOOL (mrtg-19980526.08) and has been modified to match
+# the parameters of rrdtool version 99.23 by Alan Lichty at
+# Electric Lightwave, Inc. <alichty@eli.net>.
+#
+# this script optimized for being called up by another script
+# that cycles through a list of routers and invokes this for each
+# interface.  It can be run just as easily from a command line for
+# small numbers of logfiles.
+#
+# The RRD we create looks like the following:  Note
+# that we have to use type GAUGE in order to have RRDTOOL
+# populate the new rr archive correctly.  Otherwise RRDTOOL will try 
+# to interpet the data as new octet counts instead of existing
+# data rate averages.
+#
+# DS:GAUGE:86400:U:U           # in counter
+# DS:GAUGE:86400:U:U           # out counter
+# RRA:AVERAGE:0.5:1:600                # 5 minute samples
+# RRA:MAX:0.5:1:600            # 5 minute samples
+# RRA:AVERAGE:0.5:6:600                # 30 minute samples
+# RRA:MAX:0.5:6:600            # 30 minute samples
+# RRA:AVERAGE:0.5:24:600               # 2 hour samples
+# RRA:MAX:0.5:24:600           # 2 hour samples
+# RRA:AVERAGE:0.5:288:732      # 1 day samples
+# RRA:MAX:0.5:288:732            # 1 day samples
+#
+# 
+
+use English;
+use strict;
+
+require "ctime.pl";
+
+use RRDs;
+
+my $DEBUG=0;
+
+&main;
+
+sub main {
+
+    my($inBytes, $outBytes);
+    my($lastRunDate, $firstRunDate);
+    my($i, $dataFile, $firstRun);
+    my($oldestRun, $lastRun);
+    my($curTime, $oldestTime, $totRec);
+    my($avgIn, $avgOut, $maxIn, $maxOut);
+    my(@lines, @finalRecs);
+    my($RRD, $START, $destDir, $dsType);
+
+#
+# get the logfile name to process
+# the default is to strip out the .log extension and create
+# a new file with the extension .rrd
+#
+
+    $dataFile=$ARGV[0];
+
+    $destDir = $ARGV[1];
+
+#
+# strip off .log from file name - complain and die if no .log
+# in the filename
+#
+
+    if ($dataFile =~ /(.*)\.log$/) {
+       $RRD = "$1";
+    }
+
+    if ($RRD eq "") {
+       printf("Usage: log2rrd [log file] [destination dir]\n");
+       exit;
+    }
+
+#
+# strip out path info (if present) to get at just the filename
+#
+
+    if ($RRD =~ /(.*)\/(.*)$/){
+       $RRD = "$2";
+    }
+
+#
+# add the destination path (if present) and .rrd suffix
+#
+
+    if ($destDir){
+       $RRD = "$destDir/$RRD.rrd";
+
+    }else{
+       $RRD = "$RRD.rrd";
+    }
+
+    open(IN,"$dataFile") || die ("Couldn't open $dataFile");
+
+#
+# Get first line - has most current sample
+#
+
+    $_ = <IN>;
+    chop;
+    ($lastRun, $inBytes, $outBytes) = split;
+    $lastRunDate = &ctime($lastRun);
+    chop $lastRunDate;
+
+    $firstRun = $lastRun;
+    $i=2;
+
+#
+# start w/line 2 and read them into the lines array
+# (2nd line is in position 2)
+#
+    while (<IN>) {
+       chop;
+       $lines[$i++] = $_;
+       ($curTime) = split;
+       if ($curTime < $firstRun) {
+           $firstRun = $curTime;
+       }
+    }
+    close(IN);
+
+#
+#  Let's say source start time is 5 minutes before 1st sample
+#
+
+    $START=$firstRun - 300;
+    print STDERR "\$START = $START\n" if $DEBUG>1;
+
+    $firstRunDate = &ctime($firstRun);
+    chop $firstRunDate;
+
+    printf("Data from $firstRunDate\n       to $lastRunDate\n") if $DEBUG>0;
+
+    $oldestTime=$lastRun;
+#
+# OK- sort through the data and put it in a new array.
+# This gives us a chance to find errors in the log files and
+# handles any overlap of data (there shouldn't be any)
+#
+# NOTE: We start w/ record # 3, not #2 since #2 could be partial
+#
+
+    for ($i=3; $i <= 2533; $i++) {
+
+       ($curTime, $avgIn, $avgOut, $maxIn, $maxOut) = split(/\s+/, $lines[$i]);
+
+       if ($curTime < $oldestTime) {
+
+#
+# only add data if older than anything already in array
+# this should always be true, just checking
+#
+
+           $oldestTime = $curTime;
+           $finalRecs[$totRec++]=$lines[$i];
+       }
+    }
+
+
+    PopulateRRD($totRec, $RRD, $START, \@finalRecs);
+
+#
+# if you know that most of your MRTG logfiles are using
+# counter data, uncomment the following lines to automatically
+# run rrdtune and change the data type.
+#
+#    my(@tuneparams) = ("$RRD", "-d", "ds0:COUNTER", "-d", "ds1:COUNTER");
+#    RRDs::tune(@tuneparams);
+
+
+}
+
+sub PopulateRRD {
+
+    my($totRec, $RRD, $START, $finalRecs) = @_;
+    my($i, $curTime, $avgIn, $avgOut, $maxIn, $maxOut);
+    my($saveReal, $line);
+    my($createret, $updret);
+
+    print "* Creating RRD $RRD\n\n" if $DEBUG>0;
+
+#
+# We'll create RRAs for both AVG and MAX. MAX isn't currently filled but 
+# may be later
+#
+
+    RRDs::create ("$RRD", "-b", $START, "-s", 300,
+    "DS:ds0:GAUGE:86400:U:U",
+    "DS:ds1:GAUGE:86400:U:U",
+    "RRA:AVERAGE:0.5:1:600",
+    "RRA:MAX:0.5:1:600",
+    "RRA:AVERAGE:0.5:6:600",
+    "RRA:MAX:0.5:6:600",
+    "RRA:AVERAGE:0.5:24:600",
+    "RRA:MAX:0.5:24:600",
+    "RRA:AVERAGE:0.5:288:600",
+    "RRA:MAX:0.5:288:600");
+
+    if (my $error = RRDs::error()) {
+       print "Cannot create $RRD: $error\n";
+    }
+
+
+    print "* Adding entries to $RRD\n\n" if $DEBUG>0;
+
+    for ($i=$totRec - 1; $i >= 0; $i--) {
+
+       ($curTime, $avgIn, $avgOut, $maxIn, $maxOut) = split(/\s+/, @$finalRecs[$i]);
+
+        RRDs::update ("$RRD", "$curTime:$avgIn:$avgOut");
+
+       if (my $error = RRDs::error()) {
+           print "Cannot update $RRD: $error\n";
+       }
+
+  
+# NOTE: Need to add checking on RRDread and include the Max values
+# print status every now and then
+#      print $i if $i % 25 && $DEBUG>0;
+#      print "$i\n";
+
+    }
+
+}
diff --git a/contrib/log2rrd/log2rrd.pl.in b/contrib/log2rrd/log2rrd.pl.in
new file mode 100755 (executable)
index 0000000..fcd562d
--- /dev/null
@@ -0,0 +1,231 @@
+#! @PERL@
+#
+# Log 2 RRD.  This script translates a MRTG 2.x log file
+# into a RRD archive.  The original version was written by
+# Wrolf Courtney <wrolf@concentric.net> and
+# Russ Wright <wright@LBL.Gov> with an early test version
+# of RRDTOOL (mrtg-19980526.08) and has been modified to match
+# the parameters of rrdtool version 99.23 by Alan Lichty at
+# Electric Lightwave, Inc. <alichty@eli.net>.
+#
+# this script optimized for being called up by another script
+# that cycles through a list of routers and invokes this for each
+# interface.  It can be run just as easily from a command line for
+# small numbers of logfiles.
+#
+# The RRD we create looks like the following:  Note
+# that we have to use type GAUGE in order to have RRDTOOL
+# populate the new rr archive correctly.  Otherwise RRDTOOL will try 
+# to interpet the data as new octet counts instead of existing
+# data rate averages.
+#
+# DS:GAUGE:86400:U:U           # in counter
+# DS:GAUGE:86400:U:U           # out counter
+# RRA:AVERAGE:0.5:1:600                # 5 minute samples
+# RRA:MAX:0.5:1:600            # 5 minute samples
+# RRA:AVERAGE:0.5:6:600                # 30 minute samples
+# RRA:MAX:0.5:6:600            # 30 minute samples
+# RRA:AVERAGE:0.5:24:600               # 2 hour samples
+# RRA:MAX:0.5:24:600           # 2 hour samples
+# RRA:AVERAGE:0.5:288:732      # 1 day samples
+# RRA:MAX:0.5:288:732            # 1 day samples
+#
+# 
+
+use English;
+use strict;
+
+require "ctime.pl";
+
+use RRDs;
+
+my $DEBUG=0;
+
+&main;
+
+sub main {
+
+    my($inBytes, $outBytes);
+    my($lastRunDate, $firstRunDate);
+    my($i, $dataFile, $firstRun);
+    my($oldestRun, $lastRun);
+    my($curTime, $oldestTime, $totRec);
+    my($avgIn, $avgOut, $maxIn, $maxOut);
+    my(@lines, @finalRecs);
+    my($RRD, $START, $destDir, $dsType);
+
+#
+# get the logfile name to process
+# the default is to strip out the .log extension and create
+# a new file with the extension .rrd
+#
+
+    $dataFile=$ARGV[0];
+
+    $destDir = $ARGV[1];
+
+#
+# strip off .log from file name - complain and die if no .log
+# in the filename
+#
+
+    if ($dataFile =~ /(.*)\.log$/) {
+       $RRD = "$1";
+    }
+
+    if ($RRD eq "") {
+       printf("Usage: log2rrd [log file] [destination dir]\n");
+       exit;
+    }
+
+#
+# strip out path info (if present) to get at just the filename
+#
+
+    if ($RRD =~ /(.*)\/(.*)$/){
+       $RRD = "$2";
+    }
+
+#
+# add the destination path (if present) and .rrd suffix
+#
+
+    if ($destDir){
+       $RRD = "$destDir/$RRD.rrd";
+
+    }else{
+       $RRD = "$RRD.rrd";
+    }
+
+    open(IN,"$dataFile") || die ("Couldn't open $dataFile");
+
+#
+# Get first line - has most current sample
+#
+
+    $_ = <IN>;
+    chop;
+    ($lastRun, $inBytes, $outBytes) = split;
+    $lastRunDate = &ctime($lastRun);
+    chop $lastRunDate;
+
+    $firstRun = $lastRun;
+    $i=2;
+
+#
+# start w/line 2 and read them into the lines array
+# (2nd line is in position 2)
+#
+    while (<IN>) {
+       chop;
+       $lines[$i++] = $_;
+       ($curTime) = split;
+       if ($curTime < $firstRun) {
+           $firstRun = $curTime;
+       }
+    }
+    close(IN);
+
+#
+#  Let's say source start time is 5 minutes before 1st sample
+#
+
+    $START=$firstRun - 300;
+    print STDERR "\$START = $START\n" if $DEBUG>1;
+
+    $firstRunDate = &ctime($firstRun);
+    chop $firstRunDate;
+
+    printf("Data from $firstRunDate\n       to $lastRunDate\n") if $DEBUG>0;
+
+    $oldestTime=$lastRun;
+#
+# OK- sort through the data and put it in a new array.
+# This gives us a chance to find errors in the log files and
+# handles any overlap of data (there shouldn't be any)
+#
+# NOTE: We start w/ record # 3, not #2 since #2 could be partial
+#
+
+    for ($i=3; $i <= 2533; $i++) {
+
+       ($curTime, $avgIn, $avgOut, $maxIn, $maxOut) = split(/\s+/, $lines[$i]);
+
+       if ($curTime < $oldestTime) {
+
+#
+# only add data if older than anything already in array
+# this should always be true, just checking
+#
+
+           $oldestTime = $curTime;
+           $finalRecs[$totRec++]=$lines[$i];
+       }
+    }
+
+
+    PopulateRRD($totRec, $RRD, $START, \@finalRecs);
+
+#
+# if you know that most of your MRTG logfiles are using
+# counter data, uncomment the following lines to automatically
+# run rrdtune and change the data type.
+#
+#    my(@tuneparams) = ("$RRD", "-d", "ds0:COUNTER", "-d", "ds1:COUNTER");
+#    RRDs::tune(@tuneparams);
+
+
+}
+
+sub PopulateRRD {
+
+    my($totRec, $RRD, $START, $finalRecs) = @_;
+    my($i, $curTime, $avgIn, $avgOut, $maxIn, $maxOut);
+    my($saveReal, $line);
+    my($createret, $updret);
+
+    print "* Creating RRD $RRD\n\n" if $DEBUG>0;
+
+#
+# We'll create RRAs for both AVG and MAX. MAX isn't currently filled but 
+# may be later
+#
+
+    RRDs::create ("$RRD", "-b", $START, "-s", 300,
+    "DS:ds0:GAUGE:86400:U:U",
+    "DS:ds1:GAUGE:86400:U:U",
+    "RRA:AVERAGE:0.5:1:600",
+    "RRA:MAX:0.5:1:600",
+    "RRA:AVERAGE:0.5:6:600",
+    "RRA:MAX:0.5:6:600",
+    "RRA:AVERAGE:0.5:24:600",
+    "RRA:MAX:0.5:24:600",
+    "RRA:AVERAGE:0.5:288:600",
+    "RRA:MAX:0.5:288:600");
+
+    if (my $error = RRDs::error()) {
+       print "Cannot create $RRD: $error\n";
+    }
+
+
+    print "* Adding entries to $RRD\n\n" if $DEBUG>0;
+
+    for ($i=$totRec - 1; $i >= 0; $i--) {
+
+       ($curTime, $avgIn, $avgOut, $maxIn, $maxOut) = split(/\s+/, @$finalRecs[$i]);
+
+        RRDs::update ("$RRD", "$curTime:$avgIn:$avgOut");
+
+       if (my $error = RRDs::error()) {
+           print "Cannot update $RRD: $error\n";
+       }
+
+  
+# NOTE: Need to add checking on RRDread and include the Max values
+# print status every now and then
+#      print $i if $i % 25 && $DEBUG>0;
+#      print "$i\n";
+
+    }
+
+}
diff --git a/contrib/php3/INSTALL b/contrib/php3/INSTALL
new file mode 100644 (file)
index 0000000..25903fd
--- /dev/null
@@ -0,0 +1,16 @@
+Installation:
+
+  You'll want to have the following sources available somewhere:
+        php
+        rrdtool
+        apache (if you built php as a DSO)
+
+  Edit the *INCLUDE and *LIB variables in the Makefile to indicate
+the correct locations for your files.
+
+  After php3_rrdtool.so builds correctly, copy this file to wherever
+you'd like.  Possibly APACHE_ROOT/libexec/ .
+
+
+
+After you install, you should probably read README and API.
diff --git a/contrib/php3/Makefile b/contrib/php3/Makefile
new file mode 100644 (file)
index 0000000..f65f282
--- /dev/null
@@ -0,0 +1,72 @@
+# code by Joey Miller <joeym@inficad.com>
+#
+#
+# BEFORE COMPILING YOU MUST SET THE VARIABLES BELOW
+# TO INDICATE THE CORRECT DIRECTORIES!!!!!!!!!!!!!!!!!!!!!
+#
+#
+# USE AT YOUR OWN RISK!
+#
+
+## begin configurable vars
+
+## PHPINCLUDE -- the directory where php is untarred
+##
+PHPINCLUDE =  -I/usr/home/joeym/apache_build/php-3.0.14
+
+## PHPLIBS -- the directory where you can find some of the PHP objects
+## and compiled libs (the directory where php is untarred, and
+## has already been compiled!
+##
+PHPLIBS    =  /usr/home/joeym/apache_build/php-3.0.14
+
+## RRDINCLUDE, GDINCLUDE -- where to find some of the header
+## files needed by rrdtool and it's libs
+##
+RRDINCLUDE =  -I/usr/home/joeym/newshit/rrdtool-1.0.10/src
+GDINCLUDE  =  -I/usr/home/joeym/newshit/rrdtool-1.0.10/gd1.3
+
+## RRDLIB -- where to find librrd.a (usually /usr/local/rrdtool-1.0.10/lib)
+RRDLIB    =    /usr/local/rrdtool-1.0.10/lib
+
+#
+# if php is compiled as an apache module
+#
+APACHEINC = -I/var/www/include
+
+
+
+###### end primary config vars  .. change the vars below only
+###### if you need to
+######
+
+
+
+
+CFLAGS = -O -fpic
+CC     = gcc
+
+CXX    = g++
+CXXFLAGS= $(CFLAGS)
+
+LD     = cc
+LDFLAGS        = -shared
+
+RM     = /bin/rm
+
+OBJS    =  php3_rrdtool.o
+CFLAGS := $(CFLAGS) -I../lib $(PHPINCLUDE) $(APACHEINC) $(RRDINCLUDE) $(GDINCLUDE)
+CXXFLAGS:= $(CXXFLAGS) -I../lib $(PHPINCLUDE) $(APACHEINC) $(RRDINCLUDE) $(GDINCLUDE)
+LIBS   := -L$(RRDLIB) -L$(PHPLIBS) -lrrd 
+
+all: php3_rrdtool.so
+
+php3_rrdtool.so: $(OBJS)
+       $(LD) $(LDFLAGS) $(OBJS) -o $@ $(LIBS)
+
+clean:
+       $(RM) *.o
+       $(RM) *.so
+       
+veryclean: clean
+       $(RM) *~
diff --git a/contrib/php3/README b/contrib/php3/README
new file mode 100644 (file)
index 0000000..e13ba46
--- /dev/null
@@ -0,0 +1,43 @@
+
+PHP bindings for RRD Tool.
+
+       Contained herein are bindings to allow you to interface
+php scripts with RRD tool directly via RRD tool's 'librrd' library,
+thus avoiding the need to use system() calls to the rrdtool binary.
+
+       RRD Tool is an AMAZING package of tools to faciliate
+the easy storage, retrieval, and graphing of statistics (usually
+but not limited to bit/byte counts from routers, switches, and 
+hubs).  It was written by the author of MRTG, Tobias Oetiker
+(oetiker@ee.ethz.ch).  The primary web site for RRD Tool is:
+http://www.caida.org/Tools/RRDtool
+
+
+Reason I wrote this:  Wanted to use PHP to create fairly real-time / 
+dynamic web pages w/ RRD tool, but the only way was to use system()
+and popen() with PHP, since there was no direct interface to RRD
+Tool from PHP.  The fork()ing would have been slow and tedious
+so that was pretty much out of the question.  I could have used the 
+Perl library (RRDs) to interface ePerl, or mod_perl, or even 
+'rrdcgi', but I didn't really want to.  I wanted to use PHP and
+there was nothing to change my mind.
+
+
+You are free to redistribute the source provided my name is
+kept at the top of the source files as credit for the original
+author.  I make no warranties to the usability of this software,
+nor I am responsible if your machine explodes (although it 
+shouldn't).
+
+
+BUGS:
+     There might be some.  Let me know: joeym@inficad.com.  
+Patches to fix bugs you find are more welcome than simple
+reports of bugs (I don't have a lot of time to maintain
+this code).
+
+
+http://netmon.inficad.com/php3_rrdtool/
+
+Joey Miller, <joeym@inficad.com>, SkyLynx / Inficad Communications,
+2/12/2000
diff --git a/contrib/php3/USAGE b/contrib/php3/USAGE
new file mode 100644 (file)
index 0000000..11f3f77
--- /dev/null
@@ -0,0 +1,156 @@
+--------------------------------------------------
+Usage:
+
+
+  To use the 'php3_rrdtool.so' module, you need to load it in your
+PHP script before you call any of the rrd_* functions.
+
+This can be achieved with a simple command:
+
+    <?   dl("/path/to/php3_rrdtool.so");  ?>
+
+After this is loaded, you have access to all the rrd_* commands 
+contained in 'php3_rrdtool.so'.
+
+
+
+API:
+
+--------------------------------------------------------------------
+string rrd_error()
+
+       rrd_error takes no arguments.
+
+       Use this function to retrieve the error message from
+the last rrd_* function that was called and failed.
+
+       If an error was set, a string will be returned.  
+
+       If no error was set, a blank string will be returned.
+
+
+
+
+--------------------------------------------------------------------
+int rrd_last(string filename)
+
+       rrd_last takes only one argument, a filename of an RRD
+file.  
+
+       If rrd_last is successful in obtaining the last modifiation
+time of the file, a date will be returned in the form of the
+number of seconds from the unix epoch (Jan 1, 1970, 00:00:00).
+You can then use any of php's excellent time functions on this
+value.
+
+       If rrd_last is not sucessful, a value of 0 will be returned,
+and the internal rrd error will be set.  You can access this error
+message via the rrd_error() function (if one was set).
+
+--------------------------------------------------------------------
+int rrd_update(string filename, string options)
+
+       rrd_update takes 2 arguments, a filename of an RRD file
+and a string with options to fill the RRD file with.
+
+       It has been designed to work similary to the rrd_update
+call in the RRDs perl library.
+
+Example:  $result = rrd_update("/some.rrd", "N:123:9873:235");
+       If rrd_update is successful, 1 is returned. 
+
+       If rrd_update is not successful, 0 is returned, and an
+error message should be obtainable by called 'rrd_error()'.
+
+
+--------------------------------------------------------------------
+int rrd_create(string filename, array options, int num_of_elements)
+
+       rrd_create takes 3 arguments, a filename of an RRD file to
+create, an array of options (exactly like you would pass in the RRDs 
+perl library, or on the command line to 'rrdtool'), and the last 
+argument is the number of elements in the array of options.  This 
+can be obtained by simply calling " count($opt_array) ".  See the 
+example scripts for a more clear example.
+
+       If rrd_update is successful, 1 is returned. 
+
+       If rrd_update is not successful, 0 is returned, and an
+error message should be obtainable by called 'rrd_error()'.
+
+
+
+--------------------------------------------------------------------
+mixed rrd_graph(string filename, array options, int num_of_elements) 
+
+       rrd_graph takes 3 arguments, a filename of an RRD file,
+an array of options (exactly like you would pass in the RRDs perl
+library, or on the command line to 'rrdtool'), and the last argument
+is the number of elements in the array of options.  This can be 
+obtained by simply calling " count($opt_array) ".  See the example
+scripts for a more clear example.
+
+
+       If rrd_graph is successful, an array is returned.  The
+array is an associate array with 3 values:
+
+$array[xsize]  -  The size of the image along the X axis.
+$array[ysize]  -  The size of the image along the Y axis.
+$array[calcpr] -  This is actually another array, that will contain
+                  the results of any PRINT statements.
+
+
+       If rrd_graph is not successful, a 0 is returned.
+
+IMPORTANT NOTE:  In order for php not to complain about mis-using
+the return value, it is important that you check the type of the
+return value.  use the " is_array() " function to check if the 
+returned value is an array (in which case rrd_graph was successful),
+or not an array (meaning rrd_graph was NOT successful).  See the
+examples for an illustration of this.
+
+
+--------------------------------------------------------------------
+mixed rrd_fetch(string filename, array options, int num_of_elements) 
+
+       rrd_fetch takes 3 arguments, a filename of an RRD file,
+an array of options (exactly like you would pass in the RRDs perl
+library, or on the command line to 'rrdtool'), and the last argument
+is the number of elements in the array of options.  This can be 
+obtained by simply calling " count($opt_array) ".  See the example
+scripts for a more clear example.
+
+
+       If rrd_fetch is successful, an array is returned.  The
+array is an associate array with 5 values:
+
+$array[start]   -  This is the start time of the data returned 
+                   (unix epoch timestamp format)
+$array[end]     -  This is the end time of the data returned
+                   (unix epoch timestamp format)
+$array[step]    -  This is the step interval of the data returned,
+                   in number of seconds.
+$array[ds_cnt]  -  This is the number of DS's returned from the
+                   RRD file.
+$array[ds_namv] -  This is an array with the names of the DS's
+                   returned from the RRD file.
+$array[data]    -  This is an array with all the values fetch'd
+                   from the rrd file by rrd_fetch.
+
+(This is very similar to the way rrd_fetch() in the RRDs
+perl library works, as well as the C function rrd_fetch()).
+
+       If rrd_fetch is not successful, a 0 is returned.
+
+IMPORTANT NOTE:  In order for php not to complain about mis-using
+the return value, it is important that you check the type of the
+return value.  use the " is_array() " function to check if the 
+returned value is an array (in which case rrd_fetch was successful),
+or not an array (meaning rrd_fetch was NOT successful).  See the
+examples for an illustration of this.
+
+
+--------------------------------------------------------------------
+
diff --git a/contrib/php3/VERSION b/contrib/php3/VERSION
new file mode 100644 (file)
index 0000000..ac39a10
--- /dev/null
@@ -0,0 +1 @@
+0.9.0
diff --git a/contrib/php3/examples/rrd_create.php b/contrib/php3/examples/rrd_create.php
new file mode 100644 (file)
index 0000000..7167242
--- /dev/null
@@ -0,0 +1,27 @@
+<?
+
+ dl("/tmp/php3_rrdtool.so");
+
+ ##
+ ## demonstration of the rrd_create() command
+ ##
+
+  $_opts = array( "--step", "300", "--start", 0,
+                 "DS:input:COUNTER:900:0:U",
+                 "DS:output:COUNTER:900:0:U",
+                 "RRA:AVERAGE:0.5:1:1000",
+                 "RRA:MIN:0.5:1:1000",
+                 "RRA:MAX:0.5:1:1000"
+               );
+
+  $ret = rrd_create("/tmp/test.rrd", $_opts, count($_opts));
+
+  if ( $ret == -1 )
+  {
+      $err = rrd_error();
+      echo "Create error: $err\n";
+  }
+  /*  else rrd_create was successful  */
+
+
+?>
diff --git a/contrib/php3/examples/rrd_fetch.php b/contrib/php3/examples/rrd_fetch.php
new file mode 100644 (file)
index 0000000..84a34bc
--- /dev/null
@@ -0,0 +1,51 @@
+<?
+
+ dl("/tmp/php3_rrdtool.so");
+
+ ##
+ ## demonstration of the rrd_fetch() command
+ ##
+
+
+
+  $opts = array ( "AVERAGE", "--start", "-1h" );
+
+  $ret = rrd_fetch("/dir/router-port2.rrd", $opts, count($opts));
+  ##
+  ## if $ret is an array, rrd_fetch() succeeded
+  ## 
+  if ( is_array($ret) )
+  {
+      echo "Start time    (epoch): $ret[start]\n";
+      echo "End time      (epoch): $ret[end]\n";
+      echo "Step interval (epoch): $ret[step]\n";
+
+      ##
+      ## names of the DS's (data sources) will be 
+      ## contained in the array $ret[ds_namv][..]
+      ##
+      for($i = 0; $i < count($ret[ds_namv]); $i++)
+      {
+          $tmp = $ret[ds_namv][$i];
+          echo "$tmp \n";
+      }
+
+      ##
+      ## all data will be packed into the
+      ## $ret[data][..]  array
+      ##
+      for($i = 0; $i < count($ret[data]); $i++)
+      {
+          $tmp = $ret[data][$i];
+          echo "$hi\n";
+      }
+  }
+  else
+  {
+      $err = rrd_error();
+      echo "fetch() ERROR: $err\n";
+  }
+
+
+?>
diff --git a/contrib/php3/examples/rrd_graph.php b/contrib/php3/examples/rrd_graph.php
new file mode 100644 (file)
index 0000000..3ce8094
--- /dev/null
@@ -0,0 +1,43 @@
+<?
+
+ dl("/tmp/php3_rrdtool.so");
+
+ ##
+ ## demonstration of the rrd_graph() command
+ ##
+
+   $opts = array( "--start", "-4d", 
+                  "DEF:in=/dir/router-port2.rrd:input:AVERAGE",
+                  "DEF:out=/dir/router-port2.rrd:output:AVERAGE",
+                  "LINE2:in#0000ff:Incoming Traffic Avg.",
+                  "PRINT:in:AVERAGE:incoming\: %1.2lf b/s",
+                  "PRINT:in:AVERAGE:incoming2\: %1.2lf b/s"
+                );
+
+
+   $ret = rrd_graph("/some-dir/router-port2.gif", $opts, count($opts));
+
+   ##
+   ## if $ret is an array, then rrd_graph was successful
+   ##
+   if ( is_array($ret) )
+   {
+       echo "Image size:  $ret[xsize] x $ret[ysize]\n";
+       
+
+       ##
+       ## all results from any PRINT commands will be
+       ## in the array $ret[calcpr][..]
+       ##
+       echo "rrd_graph1 print results: \n";
+
+       for ($i = 0; $i < count($ret[calcpr]); $i++)
+           echo $ret[calcpr][$i] . "\n";
+   }
+   else
+   {
+       $err = rrd_error();
+       echo "rrd_graph() ERROR: $err\n";
+   }
+
+?>
diff --git a/contrib/php3/examples/rrd_last.php b/contrib/php3/examples/rrd_last.php
new file mode 100644 (file)
index 0000000..928a17b
--- /dev/null
@@ -0,0 +1,22 @@
+<?
+
+ dl("/tmp/php3_rrdtool.so");
+
+ ##
+ ## demonstration of the rrd_last() command
+ ##
+
+ $ret = rrd_last("/some/path/some-router-fe2.rrd");
+
+ if ( $ret != - 1 )
+ {
+     printf("Last update time:  %s\n", strftime("%m/%d/%Y %H:%M:%S");
+ }
+ else
+ {
+     $err_msg = rrd_error();
+     echo "Error occurred:  $err_msg\n";
+ }
+
+
+?>
diff --git a/contrib/php3/examples/rrd_update.php b/contrib/php3/examples/rrd_update.php
new file mode 100644 (file)
index 0000000..dce3a97
--- /dev/null
@@ -0,0 +1,19 @@
+<?
+
+ dl("/tmp/php3_rrdtool.so");
+
+ ##
+ ## demonstration of the rrd_update() command
+ ##
+
+  $ret = rrd_update("/some/file.rrd", "N:1245:98344");
+
+  if ( $ret == -1 )
+  {
+      $err = rrd_error();
+      echo "ERROR occurred: $err\n";
+  }
+ /* else rrd_update() was successful */
+
+
+?>
diff --git a/contrib/php3/php3_rrdtool.c b/contrib/php3/php3_rrdtool.c
new file mode 100644 (file)
index 0000000..cf2a867
--- /dev/null
@@ -0,0 +1,416 @@
+/*
+ *
+ * php3_rrdtool.c
+ *
+ *     PHP interface to RRD Tool.
+ *
+ *
+ *       Joey Miller, <joeym@inficad.com> 
+ *          SkyLynx / Inficad Communications
+ *          2/12/2000
+ *
+ *
+ * See README, INSTALL, and USAGE files for more details.
+ *
+ */
+
+#include "dl/phpdl.h"
+#include "rrd_tool.h"
+#include "php3_rrdtool.h"
+
+
+/* {{{ proto string rrd_error(void)
+   Get the error message set by the last rrd tool function call */
+
+void php3_rrd_error(INTERNAL_FUNCTION_PARAMETERS)
+{
+    char *msg;
+
+    if ( rrd_test_error() )
+    {
+        msg = rrd_get_error();        
+
+        RETVAL_STRING(msg, 1);
+        rrd_clear_error();
+    }
+    else
+        return;
+}
+/* }}} */
+
+
+
+/* {{{ proto void rrd_clear_error(void)
+   Clear the error set by the last rrd tool function call */
+
+void php3_rrd_clear_error(INTERNAL_FUNCTION_PARAMETERS)
+{
+    if ( rrd_test_error() )
+        rrd_clear_error();
+
+    return;
+}
+/* }}} */
+
+
+
+/* {{{ proto int rrd_update(string file, string opt) 
+   Update an RRD file with values specified */
+
+void php3_rrd_update(INTERNAL_FUNCTION_PARAMETERS)
+{
+    pval *file, *opt;
+    char **argv;
+
+    if ( rrd_test_error() )
+        rrd_clear_error();
+
+    if ( ARG_COUNT(ht) == 2 && 
+         getParameters(ht, 2, &file, &opt) == SUCCESS )
+    {
+        convert_to_string(file);
+        convert_to_string(opt);
+
+        argv = (char **) emalloc(4 * sizeof(char *));
+
+        argv[0] = "dummy";
+        argv[1] = estrdup("update");
+        argv[2] = estrdup(file->value.str.val);
+        argv[3] = estrdup(opt->value.str.val);
+
+        optind = 0; opterr = 0;
+        if ( rrd_update(3, &argv[1]) != -1 )
+        {
+            RETVAL_TRUE;
+        }
+        else
+        {
+            RETVAL_FALSE;
+        }
+        efree(argv[1]); efree(argv[2]); efree(argv[3]);
+        efree(argv);
+    }
+    else
+    {
+        WRONG_PARAM_COUNT;
+    }
+    return;
+}
+/* }}} */
+
+
+
+/* {{{ proto int rrd_last(string file)
+   Gets last update time of an RRD file */
+
+void php3_rrd_last(INTERNAL_FUNCTION_PARAMETERS)
+{
+    pval *file;
+    unsigned long retval;
+
+    char **argv = (char **) emalloc(3 * sizeof(char *));
+    
+    if ( rrd_test_error() )
+        rrd_clear_error();
+    
+    if (getParameters(ht, 1, &file) == SUCCESS)
+    {
+        convert_to_string(file);
+
+        argv[0] = "dummy";
+        argv[1] = estrdup("last");
+        argv[2] = estrdup(file->value.str.val);
+
+        optind = 0; opterr = 0;
+        retval = rrd_last(2, &argv[1]);
+
+        efree(argv[1]);  efree(argv[2]);
+        efree(argv);
+        RETVAL_LONG(retval);
+    }
+    else
+    {
+        WRONG_PARAM_COUNT;
+    }
+    return;
+}
+/* }}} */
+
+
+/* {{{ proto int rrd_create(string file, array args_arr, int argc)
+   Create an RRD file with the options passed (passed via array) */ 
+
+void php3_rrd_create(INTERNAL_FUNCTION_PARAMETERS)
+{
+    pval *file, *args_arr, *p_argc;
+    pval *entry;
+    char **argv;
+    int argc, i;
+
+    if ( rrd_test_error() )
+        rrd_clear_error();
+
+    if ( ARG_COUNT(ht) == 3 && getParameters(ht, 3, &file, &args_arr, &p_argc) == SUCCESS )
+    {
+        if ( args_arr->type != IS_ARRAY )
+        { 
+            php3_error(E_WARNING, "2nd Variable passed to rrd_create is not an array!\n");
+            RETURN_FALSE;
+        }
+
+        convert_to_long(p_argc);
+        convert_to_string(file);
+
+        argc = p_argc->value.lval + 3;
+        argv = (char **) emalloc(argc * sizeof(char *));
+
+        argv[0] = "dummy";
+        argv[1] = estrdup("create");
+        argv[2] = estrdup(file->value.str.val);
+
+        for (i = 3; i < argc; i++) 
+        {
+            if ( _php3_hash_get_current_data(args_arr->value.ht, (void **) &entry) == FAILURE )
+                continue;
+
+            if ( entry->type != IS_STRING )
+                convert_to_string(entry);
+
+            argv[i] = estrdup(entry->value.str.val);
+
+            if ( i < argc )
+                _php3_hash_move_forward(args_arr->value.ht);
+        }
+  
+        optind = 0;  opterr = 0;
+
+        if ( rrd_create(argc-1, &argv[1]) != -1 )
+        {
+            RETVAL_TRUE;
+        }
+        else
+        {
+            RETVAL_FALSE;
+        }
+        for (i = 1; i < argc; i++)
+            efree(argv[i]);
+
+        efree(argv);
+    }
+    else
+    {
+        WRONG_PARAM_COUNT;
+    }
+    return;
+}
+/* }}} */
+
+
+
+/* {{{ proto mixed rrd_graph(string file, array args_arr, int argc)
+   Creates a graph based on options passed via an array */
+
+void php3_rrd_graph(INTERNAL_FUNCTION_PARAMETERS)
+{
+    pval *file, *args_arr, *p_argc;
+    pval *entry, p_calcpr;
+    int i, xsize, ysize, argc;
+    char **argv, **calcpr;
+    
+    if ( rrd_test_error() )
+        rrd_clear_error();
+    
+    if ( ARG_COUNT(ht) == 3 && 
+         getParameters(ht, 3, &file, &args_arr, &p_argc) == SUCCESS)
+    {
+        if ( args_arr->type != IS_ARRAY )
+        { 
+            php3_error(E_WARNING, "2nd Variable passed to rrd_graph is not an array!\n");
+            RETURN_FALSE;
+        }
+        
+        convert_to_long(p_argc);
+        convert_to_string(file);
+
+        argc = p_argc->value.lval + 3;
+        argv = (char **) emalloc(argc * sizeof(char *));
+        argv[0] = "dummy";
+        argv[1] = estrdup("graph");
+        argv[2] = estrdup(file->value.str.val);
+
+        for (i = 3; i < argc; i++) 
+        {
+            if ( _php3_hash_get_current_data(args_arr->value.ht, (void **) &entry) == FAILURE 
+                 || entry->type != IS_STRING )
+            {  
+                continue;
+            }
+            argv[i] = estrdup(entry->value.str.val);
+
+            if ( i < argc )
+                _php3_hash_move_forward(args_arr->value.ht);
+        }
+   
+        optind = 0; opterr = 0; 
+        if ( rrd_graph(argc-1, &argv[1], &calcpr, &xsize, &ysize) != -1 )
+        {
+            array_init(return_value);
+            add_assoc_long(return_value, "xsize", xsize);
+            add_assoc_long(return_value, "ysize", ysize);
+
+            array_init(&p_calcpr);
+    
+            if (calcpr)
+            {
+                for (i = 0; calcpr[i]; i++)
+                {
+                    add_next_index_string(&p_calcpr, calcpr[i], 1);
+                    free(calcpr[i]);
+                }
+                free(calcpr);
+            }
+            _php3_hash_update(return_value->value.ht, "calcpr", sizeof("calcpr"), 
+                              &p_calcpr, sizeof(pval), NULL);
+        }
+        else
+        {
+            RETVAL_FALSE;
+        }
+        for (i = 1; i < argc; i++)
+            efree(argv[i]);
+
+        efree(argv);
+    }
+    else
+    { 
+        WRONG_PARAM_COUNT;
+    }
+    return;
+}
+/* }}} */
+
+
+
+/* {{{ proto mixed rrd_fetch(string file, array args_arr, int p_argc)
+   Fetch info from an RRD file */
+
+void php3_rrd_fetch(INTERNAL_FUNCTION_PARAMETERS)
+{
+    pval *file, *args_arr, *p_argc;
+    pval *entry;
+    pval *p_start, *p_end, *p_step, *p_ds_cnt, p_ds_namv, p_data;
+    int i, argc;
+    time_t start, end;
+    unsigned long step, ds_cnt;
+    char **argv, **ds_namv; 
+    rrd_value_t *data, *datap;
+    
+    if ( rrd_test_error() )
+        rrd_clear_error();
+    
+    if ( ARG_COUNT(ht) == 3 && 
+         getParameters(ht, 3, &file, &args_arr, &p_argc) == SUCCESS)
+    {
+        if ( args_arr->type != IS_ARRAY )
+        { 
+            php3_error(E_WARNING, "2nd Variable passed to rrd_fetch is not an array!\n");
+            RETURN_FALSE;
+        }
+        
+        convert_to_long(p_argc);
+        convert_to_string(file);
+
+        argc = p_argc->value.lval + 3;
+        argv = (char **) emalloc(argc * sizeof(char *));
+        argv[0] = "dummy";
+        argv[1] = estrdup("fetch");
+        argv[2] = estrdup(file->value.str.val);
+
+        for (i = 3; i < argc; i++) 
+        {
+            if ( _php3_hash_get_current_data(args_arr->value.ht, (void **) &entry) == FAILURE 
+                 || entry->type != IS_STRING )
+            {  
+                continue;
+            }
+            argv[i] = estrdup(entry->value.str.val);
+
+            if ( i < argc )
+                _php3_hash_move_forward(args_arr->value.ht);
+        }
+  
+        optind = 0; opterr = 0; 
+
+        if ( rrd_fetch(argc-1, &argv[1], &start,&end,&step,&ds_cnt,&ds_namv,&data) != -1 )
+        {
+            array_init(return_value);
+            add_assoc_long(return_value, "start", start);
+            add_assoc_long(return_value, "end", end);
+            add_assoc_long(return_value, "step", step);
+            add_assoc_long(return_value, "ds_cnt", ds_cnt);
+
+            array_init(&p_ds_namv);
+            array_init(&p_data);
+   
+            if (ds_namv)
+            {
+                for (i = 0; i < ds_cnt; i++)
+                {
+                    add_next_index_string(&p_ds_namv, ds_namv[i], 1);
+                    free(ds_namv[i]);
+                }
+                free(ds_namv);
+            }
+
+            if (data)
+            {
+                datap = data;
+                for (i = start; i <= end; i += step)
+                    add_next_index_double(&p_data, *(datap++));
+                free(data);
+            }
+
+            _php3_hash_update(return_value->value.ht, "ds_namv", sizeof("ds_namv"), 
+                              &p_ds_namv, sizeof(pval), NULL);
+            _php3_hash_update(return_value->value.ht, "data", sizeof("data"), 
+                              &p_data, sizeof(pval), NULL);
+        }
+        else
+        {
+            RETVAL_FALSE;
+        }
+        for (i = 1; i < argc; i++)
+            efree(argv[i]);
+
+        efree(argv);
+    }
+    else
+    { 
+        WRONG_PARAM_COUNT;
+    }
+    return;
+}
+/* }}} */
+
+
+function_entry rrdtool_functions[] = {
+        {"rrd_error", php3_rrd_error, NULL},
+        {"rrd_clear_error", php3_rrd_clear_error, NULL},
+       {"rrd_graph", php3_rrd_graph, NULL},
+       {"rrd_last", php3_rrd_last, NULL},
+       {"rrd_fetch", php3_rrd_fetch, NULL},
+        {"rrd_update", php3_rrd_update, NULL},
+        {"rrd_create", php3_rrd_create, NULL},
+       {NULL, NULL, NULL}
+};
+
+
+php3_module_entry rrdtool_module_entry = {
+       "RRDTool", rrdtool_functions, NULL, NULL, NULL, NULL, NULL, 0, 0, 0, NULL
+};
+
+php3_module_entry *get_module(void) { return &rrdtool_module_entry; }
diff --git a/contrib/php3/php3_rrdtool.h b/contrib/php3/php3_rrdtool.h
new file mode 100644 (file)
index 0000000..b81520b
--- /dev/null
@@ -0,0 +1,31 @@
+#ifndef _PHP3_RRDTOOL_H
+#define _PHP3_RRDTOOL_H
+
+#if COMPILE_DL
+#undef HAVE_RRDTOOL
+#define HAVE_RRDTOOL 1
+#endif
+#ifndef DLEXPORT
+#define DLEXPORT
+#endif
+
+#if HAVE_RRDTOOL
+
+extern php3_module_entry rrdtool_module_entry;
+#define snmp_module_ptr &rrdtool_module_entry
+
+extern DLEXPORT void php3_rrd_error(INTERNAL_FUNCTION_PARAMETERS);
+extern DLEXPORT void php3_rrd_clear_error(INTERNAL_FUNCTION_PARAMETERS);
+extern DLEXPORT void php3_rrd_update(INTERNAL_FUNCTION_PARAMETERS);
+extern DLEXPORT void php3_rrd_last(INTERNAL_FUNCTION_PARAMETERS);
+extern DLEXPORT void php3_rrd_create(INTERNAL_FUNCTION_PARAMETERS);
+extern DLEXPORT void php3_rrd_graph(INTERNAL_FUNCTION_PARAMETERS);
+extern DLEXPORT void php3_rrd_fetch(INTERNAL_FUNCTION_PARAMETERS);
+
+#else
+
+#define rrdtool_module_ptr NULL
+
+#endif /* HAVE_RRDTOOL */
+
+#endif  /* _PHP3_RRDTOOL_H */
diff --git a/contrib/php4/.cvsignore b/contrib/php4/.cvsignore
new file mode 100644 (file)
index 0000000..4dffc4d
--- /dev/null
@@ -0,0 +1,7 @@
+.deps
+Makefile
+*.o
+*.lo
+*.la
+.libs
+libs.mk
diff --git a/contrib/php4/INSTALL b/contrib/php4/INSTALL
new file mode 100644 (file)
index 0000000..09143b4
--- /dev/null
@@ -0,0 +1,79 @@
+$Id$
+
+* Installing rrdtool module as a self-contained extension:
+
+There are two ways to install the rrdtool module for php4/zend.
+The first involves simply compiling the rrdtool module as a
+'self-contained extension'.  This is similar to the previous
+rrdtool module for php3 in that to use the rrd_* functions you
+must first load the module in each script that will use the
+rrd_* functions with a dl() call.  See the USAGE file for
+more info on this.
+
+To install as a self-contained extension:
+
+    1.  Install rrdtool.  (Tested with rrdtool-1.0.25)
+        Make sure you build shared and static libraries, if
+        your system lets you.  
+
+        rrdtool% ./configure --enable-shared
+
+    2.  Make sure Apache is installed.
+
+    3.  Make sure PHP4 is installed (tested with php-4.0.1pl2)
+
+    4.  Now we can build the rrdtool module.  
+
+        rrdtool-module% ./configure --with-rrdtool=/usr/local/rrdtool \
+                            --with-php-config=/usr/local/bin/php-config
+
+        'php-config' is usually installed in /usr/local/bin, and is often
+        readable/executable only by root, so you will have to run the
+        configure script as root.
+
+        rrdtool-module% make
+        rrdtool-module% make install
+
+        This should build and install 'rrdtool.so' into the correct
+        directory on your system.
+
+        Now you can access the rrd_* functions from your php4 scripts
+        by first calling "  dl("rrdtool.so"); ".  See the README and USAGE
+        for more info on the rrd_* functions.
+
+
+* Installing the rrdtool module as an embedded extension
+
+Installing rrdtool module as an embedded extension provides all of
+your php4 scripts access to the rrd_* functions without having to
+load any shared libs with the dl() function of php.  
+
+In order to install the rrdtool module as an embedded extension
+you will need to have autoconf/automake and friends installed.
+
+    1. make sure you have the php4 sources untarred somewhere, lets
+        call it /src/php-4.0.1pl2/
+
+    2. create a home for our embedded extension in the php4 source
+        tree.
+
+            % mkdir /src/php-4.0.1pl2/ext/rrdtool
+
+    3. from the rrdtool module directory, do:
+
+            % cp config.m4 Makefile.in php_rrdtool.h rrdtool.c \
+                /src/php-4.0.1pl2/ext/rrdtool/
+
+    4. Now we must recreate the configure scripts, etc for php4.
+    
+            % cd /src/php-4.0.1pl2
+            % ./buildconf
+            
+    5. If all goes well, you should be ready to run configure for
+        php4.  Make sure you include "--with-rrdtool" in the options
+        to configure.  
+
+    6. make, make install.  and you're ready to go.
+
+
+- Joe Miller, <joeym@inficad.com, joeym@ibizcorp.com>, 7/19/2000
diff --git a/contrib/php4/Makefile.in b/contrib/php4/Makefile.in
new file mode 100644 (file)
index 0000000..ccdadca
--- /dev/null
@@ -0,0 +1,8 @@
+# $Id$
+
+LTLIBRARY_NAME        = librrdtool.la
+LTLIBRARY_SOURCES     = rrdtool.c
+LTLIBRARY_SHARED_NAME = rrdtool.la
+LTLIBRARY_SHARED_LIBADD = $(RRDTOOL_SHARED_LIBADD)
+
+include $(top_srcdir)/build/dynlib.mk
diff --git a/contrib/php4/README b/contrib/php4/README
new file mode 100644 (file)
index 0000000..c665516
--- /dev/null
@@ -0,0 +1,71 @@
+$Id$
+
+UPDATES for php4:
+
+    This version of the module will only build for php4/zend.  It will
+not build for php3.  Get php3_rrdtool from the rrdtool distribution
+if you need the rrd_* functions in php3.  
+
+    The module now contains two ways to install.  The first is as
+a self-contained extension (much like the php3_rrdtool module),
+and the second is as a php4 embedded extension.  See the INSTALL
+file for instructions on how to install in both ways.
+
+    Also fixed some of the scripts in the 'examples' directory. 
+A few of them were checking the return value for -1 on some
+of the rrd_* function calls.  Most calls will return 0 or 1 to
+indicate failure or success, not -1.  Sorry about that.
+
+
+
+------------------------------------
+
+PHP bindings for RRD Tool.
+
+    Contained herein are bindings to allow you to interface
+php scripts with RRD tool directly via RRD tool's 'librrd' library,
+thus avoiding the need to use system() calls to the rrdtool binary.
+
+    RRD Tool is an AMAZING package of tools to faciliate
+the easy storage, retrieval, and graphing of statistics (usually
+but not limited to bit/byte counts from routers, switches, and 
+hubs).  It was written by the author of MRTG, Tobias Oetiker
+(oetiker@ee.ethz.ch).  The primary web site for RRD Tool is:
+http://www.caida.org/Tools/RRDtool
+
+
+Reason I wrote this:  Wanted to use PHP to create fairly real-time / 
+dynamic web pages w/ RRD tool, but the only way was to use system()
+and popen() with PHP, since there was no direct interface to RRD
+Tool from PHP.  The fork()ing would have been slow and tedious
+so that was pretty much out of the question.  I could have used the 
+Perl library (RRDs) to interface ePerl, or mod_perl, or even 
+'rrdcgi', but I didn't really want to.  I wanted to use PHP and
+there was nothing to change my mind.
+
+
+You are free to redistribute the source provided my name is
+kept at the top of the source files as credit for the original
+author.  I make no warranties to the usability of this software,
+nor I am responsible if your machine explodes (although it 
+shouldn't).
+
+
+BUGS:
+     There might be some.  Let me know: joeym@inficad.com.  
+Patches to fix bugs you find are more welcome than simple
+reports of bugs (I don't have a lot of time to maintain
+this code).
+
+       You must include OS, apache version, and method of use
+(embedded or self-contained extension) in bug reports.  This
+info is important.  Also, give as much detail and examples 
+as possible so I can figure out what is wrong =)
+
+THANKS:
+       I'd like to thank Jeroen Roodnat for generously helping 
+debug the PHP4/Zend version of this module.  
+
+
+Joe Miller, <joeym@inficad.com>,<joeym@ibizcorp.com>,
+2/12/2000  (updated: 8/28/2000)
diff --git a/contrib/php4/USAGE b/contrib/php4/USAGE
new file mode 100644 (file)
index 0000000..5495805
--- /dev/null
@@ -0,0 +1,166 @@
+$Id$
+
+--------------------------------------------------
+Usage:
+
+       Loading the rrdtool module is a little bit different with
+PHP4/Zend.  If you build the rrdtool module into PHP4 at compile
+time (see INSTALL file), then there is nothing you need to do
+in your scripts to use the rrd_* functions. 
+
+
+
+       However, if you build the rrdtool module as a 'self-contained'
+module (see INSTALL file), you will need to load it for each
+php script you intend to use.  To do this, you will need a line 
+such as this in your script:
+
+       <? dl("rrdtool.so"); ?>
+
+Note that in PHP4/Zend, you cannot specify the directory where
+the module lives.  It restricts the search to a specifc directory
+which is defined at compile time.  'make install' will place
+this file in the appropriate location.
+
+
+
+API:
+
+--------------------------------------------------------------------
+string rrd_error()
+
+       rrd_error takes no arguments.
+
+       Use this function to retrieve the error message from
+the last rrd_* function that was called and failed.
+
+       If an error was set, a string will be returned.  
+
+       If no error was set, a blank string will be returned.
+
+
+
+
+--------------------------------------------------------------------
+int rrd_last(string filename)
+
+       rrd_last takes only one argument, a filename of an RRD
+file.  
+
+       If rrd_last is successful in obtaining the last modifiation
+time of the file, a date will be returned in the form of the
+number of seconds from the unix epoch (Jan 1, 1970, 00:00:00).
+You can then use any of php's excellent time functions on this
+value.
+
+       If rrd_last is not sucessful, a value of 0 will be returned,
+and the internal rrd error will be set.  You can access this error
+message via the rrd_error() function (if one was set).
+
+--------------------------------------------------------------------
+int rrd_update(string filename, string options)
+
+       rrd_update takes 2 arguments, a filename of an RRD file
+and a string with options to fill the RRD file with.
+
+       It has been designed to work similary to the rrd_update
+call in the RRDs perl library.
+
+Example:  $result = rrd_update("/some.rrd", "N:123:9873:235");
+       If rrd_update is successful, 1 is returned. 
+
+       If rrd_update is not successful, 0 is returned, and an
+error message should be obtainable by called 'rrd_error()'.
+
+
+--------------------------------------------------------------------
+int rrd_create(string filename, array options, int num_of_elements)
+
+       rrd_create takes 3 arguments, a filename of an RRD file to
+create, an array of options (exactly like you would pass in the RRDs 
+perl library, or on the command line to 'rrdtool'), and the last 
+argument is the number of elements in the array of options.  This 
+can be obtained by simply calling " count($opt_array) ".  See the 
+example scripts for a more clear example.
+
+       If rrd_update is successful, 1 is returned. 
+
+       If rrd_update is not successful, 0 is returned, and an
+error message should be obtainable by called 'rrd_error()'.
+
+
+
+--------------------------------------------------------------------
+mixed rrd_graph(string filename, array options, int num_of_elements) 
+
+       rrd_graph takes 3 arguments, a filename of an RRD file,
+an array of options (exactly like you would pass in the RRDs perl
+library, or on the command line to 'rrdtool'), and the last argument
+is the number of elements in the array of options.  This can be 
+obtained by simply calling " count($opt_array) ".  See the example
+scripts for a more clear example.
+
+
+       If rrd_graph is successful, an array is returned.  The
+array is an associate array with 3 values:
+
+$array[xsize]  -  The size of the image along the X axis.
+$array[ysize]  -  The size of the image along the Y axis.
+$array[calcpr] -  This is actually another array, that will contain
+                  the results of any PRINT statements.
+
+
+       If rrd_graph is not successful, a 0 is returned.
+
+IMPORTANT NOTE:  In order for php not to complain about mis-using
+the return value, it is important that you check the type of the
+return value.  use the " is_array() " function to check if the 
+returned value is an array (in which case rrd_graph was successful),
+or not an array (meaning rrd_graph was NOT successful).  See the
+examples for an illustration of this.
+
+
+--------------------------------------------------------------------
+mixed rrd_fetch(string filename, array options, int num_of_elements) 
+
+       rrd_fetch takes 3 arguments, a filename of an RRD file,
+an array of options (exactly like you would pass in the RRDs perl
+library, or on the command line to 'rrdtool'), and the last argument
+is the number of elements in the array of options.  This can be 
+obtained by simply calling " count($opt_array) ".  See the example
+scripts for a more clear example.
+
+
+       If rrd_fetch is successful, an array is returned.  The
+array is an associate array with 5 values:
+
+$array[start]   -  This is the start time of the data returned 
+                   (unix epoch timestamp format)
+$array[end]     -  This is the end time of the data returned
+                   (unix epoch timestamp format)
+$array[step]    -  This is the step interval of the data returned,
+                   in number of seconds.
+$array[ds_cnt]  -  This is the number of DS's returned from the
+                   RRD file.
+$array[ds_namv] -  This is an array with the names of the DS's
+                   returned from the RRD file.
+$array[data]    -  This is an array with all the values fetch'd
+                   from the rrd file by rrd_fetch.
+
+(This is very similar to the way rrd_fetch() in the RRDs
+perl library works, as well as the C function rrd_fetch()).
+
+       If rrd_fetch is not successful, a 0 is returned.
+
+IMPORTANT NOTE:  In order for php not to complain about mis-using
+the return value, it is important that you check the type of the
+return value.  use the " is_array() " function to check if the 
+returned value is an array (in which case rrd_fetch was successful),
+or not an array (meaning rrd_fetch was NOT successful).  See the
+examples for an illustration of this.
+
+
+--------------------------------------------------------------------
+
diff --git a/contrib/php4/acinclude.m4 b/contrib/php4/acinclude.m4
new file mode 100644 (file)
index 0000000..0daebf6
--- /dev/null
@@ -0,0 +1,876 @@
+dnl $Id$
+dnl
+dnl This file contains local autoconf functions.
+
+sinclude(dynlib.m4)
+
+dnl PHP_EVAL_LIBLINE(LINE, SHARED-LIBADD)
+dnl
+dnl Use this macro, if you need to add libraries and or library search
+dnl paths to the PHP build system which are only given in compiler
+dnl notation.
+dnl
+AC_DEFUN(PHP_EVAL_LIBLINE,[
+  for ac_i in $1; do
+    case "$ac_i" in
+    -l*)
+      ac_ii=`echo $ac_i|cut -c 3-`
+      AC_ADD_LIBRARY($ac_ii,,$2)
+    ;;
+    -L*)
+      ac_ii=`echo $ac_i|cut -c 3-`
+      AC_ADD_LIBPATH($ac_ii,$2)
+    ;;
+    esac
+  done
+])
+
+dnl PHP_EVAL_INCLINE(LINE)
+dnl
+dnl Use this macro, if you need to add header search paths to the PHP
+dnl build system which are only given in compiler notation.
+dnl
+AC_DEFUN(PHP_EVAL_INCLINE,[
+  for ac_i in $1; do
+    case "$ac_i" in
+    -I*)
+      ac_ii=`echo $ac_i|cut -c 3-`
+      AC_ADD_INCLUDE($ac_ii)
+    ;;
+    esac
+  done
+])
+       
+AC_DEFUN(PHP_READDIR_R_TYPE,[
+  dnl HAVE_READDIR_R is also defined by libmysql
+  AC_CHECK_FUNC(readdir_r,ac_cv_func_readdir_r=yes,ac_cv_func_readdir=no)
+  if test "$ac_cv_func_readdir_r" = "yes"; then
+  AC_CACHE_CHECK(for type of readdir_r, ac_cv_what_readdir_r,[
+    AC_TRY_RUN([
+#define _REENTRANT
+#include <sys/types.h>
+#include <dirent.h>
+
+main() {
+       DIR *dir;
+       struct dirent entry, *pentry;
+
+       dir = opendir("/");
+       if (!dir) 
+               exit(1);
+       if (readdir_r(dir, &entry, &pentry) == 0)
+               exit(0);
+       exit(1);
+}
+    ],[
+      ac_cv_what_readdir_r=POSIX
+    ],[
+      AC_TRY_CPP([
+#define _REENTRANT
+#include <sys/types.h>
+#include <dirent.h>
+int readdir_r(DIR *, struct dirent *);
+        ],[
+          ac_cv_what_readdir_r=old-style
+        ],[
+          ac_cv_what_readdir_r=none
+      ])
+    ],[
+      ac_cv_what_readdir_r=none
+   ])
+  ])
+    case "$ac_cv_what_readdir_r" in
+    POSIX)
+      AC_DEFINE(HAVE_POSIX_READDIR_R,1,[whether you have POSIX readdir_r]);;
+    old-style)
+      AC_DEFINE(HAVE_OLD_READDIR_R,1,[whether you have old-style readdir_r]);;
+    esac
+  fi
+])
+
+AC_DEFUN(PHP_SHLIB_SUFFIX_NAME,[
+  PHP_SUBST(SHLIB_SUFFIX_NAME)
+  SHLIB_SUFFIX_NAME=so
+  case "$host_alias" in
+  *hpux*)
+       SHLIB_SUFFIX_NAME=sl
+       ;;
+  esac
+])
+
+AC_DEFUN(PHP_DEBUG_MACRO,[
+  DEBUG_LOG="$1"
+  cat >$1 <<X
+CONFIGURE:  $CONFIGURE_COMMAND
+CC:         $CC
+CFLAGS:     $CFLAGS
+CPPFLAGS:   $CPPFLAGS
+CXX:        $CXX
+CXXFLAGS:   $CXXFLAGS
+INCLUDES:   $INCLUDES
+LDFLAGS:    $LDFLAGS
+LIBS:       $LIBS
+DLIBS:      $DLIBS
+SAPI:       $PHP_SAPI
+PHP_RPATHS: $PHP_RPATHS
+uname -a:   `uname -a`
+
+X
+    cat >conftest.$ac_ext <<X
+main()
+{
+  exit(0);
+}
+X
+    (eval echo \"$ac_link\"; eval $ac_link && ./conftest) >>$1 2>&1
+    rm -fr conftest*
+])
+       
+AC_DEFUN(PHP_MISSING_TIME_R_DECL,[
+  AC_MSG_CHECKING(for missing declarations of reentrant functions)
+  AC_TRY_COMPILE([#include <time.h>],[struct tm *(*func)() = localtime_r],[
+    :
+  ],[
+    AC_DEFINE(MISSING_LOCALTIME_R_DECL,1,[Whether localtime_r is declared])
+  ])
+  AC_TRY_COMPILE([#include <time.h>],[struct tm *(*func)() = gmtime_r],[
+    :
+  ],[
+    AC_DEFINE(MISSING_GMTIME_R_DECL,1,[Whether gmtime_r is declared])
+  ])
+  AC_TRY_COMPILE([#include <time.h>],[char *(*func)() = asctime_r],[
+    :
+  ],[
+    AC_DEFINE(MISSING_ASCTIME_R_DECL,1,[Whether asctime_r is declared])
+  ])
+  AC_TRY_COMPILE([#include <time.h>],[char *(*func)() = ctime_r],[
+    :
+  ],[
+    AC_DEFINE(MISSING_CTIME_R_DECL,1,[Whether ctime_r is declared])
+  ])
+  AC_TRY_COMPILE([#include <string.h>],[char *(*func)() = strtok_r],[
+    :
+  ],[
+    AC_DEFINE(MISSING_STRTOK_R_DECL,1,[Whether strtok_r is declared])
+  ])
+  AC_MSG_RESULT(done)
+])
+
+dnl
+dnl PHP_LIBGCC_LIBPATH(gcc)
+dnl Stores the location of libgcc in libgcc_libpath
+dnl
+AC_DEFUN(PHP_LIBGCC_LIBPATH,[
+  changequote({,})
+  libgcc_libpath="`$1 --print-libgcc-file-name|sed 's%/*[^/][^/]*$%%'`"
+  changequote([,])
+])
+
+AC_DEFUN(PHP_ARG_ANALYZE,[
+case "[$]$1" in
+shared,*)
+  ext_output="yes, shared"
+  ext_shared=yes
+  $1=`echo $ac_n "[$]$1$ac_c"|sed s/^shared,//`
+  ;;
+shared)
+  ext_output="yes, shared"
+  ext_shared=yes
+  $1=yes
+  ;;
+no)
+  ext_output="no"
+  ext_shared=no
+  ;;
+*)
+  ext_output="yes"
+  ext_shared=no
+  ;;
+esac
+
+if test "$php_always_shared" = "yes"; then
+  ext_output="yes, shared"
+  ext_shared=yes
+  test "[$]$1" = "no" && $1=yes
+fi
+
+AC_MSG_RESULT($ext_output)
+])
+
+dnl
+dnl PHP_ARG_WITH(arg-name, check message, help text[, default-val])
+dnl Sets PHP_ARG_NAME either to the user value or to the default value.
+dnl default-val defaults to no. 
+dnl
+AC_DEFUN(PHP_ARG_WITH,[
+PHP_REAL_ARG_WITH([$1],[$2],[$3],[$4],PHP_[]translit($1,a-z-,A-Z_))
+])
+
+AC_DEFUN(PHP_REAL_ARG_WITH,[
+AC_MSG_CHECKING($2)
+AC_ARG_WITH($1,[$3],$5=[$]withval,$5=ifelse($4,,no,$4))
+PHP_ARG_ANALYZE($5)
+])
+
+dnl
+dnl PHP_ARG_ENABLE(arg-name, check message, help text[, default-val])
+dnl Sets PHP_ARG_NAME either to the user value or to the default value.
+dnl default-val defaults to no. 
+dnl
+AC_DEFUN(PHP_ARG_ENABLE,[
+PHP_REAL_ARG_ENABLE([$1],[$2],[$3],[$4],PHP_[]translit($1,a-z-,A-Z_))
+])
+
+AC_DEFUN(PHP_REAL_ARG_ENABLE,[
+AC_MSG_CHECKING($2)
+AC_ARG_ENABLE($1,[$3],$5=[$]enableval,$5=ifelse($4,,no,$4))
+PHP_ARG_ANALYZE($5)
+])
+
+AC_DEFUN(PHP_MODULE_PTR,[
+  EXTRA_MODULE_PTRS="$EXTRA_MODULE_PTRS $1,"
+])
+AC_DEFUN(PHP_CONFIG_NICE,[
+  rm -f $1
+  cat >$1<<EOF
+#! /bin/sh
+#
+# Created by configure
+
+EOF
+
+  for arg in [$]0 "[$]@"; do
+    echo "\"[$]arg\" \\" >> $1
+  done
+  echo '"[$]@"' >> $1
+  chmod +x $1
+])
+
+AC_DEFUN(PHP_TIME_R_TYPE,[
+AC_CACHE_CHECK(for type of reentrant time-related functions, ac_cv_time_r_type,[
+AC_TRY_RUN([
+#include <time.h>
+#include <stdlib.h>
+
+main() {
+char buf[27];
+struct tm t;
+time_t old = 0;
+int r, s;
+
+s = gmtime_r(&old, &t);
+r = (int) asctime_r(&t, buf, 26);
+if (r == s && s == 0) exit(0);
+exit(1);
+}
+],[
+  ac_cv_time_r_type=hpux
+],[
+  ac_cv_time_r_type=POSIX
+],[
+  ac_cv_time_r_type=POSIX
+])
+])
+if test "$ac_cv_time_r_type" = "hpux"; then
+  AC_DEFINE(PHP_HPUX_TIME_R,1,[Whether you have HP-UX 10.x])
+fi
+])
+
+AC_DEFUN(PHP_SUBST,[
+  PHP_VAR_SUBST="$PHP_VAR_SUBST $1"
+  AC_SUBST($1)
+])
+
+AC_DEFUN(PHP_FAST_OUTPUT,[
+  PHP_FAST_OUTPUT_FILES="$PHP_FAST_OUTPUT_FILES $1"
+])
+
+AC_DEFUN(PHP_MKDIR_P_CHECK,[
+  AC_CACHE_CHECK(for working mkdir -p, ac_cv_mkdir_p,[
+    test -d conftestdir && rm -rf conftestdir
+    mkdir -p conftestdir/somedir >/dev/null 2>&1
+    if test -d conftestdir/somedir; then
+      ac_cv_mkdir_p=yes
+    else
+      ac_cv_mkdir_p=no
+    fi
+    rm -rf conftestdir
+  ])
+])
+
+AC_DEFUN(PHP_GEN_CONFIG_VARS,[
+  PHP_MKDIR_P_CHECK
+  echo creating config_vars.mk
+  > config_vars.mk
+  for i in $PHP_VAR_SUBST; do
+    eval echo "$i = \$$i" >> config_vars.mk
+  done
+])
+
+AC_DEFUN(PHP_GEN_MAKEFILES,[
+  $SHELL $srcdir/build/fastgen.sh $srcdir $ac_cv_mkdir_p $PHP_FAST_OUTPUT_FILES
+])
+
+AC_DEFUN(PHP_TM_GMTOFF,[
+AC_CACHE_CHECK([for tm_gmtoff in struct tm], ac_cv_struct_tm_gmtoff,
+[AC_TRY_COMPILE([#include <sys/types.h>
+#include <$ac_cv_struct_tm>], [struct tm tm; tm.tm_gmtoff;],
+  ac_cv_struct_tm_gmtoff=yes, ac_cv_struct_tm_gmtoff=no)])
+
+if test "$ac_cv_struct_tm_gmtoff" = yes; then
+  AC_DEFINE(HAVE_TM_GMTOFF,1,[whether you have tm_gmtoff in struct tm])
+fi
+])
+
+dnl PHP_CONFIGURE_PART(MESSAGE)
+dnl Idea borrowed from mm
+AC_DEFUN(PHP_CONFIGURE_PART,[
+  AC_MSG_RESULT()
+  AC_MSG_RESULT(${T_MD}$1${T_ME})
+])
+
+AC_DEFUN(PHP_PROG_SENDMAIL,[
+AC_PATH_PROG(PROG_SENDMAIL, sendmail, /usr/lib/sendmail, $PATH:/usr/bin:/usr/sbin:/usr/etc:/etc:/usr/ucblib)
+if test -n "$PROG_SENDMAIL"; then
+  AC_DEFINE(HAVE_SENDMAIL,1,[whether you have sendmail])
+fi
+])
+
+AC_DEFUN(PHP_RUNPATH_SWITCH,[
+dnl check for -R, etc. switch
+AC_MSG_CHECKING(if compiler supports -R)
+AC_CACHE_VAL(php_cv_cc_dashr,[
+       SAVE_LIBS="${LIBS}"
+       LIBS="-R /usr/lib ${LIBS}"
+       AC_TRY_LINK([], [], php_cv_cc_dashr=yes, php_cv_cc_dashr=no)
+       LIBS="${SAVE_LIBS}"])
+AC_MSG_RESULT($php_cv_cc_dashr)
+if test $php_cv_cc_dashr = "yes"; then
+       ld_runpath_switch="-R"
+else
+       AC_MSG_CHECKING([if compiler supports -Wl,-rpath,])
+       AC_CACHE_VAL(php_cv_cc_rpath,[
+               SAVE_LIBS="${LIBS}"
+               LIBS="-Wl,-rpath,/usr/lib ${LIBS}"
+               AC_TRY_LINK([], [], php_cv_cc_rpath=yes, php_cv_cc_rpath=no)
+               LIBS="${SAVE_LIBS}"])
+       AC_MSG_RESULT($php_cv_cc_rpath)
+       if test $php_cv_cc_rpath = "yes"; then
+               ld_runpath_switch="-Wl,-rpath,"
+       else
+               dnl something innocuous
+               ld_runpath_switch="-L"
+       fi
+fi
+])
+
+AC_DEFUN(PHP_STRUCT_FLOCK,[
+AC_CACHE_CHECK(for struct flock,ac_cv_struct_flock,
+    AC_TRY_COMPILE([
+#include <unistd.h>
+#include <fcntl.h>
+        ],
+        [struct flock x;],
+        [
+          ac_cv_struct_flock=yes
+        ],[
+          ac_cv_struct_flock=no
+        ])
+)
+if test "$ac_cv_struct_flock" = "yes" ; then
+    AC_DEFINE(HAVE_STRUCT_FLOCK, 1,[whether you have struct flock])
+fi
+])
+
+AC_DEFUN(PHP_SOCKLEN_T,[
+AC_CACHE_CHECK(for socklen_t,ac_cv_socklen_t,
+  AC_TRY_COMPILE([
+#include <sys/types.h>
+#include <sys/socket.h>
+],[
+socklen_t x;
+],[
+  ac_cv_socklen_t=yes
+],[
+  ac_cv_socklen_t=no
+]))
+if test "$ac_cv_socklen_t" = "yes"; then
+  AC_DEFINE(HAVE_SOCKLEN_T, 1, [Whether you have socklen_t])
+fi
+])
+
+dnl
+dnl PHP_SET_SYM_FILE(path)
+dnl
+dnl set the path of the file which contains the symbol export list
+dnl
+AC_DEFUN(PHP_SET_SYM_FILE,
+[
+  PHP_SYM_FILE="$1"
+])
+
+dnl
+dnl PHP_BUILD_THREAD_SAFE
+dnl
+AC_DEFUN(PHP_BUILD_THREAD_SAFE,[
+  enable_experimental_zts=yes
+  if test "$pthreads_working" != "yes"; then
+    AC_MSG_ERROR(ZTS currently requires working POSIX threads. Your system does not support this.)
+  fi
+])
+
+dnl
+dnl PHP_BUILD_SHARED
+dnl
+AC_DEFUN(PHP_BUILD_SHARED,[
+  php_build_target=shared
+])
+
+dnl
+dnl PHP_BUILD_STATIC
+dnl
+AC_DEFUN(PHP_BUILD_STATIC,[
+  php_build_target=static
+])
+
+dnl
+dnl PHP_BUILD_PROGRAM
+dnl
+AC_DEFUN(PHP_BUILD_PROGRAM,[
+  php_build_target=program
+])
+
+dnl
+dnl AC_PHP_ONCE(namespace, variable, code)
+dnl
+dnl execute code, if variable is not set in namespace
+dnl
+AC_DEFUN(AC_PHP_ONCE,[
+  changequote({,})
+  unique=`echo $2|sed 's/[^a-zA-Z0-9]/_/g'`
+  changequote([,])
+  cmd="echo $ac_n \"\$$1$unique$ac_c\""
+  if test -n "$unique" && test "`eval $cmd`" = "" ; then
+    eval "$1$unique=set"
+    $3
+  fi
+])
+
+dnl
+dnl AC_EXPAND_PATH(path, variable)
+dnl
+dnl expands path to an absolute path and assigns it to variable
+dnl
+AC_DEFUN(AC_EXPAND_PATH,[
+  if test -z "$1" || echo "$1" | grep '^/' >/dev/null ; then
+    $2="$1"
+  else
+    changequote({,})
+    ep_dir="`echo $1|sed 's%/*[^/][^/]*$%%'`"
+    changequote([,])
+    ep_realdir="`(cd \"$ep_dir\" && pwd)`"
+    $2="$ep_realdir/`basename \"$1\"`"
+  fi
+])
+
+dnl
+dnl AC_ADD_LIBPATH(path[, shared-libadd])
+dnl
+dnl add a library to linkpath/runpath
+dnl
+AC_DEFUN(AC_ADD_LIBPATH,[
+  if test "$1" != "/usr/lib"; then
+    AC_EXPAND_PATH($1, ai_p)
+    if test "$ext_shared" = "yes" && test -n "$2"; then
+      $2="-R$1 -L$1 [$]$2"
+    else
+      AC_PHP_ONCE(LIBPATH, $ai_p, [
+        test -n "$ld_runpath_switch" && LDFLAGS="$LDFLAGS $ld_runpath_switch$ai_p"
+        LDFLAGS="$LDFLAGS -L$ai_p"
+        PHP_RPATHS="$PHP_RPATHS $ai_p"
+      ])
+    fi
+  fi
+])
+
+dnl
+dnl AC_BUILD_RPATH()
+dnl
+dnl builds RPATH from PHP_RPATHS
+dnl
+AC_DEFUN(AC_BUILD_RPATH,[
+  if test "$PHP_RPATH" = "yes" && test -n "$PHP_RPATHS"; then
+    OLD_RPATHS="$PHP_RPATHS"
+    PHP_RPATHS=""
+    for i in $OLD_RPATHS; do
+      PHP_LDFLAGS="$PHP_LDFLAGS -L$i"
+      PHP_RPATHS="$PHP_RPATHS -R $i"
+      NATIVE_RPATHS="$NATIVE_RPATHS ${ld_runpath_switch}$i"
+    done
+  fi
+])
+
+dnl
+dnl AC_ADD_INCLUDE(path)
+dnl
+dnl add a include path
+dnl
+AC_DEFUN(AC_ADD_INCLUDE,[
+  if test "$1" != "/usr/include"; then
+    AC_EXPAND_PATH($1, ai_p)
+    AC_PHP_ONCE(INCLUDEPATH, $ai_p, [
+      INCLUDES="$INCLUDES -I$ai_p"
+    ])
+  fi
+])
+
+AC_DEFUN(PHP_X_ADD_LIBRARY,[
+  ifelse($2,,$3="-l$1 [$]$3", $3="[$]$3 -l$1")
+])
+
+dnl
+dnl AC_ADD_LIBRARY(library[, append[, shared-libadd]])
+dnl
+dnl add a library to the link line
+dnl
+AC_DEFUN(AC_ADD_LIBRARY,[
+ case "$1" in
+ c|c_r|pthread*) ;;
+ *)
+ifelse($3,,[
+   AC_PHP_ONCE(LIBRARY, $1, [
+     PHP_X_ADD_LIBRARY($1,$2,LIBS)
+   ])
+],[
+   if test "$ext_shared" = "yes"; then
+     PHP_X_ADD_LIBRARY($1,$2,$3)
+   else
+     AC_ADD_LIBRARY($1,$2)
+   fi
+])
+  ;;
+  esac
+])
+
+dnl
+dnl AC_ADD_LIBRARY_DEFER(library[, append])
+dnl
+dnl add a library to the link line (deferred)
+AC_DEFUN(AC_ADD_LIBRARY_DEFER,[
+  AC_PHP_ONCE(LIBRARY, $1, [
+    ifelse($#, 1, DLIBS="-l$1 $DLIBS", DLIBS="$DLIBS -l$1")
+  ])
+])
+
+dnl
+dnl AC_ADD_LIBRARY_WITH_PATH(library, path[, shared-libadd])
+dnl
+dnl add a library to the link line and path to linkpath/runpath.
+dnl if shared-libadd is not empty and $ext_shared is yes,
+dnl shared-libadd will be assigned the library information
+dnl
+AC_DEFUN(AC_ADD_LIBRARY_WITH_PATH,[
+ifelse($3,,[
+  if test -n "$2"; then
+    AC_ADD_LIBPATH($2)
+  fi
+  AC_ADD_LIBRARY($1)
+],[
+  if test "$ext_shared" = "yes"; then
+    $3="-l$1 [$]$3"
+    if test -n "$2"; then
+      AC_ADD_LIBPATH($2,$3)
+    fi
+  else
+    AC_ADD_LIBRARY_WITH_PATH($1,$2)
+  fi
+])
+])
+
+dnl
+dnl AC_ADD_LIBRARY_DEFER_WITH_PATH(library, path)
+dnl
+dnl add a library to the link line (deferred)
+dnl and path to linkpath/runpath (not deferred)
+dnl
+AC_DEFUN(AC_ADD_LIBRARY_DEFER_WITH_PATH,[
+  AC_ADD_LIBPATH($2)
+  AC_ADD_LIBRARY_DEFER($1)
+])
+
+AC_DEFUN(AM_SET_LIBTOOL_VARIABLE,[
+  LIBTOOL='$(SHELL) $(top_builddir)/libtool $1'
+])
+
+dnl
+dnl Check for cc option
+dnl
+AC_DEFUN(AC_CHECK_CC_OPTION,[
+  echo "main(){return 0;}" > conftest.$ac_ext
+  opt="$1"
+  changequote({,})
+  var=`echo $opt|sed 's/[^a-zA-Z0-9]/_/g'`
+  changequote([,])
+  AC_MSG_CHECKING([if compiler supports -$1 really])
+  ac_php_compile="${CC-cc} -$opt -o conftest $CFLAGS $CPPFLAGS conftest.$ac_ext 2>&1"
+  if eval $ac_php_compile 2>&1 | egrep "$opt" > /dev/null 2>&1 ; then
+    eval php_cc_$var=no
+       AC_MSG_RESULT(no)
+  else
+    if eval ./conftest 2>/dev/null ; then
+      eval php_cc_$var=yes
+         AC_MSG_RESULT(yes)
+    else
+      eval php_cc_$var=no
+         AC_MSG_RESULT(no)
+    fi
+  fi
+])
+
+AC_DEFUN(PHP_REGEX,[
+
+if test "$REGEX_TYPE" = "php"; then
+  REGEX_LIB=regex/libregex.la
+  REGEX_DIR=regex
+  AC_DEFINE(HSREGEX,1,[ ])
+  AC_DEFINE(REGEX,1,[ ])
+  PHP_FAST_OUTPUT(regex/Makefile)
+elif test "$REGEX_TYPE" = "system"; then
+  AC_DEFINE(REGEX,0,[ ])
+fi
+
+AC_MSG_CHECKING(which regex library to use)
+AC_MSG_RESULT($REGEX_TYPE)
+
+PHP_SUBST(REGEX_DIR)
+PHP_SUBST(REGEX_LIB)
+PHP_SUBST(HSREGEX)
+])
+
+dnl
+dnl See if we have broken header files like SunOS has.
+dnl
+AC_DEFUN(AC_MISSING_FCLOSE_DECL,[
+  AC_MSG_CHECKING([for fclose declaration])
+  AC_TRY_COMPILE([#include <stdio.h>],[int (*func)() = fclose],[
+    AC_DEFINE(MISSING_FCLOSE_DECL,0,[ ])
+    AC_MSG_RESULT(ok)
+  ],[
+    AC_DEFINE(MISSING_FCLOSE_DECL,1,[ ])
+    AC_MSG_RESULT(missing)
+  ])
+])
+
+dnl
+dnl Check for broken sprintf()
+dnl
+AC_DEFUN(AC_BROKEN_SPRINTF,[
+  AC_CACHE_CHECK(whether sprintf is broken, ac_cv_broken_sprintf,[
+    AC_TRY_RUN([main() {char buf[20];exit(sprintf(buf,"testing 123")!=11); }],[
+      ac_cv_broken_sprintf=no
+    ],[
+      ac_cv_broken_sprintf=yes
+    ],[
+      ac_cv_broken_sprintf=no
+    ])
+  ])
+  if test "$ac_cv_broken_sprintf" = "yes"; then
+    AC_DEFINE(PHP_BROKEN_SPRINTF, 1, [ ])
+  else
+    AC_DEFINE(PHP_BROKEN_SPRINTF, 0, [ ])
+  fi
+])
+
+dnl
+dnl PHP_EXTENSION(extname [, shared])
+dnl
+dnl Includes an extension in the build.
+dnl
+dnl "extname" is the name of the ext/ subdir where the extension resides
+dnl "shared" can be set to "shared" or "yes" to build the extension as
+dnl a dynamically loadable library.
+dnl
+AC_DEFUN(PHP_EXTENSION,[
+  EXT_SUBDIRS="$EXT_SUBDIRS $1"
+  
+  if test -d "$abs_srcdir/ext/$1"; then
+dnl ---------------------------------------------- Internal Module
+    ext_builddir="ext/$1"
+    ext_srcdir="$abs_srcdir/ext/$1"
+  else
+dnl ---------------------------------------------- External Module
+    ext_builddir="."
+    ext_srcdir="$abs_srcdir"
+  fi
+
+  if test "$2" != "shared" && test "$2" != "yes"; then
+dnl ---------------------------------------------- Static module
+    LIB_BUILD($ext_builddir)
+    EXT_LTLIBS="$EXT_LTLIBS $ext_builddir/lib$1.la"
+    EXT_STATIC="$EXT_STATIC $1"
+  else 
+dnl ---------------------------------------------- Shared module
+    LIB_BUILD($ext_builddir,yes)
+    AC_DEFINE_UNQUOTED([COMPILE_DL_]translit($1,a-z-,A-Z_), 1, Whether to build $1 as dynamic module)
+  fi
+
+  PHP_FAST_OUTPUT($ext_builddir/Makefile)
+])
+
+PHP_SUBST(EXT_SUBDIRS)
+PHP_SUBST(EXT_STATIC)
+PHP_SUBST(EXT_SHARED)
+PHP_SUBST(EXT_LIBS)
+PHP_SUBST(EXT_LTLIBS)
+
+dnl
+dnl Solaris requires main code to be position independent in order
+dnl to let shared objects find symbols.  Weird.  Ugly.
+dnl
+dnl Must be run after all --with-NN options that let the user
+dnl choose dynamic extensions, and after the gcc test.
+dnl
+AC_DEFUN(PHP_SOLARIS_PIC_WEIRDNESS,[
+  AC_MSG_CHECKING(whether -fPIC is required)
+  if test "$EXT_SHARED" != ""; then
+    os=`uname -sr 2>/dev/null`
+    case "$os" in
+        "SunOS 5.6"|"SunOS 5.7")
+          case "$CC" in
+           gcc*|egcs*) CFLAGS="$CFLAGS -fPIC";;
+           *) CFLAGS="$CFLAGS -fpic";;
+         esac
+         AC_MSG_RESULT(yes);;
+       *)
+         AC_MSG_RESULT(no);;
+    esac
+  else
+    AC_MSG_RESULT(no)
+  fi
+])
+
+dnl
+dnl Checks whether $withval is "shared" or starts with "shared,XXX"
+dnl and sets $shared to "yes" or "no", and removes "shared,?" stuff
+dnl from $withval.
+dnl
+AC_DEFUN(PHP_WITH_SHARED,[
+    case $withval in
+       shared)
+           shared=yes
+           withval=yes
+           ;;
+       shared,*)
+           shared=yes
+           withval=`echo $withval | sed -e 's/^shared,//'`      
+           ;;
+       *)
+           shared=no
+           ;;
+    esac
+    if test -n "$php_always_shared"; then
+               shared=yes
+       fi
+])
+
+dnl The problem is that the default compilation flags in Solaris 2.6 won't
+dnl let programs access large files;  you need to tell the compiler that
+dnl you actually want your programs to work on large files.  For more
+dnl details about this brain damage please see:
+dnl http://www.sas.com/standards/large.file/x_open.20Mar96.html
+
+dnl Written by Paul Eggert <eggert@twinsun.com>.
+
+AC_DEFUN(AC_SYS_LFS,
+[dnl
+  # If available, prefer support for large files unless the user specified
+  # one of the CPPFLAGS, LDFLAGS, or LIBS variables.
+  AC_MSG_CHECKING(whether large file support needs explicit enabling)
+  ac_getconfs=''
+  ac_result=yes
+  ac_set=''
+  ac_shellvars='CPPFLAGS LDFLAGS LIBS'
+  for ac_shellvar in $ac_shellvars; do
+    case $ac_shellvar in
+      CPPFLAGS) ac_lfsvar=LFS_CFLAGS ;;
+      *) ac_lfsvar=LFS_$ac_shellvar ;;
+    esac
+    eval test '"${'$ac_shellvar'+set}"' = set && ac_set=$ac_shellvar
+    (getconf $ac_lfsvar) >/dev/null 2>&1 || { ac_result=no; break; }
+    ac_getconf=`getconf $ac_lfsvar`
+    ac_getconfs=$ac_getconfs$ac_getconf
+    eval ac_test_$ac_shellvar=\$ac_getconf
+  done
+  case "$ac_result$ac_getconfs" in
+    yes) ac_result=no ;;
+  esac
+  case "$ac_result$ac_set" in
+    yes?*) ac_result="yes, but $ac_set is already set, so use its settings"
+  esac
+  AC_MSG_RESULT($ac_result)
+  case $ac_result in
+    yes)
+      for ac_shellvar in $ac_shellvars; do
+        eval $ac_shellvar=\$ac_test_$ac_shellvar
+      done ;;
+  esac
+])
+
+AC_DEFUN(AC_SOCKADDR_SA_LEN,[
+  AC_CACHE_CHECK([for field sa_len in struct sockaddr],ac_cv_sockaddr_sa_len,[
+    AC_TRY_COMPILE([#include <sys/types.h>
+#include <sys/socket.h>],
+    [struct sockaddr s; s.sa_len;],
+    [ac_cv_sockaddr_sa_len=yes
+     AC_DEFINE(HAVE_SOCKADDR_SA_LEN,1,[ ])],
+    [ac_cv_sockaddr_sa_len=no])
+  ])
+])
+
+
+dnl ## PHP_AC_OUTPUT(file)
+dnl ## adds "file" to the list of files generated by AC_OUTPUT
+dnl ## This macro can be used several times.
+AC_DEFUN(PHP_OUTPUT,[
+  PHP_OUTPUT_FILES="$PHP_OUTPUT_FILES $1"
+])
+
+AC_DEFUN(PHP_DECLARED_TIMEZONE,[
+  AC_CACHE_CHECK(for declared timezone, ac_cv_declared_timezone,[
+    AC_TRY_COMPILE([
+#include <sys/types.h>
+#include <time.h>
+#ifdef HAVE_SYS_TIME_H
+#include <sys/time.h>
+#endif
+],[
+    time_t foo = (time_t) timezone;
+],[
+  ac_cv_declared_timezone=yes
+],[
+  ac_cv_declared_timezone=no
+])])
+  if test "$ac_cv_declared_timezone" = "yes"; then
+    AC_DEFINE(HAVE_DECLARED_TIMEZONE, 1, [Whether system headers declare timezone])
+  fi
+])
+
+AC_DEFUN(PHP_EBCDIC,[
+  AC_CACHE_CHECK([whether system uses EBCDIC],ac_cv_ebcdic,[
+  AC_TRY_RUN( [
+int main(void) { 
+  return (unsigned char)'A' != (unsigned char)0xC1; 
+} 
+],[
+  ac_cv_ebcdic="yes"
+],[
+  ac_cv_ebcdic="no"
+],[
+  ac_cv_ebcdic="no"
+])])
+  if test "$ac_cv_ebcdic" = "yes"; then
+    AC_DEFINE(CHARSET_EBCDIC,1, [Define if system uses EBCDIC])
+  fi
+])
+
diff --git a/contrib/php4/aclocal.m4 b/contrib/php4/aclocal.m4
new file mode 100644 (file)
index 0000000..d15ac25
--- /dev/null
@@ -0,0 +1,1295 @@
+dnl aclocal.m4 generated automatically by aclocal 1.4
+
+dnl Copyright (C) 1994, 1995-8, 1999 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+
+dnl This program is distributed in the hope that it will be useful,
+dnl but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+dnl even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+dnl PARTICULAR PURPOSE.
+
+dnl $Id$
+dnl
+dnl This file contains local autoconf functions.
+
+sinclude(dynlib.m4)
+
+dnl PHP_EVAL_LIBLINE(LINE, SHARED-LIBADD)
+dnl
+dnl Use this macro, if you need to add libraries and or library search
+dnl paths to the PHP build system which are only given in compiler
+dnl notation.
+dnl
+AC_DEFUN(PHP_EVAL_LIBLINE,[
+  for ac_i in $1; do
+    case "$ac_i" in
+    -l*)
+      ac_ii=`echo $ac_i|cut -c 3-`
+      AC_ADD_LIBRARY($ac_ii,,$2)
+    ;;
+    -L*)
+      ac_ii=`echo $ac_i|cut -c 3-`
+      AC_ADD_LIBPATH($ac_ii,$2)
+    ;;
+    esac
+  done
+])
+
+dnl PHP_EVAL_INCLINE(LINE)
+dnl
+dnl Use this macro, if you need to add header search paths to the PHP
+dnl build system which are only given in compiler notation.
+dnl
+AC_DEFUN(PHP_EVAL_INCLINE,[
+  for ac_i in $1; do
+    case "$ac_i" in
+    -I*)
+      ac_ii=`echo $ac_i|cut -c 3-`
+      AC_ADD_INCLUDE($ac_ii)
+    ;;
+    esac
+  done
+])
+       
+AC_DEFUN(PHP_READDIR_R_TYPE,[
+  dnl HAVE_READDIR_R is also defined by libmysql
+  AC_CHECK_FUNC(readdir_r,ac_cv_func_readdir_r=yes,ac_cv_func_readdir=no)
+  if test "$ac_cv_func_readdir_r" = "yes"; then
+  AC_CACHE_CHECK(for type of readdir_r, ac_cv_what_readdir_r,[
+    AC_TRY_RUN([
+#define _REENTRANT
+#include <sys/types.h>
+#include <dirent.h>
+
+main() {
+       DIR *dir;
+       struct dirent entry, *pentry;
+
+       dir = opendir("/");
+       if (!dir) 
+               exit(1);
+       if (readdir_r(dir, &entry, &pentry) == 0)
+               exit(0);
+       exit(1);
+}
+    ],[
+      ac_cv_what_readdir_r=POSIX
+    ],[
+      AC_TRY_CPP([
+#define _REENTRANT
+#include <sys/types.h>
+#include <dirent.h>
+int readdir_r(DIR *, struct dirent *);
+        ],[
+          ac_cv_what_readdir_r=old-style
+        ],[
+          ac_cv_what_readdir_r=none
+      ])
+    ],[
+      ac_cv_what_readdir_r=none
+   ])
+  ])
+    case "$ac_cv_what_readdir_r" in
+    POSIX)
+      AC_DEFINE(HAVE_POSIX_READDIR_R,1,[whether you have POSIX readdir_r]);;
+    old-style)
+      AC_DEFINE(HAVE_OLD_READDIR_R,1,[whether you have old-style readdir_r]);;
+    esac
+  fi
+])
+
+AC_DEFUN(PHP_SHLIB_SUFFIX_NAME,[
+  PHP_SUBST(SHLIB_SUFFIX_NAME)
+  SHLIB_SUFFIX_NAME=so
+  case "$host_alias" in
+  *hpux*)
+       SHLIB_SUFFIX_NAME=sl
+       ;;
+  esac
+])
+
+AC_DEFUN(PHP_DEBUG_MACRO,[
+  DEBUG_LOG="$1"
+  cat >$1 <<X
+CONFIGURE:  $CONFIGURE_COMMAND
+CC:         $CC
+CFLAGS:     $CFLAGS
+CPPFLAGS:   $CPPFLAGS
+CXX:        $CXX
+CXXFLAGS:   $CXXFLAGS
+INCLUDES:   $INCLUDES
+LDFLAGS:    $LDFLAGS
+LIBS:       $LIBS
+DLIBS:      $DLIBS
+SAPI:       $PHP_SAPI
+PHP_RPATHS: $PHP_RPATHS
+uname -a:   `uname -a`
+
+X
+    cat >conftest.$ac_ext <<X
+main()
+{
+  exit(0);
+}
+X
+    (eval echo \"$ac_link\"; eval $ac_link && ./conftest) >>$1 2>&1
+    rm -fr conftest*
+])
+       
+AC_DEFUN(PHP_MISSING_TIME_R_DECL,[
+  AC_MSG_CHECKING(for missing declarations of reentrant functions)
+  AC_TRY_COMPILE([#include <time.h>],[struct tm *(*func)() = localtime_r],[
+    :
+  ],[
+    AC_DEFINE(MISSING_LOCALTIME_R_DECL,1,[Whether localtime_r is declared])
+  ])
+  AC_TRY_COMPILE([#include <time.h>],[struct tm *(*func)() = gmtime_r],[
+    :
+  ],[
+    AC_DEFINE(MISSING_GMTIME_R_DECL,1,[Whether gmtime_r is declared])
+  ])
+  AC_TRY_COMPILE([#include <time.h>],[char *(*func)() = asctime_r],[
+    :
+  ],[
+    AC_DEFINE(MISSING_ASCTIME_R_DECL,1,[Whether asctime_r is declared])
+  ])
+  AC_TRY_COMPILE([#include <time.h>],[char *(*func)() = ctime_r],[
+    :
+  ],[
+    AC_DEFINE(MISSING_CTIME_R_DECL,1,[Whether ctime_r is declared])
+  ])
+  AC_TRY_COMPILE([#include <string.h>],[char *(*func)() = strtok_r],[
+    :
+  ],[
+    AC_DEFINE(MISSING_STRTOK_R_DECL,1,[Whether strtok_r is declared])
+  ])
+  AC_MSG_RESULT(done)
+])
+
+dnl
+dnl PHP_LIBGCC_LIBPATH(gcc)
+dnl Stores the location of libgcc in libgcc_libpath
+dnl
+AC_DEFUN(PHP_LIBGCC_LIBPATH,[
+  changequote({,})
+  libgcc_libpath="`$1 --print-libgcc-file-name|sed 's%/*[^/][^/]*$%%'`"
+  changequote([,])
+])
+
+AC_DEFUN(PHP_ARG_ANALYZE,[
+case "[$]$1" in
+shared,*)
+  ext_output="yes, shared"
+  ext_shared=yes
+  $1=`echo $ac_n "[$]$1$ac_c"|sed s/^shared,//`
+  ;;
+shared)
+  ext_output="yes, shared"
+  ext_shared=yes
+  $1=yes
+  ;;
+no)
+  ext_output="no"
+  ext_shared=no
+  ;;
+*)
+  ext_output="yes"
+  ext_shared=no
+  ;;
+esac
+
+if test "$php_always_shared" = "yes"; then
+  ext_output="yes, shared"
+  ext_shared=yes
+  test "[$]$1" = "no" && $1=yes
+fi
+
+AC_MSG_RESULT($ext_output)
+])
+
+dnl
+dnl PHP_ARG_WITH(arg-name, check message, help text[, default-val])
+dnl Sets PHP_ARG_NAME either to the user value or to the default value.
+dnl default-val defaults to no. 
+dnl
+AC_DEFUN(PHP_ARG_WITH,[
+PHP_REAL_ARG_WITH([$1],[$2],[$3],[$4],PHP_[]translit($1,a-z-,A-Z_))
+])
+
+AC_DEFUN(PHP_REAL_ARG_WITH,[
+AC_MSG_CHECKING($2)
+AC_ARG_WITH($1,[$3],$5=[$]withval,$5=ifelse($4,,no,$4))
+PHP_ARG_ANALYZE($5)
+])
+
+dnl
+dnl PHP_ARG_ENABLE(arg-name, check message, help text[, default-val])
+dnl Sets PHP_ARG_NAME either to the user value or to the default value.
+dnl default-val defaults to no. 
+dnl
+AC_DEFUN(PHP_ARG_ENABLE,[
+PHP_REAL_ARG_ENABLE([$1],[$2],[$3],[$4],PHP_[]translit($1,a-z-,A-Z_))
+])
+
+AC_DEFUN(PHP_REAL_ARG_ENABLE,[
+AC_MSG_CHECKING($2)
+AC_ARG_ENABLE($1,[$3],$5=[$]enableval,$5=ifelse($4,,no,$4))
+PHP_ARG_ANALYZE($5)
+])
+
+AC_DEFUN(PHP_MODULE_PTR,[
+  EXTRA_MODULE_PTRS="$EXTRA_MODULE_PTRS $1,"
+])
+AC_DEFUN(PHP_CONFIG_NICE,[
+  rm -f $1
+  cat >$1<<EOF
+#! /bin/sh
+#
+# Created by configure
+
+EOF
+
+  for arg in [$]0 "[$]@"; do
+    echo "\"[$]arg\" \\" >> $1
+  done
+  echo '"[$]@"' >> $1
+  chmod +x $1
+])
+
+AC_DEFUN(PHP_TIME_R_TYPE,[
+AC_CACHE_CHECK(for type of reentrant time-related functions, ac_cv_time_r_type,[
+AC_TRY_RUN([
+#include <time.h>
+#include <stdlib.h>
+
+main() {
+char buf[27];
+struct tm t;
+time_t old = 0;
+int r, s;
+
+s = gmtime_r(&old, &t);
+r = (int) asctime_r(&t, buf, 26);
+if (r == s && s == 0) exit(0);
+exit(1);
+}
+],[
+  ac_cv_time_r_type=hpux
+],[
+  ac_cv_time_r_type=POSIX
+],[
+  ac_cv_time_r_type=POSIX
+])
+])
+if test "$ac_cv_time_r_type" = "hpux"; then
+  AC_DEFINE(PHP_HPUX_TIME_R,1,[Whether you have HP-UX 10.x])
+fi
+])
+
+AC_DEFUN(PHP_SUBST,[
+  PHP_VAR_SUBST="$PHP_VAR_SUBST $1"
+  AC_SUBST($1)
+])
+
+AC_DEFUN(PHP_FAST_OUTPUT,[
+  PHP_FAST_OUTPUT_FILES="$PHP_FAST_OUTPUT_FILES $1"
+])
+
+AC_DEFUN(PHP_MKDIR_P_CHECK,[
+  AC_CACHE_CHECK(for working mkdir -p, ac_cv_mkdir_p,[
+    test -d conftestdir && rm -rf conftestdir
+    mkdir -p conftestdir/somedir >/dev/null 2>&1
+    if test -d conftestdir/somedir; then
+      ac_cv_mkdir_p=yes
+    else
+      ac_cv_mkdir_p=no
+    fi
+    rm -rf conftestdir
+  ])
+])
+
+AC_DEFUN(PHP_GEN_CONFIG_VARS,[
+  PHP_MKDIR_P_CHECK
+  echo creating config_vars.mk
+  > config_vars.mk
+  for i in $PHP_VAR_SUBST; do
+    eval echo "$i = \$$i" >> config_vars.mk
+  done
+])
+
+AC_DEFUN(PHP_GEN_MAKEFILES,[
+  $SHELL $srcdir/build/fastgen.sh $srcdir $ac_cv_mkdir_p $PHP_FAST_OUTPUT_FILES
+])
+
+AC_DEFUN(PHP_TM_GMTOFF,[
+AC_CACHE_CHECK([for tm_gmtoff in struct tm], ac_cv_struct_tm_gmtoff,
+[AC_TRY_COMPILE([#include <sys/types.h>
+#include <$ac_cv_struct_tm>], [struct tm tm; tm.tm_gmtoff;],
+  ac_cv_struct_tm_gmtoff=yes, ac_cv_struct_tm_gmtoff=no)])
+
+if test "$ac_cv_struct_tm_gmtoff" = yes; then
+  AC_DEFINE(HAVE_TM_GMTOFF,1,[whether you have tm_gmtoff in struct tm])
+fi
+])
+
+dnl PHP_CONFIGURE_PART(MESSAGE)
+dnl Idea borrowed from mm
+AC_DEFUN(PHP_CONFIGURE_PART,[
+  AC_MSG_RESULT()
+  AC_MSG_RESULT(${T_MD}$1${T_ME})
+])
+
+AC_DEFUN(PHP_PROG_SENDMAIL,[
+AC_PATH_PROG(PROG_SENDMAIL, sendmail, /usr/lib/sendmail, $PATH:/usr/bin:/usr/sbin:/usr/etc:/etc:/usr/ucblib)
+if test -n "$PROG_SENDMAIL"; then
+  AC_DEFINE(HAVE_SENDMAIL,1,[whether you have sendmail])
+fi
+])
+
+AC_DEFUN(PHP_RUNPATH_SWITCH,[
+dnl check for -R, etc. switch
+AC_MSG_CHECKING(if compiler supports -R)
+AC_CACHE_VAL(php_cv_cc_dashr,[
+       SAVE_LIBS="${LIBS}"
+       LIBS="-R /usr/lib ${LIBS}"
+       AC_TRY_LINK([], [], php_cv_cc_dashr=yes, php_cv_cc_dashr=no)
+       LIBS="${SAVE_LIBS}"])
+AC_MSG_RESULT($php_cv_cc_dashr)
+if test $php_cv_cc_dashr = "yes"; then
+       ld_runpath_switch="-R"
+else
+       AC_MSG_CHECKING([if compiler supports -Wl,-rpath,])
+       AC_CACHE_VAL(php_cv_cc_rpath,[
+               SAVE_LIBS="${LIBS}"
+               LIBS="-Wl,-rpath,/usr/lib ${LIBS}"
+               AC_TRY_LINK([], [], php_cv_cc_rpath=yes, php_cv_cc_rpath=no)
+               LIBS="${SAVE_LIBS}"])
+       AC_MSG_RESULT($php_cv_cc_rpath)
+       if test $php_cv_cc_rpath = "yes"; then
+               ld_runpath_switch="-Wl,-rpath,"
+       else
+               dnl something innocuous
+               ld_runpath_switch="-L"
+       fi
+fi
+])
+
+AC_DEFUN(PHP_STRUCT_FLOCK,[
+AC_CACHE_CHECK(for struct flock,ac_cv_struct_flock,
+    AC_TRY_COMPILE([
+#include <unistd.h>
+#include <fcntl.h>
+        ],
+        [struct flock x;],
+        [
+          ac_cv_struct_flock=yes
+        ],[
+          ac_cv_struct_flock=no
+        ])
+)
+if test "$ac_cv_struct_flock" = "yes" ; then
+    AC_DEFINE(HAVE_STRUCT_FLOCK, 1,[whether you have struct flock])
+fi
+])
+
+AC_DEFUN(PHP_SOCKLEN_T,[
+AC_CACHE_CHECK(for socklen_t,ac_cv_socklen_t,
+  AC_TRY_COMPILE([
+#include <sys/types.h>
+#include <sys/socket.h>
+],[
+socklen_t x;
+],[
+  ac_cv_socklen_t=yes
+],[
+  ac_cv_socklen_t=no
+]))
+if test "$ac_cv_socklen_t" = "yes"; then
+  AC_DEFINE(HAVE_SOCKLEN_T, 1, [Whether you have socklen_t])
+fi
+])
+
+dnl
+dnl PHP_SET_SYM_FILE(path)
+dnl
+dnl set the path of the file which contains the symbol export list
+dnl
+AC_DEFUN(PHP_SET_SYM_FILE,
+[
+  PHP_SYM_FILE="$1"
+])
+
+dnl
+dnl PHP_BUILD_THREAD_SAFE
+dnl
+AC_DEFUN(PHP_BUILD_THREAD_SAFE,[
+  enable_experimental_zts=yes
+  if test "$pthreads_working" != "yes"; then
+    AC_MSG_ERROR(ZTS currently requires working POSIX threads. Your system does not support this.)
+  fi
+])
+
+dnl
+dnl PHP_BUILD_SHARED
+dnl
+AC_DEFUN(PHP_BUILD_SHARED,[
+  php_build_target=shared
+])
+
+dnl
+dnl PHP_BUILD_STATIC
+dnl
+AC_DEFUN(PHP_BUILD_STATIC,[
+  php_build_target=static
+])
+
+dnl
+dnl PHP_BUILD_PROGRAM
+dnl
+AC_DEFUN(PHP_BUILD_PROGRAM,[
+  php_build_target=program
+])
+
+dnl
+dnl AC_PHP_ONCE(namespace, variable, code)
+dnl
+dnl execute code, if variable is not set in namespace
+dnl
+AC_DEFUN(AC_PHP_ONCE,[
+  changequote({,})
+  unique=`echo $2|sed 's/[^a-zA-Z0-9]/_/g'`
+  changequote([,])
+  cmd="echo $ac_n \"\$$1$unique$ac_c\""
+  if test -n "$unique" && test "`eval $cmd`" = "" ; then
+    eval "$1$unique=set"
+    $3
+  fi
+])
+
+dnl
+dnl AC_EXPAND_PATH(path, variable)
+dnl
+dnl expands path to an absolute path and assigns it to variable
+dnl
+AC_DEFUN(AC_EXPAND_PATH,[
+  if test -z "$1" || echo "$1" | grep '^/' >/dev/null ; then
+    $2="$1"
+  else
+    changequote({,})
+    ep_dir="`echo $1|sed 's%/*[^/][^/]*$%%'`"
+    changequote([,])
+    ep_realdir="`(cd \"$ep_dir\" && pwd)`"
+    $2="$ep_realdir/`basename \"$1\"`"
+  fi
+])
+
+dnl
+dnl AC_ADD_LIBPATH(path[, shared-libadd])
+dnl
+dnl add a library to linkpath/runpath
+dnl
+AC_DEFUN(AC_ADD_LIBPATH,[
+  if test "$1" != "/usr/lib"; then
+    AC_EXPAND_PATH($1, ai_p)
+    if test "$ext_shared" = "yes" && test -n "$2"; then
+      $2="-R$1 -L$1 [$]$2"
+    else
+      AC_PHP_ONCE(LIBPATH, $ai_p, [
+        test -n "$ld_runpath_switch" && LDFLAGS="$LDFLAGS $ld_runpath_switch$ai_p"
+        LDFLAGS="$LDFLAGS -L$ai_p"
+        PHP_RPATHS="$PHP_RPATHS $ai_p"
+      ])
+    fi
+  fi
+])
+
+dnl
+dnl AC_BUILD_RPATH()
+dnl
+dnl builds RPATH from PHP_RPATHS
+dnl
+AC_DEFUN(AC_BUILD_RPATH,[
+  if test "$PHP_RPATH" = "yes" && test -n "$PHP_RPATHS"; then
+    OLD_RPATHS="$PHP_RPATHS"
+    PHP_RPATHS=""
+    for i in $OLD_RPATHS; do
+      PHP_LDFLAGS="$PHP_LDFLAGS -L$i"
+      PHP_RPATHS="$PHP_RPATHS -R $i"
+      NATIVE_RPATHS="$NATIVE_RPATHS ${ld_runpath_switch}$i"
+    done
+  fi
+])
+
+dnl
+dnl AC_ADD_INCLUDE(path)
+dnl
+dnl add a include path
+dnl
+AC_DEFUN(AC_ADD_INCLUDE,[
+  if test "$1" != "/usr/include"; then
+    AC_EXPAND_PATH($1, ai_p)
+    AC_PHP_ONCE(INCLUDEPATH, $ai_p, [
+      INCLUDES="$INCLUDES -I$ai_p"
+    ])
+  fi
+])
+
+AC_DEFUN(PHP_X_ADD_LIBRARY,[
+  ifelse($2,,$3="-l$1 [$]$3", $3="[$]$3 -l$1")
+])
+
+dnl
+dnl AC_ADD_LIBRARY(library[, append[, shared-libadd]])
+dnl
+dnl add a library to the link line
+dnl
+AC_DEFUN(AC_ADD_LIBRARY,[
+ case "$1" in
+ c|c_r|pthread*) ;;
+ *)
+ifelse($3,,[
+   AC_PHP_ONCE(LIBRARY, $1, [
+     PHP_X_ADD_LIBRARY($1,$2,LIBS)
+   ])
+],[
+   if test "$ext_shared" = "yes"; then
+     PHP_X_ADD_LIBRARY($1,$2,$3)
+   else
+     AC_ADD_LIBRARY($1,$2)
+   fi
+])
+  ;;
+  esac
+])
+
+dnl
+dnl AC_ADD_LIBRARY_DEFER(library[, append])
+dnl
+dnl add a library to the link line (deferred)
+AC_DEFUN(AC_ADD_LIBRARY_DEFER,[
+  AC_PHP_ONCE(LIBRARY, $1, [
+    ifelse($#, 1, DLIBS="-l$1 $DLIBS", DLIBS="$DLIBS -l$1")
+  ])
+])
+
+dnl
+dnl AC_ADD_LIBRARY_WITH_PATH(library, path[, shared-libadd])
+dnl
+dnl add a library to the link line and path to linkpath/runpath.
+dnl if shared-libadd is not empty and $ext_shared is yes,
+dnl shared-libadd will be assigned the library information
+dnl
+AC_DEFUN(AC_ADD_LIBRARY_WITH_PATH,[
+ifelse($3,,[
+  if test -n "$2"; then
+    AC_ADD_LIBPATH($2)
+  fi
+  AC_ADD_LIBRARY($1)
+],[
+  if test "$ext_shared" = "yes"; then
+    $3="-l$1 [$]$3"
+    if test -n "$2"; then
+      AC_ADD_LIBPATH($2,$3)
+    fi
+  else
+    AC_ADD_LIBRARY_WITH_PATH($1,$2)
+  fi
+])
+])
+
+dnl
+dnl AC_ADD_LIBRARY_DEFER_WITH_PATH(library, path)
+dnl
+dnl add a library to the link line (deferred)
+dnl and path to linkpath/runpath (not deferred)
+dnl
+AC_DEFUN(AC_ADD_LIBRARY_DEFER_WITH_PATH,[
+  AC_ADD_LIBPATH($2)
+  AC_ADD_LIBRARY_DEFER($1)
+])
+
+AC_DEFUN(AM_SET_LIBTOOL_VARIABLE,[
+  LIBTOOL='$(SHELL) $(top_builddir)/libtool $1'
+])
+
+dnl
+dnl Check for cc option
+dnl
+AC_DEFUN(AC_CHECK_CC_OPTION,[
+  echo "main(){return 0;}" > conftest.$ac_ext
+  opt="$1"
+  changequote({,})
+  var=`echo $opt|sed 's/[^a-zA-Z0-9]/_/g'`
+  changequote([,])
+  AC_MSG_CHECKING([if compiler supports -$1 really])
+  ac_php_compile="${CC-cc} -$opt -o conftest $CFLAGS $CPPFLAGS conftest.$ac_ext 2>&1"
+  if eval $ac_php_compile 2>&1 | egrep "$opt" > /dev/null 2>&1 ; then
+    eval php_cc_$var=no
+       AC_MSG_RESULT(no)
+  else
+    if eval ./conftest 2>/dev/null ; then
+      eval php_cc_$var=yes
+         AC_MSG_RESULT(yes)
+    else
+      eval php_cc_$var=no
+         AC_MSG_RESULT(no)
+    fi
+  fi
+])
+
+AC_DEFUN(PHP_REGEX,[
+
+if test "$REGEX_TYPE" = "php"; then
+  REGEX_LIB=regex/libregex.la
+  REGEX_DIR=regex
+  AC_DEFINE(HSREGEX,1,[ ])
+  AC_DEFINE(REGEX,1,[ ])
+  PHP_FAST_OUTPUT(regex/Makefile)
+elif test "$REGEX_TYPE" = "system"; then
+  AC_DEFINE(REGEX,0,[ ])
+fi
+
+AC_MSG_CHECKING(which regex library to use)
+AC_MSG_RESULT($REGEX_TYPE)
+
+PHP_SUBST(REGEX_DIR)
+PHP_SUBST(REGEX_LIB)
+PHP_SUBST(HSREGEX)
+])
+
+dnl
+dnl See if we have broken header files like SunOS has.
+dnl
+AC_DEFUN(AC_MISSING_FCLOSE_DECL,[
+  AC_MSG_CHECKING([for fclose declaration])
+  AC_TRY_COMPILE([#include <stdio.h>],[int (*func)() = fclose],[
+    AC_DEFINE(MISSING_FCLOSE_DECL,0,[ ])
+    AC_MSG_RESULT(ok)
+  ],[
+    AC_DEFINE(MISSING_FCLOSE_DECL,1,[ ])
+    AC_MSG_RESULT(missing)
+  ])
+])
+
+dnl
+dnl Check for broken sprintf()
+dnl
+AC_DEFUN(AC_BROKEN_SPRINTF,[
+  AC_CACHE_CHECK(whether sprintf is broken, ac_cv_broken_sprintf,[
+    AC_TRY_RUN([main() {char buf[20];exit(sprintf(buf,"testing 123")!=11); }],[
+      ac_cv_broken_sprintf=no
+    ],[
+      ac_cv_broken_sprintf=yes
+    ],[
+      ac_cv_broken_sprintf=no
+    ])
+  ])
+  if test "$ac_cv_broken_sprintf" = "yes"; then
+    AC_DEFINE(PHP_BROKEN_SPRINTF, 1, [ ])
+  else
+    AC_DEFINE(PHP_BROKEN_SPRINTF, 0, [ ])
+  fi
+])
+
+dnl
+dnl PHP_EXTENSION(extname [, shared])
+dnl
+dnl Includes an extension in the build.
+dnl
+dnl "extname" is the name of the ext/ subdir where the extension resides
+dnl "shared" can be set to "shared" or "yes" to build the extension as
+dnl a dynamically loadable library.
+dnl
+AC_DEFUN(PHP_EXTENSION,[
+  EXT_SUBDIRS="$EXT_SUBDIRS $1"
+  
+  if test -d "$abs_srcdir/ext/$1"; then
+dnl ---------------------------------------------- Internal Module
+    ext_builddir="ext/$1"
+    ext_srcdir="$abs_srcdir/ext/$1"
+  else
+dnl ---------------------------------------------- External Module
+    ext_builddir="."
+    ext_srcdir="$abs_srcdir"
+  fi
+
+  if test "$2" != "shared" && test "$2" != "yes"; then
+dnl ---------------------------------------------- Static module
+    LIB_BUILD($ext_builddir)
+    EXT_LTLIBS="$EXT_LTLIBS $ext_builddir/lib$1.la"
+    EXT_STATIC="$EXT_STATIC $1"
+  else 
+dnl ---------------------------------------------- Shared module
+    LIB_BUILD($ext_builddir,yes)
+    AC_DEFINE_UNQUOTED([COMPILE_DL_]translit($1,a-z-,A-Z_), 1, Whether to build $1 as dynamic module)
+  fi
+
+  PHP_FAST_OUTPUT($ext_builddir/Makefile)
+])
+
+PHP_SUBST(EXT_SUBDIRS)
+PHP_SUBST(EXT_STATIC)
+PHP_SUBST(EXT_SHARED)
+PHP_SUBST(EXT_LIBS)
+PHP_SUBST(EXT_LTLIBS)
+
+dnl
+dnl Solaris requires main code to be position independent in order
+dnl to let shared objects find symbols.  Weird.  Ugly.
+dnl
+dnl Must be run after all --with-NN options that let the user
+dnl choose dynamic extensions, and after the gcc test.
+dnl
+AC_DEFUN(PHP_SOLARIS_PIC_WEIRDNESS,[
+  AC_MSG_CHECKING(whether -fPIC is required)
+  if test "$EXT_SHARED" != ""; then
+    os=`uname -sr 2>/dev/null`
+    case "$os" in
+        "SunOS 5.6"|"SunOS 5.7")
+          case "$CC" in
+           gcc*|egcs*) CFLAGS="$CFLAGS -fPIC";;
+           *) CFLAGS="$CFLAGS -fpic";;
+         esac
+         AC_MSG_RESULT(yes);;
+       *)
+         AC_MSG_RESULT(no);;
+    esac
+  else
+    AC_MSG_RESULT(no)
+  fi
+])
+
+dnl
+dnl Checks whether $withval is "shared" or starts with "shared,XXX"
+dnl and sets $shared to "yes" or "no", and removes "shared,?" stuff
+dnl from $withval.
+dnl
+AC_DEFUN(PHP_WITH_SHARED,[
+    case $withval in
+       shared)
+           shared=yes
+           withval=yes
+           ;;
+       shared,*)
+           shared=yes
+           withval=`echo $withval | sed -e 's/^shared,//'`      
+           ;;
+       *)
+           shared=no
+           ;;
+    esac
+    if test -n "$php_always_shared"; then
+               shared=yes
+       fi
+])
+
+dnl The problem is that the default compilation flags in Solaris 2.6 won't
+dnl let programs access large files;  you need to tell the compiler that
+dnl you actually want your programs to work on large files.  For more
+dnl details about this brain damage please see:
+dnl http://www.sas.com/standards/large.file/x_open.20Mar96.html
+
+dnl Written by Paul Eggert <eggert@twinsun.com>.
+
+AC_DEFUN(AC_SYS_LFS,
+[dnl
+  # If available, prefer support for large files unless the user specified
+  # one of the CPPFLAGS, LDFLAGS, or LIBS variables.
+  AC_MSG_CHECKING(whether large file support needs explicit enabling)
+  ac_getconfs=''
+  ac_result=yes
+  ac_set=''
+  ac_shellvars='CPPFLAGS LDFLAGS LIBS'
+  for ac_shellvar in $ac_shellvars; do
+    case $ac_shellvar in
+      CPPFLAGS) ac_lfsvar=LFS_CFLAGS ;;
+      *) ac_lfsvar=LFS_$ac_shellvar ;;
+    esac
+    eval test '"${'$ac_shellvar'+set}"' = set && ac_set=$ac_shellvar
+    (getconf $ac_lfsvar) >/dev/null 2>&1 || { ac_result=no; break; }
+    ac_getconf=`getconf $ac_lfsvar`
+    ac_getconfs=$ac_getconfs$ac_getconf
+    eval ac_test_$ac_shellvar=\$ac_getconf
+  done
+  case "$ac_result$ac_getconfs" in
+    yes) ac_result=no ;;
+  esac
+  case "$ac_result$ac_set" in
+    yes?*) ac_result="yes, but $ac_set is already set, so use its settings"
+  esac
+  AC_MSG_RESULT($ac_result)
+  case $ac_result in
+    yes)
+      for ac_shellvar in $ac_shellvars; do
+        eval $ac_shellvar=\$ac_test_$ac_shellvar
+      done ;;
+  esac
+])
+
+AC_DEFUN(AC_SOCKADDR_SA_LEN,[
+  AC_CACHE_CHECK([for field sa_len in struct sockaddr],ac_cv_sockaddr_sa_len,[
+    AC_TRY_COMPILE([#include <sys/types.h>
+#include <sys/socket.h>],
+    [struct sockaddr s; s.sa_len;],
+    [ac_cv_sockaddr_sa_len=yes
+     AC_DEFINE(HAVE_SOCKADDR_SA_LEN,1,[ ])],
+    [ac_cv_sockaddr_sa_len=no])
+  ])
+])
+
+
+dnl ## PHP_AC_OUTPUT(file)
+dnl ## adds "file" to the list of files generated by AC_OUTPUT
+dnl ## This macro can be used several times.
+AC_DEFUN(PHP_OUTPUT,[
+  PHP_OUTPUT_FILES="$PHP_OUTPUT_FILES $1"
+])
+
+AC_DEFUN(PHP_DECLARED_TIMEZONE,[
+  AC_CACHE_CHECK(for declared timezone, ac_cv_declared_timezone,[
+    AC_TRY_COMPILE([
+#include <sys/types.h>
+#include <time.h>
+#ifdef HAVE_SYS_TIME_H
+#include <sys/time.h>
+#endif
+],[
+    time_t foo = (time_t) timezone;
+],[
+  ac_cv_declared_timezone=yes
+],[
+  ac_cv_declared_timezone=no
+])])
+  if test "$ac_cv_declared_timezone" = "yes"; then
+    AC_DEFINE(HAVE_DECLARED_TIMEZONE, 1, [Whether system headers declare timezone])
+  fi
+])
+
+AC_DEFUN(PHP_EBCDIC,[
+  AC_CACHE_CHECK([whether system uses EBCDIC],ac_cv_ebcdic,[
+  AC_TRY_RUN( [
+int main(void) { 
+  return (unsigned char)'A' != (unsigned char)0xC1; 
+} 
+],[
+  ac_cv_ebcdic="yes"
+],[
+  ac_cv_ebcdic="no"
+],[
+  ac_cv_ebcdic="no"
+])])
+  if test "$ac_cv_ebcdic" = "yes"; then
+    AC_DEFINE(CHARSET_EBCDIC,1, [Define if system uses EBCDIC])
+  fi
+])
+
+
+
+# serial 40 AC_PROG_LIBTOOL
+AC_DEFUN(AC_PROG_LIBTOOL,
+[AC_REQUIRE([AC_LIBTOOL_SETUP])dnl
+
+# Save cache, so that ltconfig can load it
+AC_CACHE_SAVE
+
+# Actually configure libtool.  ac_aux_dir is where install-sh is found.
+CC="$CC" CFLAGS="$CFLAGS" CPPFLAGS="$CPPFLAGS" \
+LD="$LD" LDFLAGS="$LDFLAGS" LIBS="$LIBS" \
+LN_S="$LN_S" NM="$NM" RANLIB="$RANLIB" \
+DLLTOOL="$DLLTOOL" AS="$AS" OBJDUMP="$OBJDUMP" \
+${CONFIG_SHELL-/bin/sh} $ac_aux_dir/ltconfig --no-reexec \
+$libtool_flags --no-verify $ac_aux_dir/ltmain.sh $host \
+|| AC_MSG_ERROR([libtool configure failed])
+
+# Reload cache, that may have been modified by ltconfig
+AC_CACHE_LOAD
+
+# This can be used to rebuild libtool when needed
+LIBTOOL_DEPS="$ac_aux_dir/ltconfig $ac_aux_dir/ltmain.sh"
+
+# Always use our own libtool.
+LIBTOOL='$(SHELL) $(top_builddir)/libtool'
+AC_SUBST(LIBTOOL)dnl
+
+# Redirect the config.log output again, so that the ltconfig log is not
+# clobbered by the next message.
+exec 5>>./config.log
+])
+
+AC_DEFUN(AC_LIBTOOL_SETUP,
+[AC_PREREQ(2.13)dnl
+AC_REQUIRE([AC_ENABLE_SHARED])dnl
+AC_REQUIRE([AC_ENABLE_STATIC])dnl
+AC_REQUIRE([AC_ENABLE_FAST_INSTALL])dnl
+AC_REQUIRE([AC_CANONICAL_HOST])dnl
+AC_REQUIRE([AC_CANONICAL_BUILD])dnl
+AC_REQUIRE([AC_PROG_RANLIB])dnl
+AC_REQUIRE([AC_PROG_CC])dnl
+AC_REQUIRE([AC_PROG_LD])dnl
+AC_REQUIRE([AC_PROG_NM])dnl
+AC_REQUIRE([AC_PROG_LN_S])dnl
+dnl
+
+# Check for any special flags to pass to ltconfig.
+libtool_flags="--cache-file=$cache_file"
+test "$enable_shared" = no && libtool_flags="$libtool_flags --disable-shared"
+test "$enable_static" = no && libtool_flags="$libtool_flags --disable-static"
+test "$enable_fast_install" = no && libtool_flags="$libtool_flags --disable-fast-install"
+test "$ac_cv_prog_gcc" = yes && libtool_flags="$libtool_flags --with-gcc"
+test "$ac_cv_prog_gnu_ld" = yes && libtool_flags="$libtool_flags --with-gnu-ld"
+ifdef([AC_PROVIDE_AC_LIBTOOL_DLOPEN],
+[libtool_flags="$libtool_flags --enable-dlopen"])
+ifdef([AC_PROVIDE_AC_LIBTOOL_WIN32_DLL],
+[libtool_flags="$libtool_flags --enable-win32-dll"])
+AC_ARG_ENABLE(libtool-lock,
+  [  --disable-libtool-lock  avoid locking (might break parallel builds)])
+test "x$enable_libtool_lock" = xno && libtool_flags="$libtool_flags --disable-lock"
+test x"$silent" = xyes && libtool_flags="$libtool_flags --silent"
+
+# Some flags need to be propagated to the compiler or linker for good
+# libtool support.
+case "$host" in
+*-*-irix6*)
+  # Find out which ABI we are using.
+  echo '[#]line __oline__ "configure"' > conftest.$ac_ext
+  if AC_TRY_EVAL(ac_compile); then
+    case "`/usr/bin/file conftest.o`" in
+    *32-bit*)
+      LD="${LD-ld} -32"
+      ;;
+    *N32*)
+      LD="${LD-ld} -n32"
+      ;;
+    *64-bit*)
+      LD="${LD-ld} -64"
+      ;;
+    esac
+  fi
+  rm -rf conftest*
+  ;;
+
+*-*-sco3.2v5*)
+  # On SCO OpenServer 5, we need -belf to get full-featured binaries.
+  SAVE_CFLAGS="$CFLAGS"
+  CFLAGS="$CFLAGS -belf"
+  AC_CACHE_CHECK([whether the C compiler needs -belf], lt_cv_cc_needs_belf,
+    [AC_TRY_LINK([],[],[lt_cv_cc_needs_belf=yes],[lt_cv_cc_needs_belf=no])])
+  if test x"$lt_cv_cc_needs_belf" != x"yes"; then
+    # this is probably gcc 2.8.0, egcs 1.0 or newer; no need for -belf
+    CFLAGS="$SAVE_CFLAGS"
+  fi
+  ;;
+
+ifdef([AC_PROVIDE_AC_LIBTOOL_WIN32_DLL],
+[*-*-cygwin* | *-*-mingw*)
+  AC_CHECK_TOOL(DLLTOOL, dlltool, false)
+  AC_CHECK_TOOL(AS, as, false)
+  AC_CHECK_TOOL(OBJDUMP, objdump, false)
+  ;;
+])
+esac
+])
+
+# AC_LIBTOOL_DLOPEN - enable checks for dlopen support
+AC_DEFUN(AC_LIBTOOL_DLOPEN, [AC_BEFORE([$0],[AC_LIBTOOL_SETUP])])
+
+# AC_LIBTOOL_WIN32_DLL - declare package support for building win32 dll's
+AC_DEFUN(AC_LIBTOOL_WIN32_DLL, [AC_BEFORE([$0], [AC_LIBTOOL_SETUP])])
+
+# AC_ENABLE_SHARED - implement the --enable-shared flag
+# Usage: AC_ENABLE_SHARED[(DEFAULT)]
+#   Where DEFAULT is either `yes' or `no'.  If omitted, it defaults to
+#   `yes'.
+AC_DEFUN(AC_ENABLE_SHARED, [dnl
+define([AC_ENABLE_SHARED_DEFAULT], ifelse($1, no, no, yes))dnl
+AC_ARG_ENABLE(shared,
+changequote(<<, >>)dnl
+<<  --enable-shared[=PKGS]  build shared libraries [default=>>AC_ENABLE_SHARED_DEFAULT],
+changequote([, ])dnl
+[p=${PACKAGE-default}
+case "$enableval" in
+yes) enable_shared=yes ;;
+no) enable_shared=no ;;
+*)
+  enable_shared=no
+  # Look at the argument we got.  We use all the common list separators.
+  IFS="${IFS=  }"; ac_save_ifs="$IFS"; IFS="${IFS}:,"
+  for pkg in $enableval; do
+    if test "X$pkg" = "X$p"; then
+      enable_shared=yes
+    fi
+  done
+  IFS="$ac_save_ifs"
+  ;;
+esac],
+enable_shared=AC_ENABLE_SHARED_DEFAULT)dnl
+])
+
+# AC_DISABLE_SHARED - set the default shared flag to --disable-shared
+AC_DEFUN(AC_DISABLE_SHARED, [AC_BEFORE([$0],[AC_LIBTOOL_SETUP])dnl
+AC_ENABLE_SHARED(no)])
+
+# AC_ENABLE_STATIC - implement the --enable-static flag
+# Usage: AC_ENABLE_STATIC[(DEFAULT)]
+#   Where DEFAULT is either `yes' or `no'.  If omitted, it defaults to
+#   `yes'.
+AC_DEFUN(AC_ENABLE_STATIC, [dnl
+define([AC_ENABLE_STATIC_DEFAULT], ifelse($1, no, no, yes))dnl
+AC_ARG_ENABLE(static,
+changequote(<<, >>)dnl
+<<  --enable-static[=PKGS]  build static libraries [default=>>AC_ENABLE_STATIC_DEFAULT],
+changequote([, ])dnl
+[p=${PACKAGE-default}
+case "$enableval" in
+yes) enable_static=yes ;;
+no) enable_static=no ;;
+*)
+  enable_static=no
+  # Look at the argument we got.  We use all the common list separators.
+  IFS="${IFS=  }"; ac_save_ifs="$IFS"; IFS="${IFS}:,"
+  for pkg in $enableval; do
+    if test "X$pkg" = "X$p"; then
+      enable_static=yes
+    fi
+  done
+  IFS="$ac_save_ifs"
+  ;;
+esac],
+enable_static=AC_ENABLE_STATIC_DEFAULT)dnl
+])
+
+# AC_DISABLE_STATIC - set the default static flag to --disable-static
+AC_DEFUN(AC_DISABLE_STATIC, [AC_BEFORE([$0],[AC_LIBTOOL_SETUP])dnl
+AC_ENABLE_STATIC(no)])
+
+
+# AC_ENABLE_FAST_INSTALL - implement the --enable-fast-install flag
+# Usage: AC_ENABLE_FAST_INSTALL[(DEFAULT)]
+#   Where DEFAULT is either `yes' or `no'.  If omitted, it defaults to
+#   `yes'.
+AC_DEFUN(AC_ENABLE_FAST_INSTALL, [dnl
+define([AC_ENABLE_FAST_INSTALL_DEFAULT], ifelse($1, no, no, yes))dnl
+AC_ARG_ENABLE(fast-install,
+changequote(<<, >>)dnl
+<<  --enable-fast-install[=PKGS]  optimize for fast installation [default=>>AC_ENABLE_FAST_INSTALL_DEFAULT],
+changequote([, ])dnl
+[p=${PACKAGE-default}
+case "$enableval" in
+yes) enable_fast_install=yes ;;
+no) enable_fast_install=no ;;
+*)
+  enable_fast_install=no
+  # Look at the argument we got.  We use all the common list separators.
+  IFS="${IFS=  }"; ac_save_ifs="$IFS"; IFS="${IFS}:,"
+  for pkg in $enableval; do
+    if test "X$pkg" = "X$p"; then
+      enable_fast_install=yes
+    fi
+  done
+  IFS="$ac_save_ifs"
+  ;;
+esac],
+enable_fast_install=AC_ENABLE_FAST_INSTALL_DEFAULT)dnl
+])
+
+# AC_ENABLE_FAST_INSTALL - set the default to --disable-fast-install
+AC_DEFUN(AC_DISABLE_FAST_INSTALL, [AC_BEFORE([$0],[AC_LIBTOOL_SETUP])dnl
+AC_ENABLE_FAST_INSTALL(no)])
+
+# AC_PROG_LD - find the path to the GNU or non-GNU linker
+AC_DEFUN(AC_PROG_LD,
+[AC_ARG_WITH(gnu-ld,
+[  --with-gnu-ld           assume the C compiler uses GNU ld [default=no]],
+test "$withval" = no || with_gnu_ld=yes, with_gnu_ld=no)
+AC_REQUIRE([AC_PROG_CC])dnl
+AC_REQUIRE([AC_CANONICAL_HOST])dnl
+AC_REQUIRE([AC_CANONICAL_BUILD])dnl
+ac_prog=ld
+if test "$ac_cv_prog_gcc" = yes; then
+  # Check if gcc -print-prog-name=ld gives a path.
+  AC_MSG_CHECKING([for ld used by GCC])
+  ac_prog=`($CC -print-prog-name=ld) 2>&5`
+  case "$ac_prog" in
+    # Accept absolute paths.
+changequote(,)dnl
+    [\\/]* | [A-Za-z]:[\\/]*)
+      re_direlt='/[^/][^/]*/\.\./'
+changequote([,])dnl
+      # Canonicalize the path of ld
+      ac_prog=`echo $ac_prog| sed 's%\\\\%/%g'`
+      while echo $ac_prog | grep "$re_direlt" > /dev/null 2>&1; do
+       ac_prog=`echo $ac_prog| sed "s%$re_direlt%/%"`
+      done
+      test -z "$LD" && LD="$ac_prog"
+      ;;
+  "")
+    # If it fails, then pretend we aren't using GCC.
+    ac_prog=ld
+    ;;
+  *)
+    # If it is relative, then search for the first ld in PATH.
+    with_gnu_ld=unknown
+    ;;
+  esac
+elif test "$with_gnu_ld" = yes; then
+  AC_MSG_CHECKING([for GNU ld])
+else
+  AC_MSG_CHECKING([for non-GNU ld])
+fi
+AC_CACHE_VAL(ac_cv_path_LD,
+[if test -z "$LD"; then
+  IFS="${IFS=  }"; ac_save_ifs="$IFS"; IFS="${IFS}${PATH_SEPARATOR-:}"
+  for ac_dir in $PATH; do
+    test -z "$ac_dir" && ac_dir=.
+    if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then
+      ac_cv_path_LD="$ac_dir/$ac_prog"
+      # Check to see if the program is GNU ld.  I'd rather use --version,
+      # but apparently some GNU ld's only accept -v.
+      # Break only if it was the GNU/non-GNU ld that we prefer.
+      if "$ac_cv_path_LD" -v 2>&1 < /dev/null | egrep '(GNU|with BFD)' > /dev/null; then
+       test "$with_gnu_ld" != no && break
+      else
+       test "$with_gnu_ld" != yes && break
+      fi
+    fi
+  done
+  IFS="$ac_save_ifs"
+else
+  ac_cv_path_LD="$LD" # Let the user override the test with a path.
+fi])
+LD="$ac_cv_path_LD"
+if test -n "$LD"; then
+  AC_MSG_RESULT($LD)
+else
+  AC_MSG_RESULT(no)
+fi
+test -z "$LD" && AC_MSG_ERROR([no acceptable ld found in \$PATH])
+AC_SUBST(LD)
+AC_PROG_LD_GNU
+])
+
+AC_DEFUN(AC_PROG_LD_GNU,
+[AC_CACHE_CHECK([if the linker ($LD) is GNU ld], ac_cv_prog_gnu_ld,
+[# I'd rather use --version here, but apparently some GNU ld's only accept -v.
+if $LD -v 2>&1 </dev/null | egrep '(GNU|with BFD)' 1>&5; then
+  ac_cv_prog_gnu_ld=yes
+else
+  ac_cv_prog_gnu_ld=no
+fi])
+])
+
+# AC_PROG_NM - find the path to a BSD-compatible name lister
+AC_DEFUN(AC_PROG_NM,
+[AC_MSG_CHECKING([for BSD-compatible nm])
+AC_CACHE_VAL(ac_cv_path_NM,
+[if test -n "$NM"; then
+  # Let the user override the test.
+  ac_cv_path_NM="$NM"
+else
+  IFS="${IFS=  }"; ac_save_ifs="$IFS"; IFS="${IFS}${PATH_SEPARATOR-:}"
+  for ac_dir in $PATH /usr/ccs/bin /usr/ucb /bin; do
+    test -z "$ac_dir" && ac_dir=.
+    if test -f $ac_dir/nm || test -f $ac_dir/nm$ac_exeext ; then
+      # Check to see if the nm accepts a BSD-compat flag.
+      # Adding the `sed 1q' prevents false positives on HP-UX, which says:
+      #   nm: unknown option "B" ignored
+      if ($ac_dir/nm -B /dev/null 2>&1 | sed '1q'; exit 0) | egrep /dev/null >/dev/null; then
+       ac_cv_path_NM="$ac_dir/nm -B"
+       break
+      elif ($ac_dir/nm -p /dev/null 2>&1 | sed '1q'; exit 0) | egrep /dev/null >/dev/null; then
+       ac_cv_path_NM="$ac_dir/nm -p"
+       break
+      else
+       ac_cv_path_NM=${ac_cv_path_NM="$ac_dir/nm"} # keep the first match, but
+       continue # so that we can try to find one that supports BSD flags
+      fi
+    fi
+  done
+  IFS="$ac_save_ifs"
+  test -z "$ac_cv_path_NM" && ac_cv_path_NM=nm
+fi])
+NM="$ac_cv_path_NM"
+AC_MSG_RESULT([$NM])
+AC_SUBST(NM)
+])
+
+# AC_CHECK_LIBM - check for math library
+AC_DEFUN(AC_CHECK_LIBM,
+[AC_REQUIRE([AC_CANONICAL_HOST])dnl
+LIBM=
+case "$host" in
+*-*-beos* | *-*-cygwin*)
+  # These system don't have libm
+  ;;
+*-ncr-sysv4.3*)
+  AC_CHECK_LIB(mw, _mwvalidcheckl, LIBM="-lmw")
+  AC_CHECK_LIB(m, main, LIBM="$LIBM -lm")
+  ;;
+*)
+  AC_CHECK_LIB(m, main, LIBM="-lm")
+  ;;
+esac
+])
+
+# AC_LIBLTDL_CONVENIENCE[(dir)] - sets LIBLTDL to the link flags for
+# the libltdl convenience library, adds --enable-ltdl-convenience to
+# the configure arguments.  Note that LIBLTDL is not AC_SUBSTed, nor
+# is AC_CONFIG_SUBDIRS called.  If DIR is not provided, it is assumed
+# to be `${top_builddir}/libltdl'.  Make sure you start DIR with
+# '${top_builddir}/' (note the single quotes!) if your package is not
+# flat, and, if you're not using automake, define top_builddir as
+# appropriate in the Makefiles.
+AC_DEFUN(AC_LIBLTDL_CONVENIENCE, [AC_BEFORE([$0],[AC_LIBTOOL_SETUP])dnl
+  case "$enable_ltdl_convenience" in
+  no) AC_MSG_ERROR([this package needs a convenience libltdl]) ;;
+  "") enable_ltdl_convenience=yes
+      ac_configure_args="$ac_configure_args --enable-ltdl-convenience" ;;
+  esac
+  LIBLTDL=ifelse($#,1,$1,['${top_builddir}/libltdl'])/libltdlc.la
+  INCLTDL=ifelse($#,1,-I$1,['-I${top_builddir}/libltdl'])
+])
+
+# AC_LIBLTDL_INSTALLABLE[(dir)] - sets LIBLTDL to the link flags for
+# the libltdl installable library, and adds --enable-ltdl-install to
+# the configure arguments.  Note that LIBLTDL is not AC_SUBSTed, nor
+# is AC_CONFIG_SUBDIRS called.  If DIR is not provided, it is assumed
+# to be `${top_builddir}/libltdl'.  Make sure you start DIR with
+# '${top_builddir}/' (note the single quotes!) if your package is not
+# flat, and, if you're not using automake, define top_builddir as
+# appropriate in the Makefiles.
+# In the future, this macro may have to be called after AC_PROG_LIBTOOL.
+AC_DEFUN(AC_LIBLTDL_INSTALLABLE, [AC_BEFORE([$0],[AC_LIBTOOL_SETUP])dnl
+  AC_CHECK_LIB(ltdl, main,
+  [test x"$enable_ltdl_install" != xyes && enable_ltdl_install=no],
+  [if test x"$enable_ltdl_install" = xno; then
+     AC_MSG_WARN([libltdl not installed, but installation disabled])
+   else
+     enable_ltdl_install=yes
+   fi
+  ])
+  if test x"$enable_ltdl_install" = x"yes"; then
+    ac_configure_args="$ac_configure_args --enable-ltdl-install"
+    LIBLTDL=ifelse($#,1,$1,['${top_builddir}/libltdl'])/libltdl.la
+    INCLTDL=ifelse($#,1,-I$1,['-I${top_builddir}/libltdl'])
+  else
+    ac_configure_args="$ac_configure_args --enable-ltdl-install=no"
+    LIBLTDL="-lltdl"
+    INCLTDL=
+  fi
+])
+
+dnl old names
+AC_DEFUN(AM_PROG_LIBTOOL, [indir([AC_PROG_LIBTOOL])])dnl
+AC_DEFUN(AM_ENABLE_SHARED, [indir([AC_ENABLE_SHARED], $@)])dnl
+AC_DEFUN(AM_ENABLE_STATIC, [indir([AC_ENABLE_STATIC], $@)])dnl
+AC_DEFUN(AM_DISABLE_SHARED, [indir([AC_DISABLE_SHARED], $@)])dnl
+AC_DEFUN(AM_DISABLE_STATIC, [indir([AC_DISABLE_STATIC], $@)])dnl
+AC_DEFUN(AM_PROG_LD, [indir([AC_PROG_LD])])dnl
+AC_DEFUN(AM_PROG_NM, [indir([AC_PROG_NM])])dnl
+
+dnl This is just to silence aclocal about the macro not being used
+ifelse([AC_DISABLE_FAST_INSTALL])dnl
+
diff --git a/contrib/php4/build/dynlib.mk b/contrib/php4/build/dynlib.mk
new file mode 100644 (file)
index 0000000..d7e695c
--- /dev/null
@@ -0,0 +1,5 @@
+all: all-recursive
+
+include $(builddir)/libs.mk
+
+include $(top_srcdir)/build/rules.mk
diff --git a/contrib/php4/build/fastgen.sh b/contrib/php4/build/fastgen.sh
new file mode 100755 (executable)
index 0000000..81e8568
--- /dev/null
@@ -0,0 +1,58 @@
+#! /bin/sh
+#
+# Copyright (c) 1999, 2000 Sascha Schumann. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1. Redistributions of source code must retain the above copyright
+#    notice, this list of conditions and the following disclaimer.
+# 2. Redistributions in binary form must reproduce the above copyright
+#    notice, this list of conditions and the following disclaimer in the
+#    documentation and/or other materials provided with the distribution.
+# 
+# THIS SOFTWARE IS PROVIDED BY SASCHA SCHUMANN ``AS IS'' AND ANY EXPRESS OR
+# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+# MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO
+# EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,
+# OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
+# LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+# NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+# EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+#
+##############################################################################
+# $Id$ 
+#
+
+srcdir=$1
+shift
+
+mkdir_p=$1
+shift
+
+top_srcdir=`(cd $srcdir; pwd)`
+top_builddir=`pwd`
+
+if test "$mkdir_p" = "yes"; then
+  mkdir_p="mkdir -p"
+else
+  mkdir_p="$top_srcdir/helpers/mkdir.sh"
+fi
+
+for makefile in $@; do
+  echo "creating $makefile"
+  dir=`echo $makefile|sed 's%/*[^/][^/]*$%%'`
+  $mkdir_p "$dir/"
+
+  cat - $top_srcdir/$makefile.in <<EOF >$makefile
+top_srcdir   = $top_srcdir
+top_builddir = $top_builddir
+srcdir       = $top_srcdir/$dir
+builddir     = $top_builddir/$dir
+VPATH        = $top_srcdir/$dir
+EOF
+  
+  test -z "$dir" || touch $dir/.deps
+done
diff --git a/contrib/php4/build/library.mk b/contrib/php4/build/library.mk
new file mode 100644 (file)
index 0000000..8950e94
--- /dev/null
@@ -0,0 +1,30 @@
+# Copyright (c) 1999, 2000 Sascha Schumann. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1. Redistributions of source code must retain the above copyright
+#    notice, this list of conditions and the following disclaimer.
+# 2. Redistributions in binary form must reproduce the above copyright
+#    notice, this list of conditions and the following disclaimer in the
+#    documentation and/or other materials provided with the distribution.
+# 
+# THIS SOFTWARE IS PROVIDED BY SASCHA SCHUMANN ``AS IS'' AND ANY EXPRESS OR
+# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+# MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO
+# EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,
+# OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
+# LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+# NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+# EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+#
+##############################################################################
+# $Id$ 
+#
+
+LTLIBRARY_OBJECTS = $(LTLIBRARY_SOURCES:.c=.lo)
+
+$(LTLIBRARY_NAME): $(LTLIBRARY_OBJECTS) $(LTLIBRARY_DEPENDENCIES)
+       $(LINK) $(LTLIBRARY_LDFLAGS) $(LTLIBRARY_OBJECTS) $(LTLIBRARY_LIBADD)
diff --git a/contrib/php4/build/ltlib.mk b/contrib/php4/build/ltlib.mk
new file mode 100644 (file)
index 0000000..9538be9
--- /dev/null
@@ -0,0 +1,31 @@
+# Copyright (c) 1999 Sascha Schumann. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1. Redistributions of source code must retain the above copyright
+#    notice, this list of conditions and the following disclaimer.
+# 2. Redistributions in binary form must reproduce the above copyright
+#    notice, this list of conditions and the following disclaimer in the
+#    documentation and/or other materials provided with the distribution.
+# 
+# THIS SOFTWARE IS PROVIDED BY SASCHA SCHUMANN ``AS IS'' AND ANY EXPRESS OR
+# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+# MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO
+# EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,
+# OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
+# LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+# NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+# EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+#
+##############################################################################
+# $Id$ 
+#
+
+targets = $(LTLIBRARY_NAME)
+
+include $(top_srcdir)/build/rules.mk
+include $(top_srcdir)/build/library.mk
+
diff --git a/contrib/php4/build/program.mk b/contrib/php4/build/program.mk
new file mode 100644 (file)
index 0000000..f0377af
--- /dev/null
@@ -0,0 +1,30 @@
+# Copyright (c) 1999, 2000 Sascha Schumann. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1. Redistributions of source code must retain the above copyright
+#    notice, this list of conditions and the following disclaimer.
+# 2. Redistributions in binary form must reproduce the above copyright
+#    notice, this list of conditions and the following disclaimer in the
+#    documentation and/or other materials provided with the distribution.
+# 
+# THIS SOFTWARE IS PROVIDED BY SASCHA SCHUMANN ``AS IS'' AND ANY EXPRESS OR
+# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+# MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO
+# EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,
+# OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
+# LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+# NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+# EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+#
+##############################################################################
+# $Id$ 
+#
+
+PROGRAM_OBJECTS = $(PROGRAM_SOURCES:.c=.lo)
+
+$(PROGRAM_NAME): $(PROGRAM_DEPENDENCIES) $(PROGRAM_OBJECTS)
+       $(LINK) $(PROGRAM_LDFLAGS) $(PROGRAM_OBJECTS) $(PROGRAM_LDADD)
diff --git a/contrib/php4/build/rules.mk b/contrib/php4/build/rules.mk
new file mode 100644 (file)
index 0000000..11c749c
--- /dev/null
@@ -0,0 +1,116 @@
+# Copyright (c) 1999, 2000 Sascha Schumann. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1. Redistributions of source code must retain the above copyright
+#    notice, this list of conditions and the following disclaimer.
+# 2. Redistributions in binary form must reproduce the above copyright
+#    notice, this list of conditions and the following disclaimer in the
+#    documentation and/or other materials provided with the distribution.
+# 
+# THIS SOFTWARE IS PROVIDED BY SASCHA SCHUMANN ``AS IS'' AND ANY EXPRESS OR
+# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+# MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO
+# EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,
+# OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
+# LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+# NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+# EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+#
+##############################################################################
+# $Id$ 
+#
+
+include $(top_builddir)/config_vars.mk
+
+COMPILE = $(CC) $(DEFS) $(INCLUDES) $(EXTRA_INCLUDES) $(CPPFLAGS) $(CFLAGS) $(EXTRA_CFLAGS)
+LTCOMPILE = $(LIBTOOL) --mode=compile $(CC) $(DEFS) $(INCLUDES) $(EXTRA_INCLUDES) $(CPPFLAGS) $(CFLAGS) $(EXTRA_CFLAGS)
+CCLD = $(CC)
+LINK = $(LIBTOOL) --mode=link $(CCLD) $(CFLAGS) $(EXTRA_CFLAGS) $(LDFLAGS) -o $@
+mkinstalldirs = $(top_srcdir)/build/shtool mkdir -f -p
+INSTALL = $(top_srcdir)/build/shtool install -c
+INSTALL_DATA = $(INSTALL) -m 644
+SHARED_COMPILE = $(SHARED_LIBTOOL) --mode=compile $(CC) $(DEFS) $(INCLUDES) $(EXTRA_INCLUDES) $(CPPFLAGS) $(CFLAGS) $(EXTRA_CFLAGS) -c $< && touch $@
+DEFS = -DHAVE_CONFIG_H -I. -I$(srcdir) -I$(top_builddir) -I$(top_builddir)/main
+
+moduledir    = $(EXTENSION_DIR)
+
+.SUFFIXES:
+.SUFFIXES: .slo .c .lo .o .s .y .l
+
+.c.o:
+       $(COMPILE) -c $<
+
+.s.o:
+       $(COMPILE) -c $<
+
+.c.lo:
+       $(PHP_COMPILE)
+
+.s.lo:
+       $(PHP_COMPILE)
+
+.c.slo:
+       $(SHARED_COMPILE)
+
+.y.c:
+       $(YACC) $(YFLAGS) $< && mv y.tab.c $*.c
+       if test -f y.tab.h; then \
+       if cmp -s y.tab.h $*.h; then rm -f y.tab.h; else mv y.tab.h $*.h; fi; \
+       else :; fi
+
+.l.c:
+       $(LEX) $(LFLAGS) $< && mv $(LEX_OUTPUT_ROOT).c $@
+
+install_targets = install-modules
+
+all: all-recursive
+install: install-recursive
+
+distclean-recursive depend-recursive clean-recursive all-recursive install-recursive:
+       @otarget=`echo $@|sed s/-recursive//`; \
+       list='$(SUBDIRS)'; for i in $$list; do \
+               target="$$otarget"; \
+               echo "Making $$target in $$i"; \
+               if test "$$i" = "."; then \
+                       ok=yes; \
+                       target="$$target-p"; \
+               fi; \
+               (cd $$i && $(MAKE) $$target) || exit 1; \
+       done; \
+       if test "$$otarget" = "all" && test -z '$(targets)'; then ok=yes; fi; \
+       if test "$$ok" != "yes"; then $(MAKE) "$$otarget-p" || exit 1; fi
+
+all-p: $(targets)
+install-p: $(targets) $(install_targets)
+distclean-p depend-p clean-p:
+
+depend: depend-recursive
+       test "`echo *.c`" = '*.c' || perl $(top_srcdir)/build/mkdep.perl $(CPP) $(INCLUDES) $(EXTRA_INCLUDES) *.c > $(builddir)/.deps
+
+clean: clean-recursive clean-x
+
+clean-x:
+       rm -f $(targets) *.lo *.slo *.la *.o $(CLEANFILES)
+       rm -rf .libs
+
+distclean: distclean-recursive clean-x
+       rm -f config.cache config.log config.status config_vars.mk libtool \
+       php_config.h stamp-h Makefile build-defs.h php4.spec libphp4.module
+
+install-modules:
+       @test -d modules && \
+       $(mkinstalldirs) $(moduledir) && \
+       echo "installing shared modules into $(moduledir)" && \
+       rm -f modules/*.la && \
+       cp modules/* $(moduledir) || true
+
+include $(builddir)/.deps
+
+.PHONY: all-recursive clean-recursive install-recursive \
+$(install_targets) install all clean depend depend-recursive shared \
+distclean-recursive distclean clean-x all-p install-p distclean-p \
+depend-p clean-p
diff --git a/contrib/php4/build/shtool b/contrib/php4/build/shtool
new file mode 100755 (executable)
index 0000000..4c1a739
--- /dev/null
@@ -0,0 +1,716 @@
+#!/bin/sh
+##
+##  GNU shtool -- The GNU Portable Shell Tool
+##  Copyright (c) 1994-2000 Ralf S. Engelschall <rse@engelschall.com>
+##
+##  See http://www.gnu.org/software/shtool/ for more information.
+##  See ftp://ftp.gnu.org/gnu/shtool/ for latest version.
+##
+##  Version 1.4.9 (16-Apr-2000)
+##  Ingredients: 3/17 available modules
+##
+
+##
+##  This program is free software; you can redistribute it and/or modify
+##  it under the terms of the GNU General Public License as published by
+##  the Free Software Foundation; either version 2 of the License, or
+##  (at your option) any later version.
+##
+##  This program is distributed in the hope that it will be useful,
+##  but WITHOUT ANY WARRANTY; without even the implied warranty of
+##  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+##  General Public License for more details.
+##
+##  You should have received a copy of the GNU General Public License
+##  along with this program; if not, write to the Free Software
+##  Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
+##  USA, or contact Ralf S. Engelschall <rse@engelschall.com>.
+##
+##  Notice: Given that you include this file verbatim into your own
+##  source tree, you are justified in saying that it remains separate
+##  from your package, and that this way you are simply just using GNU
+##  shtool. So, in this situation, there is no requirement that your
+##  package itself is licensed under the GNU General Public License in
+##  order to take advantage of GNU shtool.
+##
+
+##
+##  Usage: shtool [<options>] [<cmd-name> [<cmd-options>] [<cmd-args>]]
+##
+##  Available commands:
+##    echo       Print string with optional construct expansion
+##    install    Install a program, script or datafile
+##    mkdir      Make one or more directories
+##
+##  Not available commands (because module was not built-in):
+##    mdate      Pretty-print modification time of a file or dir
+##    table      Pretty-print a field-separated list as a table
+##    prop       Display progress with a running propeller
+##    move       Move files with simultaneous substitution
+##    mkln       Make link with calculation of relative paths
+##    mkshadow   Make a shadow tree through symbolic links
+##    fixperm    Fix file permissions inside a source tree
+##    tarball    Roll distribution tarballs
+##    guessos    Simple operating system guesser
+##    arx        Extended archive command
+##    slo        Separate linker options by library class
+##    scpp       Sharing C Pre-Processor
+##    version    Generate and maintain a version information file
+##    path       Deal with program paths
+##
+
+if [ $# -eq 0 ]; then
+    echo "$0:Error: invalid command line" 1>&2
+    echo "$0:Hint:  run \`$0 -h' for usage" 1>&2
+    exit 1
+fi
+if [ ".$1" = ".-h" -o ".$1" = ".--help" ]; then
+    echo "This is GNU shtool, version 1.4.9 (16-Apr-2000)"
+    echo "Copyright (c) 1994-2000 Ralf S. Engelschall <rse@engelschall.com>"
+    echo "Report bugs to <bug-shtool@gnu.org>"
+    echo ''
+    echo "Usage: shtool [<options>] [<cmd-name> [<cmd-options>] [<cmd-args>]]" 
+    echo ''
+    echo 'Available global <options>:'
+    echo '  -v, --version   display shtool version information'
+    echo '  -h, --help      display shtool usage help page (this one)'
+    echo '  -d, --debug     display shell trace information'
+    echo ''
+    echo 'Available <cmd-name> [<cmd-options>] [<cmd-args>]:'
+    echo '  echo     [-n] [-e] [<str> ...]'
+    echo '  install  [-v] [-t] [-c] [-C] [-s] [-m<mode>] [-o<owner>] [-g<group>]'
+    echo '           [-e<ext>] <file> <path>'
+    echo '  mkdir    [-t] [-f] [-p] [-m<mode>] <dir> [<dir> ...]'
+    echo ''
+    echo 'Not available <cmd-name> (because module was not built-in):'
+    echo '  mdate    [-n] [-z] [-s] [-d] [-f<str>] [-o<spec>] <path>'
+    echo '  table    [-F<sep>] [-w<width>] [-c<cols>] [-s<strip>] <str><sep><str>...'
+    echo '  prop     [-p<str>]'
+    echo '  move     [-v] [-t] [-e] [-p] <src-file> <dst-file>'
+    echo '  mkln     [-t] [-f] [-s] <src-path> [<src-path> ...] <dst-path>'
+    echo '  mkshadow [-v] [-t] [-a] <src-dir> <dst-dir>'
+    echo '  fixperm  [-v] [-t] <path> [<path> ...]'
+    echo '  tarball  [-t] [-v] [-o <tarball>] [-c <prog>] [-d <dir>] [-u'
+    echo '           <user>] [-g <group>] [-e <pattern>] <path> [<path> ...]'
+    echo '  guessos  '
+    echo '  arx      [-t] [-C<cmd>] <op> <archive> [<file> ...]'
+    echo '  slo      [-p<str>] -- -L<dir> -l<lib> [-L<dir> -l<lib> ...]'
+    echo '  scpp     [-v] [-p] [-f<filter>] [-o<ofile>] [-t<tfile>] [-M<mark>]'
+    echo '           [-D<dname>] [-C<cname>] <file> [<file> ...]'
+    echo '  version  [-l<lang>] [-n<name>] [-p<prefix>] [-s<version>] [-i<knob>]'
+    echo '           [-d<type>] <file>'
+    echo '  path     [-s] [-r] [-d] [-b] [-m] [-p<path>] <str> [<str> ...]'
+    echo ''
+    exit 0
+fi
+if [ ".$1" = ".-v" -o ".$1" = ."--version" ]; then
+    echo "GNU shtool 1.4.9 (16-Apr-2000)"
+    exit 0
+fi
+if [ ".$1" = ".-d" -o ".$1" = ."--debug" ]; then
+    shift
+    set -x
+fi
+name=`echo "$0" | sed -e 's;.*/\([^/]*\)$;\1;' -e 's;-sh$;;' -e 's;\.sh$;;'`
+case "$name" in
+    echo|install|mkdir )
+        #   implicit tool command selection
+        tool="$name"
+        ;;
+    * )
+        #   explicit tool command selection
+        tool="$1"
+        shift
+        ;;
+esac
+arg_spec=""
+opt_spec=""
+gen_tmpfile=no
+
+##
+##  DISPATCH INTO SCRIPT PROLOG
+##
+
+case $tool in
+    echo )
+        str_tool="echo"
+        str_usage="[-n] [-e] [<str> ...]"
+        arg_spec="0+"
+        opt_spec="n.e."
+        opt_n=no
+        opt_e=no
+        ;;
+    install )
+        str_tool="install"
+        str_usage="[-v] [-t] [-c] [-C] [-s] [-m<mode>] [-o<owner>] [-g<group>] [-e<ext>] <file> <path>"
+        arg_spec="2="
+        opt_spec="v.t.c.C.s.m:o:g:e:"
+        opt_v=no
+        opt_t=no
+        opt_c=no
+        opt_C=no
+        opt_s=no
+        opt_m=""
+        opt_o=""
+        opt_g=""
+        opt_e=""
+        ;;
+    mkdir )
+        str_tool="mkdir"
+        str_usage="[-t] [-f] [-p] [-m<mode>] <dir> [<dir> ...]"
+        arg_spec="1+"
+        opt_spec="t.f.p.m:"
+        opt_t=no
+        opt_f=no
+        opt_p=no
+        opt_m=""
+        ;;
+    -* )
+        echo "$0:Error: unknown option \`$tool'" 2>&1
+        echo "$0:Hint:  run \`$0 -h' for usage" 2>&1
+        exit 1
+        ;;
+    * )
+        echo "$0:Error: unknown command \`$tool'" 2>&1
+        echo "$0:Hint:  run \`$0 -h' for usage" 2>&1
+        exit 1
+        ;;
+esac
+
+##
+##  COMMON UTILITY CODE
+##
+
+#   determine name of tool
+if [ ".$tool" != . ]; then
+    #   used inside shtool script
+    toolcmd="$0 $tool"
+    toolcmdhelp="shtool $tool"
+    msgprefix="shtool:$tool"
+else
+    #   used as standalone script
+    toolcmd="$0"
+    toolcmdhelp="sh $0"
+    msgprefix="$str_tool"
+fi
+
+#   parse argument specification string
+eval `echo $arg_spec |\
+      sed -e 's/^\([0-9]*\)\([+=]\)/arg_NUMS=\1; arg_MODE=\2/'`
+
+#   parse option specification string
+eval `echo h.$opt_spec |\
+      sed -e 's/\([a-zA-Z0-9]\)\([.:+]\)/opt_MODE_\1=\2;/g'`
+
+#   interate over argument line
+opt_PREV=''
+while [ $# -gt 0 ]; do
+    #   special option stops processing
+    if [ ".$1" = ".--" ]; then
+        shift
+        break
+    fi
+
+    #   determine option and argument
+    opt_ARG_OK=no
+    if [ ".$opt_PREV" != . ]; then
+        #   merge previous seen option with argument
+        opt_OPT="$opt_PREV"
+        opt_ARG="$1"
+        opt_ARG_OK=yes
+        opt_PREV=''
+    else
+        #   split argument into option and argument
+        case "$1" in
+            -[a-zA-Z0-9]*)
+                eval `echo "x$1" |\
+                      sed -e 's/^x-\([a-zA-Z0-9]\)/opt_OPT="\1";/' \
+                          -e 's/";\(.*\)$/"; opt_ARG="\1"/'`
+                ;;
+            -[a-zA-Z0-9])
+                opt_OPT=`echo "x$1" | cut -c3-`
+                opt_ARG=''
+                ;;
+            *)
+                break
+                ;;
+        esac
+    fi
+
+    #   eat up option
+    shift
+
+    #   determine whether option needs an argument
+    eval "opt_MODE=\$opt_MODE_${opt_OPT}"
+    if [ ".$opt_ARG" = . -a ".$opt_ARG_OK" != .yes ]; then
+        if [ ".$opt_MODE" = ".:" -o ".$opt_MODE" = ".+" ]; then
+            opt_PREV="$opt_OPT"
+            continue
+        fi
+    fi
+
+    #   process option
+    case $opt_MODE in
+        '.' )
+            #   boolean option
+            eval "opt_${opt_OPT}=yes"
+            ;;
+        ':' )
+            #   option with argument (multiple occurances override)
+            eval "opt_${opt_OPT}=\"\$opt_ARG\""
+            ;;
+        '+' )
+            #   option with argument (multiple occurances append)
+            eval "opt_${opt_OPT}=\"\$opt_${opt_OPT} \$opt_ARG\""
+            ;;
+        * )
+            echo "$msgprefix:Error: unknown option: \`-$opt_OPT'" 1>&2
+            echo "$msgprefix:Hint:  run \`$toolcmdhelp -h' or \`man shtool' for details" 1>&2
+            exit 1
+            ;;
+    esac
+done
+if [ ".$opt_PREV" != . ]; then
+    echo "$msgprefix:Error: missing argument to option \`-$opt_PREV'" 1>&2
+    echo "$msgprefix:Hint:  run \`$toolcmdhelp -h' or \`man shtool' for details" 1>&2
+    exit 1
+fi
+
+#   process help option
+if [ ".$opt_h" = .yes ]; then
+    echo "Usage: $toolcmdhelp $str_usage"
+    exit 0
+fi
+
+#   complain about incorrect number of arguments
+case $arg_MODE in
+    '=' )
+        if [ $# -ne $arg_NUMS ]; then
+            echo "$msgprefix:Error: invalid number of arguments (exactly $arg_NUMS expected)" 1>&2
+            echo "$msgprefix:Hint:  run \`$toolcmd -h' or \`man shtool' for details" 1>&2
+            exit 1
+        fi
+        ;;
+    '+' )
+        if [ $# -lt $arg_NUMS ]; then
+            echo "$msgprefix:Error: invalid number of arguments (at least $arg_NUMS expected)" 1>&2
+            echo "$msgprefix:Hint:  run \`$toolcmd -h' or \`man shtool' for details" 1>&2
+            exit 1
+        fi
+        ;;
+esac
+
+#   establish a temporary file on request
+if [ ".$gen_tmpfile" = .yes ]; then
+    if [ ".$TMPDIR" != . ]; then
+        tmpdir="$TMPDIR"
+    elif [ ".$TEMPDIR" != . ]; then
+        tmpdir="$TEMPDIR"
+    else
+        tmpdir="/tmp"
+    fi
+    tmpfile="$tmpdir/.shtool.$$"
+    rm -f $tmpfile >/dev/null 2>&1
+    touch $tmpfile
+fi
+
+##
+##  DISPATCH INTO SCRIPT BODY
+##
+
+case $tool in
+
+echo )
+    ##
+    ##  echo -- Print string with optional construct expansion
+    ##  Copyright (c) 1998-2000 Ralf S. Engelschall <rse@engelschall.com>
+    ##  Originally written for WML as buildinfo
+    ##
+    
+    text="$*"
+    
+    #   check for broken escape sequence expansion
+    seo=''
+    bytes=`echo '\1' | wc -c | awk '{ printf("%s", $1); }'`
+    if [ ".$bytes" != .3 ]; then
+        bytes=`echo -E '\1' | wc -c | awk '{ printf("%s", $1); }'`
+        if [ ".$bytes" = .3 ]; then
+            seo='-E'
+        fi
+    fi
+    
+    #   check for existing -n option (to suppress newline)
+    minusn=''
+    bytes=`echo -n 123 2>/dev/null | wc -c | awk '{ printf("%s", $1); }'`
+    if [ ".$bytes" = .3 ]; then
+        minusn='-n'
+    fi
+    
+    #   determine terminal bold sequence
+    term_bold='' 
+    term_norm=''
+    if [ ".$opt_e" = .yes -a ".`echo $text | egrep '%[Bb]'`" != . ]; then
+        case $TERM in
+            #   for the most important terminal types we directly know the sequences
+            xterm|xterm*|vt220|vt220*)
+                term_bold=`awk 'BEGIN { printf("%c%c%c%c", 27, 91, 49, 109); }' </dev/null 2>/dev/null`
+                term_norm=`awk 'BEGIN { printf("%c%c%c", 27, 91, 109); }' </dev/null 2>/dev/null`
+                ;;
+            vt100|vt100*)
+                term_bold=`awk 'BEGIN { printf("%c%c%c%c%c%c", 27, 91, 49, 109, 0, 0); }' </dev/null 2>/dev/null`
+                term_norm=`awk 'BEGIN { printf("%c%c%c%c%c", 27, 91, 109, 0, 0); }' </dev/null 2>/dev/null`
+                ;;
+            #   for all others, we try to use a possibly existing `tput' or `tcout' utility
+            * )
+                paths=`echo $PATH | sed -e 's/:/ /g'`
+                for tool in tput tcout; do
+                    for dir in $paths; do
+                        if [ -r "$dir/$tool" ]; then
+                            for seq in bold md smso; do # 'smso' is last
+                                bold="`$dir/$tool $seq 2>/dev/null`"
+                                if [ ".$bold" != . ]; then
+                                    term_bold="$bold"
+                                    break
+                                fi
+                            done
+                            if [ ".$term_bold" != . ]; then
+                                for seq in sgr0 me rmso reset; do # 'reset' is last
+                                    norm="`$dir/$tool $seq 2>/dev/null`"
+                                    if [ ".$norm" != . ]; then
+                                        term_norm="$norm"
+                                        break
+                                    fi
+                                done
+                            fi
+                            break
+                        fi
+                    done
+                    if [ ".$term_bold" != . -a ".$term_norm" != . ]; then
+                        break;
+                    fi
+                done
+                ;;
+        esac
+        if [ ".$term_bold" = . -o ".$term_norm" = . ]; then
+            echo "$msgprefix:Warning: unable to determine terminal sequence for bold mode" 1>&2
+        fi
+    fi
+    
+    #   determine user name
+    username=''
+    if [ ".$opt_e" = .yes -a ".`echo $text | egrep '%[uU]'`" != . ]; then
+        username="$LOGNAME"
+        if [ ".$username" = . ]; then
+            username="$USER"
+            if [ ".$username" = . ]; then
+                username="`(whoami) 2>/dev/null |\
+                           awk '{ printf("%s", $1); }'`"
+                if [ ".$username" = . ]; then
+                    username="`(who am i) 2>/dev/null |\
+                               awk '{ printf("%s", $1); }'`"
+                    if [ ".$username" = . ]; then
+                        username='unknown'
+                    fi
+                fi
+            fi
+        fi
+    fi
+    
+    #   determine user id
+    userid=''
+    if [ ".$opt_e" = .yes -a ".`echo $text | egrep '%U'`" != . ]; then
+        userid="`(id -u) 2>/dev/null`"
+        if [ ".$userid" = . ]; then
+            str="`(id) 2>/dev/null`"
+            if [ ".`echo $str | grep '^uid[    ]*=[    ]*[0-9]*('`" != . ]; then
+                userid=`echo $str | sed -e 's/^uid[    ]*=[    ]*//' -e 's/(.*//'`
+            fi
+            if [ ".$userid" = . ]; then
+                userid=`egrep "^${username}:" /etc/passwd 2>/dev/null | \
+                        sed -e 's/[^:]*:[^:]*://' -e 's/:.*$//'`
+                if [ ".$userid" = . ]; then
+                    userid=`(ypcat passwd) 2>/dev/null |
+                            egrep "^${username}:" | \
+                            sed -e 's/[^:]*:[^:]*://' -e 's/:.*$//'`
+                    if [ ".$userid" = . ]; then
+                        userid='?'
+                    fi
+                fi
+            fi
+        fi
+    fi
+    
+    #   determine host name
+    hostname=''
+    if [ ".$opt_e" = .yes -a ".`echo $text | egrep '%h'`" != . ]; then
+        hostname="`(uname -n) 2>/dev/null |\
+                   awk '{ printf("%s", $1); }'`"
+        if [ ".$hostname" = . ]; then
+            hostname="`(hostname) 2>/dev/null |\
+                       awk '{ printf("%s", $1); }'`"
+            if [ ".$hostname" = . ]; then
+                hostname='unknown'
+            fi
+        fi
+        case $hostname in
+            *.* )
+                domainname=".`echo $hostname | cut -d. -f2-`"
+                hostname="`echo $hostname | cut -d. -f1`"
+                ;;
+        esac
+    fi
+    
+    #   determine domain name
+    domainname=''
+    if [ ".$opt_e" = .yes -a ".`echo $text | egrep '%d'`" != . ]; then
+        if [ ".$domainname" = . ]; then
+            if [ -f /etc/resolv.conf ]; then
+                domainname="`egrep '^[         ]*domain' /etc/resolv.conf | head -1 |\
+                             sed -e 's/.*domain//' \
+                                 -e 's/^[      ]*//' -e 's/^ *//' -e 's/^      *//' \
+                                 -e 's/^\.//' -e 's/^/./' |\
+                             awk '{ printf("%s", $1); }'`"
+                if [ ".$domainname" = . ]; then
+                    domainname="`egrep '^[     ]*search' /etc/resolv.conf | head -1 |\
+                                 sed -e 's/.*search//' \
+                                     -e 's/^[  ]*//' -e 's/^ *//' -e 's/^      *//' \
+                                     -e 's/ .*//' -e 's/       .*//' \
+                                     -e 's/^\.//' -e 's/^/./' |\
+                                 awk '{ printf("%s", $1); }'`"
+                fi
+            fi
+        fi
+    fi
+    
+    #   determine current time
+    time_day=''
+    time_month=''
+    time_year=''
+    time_monthname=''
+    if [ ".$opt_e" = .yes -a ".`echo $text | egrep '%[DMYm]'`" != . ]; then
+        time_day=`date '+%d'`
+        time_month=`date '+%m'`
+        time_year=`date '+%Y' 2>/dev/null`
+        if [ ".$time_year" = . ]; then
+            time_year=`date '+%y'`
+            case $time_year in
+                [5-9][0-9]) time_year="19$time_year" ;;
+                [0-4][0-9]) time_year="20$time_year" ;;
+            esac
+        fi
+        case $time_month in
+            1|01) time_monthname='Jan' ;;
+            2|02) time_monthname='Feb' ;;
+            3|03) time_monthname='Mar' ;;
+            4|04) time_monthname='Apr' ;;
+            5|05) time_monthname='May' ;;
+            6|06) time_monthname='Jun' ;;
+            7|07) time_monthname='Jul' ;;
+            8|08) time_monthname='Aug' ;;
+            9|09) time_monthname='Sep' ;;
+              10) time_monthname='Oct' ;;
+              11) time_monthname='Nov' ;;
+              12) time_monthname='Dec' ;;
+        esac
+    fi
+    
+    #   expand special ``%x'' constructs
+    if [ ".$opt_e" = .yes ]; then
+        text=`echo $seo "$text" |\
+              sed -e "s/%B/${term_bold}/g" \
+                  -e "s/%b/${term_norm}/g" \
+                  -e "s/%u/${username}/g" \
+                  -e "s/%U/${userid}/g" \
+                  -e "s/%h/${hostname}/g" \
+                  -e "s/%d/${domainname}/g" \
+                  -e "s/%D/${time_day}/g" \
+                  -e "s/%M/${time_month}/g" \
+                  -e "s/%Y/${time_year}/g" \
+                  -e "s/%m/${time_monthname}/g" 2>/dev/null`
+    fi
+    
+    #   create output
+    if [ .$opt_n = .no ]; then
+        echo $seo "$text"
+    else
+        #   the harder part: echo -n is best, because
+        #   awk may complain about some \xx sequences.
+        if [ ".$minusn" != . ]; then
+            echo $seo $minusn "$text"
+        else
+            echo dummy | awk '{ printf("%s", TEXT); }' TEXT="$text"
+        fi
+    fi
+    ;;
+
+install )
+    ##
+    ##  install -- Install a program, script or datafile
+    ##  Copyright (c) 1997-2000 Ralf S. Engelschall <rse@engelschall.com>
+    ##  Originally written for shtool
+    ##
+    
+    src="$1"
+    dst="$2"
+    
+    #  If destination is a directory, append the input filename
+    if [ -d $dst ]; then
+        dst=`echo "$dst" | sed -e 's:/$::'`
+        dstfile=`echo "$src" | sed -e 's;.*/\([^/]*\)$;\1;'`
+        dst="$dst/$dstfile"
+    fi
+    
+    #  Add a possible extension to src and dst
+    if [ ".$opt_e" != . ]; then
+        src="$src$opt_e"
+        dst="$dst$opt_e"
+    fi
+    
+    #  Check for correct arguments
+    if [ ".$src" = ".$dst" ]; then
+        echo "$msgprefix:Error: source and destination are the same" 1>&2
+        exit 1
+    fi
+    
+    #  Make a temp file name in the destination directory
+    dstdir=`echo $dst | sed -e 's;[^/]*$;;' -e 's;\(.\)/$;\1;' -e 's;^$;.;'`
+    dsttmp="$dstdir/#INST@$$#"
+    
+    #  Verbosity
+    if [ ".$opt_v" = .yes ]; then
+        echo "$src -> $dst" 1>&2
+    fi
+    
+    #  Copy or move the file name to the temp name
+    #  (because we might be not allowed to change the source)
+    if [ ".$opt_C" = .yes ]; then
+        opt_c=yes
+    fi
+    if [ ".$opt_c" = .yes ]; then
+        if [ ".$opt_t" = .yes ]; then
+            echo "cp $src $dsttmp" 1>&2
+        fi
+        cp $src $dsttmp || exit $?
+    else
+        if [ ".$opt_t" = .yes ]; then
+            echo "mv $src $dsttmp" 1>&2
+        fi
+        mv $src $dsttmp || exit $?
+    fi
+    
+    #  Adjust the target file
+    #  (we do chmod last to preserve setuid bits)
+    if [ ".$opt_s" = .yes ]; then
+        if [ ".$opt_t" = .yes ]; then
+            echo "strip $dsttmp" 1>&2
+        fi
+        strip $dsttmp || exit $?
+    fi
+    if [ ".$opt_o" != . ]; then
+        if [ ".$opt_t" = .yes ]; then
+            echo "chown $opt_o $dsttmp" 1>&2
+        fi
+        chown $opt_o $dsttmp || exit $?
+    fi
+    if [ ".$opt_g" != . ]; then
+        if [ ".$opt_t" = .yes ]; then
+            echo "chgrp $opt_g $dsttmp" 1>&2
+        fi
+        chgrp $opt_g $dsttmp || exit $?
+    fi
+    if [ ".$opt_m" != . ]; then
+        if [ ".$opt_t" = .yes ]; then
+            echo "chmod $opt_m $dsttmp" 1>&2
+        fi
+        chmod $opt_m $dsttmp || exit $?
+    fi
+    
+    #   Determine whether to do a quick install
+    #   (has to be done _after_ the strip was already done)
+    quick=no
+    if [ ".$opt_C" = .yes ]; then
+        if [ -r $dst ]; then
+            if cmp -s $src $dst; then
+                quick=yes
+            fi
+        fi
+    fi
+    
+    #   Finally install the file to the real destination
+    if [ $quick = yes ]; then
+        if [ ".$opt_t" = .yes ]; then
+            echo "rm -f $dsttmp" 1>&2
+        fi
+        rm -f $dsttmp
+    else
+        if [ ".$opt_t" = .yes ]; then
+            echo "rm -f $dst && mv $dsttmp $dst" 1>&2
+        fi
+        rm -f $dst && mv $dsttmp $dst
+    fi
+    ;;
+
+mkdir )
+    ##
+    ##  mkdir -- Make one or more directories
+    ##  Copyright (c) 1996-2000 Ralf S. Engelschall <rse@engelschall.com>
+    ##  Originally written for public domain by Noah Friedman <friedman@prep.ai.mit.edu>
+    ##  Cleaned up and enhanced for shtool
+    ##
+    
+    errstatus=0
+    for p in ${1+"$@"}; do
+        #   if the directory already exists...
+        if [ -d "$p" ]; then
+            if [ ".$opt_f" = .no ] && [ ".$opt_p" = .no ]; then
+                echo "$msgprefix:Error: directory already exists: $p" 1>&2
+                errstatus=1
+                break
+            else
+                continue
+            fi
+        fi
+        #   if the directory has to be created...
+        if [ ".$opt_p" = .no ]; then
+            if [ ".$opt_t" = .yes ]; then
+                echo "mkdir $p" 1>&2
+            fi
+            mkdir $p || errstatus=$?
+        else
+            #   the smart situation
+            set fnord `echo ":$p" |\
+                       sed -e 's/^:\//%/' \
+                           -e 's/^://' \
+                           -e 's/\// /g' \
+                           -e 's/^%/\//'`
+            shift
+            pathcomp=''
+            for d in ${1+"$@"}; do
+                pathcomp="$pathcomp$d"
+                case "$pathcomp" in
+                    -* ) pathcomp="./$pathcomp" ;;
+                esac
+                if [ ! -d "$pathcomp" ]; then
+                    if [ ".$opt_t" = .yes ]; then
+                        echo "mkdir $pathcomp" 1>&2
+                    fi
+                    mkdir $pathcomp || errstatus=$?
+                    if [ ".$opt_m" != . ]; then
+                        if [ ".$opt_t" = .yes ]; then
+                            echo "chmod $opt_m $pathcomp" 1>&2
+                        fi
+                        chmod $opt_m $pathcomp || errstatus=$?
+                    fi
+                fi
+                pathcomp="$pathcomp/"
+            done
+        fi
+    done
+    exit $errstatus
+    ;;
+
+esac
+
+exit 0
+
+##EOF##
diff --git a/contrib/php4/config.guess b/contrib/php4/config.guess
new file mode 100755 (executable)
index 0000000..6cb567b
--- /dev/null
@@ -0,0 +1,1087 @@
+#! /bin/sh
+# Attempt to guess a canonical system name.
+#   Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999
+#   Free Software Foundation, Inc.
+#
+# This file is free software; you can redistribute it and/or modify it
+# under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful, but
+# WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+# General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+#
+# As a special exception to the GNU General Public License, if you
+# distribute this file as part of a program that contains a
+# configuration script generated by Autoconf, you may include it under
+# the same distribution terms that you use for the rest of that program.
+
+# Written by Per Bothner <bothner@cygnus.com>.
+# The master version of this file is at the FSF in /home/gd/gnu/lib.
+# Please send patches to the Autoconf mailing list <autoconf@gnu.org>.
+#
+# This script attempts to guess a canonical system name similar to
+# config.sub.  If it succeeds, it prints the system name on stdout, and
+# exits with 0.  Otherwise, it exits with 1.
+#
+# The plan is that this can be called by configure scripts if you
+# don't specify an explicit system type (host/target name).
+#
+# Only a few systems have been added to this list; please add others
+# (but try to keep the structure clean).
+#
+
+# Use $HOST_CC if defined. $CC may point to a cross-compiler
+if test x"$CC_FOR_BUILD" = x; then
+  if test x"$HOST_CC" != x; then
+    CC_FOR_BUILD="$HOST_CC"
+  else
+    if test x"$CC" != x; then
+      CC_FOR_BUILD="$CC"
+    else
+      CC_FOR_BUILD=cc
+    fi
+  fi
+fi
+
+
+# This is needed to find uname on a Pyramid OSx when run in the BSD universe.
+# (ghazi@noc.rutgers.edu 8/24/94.)
+if (test -f /.attbin/uname) >/dev/null 2>&1 ; then
+       PATH=$PATH:/.attbin ; export PATH
+fi
+
+UNAME_MACHINE=`(uname -m) 2>/dev/null` || UNAME_MACHINE=unknown
+UNAME_RELEASE=`(uname -r) 2>/dev/null` || UNAME_RELEASE=unknown
+UNAME_SYSTEM=`(uname -s) 2>/dev/null` || UNAME_SYSTEM=unknown
+UNAME_VERSION=`(uname -v) 2>/dev/null` || UNAME_VERSION=unknown
+
+dummy=dummy-$$
+trap 'rm -f $dummy.c $dummy.o $dummy; exit 1' 1 2 15
+
+# Note: order is significant - the case branches are not exclusive.
+
+case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in
+    alpha:OSF1:*:*)
+       if test $UNAME_RELEASE = "V4.0"; then
+               UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $3}'`
+       fi
+       # A Vn.n version is a released version.
+       # A Tn.n version is a released field test version.
+       # A Xn.n version is an unreleased experimental baselevel.
+       # 1.2 uses "1.2" for uname -r.
+       cat <<EOF >$dummy.s
+       .globl main
+       .ent main
+main:
+       .frame \$30,0,\$26,0
+       .prologue 0
+       .long 0x47e03d80 # implver $0
+       lda \$2,259
+       .long 0x47e20c21 # amask $2,$1
+       srl \$1,8,\$2
+       sll \$2,2,\$2
+       sll \$0,3,\$0
+       addl \$1,\$0,\$0
+       addl \$2,\$0,\$0
+       ret \$31,(\$26),1
+       .end main
+EOF
+       $CC_FOR_BUILD $dummy.s -o $dummy 2>/dev/null
+       if test "$?" = 0 ; then
+               ./$dummy
+               case "$?" in
+                       7)
+                               UNAME_MACHINE="alpha"
+                               ;;
+                       15)
+                               UNAME_MACHINE="alphaev5"
+                               ;;
+                       14)
+                               UNAME_MACHINE="alphaev56"
+                               ;;
+                       10)
+                               UNAME_MACHINE="alphapca56"
+                               ;;
+                       16)
+                               UNAME_MACHINE="alphaev6"
+                               ;;
+               esac
+       fi
+       rm -f $dummy.s $dummy
+       echo ${UNAME_MACHINE}-dec-osf`echo ${UNAME_RELEASE} | sed -e 's/^[VTX]//' | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'`
+       exit 0 ;;
+    Alpha\ *:Windows_NT*:*)
+       # How do we know it's Interix rather than the generic POSIX subsystem?
+       # Should we change UNAME_MACHINE based on the output of uname instead
+       # of the specific Alpha model?
+       echo alpha-pc-interix
+       exit 0 ;;
+    21064:Windows_NT:50:3)
+       echo alpha-dec-winnt3.5
+       exit 0 ;;
+    Amiga*:UNIX_System_V:4.0:*)
+       echo m68k-cbm-sysv4
+       exit 0;;
+    amiga:NetBSD:*:*)
+      echo m68k-cbm-netbsd${UNAME_RELEASE}
+      exit 0 ;;
+    amiga:OpenBSD:*:*)
+       echo m68k-unknown-openbsd${UNAME_RELEASE}
+       exit 0 ;;
+    *:[Aa]miga[Oo][Ss]:*:*)
+       echo ${UNAME_MACHINE}-unknown-amigaos
+       exit 0 ;;
+    arc64:OpenBSD:*:*)
+       echo mips64el-unknown-openbsd${UNAME_RELEASE}
+       exit 0 ;;
+    arc:OpenBSD:*:*)
+       echo mipsel-unknown-openbsd${UNAME_RELEASE}
+       exit 0 ;;
+    hkmips:OpenBSD:*:*)
+       echo mips-unknown-openbsd${UNAME_RELEASE}
+       exit 0 ;;
+    pmax:OpenBSD:*:*)
+       echo mipsel-unknown-openbsd${UNAME_RELEASE}
+       exit 0 ;;
+    sgi:OpenBSD:*:*)
+       echo mips-unknown-openbsd${UNAME_RELEASE}
+       exit 0 ;;
+    wgrisc:OpenBSD:*:*)
+       echo mipsel-unknown-openbsd${UNAME_RELEASE}
+       exit 0 ;;
+    arm:RISC*:1.[012]*:*|arm:riscix:1.[012]*:*)
+       echo arm-acorn-riscix${UNAME_RELEASE}
+       exit 0;;
+    arm32:NetBSD:*:*)
+       echo arm-unknown-netbsd`echo ${UNAME_RELEASE}|sed -e 's/[-_].*/\./'`
+       exit 0 ;;
+    SR2?01:HI-UX/MPP:*:*)
+       echo hppa1.1-hitachi-hiuxmpp
+       exit 0;;
+    Pyramid*:OSx*:*:* | MIS*:OSx*:*:* | MIS*:SMP_DC-OSx*:*:*)
+       # akee@wpdis03.wpafb.af.mil (Earle F. Ake) contributed MIS and NILE.
+       if test "`(/bin/universe) 2>/dev/null`" = att ; then
+               echo pyramid-pyramid-sysv3
+       else
+               echo pyramid-pyramid-bsd
+       fi
+       exit 0 ;;
+    NILE*:*:*:dcosx)
+       echo pyramid-pyramid-svr4
+       exit 0 ;;
+    sun4H:SunOS:5.*:*)
+       echo sparc-hal-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
+       exit 0 ;;
+    sun4*:SunOS:5.*:* | tadpole*:SunOS:5.*:*)
+       echo sparc-sun-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
+       exit 0 ;;
+    i86pc:SunOS:5.*:*)
+       echo i386-pc-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
+       exit 0 ;;
+    sun4*:SunOS:6*:*)
+       # According to config.sub, this is the proper way to canonicalize
+       # SunOS6.  Hard to guess exactly what SunOS6 will be like, but
+       # it's likely to be more like Solaris than SunOS4.
+       echo sparc-sun-solaris3`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
+       exit 0 ;;
+    sun4*:SunOS:*:*)
+       case "`/usr/bin/arch -k`" in
+           Series*|S4*)
+               UNAME_RELEASE=`uname -v`
+               ;;
+       esac
+       # Japanese Language versions have a version number like `4.1.3-JL'.
+       echo sparc-sun-sunos`echo ${UNAME_RELEASE}|sed -e 's/-/_/'`
+       exit 0 ;;
+    sun3*:SunOS:*:*)
+       echo m68k-sun-sunos${UNAME_RELEASE}
+       exit 0 ;;
+    sun*:*:4.2BSD:*)
+       UNAME_RELEASE=`(head -1 /etc/motd | awk '{print substr($5,1,3)}') 2>/dev/null`
+       test "x${UNAME_RELEASE}" = "x" && UNAME_RELEASE=3
+       case "`/bin/arch`" in
+           sun3)
+               echo m68k-sun-sunos${UNAME_RELEASE}
+               ;;
+           sun4)
+               echo sparc-sun-sunos${UNAME_RELEASE}
+               ;;
+       esac
+       exit 0 ;;
+    aushp:SunOS:*:*)
+       echo sparc-auspex-sunos${UNAME_RELEASE}
+       exit 0 ;;
+    atari*:NetBSD:*:*)
+       echo m68k-atari-netbsd${UNAME_RELEASE}
+       exit 0 ;;
+    atari*:OpenBSD:*:*)
+       echo m68k-unknown-openbsd${UNAME_RELEASE}
+       exit 0 ;;
+    # The situation for MiNT is a little confusing.  The machine name
+    # can be virtually everything (everything which is not
+    # "atarist" or "atariste" at least should have a processor 
+    # > m68000).  The system name ranges from "MiNT" over "FreeMiNT"
+    # to the lowercase version "mint" (or "freemint").  Finally
+    # the system name "TOS" denotes a system which is actually not
+    # MiNT.  But MiNT is downward compatible to TOS, so this should
+    # be no problem.
+    atarist[e]:*MiNT:*:* | atarist[e]:*mint:*:* | atarist[e]:*TOS:*:*)
+        echo m68k-atari-mint${UNAME_RELEASE}
+       exit 0 ;;
+    atari*:*MiNT:*:* | atari*:*mint:*:* | atarist[e]:*TOS:*:*)
+       echo m68k-atari-mint${UNAME_RELEASE}
+        exit 0 ;;
+    *falcon*:*MiNT:*:* | *falcon*:*mint:*:* | *falcon*:*TOS:*:*)
+        echo m68k-atari-mint${UNAME_RELEASE}
+       exit 0 ;;
+    milan*:*MiNT:*:* | milan*:*mint:*:* | *milan*:*TOS:*:*)
+        echo m68k-milan-mint${UNAME_RELEASE}
+        exit 0 ;;
+    hades*:*MiNT:*:* | hades*:*mint:*:* | *hades*:*TOS:*:*)
+        echo m68k-hades-mint${UNAME_RELEASE}
+        exit 0 ;;
+    *:*MiNT:*:* | *:*mint:*:* | *:*TOS:*:*)
+        echo m68k-unknown-mint${UNAME_RELEASE}
+        exit 0 ;;
+    sun3*:NetBSD:*:*)
+       echo m68k-sun-netbsd${UNAME_RELEASE}
+       exit 0 ;;
+    sun3*:OpenBSD:*:*)
+       echo m68k-unknown-openbsd${UNAME_RELEASE}
+       exit 0 ;;
+    mac68k:NetBSD:*:*)
+       echo m68k-apple-netbsd${UNAME_RELEASE}
+       exit 0 ;;
+    mac68k:OpenBSD:*:*)
+       echo m68k-unknown-openbsd${UNAME_RELEASE}
+       exit 0 ;;
+    mvme68k:OpenBSD:*:*)
+       echo m68k-unknown-openbsd${UNAME_RELEASE}
+       exit 0 ;;
+    mvme88k:OpenBSD:*:*)
+       echo m88k-unknown-openbsd${UNAME_RELEASE}
+       exit 0 ;;
+    powerpc:machten:*:*)
+       echo powerpc-apple-machten${UNAME_RELEASE}
+       exit 0 ;;
+    macppc:NetBSD:*:*)
+        echo powerpc-apple-netbsd${UNAME_RELEASE}
+        exit 0 ;;
+    RISC*:Mach:*:*)
+       echo mips-dec-mach_bsd4.3
+       exit 0 ;;
+    RISC*:ULTRIX:*:*)
+       echo mips-dec-ultrix${UNAME_RELEASE}
+       exit 0 ;;
+    VAX*:ULTRIX*:*:*)
+       echo vax-dec-ultrix${UNAME_RELEASE}
+       exit 0 ;;
+    2020:CLIX:*:* | 2430:CLIX:*:*)
+       echo clipper-intergraph-clix${UNAME_RELEASE}
+       exit 0 ;;
+    mips:*:*:UMIPS | mips:*:*:RISCos)
+       sed 's/^        //' << EOF >$dummy.c
+#ifdef __cplusplus
+       int main (int argc, char *argv[]) {
+#else
+       int main (argc, argv) int argc; char *argv[]; {
+#endif
+       #if defined (host_mips) && defined (MIPSEB)
+       #if defined (SYSTYPE_SYSV)
+         printf ("mips-mips-riscos%ssysv\n", argv[1]); exit (0);
+       #endif
+       #if defined (SYSTYPE_SVR4)
+         printf ("mips-mips-riscos%ssvr4\n", argv[1]); exit (0);
+       #endif
+       #if defined (SYSTYPE_BSD43) || defined(SYSTYPE_BSD)
+         printf ("mips-mips-riscos%sbsd\n", argv[1]); exit (0);
+       #endif
+       #endif
+         exit (-1);
+       }
+EOF
+       $CC_FOR_BUILD $dummy.c -o $dummy \
+         && ./$dummy `echo "${UNAME_RELEASE}" | sed -n 's/\([0-9]*\).*/\1/p'` \
+         && rm $dummy.c $dummy && exit 0
+       rm -f $dummy.c $dummy
+       echo mips-mips-riscos${UNAME_RELEASE}
+       exit 0 ;;
+    Night_Hawk:Power_UNIX:*:*)
+       echo powerpc-harris-powerunix
+       exit 0 ;;
+    m88k:CX/UX:7*:*)
+       echo m88k-harris-cxux7
+       exit 0 ;;
+    m88k:*:4*:R4*)
+       echo m88k-motorola-sysv4
+       exit 0 ;;
+    m88k:*:3*:R3*)
+       echo m88k-motorola-sysv3
+       exit 0 ;;
+    AViiON:dgux:*:*)
+        # DG/UX returns AViiON for all architectures
+        UNAME_PROCESSOR=`/usr/bin/uname -p`
+        if [ $UNAME_PROCESSOR = mc88100 -o $UNAME_PROCESSOR = mc88110 ] ; then
+       if [ ${TARGET_BINARY_INTERFACE}x = m88kdguxelfx \
+            -o ${TARGET_BINARY_INTERFACE}x = x ] ; then
+               echo m88k-dg-dgux${UNAME_RELEASE}
+       else
+               echo m88k-dg-dguxbcs${UNAME_RELEASE}
+       fi
+        else echo i586-dg-dgux${UNAME_RELEASE}
+        fi
+       exit 0 ;;
+    M88*:DolphinOS:*:*)        # DolphinOS (SVR3)
+       echo m88k-dolphin-sysv3
+       exit 0 ;;
+    M88*:*:R3*:*)
+       # Delta 88k system running SVR3
+       echo m88k-motorola-sysv3
+       exit 0 ;;
+    XD88*:*:*:*) # Tektronix XD88 system running UTekV (SVR3)
+       echo m88k-tektronix-sysv3
+       exit 0 ;;
+    Tek43[0-9][0-9]:UTek:*:*) # Tektronix 4300 system running UTek (BSD)
+       echo m68k-tektronix-bsd
+       exit 0 ;;
+    *:IRIX*:*:*)
+       echo mips-sgi-irix`echo ${UNAME_RELEASE}|sed -e 's/-/_/g'`
+       exit 0 ;;
+    ????????:AIX?:[12].1:2)   # AIX 2.2.1 or AIX 2.1.1 is RT/PC AIX.
+       echo romp-ibm-aix      # uname -m gives an 8 hex-code CPU id
+       exit 0 ;;              # Note that: echo "'`uname -s`'" gives 'AIX '
+    i?86:AIX:*:*)
+       echo i386-ibm-aix
+       exit 0 ;;
+    *:AIX:2:3)
+       if grep bos325 /usr/include/stdio.h >/dev/null 2>&1; then
+               sed 's/^                //' << EOF >$dummy.c
+               #include <sys/systemcfg.h>
+
+               main()
+                       {
+                       if (!__power_pc())
+                               exit(1);
+                       puts("powerpc-ibm-aix3.2.5");
+                       exit(0);
+                       }
+EOF
+               $CC_FOR_BUILD $dummy.c -o $dummy && ./$dummy && rm $dummy.c $dummy && exit 0
+               rm -f $dummy.c $dummy
+               echo rs6000-ibm-aix3.2.5
+       elif grep bos324 /usr/include/stdio.h >/dev/null 2>&1; then
+               echo rs6000-ibm-aix3.2.4
+       else
+               echo rs6000-ibm-aix3.2
+       fi
+       exit 0 ;;
+    *:AIX:*:4)
+       IBM_CPU_ID=`/usr/sbin/lsdev -C -c processor -S available | head -1 | awk '{ print $1 }'`
+       if /usr/sbin/lsattr -EHl ${IBM_CPU_ID} | grep POWER >/dev/null 2>&1; then
+               IBM_ARCH=rs6000
+       else
+               IBM_ARCH=powerpc
+       fi
+       if [ -x /usr/bin/oslevel ] ; then
+               IBM_REV=`/usr/bin/oslevel`
+       else
+               IBM_REV=4.${UNAME_RELEASE}
+       fi
+       echo ${IBM_ARCH}-ibm-aix${IBM_REV}
+       exit 0 ;;
+    *:AIX:*:*)
+       echo rs6000-ibm-aix
+       exit 0 ;;
+    ibmrt:4.4BSD:*|romp-ibm:BSD:*)
+       echo romp-ibm-bsd4.4
+       exit 0 ;;
+    ibmrt:*BSD:*|romp-ibm:BSD:*)            # covers RT/PC NetBSD and
+       echo romp-ibm-bsd${UNAME_RELEASE}   # 4.3 with uname added to
+       exit 0 ;;                           # report: romp-ibm BSD 4.3
+    *:BOSX:*:*)
+       echo rs6000-bull-bosx
+       exit 0 ;;
+    DPX/2?00:B.O.S.:*:*)
+       echo m68k-bull-sysv3
+       exit 0 ;;
+    9000/[34]??:4.3bsd:1.*:*)
+       echo m68k-hp-bsd
+       exit 0 ;;
+    hp300:4.4BSD:*:* | 9000/[34]??:4.3bsd:2.*:*)
+       echo m68k-hp-bsd4.4
+       exit 0 ;;
+    9000/[34678]??:HP-UX:*:*)
+       case "${UNAME_MACHINE}" in
+           9000/31? )            HP_ARCH=m68000 ;;
+           9000/[34]?? )         HP_ARCH=m68k ;;
+           9000/[678][0-9][0-9])
+              sed 's/^              //' << EOF >$dummy.c
+              #include <stdlib.h>
+              #include <unistd.h>
+
+              int main ()
+              {
+              #if defined(_SC_KERNEL_BITS)
+                  long bits = sysconf(_SC_KERNEL_BITS);
+              #endif
+                  long cpu  = sysconf (_SC_CPU_VERSION);
+
+                  switch (cpu)
+               {
+               case CPU_PA_RISC1_0: puts ("hppa1.0"); break;
+               case CPU_PA_RISC1_1: puts ("hppa1.1"); break;
+               case CPU_PA_RISC2_0:
+              #if defined(_SC_KERNEL_BITS)
+                   switch (bits)
+                       {
+                       case 64: puts ("hppa2.0w"); break;
+                       case 32: puts ("hppa2.0n"); break;
+                       default: puts ("hppa2.0"); break;
+                       } break;
+              #else  /* !defined(_SC_KERNEL_BITS) */
+                   puts ("hppa2.0"); break;
+              #endif
+               default: puts ("hppa1.0"); break;
+               }
+                  exit (0);
+              }
+EOF
+       ($CC_FOR_BUILD $dummy.c -o $dummy 2>/dev/null ) && HP_ARCH=`./$dummy`
+       rm -f $dummy.c $dummy
+       esac
+       HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'`
+       echo ${HP_ARCH}-hp-hpux${HPUX_REV}
+       exit 0 ;;
+    3050*:HI-UX:*:*)
+       sed 's/^        //' << EOF >$dummy.c
+       #include <unistd.h>
+       int
+       main ()
+       {
+         long cpu = sysconf (_SC_CPU_VERSION);
+         /* The order matters, because CPU_IS_HP_MC68K erroneously returns
+            true for CPU_PA_RISC1_0.  CPU_IS_PA_RISC returns correct
+            results, however.  */
+         if (CPU_IS_PA_RISC (cpu))
+           {
+             switch (cpu)
+               {
+                 case CPU_PA_RISC1_0: puts ("hppa1.0-hitachi-hiuxwe2"); break;
+                 case CPU_PA_RISC1_1: puts ("hppa1.1-hitachi-hiuxwe2"); break;
+                 case CPU_PA_RISC2_0: puts ("hppa2.0-hitachi-hiuxwe2"); break;
+                 default: puts ("hppa-hitachi-hiuxwe2"); break;
+               }
+           }
+         else if (CPU_IS_HP_MC68K (cpu))
+           puts ("m68k-hitachi-hiuxwe2");
+         else puts ("unknown-hitachi-hiuxwe2");
+         exit (0);
+       }
+EOF
+       $CC_FOR_BUILD $dummy.c -o $dummy && ./$dummy && rm $dummy.c $dummy && exit 0
+       rm -f $dummy.c $dummy
+       echo unknown-hitachi-hiuxwe2
+       exit 0 ;;
+    9000/7??:4.3bsd:*:* | 9000/8?[79]:4.3bsd:*:* )
+       echo hppa1.1-hp-bsd
+       exit 0 ;;
+    9000/8??:4.3bsd:*:*)
+       echo hppa1.0-hp-bsd
+       exit 0 ;;
+    *9??*:MPE/iX:*:*)
+       echo hppa1.0-hp-mpeix
+       exit 0 ;;
+    hp7??:OSF1:*:* | hp8?[79]:OSF1:*:* )
+       echo hppa1.1-hp-osf
+       exit 0 ;;
+    hp8??:OSF1:*:*)
+       echo hppa1.0-hp-osf
+       exit 0 ;;
+    i?86:OSF1:*:*)
+       if [ -x /usr/sbin/sysversion ] ; then
+           echo ${UNAME_MACHINE}-unknown-osf1mk
+       else
+           echo ${UNAME_MACHINE}-unknown-osf1
+       fi
+       exit 0 ;;
+    parisc*:Lites*:*:*)
+       echo hppa1.1-hp-lites
+       exit 0 ;;
+    hppa*:OpenBSD:*:*)
+       echo hppa-unknown-openbsd
+       exit 0 ;;
+    C1*:ConvexOS:*:* | convex:ConvexOS:C1*:*)
+       echo c1-convex-bsd
+        exit 0 ;;
+    C2*:ConvexOS:*:* | convex:ConvexOS:C2*:*)
+       if getsysinfo -f scalar_acc
+       then echo c32-convex-bsd
+       else echo c2-convex-bsd
+       fi
+        exit 0 ;;
+    C34*:ConvexOS:*:* | convex:ConvexOS:C34*:*)
+       echo c34-convex-bsd
+        exit 0 ;;
+    C38*:ConvexOS:*:* | convex:ConvexOS:C38*:*)
+       echo c38-convex-bsd
+        exit 0 ;;
+    C4*:ConvexOS:*:* | convex:ConvexOS:C4*:*)
+       echo c4-convex-bsd
+        exit 0 ;;
+    CRAY*X-MP:*:*:*)
+       echo xmp-cray-unicos
+        exit 0 ;;
+    CRAY*Y-MP:*:*:*)
+       echo ymp-cray-unicos${UNAME_RELEASE}
+       exit 0 ;;
+    CRAY*[A-Z]90:*:*:*)
+       echo ${UNAME_MACHINE}-cray-unicos${UNAME_RELEASE} \
+       | sed -e 's/CRAY.*\([A-Z]90\)/\1/' \
+             -e y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/
+       exit 0 ;;
+    CRAY*TS:*:*:*)
+       echo t90-cray-unicos${UNAME_RELEASE}
+       exit 0 ;;
+    CRAY*T3E:*:*:*)
+       echo t3e-cray-unicosmk${UNAME_RELEASE}
+       exit 0 ;;
+    CRAY-2:*:*:*)
+       echo cray2-cray-unicos
+        exit 0 ;;
+    F300:UNIX_System_V:*:*)
+        FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'`
+        FUJITSU_REL=`echo ${UNAME_RELEASE} | sed -e 's/ /_/'`
+        echo "f300-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}"
+        exit 0 ;;
+    F301:UNIX_System_V:*:*)
+       echo f301-fujitsu-uxpv`echo $UNAME_RELEASE | sed 's/ .*//'`
+       exit 0 ;;
+    hp3[0-9][05]:NetBSD:*:*)
+       echo m68k-hp-netbsd${UNAME_RELEASE}
+       exit 0 ;;
+    hp300:OpenBSD:*:*)
+       echo m68k-unknown-openbsd${UNAME_RELEASE}
+       exit 0 ;;
+    i?86:BSD/386:*:* | i?86:BSD/OS:*:*)
+       echo ${UNAME_MACHINE}-pc-bsdi${UNAME_RELEASE}
+       exit 0 ;;
+    sparc*:BSD/OS:*:*)
+       echo sparc-unknown-bsdi${UNAME_RELEASE}
+       exit 0 ;;
+    *:BSD/OS:*:*)
+       echo ${UNAME_MACHINE}-unknown-bsdi${UNAME_RELEASE}
+       exit 0 ;;
+    *:FreeBSD:*:*)
+       if test -x /usr/bin/objformat; then
+           if test "elf" = "`/usr/bin/objformat`"; then
+               echo ${UNAME_MACHINE}-unknown-freebsdelf`echo ${UNAME_RELEASE}|sed -e 's/[-_].*//'`
+               exit 0
+           fi
+       fi
+       echo ${UNAME_MACHINE}-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`
+       exit 0 ;;
+    *:NetBSD:*:*)
+       echo ${UNAME_MACHINE}-unknown-netbsd`echo ${UNAME_RELEASE}|sed -e 's/[-_].*/\./'`
+       exit 0 ;;
+    *:OpenBSD:*:*)
+       echo ${UNAME_MACHINE}-unknown-openbsd`echo ${UNAME_RELEASE}|sed -e 's/[-_].*/\./'`
+       exit 0 ;;
+    i*:CYGWIN*:*)
+       echo ${UNAME_MACHINE}-pc-cygwin
+       exit 0 ;;
+    i*:MINGW*:*)
+       echo ${UNAME_MACHINE}-pc-mingw32
+       exit 0 ;;
+    i*:Windows_NT*:* | Pentium*:Windows_NT*:*)
+       # How do we know it's Interix rather than the generic POSIX subsystem?
+       # It also conflicts with pre-2.0 versions of AT&T UWIN. Should we
+       # UNAME_MACHINE based on the output of uname instead of i386?
+       echo i386-pc-interix
+       exit 0 ;;
+    i*:UWIN*:*)
+       echo ${UNAME_MACHINE}-pc-uwin
+       exit 0 ;;
+    p*:CYGWIN*:*)
+       echo powerpcle-unknown-cygwin
+       exit 0 ;;
+    prep*:SunOS:5.*:*)
+       echo powerpcle-unknown-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
+       exit 0 ;;
+    *:GNU:*:*)
+       echo `echo ${UNAME_MACHINE}|sed -e 's,[-/].*$,,'`-unknown-gnu`echo ${UNAME_RELEASE}|sed -e 's,/.*$,,'`
+       exit 0 ;;
+    *:Linux:*:*)
+       # uname on the ARM produces all sorts of strangeness, and we need to
+       # filter it out.
+       case "$UNAME_MACHINE" in
+         armv*)                      UNAME_MACHINE=$UNAME_MACHINE ;;
+         arm* | sa110*)              UNAME_MACHINE="arm" ;;
+       esac
+
+       # The BFD linker knows what the default object file format is, so
+       # first see if it will tell us. cd to the root directory to prevent
+       # problems with other programs or directories called `ld' in the path.
+       ld_help_string=`cd /; ld --help 2>&1`
+       ld_supported_emulations=`echo $ld_help_string \
+                        | sed -ne '/supported emulations:/!d
+                                   s/[         ][      ]*/ /g
+                                   s/.*supported emulations: *//
+                                   s/ .*//
+                                   p'`
+        case "$ld_supported_emulations" in
+         i?86linux)  echo "${UNAME_MACHINE}-pc-linux-gnuaout"      ; exit 0 ;;
+         i?86coff)   echo "${UNAME_MACHINE}-pc-linux-gnucoff"      ; exit 0 ;;
+         sparclinux) echo "${UNAME_MACHINE}-unknown-linux-gnuaout" ; exit 0 ;;
+         armlinux)   echo "${UNAME_MACHINE}-unknown-linux-gnuaout" ; exit 0 ;;
+         m68klinux)  echo "${UNAME_MACHINE}-unknown-linux-gnuaout" ; exit 0 ;;
+         elf32ppc)
+               # Determine Lib Version
+               cat >$dummy.c <<EOF
+#include <features.h>
+#if defined(__GLIBC__)
+extern char __libc_version[];
+extern char __libc_release[];
+#endif
+main(argc, argv)
+     int argc;
+     char *argv[];
+{
+#if defined(__GLIBC__)
+  printf("%s %s\n", __libc_version, __libc_release);
+#else
+  printf("unkown\n");
+#endif
+  return 0;
+}
+EOF
+               LIBC=""
+               $CC_FOR_BUILD $dummy.c -o $dummy 2>/dev/null
+               if test "$?" = 0 ; then
+                       ./$dummy | grep 1\.99 > /dev/null
+                       if test "$?" = 0 ; then
+                               LIBC="libc1"
+                       fi
+               fi      
+               rm -f $dummy.c $dummy
+               echo powerpc-unknown-linux-gnu${LIBC} ; exit 0 ;;
+       esac
+
+       if test "${UNAME_MACHINE}" = "alpha" ; then
+               sed 's/^        //'  <<EOF >$dummy.s
+               .globl main
+               .ent main
+       main:
+               .frame \$30,0,\$26,0
+               .prologue 0
+               .long 0x47e03d80 # implver $0
+               lda \$2,259
+               .long 0x47e20c21 # amask $2,$1
+               srl \$1,8,\$2
+               sll \$2,2,\$2
+               sll \$0,3,\$0
+               addl \$1,\$0,\$0
+               addl \$2,\$0,\$0
+               ret \$31,(\$26),1
+               .end main
+EOF
+               LIBC=""
+               $CC_FOR_BUILD $dummy.s -o $dummy 2>/dev/null
+               if test "$?" = 0 ; then
+                       ./$dummy
+                       case "$?" in
+                       7)
+                               UNAME_MACHINE="alpha"
+                               ;;
+                       15)
+                               UNAME_MACHINE="alphaev5"
+                               ;;
+                       14)
+                               UNAME_MACHINE="alphaev56"
+                               ;;
+                       10)
+                               UNAME_MACHINE="alphapca56"
+                               ;;
+                       16)
+                               UNAME_MACHINE="alphaev6"
+                               ;;
+                       esac
+
+                       objdump --private-headers $dummy | \
+                         grep ld.so.1 > /dev/null
+                       if test "$?" = 0 ; then
+                               LIBC="libc1"
+                       fi
+               fi
+               rm -f $dummy.s $dummy
+               echo ${UNAME_MACHINE}-unknown-linux-gnu${LIBC} ; exit 0
+       elif test "${UNAME_MACHINE}" = "mips" ; then
+         cat >$dummy.c <<EOF
+#ifdef __cplusplus
+       int main (int argc, char *argv[]) {
+#else
+       int main (argc, argv) int argc; char *argv[]; {
+#endif
+#ifdef __MIPSEB__
+  printf ("%s-unknown-linux-gnu\n", argv[1]);
+#endif
+#ifdef __MIPSEL__
+  printf ("%sel-unknown-linux-gnu\n", argv[1]);
+#endif
+  return 0;
+}
+EOF
+         $CC_FOR_BUILD $dummy.c -o $dummy 2>/dev/null && ./$dummy "${UNAME_MACHINE}" && rm $dummy.c $dummy && exit 0
+         rm -f $dummy.c $dummy
+       else
+         # Either a pre-BFD a.out linker (linux-gnuoldld)
+         # or one that does not give us useful --help.
+         # GCC wants to distinguish between linux-gnuoldld and linux-gnuaout.
+         # If ld does not provide *any* "supported emulations:"
+         # that means it is gnuoldld.
+         echo "$ld_help_string" | grep >/dev/null 2>&1 "supported emulations:"
+         test $? != 0 && echo "${UNAME_MACHINE}-pc-linux-gnuoldld" && exit 0
+
+         case "${UNAME_MACHINE}" in
+         i?86)
+           VENDOR=pc;
+           ;;
+         *)
+           VENDOR=unknown;
+           ;;
+         esac
+         # Determine whether the default compiler is a.out or elf
+         cat >$dummy.c <<EOF
+#include <features.h>
+#ifdef __cplusplus
+       int main (int argc, char *argv[]) {
+#else
+       int main (argc, argv) int argc; char *argv[]; {
+#endif
+#ifdef __ELF__
+# ifdef __GLIBC__
+#  if __GLIBC__ >= 2
+    printf ("%s-${VENDOR}-linux-gnu\n", argv[1]);
+#  else
+    printf ("%s-${VENDOR}-linux-gnulibc1\n", argv[1]);
+#  endif
+# else
+   printf ("%s-${VENDOR}-linux-gnulibc1\n", argv[1]);
+# endif
+#else
+  printf ("%s-${VENDOR}-linux-gnuaout\n", argv[1]);
+#endif
+  return 0;
+}
+EOF
+         $CC_FOR_BUILD $dummy.c -o $dummy 2>/dev/null && ./$dummy "${UNAME_MACHINE}" && rm $dummy.c $dummy && exit 0
+         rm -f $dummy.c $dummy
+       fi ;;
+# ptx 4.0 does uname -s correctly, with DYNIX/ptx in there.  earlier versions
+# are messed up and put the nodename in both sysname and nodename.
+    i?86:DYNIX/ptx:4*:*)
+       echo i386-sequent-sysv4
+       exit 0 ;;
+    i?86:UNIX_SV:4.2MP:2.*)
+        # Unixware is an offshoot of SVR4, but it has its own version
+        # number series starting with 2...
+        # I am not positive that other SVR4 systems won't match this,
+       # I just have to hope.  -- rms.
+        # Use sysv4.2uw... so that sysv4* matches it.
+       echo ${UNAME_MACHINE}-pc-sysv4.2uw${UNAME_VERSION}
+       exit 0 ;;
+    i?86:*:4.*:* | i?86:SYSTEM_V:4.*:*)
+       if grep Novell /usr/include/link.h >/dev/null 2>/dev/null; then
+               echo ${UNAME_MACHINE}-univel-sysv${UNAME_RELEASE}
+       else
+               echo ${UNAME_MACHINE}-pc-sysv${UNAME_RELEASE}
+       fi
+       exit 0 ;;
+    i?86:*:5:7*)
+       UNAME_REL=`(/bin/uname -X|egrep Release|sed -e 's/.*= //')`
+       (/bin/uname -X|egrep i80486 >/dev/null) && UNAME_MACHINE=i486
+       (/bin/uname -X|egrep '^Machine.*Pentium' >/dev/null) && UNAME_MACHINE=i586
+       (/bin/uname -X|egrep '^Machine.*Pent.*II' >/dev/null) && UNAME_MACHINE=i686
+       (/bin/uname -X|egrep '^Machine.*Pentium Pro' >/dev/null) && UNAME_MACHINE=i585
+       echo ${UNAME_MACHINE}-${UNAME_SYSTEM}${UNAME_VERSION}-sysv${UNAME_RELEASE}
+       exit 0 ;;
+    i?86:*:3.2:*)
+       if test -f /usr/options/cb.name; then
+               UNAME_REL=`sed -n 's/.*Version //p' </usr/options/cb.name`
+               echo ${UNAME_MACHINE}-pc-isc$UNAME_REL
+       elif /bin/uname -X 2>/dev/null >/dev/null ; then
+               UNAME_REL=`(/bin/uname -X|egrep Release|sed -e 's/.*= //')`
+               (/bin/uname -X|egrep i80486 >/dev/null) && UNAME_MACHINE=i486
+               (/bin/uname -X|egrep '^Machine.*Pentium' >/dev/null) \
+                       && UNAME_MACHINE=i586
+               (/bin/uname -X|egrep '^Machine.*Pent ?II' >/dev/null) \
+                       && UNAME_MACHINE=i686
+               (/bin/uname -X|egrep '^Machine.*Pentium Pro' >/dev/null) \
+                       && UNAME_MACHINE=i686
+               echo ${UNAME_MACHINE}-pc-sco$UNAME_REL
+       else
+               echo ${UNAME_MACHINE}-pc-sysv32
+       fi
+       exit 0 ;;
+    pc:*:*:*)
+        # uname -m prints for DJGPP always 'pc', but it prints nothing about
+        # the processor, so we play safe by assuming i386.
+       echo i386-pc-msdosdjgpp
+        exit 0 ;;
+    Intel:Mach:3*:*)
+       echo i386-pc-mach3
+       exit 0 ;;
+    paragon:*:*:*)
+       echo i860-intel-osf1
+       exit 0 ;;
+    i860:*:4.*:*) # i860-SVR4
+       if grep Stardent /usr/include/sys/uadmin.h >/dev/null 2>&1 ; then
+         echo i860-stardent-sysv${UNAME_RELEASE} # Stardent Vistra i860-SVR4
+       else # Add other i860-SVR4 vendors below as they are discovered.
+         echo i860-unknown-sysv${UNAME_RELEASE}  # Unknown i860-SVR4
+       fi
+       exit 0 ;;
+    mini*:CTIX:SYS*5:*)
+       # "miniframe"
+       echo m68010-convergent-sysv
+       exit 0 ;;
+    M68*:*:R3V[567]*:*)
+       test -r /sysV68 && echo 'm68k-motorola-sysv' && exit 0 ;;
+    3[34]??:*:4.0:3.0 | 3[34]??,*:*:4.0:3.0 | 4850:*:4.0:3.0)
+       OS_REL=''
+       test -r /etc/.relid \
+       && OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid`
+       /bin/uname -p 2>/dev/null | grep 86 >/dev/null \
+         && echo i486-ncr-sysv4.3${OS_REL} && exit 0
+       /bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \
+         && echo i586-ncr-sysv4.3${OS_REL} && exit 0 ;;
+    3[34]??:*:4.0:* | 3[34]??,*:*:4.0:*)
+        /bin/uname -p 2>/dev/null | grep 86 >/dev/null \
+          && echo i486-ncr-sysv4 && exit 0 ;;
+    m68*:LynxOS:2.*:*)
+       echo m68k-unknown-lynxos${UNAME_RELEASE}
+       exit 0 ;;
+    mc68030:UNIX_System_V:4.*:*)
+       echo m68k-atari-sysv4
+       exit 0 ;;
+    i?86:LynxOS:2.*:* | i?86:LynxOS:3.[01]*:*)
+       echo i386-unknown-lynxos${UNAME_RELEASE}
+       exit 0 ;;
+    TSUNAMI:LynxOS:2.*:*)
+       echo sparc-unknown-lynxos${UNAME_RELEASE}
+       exit 0 ;;
+    rs6000:LynxOS:2.*:* | PowerPC:LynxOS:2.*:*)
+       echo rs6000-unknown-lynxos${UNAME_RELEASE}
+       exit 0 ;;
+    SM[BE]S:UNIX_SV:*:*)
+       echo mips-dde-sysv${UNAME_RELEASE}
+       exit 0 ;;
+    RM*:ReliantUNIX-*:*:*)
+       echo mips-sni-sysv4
+       exit 0 ;;
+    RM*:SINIX-*:*:*)
+       echo mips-sni-sysv4
+       exit 0 ;;
+    *:SINIX-*:*:*)
+       if uname -p 2>/dev/null >/dev/null ; then
+               UNAME_MACHINE=`(uname -p) 2>/dev/null`
+               echo ${UNAME_MACHINE}-sni-sysv4
+       else
+               echo ns32k-sni-sysv
+       fi
+       exit 0 ;;
+    PENTIUM:CPunix:4.0*:*) # Unisys `ClearPath HMP IX 4000' SVR4/MP effort
+                           # says <Richard.M.Bartel@ccMail.Census.GOV>
+        echo i586-unisys-sysv4
+        exit 0 ;;
+    *:UNIX_System_V:4*:FTX*)
+       # From Gerald Hewes <hewes@openmarket.com>.
+       # How about differentiating between stratus architectures? -djm
+       echo hppa1.1-stratus-sysv4
+       exit 0 ;;
+    *:*:*:FTX*)
+       # From seanf@swdc.stratus.com.
+       echo i860-stratus-sysv4
+       exit 0 ;;
+    mc68*:A/UX:*:*)
+       echo m68k-apple-aux${UNAME_RELEASE}
+       exit 0 ;;
+    news*:NEWS-OS:*:6*)
+       echo mips-sony-newsos6
+       exit 0 ;;
+    R[34]000:*System_V*:*:* | R4000:UNIX_SYSV:*:* | R*000:UNIX_SV:*:*)
+       if [ -d /usr/nec ]; then
+               echo mips-nec-sysv${UNAME_RELEASE}
+       else
+               echo mips-unknown-sysv${UNAME_RELEASE}
+       fi
+        exit 0 ;;
+    BeBox:BeOS:*:*)    # BeOS running on hardware made by Be, PPC only.
+       echo powerpc-be-beos
+       exit 0 ;;
+    BeMac:BeOS:*:*)    # BeOS running on Mac or Mac clone, PPC only.
+       echo powerpc-apple-beos
+       exit 0 ;;
+    BePC:BeOS:*:*)     # BeOS running on Intel PC compatible.
+       echo i586-pc-beos
+       exit 0 ;;
+    SX-4:SUPER-UX:*:*)
+       echo sx4-nec-superux${UNAME_RELEASE}
+       exit 0 ;;
+    SX-5:SUPER-UX:*:*)
+       echo sx5-nec-superux${UNAME_RELEASE}
+       exit 0 ;;
+    Power*:Rhapsody:*:*)
+       echo powerpc-apple-rhapsody${UNAME_RELEASE}
+       exit 0 ;;
+    *:Rhapsody:*:*)
+       echo ${UNAME_MACHINE}-apple-rhapsody${UNAME_RELEASE}
+       exit 0 ;;
+esac
+
+#echo '(No uname command or uname output not recognized.)' 1>&2
+#echo "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" 1>&2
+
+cat >$dummy.c <<EOF
+#ifdef _SEQUENT_
+# include <sys/types.h>
+# include <sys/utsname.h>
+#endif
+main ()
+{
+#if defined (sony)
+#if defined (MIPSEB)
+  /* BFD wants "bsd" instead of "newsos".  Perhaps BFD should be changed,
+     I don't know....  */
+  printf ("mips-sony-bsd\n"); exit (0);
+#else
+#include <sys/param.h>
+  printf ("m68k-sony-newsos%s\n",
+#ifdef NEWSOS4
+          "4"
+#else
+         ""
+#endif
+         ); exit (0);
+#endif
+#endif
+
+#if defined (__arm) && defined (__acorn) && defined (__unix)
+  printf ("arm-acorn-riscix"); exit (0);
+#endif
+
+#if defined (hp300) && !defined (hpux)
+  printf ("m68k-hp-bsd\n"); exit (0);
+#endif
+
+#if defined (NeXT)
+#if !defined (__ARCHITECTURE__)
+#define __ARCHITECTURE__ "m68k"
+#endif
+  int version;
+  version=`(hostinfo | sed -n 's/.*NeXT Mach \([0-9]*\).*/\1/p') 2>/dev/null`;
+  if (version < 4)
+    printf ("%s-next-nextstep%d\n", __ARCHITECTURE__, version);
+  else
+    printf ("%s-next-openstep%d\n", __ARCHITECTURE__, version);
+  exit (0);
+#endif
+
+#if defined (MULTIMAX) || defined (n16)
+#if defined (UMAXV)
+  printf ("ns32k-encore-sysv\n"); exit (0);
+#else
+#if defined (CMU)
+  printf ("ns32k-encore-mach\n"); exit (0);
+#else
+  printf ("ns32k-encore-bsd\n"); exit (0);
+#endif
+#endif
+#endif
+
+#if defined (__386BSD__)
+  printf ("i386-pc-bsd\n"); exit (0);
+#endif
+
+#if defined (sequent)
+#if defined (i386)
+  printf ("i386-sequent-dynix\n"); exit (0);
+#endif
+#if defined (ns32000)
+  printf ("ns32k-sequent-dynix\n"); exit (0);
+#endif
+#endif
+
+#if defined (_SEQUENT_)
+    struct utsname un;
+
+    uname(&un);
+
+    if (strncmp(un.version, "V2", 2) == 0) {
+       printf ("i386-sequent-ptx2\n"); exit (0);
+    }
+    if (strncmp(un.version, "V1", 2) == 0) { /* XXX is V1 correct? */
+       printf ("i386-sequent-ptx1\n"); exit (0);
+    }
+    printf ("i386-sequent-ptx\n"); exit (0);
+
+#endif
+
+#if defined (vax)
+#if !defined (ultrix)
+  printf ("vax-dec-bsd\n"); exit (0);
+#else
+  printf ("vax-dec-ultrix\n"); exit (0);
+#endif
+#endif
+
+#if defined (alliant) && defined (i860)
+  printf ("i860-alliant-bsd\n"); exit (0);
+#endif
+
+  exit (1);
+}
+EOF
+
+$CC_FOR_BUILD $dummy.c -o $dummy 2>/dev/null && ./$dummy && rm $dummy.c $dummy && exit 0
+rm -f $dummy.c $dummy
+
+# Apollos put the system type in the environment.
+
+test -d /usr/apollo && { echo ${ISP}-apollo-${SYSTYPE}; exit 0; }
+
+# Convex versions that predate uname can use getsysinfo(1)
+
+if [ -x /usr/convex/getsysinfo ]
+then
+    case `getsysinfo -f cpu_type` in
+    c1*)
+       echo c1-convex-bsd
+       exit 0 ;;
+    c2*)
+       if getsysinfo -f scalar_acc
+       then echo c32-convex-bsd
+       else echo c2-convex-bsd
+       fi
+       exit 0 ;;
+    c34*)
+       echo c34-convex-bsd
+       exit 0 ;;
+    c38*)
+       echo c38-convex-bsd
+       exit 0 ;;
+    c4*)
+       echo c4-convex-bsd
+       exit 0 ;;
+    esac
+fi
+
+#echo '(Unable to guess system type)' 1>&2
+
+exit 1
diff --git a/contrib/php4/config.m4 b/contrib/php4/config.m4
new file mode 100644 (file)
index 0000000..b8acde7
--- /dev/null
@@ -0,0 +1,24 @@
+dnl $Id$
+
+PHP_ARG_WITH(rrdtool, for RRDTool support,
+[  --with-rrdtool[=DIR]      Include RRDTool support.  DIR is the rrdtool
+                          install directory.])
+
+if test "$PHP_RRDTOOL" != "no"; then
+  for i in /usr/local /usr /opt/rrdtool /usr/local/rrdtool $PHP_RRDTOOL; do
+    if test -f $i/include/rrd.h; then
+      RRDTOOL_DIR=$i
+    fi
+  done
+
+  if test -z "$RRDTOOL_DIR"; then
+    AC_MSG_ERROR(Please reinstall rrdtool, or specify a directory - I cannot find rrd.h)
+  fi
+  AC_ADD_INCLUDE($RRDTOOL_DIR/include)
+  AC_ADD_LIBRARY_WITH_PATH(rrd, $RRDTOOL_DIR/lib, RRDTOOL_SHARED_LIBADD)
+  PHP_SUBST(RRDTOOL_SHARED_LIBADD)
+
+  AC_DEFINE(HAVE_RRDTOOL,1,[ ])
+
+  PHP_EXTENSION(rrdtool, $ext_shared)
+fi
diff --git a/contrib/php4/config.sub b/contrib/php4/config.sub
new file mode 100755 (executable)
index 0000000..2436b45
--- /dev/null
@@ -0,0 +1,1215 @@
+#! /bin/sh
+# Configuration validation subroutine script, version 1.1.
+#   Copyright (C) 1991, 92-97, 1998, 1999 Free Software Foundation, Inc.
+# This file is (in principle) common to ALL GNU software.
+# The presence of a machine in this file suggests that SOME GNU software
+# can handle that machine.  It does not imply ALL GNU software can.
+#
+# This file is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place - Suite 330,
+# Boston, MA 02111-1307, USA.
+
+# As a special exception to the GNU General Public License, if you
+# distribute this file as part of a program that contains a
+# configuration script generated by Autoconf, you may include it under
+# the same distribution terms that you use for the rest of that program.
+
+# Configuration subroutine to validate and canonicalize a configuration type.
+# Supply the specified configuration type as an argument.
+# If it is invalid, we print an error message on stderr and exit with code 1.
+# Otherwise, we print the canonical config type on stdout and succeed.
+
+# This file is supposed to be the same for all GNU packages
+# and recognize all the CPU types, system types and aliases
+# that are meaningful with *any* GNU software.
+# Each package is responsible for reporting which valid configurations
+# it does not support.  The user should be able to distinguish
+# a failure to support a valid configuration from a meaningless
+# configuration.
+
+# The goal of this file is to map all the various variations of a given
+# machine specification into a single specification in the form:
+#      CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM
+# or in some cases, the newer four-part form:
+#      CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM
+# It is wrong to echo any other type of specification.
+
+if [ x$1 = x ]
+then
+       echo Configuration name missing. 1>&2
+       echo "Usage: $0 CPU-MFR-OPSYS" 1>&2
+       echo "or     $0 ALIAS" 1>&2
+       echo where ALIAS is a recognized configuration type. 1>&2
+       exit 1
+fi
+
+# First pass through any local machine types.
+case $1 in
+       *local*)
+               echo $1
+               exit 0
+               ;;
+       *)
+       ;;
+esac
+
+# Separate what the user gave into CPU-COMPANY and OS or KERNEL-OS (if any).
+# Here we must recognize all the valid KERNEL-OS combinations.
+maybe_os=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\2/'`
+case $maybe_os in
+  linux-gnu*)
+    os=-$maybe_os
+    basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'`
+    ;;
+  *)
+    basic_machine=`echo $1 | sed 's/-[^-]*$//'`
+    if [ $basic_machine != $1 ]
+    then os=`echo $1 | sed 's/.*-/-/'`
+    else os=; fi
+    ;;
+esac
+
+### Let's recognize common machines as not being operating systems so
+### that things like config.sub decstation-3100 work.  We also
+### recognize some manufacturers as not being operating systems, so we
+### can provide default operating systems below.
+case $os in
+       -sun*os*)
+               # Prevent following clause from handling this invalid input.
+               ;;
+       -dec* | -mips* | -sequent* | -encore* | -pc532* | -sgi* | -sony* | \
+       -att* | -7300* | -3300* | -delta* | -motorola* | -sun[234]* | \
+       -unicom* | -ibm* | -next | -hp | -isi* | -apollo | -altos* | \
+       -convergent* | -ncr* | -news | -32* | -3600* | -3100* | -hitachi* |\
+       -c[123]* | -convex* | -sun | -crds | -omron* | -dg | -ultra | -tti* | \
+       -harris | -dolphin | -highlevel | -gould | -cbm | -ns | -masscomp | \
+       -apple)
+               os=
+               basic_machine=$1
+               ;;
+       -sim | -cisco | -oki | -wec | -winbond)
+               os=
+               basic_machine=$1
+               ;;
+       -scout)
+               ;;
+       -wrs)
+               os=vxworks
+               basic_machine=$1
+               ;;
+       -hiux*)
+               os=-hiuxwe2
+               ;;
+       -sco5)
+               os=-sco3.2v5
+               basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
+               ;;
+       -sco4)
+               os=-sco3.2v4
+               basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
+               ;;
+       -sco3.2.[4-9]*)
+               os=`echo $os | sed -e 's/sco3.2./sco3.2v/'`
+               basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
+               ;;
+       -sco3.2v[4-9]*)
+               # Don't forget version if it is 3.2v4 or newer.
+               basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
+               ;;
+       -sco*)
+               os=-sco3.2v2
+               basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
+               ;;
+       -udk*)
+               basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
+               ;;
+       -isc)
+               os=-isc2.2
+               basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
+               ;;
+       -clix*)
+               basic_machine=clipper-intergraph
+               ;;
+       -isc*)
+               basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
+               ;;
+       -lynx*)
+               os=-lynxos
+               ;;
+       -ptx*)
+               basic_machine=`echo $1 | sed -e 's/86-.*/86-sequent/'`
+               ;;
+       -windowsnt*)
+               os=`echo $os | sed -e 's/windowsnt/winnt/'`
+               ;;
+       -psos*)
+               os=-psos
+               ;;
+esac
+
+# Decode aliases for certain CPU-COMPANY combinations.
+case $basic_machine in
+       # Recognize the basic CPU types without company name.
+       # Some are omitted here because they have special meanings below.
+       tahoe | i860 | m32r | m68k | m68000 | m88k | ns32k | arc | arm \
+               | arme[lb] | pyramid | mn10200 | mn10300 | tron | a29k \
+               | 580 | i960 | h8300 \
+               | hppa | hppa1.0 | hppa1.1 | hppa2.0 | hppa2.0w | hppa2.0n \
+               | alpha | alphaev[4-7] | alphaev56 | alphapca5[67] \
+               | we32k | ns16k | clipper | i370 | sh | powerpc | powerpcle \
+               | 1750a | dsp16xx | pdp11 | mips16 | mips64 | mipsel | mips64el \
+               | mips64orion | mips64orionel | mipstx39 | mipstx39el \
+               | mips64vr4300 | mips64vr4300el | mips64vr4100 | mips64vr4100el \
+               | mips64vr5000 | miprs64vr5000el \
+               | sparc | sparclet | sparclite | sparc64 | sparcv9 | v850 | c4x \
+               | thumb | d10v)
+               basic_machine=$basic_machine-unknown
+               ;;
+       m88110 | m680[12346]0 | m683?2 | m68360 | m5200 | z8k | v70 | h8500 | w65)
+               ;;
+
+       # We use `pc' rather than `unknown'
+       # because (1) that's what they normally are, and
+       # (2) the word "unknown" tends to confuse beginning users.
+       i[34567]86)
+         basic_machine=$basic_machine-pc
+         ;;
+       # Object if more than one company name word.
+       *-*-*)
+               echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2
+               exit 1
+               ;;
+       # Recognize the basic CPU types with company name.
+       vax-* | tahoe-* | i[34567]86-* | i860-* | m32r-* | m68k-* | m68000-* \
+             | m88k-* | sparc-* | ns32k-* | fx80-* | arc-* | arm-* | c[123]* \
+             | mips-* | pyramid-* | tron-* | a29k-* | romp-* | rs6000-* \
+             | power-* | none-* | 580-* | cray2-* | h8300-* | h8500-* | i960-* \
+             | xmp-* | ymp-* \
+             | hppa-* | hppa1.0-* | hppa1.1-* | hppa2.0-* | hppa2.0w-* | hppa2.0n-* \
+             | alpha-* | alphaev[4-7]-* | alphaev56-* | alphapca5[67]-* \
+             | we32k-* | cydra-* | ns16k-* | pn-* | np1-* | xps100-* \
+             | clipper-* | orion-* \
+             | sparclite-* | pdp11-* | sh-* | powerpc-* | powerpcle-* \
+             | sparc64-* | sparcv9-* | sparc86x-* | mips16-* | mips64-* | mipsel-* \
+             | mips64el-* | mips64orion-* | mips64orionel-* \
+             | mips64vr4100-* | mips64vr4100el-* | mips64vr4300-* | mips64vr4300el-* \
+             | mipstx39-* | mipstx39el-* \
+             | f301-* | armv*-* | t3e-* \
+             | m88110-* | m680[01234]0-* | m683?2-* | m68360-* | z8k-* | d10v-* \
+             | thumb-* | v850-* | d30v-* | tic30-* | c30-* )
+               ;;
+       # Recognize the various machine names and aliases which stand
+       # for a CPU type and a company and sometimes even an OS.
+       386bsd)
+               basic_machine=i386-unknown
+               os=-bsd
+               ;;
+       3b1 | 7300 | 7300-att | att-7300 | pc7300 | safari | unixpc)
+               basic_machine=m68000-att
+               ;;
+       3b*)
+               basic_machine=we32k-att
+               ;;
+       a29khif)
+               basic_machine=a29k-amd
+               os=-udi
+               ;;
+       adobe68k)
+               basic_machine=m68010-adobe
+               os=-scout
+               ;;
+       alliant | fx80)
+               basic_machine=fx80-alliant
+               ;;
+       altos | altos3068)
+               basic_machine=m68k-altos
+               ;;
+       am29k)
+               basic_machine=a29k-none
+               os=-bsd
+               ;;
+       amdahl)
+               basic_machine=580-amdahl
+               os=-sysv
+               ;;
+       amiga | amiga-*)
+               basic_machine=m68k-cbm
+               ;;
+       amigaos | amigados)
+               basic_machine=m68k-cbm
+               os=-amigaos
+               ;;
+       amigaunix | amix)
+               basic_machine=m68k-cbm
+               os=-sysv4
+               ;;
+       apollo68)
+               basic_machine=m68k-apollo
+               os=-sysv
+               ;;
+       apollo68bsd)
+               basic_machine=m68k-apollo
+               os=-bsd
+               ;;
+       aux)
+               basic_machine=m68k-apple
+               os=-aux
+               ;;
+       balance)
+               basic_machine=ns32k-sequent
+               os=-dynix
+               ;;
+       convex-c1)
+               basic_machine=c1-convex
+               os=-bsd
+               ;;
+       convex-c2)
+               basic_machine=c2-convex
+               os=-bsd
+               ;;
+       convex-c32)
+               basic_machine=c32-convex
+               os=-bsd
+               ;;
+       convex-c34)
+               basic_machine=c34-convex
+               os=-bsd
+               ;;
+       convex-c38)
+               basic_machine=c38-convex
+               os=-bsd
+               ;;
+       cray | ymp)
+               basic_machine=ymp-cray
+               os=-unicos
+               ;;
+       cray2)
+               basic_machine=cray2-cray
+               os=-unicos
+               ;;
+       [ctj]90-cray)
+               basic_machine=c90-cray
+               os=-unicos
+               ;;
+       crds | unos)
+               basic_machine=m68k-crds
+               ;;
+       da30 | da30-*)
+               basic_machine=m68k-da30
+               ;;
+       decstation | decstation-3100 | pmax | pmax-* | pmin | dec3100 | decstatn)
+               basic_machine=mips-dec
+               ;;
+       delta | 3300 | motorola-3300 | motorola-delta \
+             | 3300-motorola | delta-motorola)
+               basic_machine=m68k-motorola
+               ;;
+       delta88)
+               basic_machine=m88k-motorola
+               os=-sysv3
+               ;;
+       dpx20 | dpx20-*)
+               basic_machine=rs6000-bull
+               os=-bosx
+               ;;
+       dpx2* | dpx2*-bull)
+               basic_machine=m68k-bull
+               os=-sysv3
+               ;;
+       ebmon29k)
+               basic_machine=a29k-amd
+               os=-ebmon
+               ;;
+       elxsi)
+               basic_machine=elxsi-elxsi
+               os=-bsd
+               ;;
+       encore | umax | mmax)
+               basic_machine=ns32k-encore
+               ;;
+       es1800 | OSE68k | ose68k | ose | OSE)
+               basic_machine=m68k-ericsson
+               os=-ose
+               ;;
+       fx2800)
+               basic_machine=i860-alliant
+               ;;
+       genix)
+               basic_machine=ns32k-ns
+               ;;
+       gmicro)
+               basic_machine=tron-gmicro
+               os=-sysv
+               ;;
+       h3050r* | hiux*)
+               basic_machine=hppa1.1-hitachi
+               os=-hiuxwe2
+               ;;
+       h8300hms)
+               basic_machine=h8300-hitachi
+               os=-hms
+               ;;
+       h8300xray)
+               basic_machine=h8300-hitachi
+               os=-xray
+               ;;
+       h8500hms)
+               basic_machine=h8500-hitachi
+               os=-hms
+               ;;
+       harris)
+               basic_machine=m88k-harris
+               os=-sysv3
+               ;;
+       hp300-*)
+               basic_machine=m68k-hp
+               ;;
+       hp300bsd)
+               basic_machine=m68k-hp
+               os=-bsd
+               ;;
+       hp300hpux)
+               basic_machine=m68k-hp
+               os=-hpux
+               ;;
+       hp3k9[0-9][0-9] | hp9[0-9][0-9])
+               basic_machine=hppa1.0-hp
+               ;;
+       hp9k2[0-9][0-9] | hp9k31[0-9])
+               basic_machine=m68000-hp
+               ;;
+       hp9k3[2-9][0-9])
+               basic_machine=m68k-hp
+               ;;
+       hp9k6[0-9][0-9] | hp6[0-9][0-9])
+               basic_machine=hppa1.0-hp
+               ;;
+       hp9k7[0-79][0-9] | hp7[0-79][0-9])
+               basic_machine=hppa1.1-hp
+               ;;
+       hp9k78[0-9] | hp78[0-9])
+               # FIXME: really hppa2.0-hp
+               basic_machine=hppa1.1-hp
+               ;;
+       hp9k8[67]1 | hp8[67]1 | hp9k80[24] | hp80[24] | hp9k8[78]9 | hp8[78]9 | hp9k893 | hp893)
+               # FIXME: really hppa2.0-hp
+               basic_machine=hppa1.1-hp
+               ;;
+       hp9k8[0-9][13679] | hp8[0-9][13679])
+               basic_machine=hppa1.1-hp
+               ;;
+       hp9k8[0-9][0-9] | hp8[0-9][0-9])
+               basic_machine=hppa1.0-hp
+               ;;
+       hppa-next)
+               os=-nextstep3
+               ;;
+       hppaosf)
+               basic_machine=hppa1.1-hp
+               os=-osf
+               ;;
+       hppro)
+               basic_machine=hppa1.1-hp
+               os=-proelf
+               ;;
+       i370-ibm* | ibm*)
+               basic_machine=i370-ibm
+               os=-mvs
+               ;;
+# I'm not sure what "Sysv32" means.  Should this be sysv3.2?
+       i[34567]86v32)
+               basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'`
+               os=-sysv32
+               ;;
+       i[34567]86v4*)
+               basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'`
+               os=-sysv4
+               ;;
+       i[34567]86v)
+               basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'`
+               os=-sysv
+               ;;
+       i[34567]86sol2)
+               basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'`
+               os=-solaris2
+               ;;
+       i386mach)
+               basic_machine=i386-mach
+               os=-mach
+               ;;
+       i386-vsta | vsta)
+               basic_machine=i386-unknown
+               os=-vsta
+               ;;
+       i386-go32 | go32)
+               basic_machine=i386-unknown
+               os=-go32
+               ;;
+       i386-mingw32 | mingw32)
+               basic_machine=i386-unknown
+               os=-mingw32
+               ;;
+       iris | iris4d)
+               basic_machine=mips-sgi
+               case $os in
+                   -irix*)
+                       ;;
+                   *)
+                       os=-irix4
+                       ;;
+               esac
+               ;;
+       isi68 | isi)
+               basic_machine=m68k-isi
+               os=-sysv
+               ;;
+       m88k-omron*)
+               basic_machine=m88k-omron
+               ;;
+       magnum | m3230)
+               basic_machine=mips-mips
+               os=-sysv
+               ;;
+       merlin)
+               basic_machine=ns32k-utek
+               os=-sysv
+               ;;
+       miniframe)
+               basic_machine=m68000-convergent
+               ;;
+       *mint | *MiNT)
+               basic_machine=m68k-atari
+               os=-mint
+               ;;
+       mipsel*-linux*)
+               basic_machine=mipsel-unknown
+               os=-linux-gnu
+               ;;
+       mips*-linux*)
+               basic_machine=mips-unknown
+               os=-linux-gnu
+               ;;
+       mips3*-*)
+               basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'`
+               ;;
+       mips3*)
+               basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'`-unknown
+               ;;
+       monitor)
+               basic_machine=m68k-rom68k
+               os=-coff
+               ;;
+       msdos)
+               basic_machine=i386-unknown
+               os=-msdos
+               ;;
+       ncr3000)
+               basic_machine=i486-ncr
+               os=-sysv4
+               ;;
+       netbsd386)
+               basic_machine=i386-unknown
+               os=-netbsd
+               ;;
+       netwinder)
+               basic_machine=armv4l-corel
+               os=-linux
+               ;;
+       news | news700 | news800 | news900)
+               basic_machine=m68k-sony
+               os=-newsos
+               ;;
+       news1000)
+               basic_machine=m68030-sony
+               os=-newsos
+               ;;
+       news-3600 | risc-news)
+               basic_machine=mips-sony
+               os=-newsos
+               ;;
+       necv70)
+               basic_machine=v70-nec
+               os=-sysv
+               ;;
+       next | m*-next )
+               basic_machine=m68k-next
+               case $os in
+                   -nextstep* )
+                       ;;
+                   -ns2*)
+                     os=-nextstep2
+                       ;;
+                   *)
+                     os=-nextstep3
+                       ;;
+               esac
+               ;;
+       nh3000)
+               basic_machine=m68k-harris
+               os=-cxux
+               ;;
+       nh[45]000)
+               basic_machine=m88k-harris
+               os=-cxux
+               ;;
+       nindy960)
+               basic_machine=i960-intel
+               os=-nindy
+               ;;
+       mon960)
+               basic_machine=i960-intel
+               os=-mon960
+               ;;
+       np1)
+               basic_machine=np1-gould
+               ;;
+       op50n-* | op60c-*)
+               basic_machine=hppa1.1-oki
+               os=-proelf
+               ;;
+       OSE68000 | ose68000)
+               basic_machine=m68000-ericsson
+               os=-ose
+               ;;
+       os68k)
+               basic_machine=m68k-none
+               os=-os68k
+               ;;
+       pa-hitachi)
+               basic_machine=hppa1.1-hitachi
+               os=-hiuxwe2
+               ;;
+       paragon)
+               basic_machine=i860-intel
+               os=-osf
+               ;;
+       pbd)
+               basic_machine=sparc-tti
+               ;;
+       pbb)
+               basic_machine=m68k-tti
+               ;;
+        pc532 | pc532-*)
+               basic_machine=ns32k-pc532
+               ;;
+       pentium | p5 | k5 | k6 | nexen)
+               basic_machine=i586-pc
+               ;;
+       pentiumpro | p6 | 6x86)
+               basic_machine=i686-pc
+               ;;
+       pentiumii | pentium2)
+               basic_machine=i786-pc
+               ;;
+       pentium-* | p5-* | k5-* | k6-* | nexen-*)
+               basic_machine=i586-`echo $basic_machine | sed 's/^[^-]*-//'`
+               ;;
+       pentiumpro-* | p6-* | 6x86-*)
+               basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'`
+               ;;
+       pentiumii-* | pentium2-*)
+               basic_machine=i786-`echo $basic_machine | sed 's/^[^-]*-//'`
+               ;;
+       pn)
+               basic_machine=pn-gould
+               ;;
+       power)  basic_machine=rs6000-ibm
+               ;;
+       ppc)    basic_machine=powerpc-unknown
+               ;;
+       ppc-*)  basic_machine=powerpc-`echo $basic_machine | sed 's/^[^-]*-//'`
+               ;;
+       ppcle | powerpclittle | ppc-le | powerpc-little)
+               basic_machine=powerpcle-unknown
+               ;;
+       ppcle-* | powerpclittle-*)
+               basic_machine=powerpcle-`echo $basic_machine | sed 's/^[^-]*-//'`
+               ;;
+       ps2)
+               basic_machine=i386-ibm
+               ;;
+       rom68k)
+               basic_machine=m68k-rom68k
+               os=-coff
+               ;;
+       rm[46]00)
+               basic_machine=mips-siemens
+               ;;
+       rtpc | rtpc-*)
+               basic_machine=romp-ibm
+               ;;
+       sa29200)
+               basic_machine=a29k-amd
+               os=-udi
+               ;;
+       sequent)
+               basic_machine=i386-sequent
+               ;;
+       sh)
+               basic_machine=sh-hitachi
+               os=-hms
+               ;;
+       sparclite-wrs)
+               basic_machine=sparclite-wrs
+               os=-vxworks
+               ;;
+       sps7)
+               basic_machine=m68k-bull
+               os=-sysv2
+               ;;
+       spur)
+               basic_machine=spur-unknown
+               ;;
+       st2000)
+               basic_machine=m68k-tandem
+               ;;
+       stratus)
+               basic_machine=i860-stratus
+               os=-sysv4
+               ;;
+       sun2)
+               basic_machine=m68000-sun
+               ;;
+       sun2os3)
+               basic_machine=m68000-sun
+               os=-sunos3
+               ;;
+       sun2os4)
+               basic_machine=m68000-sun
+               os=-sunos4
+               ;;
+       sun3os3)
+               basic_machine=m68k-sun
+               os=-sunos3
+               ;;
+       sun3os4)
+               basic_machine=m68k-sun
+               os=-sunos4
+               ;;
+       sun4os3)
+               basic_machine=sparc-sun
+               os=-sunos3
+               ;;
+       sun4os4)
+               basic_machine=sparc-sun
+               os=-sunos4
+               ;;
+       sun4sol2)
+               basic_machine=sparc-sun
+               os=-solaris2
+               ;;
+       sun3 | sun3-*)
+               basic_machine=m68k-sun
+               ;;
+       sun4)
+               basic_machine=sparc-sun
+               ;;
+       sun386 | sun386i | roadrunner)
+               basic_machine=i386-sun
+               ;;
+       symmetry)
+               basic_machine=i386-sequent
+               os=-dynix
+               ;;
+       t3e)
+               basic_machine=t3e-cray
+               os=-unicos
+               ;;
+       tx39)
+               basic_machine=mipstx39-unknown
+               ;;
+       tx39el)
+               basic_machine=mipstx39el-unknown
+               ;;
+       tower | tower-32)
+               basic_machine=m68k-ncr
+               ;;
+       udi29k)
+               basic_machine=a29k-amd
+               os=-udi
+               ;;
+       ultra3)
+               basic_machine=a29k-nyu
+               os=-sym1
+               ;;
+       v810 | necv810)
+               basic_machine=v810-nec
+               os=-none
+               ;;
+       vaxv)
+               basic_machine=vax-dec
+               os=-sysv
+               ;;
+       vms)
+               basic_machine=vax-dec
+               os=-vms
+               ;;
+       vpp*|vx|vx-*)
+               basic_machine=f301-fujitsu
+               ;;
+       vxworks960)
+               basic_machine=i960-wrs
+               os=-vxworks
+               ;;
+       vxworks68)
+               basic_machine=m68k-wrs
+               os=-vxworks
+               ;;
+       vxworks29k)
+               basic_machine=a29k-wrs
+               os=-vxworks
+               ;;
+       w65*)
+               basic_machine=w65-wdc
+               os=-none
+               ;;
+       w89k-*)
+               basic_machine=hppa1.1-winbond
+               os=-proelf
+               ;;
+       xmp)
+               basic_machine=xmp-cray
+               os=-unicos
+               ;;
+        xps | xps100)
+               basic_machine=xps100-honeywell
+               ;;
+       z8k-*-coff)
+               basic_machine=z8k-unknown
+               os=-sim
+               ;;
+       none)
+               basic_machine=none-none
+               os=-none
+               ;;
+
+# Here we handle the default manufacturer of certain CPU types.  It is in
+# some cases the only manufacturer, in others, it is the most popular.
+       w89k)
+               basic_machine=hppa1.1-winbond
+               ;;
+       op50n)
+               basic_machine=hppa1.1-oki
+               ;;
+       op60c)
+               basic_machine=hppa1.1-oki
+               ;;
+       mips)
+               if [ x$os = x-linux-gnu ]; then
+                       basic_machine=mips-unknown
+               else
+                       basic_machine=mips-mips
+               fi
+               ;;
+       romp)
+               basic_machine=romp-ibm
+               ;;
+       rs6000)
+               basic_machine=rs6000-ibm
+               ;;
+       vax)
+               basic_machine=vax-dec
+               ;;
+       pdp11)
+               basic_machine=pdp11-dec
+               ;;
+       we32k)
+               basic_machine=we32k-att
+               ;;
+       sparc | sparcv9)
+               basic_machine=sparc-sun
+               ;;
+        cydra)
+               basic_machine=cydra-cydrome
+               ;;
+       orion)
+               basic_machine=orion-highlevel
+               ;;
+       orion105)
+               basic_machine=clipper-highlevel
+               ;;
+       mac | mpw | mac-mpw)
+               basic_machine=m68k-apple
+               ;;
+       pmac | pmac-mpw)
+               basic_machine=powerpc-apple
+               ;;
+       c4x*)
+               basic_machine=c4x-none
+               os=-coff
+               ;;
+       *)
+               echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2
+               exit 1
+               ;;
+esac
+
+# Here we canonicalize certain aliases for manufacturers.
+case $basic_machine in
+       *-digital*)
+               basic_machine=`echo $basic_machine | sed 's/digital.*/dec/'`
+               ;;
+       *-commodore*)
+               basic_machine=`echo $basic_machine | sed 's/commodore.*/cbm/'`
+               ;;
+       *)
+               ;;
+esac
+
+# Decode manufacturer-specific aliases for certain operating systems.
+
+if [ x"$os" != x"" ]
+then
+case $os in
+        # First match some system type aliases
+        # that might get confused with valid system types.
+       # -solaris* is a basic system type, with this one exception.
+       -solaris1 | -solaris1.*)
+               os=`echo $os | sed -e 's|solaris1|sunos4|'`
+               ;;
+       -solaris)
+               os=-solaris2
+               ;;
+       -svr4*)
+               os=-sysv4
+               ;;
+       -unixware*)
+               os=-sysv4.2uw
+               ;;
+       -gnu/linux*)
+               os=`echo $os | sed -e 's|gnu/linux|linux-gnu|'`
+               ;;
+       # First accept the basic system types.
+       # The portable systems comes first.
+       # Each alternative MUST END IN A *, to match a version number.
+       # -sysv* is not here because it comes later, after sysvr4.
+       -gnu* | -bsd* | -mach* | -minix* | -genix* | -ultrix* | -irix* \
+             | -*vms* | -sco* | -esix* | -isc* | -aix* | -sunos | -sunos[34]*\
+             | -hpux* | -unos* | -osf* | -luna* | -dgux* | -solaris* | -sym* \
+             | -amigaos* | -amigados* | -msdos* | -newsos* | -unicos* | -aof* \
+             | -aos* \
+             | -nindy* | -vxsim* | -vxworks* | -ebmon* | -hms* | -mvs* \
+             | -clix* | -riscos* | -uniplus* | -iris* | -rtu* | -xenix* \
+             | -hiux* | -386bsd* | -netbsd* | -openbsd* | -freebsd* | -riscix* \
+             | -lynxos* | -bosx* | -nextstep* | -cxux* | -aout* | -elf* | -oabi* \
+             | -ptx* | -coff* | -ecoff* | -winnt* | -domain* | -vsta* \
+             | -udi* | -eabi* | -lites* | -ieee* | -go32* | -aux* \
+             | -cygwin* | -pe* | -psos* | -moss* | -proelf* | -rtems* \
+             | -mingw32* | -linux-gnu* | -uxpv* | -beos* | -mpeix* | -udk* \
+             | -interix* | -uwin* | -rhapsody* | -openstep* | -oskit*)
+       # Remember, each alternative MUST END IN *, to match a version number.
+               ;;
+       -sim | -es1800* | -hms* | -xray | -os68k* | -none* | -v88r* \
+             | -windows* | -osx | -abug | -netware* | -os9* | -beos* \
+             | -macos* | -mpw* | -magic* | -mon960* | -lnews*)
+               ;;
+       -mac*)
+               os=`echo $os | sed -e 's|mac|macos|'`
+               ;;
+       -linux*)
+               os=`echo $os | sed -e 's|linux|linux-gnu|'`
+               ;;
+       -sunos5*)
+               os=`echo $os | sed -e 's|sunos5|solaris2|'`
+               ;;
+       -sunos6*)
+               os=`echo $os | sed -e 's|sunos6|solaris3|'`
+               ;;
+       -osfrose*)
+               os=-osfrose
+               ;;
+       -osf*)
+               os=-osf
+               ;;
+       -utek*)
+               os=-bsd
+               ;;
+       -dynix*)
+               os=-bsd
+               ;;
+       -acis*)
+               os=-aos
+               ;;
+       -386bsd)
+               os=-bsd
+               ;;
+       -ctix* | -uts*)
+               os=-sysv
+               ;;
+       -ns2 )
+               os=-nextstep2
+               ;;
+       # Preserve the version number of sinix5.
+       -sinix5.*)
+               os=`echo $os | sed -e 's|sinix|sysv|'`
+               ;;
+       -sinix*)
+               os=-sysv4
+               ;;
+       -triton*)
+               os=-sysv3
+               ;;
+       -oss*)
+               os=-sysv3
+               ;;
+       -svr4)
+               os=-sysv4
+               ;;
+       -svr3)
+               os=-sysv3
+               ;;
+       -sysvr4)
+               os=-sysv4
+               ;;
+       # This must come after -sysvr4.
+       -sysv*)
+               ;;
+       -ose*)
+               os=-ose
+               ;;
+       -es1800*)
+               os=-ose
+               ;;
+       -xenix)
+               os=-xenix
+               ;;
+        -*mint | -*MiNT)
+               os=-mint
+               ;;
+       -none)
+               ;;
+       *)
+               # Get rid of the `-' at the beginning of $os.
+               os=`echo $os | sed 's/[^-]*-//'`
+               echo Invalid configuration \`$1\': system \`$os\' not recognized 1>&2
+               exit 1
+               ;;
+esac
+else
+
+# Here we handle the default operating systems that come with various machines.
+# The value should be what the vendor currently ships out the door with their
+# machine or put another way, the most popular os provided with the machine.
+
+# Note that if you're going to try to match "-MANUFACTURER" here (say,
+# "-sun"), then you have to tell the case statement up towards the top
+# that MANUFACTURER isn't an operating system.  Otherwise, code above
+# will signal an error saying that MANUFACTURER isn't an operating
+# system, and we'll never get to this point.
+
+case $basic_machine in
+       *-acorn)
+               os=-riscix1.2
+               ;;
+       arm*-corel)
+               os=-linux
+               ;;
+       arm*-semi)
+               os=-aout
+               ;;
+        pdp11-*)
+               os=-none
+               ;;
+       *-dec | vax-*)
+               os=-ultrix4.2
+               ;;
+       m68*-apollo)
+               os=-domain
+               ;;
+       i386-sun)
+               os=-sunos4.0.2
+               ;;
+       m68000-sun)
+               os=-sunos3
+               # This also exists in the configure program, but was not the
+               # default.
+               # os=-sunos4
+               ;;
+       m68*-cisco)
+               os=-aout
+               ;;
+       mips*-cisco)
+               os=-elf
+               ;;
+       mips*-*)
+               os=-elf
+               ;;
+       *-tti)  # must be before sparc entry or we get the wrong os.
+               os=-sysv3
+               ;;
+       sparc-* | *-sun)
+               os=-sunos4.1.1
+               ;;
+       *-be)
+               os=-beos
+               ;;
+       *-ibm)
+               os=-aix
+               ;;
+       *-wec)
+               os=-proelf
+               ;;
+       *-winbond)
+               os=-proelf
+               ;;
+       *-oki)
+               os=-proelf
+               ;;
+       *-hp)
+               os=-hpux
+               ;;
+       *-hitachi)
+               os=-hiux
+               ;;
+       i860-* | *-att | *-ncr | *-altos | *-motorola | *-convergent)
+               os=-sysv
+               ;;
+       *-cbm)
+               os=-amigaos
+               ;;
+       *-dg)
+               os=-dgux
+               ;;
+       *-dolphin)
+               os=-sysv3
+               ;;
+       m68k-ccur)
+               os=-rtu
+               ;;
+       m88k-omron*)
+               os=-luna
+               ;;
+       *-next )
+               os=-nextstep
+               ;;
+       *-sequent)
+               os=-ptx
+               ;;
+       *-crds)
+               os=-unos
+               ;;
+       *-ns)
+               os=-genix
+               ;;
+       i370-*)
+               os=-mvs
+               ;;
+       *-next)
+               os=-nextstep3
+               ;;
+        *-gould)
+               os=-sysv
+               ;;
+        *-highlevel)
+               os=-bsd
+               ;;
+       *-encore)
+               os=-bsd
+               ;;
+        *-sgi)
+               os=-irix
+               ;;
+        *-siemens)
+               os=-sysv4
+               ;;
+       *-masscomp)
+               os=-rtu
+               ;;
+       f301-fujitsu)
+               os=-uxpv
+               ;;
+       *-rom68k)
+               os=-coff
+               ;;
+       *-*bug)
+               os=-coff
+               ;;
+       *-apple)
+               os=-macos
+               ;;
+       *-atari*)
+               os=-mint
+               ;;
+       *)
+               os=-none
+               ;;
+esac
+fi
+
+# Here we handle the case where we know the os, and the CPU type, but not the
+# manufacturer.  We pick the logical manufacturer.
+vendor=unknown
+case $basic_machine in
+       *-unknown)
+               case $os in
+                       -riscix*)
+                               vendor=acorn
+                               ;;
+                       -sunos*)
+                               vendor=sun
+                               ;;
+                       -aix*)
+                               vendor=ibm
+                               ;;
+                       -beos*)
+                               vendor=be
+                               ;;
+                       -hpux*)
+                               vendor=hp
+                               ;;
+                       -mpeix*)
+                               vendor=hp
+                               ;;
+                       -hiux*)
+                               vendor=hitachi
+                               ;;
+                       -unos*)
+                               vendor=crds
+                               ;;
+                       -dgux*)
+                               vendor=dg
+                               ;;
+                       -luna*)
+                               vendor=omron
+                               ;;
+                       -genix*)
+                               vendor=ns
+                               ;;
+                       -mvs*)
+                               vendor=ibm
+                               ;;
+                       -ptx*)
+                               vendor=sequent
+                               ;;
+                       -vxsim* | -vxworks*)
+                               vendor=wrs
+                               ;;
+                       -aux*)
+                               vendor=apple
+                               ;;
+                       -hms*)
+                               vendor=hitachi
+                               ;;
+                       -mpw* | -macos*)
+                               vendor=apple
+                               ;;
+                       -*mint | -*MiNT)
+                               vendor=atari
+                               ;;
+               esac
+               basic_machine=`echo $basic_machine | sed "s/unknown/$vendor/"`
+               ;;
+esac
+
+echo $basic_machine$os
diff --git a/contrib/php4/configure b/contrib/php4/configure
new file mode 100755 (executable)
index 0000000..aa90df0
--- /dev/null
@@ -0,0 +1,2281 @@
+#! /bin/sh
+
+
+
+
+  PHP_VAR_SUBST="$PHP_VAR_SUBST EXT_STATIC"
+  
+
+
+  PHP_VAR_SUBST="$PHP_VAR_SUBST EXT_SHARED"
+  
+
+
+  PHP_VAR_SUBST="$PHP_VAR_SUBST EXT_LIBS"
+  
+
+
+  PHP_VAR_SUBST="$PHP_VAR_SUBST EXT_LTLIBS"
+  
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+# serial 40 AC_PROG_LIBTOOL
+
+
+
+
+# AC_LIBTOOL_DLOPEN - enable checks for dlopen support
+
+
+# AC_LIBTOOL_WIN32_DLL - declare package support for building win32 dll's
+
+
+# AC_ENABLE_SHARED - implement the --enable-shared flag
+# Usage: AC_ENABLE_SHARED[(DEFAULT)]
+#   Where DEFAULT is either `yes' or `no'.  If omitted, it defaults to
+#   `yes'.
+
+
+# AC_DISABLE_SHARED - set the default shared flag to --disable-shared
+
+
+# AC_ENABLE_STATIC - implement the --enable-static flag
+# Usage: AC_ENABLE_STATIC[(DEFAULT)]
+#   Where DEFAULT is either `yes' or `no'.  If omitted, it defaults to
+#   `yes'.
+
+
+# AC_DISABLE_STATIC - set the default static flag to --disable-static
+
+
+
+# AC_ENABLE_FAST_INSTALL - implement the --enable-fast-install flag
+# Usage: AC_ENABLE_FAST_INSTALL[(DEFAULT)]
+#   Where DEFAULT is either `yes' or `no'.  If omitted, it defaults to
+#   `yes'.
+
+
+# AC_ENABLE_FAST_INSTALL - set the default to --disable-fast-install
+
+
+# AC_PROG_LD - find the path to the GNU or non-GNU linker
+
+
+
+
+# AC_PROG_NM - find the path to a BSD-compatible name lister
+
+
+# AC_CHECK_LIBM - check for math library
+
+
+# AC_LIBLTDL_CONVENIENCE[(dir)] - sets LIBLTDL to the link flags for
+# the libltdl convenience library, adds --enable-ltdl-convenience to
+# the configure arguments.  Note that LIBLTDL is not AC_SUBSTed, nor
+# is AC_CONFIG_SUBDIRS called.  If DIR is not provided, it is assumed
+# to be `${top_builddir}/libltdl'.  Make sure you start DIR with
+# '${top_builddir}/' (note the single quotes!) if your package is not
+# flat, and, if you're not using automake, define top_builddir as
+# appropriate in the Makefiles.
+
+
+# AC_LIBLTDL_INSTALLABLE[(dir)] - sets LIBLTDL to the link flags for
+# the libltdl installable library, and adds --enable-ltdl-install to
+# the configure arguments.  Note that LIBLTDL is not AC_SUBSTed, nor
+# is AC_CONFIG_SUBDIRS called.  If DIR is not provided, it is assumed
+# to be `${top_builddir}/libltdl'.  Make sure you start DIR with
+# '${top_builddir}/' (note the single quotes!) if your package is not
+# flat, and, if you're not using automake, define top_builddir as
+# appropriate in the Makefiles.
+# In the future, this macro may have to be called after AC_PROG_LIBTOOL.
+
+
+
+
+# Guess values for system-dependent variables and create Makefiles.
+# Generated automatically using autoconf version 2.13 
+# Copyright (C) 1992, 93, 94, 95, 96 Free Software Foundation, Inc.
+#
+# This configure script is free software; the Free Software Foundation
+# gives unlimited permission to copy, distribute and modify it.
+
+# Defaults:
+ac_help=
+ac_default_prefix=/usr/local
+# Any additions from configure.in:
+ac_help="$ac_help
+  --with-php-config=[PATH]"
+ac_default_prefix=
+ac_help="$ac_help
+  --with-rrdtool[=DIR]      Include RRDTool support.  DIR is the rrdtool
+                          install directory."
+ac_help="$ac_help
+  --enable-shared[=PKGS]  build shared libraries [default=yes]"
+ac_help="$ac_help
+  --enable-static[=PKGS]  build static libraries [default=yes]"
+ac_help="$ac_help
+  --enable-fast-install[=PKGS]  optimize for fast installation [default=yes]"
+ac_help="$ac_help
+  --with-gnu-ld           assume the C compiler uses GNU ld [default=no]"
+ac_help="$ac_help
+  --disable-libtool-lock  avoid locking (might break parallel builds)"
+
+# Initialize some variables set by options.
+# The variables have the same names as the options, with
+# dashes changed to underlines.
+build=NONE
+cache_file=./config.cache
+exec_prefix=NONE
+host=NONE
+no_create=
+nonopt=NONE
+no_recursion=
+prefix=NONE
+program_prefix=NONE
+program_suffix=NONE
+program_transform_name=s,x,x,
+silent=
+site=
+srcdir=
+target=NONE
+verbose=
+x_includes=NONE
+x_libraries=NONE
+bindir='${exec_prefix}/bin'
+sbindir='${exec_prefix}/sbin'
+libexecdir='${exec_prefix}/libexec'
+datadir='${prefix}/share'
+sysconfdir='${prefix}/etc'
+sharedstatedir='${prefix}/com'
+localstatedir='${prefix}/var'
+libdir='${exec_prefix}/lib'
+includedir='${prefix}/include'
+oldincludedir='/usr/include'
+infodir='${prefix}/info'
+mandir='${prefix}/man'
+
+# Initialize some other variables.
+subdirs=
+MFLAGS= MAKEFLAGS=
+SHELL=${CONFIG_SHELL-/bin/sh}
+# Maximum number of lines to put in a shell here document.
+ac_max_here_lines=12
+
+ac_prev=
+for ac_option
+do
+
+  # If the previous option needs an argument, assign it.
+  if test -n "$ac_prev"; then
+    eval "$ac_prev=\$ac_option"
+    ac_prev=
+    continue
+  fi
+
+  case "$ac_option" in
+  -*=*) ac_optarg=`echo "$ac_option" | sed 's/[-_a-zA-Z0-9]*=//'` ;;
+  *) ac_optarg= ;;
+  esac
+
+  # Accept the important Cygnus configure options, so we can diagnose typos.
+
+  case "$ac_option" in
+
+  -bindir | --bindir | --bindi | --bind | --bin | --bi)
+    ac_prev=bindir ;;
+  -bindir=* | --bindir=* | --bindi=* | --bind=* | --bin=* | --bi=*)
+    bindir="$ac_optarg" ;;
+
+  -build | --build | --buil | --bui | --bu)
+    ac_prev=build ;;
+  -build=* | --build=* | --buil=* | --bui=* | --bu=*)
+    build="$ac_optarg" ;;
+
+  -cache-file | --cache-file | --cache-fil | --cache-fi \
+  | --cache-f | --cache- | --cache | --cach | --cac | --ca | --c)
+    ac_prev=cache_file ;;
+  -cache-file=* | --cache-file=* | --cache-fil=* | --cache-fi=* \
+  | --cache-f=* | --cache-=* | --cache=* | --cach=* | --cac=* | --ca=* | --c=*)
+    cache_file="$ac_optarg" ;;
+
+  -datadir | --datadir | --datadi | --datad | --data | --dat | --da)
+    ac_prev=datadir ;;
+  -datadir=* | --datadir=* | --datadi=* | --datad=* | --data=* | --dat=* \
+  | --da=*)
+    datadir="$ac_optarg" ;;
+
+  -disable-* | --disable-*)
+    ac_feature=`echo $ac_option|sed -e 's/-*disable-//'`
+    # Reject names that are not valid shell variable names.
+    if test -n "`echo $ac_feature| sed 's/[-a-zA-Z0-9_]//g'`"; then
+      { echo "configure: error: $ac_feature: invalid feature name" 1>&2; exit 1; }
+    fi
+    ac_feature=`echo $ac_feature| sed 's/-/_/g'`
+    eval "enable_${ac_feature}=no" ;;
+
+  -enable-* | --enable-*)
+    ac_feature=`echo $ac_option|sed -e 's/-*enable-//' -e 's/=.*//'`
+    # Reject names that are not valid shell variable names.
+    if test -n "`echo $ac_feature| sed 's/[-_a-zA-Z0-9]//g'`"; then
+      { echo "configure: error: $ac_feature: invalid feature name" 1>&2; exit 1; }
+    fi
+    ac_feature=`echo $ac_feature| sed 's/-/_/g'`
+    case "$ac_option" in
+      *=*) ;;
+      *) ac_optarg=yes ;;
+    esac
+    eval "enable_${ac_feature}='$ac_optarg'" ;;
+
+  -exec-prefix | --exec_prefix | --exec-prefix | --exec-prefi \
+  | --exec-pref | --exec-pre | --exec-pr | --exec-p | --exec- \
+  | --exec | --exe | --ex)
+    ac_prev=exec_prefix ;;
+  -exec-prefix=* | --exec_prefix=* | --exec-prefix=* | --exec-prefi=* \
+  | --exec-pref=* | --exec-pre=* | --exec-pr=* | --exec-p=* | --exec-=* \
+  | --exec=* | --exe=* | --ex=*)
+    exec_prefix="$ac_optarg" ;;
+
+  -gas | --gas | --ga | --g)
+    # Obsolete; use --with-gas.
+    with_gas=yes ;;
+
+  -help | --help | --hel | --he)
+    # Omit some internal or obsolete options to make the list less imposing.
+    # This message is too long to be a string in the A/UX 3.1 sh.
+    cat << EOF
+Usage: configure [options] [host]
+Options: [defaults in brackets after descriptions]
+Configuration:
+  --cache-file=FILE       cache test results in FILE
+  --help                  print this message
+  --no-create             do not create output files
+  --quiet, --silent       do not print \`checking...' messages
+  --version               print the version of autoconf that created configure
+Directory and file names:
+  --prefix=PREFIX         install architecture-independent files in PREFIX
+                          [$ac_default_prefix]
+  --exec-prefix=EPREFIX   install architecture-dependent files in EPREFIX
+                          [same as prefix]
+  --bindir=DIR            user executables in DIR [EPREFIX/bin]
+  --sbindir=DIR           system admin executables in DIR [EPREFIX/sbin]
+  --libexecdir=DIR        program executables in DIR [EPREFIX/libexec]
+  --datadir=DIR           read-only architecture-independent data in DIR
+                          [PREFIX/share]
+  --sysconfdir=DIR        read-only single-machine data in DIR [PREFIX/etc]
+  --sharedstatedir=DIR    modifiable architecture-independent data in DIR
+                          [PREFIX/com]
+  --localstatedir=DIR     modifiable single-machine data in DIR [PREFIX/var]
+  --libdir=DIR            object code libraries in DIR [EPREFIX/lib]
+  --includedir=DIR        C header files in DIR [PREFIX/include]
+  --oldincludedir=DIR     C header files for non-gcc in DIR [/usr/include]
+  --infodir=DIR           info documentation in DIR [PREFIX/info]
+  --mandir=DIR            man documentation in DIR [PREFIX/man]
+  --srcdir=DIR            find the sources in DIR [configure dir or ..]
+  --program-prefix=PREFIX prepend PREFIX to installed program names
+  --program-suffix=SUFFIX append SUFFIX to installed program names
+  --program-transform-name=PROGRAM
+                          run sed PROGRAM on installed program names
+EOF
+    cat << EOF
+Host type:
+  --build=BUILD           configure for building on BUILD [BUILD=HOST]
+  --host=HOST             configure for HOST [guessed]
+  --target=TARGET         configure for TARGET [TARGET=HOST]
+Features and packages:
+  --disable-FEATURE       do not include FEATURE (same as --enable-FEATURE=no)
+  --enable-FEATURE[=ARG]  include FEATURE [ARG=yes]
+  --with-PACKAGE[=ARG]    use PACKAGE [ARG=yes]
+  --without-PACKAGE       do not use PACKAGE (same as --with-PACKAGE=no)
+  --x-includes=DIR        X include files are in DIR
+  --x-libraries=DIR       X library files are in DIR
+EOF
+    if test -n "$ac_help"; then
+      echo "--enable and --with options recognized:$ac_help"
+    fi
+    exit 0 ;;
+
+  -host | --host | --hos | --ho)
+    ac_prev=host ;;
+  -host=* | --host=* | --hos=* | --ho=*)
+    host="$ac_optarg" ;;
+
+  -includedir | --includedir | --includedi | --included | --include \
+  | --includ | --inclu | --incl | --inc)
+    ac_prev=includedir ;;
+  -includedir=* | --includedir=* | --includedi=* | --included=* | --include=* \
+  | --includ=* | --inclu=* | --incl=* | --inc=*)
+    includedir="$ac_optarg" ;;
+
+  -infodir | --infodir | --infodi | --infod | --info | --inf)
+    ac_prev=infodir ;;
+  -infodir=* | --infodir=* | --infodi=* | --infod=* | --info=* | --inf=*)
+    infodir="$ac_optarg" ;;
+
+  -libdir | --libdir | --libdi | --libd)
+    ac_prev=libdir ;;
+  -libdir=* | --libdir=* | --libdi=* | --libd=*)
+    libdir="$ac_optarg" ;;
+
+  -libexecdir | --libexecdir | --libexecdi | --libexecd | --libexec \
+  | --libexe | --libex | --libe)
+    ac_prev=libexecdir ;;
+  -libexecdir=* | --libexecdir=* | --libexecdi=* | --libexecd=* | --libexec=* \
+  | --libexe=* | --libex=* | --libe=*)
+    libexecdir="$ac_optarg" ;;
+
+  -localstatedir | --localstatedir | --localstatedi | --localstated \
+  | --localstate | --localstat | --localsta | --localst \
+  | --locals | --local | --loca | --loc | --lo)
+    ac_prev=localstatedir ;;
+  -localstatedir=* | --localstatedir=* | --localstatedi=* | --localstated=* \
+  | --localstate=* | --localstat=* | --localsta=* | --localst=* \
+  | --locals=* | --local=* | --loca=* | --loc=* | --lo=*)
+    localstatedir="$ac_optarg" ;;
+
+  -mandir | --mandir | --mandi | --mand | --man | --ma | --m)
+    ac_prev=mandir ;;
+  -mandir=* | --mandir=* | --mandi=* | --mand=* | --man=* | --ma=* | --m=*)
+    mandir="$ac_optarg" ;;
+
+  -nfp | --nfp | --nf)
+    # Obsolete; use --without-fp.
+    with_fp=no ;;
+
+  -no-create | --no-create | --no-creat | --no-crea | --no-cre \
+  | --no-cr | --no-c)
+    no_create=yes ;;
+
+  -no-recursion | --no-recursion | --no-recursio | --no-recursi \
+  | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r)
+    no_recursion=yes ;;
+
+  -oldincludedir | --oldincludedir | --oldincludedi | --oldincluded \
+  | --oldinclude | --oldinclud | --oldinclu | --oldincl | --oldinc \
+  | --oldin | --oldi | --old | --ol | --o)
+    ac_prev=oldincludedir ;;
+  -oldincludedir=* | --oldincludedir=* | --oldincludedi=* | --oldincluded=* \
+  | --oldinclude=* | --oldinclud=* | --oldinclu=* | --oldincl=* | --oldinc=* \
+  | --oldin=* | --oldi=* | --old=* | --ol=* | --o=*)
+    oldincludedir="$ac_optarg" ;;
+
+  -prefix | --prefix | --prefi | --pref | --pre | --pr | --p)
+    ac_prev=prefix ;;
+  -prefix=* | --prefix=* | --prefi=* | --pref=* | --pre=* | --pr=* | --p=*)
+    prefix="$ac_optarg" ;;
+
+  -program-prefix | --program-prefix | --program-prefi | --program-pref \
+  | --program-pre | --program-pr | --program-p)
+    ac_prev=program_prefix ;;
+  -program-prefix=* | --program-prefix=* | --program-prefi=* \
+  | --program-pref=* | --program-pre=* | --program-pr=* | --program-p=*)
+    program_prefix="$ac_optarg" ;;
+
+  -program-suffix | --program-suffix | --program-suffi | --program-suff \
+  | --program-suf | --program-su | --program-s)
+    ac_prev=program_suffix ;;
+  -program-suffix=* | --program-suffix=* | --program-suffi=* \
+  | --program-suff=* | --program-suf=* | --program-su=* | --program-s=*)
+    program_suffix="$ac_optarg" ;;
+
+  -program-transform-name | --program-transform-name \
+  | --program-transform-nam | --program-transform-na \
+  | --program-transform-n | --program-transform- \
+  | --program-transform | --program-transfor \
+  | --program-transfo | --program-transf \
+  | --program-trans | --program-tran \
+  | --progr-tra | --program-tr | --program-t)
+    ac_prev=program_transform_name ;;
+  -program-transform-name=* | --program-transform-name=* \
+  | --program-transform-nam=* | --program-transform-na=* \
+  | --program-transform-n=* | --program-transform-=* \
+  | --program-transform=* | --program-transfor=* \
+  | --program-transfo=* | --program-transf=* \
+  | --program-trans=* | --program-tran=* \
+  | --progr-tra=* | --program-tr=* | --program-t=*)
+    program_transform_name="$ac_optarg" ;;
+
+  -q | -quiet | --quiet | --quie | --qui | --qu | --q \
+  | -silent | --silent | --silen | --sile | --sil)
+    silent=yes ;;
+
+  -sbindir | --sbindir | --sbindi | --sbind | --sbin | --sbi | --sb)
+    ac_prev=sbindir ;;
+  -sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \
+  | --sbi=* | --sb=*)
+    sbindir="$ac_optarg" ;;
+
+  -sharedstatedir | --sharedstatedir | --sharedstatedi \
+  | --sharedstated | --sharedstate | --sharedstat | --sharedsta \
+  | --sharedst | --shareds | --shared | --share | --shar \
+  | --sha | --sh)
+    ac_prev=sharedstatedir ;;
+  -sharedstatedir=* | --sharedstatedir=* | --sharedstatedi=* \
+  | --sharedstated=* | --sharedstate=* | --sharedstat=* | --sharedsta=* \
+  | --sharedst=* | --shareds=* | --shared=* | --share=* | --shar=* \
+  | --sha=* | --sh=*)
+    sharedstatedir="$ac_optarg" ;;
+
+  -site | --site | --sit)
+    ac_prev=site ;;
+  -site=* | --site=* | --sit=*)
+    site="$ac_optarg" ;;
+
+  -srcdir | --srcdir | --srcdi | --srcd | --src | --sr)
+    ac_prev=srcdir ;;
+  -srcdir=* | --srcdir=* | --srcdi=* | --srcd=* | --src=* | --sr=*)
+    srcdir="$ac_optarg" ;;
+
+  -sysconfdir | --sysconfdir | --sysconfdi | --sysconfd | --sysconf \
+  | --syscon | --sysco | --sysc | --sys | --sy)
+    ac_prev=sysconfdir ;;
+  -sysconfdir=* | --sysconfdir=* | --sysconfdi=* | --sysconfd=* | --sysconf=* \
+  | --syscon=* | --sysco=* | --sysc=* | --sys=* | --sy=*)
+    sysconfdir="$ac_optarg" ;;
+
+  -target | --target | --targe | --targ | --tar | --ta | --t)
+    ac_prev=target ;;
+  -target=* | --target=* | --targe=* | --targ=* | --tar=* | --ta=* | --t=*)
+    target="$ac_optarg" ;;
+
+  -v | -verbose | --verbose | --verbos | --verbo | --verb)
+    verbose=yes ;;
+
+  -version | --version | --versio | --versi | --vers)
+    echo "configure generated by autoconf version 2.13"
+    exit 0 ;;
+
+  -with-* | --with-*)
+    ac_package=`echo $ac_option|sed -e 's/-*with-//' -e 's/=.*//'`
+    # Reject names that are not valid shell variable names.
+    if test -n "`echo $ac_package| sed 's/[-_a-zA-Z0-9]//g'`"; then
+      { echo "configure: error: $ac_package: invalid package name" 1>&2; exit 1; }
+    fi
+    ac_package=`echo $ac_package| sed 's/-/_/g'`
+    case "$ac_option" in
+      *=*) ;;
+      *) ac_optarg=yes ;;
+    esac
+    eval "with_${ac_package}='$ac_optarg'" ;;
+
+  -without-* | --without-*)
+    ac_package=`echo $ac_option|sed -e 's/-*without-//'`
+    # Reject names that are not valid shell variable names.
+    if test -n "`echo $ac_package| sed 's/[-a-zA-Z0-9_]//g'`"; then
+      { echo "configure: error: $ac_package: invalid package name" 1>&2; exit 1; }
+    fi
+    ac_package=`echo $ac_package| sed 's/-/_/g'`
+    eval "with_${ac_package}=no" ;;
+
+  --x)
+    # Obsolete; use --with-x.
+    with_x=yes ;;
+
+  -x-includes | --x-includes | --x-include | --x-includ | --x-inclu \
+  | --x-incl | --x-inc | --x-in | --x-i)
+    ac_prev=x_includes ;;
+  -x-includes=* | --x-includes=* | --x-include=* | --x-includ=* | --x-inclu=* \
+  | --x-incl=* | --x-inc=* | --x-in=* | --x-i=*)
+    x_includes="$ac_optarg" ;;
+
+  -x-libraries | --x-libraries | --x-librarie | --x-librari \
+  | --x-librar | --x-libra | --x-libr | --x-lib | --x-li | --x-l)
+    ac_prev=x_libraries ;;
+  -x-libraries=* | --x-libraries=* | --x-librarie=* | --x-librari=* \
+  | --x-librar=* | --x-libra=* | --x-libr=* | --x-lib=* | --x-li=* | --x-l=*)
+    x_libraries="$ac_optarg" ;;
+
+  -*) { echo "configure: error: $ac_option: invalid option; use --help to show usage" 1>&2; exit 1; }
+    ;;
+
+  *)
+    if test -n "`echo $ac_option| sed 's/[-a-z0-9.]//g'`"; then
+      echo "configure: warning: $ac_option: invalid host type" 1>&2
+    fi
+    if test "x$nonopt" != xNONE; then
+      { echo "configure: error: can only configure for one host and one target at a time" 1>&2; exit 1; }
+    fi
+    nonopt="$ac_option"
+    ;;
+
+  esac
+done
+
+if test -n "$ac_prev"; then
+  { echo "configure: error: missing argument to --`echo $ac_prev | sed 's/_/-/g'`" 1>&2; exit 1; }
+fi
+
+trap 'rm -fr conftest* confdefs* core core.* *.core $ac_clean_files; exit 1' 1 2 15
+
+# File descriptor usage:
+# 0 standard input
+# 1 file creation
+# 2 errors and warnings
+# 3 some systems may open it to /dev/tty
+# 4 used on the Kubota Titan
+# 6 checking for... messages and results
+# 5 compiler messages saved in config.log
+if test "$silent" = yes; then
+  exec 6>/dev/null
+else
+  exec 6>&1
+fi
+exec 5>./config.log
+
+echo "\
+This file contains any messages produced by compilers while
+running configure, to aid debugging if configure makes a mistake.
+" 1>&5
+
+# Strip out --no-create and --no-recursion so they do not pile up.
+# Also quote any args containing shell metacharacters.
+ac_configure_args=
+for ac_arg
+do
+  case "$ac_arg" in
+  -no-create | --no-create | --no-creat | --no-crea | --no-cre \
+  | --no-cr | --no-c) ;;
+  -no-recursion | --no-recursion | --no-recursio | --no-recursi \
+  | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r) ;;
+  *" "*|*"     "*|*[\[\]\~\#\$\^\&\*\(\)\{\}\\\|\;\<\>\?]*)
+  ac_configure_args="$ac_configure_args '$ac_arg'" ;;
+  *) ac_configure_args="$ac_configure_args $ac_arg" ;;
+  esac
+done
+
+# NLS nuisances.
+# Only set these to C if already set.  These must not be set unconditionally
+# because not all systems understand e.g. LANG=C (notably SCO).
+# Fixing LC_MESSAGES prevents Solaris sh from translating var values in `set'!
+# Non-C LC_CTYPE values break the ctype check.
+if test "${LANG+set}"   = set; then LANG=C;   export LANG;   fi
+if test "${LC_ALL+set}" = set; then LC_ALL=C; export LC_ALL; fi
+if test "${LC_MESSAGES+set}" = set; then LC_MESSAGES=C; export LC_MESSAGES; fi
+if test "${LC_CTYPE+set}"    = set; then LC_CTYPE=C;    export LC_CTYPE;    fi
+
+# confdefs.h avoids OS command line length limits that DEFS can exceed.
+rm -rf conftest* confdefs.h
+# AIX cpp loses on an empty file, so make sure it contains at least a newline.
+echo > confdefs.h
+
+# A filename unique to this package, relative to the directory that
+# configure is in, which we can look for to find out if srcdir is correct.
+ac_unique_file=Makefile.in
+
+# Find the source files, if location was not specified.
+if test -z "$srcdir"; then
+  ac_srcdir_defaulted=yes
+  # Try the directory containing this script, then its parent.
+  ac_prog=$0
+  ac_confdir=`echo $ac_prog|sed 's%/[^/][^/]*$%%'`
+  test "x$ac_confdir" = "x$ac_prog" && ac_confdir=.
+  srcdir=$ac_confdir
+  if test ! -r $srcdir/$ac_unique_file; then
+    srcdir=..
+  fi
+else
+  ac_srcdir_defaulted=no
+fi
+if test ! -r $srcdir/$ac_unique_file; then
+  if test "$ac_srcdir_defaulted" = yes; then
+    { echo "configure: error: can not find sources in $ac_confdir or .." 1>&2; exit 1; }
+  else
+    { echo "configure: error: can not find sources in $srcdir" 1>&2; exit 1; }
+  fi
+fi
+srcdir=`echo "${srcdir}" | sed 's%\([^/]\)/*$%\1%'`
+
+# Prefer explicitly selected file to automatically selected ones.
+if test -z "$CONFIG_SITE"; then
+  if test "x$prefix" != xNONE; then
+    CONFIG_SITE="$prefix/share/config.site $prefix/etc/config.site"
+  else
+    CONFIG_SITE="$ac_default_prefix/share/config.site $ac_default_prefix/etc/config.site"
+  fi
+fi
+for ac_site_file in $CONFIG_SITE; do
+  if test -r "$ac_site_file"; then
+    echo "loading site script $ac_site_file"
+    . "$ac_site_file"
+  fi
+done
+
+if test -r "$cache_file"; then
+  echo "loading cache $cache_file"
+  . $cache_file
+else
+  echo "creating cache $cache_file"
+  > $cache_file
+fi
+
+ac_ext=c
+# CFLAGS is not in ac_cpp because -g, -O, etc. are not valid cpp options.
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='${CC-cc} -c $CFLAGS $CPPFLAGS conftest.$ac_ext 1>&5'
+ac_link='${CC-cc} -o conftest${ac_exeext} $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS 1>&5'
+cross_compiling=$ac_cv_prog_cc_cross
+
+ac_exeext=
+ac_objext=o
+if (echo "testing\c"; echo 1,2,3) | grep c >/dev/null; then
+  # Stardent Vistra SVR4 grep lacks -e, says ghazi@caip.rutgers.edu.
+  if (echo -n testing; echo 1,2,3) | sed s/-n/xn/ | grep xn >/dev/null; then
+    ac_n= ac_c='
+' ac_t='       '
+  else
+    ac_n=-n ac_c= ac_t=
+  fi
+else
+  ac_n= ac_c='\c' ac_t=
+fi
+
+
+
+
+
+abs_srcdir=`(cd $srcdir && pwd)`
+
+php_always_shared=yes
+
+# Extract the first word of "gcc", so it can be a program name with args.
+set dummy gcc; ac_word=$2
+echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
+echo "configure:662: checking for $ac_word" >&5
+if eval "test \"`echo '$''{'ac_cv_prog_CC'+set}'`\" = set"; then
+  echo $ac_n "(cached) $ac_c" 1>&6
+else
+  if test -n "$CC"; then
+  ac_cv_prog_CC="$CC" # Let the user override the test.
+else
+  IFS="${IFS=  }"; ac_save_ifs="$IFS"; IFS=":"
+  ac_dummy="$PATH"
+  for ac_dir in $ac_dummy; do
+    test -z "$ac_dir" && ac_dir=.
+    if test -f $ac_dir/$ac_word; then
+      ac_cv_prog_CC="gcc"
+      break
+    fi
+  done
+  IFS="$ac_save_ifs"
+fi
+fi
+CC="$ac_cv_prog_CC"
+if test -n "$CC"; then
+  echo "$ac_t""$CC" 1>&6
+else
+  echo "$ac_t""no" 1>&6
+fi
+
+if test -z "$CC"; then
+  # Extract the first word of "cc", so it can be a program name with args.
+set dummy cc; ac_word=$2
+echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
+echo "configure:692: checking for $ac_word" >&5
+if eval "test \"`echo '$''{'ac_cv_prog_CC'+set}'`\" = set"; then
+  echo $ac_n "(cached) $ac_c" 1>&6
+else
+  if test -n "$CC"; then
+  ac_cv_prog_CC="$CC" # Let the user override the test.
+else
+  IFS="${IFS=  }"; ac_save_ifs="$IFS"; IFS=":"
+  ac_prog_rejected=no
+  ac_dummy="$PATH"
+  for ac_dir in $ac_dummy; do
+    test -z "$ac_dir" && ac_dir=.
+    if test -f $ac_dir/$ac_word; then
+      if test "$ac_dir/$ac_word" = "/usr/ucb/cc"; then
+        ac_prog_rejected=yes
+       continue
+      fi
+      ac_cv_prog_CC="cc"
+      break
+    fi
+  done
+  IFS="$ac_save_ifs"
+if test $ac_prog_rejected = yes; then
+  # We found a bogon in the path, so make sure we never use it.
+  set dummy $ac_cv_prog_CC
+  shift
+  if test $# -gt 0; then
+    # We chose a different compiler from the bogus one.
+    # However, it has the same basename, so the bogon will be chosen
+    # first if we set CC to just the basename; use the full file name.
+    shift
+    set dummy "$ac_dir/$ac_word" "$@"
+    shift
+    ac_cv_prog_CC="$@"
+  fi
+fi
+fi
+fi
+CC="$ac_cv_prog_CC"
+if test -n "$CC"; then
+  echo "$ac_t""$CC" 1>&6
+else
+  echo "$ac_t""no" 1>&6
+fi
+
+  if test -z "$CC"; then
+    case "`uname -s`" in
+    *win32* | *WIN32*)
+      # Extract the first word of "cl", so it can be a program name with args.
+set dummy cl; ac_word=$2
+echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
+echo "configure:743: checking for $ac_word" >&5
+if eval "test \"`echo '$''{'ac_cv_prog_CC'+set}'`\" = set"; then
+  echo $ac_n "(cached) $ac_c" 1>&6
+else
+  if test -n "$CC"; then
+  ac_cv_prog_CC="$CC" # Let the user override the test.
+else
+  IFS="${IFS=  }"; ac_save_ifs="$IFS"; IFS=":"
+  ac_dummy="$PATH"
+  for ac_dir in $ac_dummy; do
+    test -z "$ac_dir" && ac_dir=.
+    if test -f $ac_dir/$ac_word; then
+      ac_cv_prog_CC="cl"
+      break
+    fi
+  done
+  IFS="$ac_save_ifs"
+fi
+fi
+CC="$ac_cv_prog_CC"
+if test -n "$CC"; then
+  echo "$ac_t""$CC" 1>&6
+else
+  echo "$ac_t""no" 1>&6
+fi
+ ;;
+    esac
+  fi
+  test -z "$CC" && { echo "configure: error: no acceptable cc found in \$PATH" 1>&2; exit 1; }
+fi
+
+echo $ac_n "checking whether the C compiler ($CC $CFLAGS $LDFLAGS) works""... $ac_c" 1>&6
+echo "configure:775: checking whether the C compiler ($CC $CFLAGS $LDFLAGS) works" >&5
+
+ac_ext=c
+# CFLAGS is not in ac_cpp because -g, -O, etc. are not valid cpp options.
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='${CC-cc} -c $CFLAGS $CPPFLAGS conftest.$ac_ext 1>&5'
+ac_link='${CC-cc} -o conftest${ac_exeext} $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS 1>&5'
+cross_compiling=$ac_cv_prog_cc_cross
+
+cat > conftest.$ac_ext << EOF
+
+#line 786 "configure"
+#include "confdefs.h"
+
+main(){return(0);}
+EOF
+if { (eval echo configure:791: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+  ac_cv_prog_cc_works=yes
+  # If we can't run a trivial program, we are probably using a cross compiler.
+  if (./conftest; exit) 2>/dev/null; then
+    ac_cv_prog_cc_cross=no
+  else
+    ac_cv_prog_cc_cross=yes
+  fi
+else
+  echo "configure: failed program was:" >&5
+  cat conftest.$ac_ext >&5
+  ac_cv_prog_cc_works=no
+fi
+rm -fr conftest*
+ac_ext=c
+# CFLAGS is not in ac_cpp because -g, -O, etc. are not valid cpp options.
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='${CC-cc} -c $CFLAGS $CPPFLAGS conftest.$ac_ext 1>&5'
+ac_link='${CC-cc} -o conftest${ac_exeext} $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS 1>&5'
+cross_compiling=$ac_cv_prog_cc_cross
+
+echo "$ac_t""$ac_cv_prog_cc_works" 1>&6
+if test $ac_cv_prog_cc_works = no; then
+  { echo "configure: error: installation or configuration problem: C compiler cannot create executables." 1>&2; exit 1; }
+fi
+echo $ac_n "checking whether the C compiler ($CC $CFLAGS $LDFLAGS) is a cross-compiler""... $ac_c" 1>&6
+echo "configure:817: checking whether the C compiler ($CC $CFLAGS $LDFLAGS) is a cross-compiler" >&5
+echo "$ac_t""$ac_cv_prog_cc_cross" 1>&6
+cross_compiling=$ac_cv_prog_cc_cross
+
+echo $ac_n "checking whether we are using GNU C""... $ac_c" 1>&6
+echo "configure:822: checking whether we are using GNU C" >&5
+if eval "test \"`echo '$''{'ac_cv_prog_gcc'+set}'`\" = set"; then
+  echo $ac_n "(cached) $ac_c" 1>&6
+else
+  cat > conftest.c <<EOF
+#ifdef __GNUC__
+  yes;
+#endif
+EOF
+if { ac_try='${CC-cc} -E conftest.c'; { (eval echo configure:831: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; } | egrep yes >/dev/null 2>&1; then
+  ac_cv_prog_gcc=yes
+else
+  ac_cv_prog_gcc=no
+fi
+fi
+
+echo "$ac_t""$ac_cv_prog_gcc" 1>&6
+
+if test $ac_cv_prog_gcc = yes; then
+  GCC=yes
+else
+  GCC=
+fi
+
+ac_test_CFLAGS="${CFLAGS+set}"
+ac_save_CFLAGS="$CFLAGS"
+CFLAGS=
+echo $ac_n "checking whether ${CC-cc} accepts -g""... $ac_c" 1>&6
+echo "configure:850: checking whether ${CC-cc} accepts -g" >&5
+if eval "test \"`echo '$''{'ac_cv_prog_cc_g'+set}'`\" = set"; then
+  echo $ac_n "(cached) $ac_c" 1>&6
+else
+  echo 'void f(){}' > conftest.c
+if test -z "`${CC-cc} -g -c conftest.c 2>&1`"; then
+  ac_cv_prog_cc_g=yes
+else
+  ac_cv_prog_cc_g=no
+fi
+rm -f conftest*
+
+fi
+
+echo "$ac_t""$ac_cv_prog_cc_g" 1>&6
+if test "$ac_test_CFLAGS" = set; then
+  CFLAGS="$ac_save_CFLAGS"
+elif test $ac_cv_prog_cc_g = yes; then
+  if test "$GCC" = yes; then
+    CFLAGS="-g -O2"
+  else
+    CFLAGS="-g"
+  fi
+else
+  if test "$GCC" = yes; then
+    CFLAGS="-O2"
+  else
+    CFLAGS=
+  fi
+fi
+
+if test "x$CC" != xcc; then
+  echo $ac_n "checking whether $CC and cc understand -c and -o together""... $ac_c" 1>&6
+echo "configure:883: checking whether $CC and cc understand -c and -o together" >&5
+else
+  echo $ac_n "checking whether cc understands -c and -o together""... $ac_c" 1>&6
+echo "configure:886: checking whether cc understands -c and -o together" >&5
+fi
+set dummy $CC; ac_cc="`echo $2 |
+                      sed -e 's/[^a-zA-Z0-9_]/_/g' -e 's/^[0-9]/_/'`"
+if eval "test \"`echo '$''{'ac_cv_prog_cc_${ac_cc}_c_o'+set}'`\" = set"; then
+  echo $ac_n "(cached) $ac_c" 1>&6
+else
+  echo 'foo(){}' > conftest.c
+# Make sure it works both with $CC and with simple cc.
+# We do the test twice because some compilers refuse to overwrite an
+# existing .o file with -o, though they will create one.
+ac_try='${CC-cc} -c conftest.c -o conftest.o 1>&5'
+if { (eval echo configure:898: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } &&
+   test -f conftest.o && { (eval echo configure:899: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; };
+then
+  eval ac_cv_prog_cc_${ac_cc}_c_o=yes
+  if test "x$CC" != xcc; then
+    # Test first that cc exists at all.
+    if { ac_try='cc -c conftest.c 1>&5'; { (eval echo configure:904: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; }; then
+      ac_try='cc -c conftest.c -o conftest.o 1>&5'
+      if { (eval echo configure:906: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } &&
+        test -f conftest.o && { (eval echo configure:907: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; };
+      then
+        # cc works too.
+        :
+      else
+        # cc exists but doesn't like -o.
+        eval ac_cv_prog_cc_${ac_cc}_c_o=no
+      fi
+    fi
+  fi
+else
+  eval ac_cv_prog_cc_${ac_cc}_c_o=no
+fi
+rm -f conftest*
+
+fi
+if eval "test \"`echo '$ac_cv_prog_cc_'${ac_cc}_c_o`\" = yes"; then
+  echo "$ac_t""yes" 1>&6
+else
+  echo "$ac_t""no" 1>&6
+  cat >> confdefs.h <<\EOF
+#define NO_MINUS_C_MINUS_O 1
+EOF
+
+fi
+
+
+
+  # Check whether --with-php-config or --without-php-config was given.
+if test "${with_php_config+set}" = set; then
+  withval="$with_php_config"
+  
+  PHP_CONFIG=$withval
+
+else
+  
+  PHP_CONFIG=php-config
+
+fi
+
+
+  prefix=`$PHP_CONFIG --prefix 2>/dev/null`
+  INCLUDES=`$PHP_CONFIG --includes 2>/dev/null`
+  EXTENSION_DIR=`$PHP_CONFIG --extension-dir`
+  if test -z "$prefix"; then
+    { echo "configure: error: Cannot find php-config. Please use --with-php-config=PATH" 1>&2; exit 1; }
+  fi
+  echo $ac_n "checking for PHP prefix""... $ac_c" 1>&6
+echo "configure:956: checking for PHP prefix" >&5
+  echo "$ac_t""$prefix" 1>&6
+  echo $ac_n "checking for PHP includes""... $ac_c" 1>&6
+echo "configure:959: checking for PHP includes" >&5
+  echo "$ac_t""$INCLUDES" 1>&6
+  echo $ac_n "checking for PHP extension directory""... $ac_c" 1>&6
+echo "configure:962: checking for PHP extension directory" >&5
+  echo "$ac_t""$EXTENSION_DIR" 1>&6
+
+
+
+
+
+
+
+echo $ac_n "checking for RRDTool support""... $ac_c" 1>&6
+echo "configure:972: checking for RRDTool support" >&5
+# Check whether --with-rrdtool or --without-rrdtool was given.
+if test "${with_rrdtool+set}" = set; then
+  withval="$with_rrdtool"
+  PHP_RRDTOOL=$withval
+else
+  PHP_RRDTOOL=no
+fi
+
+
+case "$PHP_RRDTOOL" in
+shared,*)
+  ext_output="yes, shared"
+  ext_shared=yes
+  PHP_RRDTOOL=`echo $ac_n "$PHP_RRDTOOL$ac_c"|sed s/^shared,//`
+  ;;
+shared)
+  ext_output="yes, shared"
+  ext_shared=yes
+  PHP_RRDTOOL=yes
+  ;;
+no)
+  ext_output="no"
+  ext_shared=no
+  ;;
+*)
+  ext_output="yes"
+  ext_shared=no
+  ;;
+esac
+
+if test "$php_always_shared" = "yes"; then
+  ext_output="yes, shared"
+  ext_shared=yes
+  test "$PHP_RRDTOOL" = "no" && PHP_RRDTOOL=yes
+fi
+
+echo "$ac_t""$ext_output" 1>&6
+
+
+
+
+if test "$PHP_RRDTOOL" != "no"; then
+  for i in /usr/local /usr /opt/rrdtool /usr/local/rrdtool $PHP_RRDTOOL; do
+    if test -f $i/include/rrd.h; then
+      RRDTOOL_DIR=$i
+    fi
+  done
+
+  if test -z "$RRDTOOL_DIR"; then
+    { echo "configure: error: Please reinstall rrdtool" 1>&2; exit 1; }
+  fi
+  
+  if test "$RRDTOOL_DIR/include" != "/usr/include"; then
+    
+  if test -z "$RRDTOOL_DIR/include" || echo "$RRDTOOL_DIR/include" | grep '^/' >/dev/null ; then
+    ai_p="$RRDTOOL_DIR/include"
+  else
+    
+    ep_dir="`echo $RRDTOOL_DIR/include|sed 's%/*[^/][^/]*$%%'`"
+    
+    ep_realdir="`(cd \"$ep_dir\" && pwd)`"
+    ai_p="$ep_realdir/`basename \"$RRDTOOL_DIR/include\"`"
+  fi
+
+    
+  
+  unique=`echo $ai_p|sed 's/[^a-zA-Z0-9]/_/g'`
+  
+  cmd="echo $ac_n \"\$INCLUDEPATH$unique$ac_c\""
+  if test -n "$unique" && test "`eval $cmd`" = "" ; then
+    eval "INCLUDEPATH$unique=set"
+    
+      INCLUDES="$INCLUDES -I$ai_p"
+    
+  fi
+
+  fi
+
+  
+
+  if test "$ext_shared" = "yes"; then
+    RRDTOOL_SHARED_LIBADD="-lrrd $RRDTOOL_SHARED_LIBADD"
+    if test -n "$RRDTOOL_DIR/lib"; then
+      
+  if test "$RRDTOOL_DIR/lib" != "/usr/lib"; then
+    
+  if test -z "$RRDTOOL_DIR/lib" || echo "$RRDTOOL_DIR/lib" | grep '^/' >/dev/null ; then
+    ai_p="$RRDTOOL_DIR/lib"
+  else
+    
+    ep_dir="`echo $RRDTOOL_DIR/lib|sed 's%/*[^/][^/]*$%%'`"
+    
+    ep_realdir="`(cd \"$ep_dir\" && pwd)`"
+    ai_p="$ep_realdir/`basename \"$RRDTOOL_DIR/lib\"`"
+  fi
+
+    if test "$ext_shared" = "yes" && test -n "RRDTOOL_SHARED_LIBADD"; then
+      RRDTOOL_SHARED_LIBADD="-R$RRDTOOL_DIR/lib -L$RRDTOOL_DIR/lib $RRDTOOL_SHARED_LIBADD"
+    else
+      
+  
+  unique=`echo $ai_p|sed 's/[^a-zA-Z0-9]/_/g'`
+  
+  cmd="echo $ac_n \"\$LIBPATH$unique$ac_c\""
+  if test -n "$unique" && test "`eval $cmd`" = "" ; then
+    eval "LIBPATH$unique=set"
+    
+        test -n "$ld_runpath_switch" && LDFLAGS="$LDFLAGS $ld_runpath_switch$ai_p"
+        LDFLAGS="$LDFLAGS -L$ai_p"
+        PHP_RPATHS="$PHP_RPATHS $ai_p"
+      
+  fi
+
+    fi
+  fi
+
+    fi
+  else
+    
+
+  if test -n "$RRDTOOL_DIR/lib"; then
+    
+  if test "$RRDTOOL_DIR/lib" != "/usr/lib"; then
+    
+  if test -z "$RRDTOOL_DIR/lib" || echo "$RRDTOOL_DIR/lib" | grep '^/' >/dev/null ; then
+    ai_p="$RRDTOOL_DIR/lib"
+  else
+    
+    ep_dir="`echo $RRDTOOL_DIR/lib|sed 's%/*[^/][^/]*$%%'`"
+    
+    ep_realdir="`(cd \"$ep_dir\" && pwd)`"
+    ai_p="$ep_realdir/`basename \"$RRDTOOL_DIR/lib\"`"
+  fi
+
+    if test "$ext_shared" = "yes" && test -n ""; then
+      ="-R$RRDTOOL_DIR/lib -L$RRDTOOL_DIR/lib $"
+    else
+      
+  
+  unique=`echo $ai_p|sed 's/[^a-zA-Z0-9]/_/g'`
+  
+  cmd="echo $ac_n \"\$LIBPATH$unique$ac_c\""
+  if test -n "$unique" && test "`eval $cmd`" = "" ; then
+    eval "LIBPATH$unique=set"
+    
+        test -n "$ld_runpath_switch" && LDFLAGS="$LDFLAGS $ld_runpath_switch$ai_p"
+        LDFLAGS="$LDFLAGS -L$ai_p"
+        PHP_RPATHS="$PHP_RPATHS $ai_p"
+      
+  fi
+
+    fi
+  fi
+
+  fi
+  
+ case "rrd" in
+ c|c_r|pthread*) ;;
+ *)
+
+   
+  
+  unique=`echo rrd|sed 's/[^a-zA-Z0-9]/_/g'`
+  
+  cmd="echo $ac_n \"\$LIBRARY$unique$ac_c\""
+  if test -n "$unique" && test "`eval $cmd`" = "" ; then
+    eval "LIBRARY$unique=set"
+    
+     
+  LIBS="-lrrd $LIBS"
+
+   
+  fi
+
+
+  ;;
+  esac
+
+
+
+  fi
+
+
+  
+  PHP_VAR_SUBST="$PHP_VAR_SUBST RRDTOOL_SHARED_LIBADD"
+  
+
+
+  cat >> confdefs.h <<\EOF
+#define HAVE_RRDTOOL 1
+EOF
+
+
+  
+  EXT_SUBDIRS="$EXT_SUBDIRS rrdtool"
+  
+  if test -d "$abs_srcdir/ext/rrdtool"; then
+    ext_builddir="ext/rrdtool"
+    ext_srcdir="$abs_srcdir/ext/rrdtool"
+  else
+    ext_builddir="."
+    ext_srcdir="$abs_srcdir"
+  fi
+
+  if test "$ext_shared" != "shared" && test "$ext_shared" != "yes"; then
+    
+  lib_makefile="$ext_builddir/libs.mk"
+  lib_target=""
+  
+  $php_shtool mkdir -p $ext_builddir
+  cat >$lib_makefile<<EOF
+LTLIBRARY_OBJECTS = \$(LTLIBRARY_SOURCES:.c=.lo)
+LTLIBRARY_SHARED_OBJECTS = \$(LTLIBRARY_OBJECTS:.lo=.slo)
+EOF
+
+  if test "" = "shared" || test "" = "yes"; then
+    lib_build_shared=yes
+    if test -n ""; then
+      
+  lib_target="\$(LTLIBRARY_NAME)"
+  cat >>$lib_makefile<<EOF
+\$(LTLIBRARY_NAME): \$(LTLIBRARY_SHARED_OBJECTS) \$(LTLIBRARY_DEPENDENCIES)
+       \$(SHARED_LIBTOOL) --mode=link \$(CCLD) \$(CFLAGS) \$(EXTRA_CFLAGS) \$(LDFLAGS) -o \$@ \$(LTLIBRARY_LDFLAGS) \$(LTLIBRARY_OBJECTS) \$(LTLIBRARY_SHARED_LIBADD)
+
+EOF
+
+    else
+      
+  lib_target="\$(LTLIBRARY_SHARED_NAME)"
+  cat >>$lib_makefile<<EOF
+\$(LTLIBRARY_SHARED_NAME): \$(LTLIBRARY_SHARED_OBJECTS) \$(LTLIBRARY_DEPENDENCIES)
+       \$(SHARED_LIBTOOL) --mode=link \$(CCLD) \$(CFLAGS) \$(EXTRA_CFLAGS) \$(LDFLAGS) -o \$@ -avoid-version -module -rpath \$(phplibdir) \$(LTLIBRARY_LDFLAGS) \$(LTLIBRARY_OBJECTS) \$(LTLIBRARY_SHARED_LIBADD)
+       \$(SHARED_LIBTOOL) --mode=install cp \$@ \$(phplibdir)
+
+EOF
+
+    fi
+  else
+    
+  lib_target="\$(LTLIBRARY_NAME)"
+  cat >>$lib_makefile<<EOF
+\$(LTLIBRARY_NAME): \$(LTLIBRARY_OBJECTS) \$(LTLIBRARY_DEPENDENCIES)
+       \$(LINK) \$(LTLIBRARY_LDFLAGS) \$(LTLIBRARY_OBJECTS) \$(LTLIBRARY_LIBADD)
+
+EOF
+
+  fi
+
+  if test -n "$lib_target"; then
+    cat >>$lib_makefile<<EOF
+targets = $lib_target
+EOF
+  fi
+
+    EXT_LTLIBS="$EXT_LTLIBS $ext_builddir/librrdtool.la"
+    EXT_STATIC="$EXT_STATIC rrdtool"
+  else 
+    
+  lib_makefile="$ext_builddir/libs.mk"
+  lib_target=""
+  
+  $php_shtool mkdir -p $ext_builddir
+  cat >$lib_makefile<<EOF
+LTLIBRARY_OBJECTS = \$(LTLIBRARY_SOURCES:.c=.lo)
+LTLIBRARY_SHARED_OBJECTS = \$(LTLIBRARY_OBJECTS:.lo=.slo)
+EOF
+
+  if test "yes" = "shared" || test "yes" = "yes"; then
+    lib_build_shared=yes
+    if test -n ""; then
+      
+  lib_target="\$(LTLIBRARY_NAME)"
+  cat >>$lib_makefile<<EOF
+\$(LTLIBRARY_NAME): \$(LTLIBRARY_SHARED_OBJECTS) \$(LTLIBRARY_DEPENDENCIES)
+       \$(SHARED_LIBTOOL) --mode=link \$(CCLD) \$(CFLAGS) \$(EXTRA_CFLAGS) \$(LDFLAGS) -o \$@ \$(LTLIBRARY_LDFLAGS) \$(LTLIBRARY_OBJECTS) \$(LTLIBRARY_SHARED_LIBADD)
+
+EOF
+
+    else
+      
+  lib_target="\$(LTLIBRARY_SHARED_NAME)"
+  cat >>$lib_makefile<<EOF
+\$(LTLIBRARY_SHARED_NAME): \$(LTLIBRARY_SHARED_OBJECTS) \$(LTLIBRARY_DEPENDENCIES)
+       \$(SHARED_LIBTOOL) --mode=link \$(CCLD) \$(CFLAGS) \$(EXTRA_CFLAGS) \$(LDFLAGS) -o \$@ -avoid-version -module -rpath \$(phplibdir) \$(LTLIBRARY_LDFLAGS) \$(LTLIBRARY_OBJECTS) \$(LTLIBRARY_SHARED_LIBADD)
+       \$(SHARED_LIBTOOL) --mode=install cp \$@ \$(phplibdir)
+
+EOF
+
+    fi
+  else
+    
+  lib_target="\$(LTLIBRARY_NAME)"
+  cat >>$lib_makefile<<EOF
+\$(LTLIBRARY_NAME): \$(LTLIBRARY_OBJECTS) \$(LTLIBRARY_DEPENDENCIES)
+       \$(LINK) \$(LTLIBRARY_LDFLAGS) \$(LTLIBRARY_OBJECTS) \$(LTLIBRARY_LIBADD)
+
+EOF
+
+  fi
+
+  if test -n "$lib_target"; then
+    cat >>$lib_makefile<<EOF
+targets = $lib_target
+EOF
+  fi
+
+    cat >> confdefs.h <<EOF
+#define COMPILE_DL_RRDTOOL 1
+EOF
+
+  fi
+
+  
+  PHP_FAST_OUTPUT_FILES="$PHP_FAST_OUTPUT_FILES $ext_builddir/Makefile"
+
+
+fi
+
+
+enable_static=no
+enable_shared=yes
+
+ac_aux_dir=
+for ac_dir in $srcdir $srcdir/.. $srcdir/../..; do
+  if test -f $ac_dir/install-sh; then
+    ac_aux_dir=$ac_dir
+    ac_install_sh="$ac_aux_dir/install-sh -c"
+    break
+  elif test -f $ac_dir/install.sh; then
+    ac_aux_dir=$ac_dir
+    ac_install_sh="$ac_aux_dir/install.sh -c"
+    break
+  fi
+done
+if test -z "$ac_aux_dir"; then
+  { echo "configure: error: can not find install-sh or install.sh in $srcdir $srcdir/.. $srcdir/../.." 1>&2; exit 1; }
+fi
+ac_config_guess=$ac_aux_dir/config.guess
+ac_config_sub=$ac_aux_dir/config.sub
+ac_configure=$ac_aux_dir/configure # This should be Cygnus configure.
+
+# Check whether --enable-shared or --disable-shared was given.
+if test "${enable_shared+set}" = set; then
+  enableval="$enable_shared"
+  p=${PACKAGE-default}
+case "$enableval" in
+yes) enable_shared=yes ;;
+no) enable_shared=no ;;
+*)
+  enable_shared=no
+  # Look at the argument we got.  We use all the common list separators.
+  IFS="${IFS=  }"; ac_save_ifs="$IFS"; IFS="${IFS}:,"
+  for pkg in $enableval; do
+    if test "X$pkg" = "X$p"; then
+      enable_shared=yes
+    fi
+  done
+  IFS="$ac_save_ifs"
+  ;;
+esac
+else
+  enable_shared=yes
+fi
+
+# Check whether --enable-static or --disable-static was given.
+if test "${enable_static+set}" = set; then
+  enableval="$enable_static"
+  p=${PACKAGE-default}
+case "$enableval" in
+yes) enable_static=yes ;;
+no) enable_static=no ;;
+*)
+  enable_static=no
+  # Look at the argument we got.  We use all the common list separators.
+  IFS="${IFS=  }"; ac_save_ifs="$IFS"; IFS="${IFS}:,"
+  for pkg in $enableval; do
+    if test "X$pkg" = "X$p"; then
+      enable_static=yes
+    fi
+  done
+  IFS="$ac_save_ifs"
+  ;;
+esac
+else
+  enable_static=yes
+fi
+
+# Check whether --enable-fast-install or --disable-fast-install was given.
+if test "${enable_fast_install+set}" = set; then
+  enableval="$enable_fast_install"
+  p=${PACKAGE-default}
+case "$enableval" in
+yes) enable_fast_install=yes ;;
+no) enable_fast_install=no ;;
+*)
+  enable_fast_install=no
+  # Look at the argument we got.  We use all the common list separators.
+  IFS="${IFS=  }"; ac_save_ifs="$IFS"; IFS="${IFS}:,"
+  for pkg in $enableval; do
+    if test "X$pkg" = "X$p"; then
+      enable_fast_install=yes
+    fi
+  done
+  IFS="$ac_save_ifs"
+  ;;
+esac
+else
+  enable_fast_install=yes
+fi
+
+
+# Make sure we can run config.sub.
+if ${CONFIG_SHELL-/bin/sh} $ac_config_sub sun4 >/dev/null 2>&1; then :
+else { echo "configure: error: can not run $ac_config_sub" 1>&2; exit 1; }
+fi
+
+echo $ac_n "checking host system type""... $ac_c" 1>&6
+echo "configure:1390: checking host system type" >&5
+
+host_alias=$host
+case "$host_alias" in
+NONE)
+  case $nonopt in
+  NONE)
+    if host_alias=`${CONFIG_SHELL-/bin/sh} $ac_config_guess`; then :
+    else { echo "configure: error: can not guess host type; you must specify one" 1>&2; exit 1; }
+    fi ;;
+  *) host_alias=$nonopt ;;
+  esac ;;
+esac
+
+host=`${CONFIG_SHELL-/bin/sh} $ac_config_sub $host_alias`
+host_cpu=`echo $host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\1/'`
+host_vendor=`echo $host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\2/'`
+host_os=`echo $host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\3/'`
+echo "$ac_t""$host" 1>&6
+
+echo $ac_n "checking build system type""... $ac_c" 1>&6
+echo "configure:1411: checking build system type" >&5
+
+build_alias=$build
+case "$build_alias" in
+NONE)
+  case $nonopt in
+  NONE) build_alias=$host_alias ;;
+  *) build_alias=$nonopt ;;
+  esac ;;
+esac
+
+build=`${CONFIG_SHELL-/bin/sh} $ac_config_sub $build_alias`
+build_cpu=`echo $build | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\1/'`
+build_vendor=`echo $build | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\2/'`
+build_os=`echo $build | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\3/'`
+echo "$ac_t""$build" 1>&6
+
+# Extract the first word of "ranlib", so it can be a program name with args.
+set dummy ranlib; ac_word=$2
+echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
+echo "configure:1431: checking for $ac_word" >&5
+if eval "test \"`echo '$''{'ac_cv_prog_RANLIB'+set}'`\" = set"; then
+  echo $ac_n "(cached) $ac_c" 1>&6
+else
+  if test -n "$RANLIB"; then
+  ac_cv_prog_RANLIB="$RANLIB" # Let the user override the test.
+else
+  IFS="${IFS=  }"; ac_save_ifs="$IFS"; IFS=":"
+  ac_dummy="$PATH"
+  for ac_dir in $ac_dummy; do
+    test -z "$ac_dir" && ac_dir=.
+    if test -f $ac_dir/$ac_word; then
+      ac_cv_prog_RANLIB="ranlib"
+      break
+    fi
+  done
+  IFS="$ac_save_ifs"
+  test -z "$ac_cv_prog_RANLIB" && ac_cv_prog_RANLIB=":"
+fi
+fi
+RANLIB="$ac_cv_prog_RANLIB"
+if test -n "$RANLIB"; then
+  echo "$ac_t""$RANLIB" 1>&6
+else
+  echo "$ac_t""no" 1>&6
+fi
+
+# Check whether --with-gnu-ld or --without-gnu-ld was given.
+if test "${with_gnu_ld+set}" = set; then
+  withval="$with_gnu_ld"
+  test "$withval" = no || with_gnu_ld=yes
+else
+  with_gnu_ld=no
+fi
+
+ac_prog=ld
+if test "$ac_cv_prog_gcc" = yes; then
+  # Check if gcc -print-prog-name=ld gives a path.
+  echo $ac_n "checking for ld used by GCC""... $ac_c" 1>&6
+echo "configure:1470: checking for ld used by GCC" >&5
+  ac_prog=`($CC -print-prog-name=ld) 2>&5`
+  case "$ac_prog" in
+    # Accept absolute paths.
+    [\\/]* | [A-Za-z]:[\\/]*)
+      re_direlt='/[^/][^/]*/\.\./'
+      # Canonicalize the path of ld
+      ac_prog=`echo $ac_prog| sed 's%\\\\%/%g'`
+      while echo $ac_prog | grep "$re_direlt" > /dev/null 2>&1; do
+       ac_prog=`echo $ac_prog| sed "s%$re_direlt%/%"`
+      done
+      test -z "$LD" && LD="$ac_prog"
+      ;;
+  "")
+    # If it fails, then pretend we aren't using GCC.
+    ac_prog=ld
+    ;;
+  *)
+    # If it is relative, then search for the first ld in PATH.
+    with_gnu_ld=unknown
+    ;;
+  esac
+elif test "$with_gnu_ld" = yes; then
+  echo $ac_n "checking for GNU ld""... $ac_c" 1>&6
+echo "configure:1494: checking for GNU ld" >&5
+else
+  echo $ac_n "checking for non-GNU ld""... $ac_c" 1>&6
+echo "configure:1497: checking for non-GNU ld" >&5
+fi
+if eval "test \"`echo '$''{'ac_cv_path_LD'+set}'`\" = set"; then
+  echo $ac_n "(cached) $ac_c" 1>&6
+else
+  if test -z "$LD"; then
+  IFS="${IFS=  }"; ac_save_ifs="$IFS"; IFS="${IFS}${PATH_SEPARATOR-:}"
+  for ac_dir in $PATH; do
+    test -z "$ac_dir" && ac_dir=.
+    if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then
+      ac_cv_path_LD="$ac_dir/$ac_prog"
+      # Check to see if the program is GNU ld.  I'd rather use --version,
+      # but apparently some GNU ld's only accept -v.
+      # Break only if it was the GNU/non-GNU ld that we prefer.
+      if "$ac_cv_path_LD" -v 2>&1 < /dev/null | egrep '(GNU|with BFD)' > /dev/null; then
+       test "$with_gnu_ld" != no && break
+      else
+       test "$with_gnu_ld" != yes && break
+      fi
+    fi
+  done
+  IFS="$ac_save_ifs"
+else
+  ac_cv_path_LD="$LD" # Let the user override the test with a path.
+fi
+fi
+
+LD="$ac_cv_path_LD"
+if test -n "$LD"; then
+  echo "$ac_t""$LD" 1>&6
+else
+  echo "$ac_t""no" 1>&6
+fi
+test -z "$LD" && { echo "configure: error: no acceptable ld found in \$PATH" 1>&2; exit 1; }
+
+echo $ac_n "checking if the linker ($LD) is GNU ld""... $ac_c" 1>&6
+echo "configure:1533: checking if the linker ($LD) is GNU ld" >&5
+if eval "test \"`echo '$''{'ac_cv_prog_gnu_ld'+set}'`\" = set"; then
+  echo $ac_n "(cached) $ac_c" 1>&6
+else
+  # I'd rather use --version here, but apparently some GNU ld's only accept -v.
+if $LD -v 2>&1 </dev/null | egrep '(GNU|with BFD)' 1>&5; then
+  ac_cv_prog_gnu_ld=yes
+else
+  ac_cv_prog_gnu_ld=no
+fi
+fi
+
+echo "$ac_t""$ac_cv_prog_gnu_ld" 1>&6
+
+
+echo $ac_n "checking for BSD-compatible nm""... $ac_c" 1>&6
+echo "configure:1549: checking for BSD-compatible nm" >&5
+if eval "test \"`echo '$''{'ac_cv_path_NM'+set}'`\" = set"; then
+  echo $ac_n "(cached) $ac_c" 1>&6
+else
+  if test -n "$NM"; then
+  # Let the user override the test.
+  ac_cv_path_NM="$NM"
+else
+  IFS="${IFS=  }"; ac_save_ifs="$IFS"; IFS="${IFS}${PATH_SEPARATOR-:}"
+  for ac_dir in $PATH /usr/ccs/bin /usr/ucb /bin; do
+    test -z "$ac_dir" && ac_dir=.
+    if test -f $ac_dir/nm || test -f $ac_dir/nm$ac_exeext ; then
+      # Check to see if the nm accepts a BSD-compat flag.
+      # Adding the `sed 1q' prevents false positives on HP-UX, which says:
+      #   nm: unknown option "B" ignored
+      if ($ac_dir/nm -B /dev/null 2>&1 | sed '1q'; exit 0) | egrep /dev/null >/dev/null; then
+       ac_cv_path_NM="$ac_dir/nm -B"
+       break
+      elif ($ac_dir/nm -p /dev/null 2>&1 | sed '1q'; exit 0) | egrep /dev/null >/dev/null; then
+       ac_cv_path_NM="$ac_dir/nm -p"
+       break
+      else
+       ac_cv_path_NM=${ac_cv_path_NM="$ac_dir/nm"} # keep the first match, but
+       continue # so that we can try to find one that supports BSD flags
+      fi
+    fi
+  done
+  IFS="$ac_save_ifs"
+  test -z "$ac_cv_path_NM" && ac_cv_path_NM=nm
+fi
+fi
+
+NM="$ac_cv_path_NM"
+echo "$ac_t""$NM" 1>&6
+
+
+echo $ac_n "checking whether ln -s works""... $ac_c" 1>&6
+echo "configure:1586: checking whether ln -s works" >&5
+if eval "test \"`echo '$''{'ac_cv_prog_LN_S'+set}'`\" = set"; then
+  echo $ac_n "(cached) $ac_c" 1>&6
+else
+  rm -f conftestdata
+if ln -s X conftestdata 2>/dev/null
+then
+  rm -f conftestdata
+  ac_cv_prog_LN_S="ln -s"
+else
+  ac_cv_prog_LN_S=ln
+fi
+fi
+LN_S="$ac_cv_prog_LN_S"
+if test "$ac_cv_prog_LN_S" = "ln -s"; then
+  echo "$ac_t""yes" 1>&6
+else
+  echo "$ac_t""no" 1>&6
+fi
+
+
+# Check for any special flags to pass to ltconfig.
+libtool_flags="--cache-file=$cache_file"
+test "$enable_shared" = no && libtool_flags="$libtool_flags --disable-shared"
+test "$enable_static" = no && libtool_flags="$libtool_flags --disable-static"
+test "$enable_fast_install" = no && libtool_flags="$libtool_flags --disable-fast-install"
+test "$ac_cv_prog_gcc" = yes && libtool_flags="$libtool_flags --with-gcc"
+test "$ac_cv_prog_gnu_ld" = yes && libtool_flags="$libtool_flags --with-gnu-ld"
+
+
+# Check whether --enable-libtool-lock or --disable-libtool-lock was given.
+if test "${enable_libtool_lock+set}" = set; then
+  enableval="$enable_libtool_lock"
+  :
+fi
+
+test "x$enable_libtool_lock" = xno && libtool_flags="$libtool_flags --disable-lock"
+test x"$silent" = xyes && libtool_flags="$libtool_flags --silent"
+
+# Some flags need to be propagated to the compiler or linker for good
+# libtool support.
+case "$host" in
+*-*-irix6*)
+  # Find out which ABI we are using.
+  echo '#line 1630 "configure"' > conftest.$ac_ext
+  if { (eval echo configure:1631: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+    case "`/usr/bin/file conftest.o`" in
+    *32-bit*)
+      LD="${LD-ld} -32"
+      ;;
+    *N32*)
+      LD="${LD-ld} -n32"
+      ;;
+    *64-bit*)
+      LD="${LD-ld} -64"
+      ;;
+    esac
+  fi
+  rm -rf conftest*
+  ;;
+
+*-*-sco3.2v5*)
+  # On SCO OpenServer 5, we need -belf to get full-featured binaries.
+  SAVE_CFLAGS="$CFLAGS"
+  CFLAGS="$CFLAGS -belf"
+  echo $ac_n "checking whether the C compiler needs -belf""... $ac_c" 1>&6
+echo "configure:1652: checking whether the C compiler needs -belf" >&5
+if eval "test \"`echo '$''{'lt_cv_cc_needs_belf'+set}'`\" = set"; then
+  echo $ac_n "(cached) $ac_c" 1>&6
+else
+  cat > conftest.$ac_ext <<EOF
+#line 1657 "configure"
+#include "confdefs.h"
+
+int main() {
+
+; return 0; }
+EOF
+if { (eval echo configure:1664: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+  rm -rf conftest*
+  lt_cv_cc_needs_belf=yes
+else
+  echo "configure: failed program was:" >&5
+  cat conftest.$ac_ext >&5
+  rm -rf conftest*
+  lt_cv_cc_needs_belf=no
+fi
+rm -f conftest*
+fi
+
+echo "$ac_t""$lt_cv_cc_needs_belf" 1>&6
+  if test x"$lt_cv_cc_needs_belf" != x"yes"; then
+    # this is probably gcc 2.8.0, egcs 1.0 or newer; no need for -belf
+    CFLAGS="$SAVE_CFLAGS"
+  fi
+  ;;
+
+
+esac
+
+
+# Save cache, so that ltconfig can load it
+cat > confcache <<\EOF
+# This file is a shell script that caches the results of configure
+# tests run on this system so they can be shared between configure
+# scripts and configure runs.  It is not useful on other systems.
+# If it contains results you don't want to keep, you may remove or edit it.
+#
+# By default, configure uses ./config.cache as the cache file,
+# creating it if it does not exist already.  You can give configure
+# the --cache-file=FILE option to use a different cache file; that is
+# what configure does when it calls configure scripts in
+# subdirectories, so they share the cache.
+# Giving --cache-file=/dev/null disables caching, for debugging configure.
+# config.status only pays attention to the cache file if you give it the
+# --recheck option to rerun configure.
+#
+EOF
+# The following way of writing the cache mishandles newlines in values,
+# but we know of no workaround that is simple, portable, and efficient.
+# So, don't put newlines in cache variables' values.
+# Ultrix sh set writes to stderr and can't be redirected directly,
+# and sets the high bit in the cache file unless we assign to the vars.
+(set) 2>&1 |
+  case `(ac_space=' '; set | grep ac_space) 2>&1` in
+  *ac_space=\ *)
+    # `set' does not quote correctly, so add quotes (double-quote substitution
+    # turns \\\\ into \\, and sed turns \\ into \).
+    sed -n \
+      -e "s/'/'\\\\''/g" \
+      -e "s/^\\([a-zA-Z0-9_]*_cv_[a-zA-Z0-9_]*\\)=\\(.*\\)/\\1=\${\\1='\\2'}/p"
+    ;;
+  *)
+    # `set' quotes correctly as required by POSIX, so do not add quotes.
+    sed -n -e 's/^\([a-zA-Z0-9_]*_cv_[a-zA-Z0-9_]*\)=\(.*\)/\1=${\1=\2}/p'
+    ;;
+  esac >> confcache
+if cmp -s $cache_file confcache; then
+  :
+else
+  if test -w $cache_file; then
+    echo "updating cache $cache_file"
+    cat confcache > $cache_file
+  else
+    echo "not updating unwritable cache $cache_file"
+  fi
+fi
+rm -f confcache
+
+
+# Actually configure libtool.  ac_aux_dir is where install-sh is found.
+CC="$CC" CFLAGS="$CFLAGS" CPPFLAGS="$CPPFLAGS" \
+LD="$LD" LDFLAGS="$LDFLAGS" LIBS="$LIBS" \
+LN_S="$LN_S" NM="$NM" RANLIB="$RANLIB" \
+DLLTOOL="$DLLTOOL" AS="$AS" OBJDUMP="$OBJDUMP" \
+${CONFIG_SHELL-/bin/sh} $ac_aux_dir/ltconfig --no-reexec \
+$libtool_flags --no-verify $ac_aux_dir/ltmain.sh $host \
+|| { echo "configure: error: libtool configure failed" 1>&2; exit 1; }
+
+# Reload cache, that may have been modified by ltconfig
+if test -r "$cache_file"; then
+  echo "loading cache $cache_file"
+  . $cache_file
+else
+  echo "creating cache $cache_file"
+  > $cache_file
+fi
+
+
+# This can be used to rebuild libtool when needed
+LIBTOOL_DEPS="$ac_aux_dir/ltconfig $ac_aux_dir/ltmain.sh"
+
+# Always use our own libtool.
+LIBTOOL='$(SHELL) $(top_builddir)/libtool'
+
+# Redirect the config.log output again, so that the ltconfig log is not
+# clobbered by the next message.
+exec 5>>./config.log
+
+
+SHARED_LIBTOOL='$(LIBTOOL)'
+PHP_COMPILE='$(LIBTOOL) --mode=compile $(COMPILE) -c $<'
+phplibdir="`pwd`/modules"
+
+test "$prefix" = "NONE" && prefix="/usr/local"
+test "$exec_prefix" = "NONE" && exec_prefix='$(prefix)'
+
+
+  PHP_VAR_SUBST="$PHP_VAR_SUBST prefix"
+  
+
+
+  PHP_VAR_SUBST="$PHP_VAR_SUBST exec_prefix"
+  
+
+
+  PHP_VAR_SUBST="$PHP_VAR_SUBST libdir"
+  
+
+
+  PHP_VAR_SUBST="$PHP_VAR_SUBST prefix"
+  
+
+
+  PHP_VAR_SUBST="$PHP_VAR_SUBST phplibdir"
+  
+
+
+
+  PHP_VAR_SUBST="$PHP_VAR_SUBST PHP_COMPILE"
+  
+
+
+  PHP_VAR_SUBST="$PHP_VAR_SUBST CC"
+  
+
+
+  PHP_VAR_SUBST="$PHP_VAR_SUBST CFLAGS"
+  
+
+
+  PHP_VAR_SUBST="$PHP_VAR_SUBST CPP"
+  
+
+
+  PHP_VAR_SUBST="$PHP_VAR_SUBST CPPFLAGS"
+  
+
+
+  PHP_VAR_SUBST="$PHP_VAR_SUBST CXX"
+  
+
+
+  PHP_VAR_SUBST="$PHP_VAR_SUBST DEFS"
+  
+
+
+  PHP_VAR_SUBST="$PHP_VAR_SUBST EXTENSION_DIR"
+  
+
+
+  PHP_VAR_SUBST="$PHP_VAR_SUBST EXTRA_LDFLAGS"
+  
+
+
+  PHP_VAR_SUBST="$PHP_VAR_SUBST EXTRA_LIBS"
+  
+
+
+  PHP_VAR_SUBST="$PHP_VAR_SUBST INCLUDES"
+  
+
+
+  PHP_VAR_SUBST="$PHP_VAR_SUBST LEX"
+  
+
+
+  PHP_VAR_SUBST="$PHP_VAR_SUBST LEX_OUTPUT_ROOT"
+  
+
+
+  PHP_VAR_SUBST="$PHP_VAR_SUBST LFLAGS"
+  
+
+
+  PHP_VAR_SUBST="$PHP_VAR_SUBST SHARED_LIBTOOL"
+  
+
+
+  PHP_VAR_SUBST="$PHP_VAR_SUBST LIBTOOL"
+  
+
+
+  PHP_VAR_SUBST="$PHP_VAR_SUBST SHELL"
+  
+
+
+
+  PHP_FAST_OUTPUT_FILES="$PHP_FAST_OUTPUT_FILES Makefile"
+
+
+
+  
+  echo $ac_n "checking for working mkdir -p""... $ac_c" 1>&6
+echo "configure:1870: checking for working mkdir -p" >&5
+if eval "test \"`echo '$''{'ac_cv_mkdir_p'+set}'`\" = set"; then
+  echo $ac_n "(cached) $ac_c" 1>&6
+else
+  
+    test -d conftestdir && rm -rf conftestdir
+    mkdir -p conftestdir/somedir >/dev/null 2>&1
+    if test -d conftestdir/somedir; then
+      ac_cv_mkdir_p=yes
+    else
+      ac_cv_mkdir_p=no
+    fi
+    rm -rf conftestdir
+  
+fi
+
+echo "$ac_t""$ac_cv_mkdir_p" 1>&6
+
+  echo creating config_vars.mk
+  > config_vars.mk
+  for i in $PHP_VAR_SUBST; do
+    eval echo "$i = \$$i" >> config_vars.mk
+  done
+
+
+  $SHELL $srcdir/build/fastgen.sh $srcdir $ac_cv_mkdir_p $PHP_FAST_OUTPUT_FILES
+
+
+test -d modules || mkdir modules
+touch .deps
+
+
+
+trap '' 1 2 15
+cat > confcache <<\EOF
+# This file is a shell script that caches the results of configure
+# tests run on this system so they can be shared between configure
+# scripts and configure runs.  It is not useful on other systems.
+# If it contains results you don't want to keep, you may remove or edit it.
+#
+# By default, configure uses ./config.cache as the cache file,
+# creating it if it does not exist already.  You can give configure
+# the --cache-file=FILE option to use a different cache file; that is
+# what configure does when it calls configure scripts in
+# subdirectories, so they share the cache.
+# Giving --cache-file=/dev/null disables caching, for debugging configure.
+# config.status only pays attention to the cache file if you give it the
+# --recheck option to rerun configure.
+#
+EOF
+# The following way of writing the cache mishandles newlines in values,
+# but we know of no workaround that is simple, portable, and efficient.
+# So, don't put newlines in cache variables' values.
+# Ultrix sh set writes to stderr and can't be redirected directly,
+# and sets the high bit in the cache file unless we assign to the vars.
+(set) 2>&1 |
+  case `(ac_space=' '; set | grep ac_space) 2>&1` in
+  *ac_space=\ *)
+    # `set' does not quote correctly, so add quotes (double-quote substitution
+    # turns \\\\ into \\, and sed turns \\ into \).
+    sed -n \
+      -e "s/'/'\\\\''/g" \
+      -e "s/^\\([a-zA-Z0-9_]*_cv_[a-zA-Z0-9_]*\\)=\\(.*\\)/\\1=\${\\1='\\2'}/p"
+    ;;
+  *)
+    # `set' quotes correctly as required by POSIX, so do not add quotes.
+    sed -n -e 's/^\([a-zA-Z0-9_]*_cv_[a-zA-Z0-9_]*\)=\(.*\)/\1=${\1=\2}/p'
+    ;;
+  esac >> confcache
+if cmp -s $cache_file confcache; then
+  :
+else
+  if test -w $cache_file; then
+    echo "updating cache $cache_file"
+    cat confcache > $cache_file
+  else
+    echo "not updating unwritable cache $cache_file"
+  fi
+fi
+rm -f confcache
+
+trap 'rm -fr conftest* confdefs* core core.* *.core $ac_clean_files; exit 1' 1 2 15
+
+test "x$prefix" = xNONE && prefix=$ac_default_prefix
+# Let make expand exec_prefix.
+test "x$exec_prefix" = xNONE && exec_prefix='${prefix}'
+
+# Any assignment to VPATH causes Sun make to only execute
+# the first set of double-colon rules, so remove it if not needed.
+# If there is a colon in the path, we need to keep it.
+if test "x$srcdir" = x.; then
+  ac_vpsub='/^[        ]*VPATH[        ]*=[^:]*$/d'
+fi
+
+trap 'rm -f $CONFIG_STATUS conftest*; exit 1' 1 2 15
+
+DEFS=-DHAVE_CONFIG_H
+
+# Without the "./", some shells look in PATH for config.status.
+: ${CONFIG_STATUS=./config.status}
+
+echo creating $CONFIG_STATUS
+rm -f $CONFIG_STATUS
+cat > $CONFIG_STATUS <<EOF
+#! /bin/sh
+# Generated automatically by configure.
+# Run this file to recreate the current configuration.
+# This directory was configured as follows,
+# on host `(hostname || uname -n) 2>/dev/null | sed 1q`:
+#
+# $0 $ac_configure_args
+#
+# Compiler output produced by configure, useful for debugging
+# configure, is in ./config.log if it exists.
+
+ac_cs_usage="Usage: $CONFIG_STATUS [--recheck] [--version] [--help]"
+for ac_option
+do
+  case "\$ac_option" in
+  -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r)
+    echo "running \${CONFIG_SHELL-/bin/sh} $0 $ac_configure_args --no-create --no-recursion"
+    exec \${CONFIG_SHELL-/bin/sh} $0 $ac_configure_args --no-create --no-recursion ;;
+  -version | --version | --versio | --versi | --vers | --ver | --ve | --v)
+    echo "$CONFIG_STATUS generated by autoconf version 2.13"
+    exit 0 ;;
+  -help | --help | --hel | --he | --h)
+    echo "\$ac_cs_usage"; exit 0 ;;
+  *) echo "\$ac_cs_usage"; exit 1 ;;
+  esac
+done
+
+ac_given_srcdir=$srcdir
+
+trap 'rm -fr `echo " php_config.h" | sed "s/:[^ ]*//g"` conftest*; exit 1' 1 2 15
+EOF
+cat >> $CONFIG_STATUS <<EOF
+
+# Protect against being on the right side of a sed subst in config.status.
+sed 's/%@/@@/; s/@%/@@/; s/%g\$/@g/; /@g\$/s/[\\\\&%]/\\\\&/g;
+ s/@@/%@/; s/@@/@%/; s/@g\$/%g/' > conftest.subs <<\\CEOF
+$ac_vpsub
+$extrasub
+s%@EXT_SUBDIRS@%$EXT_SUBDIRS%g
+s%@EXT_STATIC@%$EXT_STATIC%g
+s%@EXT_SHARED@%$EXT_SHARED%g
+s%@EXT_LIBS@%$EXT_LIBS%g
+s%@EXT_LTLIBS@%$EXT_LTLIBS%g
+s%@SHELL@%$SHELL%g
+s%@CFLAGS@%$CFLAGS%g
+s%@CPPFLAGS@%$CPPFLAGS%g
+s%@CXXFLAGS@%$CXXFLAGS%g
+s%@FFLAGS@%$FFLAGS%g
+s%@DEFS@%$DEFS%g
+s%@LDFLAGS@%$LDFLAGS%g
+s%@LIBS@%$LIBS%g
+s%@exec_prefix@%$exec_prefix%g
+s%@prefix@%$prefix%g
+s%@program_transform_name@%$program_transform_name%g
+s%@bindir@%$bindir%g
+s%@sbindir@%$sbindir%g
+s%@libexecdir@%$libexecdir%g
+s%@datadir@%$datadir%g
+s%@sysconfdir@%$sysconfdir%g
+s%@sharedstatedir@%$sharedstatedir%g
+s%@localstatedir@%$localstatedir%g
+s%@libdir@%$libdir%g
+s%@includedir@%$includedir%g
+s%@oldincludedir@%$oldincludedir%g
+s%@infodir@%$infodir%g
+s%@mandir@%$mandir%g
+s%@CC@%$CC%g
+s%@RRDTOOL_SHARED_LIBADD@%$RRDTOOL_SHARED_LIBADD%g
+s%@host@%$host%g
+s%@host_alias@%$host_alias%g
+s%@host_cpu@%$host_cpu%g
+s%@host_vendor@%$host_vendor%g
+s%@host_os@%$host_os%g
+s%@build@%$build%g
+s%@build_alias@%$build_alias%g
+s%@build_cpu@%$build_cpu%g
+s%@build_vendor@%$build_vendor%g
+s%@build_os@%$build_os%g
+s%@RANLIB@%$RANLIB%g
+s%@LD@%$LD%g
+s%@NM@%$NM%g
+s%@LN_S@%$LN_S%g
+s%@LIBTOOL@%$LIBTOOL%g
+s%@phplibdir@%$phplibdir%g
+s%@PHP_COMPILE@%$PHP_COMPILE%g
+s%@CPP@%$CPP%g
+s%@CXX@%$CXX%g
+s%@EXTENSION_DIR@%$EXTENSION_DIR%g
+s%@EXTRA_LDFLAGS@%$EXTRA_LDFLAGS%g
+s%@EXTRA_LIBS@%$EXTRA_LIBS%g
+s%@INCLUDES@%$INCLUDES%g
+s%@LEX@%$LEX%g
+s%@LEX_OUTPUT_ROOT@%$LEX_OUTPUT_ROOT%g
+s%@LFLAGS@%$LFLAGS%g
+s%@SHARED_LIBTOOL@%$SHARED_LIBTOOL%g
+
+CEOF
+EOF
+
+cat >> $CONFIG_STATUS <<\EOF
+
+# Split the substitutions into bite-sized pieces for seds with
+# small command number limits, like on Digital OSF/1 and HP-UX.
+ac_max_sed_cmds=90 # Maximum number of lines to put in a sed script.
+ac_file=1 # Number of current file.
+ac_beg=1 # First line for current file.
+ac_end=$ac_max_sed_cmds # Line after last line for current file.
+ac_more_lines=:
+ac_sed_cmds=""
+while $ac_more_lines; do
+  if test $ac_beg -gt 1; then
+    sed "1,${ac_beg}d; ${ac_end}q" conftest.subs > conftest.s$ac_file
+  else
+    sed "${ac_end}q" conftest.subs > conftest.s$ac_file
+  fi
+  if test ! -s conftest.s$ac_file; then
+    ac_more_lines=false
+    rm -f conftest.s$ac_file
+  else
+    if test -z "$ac_sed_cmds"; then
+      ac_sed_cmds="sed -f conftest.s$ac_file"
+    else
+      ac_sed_cmds="$ac_sed_cmds | sed -f conftest.s$ac_file"
+    fi
+    ac_file=`expr $ac_file + 1`
+    ac_beg=$ac_end
+    ac_end=`expr $ac_end + $ac_max_sed_cmds`
+  fi
+done
+if test -z "$ac_sed_cmds"; then
+  ac_sed_cmds=cat
+fi
+EOF
+
+cat >> $CONFIG_STATUS <<EOF
+
+CONFIG_FILES=\${CONFIG_FILES-""}
+EOF
+cat >> $CONFIG_STATUS <<\EOF
+for ac_file in .. $CONFIG_FILES; do if test "x$ac_file" != x..; then
+  # Support "outfile[:infile[:infile...]]", defaulting infile="outfile.in".
+  case "$ac_file" in
+  *:*) ac_file_in=`echo "$ac_file"|sed 's%[^:]*:%%'`
+       ac_file=`echo "$ac_file"|sed 's%:.*%%'` ;;
+  *) ac_file_in="${ac_file}.in" ;;
+  esac
+
+  # Adjust a relative srcdir, top_srcdir, and INSTALL for subdirectories.
+
+  # Remove last slash and all that follows it.  Not all systems have dirname.
+  ac_dir=`echo $ac_file|sed 's%/[^/][^/]*$%%'`
+  if test "$ac_dir" != "$ac_file" && test "$ac_dir" != .; then
+    # The file is in a subdirectory.
+    test ! -d "$ac_dir" && mkdir "$ac_dir"
+    ac_dir_suffix="/`echo $ac_dir|sed 's%^\./%%'`"
+    # A "../" for each directory in $ac_dir_suffix.
+    ac_dots=`echo $ac_dir_suffix|sed 's%/[^/]*%../%g'`
+  else
+    ac_dir_suffix= ac_dots=
+  fi
+
+  case "$ac_given_srcdir" in
+  .)  srcdir=.
+      if test -z "$ac_dots"; then top_srcdir=.
+      else top_srcdir=`echo $ac_dots|sed 's%/$%%'`; fi ;;
+  /*) srcdir="$ac_given_srcdir$ac_dir_suffix"; top_srcdir="$ac_given_srcdir" ;;
+  *) # Relative path.
+    srcdir="$ac_dots$ac_given_srcdir$ac_dir_suffix"
+    top_srcdir="$ac_dots$ac_given_srcdir" ;;
+  esac
+
+
+  echo creating "$ac_file"
+  rm -f "$ac_file"
+  configure_input="Generated automatically from `echo $ac_file_in|sed 's%.*/%%'` by configure."
+  case "$ac_file" in
+  *Makefile*) ac_comsub="1i\\
+# $configure_input" ;;
+  *) ac_comsub= ;;
+  esac
+
+  ac_file_inputs=`echo $ac_file_in|sed -e "s%^%$ac_given_srcdir/%" -e "s%:% $ac_given_srcdir/%g"`
+  sed -e "$ac_comsub
+s%@configure_input@%$configure_input%g
+s%@srcdir@%$srcdir%g
+s%@top_srcdir@%$top_srcdir%g
+" $ac_file_inputs | (eval "$ac_sed_cmds") > $ac_file
+fi; done
+rm -f conftest.s*
+
+# These sed commands are passed to sed as "A NAME B NAME C VALUE D", where
+# NAME is the cpp macro being defined and VALUE is the value it is being given.
+#
+# ac_d sets the value in "#define NAME VALUE" lines.
+ac_dA='s%^\([  ]*\)#\([        ]*define[       ][      ]*\)'
+ac_dB='\([     ][      ]*\)[^  ]*%\1#\2'
+ac_dC='\3'
+ac_dD='%g'
+# ac_u turns "#undef NAME" with trailing blanks into "#define NAME VALUE".
+ac_uA='s%^\([  ]*\)#\([        ]*\)undef\([    ][      ]*\)'
+ac_uB='\([     ]\)%\1#\2define\3'
+ac_uC=' '
+ac_uD='\4%g'
+# ac_e turns "#undef NAME" without trailing blanks into "#define NAME VALUE".
+ac_eA='s%^\([  ]*\)#\([        ]*\)undef\([    ][      ]*\)'
+ac_eB='$%\1#\2define\3'
+ac_eC=' '
+ac_eD='%g'
+
+if test "${CONFIG_HEADERS+set}" != set; then
+EOF
+cat >> $CONFIG_STATUS <<EOF
+  CONFIG_HEADERS="php_config.h"
+EOF
+cat >> $CONFIG_STATUS <<\EOF
+fi
+for ac_file in .. $CONFIG_HEADERS; do if test "x$ac_file" != x..; then
+  # Support "outfile[:infile[:infile...]]", defaulting infile="outfile.in".
+  case "$ac_file" in
+  *:*) ac_file_in=`echo "$ac_file"|sed 's%[^:]*:%%'`
+       ac_file=`echo "$ac_file"|sed 's%:.*%%'` ;;
+  *) ac_file_in="${ac_file}.in" ;;
+  esac
+
+  echo creating $ac_file
+
+  rm -f conftest.frag conftest.in conftest.out
+  ac_file_inputs=`echo $ac_file_in|sed -e "s%^%$ac_given_srcdir/%" -e "s%:% $ac_given_srcdir/%g"`
+  cat $ac_file_inputs > conftest.in
+
+EOF
+
+# Transform confdefs.h into a sed script conftest.vals that substitutes
+# the proper values into config.h.in to produce config.h.  And first:
+# Protect against being on the right side of a sed subst in config.status.
+# Protect against being in an unquoted here document in config.status.
+rm -f conftest.vals
+cat > conftest.hdr <<\EOF
+s/[\\&%]/\\&/g
+s%[\\$`]%\\&%g
+s%#define \([A-Za-z_][A-Za-z0-9_]*\) *\(.*\)%${ac_dA}\1${ac_dB}\1${ac_dC}\2${ac_dD}%gp
+s%ac_d%ac_u%gp
+s%ac_u%ac_e%gp
+EOF
+sed -n -f conftest.hdr confdefs.h > conftest.vals
+rm -f conftest.hdr
+
+# This sed command replaces #undef with comments.  This is necessary, for
+# example, in the case of _POSIX_SOURCE, which is predefined and required
+# on some systems where configure will not decide to define it.
+cat >> conftest.vals <<\EOF
+s%^[   ]*#[    ]*undef[        ][      ]*[a-zA-Z_][a-zA-Z_0-9]*%/* & */%
+EOF
+
+# Break up conftest.vals because some shells have a limit on
+# the size of here documents, and old seds have small limits too.
+
+rm -f conftest.tail
+while :
+do
+  ac_lines=`grep -c . conftest.vals`
+  # grep -c gives empty output for an empty file on some AIX systems.
+  if test -z "$ac_lines" || test "$ac_lines" -eq 0; then break; fi
+  # Write a limited-size here document to conftest.frag.
+  echo '  cat > conftest.frag <<CEOF' >> $CONFIG_STATUS
+  sed ${ac_max_here_lines}q conftest.vals >> $CONFIG_STATUS
+  echo 'CEOF
+  sed -f conftest.frag conftest.in > conftest.out
+  rm -f conftest.in
+  mv conftest.out conftest.in
+' >> $CONFIG_STATUS
+  sed 1,${ac_max_here_lines}d conftest.vals > conftest.tail
+  rm -f conftest.vals
+  mv conftest.tail conftest.vals
+done
+rm -f conftest.vals
+
+cat >> $CONFIG_STATUS <<\EOF
+  rm -f conftest.frag conftest.h
+  echo "/* $ac_file.  Generated automatically by configure.  */" > conftest.h
+  cat conftest.in >> conftest.h
+  rm -f conftest.in
+  if cmp -s $ac_file conftest.h 2>/dev/null; then
+    echo "$ac_file is unchanged"
+    rm -f conftest.h
+  else
+    # Remove last slash and all that follows it.  Not all systems have dirname.
+      ac_dir=`echo $ac_file|sed 's%/[^/][^/]*$%%'`
+      if test "$ac_dir" != "$ac_file" && test "$ac_dir" != .; then
+      # The file is in a subdirectory.
+      test ! -d "$ac_dir" && mkdir "$ac_dir"
+    fi
+    rm -f $ac_file
+    mv conftest.h $ac_file
+  fi
+fi; done
+
+EOF
+cat >> $CONFIG_STATUS <<EOF
+
+EOF
+cat >> $CONFIG_STATUS <<\EOF
+
+exit 0
+EOF
+chmod +x $CONFIG_STATUS
+rm -fr confdefs* $ac_clean_files
+test "$no_create" = yes || ${CONFIG_SHELL-/bin/sh} $CONFIG_STATUS || exit 1
+
diff --git a/contrib/php4/configure.in b/contrib/php4/configure.in
new file mode 100644 (file)
index 0000000..bf0553a
--- /dev/null
@@ -0,0 +1,86 @@
+
+AC_INIT(Makefile.in)
+
+AC_DEFUN(PHP_WITH_PHP_CONFIG,[
+  AC_ARG_WITH(php-config,
+[  --with-php-config=[PATH]],[
+  PHP_CONFIG=$withval
+],[
+  PHP_CONFIG=php-config
+])
+
+  prefix=`$PHP_CONFIG --prefix 2>/dev/null`
+  INCLUDES=`$PHP_CONFIG --includes 2>/dev/null`
+  EXTENSION_DIR=`$PHP_CONFIG --extension-dir`
+  if test -z "$prefix"; then
+    AC_MSG_ERROR(Cannot find php-config. Please use --with-php-config=[PATH])
+  fi
+  AC_MSG_CHECKING(for PHP prefix)
+  AC_MSG_RESULT($prefix)
+  AC_MSG_CHECKING(for PHP includes)
+  AC_MSG_RESULT($INCLUDES)
+  AC_MSG_CHECKING(for PHP extension directory)
+  AC_MSG_RESULT($EXTENSION_DIR)
+])
+
+abs_srcdir=`(cd $srcdir && pwd)`
+
+php_always_shared=yes
+
+AC_PROG_CC
+AC_PROG_CC_C_O
+
+PHP_WITH_PHP_CONFIG
+
+AC_PREFIX_DEFAULT()
+
+sinclude(config.m4)
+
+enable_static=no
+enable_shared=yes
+
+AC_PROG_LIBTOOL
+
+SHARED_LIBTOOL='$(LIBTOOL)'
+PHP_COMPILE='$(LIBTOOL) --mode=compile $(COMPILE) -c $<'
+phplibdir="`pwd`/modules"
+
+test "$prefix" = "NONE" && prefix="/usr/local"
+test "$exec_prefix" = "NONE" && exec_prefix='$(prefix)'
+
+PHP_SUBST(prefix)
+PHP_SUBST(exec_prefix)
+PHP_SUBST(libdir)
+PHP_SUBST(prefix)
+PHP_SUBST(phplibdir)
+
+PHP_SUBST(PHP_COMPILE)
+PHP_SUBST(CC)
+PHP_SUBST(CFLAGS)
+PHP_SUBST(CPP)
+PHP_SUBST(CPPFLAGS)
+PHP_SUBST(CXX)
+PHP_SUBST(DEFS)
+PHP_SUBST(EXTENSION_DIR)
+PHP_SUBST(EXTRA_LDFLAGS)
+PHP_SUBST(EXTRA_LIBS)
+PHP_SUBST(INCLUDES)
+PHP_SUBST(LEX)
+PHP_SUBST(LEX_OUTPUT_ROOT)
+PHP_SUBST(LFLAGS)
+PHP_SUBST(SHARED_LIBTOOL)
+PHP_SUBST(LIBTOOL)
+PHP_SUBST(SHELL)
+
+PHP_FAST_OUTPUT(Makefile)
+
+PHP_GEN_CONFIG_VARS
+PHP_GEN_MAKEFILES
+
+test -d modules || mkdir modules
+touch .deps
+
+AC_CONFIG_HEADER(php_config.h)
+
+AC_OUTPUT()
diff --git a/contrib/php4/dynlib.m4 b/contrib/php4/dynlib.m4
new file mode 100644 (file)
index 0000000..77c607c
--- /dev/null
@@ -0,0 +1,64 @@
+
+
+
+AC_DEFUN(LIB_SHARED_CONVENIENCE,[
+  lib_target="\$(LTLIBRARY_NAME)"
+  cat >>$1<<EOF
+\$(LTLIBRARY_NAME): \$(LTLIBRARY_SHARED_OBJECTS) \$(LTLIBRARY_DEPENDENCIES)
+       \$(SHARED_LIBTOOL) --mode=link \$(CCLD) \$(CFLAGS) \$(EXTRA_CFLAGS) \$(LDFLAGS) -o \[$]@ \$(LTLIBRARY_LDFLAGS) \$(LTLIBRARY_OBJECTS) \$(LTLIBRARY_SHARED_LIBADD)
+
+EOF
+])
+
+AC_DEFUN(LIB_SHARED_MODULE,[
+  lib_target="\$(LTLIBRARY_SHARED_NAME)"
+  cat >>$1<<EOF
+\$(LTLIBRARY_SHARED_NAME): \$(LTLIBRARY_SHARED_OBJECTS) \$(LTLIBRARY_DEPENDENCIES)
+       \$(SHARED_LIBTOOL) --mode=link \$(CCLD) \$(CFLAGS) \$(EXTRA_CFLAGS) \$(LDFLAGS) -o \[$]@ -avoid-version -module -rpath \$(phplibdir) \$(LTLIBRARY_LDFLAGS) \$(LTLIBRARY_OBJECTS) \$(LTLIBRARY_SHARED_LIBADD)
+       \$(SHARED_LIBTOOL) --mode=install cp \[$]@ \$(phplibdir)
+
+EOF
+])
+
+AC_DEFUN(LIB_STATIC_CONVENIENCE,[
+  lib_target="\$(LTLIBRARY_NAME)"
+  cat >>$1<<EOF
+\$(LTLIBRARY_NAME): \$(LTLIBRARY_OBJECTS) \$(LTLIBRARY_DEPENDENCIES)
+       \$(LINK) \$(LTLIBRARY_LDFLAGS) \$(LTLIBRARY_OBJECTS) \$(LTLIBRARY_LIBADD)
+
+EOF
+])
+
+dnl LIB_BUILD(path, shared, convenience)
+dnl sets up path to build a shared/static convenience/module
+AC_DEFUN(LIB_BUILD,[
+  lib_makefile="$1/libs.mk"
+  lib_target=""
+  
+  $php_shtool mkdir -p $1
+  cat >$lib_makefile<<EOF
+LTLIBRARY_OBJECTS = \$(LTLIBRARY_SOURCES:.c=.lo)
+LTLIBRARY_SHARED_OBJECTS = \$(LTLIBRARY_OBJECTS:.lo=.slo)
+EOF
+
+  if test "$2" = "shared" || test "$2" = "yes"; then
+    lib_build_shared=yes
+    if test -n "$3"; then
+dnl ---------------------------------------- Shared Convenience
+      LIB_SHARED_CONVENIENCE($lib_makefile)
+    else
+dnl ---------------------------------------- Shared Module
+      LIB_SHARED_MODULE($lib_makefile)
+    fi
+  else
+dnl ---------------------------------------- Static Convenience = Static Module
+    LIB_STATIC_CONVENIENCE($lib_makefile)
+  fi
+
+dnl ---------------------------------------- Generate build targets
+  if test -n "$lib_target"; then
+    cat >>$lib_makefile<<EOF
+targets = $lib_target
+EOF
+  fi
+])
diff --git a/contrib/php4/examples/rrd_create.php b/contrib/php4/examples/rrd_create.php
new file mode 100644 (file)
index 0000000..d3ef206
--- /dev/null
@@ -0,0 +1,31 @@
+<?
+
+ ## the following line is only needed if built as a self-contained
+ ## extension.  If you build the rrdtool module as an embedded
+ ## extension, the rrd_* functions will always be available, so you
+ ## do not need the dl() call.
+ dl("rrdtool.so");
+
+ ##
+ ## demonstration of the rrd_create() command
+ ##
+
+  $_opts = array( "--step", "300", "--start", 0,
+                 "DS:input:COUNTER:900:0:U",
+                 "DS:output:COUNTER:900:0:U",
+                 "RRA:AVERAGE:0.5:1:1000",
+                 "RRA:MIN:0.5:1:1000",
+                 "RRA:MAX:0.5:1:1000"
+               );
+
+  $ret = rrd_create("/tmp/test.rrd", $_opts, count($_opts));
+
+  if ( $ret == 0 )
+  {
+      $err = rrd_error();
+      echo "Create error: $err\n";
+  }
+  /*  else rrd_create was successful  */
+
+
+?>
diff --git a/contrib/php4/examples/rrd_fetch.php b/contrib/php4/examples/rrd_fetch.php
new file mode 100644 (file)
index 0000000..470fb9f
--- /dev/null
@@ -0,0 +1,55 @@
+<?
+
+ ## the following line is only needed if built as a self-contained
+ ## extension.  If you build the rrdtool module as an embedded
+ ## extension, the rrd_* functions will always be available, so you
+ ## do not need the dl() call.
+ dl("rrdtool.so");
+
+ ##
+ ## demonstration of the rrd_fetch() command
+ ##
+
+
+
+  $opts = array ( "AVERAGE", "--start", "-1h" );
+
+  $ret = rrd_fetch("/dir/router-port2.rrd", $opts, count($opts));
+  ##
+  ## if $ret is an array, rrd_fetch() succeeded
+  ## 
+  if ( is_array($ret) )
+  {
+      echo "Start time    (epoch): $ret[start]\n";
+      echo "End time      (epoch): $ret[end]\n";
+      echo "Step interval (epoch): $ret[step]\n";
+
+      ##
+      ## names of the DS's (data sources) will be 
+      ## contained in the array $ret[ds_namv][..]
+      ##
+      for($i = 0; $i < count($ret[ds_namv]); $i++)
+      {
+          $tmp = $ret[ds_namv][$i];
+          echo "$tmp \n";
+      }
+
+      ##
+      ## all data will be packed into the
+      ## $ret[data][..]  array
+      ##
+      for($i = 0; $i < count($ret[data]); $i++)
+      {
+          $tmp = $ret[data][$i];
+          echo "$hi\n";
+      }
+  }
+  else
+  {
+      $err = rrd_error();
+      echo "fetch() ERROR: $err\n";
+  }
+
+
+?>
diff --git a/contrib/php4/examples/rrd_graph.php b/contrib/php4/examples/rrd_graph.php
new file mode 100644 (file)
index 0000000..a0041b6
--- /dev/null
@@ -0,0 +1,47 @@
+<?
+
+ ## the following line is only needed if built as a self-contained
+ ## extension.  If you build the rrdtool module as an embedded
+ ## extension, the rrd_* functions will always be available, so you
+ ## do not need the dl() call.
+ dl("rrdtool.so");
+
+ ##
+ ## demonstration of the rrd_graph() command
+ ##
+
+   $opts = array( "--start", "-4d", 
+                  "DEF:in=/dir/router-port2.rrd:input:AVERAGE",
+                  "DEF:out=/dir/router-port2.rrd:output:AVERAGE",
+                  "LINE2:in#0000ff:Incoming Traffic Avg.",
+                  "PRINT:in:AVERAGE:incoming\: %1.2lf b/s",
+                  "PRINT:in:AVERAGE:incoming2\: %1.2lf b/s"
+                );
+
+
+   $ret = rrd_graph("/some-dir/router-port2.gif", $opts, count($opts));
+
+   ##
+   ## if $ret is an array, then rrd_graph was successful
+   ##
+   if ( is_array($ret) )
+   {
+       echo "Image size:  $ret[xsize] x $ret[ysize]\n";
+       
+
+       ##
+       ## all results from any PRINT commands will be
+       ## in the array $ret[calcpr][..]
+       ##
+       echo "rrd_graph1 print results: \n";
+
+       for ($i = 0; $i < count($ret[calcpr]); $i++)
+           echo $ret[calcpr][$i] . "\n";
+   }
+   else
+   {
+       $err = rrd_error();
+       echo "rrd_graph() ERROR: $err\n";
+   }
+
+?>
diff --git a/contrib/php4/examples/rrd_last.php b/contrib/php4/examples/rrd_last.php
new file mode 100644 (file)
index 0000000..1dbfad0
--- /dev/null
@@ -0,0 +1,26 @@
+<?
+
+ ## the following line is only needed if built as a self-contained
+ ## extension.  If you build the rrdtool module as an embedded
+ ## extension, the rrd_* functions will always be available, so you
+ ## do not need the dl() call.
+ dl("rrdtool.so");
+
+ ##
+ ## demonstration of the rrd_last() command
+ ##
+
+ $ret = rrd_last("/some/path/some-router-fe2.rrd");
+
+ if ( $ret != - 1 )
+ {
+     printf("Last update time:  %s\n", strftime("%m/%d/%Y %H:%M:%S"), $ret);
+ }
+ else
+ {
+     $err_msg = rrd_error();
+     echo "Error occurred:  $err_msg\n";
+ }
+
+
+?>
diff --git a/contrib/php4/examples/rrd_update.php b/contrib/php4/examples/rrd_update.php
new file mode 100644 (file)
index 0000000..5b4832c
--- /dev/null
@@ -0,0 +1,23 @@
+<?
+
+ ## the following line is only needed if built as a self-contained
+ ## extension.  If you build the rrdtool module as an embedded
+ ## extension, the rrd_* functions will always be available, so you
+ ## do not need the dl() call.
+ dl("rrdtool.so");
+
+ ##
+ ## demonstration of the rrd_update() command
+ ##
+
+  $ret = rrd_update("/some/file.rrd", "N:1245:98344");
+
+  if ( $ret == 0 )
+  {
+      $err = rrd_error();
+      echo "ERROR occurred: $err\n";
+  }
+ /* else rrd_update() was successful */
+
+
+?>
diff --git a/contrib/php4/install-sh b/contrib/php4/install-sh
new file mode 100644 (file)
index 0000000..e69de29
diff --git a/contrib/php4/ltconfig b/contrib/php4/ltconfig
new file mode 100755 (executable)
index 0000000..99b6fc8
--- /dev/null
@@ -0,0 +1,3031 @@
+#! /bin/sh
+
+# ltconfig - Create a system-specific libtool.
+# Copyright (C) 1996-1999 Free Software Foundation, Inc.
+# Originally by Gordon Matzigkeit <gord@gnu.ai.mit.edu>, 1996
+#
+# This file is free software; you can redistribute it and/or modify it
+# under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful, but
+# WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+# General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+#
+# As a special exception to the GNU General Public License, if you
+# distribute this file as part of a program that contains a
+# configuration script generated by Autoconf, you may include it under
+# the same distribution terms that you use for the rest of that program.
+
+# A lot of this script is taken from autoconf-2.10.
+
+# Check that we are running under the correct shell.
+SHELL=${CONFIG_SHELL-/bin/sh}
+echo=echo
+if test "X$1" = X--no-reexec; then
+  # Discard the --no-reexec flag, and continue.
+  shift
+elif test "X$1" = X--fallback-echo; then
+  # Avoid inline document here, it may be left over
+  :
+elif test "X`($echo '\t') 2>/dev/null`" = 'X\t'; then
+  # Yippee, $echo works!
+  :
+else
+  # Restart under the correct shell.
+  exec "$SHELL" "$0" --no-reexec ${1+"$@"}
+fi
+
+if test "X$1" = X--fallback-echo; then
+  # used as fallback echo
+  shift
+  cat <<EOF
+$*
+EOF
+  exit 0
+fi
+
+# Find the correct PATH separator.  Usually this is `:', but
+# DJGPP uses `;' like DOS.
+if test "X${PATH_SEPARATOR+set}" != "Xset"; then
+  UNAME=${UNAME-`uname 2>/dev/null`}
+  case X$UNAME in
+    *-DOS) PATH_SEPARATOR=';' ;;
+    *)     PATH_SEPARATOR=':' ;;
+  esac
+fi
+
+# The HP-UX ksh and POSIX shell print the target directory to stdout
+# if CDPATH is set.
+if test "${CDPATH+set}" = set; then CDPATH=; export CDPATH; fi
+
+if test "X${echo_test_string+set}" != "Xset"; then
+  # find a string as large as possible, as long as the shell can cope with it
+  for cmd in 'sed 50q "$0"' 'sed 20q "$0"' 'sed 10q "$0"' 'sed 2q "$0"' 'echo test'; do
+    # expected sizes: less than 2Kb, 1Kb, 512 bytes, 16 bytes, ...
+    if (echo_test_string="`eval $cmd`") 2>/dev/null &&
+       echo_test_string="`eval $cmd`" &&
+       (test "X$echo_test_string" = "X$echo_test_string") 2>/dev/null; then
+      break
+    fi
+  done
+fi
+
+if test "X`($echo '\t') 2>/dev/null`" != 'X\t' ||
+   test "X`($echo "$echo_test_string") 2>/dev/null`" != X"$echo_test_string"; then
+  # The Solaris, AIX, and Digital Unix default echo programs unquote
+  # backslashes.  This makes it impossible to quote backslashes using
+  #   echo "$something" | sed 's/\\/\\\\/g'
+  #
+  # So, first we look for a working echo in the user's PATH.
+
+  IFS="${IFS=  }"; save_ifs="$IFS"; IFS="${IFS}${PATH_SEPARATOR}"
+  for dir in $PATH /usr/ucb; do
+    if (test -f $dir/echo || test -f $dir/echo$ac_exeext) &&
+       test "X`($dir/echo '\t') 2>/dev/null`" = 'X\t' &&
+       test "X`($dir/echo "$echo_test_string") 2>/dev/null`" = X"$echo_test_string"; then
+      echo="$dir/echo"
+      break
+    fi
+  done
+  IFS="$save_ifs"
+
+  if test "X$echo" = Xecho; then
+    # We didn't find a better echo, so look for alternatives.
+    if test "X`(print -r '\t') 2>/dev/null`" = 'X\t' &&
+       test "X`(print -r "$echo_test_string") 2>/dev/null`" = X"$echo_test_string"; then
+      # This shell has a builtin print -r that does the trick.
+      echo='print -r'
+    elif (test -f /bin/ksh || test -f /bin/ksh$ac_exeext) &&
+        test "X$CONFIG_SHELL" != X/bin/ksh; then
+      # If we have ksh, try running ltconfig again with it.
+      ORIGINAL_CONFIG_SHELL="${CONFIG_SHELL-/bin/sh}"
+      export ORIGINAL_CONFIG_SHELL
+      CONFIG_SHELL=/bin/ksh
+      export CONFIG_SHELL
+      exec "$CONFIG_SHELL" "$0" --no-reexec ${1+"$@"}
+    else
+      # Try using printf.
+      echo='printf "%s\n"'
+      if test "X`($echo '\t') 2>/dev/null`" = 'X\t' &&
+        test "X`($echo "$echo_test_string") 2>/dev/null`" = X"$echo_test_string"; then
+       # Cool, printf works
+       :
+      elif test "X`("$ORIGINAL_CONFIG_SHELL" "$0" --fallback-echo '\t') 2>/dev/null`" = 'X\t' &&
+          test "X`("$ORIGINAL_CONFIG_SHELL" "$0" --fallback-echo "$echo_test_string") 2>/dev/null`" = X"$echo_test_string"; then
+       CONFIG_SHELL="$ORIGINAL_CONFIG_SHELL"
+       export CONFIG_SHELL
+       SHELL="$CONFIG_SHELL"
+       export SHELL
+       echo="$CONFIG_SHELL $0 --fallback-echo"
+      elif test "X`("$CONFIG_SHELL" "$0" --fallback-echo '\t') 2>/dev/null`" = 'X\t' &&
+          test "X`("$CONFIG_SHELL" "$0" --fallback-echo "$echo_test_string") 2>/dev/null`" = X"$echo_test_string"; then
+       echo="$CONFIG_SHELL $0 --fallback-echo"
+      else
+       # maybe with a smaller string...
+       prev=:
+
+       for cmd in 'echo test' 'sed 2q "$0"' 'sed 10q "$0"' 'sed 20q "$0"' 'sed 50q "$0"'; do
+         if (test "X$echo_test_string" = "X`eval $cmd`") 2>/dev/null; then
+           break
+         fi
+         prev="$cmd"
+       done
+
+       if test "$prev" != 'sed 50q "$0"'; then
+         echo_test_string=`eval $prev`
+         export echo_test_string
+         exec "${ORIGINAL_CONFIG_SHELL}" "$0" ${1+"$@"}
+       else
+         # Oops.  We lost completely, so just stick with echo.
+         echo=echo
+       fi
+      fi
+    fi
+  fi
+fi
+
+# Sed substitution that helps us do robust quoting.  It backslashifies
+# metacharacters that are still active within double-quoted strings.
+Xsed='sed -e s/^X//'
+sed_quote_subst='s/\([\\"\\`$\\\\]\)/\\\1/g'
+
+# Same as above, but do not quote variable references.
+double_quote_subst='s/\([\\"\\`\\\\]\)/\\\1/g'
+
+# Sed substitution to delay expansion of an escaped shell variable in a
+# double_quote_subst'ed string.
+delay_variable_subst='s/\\\\\\\\\\\$/\\\\\\$/g'
+
+# The name of this program.
+progname=`$echo "X$0" | $Xsed -e 's%^.*/%%'`
+
+# Constants:
+PROGRAM=ltconfig
+PACKAGE=libtool
+VERSION=1.3.3-freebsd-ports
+TIMESTAMP=" (1.385.2.181 1999/07/02 15:49:11)"
+ac_compile='${CC-cc} -c $CFLAGS $CPPFLAGS conftest.c 1>&5'
+ac_link='${CC-cc} -o conftest $CFLAGS $CPPFLAGS $LDFLAGS conftest.c $LIBS 1>&5'
+rm="rm -f"
+
+help="Try \`$progname --help' for more information."
+
+# Global variables:
+default_ofile=libtool
+can_build_shared=yes
+enable_shared=yes
+# All known linkers require a `.a' archive for static linking (except M$VC,
+# which needs '.lib').
+enable_static=yes
+enable_fast_install=yes
+install_ltlibs=yes
+release_suffix=yes
+enable_dlopen=unknown
+enable_win32_dll=no
+ltmain=
+silent=
+srcdir=
+ac_config_guess=
+ac_config_sub=
+host=
+nonopt=
+ofile="$default_ofile"
+verify_host=yes
+with_gcc=no
+with_gnu_ld=no
+need_locks=yes
+ac_ext=c
+objext=o
+libext=a
+exeext=
+cache_file=
+
+old_AR="$AR"
+old_CC="$CC"
+old_CFLAGS="$CFLAGS"
+old_CPPFLAGS="$CPPFLAGS"
+old_LDFLAGS="$LDFLAGS"
+old_LD="$LD"
+old_LN_S="$LN_S"
+old_LIBS="$LIBS"
+old_NM="$NM"
+old_RANLIB="$RANLIB"
+old_DLLTOOL="$DLLTOOL"
+old_OBJDUMP="$OBJDUMP"
+old_AS="$AS"
+
+# Parse the command line options.
+args=
+prev=
+for option
+do
+  case "$option" in
+  -*=*) optarg=`echo "$option" | sed 's/[-_a-zA-Z0-9]*=//'` ;;
+  *) optarg= ;;
+  esac
+
+  # If the previous option needs an argument, assign it.
+  if test -n "$prev"; then
+    eval "$prev=\$option"
+    prev=
+    continue
+  fi
+
+  case "$option" in
+  --help) cat <<EOM
+Usage: $progname [OPTION]... [HOST [LTMAIN]]
+
+Generate a system-specific libtool script.
+
+    --debug                enable verbose shell tracing
+    --disable-shared       do not build shared libraries
+    --disable-static       do not build static libraries
+    --disable-fast-install do not optimize for fast installation
+    --disable-ltlibs       don't install the .la archives
+    --release-ignore       don't use -release specification
+    --release-suffix       use -release suffix for all files
+    --enable-dlopen        enable dlopen support
+    --enable-win32-dll     enable building dlls on win32 hosts
+    --help                 display this help and exit
+    --no-verify            do not verify that HOST is a valid host type
+-o, --output=FILE          specify the output file [default=$default_ofile]
+    --quiet                same as \`--silent'
+    --silent               do not print informational messages
+    --srcdir=DIR           find \`config.guess' in DIR
+    --version              output version information and exit
+    --with-gcc             assume that the GNU C compiler will be used
+    --with-gnu-ld          assume that the C compiler uses the GNU linker
+    --disable-lock         disable file locking
+    --cache-file=FILE      configure cache file
+
+LTMAIN is the \`ltmain.sh' shell script fragment or \`ltmain.c' program
+that provides basic libtool functionality.
+
+HOST is the canonical host system name [default=guessed].
+EOM
+  exit 0
+  ;;
+
+  --debug)
+    echo "$progname: enabling shell trace mode"
+    set -x
+    ;;
+
+  --disable-shared) enable_shared=no ;;
+
+  --disable-static) enable_static=no ;;
+
+  --disable-fast-install) enable_fast_install=no ;;
+
+  --disable-ltlibs) install_ltlibs=no ;;
+
+  --release-ignore) release_suffix=no ;;
+
+  --release-suffix) release_suffix=all ;;
+
+  --enable-dlopen) enable_dlopen=yes ;;
+
+  --enable-win32-dll) enable_win32_dll=yes ;;
+
+  --quiet | --silent) silent=yes ;;
+
+  --srcdir) prev=srcdir ;;
+  --srcdir=*) srcdir="$optarg" ;;
+
+  --no-verify) verify_host=no ;;
+
+  --output | -o) prev=ofile ;;
+  --output=*) ofile="$optarg" ;;
+
+  --version) echo "$PROGRAM (GNU $PACKAGE) $VERSION$TIMESTAMP"; exit 0 ;;
+
+  --with-gcc) with_gcc=yes ;;
+  --with-gnu-ld) with_gnu_ld=yes ;;
+
+  --disable-lock) need_locks=no ;;
+
+  --cache-file=*) cache_file="$optarg" ;;
+
+  -*)
+    echo "$progname: unrecognized option \`$option'" 1>&2
+    echo "$help" 1>&2
+    exit 1
+    ;;
+
+  *)
+    if test -z "$ltmain"; then
+      ltmain="$option"
+    elif test -z "$host"; then
+# This generates an unnecessary warning for sparc-sun-solaris4.1.3_U1
+#      if test -n "`echo $option| sed 's/[-a-z0-9.]//g'`"; then
+#        echo "$progname: warning \`$option' is not a valid host type" 1>&2
+#      fi
+      host="$option"
+    else
+      echo "$progname: too many arguments" 1>&2
+      echo "$help" 1>&2
+      exit 1
+    fi ;;
+  esac
+done
+
+if test -z "$ltmain"; then
+  echo "$progname: you must specify a LTMAIN file" 1>&2
+  echo "$help" 1>&2
+  exit 1
+fi
+
+if test ! -f "$ltmain"; then
+  echo "$progname: \`$ltmain' does not exist" 1>&2
+  echo "$help" 1>&2
+  exit 1
+fi
+
+# Quote any args containing shell metacharacters.
+ltconfig_args=
+for arg
+do
+  case "$arg" in
+  *" "*|*"     "*|*[\[\]\~\#\$\^\&\*\(\)\{\}\\\|\;\<\>\?]*)
+  ltconfig_args="$ltconfig_args '$arg'" ;;
+  *) ltconfig_args="$ltconfig_args $arg" ;;
+  esac
+done
+
+# A relevant subset of AC_INIT.
+
+# File descriptor usage:
+# 0 standard input
+# 1 file creation
+# 2 errors and warnings
+# 3 some systems may open it to /dev/tty
+# 4 used on the Kubota Titan
+# 5 compiler messages saved in config.log
+# 6 checking for... messages and results
+if test "$silent" = yes; then
+  exec 6>/dev/null
+else
+  exec 6>&1
+fi
+exec 5>>./config.log
+
+# NLS nuisances.
+# Only set LANG and LC_ALL to C if already set.
+# These must not be set unconditionally because not all systems understand
+# e.g. LANG=C (notably SCO).
+if test "${LC_ALL+set}" = set; then LC_ALL=C; export LC_ALL; fi
+if test "${LANG+set}"   = set; then LANG=C;   export LANG;   fi
+
+if test -n "$cache_file" && test -r "$cache_file"; then
+  echo "loading cache $cache_file within ltconfig"
+  . $cache_file
+fi
+
+if (echo "testing\c"; echo 1,2,3) | grep c >/dev/null; then
+  # Stardent Vistra SVR4 grep lacks -e, says ghazi@caip.rutgers.edu.
+  if (echo -n testing; echo 1,2,3) | sed s/-n/xn/ | grep xn >/dev/null; then
+    ac_n= ac_c='
+' ac_t='       '
+  else
+    ac_n=-n ac_c= ac_t=
+  fi
+else
+  ac_n= ac_c='\c' ac_t=
+fi
+
+if test -z "$srcdir"; then
+  # Assume the source directory is the same one as the path to LTMAIN.
+  srcdir=`$echo "X$ltmain" | $Xsed -e 's%/[^/]*$%%'`
+  test "$srcdir" = "$ltmain" && srcdir=.
+fi
+
+trap "$rm conftest*; exit 1" 1 2 15
+if test "$verify_host" = yes; then
+  # Check for config.guess and config.sub.
+  ac_aux_dir=
+  for ac_dir in $srcdir $srcdir/.. $srcdir/../..; do
+    if test -f $ac_dir/config.guess; then
+      ac_aux_dir=$ac_dir
+      break
+    fi
+  done
+  if test -z "$ac_aux_dir"; then
+    echo "$progname: cannot find config.guess in $srcdir $srcdir/.. $srcdir/../.." 1>&2
+    echo "$help" 1>&2
+    exit 1
+  fi
+  ac_config_guess=$ac_aux_dir/config.guess
+  ac_config_sub=$ac_aux_dir/config.sub
+
+  # Make sure we can run config.sub.
+  if $SHELL $ac_config_sub sun4 >/dev/null 2>&1; then :
+  else
+    echo "$progname: cannot run $ac_config_sub" 1>&2
+    echo "$help" 1>&2
+    exit 1
+  fi
+
+  echo $ac_n "checking host system type""... $ac_c" 1>&6
+
+  host_alias=$host
+  case "$host_alias" in
+  "")
+    if host_alias=`$SHELL $ac_config_guess`; then :
+    else
+      echo "$progname: cannot guess host type; you must specify one" 1>&2
+      echo "$help" 1>&2
+      exit 1
+    fi ;;
+  esac
+  host=`$SHELL $ac_config_sub $host_alias`
+  echo "$ac_t$host" 1>&6
+
+  # Make sure the host verified.
+  test -z "$host" && exit 1
+
+elif test -z "$host"; then
+  echo "$progname: you must specify a host type if you use \`--no-verify'" 1>&2
+  echo "$help" 1>&2
+  exit 1
+else
+  host_alias=$host
+fi
+
+# Transform linux* to *-*-linux-gnu*, to support old configure scripts.
+case "$host_os" in
+linux-gnu*) ;;
+linux*) host=`echo $host | sed 's/^\(.*-.*-linux\)\(.*\)$/\1-gnu\2/'`
+esac
+
+host_cpu=`echo $host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\1/'`
+host_vendor=`echo $host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\2/'`
+host_os=`echo $host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\3/'`
+
+case "$host_os" in
+aix3*)
+  # AIX sometimes has problems with the GCC collect2 program.  For some
+  # reason, if we set the COLLECT_NAMES environment variable, the problems
+  # vanish in a puff of smoke.
+  if test "${COLLECT_NAMES+set}" != set; then
+    COLLECT_NAMES=
+    export COLLECT_NAMES
+  fi
+  ;;
+esac
+
+# Determine commands to create old-style static archives.
+old_archive_cmds='$AR cru $oldlib$oldobjs'
+old_postinstall_cmds='chmod 644 $oldlib'
+old_postuninstall_cmds=
+
+# Set a sane default for `AR'.
+test -z "$AR" && AR=ar
+
+# Set a sane default for `OBJDUMP'.
+test -z "$OBJDUMP" && OBJDUMP=objdump
+
+# If RANLIB is not set, then run the test.
+if test "${RANLIB+set}" != "set"; then
+  result=no
+
+  echo $ac_n "checking for ranlib... $ac_c" 1>&6
+  IFS="${IFS=  }"; save_ifs="$IFS"; IFS="${IFS}${PATH_SEPARATOR}"
+  for dir in $PATH; do
+    test -z "$dir" && dir=.
+    if test -f $dir/ranlib || test -f $dir/ranlib$ac_exeext; then
+      RANLIB="ranlib"
+      result="ranlib"
+      break
+    fi
+  done
+  IFS="$save_ifs"
+
+  echo "$ac_t$result" 1>&6
+fi
+
+if test -n "$RANLIB"; then
+  old_archive_cmds="$old_archive_cmds~\$RANLIB \$oldlib"
+  old_postinstall_cmds="\$RANLIB \$oldlib~$old_postinstall_cmds"
+fi
+
+# Set sane defaults for `DLLTOOL', `OBJDUMP', and `AS', used on cygwin.
+test -z "$DLLTOOL" && DLLTOOL=dlltool
+test -z "$OBJDUMP" && OBJDUMP=objdump
+test -z "$AS" && AS=as
+
+# Check to see if we are using GCC.
+if test "$with_gcc" != yes || test -z "$CC"; then
+  # If CC is not set, then try to find GCC or a usable CC.
+  if test -z "$CC"; then
+    echo $ac_n "checking for gcc... $ac_c" 1>&6
+    IFS="${IFS=        }"; save_ifs="$IFS"; IFS="${IFS}${PATH_SEPARATOR}"
+    for dir in $PATH; do
+      test -z "$dir" && dir=.
+      if test -f $dir/gcc || test -f $dir/gcc$ac_exeext; then
+       CC="gcc"
+       break
+      fi
+    done
+    IFS="$save_ifs"
+
+    if test -n "$CC"; then
+      echo "$ac_t$CC" 1>&6
+    else
+      echo "$ac_t"no 1>&6
+    fi
+  fi
+
+  # Not "gcc", so try "cc", rejecting "/usr/ucb/cc".
+  if test -z "$CC"; then
+    echo $ac_n "checking for cc... $ac_c" 1>&6
+    IFS="${IFS=        }"; save_ifs="$IFS"; IFS="${IFS}${PATH_SEPARATOR}"
+    cc_rejected=no
+    for dir in $PATH; do
+      test -z "$dir" && dir=.
+      if test -f $dir/cc || test -f $dir/cc$ac_exeext; then
+       if test "$dir/cc" = "/usr/ucb/cc"; then
+         cc_rejected=yes
+         continue
+       fi
+       CC="cc"
+       break
+      fi
+    done
+    IFS="$save_ifs"
+    if test $cc_rejected = yes; then
+      # We found a bogon in the path, so make sure we never use it.
+      set dummy $CC
+      shift
+      if test $# -gt 0; then
+       # We chose a different compiler from the bogus one.
+       # However, it has the same name, so the bogon will be chosen
+       # first if we set CC to just the name; use the full file name.
+       shift
+       set dummy "$dir/cc" "$@"
+       shift
+       CC="$@"
+      fi
+    fi
+
+    if test -n "$CC"; then
+      echo "$ac_t$CC" 1>&6
+    else
+      echo "$ac_t"no 1>&6
+    fi
+
+    if test -z "$CC"; then
+      echo "$progname: error: no acceptable cc found in \$PATH" 1>&2
+      exit 1
+    fi
+  fi
+
+  # Now see if the compiler is really GCC.
+  with_gcc=no
+  echo $ac_n "checking whether we are using GNU C... $ac_c" 1>&6
+  echo "$progname:581: checking whether we are using GNU C" >&5
+
+  $rm conftest.c
+  cat > conftest.c <<EOF
+#ifdef __GNUC__
+  yes;
+#endif
+EOF
+  if { ac_try='${CC-cc} -E conftest.c'; { (eval echo $progname:589: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; } | egrep yes >/dev/null 2>&1; then
+    with_gcc=yes
+  fi
+  $rm conftest.c
+  echo "$ac_t$with_gcc" 1>&6
+fi
+
+# Allow CC to be a program name with arguments.
+set dummy $CC
+compiler="$2"
+
+echo $ac_n "checking for object suffix... $ac_c" 1>&6
+$rm conftest*
+echo 'int i = 1;' > conftest.c
+echo "$progname:603: checking for object suffix" >& 5
+if { (eval echo $progname:604: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>conftest.err; }; then
+  # Append any warnings to the config.log.
+  cat conftest.err 1>&5
+
+  for ac_file in conftest.*; do
+    case $ac_file in
+    *.c) ;;
+    *) objext=`echo $ac_file | sed -e s/conftest.//` ;;
+    esac
+  done
+else
+  cat conftest.err 1>&5
+  echo "$progname: failed program was:" >&5
+  cat conftest.c >&5
+fi
+$rm conftest*
+echo "$ac_t$objext" 1>&6
+
+echo $ac_n "checking for executable suffix... $ac_c" 1>&6
+if eval "test \"`echo '$''{'ac_cv_exeext'+set}'`\" = set"; then
+  echo $ac_n "(cached) $ac_c" 1>&6
+else
+  ac_cv_exeext="no"
+  $rm conftest*
+  echo 'main () { return 0; }' > conftest.c
+  echo "$progname:629: checking for executable suffix" >& 5
+  if { (eval echo $progname:630: \"$ac_link\") 1>&5; (eval $ac_link) 2>conftest.err; }; then
+    # Append any warnings to the config.log.
+    cat conftest.err 1>&5
+
+    for ac_file in conftest.*; do
+      case $ac_file in
+      *.c | *.err | *.$objext ) ;;
+      *) ac_cv_exeext=.`echo $ac_file | sed -e s/conftest.//` ;;
+      esac
+    done
+  else
+    cat conftest.err 1>&5
+    echo "$progname: failed program was:" >&5
+    cat conftest.c >&5
+  fi
+  $rm conftest*
+fi
+if test "X$ac_cv_exeext" = Xno; then
+  exeext=""
+else
+  exeext="$ac_cv_exeext"
+fi
+echo "$ac_t$ac_cv_exeext" 1>&6
+
+echo $ac_n "checking for $compiler option to produce PIC... $ac_c" 1>&6
+pic_flag=
+special_shlib_compile_flags=
+wl=
+link_static_flag=
+no_builtin_flag=
+
+if test "$with_gcc" = yes; then
+  wl='-Wl,'
+  link_static_flag='-static'
+
+  case "$host_os" in
+  beos* | irix5* | irix6* | osf3* | osf4*)
+    # PIC is the default for these OSes.
+    ;;
+  aix*)
+    # Below there is a dirty hack to force normal static linking with -ldl
+    # The problem is because libdl dynamically linked with both libc and
+    # libC (AIX C++ library), which obviously doesn't included in libraries
+    # list by gcc. This cause undefined symbols with -static flags.
+    # This hack allows C programs to be linked with "-static -ldl", but
+    # we not sure about C++ programs.
+    link_static_flag="$link_static_flag ${wl}-lC"
+    ;;
+  cygwin* | mingw* | os2*)
+    # We can build DLLs from non-PIC.
+    ;;
+  amigaos*)
+    # FIXME: we need at least 68020 code to build shared libraries, but
+    # adding the `-m68020' flag to GCC prevents building anything better,
+    # like `-m68040'.
+    pic_flag='-m68020 -resident32 -malways-restore-a4'
+    ;;
+  sysv4*MP*)
+    if test -d /usr/nec; then
+       pic_flag=-Kconform_pic
+    fi
+    ;;
+  *)
+    pic_flag='-fPIC'
+    ;;
+  esac
+else
+  # PORTME Check for PIC flags for the system compiler.
+  case "$host_os" in
+  aix3* | aix4*)
+    # All AIX code is PIC.
+    link_static_flag='-bnso -bI:/lib/syscalls.exp'
+    ;;
+
+  hpux9* | hpux10* | hpux11*)
+    # Is there a better link_static_flag that works with the bundled CC?
+    wl='-Wl,'
+    link_static_flag="${wl}-a ${wl}archive"
+    pic_flag='+Z'
+    ;;
+
+  irix5* | irix6*)
+    wl='-Wl,'
+    link_static_flag='-non_shared'
+    # PIC (with -KPIC) is the default.
+    ;;
+
+  cygwin* | mingw* | os2*)
+    # We can build DLLs from non-PIC.
+    ;;
+
+  osf3* | osf4*)
+    # All OSF/1 code is PIC.
+    wl='-Wl,'
+    link_static_flag='-non_shared'
+    ;;
+
+  sco3.2v5*)
+    pic_flag='-Kpic'
+    link_static_flag='-dn'
+    special_shlib_compile_flags='-belf'
+    ;;
+
+  solaris*)
+    pic_flag='-KPIC'
+    link_static_flag='-Bstatic'
+    wl='-Wl,'
+    ;;
+
+  sunos4*)
+    pic_flag='-PIC'
+    link_static_flag='-Bstatic'
+    wl='-Qoption ld '
+    ;;
+
+  sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*)
+    pic_flag='-KPIC'
+    link_static_flag='-Bstatic'
+    wl='-Wl,'
+    ;;
+
+  uts4*)
+    pic_flag='-pic'
+    link_static_flag='-Bstatic'
+    ;;
+  sysv4*MP*)
+    if test -d /usr/nec ;then
+      pic_flag='-Kconform_pic'
+      link_static_flag='-Bstatic'
+    fi
+    ;;
+  *)
+    can_build_shared=no
+    ;;
+  esac
+fi
+
+if test -n "$pic_flag"; then
+  echo "$ac_t$pic_flag" 1>&6
+
+  # Check to make sure the pic_flag actually works.
+  echo $ac_n "checking if $compiler PIC flag $pic_flag works... $ac_c" 1>&6
+  $rm conftest*
+  echo "int some_variable = 0;" > conftest.c
+  save_CFLAGS="$CFLAGS"
+  CFLAGS="$CFLAGS $pic_flag -DPIC"
+  echo "$progname:776: checking if $compiler PIC flag $pic_flag works" >&5
+  if { (eval echo $progname:777: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>conftest.err; } && test -s conftest.$objext; then
+    # Append any warnings to the config.log.
+    cat conftest.err 1>&5
+    
+    case "$host_os" in
+    hpux9* | hpux10* | hpux11*)
+      # On HP-UX, both CC and GCC only warn that PIC is supported... then they
+      # create non-PIC objects.  So, if there were any warnings, we assume that
+      # PIC is not supported.
+      if test -s conftest.err; then
+       echo "$ac_t"no 1>&6
+       can_build_shared=no
+       pic_flag=
+      else
+       echo "$ac_t"yes 1>&6
+       pic_flag=" $pic_flag"
+      fi
+      ;;
+    *)
+      echo "$ac_t"yes 1>&6
+      pic_flag=" $pic_flag"
+      ;;
+    esac
+  else
+    # Append any errors to the config.log.
+    cat conftest.err 1>&5
+    can_build_shared=no
+    pic_flag=
+    echo "$ac_t"no 1>&6
+  fi
+  CFLAGS="$save_CFLAGS"
+  $rm conftest*
+else
+  echo "$ac_t"none 1>&6
+fi
+
+# Check to see if options -o and -c are simultaneously supported by compiler
+echo $ac_n "checking if $compiler supports -c -o file.o... $ac_c" 1>&6
+$rm -r conftest 2>/dev/null
+mkdir conftest
+cd conftest
+$rm conftest*
+echo "int some_variable = 0;" > conftest.c
+mkdir out
+# According to Tom Tromey, Ian Lance Taylor reported there are C compilers
+# that will create temporary files in the current directory regardless of
+# the output directory.  Thus, making CWD read-only will cause this test
+# to fail, enabling locking or at least warning the user not to do parallel
+# builds.
+chmod -w .
+save_CFLAGS="$CFLAGS"
+CFLAGS="$CFLAGS -o out/conftest2.o"
+echo "$progname:829: checking if $compiler supports -c -o file.o" >&5
+if { (eval echo $progname:830: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>out/conftest.err; } && test -s out/conftest2.o; then
+
+  # The compiler can only warn and ignore the option if not recognized
+  # So say no if there are warnings
+    if test -s out/conftest.err; then
+      echo "$ac_t"no 1>&6
+      compiler_c_o=no
+    else
+      echo "$ac_t"yes 1>&6
+      compiler_c_o=yes
+    fi
+else
+  # Append any errors to the config.log.
+  cat out/conftest.err 1>&5
+  compiler_c_o=no
+  echo "$ac_t"no 1>&6
+fi
+CFLAGS="$save_CFLAGS"
+chmod u+w .
+$rm conftest* out/*
+rmdir out
+cd ..
+rmdir conftest
+$rm -r conftest 2>/dev/null
+
+if test x"$compiler_c_o" = x"yes"; then
+  # Check to see if we can write to a .lo
+  echo $ac_n "checking if $compiler supports -c -o file.lo... $ac_c" 1>&6
+  $rm conftest*
+  echo "int some_variable = 0;" > conftest.c
+  save_CFLAGS="$CFLAGS"
+  CFLAGS="$CFLAGS -c -o conftest.lo"
+  echo "$progname:862: checking if $compiler supports -c -o file.lo" >&5
+if { (eval echo $progname:863: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>conftest.err; } && test -s conftest.lo; then
+
+    # The compiler can only warn and ignore the option if not recognized
+    # So say no if there are warnings
+      if test -s conftest.err; then
+       echo "$ac_t"no 1>&6
+       compiler_o_lo=no
+      else
+       echo "$ac_t"yes 1>&6
+       compiler_o_lo=yes
+      fi
+  else
+    # Append any errors to the config.log.
+    cat conftest.err 1>&5
+    compiler_o_lo=no
+    echo "$ac_t"no 1>&6
+  fi
+  CFLAGS="$save_CFLAGS"
+  $rm conftest*
+else
+  compiler_o_lo=no
+fi
+
+# Check to see if we can do hard links to lock some files if needed
+hard_links="nottested"
+if test "$compiler_c_o" = no && test "$need_locks" != no; then
+  # do not overwrite the value of need_locks provided by the user
+  echo $ac_n "checking if we can lock with hard links... $ac_c" 1>&6
+  hard_links=yes
+  $rm conftest*
+  ln conftest.a conftest.b 2>/dev/null && hard_links=no
+  touch conftest.a
+  ln conftest.a conftest.b 2>&5 || hard_links=no
+  ln conftest.a conftest.b 2>/dev/null && hard_links=no
+  echo "$ac_t$hard_links" 1>&6
+  $rm conftest*
+  if test "$hard_links" = no; then
+    echo "*** WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&2
+    need_locks=warn
+  fi
+else
+  need_locks=no
+fi
+
+if test "$with_gcc" = yes; then
+  # Check to see if options -fno-rtti -fno-exceptions are supported by compiler
+  echo $ac_n "checking if $compiler supports -fno-rtti -fno-exceptions ... $ac_c" 1>&6
+  $rm conftest*
+  echo "int some_variable = 0;" > conftest.c
+  save_CFLAGS="$CFLAGS"
+  CFLAGS="$CFLAGS -fno-rtti -fno-exceptions -c conftest.c"
+  echo "$progname:914: checking if $compiler supports -fno-rtti -fno-exceptions" >&5
+  if { (eval echo $progname:915: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>conftest.err; } && test -s conftest.o; then
+
+    # The compiler can only warn and ignore the option if not recognized
+    # So say no if there are warnings
+      if test -s conftest.err; then
+       echo "$ac_t"no 1>&6
+       compiler_rtti_exceptions=no
+      else
+       echo "$ac_t"yes 1>&6
+       compiler_rtti_exceptions=yes
+      fi
+  else
+    # Append any errors to the config.log.
+    cat conftest.err 1>&5
+    compiler_rtti_exceptions=no
+    echo "$ac_t"no 1>&6
+  fi
+  CFLAGS="$save_CFLAGS"
+  $rm conftest*
+
+  if test "$compiler_rtti_exceptions" = "yes"; then
+    no_builtin_flag=' -fno-builtin -fno-rtti -fno-exceptions'
+  else
+    no_builtin_flag=' -fno-builtin'
+  fi
+  
+fi
+
+# Check for any special shared library compilation flags.
+if test -n "$special_shlib_compile_flags"; then
+  echo "$progname: warning: \`$CC' requires \`$special_shlib_compile_flags' to build shared libraries" 1>&2
+  if echo "$old_CC $old_CFLAGS " | egrep -e "[         ]$special_shlib_compile_flags[  ]" >/dev/null; then :
+  else
+    echo "$progname: add \`$special_shlib_compile_flags' to the CC or CFLAGS env variable and reconfigure" 1>&2
+    can_build_shared=no
+  fi
+fi
+
+echo $ac_n "checking if $compiler static flag $link_static_flag works... $ac_c" 1>&6
+$rm conftest*
+echo 'main(){return(0);}' > conftest.c
+save_LDFLAGS="$LDFLAGS"
+LDFLAGS="$LDFLAGS $link_static_flag"
+echo "$progname:958: checking if $compiler static flag $link_static_flag works" >&5
+if { (eval echo $progname:959: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then
+  echo "$ac_t$link_static_flag" 1>&6
+else
+  echo "$ac_t"none 1>&6
+  link_static_flag=
+fi
+LDFLAGS="$save_LDFLAGS"
+$rm conftest*
+
+if test -z "$LN_S"; then
+  # Check to see if we can use ln -s, or we need hard links.
+  echo $ac_n "checking whether ln -s works... $ac_c" 1>&6
+  $rm conftest.dat
+  if ln -s X conftest.dat 2>/dev/null; then
+    $rm conftest.dat
+    LN_S="ln -sf"
+  else
+    LN_S=ln
+  fi
+  if test "$LN_S" = "ln -sf"; then
+    echo "$ac_t"yes 1>&6
+  else
+    echo "$ac_t"no 1>&6
+  fi
+fi
+
+# Make sure LD is an absolute path.
+if test -z "$LD"; then
+  ac_prog=ld
+  if test "$with_gcc" = yes; then
+    # Check if gcc -print-prog-name=ld gives a path.
+    echo $ac_n "checking for ld used by GCC... $ac_c" 1>&6
+    echo "$progname:991: checking for ld used by GCC" >&5
+    ac_prog=`($CC -print-prog-name=ld) 2>&5`
+    case "$ac_prog" in
+    # Accept absolute paths.
+    [\\/]* | [A-Za-z]:[\\/]*)
+      re_direlt='/[^/][^/]*/\.\./'
+      # Canonicalize the path of ld
+      ac_prog=`echo $ac_prog| sed 's%\\\\%/%g'`
+      while echo $ac_prog | grep "$re_direlt" > /dev/null 2>&1; do
+       ac_prog=`echo $ac_prog| sed "s%$re_direlt%/%"`
+      done
+      test -z "$LD" && LD="$ac_prog"
+      ;;
+    "")
+      # If it fails, then pretend we are not using GCC.
+      ac_prog=ld
+      ;;
+    *)
+      # If it is relative, then search for the first ld in PATH.
+      with_gnu_ld=unknown
+      ;;
+    esac
+  elif test "$with_gnu_ld" = yes; then
+    echo $ac_n "checking for GNU ld... $ac_c" 1>&6
+    echo "$progname:1015: checking for GNU ld" >&5
+  else
+    echo $ac_n "checking for non-GNU ld""... $ac_c" 1>&6
+    echo "$progname:1018: checking for non-GNU ld" >&5
+  fi
+
+  if test -z "$LD"; then
+    IFS="${IFS=        }"; ac_save_ifs="$IFS"; IFS="${IFS}${PATH_SEPARATOR}"
+    for ac_dir in $PATH; do
+      test -z "$ac_dir" && ac_dir=.
+      if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then
+       LD="$ac_dir/$ac_prog"
+       # Check to see if the program is GNU ld.  I'd rather use --version,
+       # but apparently some GNU ld's only accept -v.
+       # Break only if it was the GNU/non-GNU ld that we prefer.
+       if "$LD" -v 2>&1 < /dev/null | egrep '(GNU|with BFD)' > /dev/null; then
+         test "$with_gnu_ld" != no && break
+       else
+         test "$with_gnu_ld" != yes && break
+       fi
+      fi
+    done
+    IFS="$ac_save_ifs"
+  fi
+
+  if test -n "$LD"; then
+    echo "$ac_t$LD" 1>&6
+  else
+    echo "$ac_t"no 1>&6
+  fi
+
+  if test -z "$LD"; then
+    echo "$progname: error: no acceptable ld found in \$PATH" 1>&2
+    exit 1
+  fi
+fi
+
+# Check to see if it really is or is not GNU ld.
+echo $ac_n "checking if the linker ($LD) is GNU ld... $ac_c" 1>&6
+# I'd rather use --version here, but apparently some GNU ld's only accept -v.
+if $LD -v 2>&1 </dev/null | egrep '(GNU|with BFD)' 1>&5; then
+  with_gnu_ld=yes
+else
+  with_gnu_ld=no
+fi
+echo "$ac_t$with_gnu_ld" 1>&6
+
+# See if the linker supports building shared libraries.
+echo $ac_n "checking whether the linker ($LD) supports shared libraries... $ac_c" 1>&6
+
+allow_undefined_flag=
+no_undefined_flag=
+need_lib_prefix=unknown
+need_version=unknown
+# when you set need_version to no, make sure it does not cause -set_version
+# flags to be left without arguments
+archive_cmds=
+archive_expsym_cmds=
+old_archive_from_new_cmds=
+export_dynamic_flag_spec=
+whole_archive_flag_spec=
+thread_safe_flag_spec=
+hardcode_libdir_flag_spec=
+hardcode_libdir_separator=
+hardcode_direct=no
+hardcode_minus_L=no
+hardcode_shlibpath_var=unsupported
+runpath_var=
+always_export_symbols=no
+export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | sed '\''s/.* //'\'' | sort | uniq > $export_symbols'
+# include_expsyms should be a list of space-separated symbols to be *always*
+# included in the symbol list
+include_expsyms=
+# exclude_expsyms can be an egrep regular expression of symbols to exclude
+# it will be wrapped by ` (' and `)$', so one must not match beginning or
+# end of line.  Example: `a|bc|.*d.*' will exclude the symbols `a' and `bc',
+# as well as any symbol that contains `d'.
+exclude_expsyms="_GLOBAL_OFFSET_TABLE_"
+# Although _GLOBAL_OFFSET_TABLE_ is a valid symbol C name, most a.out
+# platforms (ab)use it in PIC code, but their linkers get confused if
+# the symbol is explicitly referenced.  Since portable code cannot
+# rely on this symbol name, it's probably fine to never include it in
+# preloaded symbol tables.
+
+case "$host_os" in
+cygwin* | mingw*)
+  # FIXME: the MSVC++ port hasn't been tested in a loooong time
+  # When not using gcc, we currently assume that we are using
+  # Microsoft Visual C++.
+  if test "$with_gcc" != yes; then
+    with_gnu_ld=no
+  fi
+  ;;
+
+esac
+
+ld_shlibs=yes
+if test "$with_gnu_ld" = yes; then
+  # If archive_cmds runs LD, not CC, wlarc should be empty
+  wlarc='${wl}'
+
+  # See if GNU ld supports shared libraries.
+  case "$host_os" in
+  aix3* | aix4*)
+    # On AIX, the GNU linker is very broken
+    ld_shlibs=no
+    cat <<EOF 1>&2
+
+*** Warning: the GNU linker, at least up to release 2.9.1, is reported
+*** to be unable to reliably create shared libraries on AIX.
+*** Therefore, libtool is disabling shared libraries support.  If you
+*** really care for shared libraries, you may want to modify your PATH
+*** so that a non-GNU linker is found, and then restart.
+
+EOF
+    ;;
+
+  amigaos*)
+    archive_cmds='$rm $objdir/a2ixlibrary.data~$echo "#define NAME $libname" > $objdir/a2ixlibrary.data~$echo "#define LIBRARY_ID 1" >> $objdir/a2ixlibrary.data~$echo "#define VERSION $major" >> $objdir/a2ixlibrary.data~$echo "#define REVISION $revision" >> $objdir/a2ixlibrary.data~$AR cru $lib $libobjs~$RANLIB $lib~(cd $objdir && a2ixlibrary -32)'
+    hardcode_libdir_flag_spec='-L$libdir'
+    hardcode_minus_L=yes
+
+    # Samuel A. Falvo II <kc5tja@dolphin.openprojects.net> reports
+    # that the semantics of dynamic libraries on AmigaOS, at least up
+    # to version 4, is to share data among multiple programs linked
+    # with the same dynamic library.  Since this doesn't match the
+    # behavior of shared libraries on other platforms, we can use
+    # them.
+    ld_shlibs=no
+    ;;
+
+  beos*)
+    if $LD --help 2>&1 | egrep ': supported targets:.* elf' > /dev/null; then
+      allow_undefined_flag=unsupported
+      # Joseph Beckenbach <jrb3@best.com> says some releases of gcc
+      # support --undefined.  This deserves some investigation.  FIXME
+      archive_cmds='$CC -nostart $libobjs $deplibs $linkopts ${wl}-soname $wl$soname -o $lib'
+    else
+      ld_shlibs=no
+    fi
+    ;;
+
+  cygwin* | mingw*)
+    # hardcode_libdir_flag_spec is actually meaningless, as there is
+    # no search path for DLLs.
+    hardcode_libdir_flag_spec='-L$libdir'
+    allow_undefined_flag=unsupported
+    always_export_symbols=yes
+
+    # Extract the symbol export list from an `--export-all' def file,
+    # then regenerate the def file from the symbol export list, so that
+    # the compiled dll only exports the symbol export list.
+    export_symbols_cmds='test -f $objdir/$soname-ltdll.c || sed -e "/^# \/\* ltdll\.c starts here \*\//,/^# \/\* ltdll.c ends here \*\// { s/^# //; p; }" -e d < $0 > $objdir/$soname-ltdll.c~
+      test -f $objdir/$soname-ltdll.$objext || (cd $objdir && $CC -c $soname-ltdll.c)~
+      $DLLTOOL --export-all --exclude-symbols DllMain@12,_cygwin_dll_entry@12,_cygwin_noncygwin_dll_entry@12 --output-def $objdir/$soname-def  $objdir/$soname-ltdll.$objext $libobjs $convenience~
+      sed -e "1,/EXPORTS/d" -e "s/ @ [0-9]* ; *//" < $objdir/$soname-def > $export_symbols'
+
+    archive_expsym_cmds='echo EXPORTS > $objdir/$soname-def~
+      _lt_hint=1;
+      for symbol in `cat $export_symbols`; do
+       echo "  \$symbol @ \$_lt_hint ; " >> $objdir/$soname-def;
+       _lt_hint=`expr 1 + \$_lt_hint`;
+      done~
+      test -f $objdir/$soname-ltdll.c || sed -e "/^# \/\* ltdll\.c starts here \*\//,/^# \/\* ltdll.c ends here \*\// { s/^# //; p; }" -e d < $0 > $objdir/$soname-ltdll.c~
+      test -f $objdir/$soname-ltdll.$objext || (cd $objdir && $CC -c $soname-ltdll.c)~
+      $CC -Wl,--base-file,$objdir/$soname-base -Wl,--dll -nostartfiles -Wl,-e,__cygwin_dll_entry@12 -o $lib $objdir/$soname-ltdll.$objext $libobjs $deplibs $linkopts~
+      $DLLTOOL --as=$AS --dllname $soname --exclude-symbols DllMain@12,_cygwin_dll_entry@12,_cygwin_noncygwin_dll_entry@12 --def $objdir/$soname-def --base-file $objdir/$soname-base --output-exp $objdir/$soname-exp~
+      $CC -Wl,--base-file,$objdir/$soname-base $objdir/$soname-exp -Wl,--dll -nostartfiles -Wl,-e,__cygwin_dll_entry@12 -o $lib $objdir/$soname-ltdll.$objext $libobjs $deplibs $linkopts~
+      $DLLTOOL --as=$AS --dllname $soname --exclude-symbols DllMain@12,_cygwin_dll_entry@12,_cygwin_noncygwin_dll_entry@12 --def $objdir/$soname-def --base-file $objdir/$soname-base --output-exp $objdir/$soname-exp~
+      $CC $objdir/$soname-exp -Wl,--dll -nostartfiles -Wl,-e,__cygwin_dll_entry@12 -o $lib $objdir/$soname-ltdll.$objext $libobjs $deplibs $linkopts'
+
+      old_archive_from_new_cmds='$DLLTOOL --as=$AS --dllname $soname --def $objdir/$soname-def --output-lib $objdir/$libname.a' 
+    ;;
+
+  netbsd*)
+    if $LD --help 2>&1 | egrep ': supported targets:.* elf' > /dev/null; then
+      archive_cmds='$CC -shared $libobjs $deplibs $linkopts ${wl}-soname $wl$soname -o $lib'
+      archive_expsym_cmds='$CC -shared $libobjs $deplibs $linkopts ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
+    else
+      archive_cmds='$LD -Bshareable $libobjs $deplibs $linkopts -o $lib'
+      # can we support soname and/or expsyms with a.out? -oliva
+    fi
+    ;;
+
+  solaris*)
+    if $LD -v 2>&1 | egrep 'BFD 2\.8' > /dev/null; then
+      ld_shlibs=no
+      cat <<EOF 1>&2
+
+*** Warning: The releases 2.8.* of the GNU linker cannot reliably
+*** create shared libraries on Solaris systems.  Therefore, libtool
+*** is disabling shared libraries support.  We urge you to upgrade GNU
+*** binutils to release 2.9.1 or newer.  Another option is to modify
+*** your PATH or compiler configuration so that the native linker is
+*** used, and then restart.
+
+EOF
+    elif $LD --help 2>&1 | egrep ': supported targets:.* elf' > /dev/null; then
+      archive_cmds='$CC -shared $libobjs $deplibs $linkopts ${wl}-soname $wl$soname -o $lib'
+      archive_expsym_cmds='$CC -shared $libobjs $deplibs $linkopts ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
+    else
+      ld_shlibs=no
+    fi
+    ;;      
+
+  sunos4*)
+    archive_cmds='$LD -assert pure-text -Bshareable -o $lib $libobjs $deplibs $linkopts'
+    wlarc=
+    hardcode_direct=yes
+    hardcode_shlibpath_var=no
+    ;;
+
+  *)
+    if $LD --help 2>&1 | egrep ': supported targets:.* elf' > /dev/null; then
+      archive_cmds='$CC -shared $compile_rpath $libobjs $deplibs $linkopts ${wl}-soname $wl$soname -o $lib'
+      archive_expsym_cmds='$CC -shared $compile_rpath $libobjs $deplibs $linkopts ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
+    else
+      ld_shlibs=no
+    fi
+    ;;
+  esac
+
+  if test "$ld_shlibs" = yes; then
+    runpath_var=LD_RUN_PATH
+    hardcode_libdir_flag_spec='${wl}--rpath ${wl}$libdir'
+    export_dynamic_flag_spec='${wl}--export-dynamic'
+    case $host_os in
+    cygwin* | mingw*)
+      # dlltool doesn't understand --whole-archive et. al.
+      whole_archive_flag_spec=
+      ;;
+    *)
+      whole_archive_flag_spec="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive'
+      ;;
+    esac
+  fi
+else
+  # PORTME fill in a description of your system's linker (not GNU ld)
+  case "$host_os" in
+  aix3*)
+    allow_undefined_flag=unsupported
+    always_export_symbols=yes
+    archive_expsym_cmds='$LD -o $objdir/$soname $libobjs $deplibs $linkopts -bE:$export_symbols -T512 -H512 -bM:SRE~$AR cru $lib $objdir/$soname'
+    # Note: this linker hardcodes the directories in LIBPATH if there
+    # are no directories specified by -L.
+    hardcode_minus_L=yes
+    if test "$with_gcc" = yes && test -z "$link_static_flag"; then
+      # Neither direct hardcoding nor static linking is supported with a
+      # broken collect2.
+      hardcode_direct=unsupported
+    fi
+    ;;
+
+  aix4*)
+    hardcode_libdir_flag_spec='${wl}-b ${wl}nolibpath ${wl}-b ${wl}libpath:$libdir:/usr/lib:/lib'
+    hardcode_libdir_separator=':'
+    if test "$with_gcc" = yes; then
+      collect2name=`${CC} -print-prog-name=collect2`
+      if test -f "$collect2name" && \
+        strings "$collect2name" | grep resolve_lib_name >/dev/null
+      then
+       # We have reworked collect2
+       hardcode_direct=yes
+      else
+       # We have old collect2
+       hardcode_direct=unsupported
+       # It fails to find uninstalled libraries when the uninstalled
+       # path is not listed in the libpath.  Setting hardcode_minus_L
+       # to unsupported forces relinking
+       hardcode_minus_L=yes
+       hardcode_libdir_flag_spec='-L$libdir'
+       hardcode_libdir_separator=
+      fi
+      shared_flag='-shared'
+    else
+      shared_flag='${wl}-bM:SRE'
+      hardcode_direct=yes
+    fi
+    allow_undefined_flag=' ${wl}-berok'
+    archive_cmds="\$CC $shared_flag"' -o $objdir/$soname $libobjs $deplibs $linkopts ${wl}-bexpall ${wl}-bnoentry${allow_undefined_flag}'
+    archive_expsym_cmds="\$CC $shared_flag"' -o $objdir/$soname $libobjs $deplibs $linkopts ${wl}-bE:$export_symbols ${wl}-bnoentry${allow_undefined_flag}'
+    case "$host_os" in aix4.[01]|aix4.[01].*)
+      # According to Greg Wooledge, -bexpall is only supported from AIX 4.2 on
+      always_export_symbols=yes ;;
+    esac
+   ;;
+
+  amigaos*)
+    archive_cmds='$rm $objdir/a2ixlibrary.data~$echo "#define NAME $libname" > $objdir/a2ixlibrary.data~$echo "#define LIBRARY_ID 1" >> $objdir/a2ixlibrary.data~$echo "#define VERSION $major" >> $objdir/a2ixlibrary.data~$echo "#define REVISION $revision" >> $objdir/a2ixlibrary.data~$AR cru $lib $libobjs~$RANLIB $lib~(cd $objdir && a2ixlibrary -32)'
+    hardcode_libdir_flag_spec='-L$libdir'
+    hardcode_minus_L=yes
+    # see comment about different semantics on the GNU ld section
+    ld_shlibs=no
+    ;;
+
+  cygwin* | mingw*)
+    # When not using gcc, we currently assume that we are using
+    # Microsoft Visual C++.
+    # hardcode_libdir_flag_spec is actually meaningless, as there is
+    # no search path for DLLs.
+    hardcode_libdir_flag_spec=' '
+    allow_undefined_flag=unsupported
+    # Tell ltmain to make .lib files, not .a files.
+    libext=lib
+    # FIXME: Setting linknames here is a bad hack.
+    archive_cmds='$CC -o $lib $libobjs $linkopts `echo "$deplibs" | sed -e '\''s/ -lc$//'\''` -link -dll~linknames='
+    # The linker will automatically build a .lib file if we build a DLL.
+    old_archive_from_new_cmds='true'
+    # FIXME: Should let the user specify the lib program.
+    old_archive_cmds='lib /OUT:$oldlib$oldobjs'
+    fix_srcfile_path='`cygpath -w $srcfile`'
+    ;;
+
+  freebsd1*)
+    ld_shlibs=no
+    ;;
+
+  # FreeBSD 2.2.[012] allows us to include c++rt0.o to get C++ constructor
+  # support.  Future versions do this automatically, but an explicit c++rt0.o
+  # does not break anything, and helps significantly (at the cost of a little
+  # extra space).
+  freebsd2.2*)
+    archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linkopts /usr/lib/c++rt0.o'
+    hardcode_libdir_flag_spec='-R$libdir'
+    hardcode_direct=yes
+    hardcode_shlibpath_var=no
+    ;;
+
+  # Unfortunately, older versions of FreeBSD 2 do not have this feature.
+  freebsd2*)
+    archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linkopts'
+    hardcode_direct=yes
+    hardcode_minus_L=yes
+    hardcode_shlibpath_var=no
+    ;;
+
+  hpux9* | hpux10* | hpux11*)
+    case "$host_os" in
+    hpux9*) archive_cmds='$rm $objdir/$soname~$LD -b +b $install_libdir -o $objdir/$soname $libobjs $deplibs $linkopts~test $objdir/$soname = $lib || mv $objdir/$soname $lib' ;;
+    *) archive_cmds='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linkopts' ;;
+    esac
+    hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir'
+    hardcode_libdir_separator=:
+    hardcode_direct=yes
+    hardcode_minus_L=yes # Not in the search PATH, but as the default
+                        # location of the library.
+    export_dynamic_flag_spec='${wl}-E'
+    ;;
+
+  irix5* | irix6*)
+    if test "$with_gcc" = yes; then
+      archive_cmds='$CC -shared $libobjs $deplibs $linkopts ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${objdir}/so_locations -o $lib'
+    else
+      archive_cmds='$LD -shared $libobjs $deplibs $linkopts -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${objdir}/so_locations -o $lib'
+    fi
+    hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
+    hardcode_libdir_separator=:
+    ;;
+
+  netbsd*)
+    if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then
+      archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linkopts'  # a.out
+    else
+      archive_cmds='$LD -shared -o $lib $libobjs $deplibs $linkopts'      # ELF
+    fi
+    hardcode_libdir_flag_spec='${wl}-R$libdir'
+    hardcode_direct=yes
+    hardcode_shlibpath_var=no
+    ;;
+
+  openbsd*)
+    archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linkopts'
+    hardcode_libdir_flag_spec='-R$libdir'
+    hardcode_direct=yes
+    hardcode_shlibpath_var=no
+    ;;
+
+  os2*)
+    hardcode_libdir_flag_spec='-L$libdir'
+    hardcode_minus_L=yes
+    allow_undefined_flag=unsupported
+    archive_cmds='$echo "LIBRARY $libname INITINSTANCE" > $objdir/$libname.def~$echo "DESCRIPTION \"$libname\"" >> $objdir/$libname.def~$echo DATA >> $objdir/$libname.def~$echo " SINGLE NONSHARED" >> $objdir/$libname.def~$echo EXPORTS >> $objdir/$libname.def~emxexp $libobjs >> $objdir/$libname.def~$CC -Zdll -Zcrtdll -o $lib $libobjs $deplibs $linkopts $objdir/$libname.def'
+    old_archive_from_new_cmds='emximp -o $objdir/$libname.a $objdir/$libname.def'
+    ;;
+
+  osf3* | osf4*)
+    if test "$with_gcc" = yes; then
+      allow_undefined_flag=' ${wl}-expect_unresolved ${wl}\*'
+      archive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $linkopts ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${objdir}/so_locations -o $lib'
+    else
+      allow_undefined_flag=' -expect_unresolved \*'
+      archive_cmds='$LD -shared${allow_undefined_flag} $libobjs $deplibs $linkopts -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${objdir}/so_locations -o $lib'
+    fi
+    hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
+    hardcode_libdir_separator=:
+    ;;
+
+  sco3.2v5*)
+    archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linkopts'
+    hardcode_shlibpath_var=no
+    runpath_var=LD_RUN_PATH
+    hardcode_runpath_var=yes
+    ;;
+
+  solaris*)
+    no_undefined_flag=' -z text'
+    # $CC -shared without GNU ld will not create a library from C++
+    # object files and a static libstdc++, better avoid it by now
+    archive_cmds='$LD -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $linkopts'
+    archive_expsym_cmds='$echo "{ global:" > $lib.exp~cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~
+               $LD -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $linkopts~$rm $lib.exp'
+    hardcode_libdir_flag_spec='-R$libdir'
+    hardcode_shlibpath_var=no
+    case "$host_os" in
+    solaris2.[0-5] | solaris2.[0-5].*) ;;
+    *) # Supported since Solaris 2.6 (maybe 2.5.1?)
+      whole_archive_flag_spec='-z allextract$convenience -z defaultextract' ;;
+    esac
+    ;;
+
+  sunos4*)
+    archive_cmds='$LD -assert pure-text -Bstatic -o $lib $libobjs $deplibs $linkopts'
+    hardcode_libdir_flag_spec='-L$libdir'
+    hardcode_direct=yes
+    hardcode_minus_L=yes
+    hardcode_shlibpath_var=no
+    ;;
+
+  sysv4)
+    archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linkopts'
+    runpath_var='LD_RUN_PATH'
+    hardcode_shlibpath_var=no
+    hardcode_direct=no #Motorola manual says yes, but my tests say they lie 
+    ;;  
+
+  sysv4.3*)
+    archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linkopts'
+    hardcode_shlibpath_var=no
+    export_dynamic_flag_spec='-Bexport'
+    ;;
+
+  uts4*)
+    archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linkopts'
+    hardcode_libdir_flag_spec='-L$libdir'
+    hardcode_shlibpath_var=no
+    ;;
+
+  dgux*)
+    archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linkopts'
+    hardcode_libdir_flag_spec='-L$libdir'
+    hardcode_shlibpath_var=no
+    ;;
+
+  sysv4*MP*)
+    if test -d /usr/nec ;then
+    # archive_cmds='$LD -G -z text -h $soname -o $lib$libobjs$deplibs'
+    archive_cmds='$LD -G -h $soname -o $lib$libobjs$deplibs'
+    hardcode_shlibpath_var=no
+    runpath_var=LD_RUN_PATH
+    hardcode_runpath_var=yes
+    ld_shlibs=yes
+    fi
+    ;;
+
+  *)
+    ld_shlibs=no
+    ;;
+  esac
+fi
+echo "$ac_t$ld_shlibs" 1>&6
+test "$ld_shlibs" = no && can_build_shared=no
+
+if test -z "$NM"; then
+  echo $ac_n "checking for BSD-compatible nm... $ac_c" 1>&6
+  case "$NM" in
+  [\\/]* | [A-Za-z]:[\\/]*) ;; # Let the user override the test with a path.
+  *)
+    IFS="${IFS=        }"; ac_save_ifs="$IFS"; IFS="${IFS}${PATH_SEPARATOR}"
+    for ac_dir in $PATH /usr/ucb /usr/ccs/bin /bin; do
+      test -z "$ac_dir" && ac_dir=.
+      if test -f $ac_dir/nm || test -f $ac_dir/nm$ac_exeext; then
+       # Check to see if the nm accepts a BSD-compat flag.
+       # Adding the `sed 1q' prevents false positives on HP-UX, which says:
+       #   nm: unknown option "B" ignored
+       if ($ac_dir/nm -B /dev/null 2>&1 | sed '1q'; exit 0) | egrep /dev/null >/dev/null; then
+         NM="$ac_dir/nm -B"
+         break
+       elif ($ac_dir/nm -p /dev/null 2>&1 | sed '1q'; exit 0) | egrep /dev/null >/dev/null; then
+         NM="$ac_dir/nm -p"
+         break
+       else
+         NM=${NM="$ac_dir/nm"} # keep the first match, but
+         continue # so that we can try to find one that supports BSD flags
+       fi
+      fi
+    done
+    IFS="$ac_save_ifs"
+    test -z "$NM" && NM=nm
+    ;;
+  esac
+  echo "$ac_t$NM" 1>&6
+fi
+
+# Check for command to grab the raw symbol name followed by C symbol from nm.
+echo $ac_n "checking command to parse $NM output... $ac_c" 1>&6
+
+# These are sane defaults that work on at least a few old systems.
+# [They come from Ultrix.  What could be older than Ultrix?!! ;)]
+
+# Character class describing NM global symbol codes.
+symcode='[BCDEGRST]'
+
+# Regexp to match symbols that can be accessed directly from C.
+sympat='\([_A-Za-z][_A-Za-z0-9]*\)'
+
+# Transform the above into a raw symbol and a C symbol.
+symxfrm='\1 \2\3 \3'
+
+# Transform an extracted symbol line into a proper C declaration
+global_symbol_to_cdecl="sed -n -e 's/^. .* \(.*\)$/extern char \1;/p'"
+
+# Define system-specific variables.
+case "$host_os" in
+aix*)
+  symcode='[BCDT]'
+  ;;
+cygwin* | mingw*)
+  symcode='[ABCDGISTW]'
+  ;;
+hpux*) # Its linker distinguishes data from code symbols
+  global_symbol_to_cdecl="sed -n -e 's/^T .* \(.*\)$/extern char \1();/p' -e 's/^. .* \(.*\)$/extern char \1;/p'"
+  ;;
+irix*)
+  symcode='[BCDEGRST]'
+  ;;
+solaris*)
+  symcode='[BDT]'
+  ;;
+sysv4)
+  symcode='[DFNSTU]'
+  ;;
+esac
+
+# If we're using GNU nm, then use its standard symbol codes.
+if $NM -V 2>&1 | egrep '(GNU|with BFD)' > /dev/null; then
+  symcode='[ABCDGISTW]'
+fi
+
+# Try without a prefix undercore, then with it.
+for ac_symprfx in "" "_"; do
+
+  # Write the raw and C identifiers.
+  global_symbol_pipe="sed -n -e 's/^.*[        ]\($symcode\)[  ][      ]*\($ac_symprfx\)$sympat$/$symxfrm/p'"
+
+  # Check to see that the pipe works correctly.
+  pipe_works=no
+  $rm conftest*
+  cat > conftest.c <<EOF
+#ifdef __cplusplus
+extern "C" {
+#endif
+char nm_test_var;
+void nm_test_func(){}
+#ifdef __cplusplus
+}
+#endif
+main(){nm_test_var='a';nm_test_func();return(0);}
+EOF
+
+  echo "$progname:1592: checking if global_symbol_pipe works" >&5
+  if { (eval echo $progname:1593: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; } && test -s conftest.$objext; then
+    # Now try to grab the symbols.
+    nlist=conftest.nm
+    if { echo "$progname:1596: eval \"$NM conftest.$objext | $global_symbol_pipe > $nlist\"" >&5; eval "$NM conftest.$objext | $global_symbol_pipe > $nlist 2>&5"; } && test -s "$nlist"; then
+
+      # Try sorting and uniquifying the output.
+      if sort "$nlist" | uniq > "$nlist"T; then
+       mv -f "$nlist"T "$nlist"
+      else
+       rm -f "$nlist"T
+      fi
+
+      # Make sure that we snagged all the symbols we need.
+      if egrep ' nm_test_var$' "$nlist" >/dev/null; then
+       if egrep ' nm_test_func$' "$nlist" >/dev/null; then
+         cat <<EOF > conftest.c
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+EOF
+         # Now generate the symbol file.
+         eval "$global_symbol_to_cdecl"' < "$nlist" >> conftest.c'
+
+         cat <<EOF >> conftest.c
+#if defined (__STDC__) && __STDC__
+# define lt_ptr_t void *
+#else
+# define lt_ptr_t char *
+# define const
+#endif
+
+/* The mapping between symbol names and symbols. */
+const struct {
+  const char *name;
+  lt_ptr_t address;
+}
+lt_preloaded_symbols[] =
+{
+EOF
+         sed 's/^. \(.*\) \(.*\)$/  {"\2", (lt_ptr_t) \&\2},/' < "$nlist" >> conftest.c
+         cat <<\EOF >> conftest.c
+  {0, (lt_ptr_t) 0}
+};
+
+#ifdef __cplusplus
+}
+#endif
+EOF
+         # Now try linking the two files.
+         mv conftest.$objext conftstm.$objext
+         save_LIBS="$LIBS"
+         save_CFLAGS="$CFLAGS"
+         LIBS="conftstm.$objext"
+         CFLAGS="$CFLAGS$no_builtin_flag"
+         if { (eval echo $progname:1648: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then
+           pipe_works=yes
+         else
+           echo "$progname: failed program was:" >&5
+           cat conftest.c >&5
+         fi
+         LIBS="$save_LIBS"
+       else
+         echo "cannot find nm_test_func in $nlist" >&5
+       fi
+      else
+       echo "cannot find nm_test_var in $nlist" >&5
+      fi
+    else
+      echo "cannot run $global_symbol_pipe" >&5
+    fi
+  else
+    echo "$progname: failed program was:" >&5
+    cat conftest.c >&5
+  fi
+  $rm conftest* conftst*
+
+  # Do not use the global_symbol_pipe unless it works.
+  if test "$pipe_works" = yes; then
+    break
+  else
+    global_symbol_pipe=
+  fi
+done
+if test "$pipe_works" = yes; then
+  echo "${ac_t}ok" 1>&6
+else
+  echo "${ac_t}failed" 1>&6
+fi
+
+if test -z "$global_symbol_pipe"; then
+  global_symbol_to_cdecl=
+fi
+
+# Check hardcoding attributes.
+echo $ac_n "checking how to hardcode library paths into programs... $ac_c" 1>&6
+hardcode_action=
+if test -n "$hardcode_libdir_flag_spec" || \
+   test -n "$runpath_var"; then
+
+  # We can hardcode non-existant directories.
+  if test "$hardcode_direct" != no &&
+     # If the only mechanism to avoid hardcoding is shlibpath_var, we
+     # have to relink, otherwise we might link with an installed library
+     # when we should be linking with a yet-to-be-installed one
+     ## test "$hardcode_shlibpath_var" != no &&
+     test "$hardcode_minus_L" != no; then
+    # Linking always hardcodes the temporary library directory.
+    hardcode_action=relink
+  else
+    # We can link without hardcoding, and we can hardcode nonexisting dirs.
+    hardcode_action=immediate
+  fi
+else
+  # We cannot hardcode anything, or else we can only hardcode existing
+  # directories.
+  hardcode_action=unsupported
+fi
+echo "$ac_t$hardcode_action" 1>&6
+
+
+reload_flag=
+reload_cmds='$LD$reload_flag -o $output$reload_objs'
+echo $ac_n "checking for $LD option to reload object files... $ac_c" 1>&6
+# PORTME Some linkers may need a different reload flag.
+reload_flag='-r'
+echo "$ac_t$reload_flag" 1>&6
+test -n "$reload_flag" && reload_flag=" $reload_flag"
+
+# PORTME Fill in your ld.so characteristics
+library_names_spec=
+libname_spec='lib$name'
+soname_spec=
+postinstall_cmds=
+postuninstall_cmds=
+finish_cmds=
+finish_eval=
+shlibpath_var=
+shlibpath_overrides_runpath=unknown
+version_type=none
+dynamic_linker="$host_os ld.so"
+sys_lib_dlsearch_path_spec="/lib /usr/lib"
+sys_lib_search_path_spec="/lib /usr/lib"
+file_magic_cmd=
+file_magic_test_file=
+deplibs_check_method='unknown'
+# Need to set the preceding variable on all platforms that support
+# interlibrary dependencies.
+# 'none' -- dependencies not supported.
+# `unknown' -- same as none, but documents that we really don't know.
+# 'pass_all' -- all dependencies passed with no checks.
+# 'test_compile' -- check by making test program.
+# 'file_magic [regex]' -- check by looking for files in library path
+# which responds to the $file_magic_cmd with a given egrep regex.
+# If you have `file' or equivalent on your system and you're not sure
+# whether `pass_all' will *always* work, you probably want this one.
+echo $ac_n "checking dynamic linker characteristics... $ac_c" 1>&6
+case "$host_os" in
+aix3*)
+  version_type=linux
+  library_names_spec='${libname}${release}.so$versuffix $libname.a'
+  shlibpath_var=LIBPATH
+
+  # AIX has no versioning support, so we append a major version to the name.
+  soname_spec='${libname}${release}.so$major'
+  ;;
+
+aix4*)
+  version_type=linux
+  # AIX has no versioning support, so currently we can not hardcode correct
+  # soname into executable. Probably we can add versioning support to
+  # collect2, so additional links can be useful in future.
+  # We preserve .a as extension for shared libraries though AIX4.2
+  # and later linker supports .so
+  library_names_spec='${libname}${release}.so$versuffix ${libname}${release}.so$major $libname.a'
+  shlibpath_var=LIBPATH
+  deplibs_check_method=pass_all
+  ;;
+
+amigaos*)
+  library_names_spec='$libname.ixlibrary $libname.a'
+  # Create ${libname}_ixlibrary.a entries in /sys/libs.
+  finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`$echo "X$lib" | $Xsed -e '\''s%^.*/\([^/]*\)\.ixlibrary$%\1%'\''`; test $rm /sys/libs/${libname}_ixlibrary.a; $show "(cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a)"; (cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a) || exit 1; done'
+  ;;
+
+beos*)
+  library_names_spec='${libname}.so'
+  dynamic_linker="$host_os ld.so"
+  shlibpath_var=LIBRARY_PATH
+  deplibs_check_method=pass_all
+  lt_cv_dlopen="load_add_on"
+  lt_cv_dlopen_libs=
+  lt_cv_dlopen_self=yes
+  ;;
+
+bsdi4*)
+  version_type=linux
+  library_names_spec='${libname}.so$major ${libname}.so'
+  soname_spec='${libname}.so'
+  finish_cmds='PATH="\$PATH:/sbin" ldconfig $libdir'
+  shlibpath_var=LD_LIBRARY_PATH
+  deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (shared object|dynamic lib)'
+  file_magic_cmd=/usr/bin/file
+  file_magic_test_file=/shlib/libc.so
+  sys_lib_search_path_spec="/shlib /usr/lib /usr/X11/lib /usr/contrib/lib /lib /usr/local/lib"
+  sys_lib_dlsearch_path_spec="/shlib /usr/lib /usr/local/lib"
+  # the default ld.so.conf also contains /usr/contrib/lib and
+  # /usr/X11R6/lib (/usr/X11 is a link to /usr/X11R6), but let us allow
+  # libtool to hard-code these into programs
+  ;;
+
+cygwin* | mingw*)
+  version_type=windows
+  need_version=no
+  need_lib_prefix=no
+  if test "$with_gcc" = yes; then
+    library_names_spec='${libname}`echo ${release} | sed -e 's/[.]/-/g'`${versuffix}.dll $libname.a'
+  else
+    library_names_spec='${libname}`echo ${release} | sed -e 's/[.]/-/g'`${versuffix}.dll $libname.lib'
+  fi
+  dynamic_linker='Win32 ld.exe'
+  deplibs_check_method='file_magic file format pei*-i386(.*architecture: i386)?'
+  file_magic_cmd='${OBJDUMP} -f'
+  # FIXME: first we should search . and the directory the executable is in
+  shlibpath_var=PATH
+  lt_cv_dlopen="LoadLibrary"
+  lt_cv_dlopen_libs=
+  ;;
+
+freebsd1*)
+  dynamic_linker=no
+  ;;
+  
+freebsd*)
+  objformat=`test -x /usr/bin/objformat && /usr/bin/objformat || echo aout`
+  version_type=freebsd-$objformat
+  case "$version_type" in
+    freebsd-elf*)
+      deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [LM]SB shared object'
+      ;;
+    freebsd-*)
+      deplibs_check_method='file_magic FreeBSD.* shared library'
+      ;;
+  esac
+  file_magic_cmd=/usr/bin/file
+  file_magic_test_file=`echo /usr/lib/libc.so.*`
+  if test "$release_suffix" = all; then
+    library_names_spec='${libname}${release}.so$versuffix ${libname}${release}.so'
+  else
+    library_names_spec='${libname}${release}.so$versuffix ${libname}.so'
+  fi 
+  need_version=no
+  need_lib_prefix=no
+  finish_cmds='/usr/bin/env OBJFORMAT="'"$objformat"'" /sbin/ldconfig -m $libdir'
+  shlibpath_var=LD_LIBRARY_PATH
+  case "$host_os" in
+  freebsd2* | freebsd3.[01]*)
+    shlibpath_overrides_runpath=yes
+    ;;
+  *) # from 3.2 on
+    shlibpath_overrides_runpath=no
+    ;;
+  esac
+  ;;
+
+gnu*)
+  version_type=linux
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='${libname}${release}.so$versuffix ${libname}${release}.so${major} ${libname}.so'
+  soname_spec='${libname}${release}.so$major'
+  shlibpath_var=LD_LIBRARY_PATH
+  ;;
+
+hpux9* | hpux10* | hpux11*)
+  # Give a soname corresponding to the major version so that dld.sl refuses to
+  # link against other versions.
+  dynamic_linker="$host_os dld.sl"
+  version_type=sunos
+  need_lib_prefix=no
+  need_version=no
+  shlibpath_var=SHLIB_PATH
+  shlibpath_overrides_runpath=no # +s is required to enable SHLIB_PATH
+  library_names_spec='${libname}${release}.sl$versuffix ${libname}${release}.sl$major $libname.sl'
+  soname_spec='${libname}${release}.sl$major'
+  # HP-UX runs *really* slowly unless shared libraries are mode 555.
+  postinstall_cmds='chmod 555 $lib'
+  ;;
+
+irix5* | irix6*)
+  version_type=irix
+  need_lib_prefix=no
+  need_version=no
+  soname_spec='${libname}${release}.so.$major'
+  library_names_spec='${libname}${release}.so.$versuffix ${libname}${release}.so.$major ${libname}${release}.so $libname.so'
+  case "$host_os" in
+  irix5*)
+    libsuff= shlibsuff=
+    # this will be overridden with pass_all, but let us keep it just in case
+    deplibs_check_method="file_magic ELF 32-bit MSB dynamic lib MIPS - version 1"
+    ;;
+  *)
+    case "$LD" in # libtool.m4 will add one of these switches to LD
+    *-32|*"-32 ") libsuff= shlibsuff= libmagic=32-bit;;
+    *-n32|*"-n32 ") libsuff=32 shlibsuff=N32 libmagic=N32;;
+    *-64|*"-64 ") libsuff=64 shlibsuff=64 libmagic=64-bit;;
+    *) libsuff= shlibsuff= libmagic=never-match;;
+    esac
+    # this will be overridden with pass_all, but let us keep it just in case
+    deplibs_check_method="file_magic ELF ${libmagic} MSB mips-[1234] dynamic lib MIPS - version 1"
+    ;;
+  esac
+  shlibpath_var=LD_LIBRARY${shlibsuff}_PATH
+  shlibpath_overrides_runpath=no
+  sys_lib_search_path_spec="/usr/lib${libsuff} /lib${libsuff} /usr/local/lib${libsuff}"
+  sys_lib_dlsearch_path_spec="/usr/lib${libsuff} /lib${libsuff}"
+  file_magic_cmd=/usr/bin/file
+  file_magic_test_file=`echo /lib${libsuff}/libc.so*`
+  deplibs_check_method='pass_all'
+  ;;
+
+# No shared lib support for Linux oldld, aout, or coff.
+linux-gnuoldld* | linux-gnuaout* | linux-gnucoff*)
+  dynamic_linker=no
+  ;;
+
+# This must be Linux ELF.
+linux-gnu*)
+  version_type=linux
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='${libname}${release}.so$versuffix ${libname}${release}.so$major $libname.so'
+  soname_spec='${libname}${release}.so$major'
+  finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir'
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=no
+  deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [LM]SB (shared object|dynamic lib )'
+  file_magic_cmd=/usr/bin/file
+  file_magic_test_file=`echo /lib/libc.so* /lib/libc-*.so`
+
+  if test -f /lib/ld.so.1; then
+    dynamic_linker='GNU ld.so'
+  else
+    # Only the GNU ld.so supports shared libraries on MkLinux.
+    case "$host_cpu" in
+    powerpc*) dynamic_linker=no ;;
+    *) dynamic_linker='Linux ld.so' ;;
+    esac
+  fi
+  ;;
+
+netbsd*)
+  version_type=sunos
+  if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then
+    library_names_spec='${libname}${release}.so$versuffix ${libname}.so$versuffix'
+    finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir'
+    dynamic_linker='NetBSD (a.out) ld.so'
+  else
+    library_names_spec='${libname}${release}.so$versuffix ${libname}${release}.so$major ${libname}${release}.so ${libname}.so'
+    soname_spec='${libname}${release}.so$major'
+    dynamic_linker='NetBSD ld.elf_so'
+  fi
+  shlibpath_var=LD_LIBRARY_PATH
+  ;;
+
+openbsd*)
+  version_type=sunos
+  if test "$with_gnu_ld" = yes; then
+    need_lib_prefix=no
+    need_version=no
+  fi
+  library_names_spec='${libname}${release}.so$versuffix ${libname}.so$versuffix'
+  finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir'
+  shlibpath_var=LD_LIBRARY_PATH
+  ;;
+
+os2*)
+  libname_spec='$name'
+  need_lib_prefix=no
+  library_names_spec='$libname.dll $libname.a'
+  dynamic_linker='OS/2 ld.exe'
+  shlibpath_var=LIBPATH
+  ;;
+
+osf3* | osf4*)
+  version_type=osf
+  need_version=no
+  soname_spec='${libname}${release}.so'
+  library_names_spec='${libname}${release}.so$versuffix ${libname}${release}.so $libname.so'
+  shlibpath_var=LD_LIBRARY_PATH
+  # this will be overridden with pass_all, but let us keep it just in case
+  deplibs_check_method='file_magic COFF format alpha shared library'
+  file_magic_cmd=/usr/bin/file
+  file_magic_test_file=/shlib/libc.so
+  deplibs_check_method='pass_all'
+  sys_lib_search_path_spec="/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /usr/local/lib /var/shlib"
+  sys_lib_dlsearch_path_spec="$sys_lib_search_path_spec"
+  ;;
+
+sco3.2v5*)
+  version_type=osf
+  soname_spec='${libname}${release}.so$major'
+  library_names_spec='${libname}${release}.so$versuffix ${libname}${release}.so$major $libname.so'
+  shlibpath_var=LD_LIBRARY_PATH
+  ;;
+
+solaris*)
+  version_type=linux
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='${libname}${release}.so$versuffix ${libname}${release}.so$major $libname.so'
+  soname_spec='${libname}${release}.so$major'
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=yes
+  # ldd complains unless libraries are executable
+  postinstall_cmds='chmod +x $lib'
+  deplibs_check_method="file_magic ELF [0-9][0-9]-bit [LM]SB dynamic lib"
+  file_magic_cmd=/usr/bin/file
+  file_magic_test_file=/lib/libc.so
+  ;;
+
+sunos4*)
+  version_type=sunos
+  library_names_spec='${libname}${release}.so$versuffix ${libname}.so$versuffix'
+  finish_cmds='PATH="\$PATH:/usr/etc" ldconfig $libdir'
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=yes
+  if test "$with_gnu_ld" = yes; then
+    need_lib_prefix=no
+  fi
+  need_version=yes
+  ;;
+
+sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*)
+  version_type=linux
+  library_names_spec='${libname}${release}.so$versuffix ${libname}${release}.so$major $libname.so'
+  soname_spec='${libname}${release}.so$major'
+  shlibpath_var=LD_LIBRARY_PATH
+  case "$host_vendor" in
+    ncr)
+      deplibs_check_method='pass_all'
+      ;;
+    motorola)
+      need_lib_prefix=no
+      need_version=no
+      shlibpath_overrides_runpath=no
+      sys_lib_search_path_spec='/lib /usr/lib /usr/ccs/lib'
+      deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (shared object|dynamic lib) M[0-9][0-9]* Version [0-9]'
+      file_magic_cmd=/usr/bin/file
+      file_magic_test_file=`echo /usr/lib/libc.so*`
+      ;;
+  esac
+  ;;
+
+uts4*)
+  version_type=linux
+  library_names_spec='${libname}${release}.so$versuffix ${libname}${release}.so$major $libname.so'
+  soname_spec='${libname}${release}.so$major'
+  shlibpath_var=LD_LIBRARY_PATH
+  ;;
+
+dgux*)
+  version_type=linux
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='${libname}${release}.so$versuffix ${libname}${release}.so$major $libname.so'
+  soname_spec='${libname}${release}.so$major'
+  shlibpath_var=LD_LIBRARY_PATH
+  ;;
+
+sysv4*MP*)
+  if test -d /usr/nec ;then
+    version_type=linux
+    library_names_spec='$libname.so.$versuffix $libname.so.$major $libname.so'
+    soname_spec='$libname.so.$major'
+    shlibpath_var=LD_LIBRARY_PATH
+  fi
+  ;;
+
+*)
+  dynamic_linker=no
+  ;;
+esac
+echo "$ac_t$dynamic_linker" 1>&6
+test "$dynamic_linker" = no && can_build_shared=no
+
+# Report the final consequences.
+echo "checking if libtool supports shared libraries... $can_build_shared" 1>&6
+
+# Only try to build win32 dlls if AC_LIBTOOL_WIN32_DLL was used in
+# configure.in, otherwise build static only libraries.
+case "$host_os" in
+cygwin* | mingw* | os2*)
+  if test x$can_build_shared = xyes; then
+    test x$enable_win32_dll = xno && can_build_shared=no
+    echo "checking if package supports dlls... $can_build_shared" 1>&6
+  fi
+;;
+esac
+
+if test -n "$file_magic_test_file" && test -n "$file_magic_cmd"; then
+  case "$deplibs_check_method" in
+  "file_magic "*)
+    file_magic_regex="`expr \"$deplibs_check_method\" : \"file_magic \(.*\)\"`"
+    if eval $file_magic_cmd \$file_magic_test_file 2> /dev/null |
+       egrep "$file_magic_regex" > /dev/null; then
+      :
+    else
+      cat <<EOF 1>&2
+
+*** Warning: the command libtool uses to detect shared libraries,
+*** $file_magic_cmd, produces output that libtool cannot recognize.
+*** The result is that libtool may fail to recognize shared libraries
+*** as such.  This will affect the creation of libtool libraries that
+*** depend on shared libraries, but programs linked with such libtool
+*** libraries will work regardless of this problem.  Nevertheless, you
+*** may want to report the problem to your system manager and/or to
+*** bug-libtool@gnu.org
+
+EOF
+    fi ;;
+  esac
+fi
+
+echo $ac_n "checking whether to build shared libraries... $ac_c" 1>&6
+test "$can_build_shared" = "no" && enable_shared=no
+
+# On AIX, shared libraries and static libraries use the same namespace, and
+# are all built from PIC.
+case "$host_os" in
+aix3*)
+  test "$enable_shared" = yes && enable_static=no
+  if test -n "$RANLIB"; then
+    archive_cmds="$archive_cmds~\$RANLIB \$lib"
+    postinstall_cmds='$RANLIB $lib'
+  fi
+  ;;
+
+aix4*)
+  test "$enable_shared" = yes && enable_static=no
+  ;;
+esac
+
+echo "$ac_t$enable_shared" 1>&6
+
+# Make sure either enable_shared or enable_static is yes.
+test "$enable_shared" = yes || enable_static=yes
+
+echo "checking whether to build static libraries... $enable_static" 1>&6
+
+if test "$hardcode_action" = relink; then
+  # Fast installation is not supported
+  enable_fast_install=no
+elif test "$shlibpath_overrides_runpath" = yes ||
+     test "$enable_shared" = no; then
+  # Fast installation is not necessary
+  enable_fast_install=needless
+fi
+
+echo $ac_n "checking for objdir... $ac_c" 1>&6
+rm -f .libs 2>/dev/null
+mkdir .libs 2>/dev/null
+if test -d .libs; then
+  objdir=.libs
+else
+  # MS-DOS does not allow filenames that begin with a dot.
+  objdir=_libs
+fi
+rmdir .libs 2>/dev/null
+echo "$ac_t$objdir" 1>&6
+
+if test "x$enable_dlopen" != xyes; then
+  enable_dlopen=unknown
+  enable_dlopen_self=unknown
+  enable_dlopen_self_static=unknown
+else
+if eval "test \"`echo '$''{'lt_cv_dlopen'+set}'`\" != set"; then
+  lt_cv_dlopen=no lt_cv_dlopen_libs=
+echo $ac_n "checking for dlopen in -ldl""... $ac_c" 1>&6
+echo "$progname:2170: checking for dlopen in -ldl" >&5
+ac_lib_var=`echo dl'_'dlopen | sed 'y%./+-%__p_%'`
+if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
+  echo $ac_n "(cached) $ac_c" 1>&6
+else
+  ac_save_LIBS="$LIBS"
+LIBS="-ldl  $LIBS"
+cat > conftest.$ac_ext <<EOF
+#line 2178 "ltconfig"
+/* Override any gcc2 internal prototype to avoid an error.  */
+/* We use char because int might match the return type of a gcc2
+    builtin and then its argument prototype would still apply.  */
+char dlopen();
+
+int main() {
+dlopen()
+; return 0; }
+EOF
+if { (eval echo $progname:2188: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+  rm -rf conftest*
+  eval "ac_cv_lib_$ac_lib_var=yes"
+else
+  echo "$progname: failed program was:" >&5
+  cat conftest.$ac_ext >&5
+  rm -rf conftest*
+  eval "ac_cv_lib_$ac_lib_var=no"
+fi
+rm -f conftest*
+LIBS="$ac_save_LIBS"
+
+fi
+if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then
+  echo "$ac_t""yes" 1>&6
+  lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl"
+else
+  echo "$ac_t""no" 1>&6
+echo $ac_n "checking for dlopen""... $ac_c" 1>&6
+echo "$progname:2207: checking for dlopen" >&5
+if eval "test \"`echo '$''{'ac_cv_func_dlopen'+set}'`\" = set"; then
+  echo $ac_n "(cached) $ac_c" 1>&6
+else
+  cat > conftest.$ac_ext <<EOF
+#line 2212 "ltconfig"
+/* System header to define __stub macros and hopefully few prototypes,
+    which can conflict with char dlopen(); below.  */
+#include <assert.h>
+/* Override any gcc2 internal prototype to avoid an error.  */
+/* We use char because int might match the return type of a gcc2
+    builtin and then its argument prototype would still apply.  */
+char dlopen();
+
+int main() {
+
+/* The GNU C library defines this for functions which it implements
+    to always fail with ENOSYS.  Some functions are actually named
+    something starting with __ and the normal name is an alias.  */
+#if defined (__stub_dlopen) || defined (__stub___dlopen)
+choke me
+#else
+dlopen();
+#endif
+
+; return 0; }
+EOF
+if { (eval echo $progname:2234: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+  rm -rf conftest*
+  eval "ac_cv_func_dlopen=yes"
+else
+  echo "$progname: failed program was:" >&5
+  cat conftest.$ac_ext >&5
+  rm -rf conftest*
+  eval "ac_cv_func_dlopen=no"
+fi
+rm -f conftest*
+fi
+if eval "test \"`echo '$ac_cv_func_'dlopen`\" = yes"; then
+  echo "$ac_t""yes" 1>&6
+  lt_cv_dlopen="dlopen"
+else
+  echo "$ac_t""no" 1>&6
+echo $ac_n "checking for dld_link in -ldld""... $ac_c" 1>&6
+echo "$progname:2251: checking for dld_link in -ldld" >&5
+ac_lib_var=`echo dld'_'dld_link | sed 'y%./+-%__p_%'`
+if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
+  echo $ac_n "(cached) $ac_c" 1>&6
+else
+  ac_save_LIBS="$LIBS"
+LIBS="-ldld  $LIBS"
+cat > conftest.$ac_ext <<EOF
+#line 2259 "ltconfig"
+/* Override any gcc2 internal prototype to avoid an error.  */
+/* We use char because int might match the return type of a gcc2
+    builtin and then its argument prototype would still apply.  */
+char dld_link();
+
+int main() {
+dld_link()
+; return 0; }
+EOF
+if { (eval echo $progname:2269: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+  rm -rf conftest*
+  eval "ac_cv_lib_$ac_lib_var=yes"
+else
+  echo "$progname: failed program was:" >&5
+  cat conftest.$ac_ext >&5
+  rm -rf conftest*
+  eval "ac_cv_lib_$ac_lib_var=no"
+fi
+rm -f conftest*
+LIBS="$ac_save_LIBS"
+
+fi
+if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then
+  echo "$ac_t""yes" 1>&6
+  lt_cv_dlopen="dld_link" lt_cv_dlopen_libs="-ldld"
+else
+  echo "$ac_t""no" 1>&6
+echo $ac_n "checking for shl_load""... $ac_c" 1>&6
+echo "$progname:2288: checking for shl_load" >&5
+if eval "test \"`echo '$''{'ac_cv_func_shl_load'+set}'`\" = set"; then
+  echo $ac_n "(cached) $ac_c" 1>&6
+else
+  cat > conftest.$ac_ext <<EOF
+#line 2293 "ltconfig"
+/* System header to define __stub macros and hopefully few prototypes,
+    which can conflict with char shl_load(); below.  */
+#include <assert.h>
+/* Override any gcc2 internal prototype to avoid an error.  */
+/* We use char because int might match the return type of a gcc2
+    builtin and then its argument prototype would still apply.  */
+char shl_load();
+
+int main() {
+
+/* The GNU C library defines this for functions which it implements
+    to always fail with ENOSYS.  Some functions are actually named
+    something starting with __ and the normal name is an alias.  */
+#if defined (__stub_shl_load) || defined (__stub___shl_load)
+choke me
+#else
+shl_load();
+#endif
+
+; return 0; }
+EOF
+if { (eval echo $progname:2315: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+  rm -rf conftest*
+  eval "ac_cv_func_shl_load=yes"
+else
+  echo "$progname: failed program was:" >&5
+  cat conftest.$ac_ext >&5
+  rm -rf conftest*
+  eval "ac_cv_func_shl_load=no"
+fi
+rm -f conftest*
+fi
+
+if eval "test \"`echo '$ac_cv_func_'shl_load`\" = yes"; then
+  echo "$ac_t""yes" 1>&6
+  lt_cv_dlopen="shl_load"
+else
+  echo "$ac_t""no" 1>&6
+echo $ac_n "checking for shl_load in -ldld""... $ac_c" 1>&6
+echo "$progname:2333: checking for shl_load in -ldld" >&5
+ac_lib_var=`echo dld'_'shl_load | sed 'y%./+-%__p_%'`
+if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
+  echo $ac_n "(cached) $ac_c" 1>&6
+else
+  ac_save_LIBS="$LIBS"
+LIBS="-ldld  $LIBS"
+cat > conftest.$ac_ext <<EOF
+#line 2341 "ltconfig"
+#include "confdefs.h"
+/* Override any gcc2 internal prototype to avoid an error.  */
+/* We use char because int might match the return type of a gcc2
+    builtin and then its argument prototype would still apply.  */
+char shl_load();
+
+int main() {
+shl_load()
+; return 0; }
+EOF
+if { (eval echo $progname:2352: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+  rm -rf conftest*
+  eval "ac_cv_lib_$ac_lib_var=yes"
+else
+  echo "$progname: failed program was:" >&5
+  cat conftest.$ac_ext >&5
+  rm -rf conftest*
+  eval "ac_cv_lib_$ac_lib_var=no"
+fi
+rm -f conftest*
+LIBS="$ac_save_LIBS"
+
+fi
+if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then
+  echo "$ac_t""yes" 1>&6
+  lt_cv_dlopen="shl_load" lt_cv_dlopen_libs="-ldld"
+else
+  echo "$ac_t""no" 1>&6
+fi
+
+
+fi
+
+    
+fi
+
+  
+fi
+
+
+fi
+
+fi
+
+  if test "x$lt_cv_dlopen" != xno; then
+    enable_dlopen=yes
+  fi
+
+  case "$lt_cv_dlopen" in
+  dlopen)
+for ac_hdr in dlfcn.h; do
+ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'`
+echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6
+echo "$progname:2395: checking for $ac_hdr" >&5
+if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then
+  echo $ac_n "(cached) $ac_c" 1>&6
+else
+  cat > conftest.$ac_ext <<EOF
+#line 2400 "ltconfig"
+#include <$ac_hdr>
+int fnord = 0;
+EOF
+ac_try="$ac_compile conftest.$ac_ext >/dev/null 2>conftest.out"
+{ (eval echo $progname:2405: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
+if test -z "$ac_err"; then
+  rm -rf conftest*
+  eval "ac_cv_header_$ac_safe=yes"
+else
+  echo "$ac_err" >&5
+  echo "$progname: failed program was:" >&5
+  cat conftest.$ac_ext >&5
+  rm -rf conftest*
+  eval "ac_cv_header_$ac_safe=no"
+fi
+rm -f conftest*
+fi
+if eval "test \"`echo '$ac_cv_header_'$ac_safe`\" = yes"; then
+  echo "$ac_t""yes" 1>&6
+else
+  echo "$ac_t""no" 1>&6
+fi
+done
+
+    if test "x$ac_cv_header_dlfcn_h" = xyes; then
+      CPPFLAGS="$CPPFLAGS -DHAVE_DLFCN_H"
+    fi
+    eval LDFLAGS=\"\$LDFLAGS $export_dynamic_flag_spec\"
+    LIBS="$lt_cv_dlopen_libs $LIBS"
+
+  echo $ac_n "checking whether a program can dlopen itself""... $ac_c" 1>&6
+echo "$progname:2433: checking whether a program can dlopen itself" >&5
+if test "${lt_cv_dlopen_self+set}" = set; then
+  echo $ac_n "(cached) $ac_c" 1>&6
+else
+  if test "$cross_compiling" = yes; then
+    lt_cv_dlopen_self=cross
+  else
+    cat > conftest.c <<EOF
+#line 2441 "ltconfig"
+
+#if HAVE_DLFCN_H
+#include <dlfcn.h>
+#endif
+
+#include <stdio.h>
+
+#ifdef RTLD_GLOBAL
+# define LTDL_GLOBAL   RTLD_GLOBAL
+#else
+# ifdef DL_GLOBAL
+#  define LTDL_GLOBAL  DL_GLOBAL
+# else
+#  define LTDL_GLOBAL  0
+# endif
+#endif
+
+/* We may have to define LTDL_LAZY_OR_NOW in the command line if we
+   find out it does not work in some platform. */
+#ifndef LTDL_LAZY_OR_NOW
+# ifdef RTLD_LAZY
+#  define LTDL_LAZY_OR_NOW     RTLD_LAZY
+# else
+#  ifdef DL_LAZY
+#   define LTDL_LAZY_OR_NOW    DL_LAZY
+#  else
+#   ifdef RTLD_NOW
+#    define LTDL_LAZY_OR_NOW   RTLD_NOW
+#   else
+#    ifdef DL_NOW
+#     define LTDL_LAZY_OR_NOW  DL_NOW
+#    else
+#     define LTDL_LAZY_OR_NOW  0
+#    endif
+#   endif
+#  endif
+# endif
+#endif
+
+fnord() { int i=42;}
+main() { void *self, *ptr1, *ptr2; self=dlopen(0,LTDL_GLOBAL|LTDL_LAZY_OR_NOW);
+    if(self) { ptr1=dlsym(self,"fnord"); ptr2=dlsym(self,"_fnord");
+              if(ptr1 || ptr2) { dlclose(self); exit(0); } } exit(1); } 
+
+EOF
+if { (eval echo $progname:2487: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit) 2>/dev/null
+then
+  lt_cv_dlopen_self=yes
+else
+  echo "$progname: failed program was:" >&5
+  cat conftest.$ac_ext >&5
+  rm -fr conftest*
+  lt_cv_dlopen_self=no
+fi
+rm -fr conftest*
+fi
+
+fi
+
+echo "$ac_t""$lt_cv_dlopen_self" 1>&6
+
+  if test "$lt_cv_dlopen_self" = yes; then
+    LDFLAGS="$LDFLAGS $link_static_flag"
+  echo $ac_n "checking whether a statically linked program can dlopen itself""... $ac_c" 1>&6
+echo "$progname:2506: checking whether a statically linked program can dlopen itself" >&5
+if test "${lt_cv_dlopen_self_static+set}" = set; then
+  echo $ac_n "(cached) $ac_c" 1>&6
+else
+  if test "$cross_compiling" = yes; then
+    lt_cv_dlopen_self_static=cross
+  else
+    cat > conftest.c <<EOF
+#line 2514 "ltconfig"
+
+#if HAVE_DLFCN_H
+#include <dlfcn.h>
+#endif
+
+#include <stdio.h>
+
+#ifdef RTLD_GLOBAL
+# define LTDL_GLOBAL   RTLD_GLOBAL
+#else
+# ifdef DL_GLOBAL
+#  define LTDL_GLOBAL  DL_GLOBAL
+# else
+#  define LTDL_GLOBAL  0
+# endif
+#endif
+
+/* We may have to define LTDL_LAZY_OR_NOW in the command line if we
+   find out it does not work in some platform. */
+#ifndef LTDL_LAZY_OR_NOW
+# ifdef RTLD_LAZY
+#  define LTDL_LAZY_OR_NOW     RTLD_LAZY
+# else
+#  ifdef DL_LAZY
+#   define LTDL_LAZY_OR_NOW    DL_LAZY
+#  else
+#   ifdef RTLD_NOW
+#    define LTDL_LAZY_OR_NOW   RTLD_NOW
+#   else
+#    ifdef DL_NOW
+#     define LTDL_LAZY_OR_NOW  DL_NOW
+#    else
+#     define LTDL_LAZY_OR_NOW  0
+#    endif
+#   endif
+#  endif
+# endif
+#endif
+
+fnord() { int i=42;}
+main() { void *self, *ptr1, *ptr2; self=dlopen(0,LTDL_GLOBAL|LTDL_LAZY_OR_NOW);
+    if(self) { ptr1=dlsym(self,"fnord"); ptr2=dlsym(self,"_fnord");
+    if(ptr1 || ptr2) { dlclose(self); exit(0); } } exit(1); } 
+
+EOF
+if { (eval echo $progname:2560: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit) 2>/dev/null
+then
+  lt_cv_dlopen_self_static=yes
+else
+  echo "$progname: failed program was:" >&5
+  cat conftest.$ac_ext >&5
+  rm -fr conftest*
+  lt_cv_dlopen_self_static=no
+fi
+rm -fr conftest*
+fi
+
+fi
+
+echo "$ac_t""$lt_cv_dlopen_self_static" 1>&6
+fi
+    ;;
+  esac
+
+  case "$lt_cv_dlopen_self" in
+  yes|no) enable_dlopen_self=$lt_cv_dlopen_self ;;
+  *) enable_dlopen_self=unknown ;;
+  esac
+
+  case "$lt_cv_dlopen_self_static" in
+  yes|no) enable_dlopen_self_static=$lt_cv_dlopen_self_static ;;
+  *) enable_dlopen_self_static=unknown ;;
+  esac
+fi
+
+# Copy echo and quote the copy, instead of the original, because it is
+# used later.
+ltecho="$echo"
+if test "X$ltecho" = "X$CONFIG_SHELL $0 --fallback-echo"; then
+   ltecho="$CONFIG_SHELL \$0 --fallback-echo"
+fi
+LTSHELL="$SHELL"
+
+LTCONFIG_VERSION="$VERSION"
+
+# Only quote variables if we're using ltmain.sh.
+case "$ltmain" in
+*.sh)
+  # Now quote all the things that may contain metacharacters.
+  for var in ltecho old_CC old_CFLAGS old_CPPFLAGS \
+    old_LD old_LDFLAGS old_LIBS \
+    old_NM old_RANLIB old_LN_S old_DLLTOOL old_OBJDUMP old_AS \
+    AR CC LD LN_S NM LTSHELL LTCONFIG_VERSION \
+    reload_flag reload_cmds wl \
+    pic_flag link_static_flag no_builtin_flag export_dynamic_flag_spec \
+    thread_safe_flag_spec whole_archive_flag_spec libname_spec \
+    library_names_spec soname_spec \
+    RANLIB old_archive_cmds old_archive_from_new_cmds old_postinstall_cmds \
+    old_postuninstall_cmds archive_cmds archive_expsym_cmds postinstall_cmds postuninstall_cmds \
+    file_magic_cmd export_symbols_cmds deplibs_check_method allow_undefined_flag no_undefined_flag \
+    finish_cmds finish_eval global_symbol_pipe global_symbol_to_cdecl \
+    hardcode_libdir_flag_spec hardcode_libdir_separator  \
+    sys_lib_search_path_spec sys_lib_dlsearch_path_spec \
+    compiler_c_o compiler_o_lo need_locks exclude_expsyms include_expsyms; do
+
+    case "$var" in
+    reload_cmds | old_archive_cmds | old_archive_from_new_cmds | \
+    old_postinstall_cmds | old_postuninstall_cmds | \
+    export_symbols_cmds | archive_cmds | archive_expsym_cmds | \
+    postinstall_cmds | postuninstall_cmds | \
+    finish_cmds | sys_lib_search_path_spec | sys_lib_dlsearch_path_spec)
+      # Double-quote double-evaled strings.
+      eval "$var=\\\"\`\$echo \"X\$$var\" | \$Xsed -e \"\$double_quote_subst\" -e \"\$sed_quote_subst\" -e \"\$delay_variable_subst\"\`\\\""
+      ;;
+    *)
+      eval "$var=\\\"\`\$echo \"X\$$var\" | \$Xsed -e \"\$sed_quote_subst\"\`\\\""
+      ;;
+    esac
+  done
+
+  case "$ltecho" in
+  *'\$0 --fallback-echo"')
+    ltecho=`$echo "X$ltecho" | $Xsed -e 's/\\\\\\\$0 --fallback-echo"$/$0 --fallback-echo"/'`
+    ;;
+  esac
+
+  trap "$rm \"$ofile\"; exit 1" 1 2 15
+  echo "creating $ofile"
+  $rm "$ofile"
+  cat <<EOF > "$ofile"
+#! $SHELL
+
+# `$echo "$ofile" | sed 's%^.*/%%'` - Provide generalized library-building support services.
+# Generated automatically by $PROGRAM (GNU $PACKAGE $VERSION$TIMESTAMP)
+# NOTE: Changes made to this file will be lost: look at ltconfig or ltmain.sh.
+#
+# Copyright (C) 1996-1999 Free Software Foundation, Inc.
+# Gordon Matzigkeit <gord@gnu.ai.mit.edu>, 1996
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful, but
+# WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+# General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+#
+# As a special exception to the GNU General Public License, if you
+# distribute this file as part of a program that contains a
+# configuration script generated by Autoconf, you may include it under
+# the same distribution terms that you use for the rest of that program.
+
+# Sed that helps us avoid accidentally triggering echo(1) options like -n.
+Xsed="sed -e s/^X//"
+
+# The HP-UX ksh and POSIX shell print the target directory to stdout
+# if CDPATH is set.
+if test "\${CDPATH+set}" = set; then CDPATH=; export CDPATH; fi
+
+### BEGIN LIBTOOL CONFIG
+EOF
+  cfgfile="$ofile"
+  ;;
+
+*)
+  # Double-quote the variables that need it (for aesthetics).
+  for var in old_CC old_CFLAGS old_CPPFLAGS \
+    old_LD old_LDFLAGS old_LIBS \
+    old_NM old_RANLIB old_LN_S old_DLLTOOL old_OBJDUMP old_AS; do
+    eval "$var=\\\"\$var\\\""
+  done
+
+  # Just create a config file.
+  cfgfile="$ofile.cfg"
+  trap "$rm \"$cfgfile\"; exit 1" 1 2 15
+  echo "creating $cfgfile"
+  $rm "$cfgfile"
+  cat <<EOF > "$cfgfile"
+# `$echo "$cfgfile" | sed 's%^.*/%%'` - Libtool configuration file.
+# Generated automatically by $PROGRAM (GNU $PACKAGE $VERSION$TIMESTAMP)
+EOF
+  ;;
+esac
+
+cat <<EOF >> "$cfgfile"
+# Libtool was configured as follows, on host `(hostname || uname -n) 2>/dev/null | sed 1q`:
+#
+# CC=$old_CC CFLAGS=$old_CFLAGS CPPFLAGS=$old_CPPFLAGS \\
+# LD=$old_LD LDFLAGS=$old_LDFLAGS LIBS=$old_LIBS \\
+# NM=$old_NM RANLIB=$old_RANLIB LN_S=$old_LN_S \\
+# DLLTOOL=$old_DLLTOOL OBJDUMP=$old_OBJDUMP AS=$old_AS \\
+#   $0$ltconfig_args
+#
+# Compiler and other test output produced by $progname, useful for
+# debugging $progname, is in ./config.log if it exists.
+
+# The version of $progname that generated this script.
+LTCONFIG_VERSION=$LTCONFIG_VERSION
+
+# Shell to use when invoking shell scripts.
+SHELL=$LTSHELL
+
+# Whether to waste disk space.
+install_ltlibs=$install_ltlibs 
+
+# What to do with -release.
+#  yes - only for shared archive
+#  no  - ingnore
+#  all - for all archives
+release_suffix=$release_suffix
+
+# Whether or not to build shared libraries.
+build_libtool_libs=$enable_shared
+
+# Whether or not to build static libraries.
+build_old_libs=$enable_static
+
+# Whether or not to optimize for fast installation.
+fast_install=$enable_fast_install
+
+# The host system.
+host_alias=$host_alias
+host=$host
+
+# An echo program that does not interpret backslashes.
+echo=$ltecho
+
+# The archiver.
+AR=$AR
+
+# The default C compiler.
+CC=$CC
+
+# The linker used to build libraries.
+LD=$LD
+
+# Whether we need hard or soft links.
+LN_S=$LN_S
+
+# A BSD-compatible nm program.
+NM=$NM
+
+# Used on cygwin: DLL creation program.
+DLLTOOL="$DLLTOOL"
+
+# Used on cygwin: object dumper.
+OBJDUMP="$OBJDUMP"
+
+# Used on cygwin: assembler.
+AS="$AS"
+
+# The name of the directory that contains temporary libtool files.
+objdir=$objdir
+
+# How to create reloadable object files.
+reload_flag=$reload_flag
+reload_cmds=$reload_cmds
+
+# How to pass a linker flag through the compiler.
+wl=$wl
+
+# Object file suffix (normally "o").
+objext="$objext"
+
+# Old archive suffix (normally "a").
+libext="$libext"
+
+# Executable file suffix (normally "").
+exeext="$exeext"
+
+# Additional compiler flags for building library objects.
+pic_flag=$pic_flag
+
+# Does compiler simultaneously support -c and -o options?
+compiler_c_o=$compiler_c_o
+
+# Can we write directly to a .lo ?
+compiler_o_lo=$compiler_o_lo
+
+# Must we lock files when doing compilation ?
+need_locks=$need_locks
+
+# Do we need the lib prefix for modules?
+need_lib_prefix=$need_lib_prefix
+
+# Do we need a version for libraries?
+need_version=$need_version
+
+# Whether dlopen is supported.
+dlopen=$enable_dlopen
+
+# Whether dlopen of programs is supported.
+dlopen_self=$enable_dlopen_self
+
+# Whether dlopen of statically linked programs is supported.
+dlopen_self_static=$enable_dlopen_self_static
+
+# Compiler flag to prevent dynamic linking.
+link_static_flag=$link_static_flag
+
+# Compiler flag to turn off builtin functions.
+no_builtin_flag=$no_builtin_flag
+
+# Compiler flag to allow reflexive dlopens.
+export_dynamic_flag_spec=$export_dynamic_flag_spec
+
+# Compiler flag to generate shared objects directly from archives.
+whole_archive_flag_spec=$whole_archive_flag_spec
+
+# Compiler flag to generate thread-safe objects.
+thread_safe_flag_spec=$thread_safe_flag_spec
+
+# Library versioning type.
+version_type=$version_type
+
+# Format of library name prefix.
+libname_spec=$libname_spec
+
+# List of archive names.  First name is the real one, the rest are links.
+# The last name is the one that the linker finds with -lNAME.
+library_names_spec=$library_names_spec
+
+# The coded name of the library, if different from the real name.
+soname_spec=$soname_spec
+
+# Commands used to build and install an old-style archive.
+RANLIB=$RANLIB
+old_archive_cmds=$old_archive_cmds
+old_postinstall_cmds=$old_postinstall_cmds
+old_postuninstall_cmds=$old_postuninstall_cmds
+
+# Create an old-style archive from a shared archive.
+old_archive_from_new_cmds=$old_archive_from_new_cmds
+
+# Commands used to build and install a shared archive.
+archive_cmds=$archive_cmds
+archive_expsym_cmds=$archive_expsym_cmds
+postinstall_cmds=$postinstall_cmds
+postuninstall_cmds=$postuninstall_cmds
+
+# Method to check whether dependent libraries are shared objects.
+deplibs_check_method=$deplibs_check_method
+
+# Command to use when deplibs_check_method == file_magic.
+file_magic_cmd=$file_magic_cmd
+
+# Flag that allows shared libraries with undefined symbols to be built.
+allow_undefined_flag=$allow_undefined_flag
+
+# Flag that forces no undefined symbols.
+no_undefined_flag=$no_undefined_flag
+
+# Commands used to finish a libtool library installation in a directory.
+finish_cmds=$finish_cmds
+
+# Same as above, but a single script fragment to be evaled but not shown.
+finish_eval=$finish_eval
+
+# Take the output of nm and produce a listing of raw symbols and C names.
+global_symbol_pipe=$global_symbol_pipe
+
+# Transform the output of nm in a proper C declaration
+global_symbol_to_cdecl=$global_symbol_to_cdecl
+
+# This is the shared library runtime path variable.
+runpath_var=$runpath_var
+
+# This is the shared library path variable.
+shlibpath_var=$shlibpath_var
+
+# Is shlibpath searched before the hard-coded library search path?
+shlibpath_overrides_runpath=$shlibpath_overrides_runpath
+
+# How to hardcode a shared library path into an executable.
+hardcode_action=$hardcode_action
+
+# Flag to hardcode \$libdir into a binary during linking.
+# This must work even if \$libdir does not exist.
+hardcode_libdir_flag_spec=$hardcode_libdir_flag_spec
+
+# Whether we need a single -rpath flag with a separated argument.
+hardcode_libdir_separator=$hardcode_libdir_separator
+
+# Set to yes if using DIR/libNAME.so during linking hardcodes DIR into the
+# resulting binary.
+hardcode_direct=$hardcode_direct
+
+# Set to yes if using the -LDIR flag during linking hardcodes DIR into the
+# resulting binary.
+hardcode_minus_L=$hardcode_minus_L
+
+# Set to yes if using SHLIBPATH_VAR=DIR during linking hardcodes DIR into
+# the resulting binary.
+hardcode_shlibpath_var=$hardcode_shlibpath_var
+
+# Compile-time system search path for libraries
+sys_lib_search_path_spec=$sys_lib_search_path_spec
+
+# Run-time system search path for libraries
+sys_lib_dlsearch_path_spec=$sys_lib_dlsearch_path_spec
+
+# Fix the shell variable \$srcfile for the compiler.
+fix_srcfile_path="$fix_srcfile_path"
+
+# Set to yes if exported symbols are required.
+always_export_symbols=$always_export_symbols
+
+# The commands to list exported symbols.
+export_symbols_cmds=$export_symbols_cmds
+
+# Symbols that should not be listed in the preloaded symbols.
+exclude_expsyms=$exclude_expsyms
+
+# Symbols that must always be exported.
+include_expsyms=$include_expsyms
+
+EOF
+
+case "$ltmain" in
+*.sh)
+  echo '### END LIBTOOL CONFIG' >> "$ofile"
+  echo >> "$ofile"
+  case "$host_os" in
+  aix3*)
+    cat <<\EOF >> "$ofile"
+
+# AIX sometimes has problems with the GCC collect2 program.  For some
+# reason, if we set the COLLECT_NAMES environment variable, the problems
+# vanish in a puff of smoke.
+if test "${COLLECT_NAMES+set}" != set; then
+  COLLECT_NAMES=
+  export COLLECT_NAMES
+fi
+EOF
+    ;;
+  esac
+
+  # Append the ltmain.sh script.
+  sed '$q' "$ltmain" >> "$ofile" || (rm -f "$ofile"; exit 1)
+
+  chmod +x "$ofile"
+  ;;
+
+*)
+  # Compile the libtool program.
+  echo "FIXME: would compile $ltmain"
+  ;;
+esac
+
+test -n "$cache_file" || exit 0
+
+# AC_CACHE_SAVE
+trap '' 1 2 15
+cat > confcache <<\EOF
+# This file is a shell script that caches the results of configure
+# tests run on this system so they can be shared between configure
+# scripts and configure runs.  It is not useful on other systems.
+# If it contains results you don't want to keep, you may remove or edit it.
+#
+# By default, configure uses ./config.cache as the cache file,
+# creating it if it does not exist already.  You can give configure
+# the --cache-file=FILE option to use a different cache file; that is
+# what configure does when it calls configure scripts in
+# subdirectories, so they share the cache.
+# Giving --cache-file=/dev/null disables caching, for debugging configure.
+# config.status only pays attention to the cache file if you give it the
+# --recheck option to rerun configure.
+#
+EOF
+# The following way of writing the cache mishandles newlines in values,
+# but we know of no workaround that is simple, portable, and efficient.
+# So, don't put newlines in cache variables' values.
+# Ultrix sh set writes to stderr and can't be redirected directly,
+# and sets the high bit in the cache file unless we assign to the vars.
+(set) 2>&1 |
+  case `(ac_space=' '; set | grep ac_space) 2>&1` in
+  *ac_space=\ *)
+    # `set' does not quote correctly, so add quotes (double-quote substitution
+    # turns \\\\ into \\, and sed turns \\ into \).
+    sed -n \
+      -e "s/'/'\\\\''/g" \
+      -e "s/^\\([a-zA-Z0-9_]*_cv_[a-zA-Z0-9_]*\\)=\\(.*\\)/\\1=\${\\1='\\2'}/p"
+    ;;
+  *)
+    # `set' quotes correctly as required by POSIX, so do not add quotes.
+    sed -n -e 's/^\([a-zA-Z0-9_]*_cv_[a-zA-Z0-9_]*\)=\(.*\)/\1=${\1=\2}/p'
+    ;;
+  esac >> confcache
+if cmp -s $cache_file confcache; then
+  :
+else
+  if test -w $cache_file; then
+    echo "updating cache $cache_file"
+    cat confcache > $cache_file
+  else
+    echo "not updating unwritable cache $cache_file"
+  fi
+fi
+rm -f confcache
+
+exit 0
+
+# Local Variables:
+# mode:shell-script
+# sh-indentation:2
+# End:
diff --git a/contrib/php4/ltmain.sh b/contrib/php4/ltmain.sh
new file mode 100644 (file)
index 0000000..300eaec
--- /dev/null
@@ -0,0 +1,4088 @@
+# ltmain.sh - Provide generalized library-building support services.
+# NOTE: Changing this file will not affect anything until you rerun ltconfig.
+#
+# Copyright (C) 1996-1999 Free Software Foundation, Inc.
+# Originally by Gordon Matzigkeit <gord@gnu.ai.mit.edu>, 1996
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful, but
+# WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+# General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+#
+# As a special exception to the GNU General Public License, if you
+# distribute this file as part of a program that contains a
+# configuration script generated by Autoconf, you may include it under
+# the same distribution terms that you use for the rest of that program.
+
+# Check that we have a working $echo.
+if test "X$1" = X--no-reexec; then
+  # Discard the --no-reexec flag, and continue.
+  shift
+elif test "X$1" = X--fallback-echo; then
+  # Avoid inline document here, it may be left over
+  :
+elif test "X`($echo '\t') 2>/dev/null`" = 'X\t'; then
+  # Yippee, $echo works!
+  :
+else
+  # Restart under the correct shell, and then maybe $echo will work.
+  exec $SHELL "$0" --no-reexec ${1+"$@"}
+fi
+
+if test "X$1" = X--fallback-echo; then
+  # used as fallback echo
+  shift
+  cat <<EOF
+$*
+EOF
+  exit 0
+fi
+
+# The name of this program.
+progname=`$echo "$0" | sed 's%^.*/%%'`
+modename="$progname"
+
+# Constants.
+PROGRAM=ltmain.sh
+PACKAGE=libtool
+VERSION=1.3.3-freebsd-ports
+TIMESTAMP=" (1.385.2.181 1999/07/02 15:49:11)"
+
+default_mode=
+help="Try \`$progname --help' for more information."
+magic="%%%MAGIC variable%%%"
+mkdir="mkdir"
+mv="mv -f"
+rm="rm -f"
+
+# Sed substitution that helps us do robust quoting.  It backslashifies
+# metacharacters that are still active within double-quoted strings.
+Xsed='sed -e 1s/^X//'
+sed_quote_subst='s/\([\\`\\"$\\\\]\)/\\\1/g'
+SP2NL='tr \040 \012'
+NL2SP='tr \015\012 \040\040'
+
+# NLS nuisances.
+# Only set LANG and LC_ALL to C if already set.
+# These must not be set unconditionally because not all systems understand
+# e.g. LANG=C (notably SCO).
+# We save the old values to restore during execute mode.
+if test "${LC_ALL+set}" = set; then
+  save_LC_ALL="$LC_ALL"; LC_ALL=C; export LC_ALL
+fi
+if test "${LANG+set}" = set; then
+  save_LANG="$LANG"; LANG=C; export LANG
+fi
+
+if test "$LTCONFIG_VERSION" != "$VERSION"; then
+  echo "$modename: ltconfig version \`$LTCONFIG_VERSION' does not match $PROGRAM version \`$VERSION'" 1>&2
+  echo "Fatal configuration error.  See the $PACKAGE docs for more information." 1>&2
+  exit 1
+fi
+
+if test "$build_libtool_libs" != yes && test "$build_old_libs" != yes; then
+  echo "$modename: not configured to build any kind of library" 1>&2
+  echo "Fatal configuration error.  See the $PACKAGE docs for more information." 1>&2
+  exit 1
+fi
+
+# Global variables.
+mode=$default_mode
+nonopt=
+prev=
+prevopt=
+run=
+show="$echo"
+show_help=
+execute_dlfiles=
+lo2o="s/\\.lo\$/.${objext}/"
+o2lo="s/\\.${objext}\$/.lo/"
+
+# Parse our command line options once, thoroughly.
+while test $# -gt 0
+do
+  arg="$1"
+  shift
+
+  case "$arg" in
+  -*=*) optarg=`$echo "X$arg" | $Xsed -e 's/[-_a-zA-Z0-9]*=//'` ;;
+  *) optarg= ;;
+  esac
+
+  # If the previous option needs an argument, assign it.
+  if test -n "$prev"; then
+    case "$prev" in
+    execute_dlfiles)
+      eval "$prev=\"\$$prev \$arg\""
+      ;;
+    *)
+      eval "$prev=\$arg"
+      ;;
+    esac
+
+    prev=
+    prevopt=
+    continue
+  fi
+
+  # Have we seen a non-optional argument yet?
+  case "$arg" in
+  --help)
+    show_help=yes
+    ;;
+
+  --version)
+    echo "$PROGRAM (GNU $PACKAGE) $VERSION$TIMESTAMP"
+    exit 0
+    ;;
+
+  --config)
+    sed -e '1,/^### BEGIN LIBTOOL CONFIG/d' -e '/^### END LIBTOOL CONFIG/,$d' $0
+    exit 0
+    ;;
+
+  --debug)
+    echo "$progname: enabling shell trace mode"
+    set -x
+    ;;
+
+  --dry-run | -n)
+    run=:
+    ;;
+
+  --features)
+    echo "host: $host"
+    if test "$build_libtool_libs" = yes; then
+      echo "enable shared libraries"
+    else
+      echo "disable shared libraries"
+    fi
+    if test "$build_old_libs" = yes; then
+      echo "enable static libraries"
+    else
+      echo "disable static libraries"
+    fi
+    exit 0
+    ;;
+
+  --finish) mode="finish" ;;
+
+  --mode) prevopt="--mode" prev=mode ;;
+  --mode=*) mode="$optarg" ;;
+
+  --quiet | --silent)
+    show=:
+    ;;
+
+  -dlopen)
+    prevopt="-dlopen"
+    prev=execute_dlfiles
+    ;;
+
+  -*)
+    $echo "$modename: unrecognized option \`$arg'" 1>&2
+    $echo "$help" 1>&2
+    exit 1
+    ;;
+
+  *)
+    nonopt="$arg"
+    break
+    ;;
+  esac
+done
+
+if test -n "$prevopt"; then
+  $echo "$modename: option \`$prevopt' requires an argument" 1>&2
+  $echo "$help" 1>&2
+  exit 1
+fi
+
+if test -z "$show_help"; then
+
+  # Infer the operation mode.
+  if test -z "$mode"; then
+    case "$nonopt" in
+    *cc | *++ | gcc* | *-gcc*)
+      mode=link
+      for arg
+      do
+       case "$arg" in
+       -c)
+          mode=compile
+          break
+          ;;
+       esac
+      done
+      ;;
+    *db | *dbx | *strace | *truss)
+      mode=execute
+      ;;
+    *install*|cp|mv)
+      mode=install
+      ;;
+    *rm)
+      mode=uninstall
+      ;;
+    *)
+      # If we have no mode, but dlfiles were specified, then do execute mode.
+      test -n "$execute_dlfiles" && mode=execute
+
+      # Just use the default operation mode.
+      if test -z "$mode"; then
+       if test -n "$nonopt"; then
+         $echo "$modename: warning: cannot infer operation mode from \`$nonopt'" 1>&2
+       else
+         $echo "$modename: warning: cannot infer operation mode without MODE-ARGS" 1>&2
+       fi
+      fi
+      ;;
+    esac
+  fi
+
+  # Only execute mode is allowed to have -dlopen flags.
+  if test -n "$execute_dlfiles" && test "$mode" != execute; then
+    $echo "$modename: unrecognized option \`-dlopen'" 1>&2
+    $echo "$help" 1>&2
+    exit 1
+  fi
+
+  # Change the help message to a mode-specific one.
+  generic_help="$help"
+  help="Try \`$modename --help --mode=$mode' for more information."
+
+  # These modes are in order of execution frequency so that they run quickly.
+  case "$mode" in
+  # libtool compile mode
+  compile)
+    modename="$modename: compile"
+    # Get the compilation command and the source file.
+    base_compile=
+    lastarg=
+    srcfile="$nonopt"
+    suppress_output=
+
+    user_target=no
+    for arg
+    do
+      # Accept any command-line options.
+      case "$arg" in
+      -o)
+       if test "$user_target" != "no"; then
+         $echo "$modename: you cannot specify \`-o' more than once" 1>&2
+         exit 1
+       fi
+       user_target=next
+       ;;
+
+      -static)
+       build_old_libs=yes
+       continue
+       ;;
+      esac
+
+      case "$user_target" in
+      next)
+       # The next one is the -o target name
+       user_target=yes
+       continue
+       ;;
+      yes)
+       # We got the output file
+       user_target=set
+       libobj="$arg"
+       continue
+       ;;
+      esac
+
+      # Accept the current argument as the source file.
+      lastarg="$srcfile"
+      srcfile="$arg"
+
+      # Aesthetically quote the previous argument.
+
+      # Backslashify any backslashes, double quotes, and dollar signs.
+      # These are the only characters that are still specially
+      # interpreted inside of double-quoted scrings.
+      lastarg=`$echo "X$lastarg" | $Xsed -e "$sed_quote_subst"`
+
+      # Double-quote args containing other shell metacharacters.
+      # Many Bourne shells cannot handle close brackets correctly in scan
+      # sets, so we specify it separately.
+      case "$lastarg" in
+      *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \    ]*|*]*)
+       lastarg="\"$lastarg\""
+       ;;
+      esac
+
+      # Add the previous argument to base_compile.
+      if test -z "$base_compile"; then
+       base_compile="$lastarg"
+      else
+       base_compile="$base_compile $lastarg"
+      fi
+    done
+
+    case "$user_target" in
+    set)
+      ;;
+    no)
+      # Get the name of the library object.
+      libobj=`$echo "X$srcfile" | $Xsed -e 's%^.*/%%'`
+      ;;
+    *)
+      $echo "$modename: you must specify a target with \`-o'" 1>&2
+      exit 1
+      ;;
+    esac
+
+    # Recognize several different file suffixes.
+    # If the user specifies -o file.o, it is replaced with file.lo
+    xform='[cCFSfmso]'
+    case "$libobj" in
+    *.ada) xform=ada ;;
+    *.adb) xform=adb ;;
+    *.ads) xform=ads ;;
+    *.asm) xform=asm ;;
+    *.c++) xform=c++ ;;
+    *.cc) xform=cc ;;
+    *.cpp) xform=cpp ;;
+    *.cxx) xform=cxx ;;
+    *.f90) xform=f90 ;;
+    *.for) xform=for ;;
+    esac
+
+    libobj=`$echo "X$libobj" | $Xsed -e "s/\.$xform$/.lo/"`
+
+    case "$libobj" in
+    *.lo) obj=`$echo "X$libobj" | $Xsed -e "$lo2o"` ;;
+    *)
+      $echo "$modename: cannot determine name of library object from \`$libobj'" 1>&2
+      exit 1
+      ;;
+    esac
+
+    if test -z "$base_compile"; then
+      $echo "$modename: you must specify a compilation command" 1>&2
+      $echo "$help" 1>&2
+      exit 1
+    fi
+
+    # Delete any leftover library objects.
+    if test "$build_old_libs" = yes; then
+      removelist="$obj $libobj"
+    else
+      removelist="$libobj"
+    fi
+
+    $run $rm $removelist
+    trap "$run $rm $removelist; exit 1" 1 2 15
+
+    # Calculate the filename of the output object if compiler does
+    # not support -o with -c
+    if test "$compiler_c_o" = no; then
+      output_obj=`$echo "X$srcfile" | $Xsed -e 's%^.*/%%' -e 's%\..*$%%'`.${objext}
+      lockfile="$output_obj.lock"
+      removelist="$removelist $output_obj $lockfile"
+      trap "$run $rm $removelist; exit 1" 1 2 15
+    else
+      need_locks=no
+      lockfile=
+    fi
+
+    # Lock this critical section if it is needed
+    # We use this script file to make the link, it avoids creating a new file
+    if test "$need_locks" = yes; then
+      until ln "$0" "$lockfile" 2>/dev/null; do
+       $show "Waiting for $lockfile to be removed"
+       sleep 2
+      done
+    elif test "$need_locks" = warn; then
+      if test -f "$lockfile"; then
+       echo "\
+*** ERROR, $lockfile exists and contains:
+`cat $lockfile 2>/dev/null`
+
+This indicates that another process is trying to use the same
+temporary object file, and libtool could not work around it because
+your compiler does not support \`-c' and \`-o' together.  If you
+repeat this compilation, it may succeed, by chance, but you had better
+avoid parallel builds (make -j) in this platform, or get a better
+compiler."
+
+       $run $rm $removelist
+       exit 1
+      fi
+      echo $srcfile > "$lockfile"
+    fi
+
+    if test -n "$fix_srcfile_path"; then
+      eval srcfile=\"$fix_srcfile_path\"
+    fi
+
+    # Only build a PIC object if we are building libtool libraries.
+    if test "$build_libtool_libs" = yes; then
+      # Without this assignment, base_compile gets emptied.
+      fbsd_hideous_sh_bug=$base_compile
+
+      # All platforms use -DPIC, to notify preprocessed assembler code.
+      command="$base_compile $pic_flag -DPIC $srcfile"
+      if test "$build_old_libs" = yes; then
+       lo_libobj="$libobj"
+       dir=`$echo "X$libobj" | $Xsed -e 's%/[^/]*$%%'`
+       if test "X$dir" = "X$libobj"; then
+         dir="$objdir"
+       else
+         dir="$dir/$objdir"
+       fi
+       libobj="$dir/"`$echo "X$libobj" | $Xsed -e 's%^.*/%%'`
+
+       if test -d "$dir"; then
+         $show "$rm $libobj"
+         $run $rm $libobj
+       else
+         $show "$mkdir $dir"
+         $run $mkdir $dir
+         status=$?
+         if test $status -ne 0 && test ! -d $dir; then
+           exit $status
+         fi
+       fi
+      fi
+      if test "$compiler_o_lo" = yes; then
+       output_obj="$libobj"
+       command="$command -o $output_obj"
+      elif test "$compiler_c_o" = yes; then
+       output_obj="$obj"
+       command="$command -o $output_obj"
+      fi
+
+      $run $rm "$output_obj"
+      $show "$command"
+      if $run eval "$command"; then :
+      else
+       test -n "$output_obj" && $run $rm $removelist
+       exit 1
+      fi
+
+      if test "$need_locks" = warn &&
+        test x"`cat $lockfile 2>/dev/null`" != x"$srcfile"; then
+       echo "\
+*** ERROR, $lockfile contains:
+`cat $lockfile 2>/dev/null`
+
+but it should contain:
+$srcfile
+
+This indicates that another process is trying to use the same
+temporary object file, and libtool could not work around it because
+your compiler does not support \`-c' and \`-o' together.  If you
+repeat this compilation, it may succeed, by chance, but you had better
+avoid parallel builds (make -j) in this platform, or get a better
+compiler."
+
+       $run $rm $removelist
+       exit 1
+      fi
+
+      # Just move the object if needed, then go on to compile the next one
+      if test x"$output_obj" != x"$libobj"; then
+       $show "$mv $output_obj $libobj"
+       if $run $mv $output_obj $libobj; then :
+       else
+         error=$?
+         $run $rm $removelist
+         exit $error
+       fi
+      fi
+
+      # If we have no pic_flag, then copy the object into place and finish.
+      if test -z "$pic_flag" && test "$build_old_libs" = yes; then
+       # Rename the .lo from within objdir to obj
+       if test -f $obj; then
+         $show $rm $obj
+         $run $rm $obj
+       fi
+
+       $show "$mv $libobj $obj"
+       if $run $mv $libobj $obj; then :
+       else
+         error=$?
+         $run $rm $removelist
+         exit $error
+       fi
+
+       # Now arrange that obj and lo_libobj become the same file
+       $show "$LN_S $obj $lo_libobj"
+       if $run $LN_S $obj $lo_libobj; then
+         exit 0
+       else
+         error=$?
+         $run $rm $removelist
+         exit $error
+       fi
+      fi
+
+      # Allow error messages only from the first compilation.
+      suppress_output=' >/dev/null 2>&1'
+    fi
+
+    # Only build a position-dependent object if we build old libraries.
+    if test "$build_old_libs" = yes; then
+      command="$base_compile $srcfile"
+      if test "$compiler_c_o" = yes; then
+       command="$command -o $obj"
+       output_obj="$obj"
+      fi
+
+      # Suppress compiler output if we already did a PIC compilation.
+      command="$command$suppress_output"
+      $run $rm "$output_obj"
+      $show "$command"
+      if $run eval "$command"; then :
+      else
+       $run $rm $removelist
+       exit 1
+      fi
+
+      if test "$need_locks" = warn &&
+        test x"`cat $lockfile 2>/dev/null`" != x"$srcfile"; then
+       echo "\
+*** ERROR, $lockfile contains:
+`cat $lockfile 2>/dev/null`
+
+but it should contain:
+$srcfile
+
+This indicates that another process is trying to use the same
+temporary object file, and libtool could not work around it because
+your compiler does not support \`-c' and \`-o' together.  If you
+repeat this compilation, it may succeed, by chance, but you had better
+avoid parallel builds (make -j) in this platform, or get a better
+compiler."
+
+       $run $rm $removelist
+       exit 1
+      fi
+
+      # Just move the object if needed
+      if test x"$output_obj" != x"$obj"; then
+       $show "$mv $output_obj $obj"
+       if $run $mv $output_obj $obj; then :
+       else
+         error=$?
+         $run $rm $removelist
+         exit $error
+       fi
+      fi
+
+      # Create an invalid libtool object if no PIC, so that we do not
+      # accidentally link it into a program.
+      if test "$build_libtool_libs" != yes; then
+       $show "echo timestamp > $libobj"
+       $run eval "echo timestamp > \$libobj" || exit $?
+      else
+       # Move the .lo from within objdir
+       $show "$mv $libobj $lo_libobj"
+       if $run $mv $libobj $lo_libobj; then :
+       else
+         error=$?
+         $run $rm $removelist
+         exit $error
+       fi
+      fi
+    fi
+
+    # Unlock the critical section if it was locked
+    if test "$need_locks" != no; then
+      $rm "$lockfile"
+    fi
+
+    exit 0
+    ;;
+
+  # libtool link mode
+  link)
+    modename="$modename: link"
+    C_compiler="$CC" # save it, to compile generated C sources
+    CC="$nonopt"
+    case "$host" in
+    *-*-cygwin* | *-*-mingw* | *-*-os2*)
+      # It is impossible to link a dll without this setting, and
+      # we shouldn't force the makefile maintainer to figure out
+      # which system we are compiling for in order to pass an extra
+      # flag for every libtool invokation.
+      # allow_undefined=no
+
+      # FIXME: Unfortunately, there are problems with the above when trying
+      # to make a dll which has undefined symbols, in which case not
+      # even a static library is built.  For now, we need to specify
+      # -no-undefined on the libtool link line when we can be certain
+      # that all symbols are satisfied, otherwise we get a static library.
+      allow_undefined=yes
+
+      # This is a source program that is used to create dlls on Windows
+      # Don't remove nor modify the starting and closing comments
+# /* ltdll.c starts here */
+# #define WIN32_LEAN_AND_MEAN
+# #include <windows.h>
+# #undef WIN32_LEAN_AND_MEAN
+# #include <stdio.h>
+#
+# #ifndef __CYGWIN__
+# #  ifdef __CYGWIN32__
+# #    define __CYGWIN__ __CYGWIN32__
+# #  endif
+# #endif
+#
+# #ifdef __cplusplus
+# extern "C" {
+# #endif
+# BOOL APIENTRY DllMain (HINSTANCE hInst, DWORD reason, LPVOID reserved);
+# #ifdef __cplusplus
+# }
+# #endif
+#
+# #ifdef __CYGWIN__
+# #include <cygwin/cygwin_dll.h>
+# DECLARE_CYGWIN_DLL( DllMain );
+# #endif
+# HINSTANCE __hDllInstance_base;
+#
+# BOOL APIENTRY
+# DllMain (HINSTANCE hInst, DWORD reason, LPVOID reserved)
+# {
+#   __hDllInstance_base = hInst;
+#   return TRUE;
+# }
+# /* ltdll.c ends here */
+      # This is a source program that is used to create import libraries
+      # on Windows for dlls which lack them. Don't remove nor modify the
+      # starting and closing comments
+# /* impgen.c starts here */
+# /*   Copyright (C) 1999 Free Software Foundation, Inc.
+# 
+#  This file is part of GNU libtool.
+# 
+#  This program is free software; you can redistribute it and/or modify
+#  it under the terms of the GNU General Public License as published by
+#  the Free Software Foundation; either version 2 of the License, or
+#  (at your option) any later version.
+# 
+#  This program is distributed in the hope that it will be useful,
+#  but WITHOUT ANY WARRANTY; without even the implied warranty of
+#  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+#  GNU General Public License for more details.
+# 
+#  You should have received a copy of the GNU General Public License
+#  along with this program; if not, write to the Free Software
+#  Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+#  */
+# 
+#  #include <stdio.h>          /* for printf() */
+#  #include <unistd.h>         /* for open(), lseek(), read() */
+#  #include <fcntl.h>          /* for O_RDONLY, O_BINARY */
+#  #include <string.h>         /* for strdup() */
+# 
+#  static unsigned int
+#  pe_get16 (fd, offset)
+#       int fd;
+#       int offset;
+#  {
+#    unsigned char b[2];
+#    lseek (fd, offset, SEEK_SET);
+#    read (fd, b, 2);
+#    return b[0] + (b[1]<<8);
+#  }
+# 
+#  static unsigned int
+#  pe_get32 (fd, offset)
+#      int fd;
+#      int offset;
+#  {
+#    unsigned char b[4];
+#    lseek (fd, offset, SEEK_SET);
+#    read (fd, b, 4);
+#    return b[0] + (b[1]<<8) + (b[2]<<16) + (b[3]<<24);
+#  }
+# 
+#  static unsigned int
+#  pe_as32 (ptr)
+#       void *ptr;
+#  {
+#    unsigned char *b = ptr;
+#    return b[0] + (b[1]<<8) + (b[2]<<16) + (b[3]<<24);
+#  }
+# 
+#  int
+#  main (argc, argv)
+#      int argc;
+#      char *argv[];
+#  {
+#      int dll;
+#      unsigned long pe_header_offset, opthdr_ofs, num_entries, i;
+#      unsigned long export_rva, export_size, nsections, secptr, expptr;
+#      unsigned long name_rvas, nexp;
+#      unsigned char *expdata, *erva;
+#      char *filename, *dll_name;
+# 
+#      filename = argv[1];
+# 
+#      dll = open(filename, O_RDONLY|O_BINARY);
+#      if (!dll)
+#      return 1;
+# 
+#      dll_name = filename;
+#    
+#      for (i=0; filename[i]; i++)
+#      if (filename[i] == '/' || filename[i] == '\\'  || filename[i] == ':')
+#          dll_name = filename + i +1;
+# 
+#      pe_header_offset = pe_get32 (dll, 0x3c);
+#      opthdr_ofs = pe_header_offset + 4 + 20;
+#      num_entries = pe_get32 (dll, opthdr_ofs + 92);
+# 
+#      if (num_entries < 1) /* no exports */
+#      return 1;
+# 
+#      export_rva = pe_get32 (dll, opthdr_ofs + 96);
+#      export_size = pe_get32 (dll, opthdr_ofs + 100);
+#      nsections = pe_get16 (dll, pe_header_offset + 4 +2);
+#      secptr = (pe_header_offset + 4 + 20 +
+#            pe_get16 (dll, pe_header_offset + 4 + 16));
+# 
+#      expptr = 0;
+#      for (i = 0; i < nsections; i++)
+#      {
+#      char sname[8];
+#      unsigned long secptr1 = secptr + 40 * i;
+#      unsigned long vaddr = pe_get32 (dll, secptr1 + 12);
+#      unsigned long vsize = pe_get32 (dll, secptr1 + 16);
+#      unsigned long fptr = pe_get32 (dll, secptr1 + 20);
+#      lseek(dll, secptr1, SEEK_SET);
+#      read(dll, sname, 8);
+#      if (vaddr <= export_rva && vaddr+vsize > export_rva)
+#      {
+#          expptr = fptr + (export_rva - vaddr);
+#          if (export_rva + export_size > vaddr + vsize)
+#              export_size = vsize - (export_rva - vaddr);
+#          break;
+#      }
+#      }
+# 
+#      expdata = (unsigned char*)malloc(export_size);
+#      lseek (dll, expptr, SEEK_SET);
+#      read (dll, expdata, export_size);
+#      erva = expdata - export_rva;
+# 
+#      nexp = pe_as32 (expdata+24);
+#      name_rvas = pe_as32 (expdata+32);
+# 
+#      printf ("EXPORTS\n");
+#      for (i = 0; i<nexp; i++)
+#      {
+#      unsigned long name_rva = pe_as32 (erva+name_rvas+i*4);
+#      printf ("\t%s @ %ld ;\n", erva+name_rva, 1+ i);
+#      }
+# 
+#      return 0;
+#  }
+# /* impgen.c ends here */
+      ;;
+    *)
+      allow_undefined=yes
+      ;;
+    esac
+    compile_command="$CC"
+    finalize_command="$CC"
+
+    compile_rpath=
+    finalize_rpath=
+    compile_shlibpath=
+    finalize_shlibpath=
+    convenience=
+    old_convenience=
+    deplibs=
+    linkopts=
+
+    if test -n "$shlibpath_var"; then
+      # get the directories listed in $shlibpath_var
+      eval lib_search_path=\`\$echo \"X \${$shlibpath_var}\" \| \$Xsed -e \'s/:/ /g\'\`
+    else
+      lib_search_path=
+    fi
+    # now prepend the system-specific ones
+    eval lib_search_path=\"$sys_lib_search_path_spec\$lib_search_path\"
+    eval sys_lib_dlsearch_path=\"$sys_lib_dlsearch_path_spec\"
+    
+    avoid_version=no
+    dlfiles=
+    dlprefiles=
+    dlself=no
+    export_dynamic=no
+    export_symbols=
+    export_symbols_regex=
+    generated=
+    libobjs=
+    link_against_libtool_libs=
+    ltlibs=
+    module=no
+    objs=
+    prefer_static_libs=no
+    preload=no
+    prev=
+    prevarg=
+    release=
+    rpath=
+    xrpath=
+    perm_rpath=
+    temp_rpath=
+    thread_safe=no
+    vinfo=
+
+    # We need to know -static, to get the right output filenames.
+    for arg
+    do
+      case "$arg" in
+      -all-static | -static)
+       if test "X$arg" = "X-all-static"; then
+         if test "$build_libtool_libs" = yes && test -z "$link_static_flag"; then
+           $echo "$modename: warning: complete static linking is impossible in this configuration" 1>&2
+         fi
+         if test -n "$link_static_flag"; then
+           dlopen_self=$dlopen_self_static
+         fi
+       else
+         if test -z "$pic_flag" && test -n "$link_static_flag"; then
+           dlopen_self=$dlopen_self_static
+         fi
+       fi
+       build_libtool_libs=no
+       build_old_libs=yes
+       prefer_static_libs=yes
+       break
+       ;;
+      esac
+    done
+
+    # See if our shared archives depend on static archives.
+    test -n "$old_archive_from_new_cmds" && build_old_libs=yes
+
+    # Go through the arguments, transforming them on the way.
+    while test $# -gt 0; do
+      arg="$1"
+      shift
+
+      # If the previous option needs an argument, assign it.
+      if test -n "$prev"; then
+       case "$prev" in
+       output)
+         compile_command="$compile_command @OUTPUT@"
+         finalize_command="$finalize_command @OUTPUT@"
+         ;;
+       esac
+
+       case "$prev" in
+       dlfiles|dlprefiles)
+         if test "$preload" = no; then
+           # Add the symbol object into the linking commands.
+           compile_command="$compile_command @SYMFILE@"
+           finalize_command="$finalize_command @SYMFILE@"
+           preload=yes
+         fi
+         case "$arg" in
+         *.la | *.lo) ;;  # We handle these cases below.
+         force)
+           if test "$dlself" = no; then
+             dlself=needless
+             export_dynamic=yes
+           fi
+           prev=
+           continue
+           ;;
+         self)
+           if test "$prev" = dlprefiles; then
+             dlself=yes
+           elif test "$prev" = dlfiles && test "$dlopen_self" != yes; then
+             dlself=yes
+           else
+             dlself=needless
+             export_dynamic=yes
+           fi
+           prev=
+           continue
+           ;;
+         *)
+           if test "$prev" = dlfiles; then
+             dlfiles="$dlfiles $arg"
+           else
+             dlprefiles="$dlprefiles $arg"
+           fi
+           prev=
+           ;;
+         esac
+         ;;
+       expsyms)
+         export_symbols="$arg"
+         if test ! -f "$arg"; then
+           $echo "$modename: symbol file \`$arg' does not exist"
+           exit 1
+         fi
+         prev=
+         continue
+         ;;
+       expsyms_regex)
+         export_symbols_regex="$arg"
+         prev=
+         continue
+         ;;
+       release)
+         if test "$release_suffix" = all; then
+           release="$arg"
+         elif test "$release_suffix" = yes; then
+           release="-$arg"
+         fi
+         prev=
+         continue
+         ;;
+       rpath | xrpath)
+         # We need an absolute path.
+         case "$arg" in
+         [\\/]* | [A-Za-z]:[\\/]*) ;;
+         *)
+           $echo "$modename: only absolute run-paths are allowed" 1>&2
+           exit 1
+           ;;
+         esac
+         if test "$prev" = rpath; then
+           case "$rpath " in
+           *" $arg "*) ;;
+           *) rpath="$rpath $arg" ;;
+           esac
+         else
+           case "$xrpath " in
+           *" $arg "*) ;;
+           *) xrpath="$xrpath $arg" ;;
+           esac
+         fi
+         prev=
+         continue
+         ;;
+       *)
+         eval "$prev=\"\$arg\""
+         prev=
+         continue
+         ;;
+       esac
+      fi
+
+      prevarg="$arg"
+
+      case "$arg" in
+      -all-static)
+       if test -n "$link_static_flag"; then
+         compile_command="$compile_command $link_static_flag"
+         finalize_command="$finalize_command $link_static_flag"
+       fi
+       continue
+       ;;
+
+      -allow-undefined)
+       # FIXME: remove this flag sometime in the future.
+       $echo "$modename: \`-allow-undefined' is deprecated because it is the default" 1>&2
+       continue
+       ;;
+
+      -avoid-version)
+       build_old_libs=no
+       avoid_version=yes
+       continue
+       ;;
+
+      -dlopen)
+       prev=dlfiles
+       continue
+       ;;
+
+      -dlpreopen)
+       prev=dlprefiles
+       continue
+       ;;
+
+      -export-dynamic)
+       export_dynamic=yes
+       continue
+       ;;
+
+      -export-symbols | -export-symbols-regex)
+       if test -n "$export_symbols" || test -n "$export_symbols_regex"; then
+         $echo "$modename: not more than one -exported-symbols argument allowed"
+         exit 1
+       fi
+       if test "X$arg" = "X-export-symbols"; then
+         prev=expsyms
+       else
+         prev=expsyms_regex
+       fi
+       continue
+       ;;
+
+      -L*)
+       dir=`$echo "X$arg" | $Xsed -e 's/^-L//'`
+       # We need an absolute path.
+       case "$dir" in
+       [\\/]* | [A-Za-z]:[\\/]*) ;;
+       *)
+         absdir=`cd "$dir" && pwd`
+         if test -z "$absdir"; then
+           $echo "$modename: warning: cannot determine absolute directory name of \`$dir'" 1>&2
+           $echo "$modename: passing it literally to the linker, although it might fail" 1>&2
+           absdir="$dir"
+         fi
+         dir="$absdir"
+         ;;
+       esac
+       case " $deplibs " in
+       *" $arg "*) ;;
+       *) deplibs="$deplibs $arg";;
+       esac
+       case " $lib_search_path " in
+       *" $dir "*) ;;
+       *) lib_search_path="$lib_search_path $dir";;
+       esac
+       case "$host" in
+       *-*-cygwin* | *-*-mingw* | *-*-os2*)
+         dllsearchdir=`cd "$dir" && pwd || echo "$dir"`
+         case ":$dllsearchpath:" in
+         ::) dllsearchpath="$dllsearchdir";;
+         *":$dllsearchdir:"*) ;;
+         *) dllsearchpath="$dllsearchpath:$dllsearchdir";;
+         esac
+         ;;
+       esac
+       ;;
+
+      -l*)
+       if test "$arg" = "-lc"; then
+         case "$host" in
+         *-*-cygwin* | *-*-mingw* | *-*-os2* | *-*-beos*)
+           # These systems don't actually have c library (as such)
+           continue
+           ;;
+         esac
+       elif test "$arg" = "-lm"; then
+         case "$host" in
+         *-*-cygwin* | *-*-beos*)
+           # These systems don't actually have math library (as such)
+           continue
+           ;;
+         esac
+       fi
+       deplibs="$deplibs $arg"
+       ;;
+
+      -?thread)
+       deplibs="$deplibs $arg"
+       ;;
+
+      -module)
+       module=yes
+       continue
+       ;;
+
+      -no-undefined)
+       allow_undefined=no
+       continue
+       ;;
+
+      -o) prev=output ;;
+
+      -release)
+       prev=release
+       continue
+       ;;
+
+      -rpath)
+       prev=rpath
+       continue
+       ;;
+
+      -R)
+       prev=xrpath
+       continue
+       ;;
+
+      -R*)
+       dir=`$echo "X$arg" | $Xsed -e 's/^-R//'`
+       # We need an absolute path.
+       case "$dir" in
+       [\\/]* | [A-Za-z]:[\\/]*) ;;
+       *)
+         $echo "$modename: only absolute run-paths are allowed" 1>&2
+         exit 1
+         ;;
+       esac
+       case "$xrpath " in
+       *" $dir "*) ;;
+       *) xrpath="$xrpath $dir" ;;
+       esac
+       continue
+       ;;
+
+      -static)
+       # If we have no pic_flag, then this is the same as -all-static.
+       if test -z "$pic_flag" && test -n "$link_static_flag"; then
+         compile_command="$compile_command $link_static_flag"
+         finalize_command="$finalize_command $link_static_flag"
+       fi
+       continue
+       ;;
+
+      -thread-safe)
+       thread_safe=yes
+       continue
+       ;;
+
+      -version-info)
+       prev=vinfo
+       continue
+       ;;
+
+      # Some other compiler flag.
+      -* | +*)
+       # Unknown arguments in both finalize_command and compile_command need
+       # to be aesthetically quoted because they are evaled later.
+       arg=`$echo "X$arg" | $Xsed -e "$sed_quote_subst"`
+       case "$arg" in
+       *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \   ]*|*]*)
+         arg="\"$arg\""
+         ;;
+       esac
+       ;;
+
+      *.o | *.obj | *.a | *.lib)
+       # A standard object.
+       libobjs="$libobjs $arg"
+       ;;
+
+      *.lo)
+       # A library object.
+       if test "$prev" = dlfiles; then
+         dlfiles="$dlfiles $arg"
+         if test "$build_libtool_libs" = yes && test "$dlopen" = yes; then
+           prev=
+           continue
+         else
+           # If libtool objects are unsupported, then we need to preload.
+           prev=dlprefiles
+         fi
+       fi
+
+       if test "$prev" = dlprefiles; then
+         # Preload the old-style object.
+         dlprefiles="$dlprefiles "`$echo "X$arg" | $Xsed -e "$lo2o"`
+         prev=
+       fi
+       libobjs="$libobjs $arg"
+       ;;
+
+      *.la)
+       # A libtool-controlled library.
+
+       dlname=
+       libdir=
+       library_names=
+       old_library=
+
+       # Check to see that this really is a libtool archive.
+       if (sed -e '2q' $arg | egrep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then :
+       else
+         $echo "$modename: \`$arg' is not a valid libtool archive" 1>&2
+         exit 1
+       fi
+
+       # If the library was installed with an old release of libtool,
+       # it will not redefine variable installed.
+       installed=yes
+
+       # Read the .la file
+       # If there is no directory component, then add one.
+       case "$arg" in
+       */* | *\\*) . $arg ;;
+       *) . ./$arg ;;
+       esac
+
+       # Get the name of the library we link against.
+       linklib=
+       for l in $old_library $library_names; do
+         linklib="$l"
+       done
+
+       if test -z "$linklib"; then
+         $echo "$modename: cannot find name of link library for \`$arg'" 1>&2
+         exit 1
+       fi
+
+       # Find the relevant object directory and library name.
+       name=`$echo "X$arg" | $Xsed -e 's%^.*/%%' -e 's/\.la$//' -e 's/^lib//'`
+
+       if test "X$installed" = Xyes; then
+         dir="$libdir"
+       else
+         dir=`$echo "X$arg" | $Xsed -e 's%/[^/]*$%%'`
+         if test "X$dir" = "X$arg"; then
+           dir="$objdir"
+         else
+           dir="$dir/$objdir"
+         fi
+       fi
+
+       if test -n "$dependency_libs"; then
+         # Extract -R and -L from dependency_libs
+         temp_deplibs=
+         for deplib in $dependency_libs; do
+           case "$deplib" in
+           -R*) temp_xrpath=`$echo "X$deplib" | $Xsed -e 's/^-R//'`
+                case " $rpath $xrpath " in
+                *" $temp_xrpath "*) ;;
+                *) xrpath="$xrpath $temp_xrpath";;
+                esac;;
+           -L*) case "$compile_command $temp_deplibs " in
+                *" $deplib "*) ;;
+                *) temp_deplibs="$temp_deplibs $deplib";;
+                esac
+                temp_dir=`$echo "X$deplib" | $Xsed -e 's/^-L//'`
+                case " $lib_search_path " in
+                *" $temp_dir "*) ;;
+                *) lib_search_path="$lib_search_path $temp_dir";;
+                esac
+                ;;
+           *) temp_deplibs="$temp_deplibs $deplib";;
+           esac
+         done
+         dependency_libs="$temp_deplibs"
+       fi
+
+       if test -z "$libdir"; then
+         # It is a libtool convenience library, so add in its objects.
+         convenience="$convenience $dir/$old_library"
+         old_convenience="$old_convenience $dir/$old_library"
+         deplibs="$deplibs$dependency_libs"
+         compile_command="$compile_command $dir/$old_library$dependency_libs"
+         finalize_command="$finalize_command $dir/$old_library$dependency_libs"
+         continue
+       fi
+
+       # This library was specified with -dlopen.
+       if test "$prev" = dlfiles; then
+         dlfiles="$dlfiles $arg"
+         if test -z "$dlname" || test "$dlopen" != yes || test "$build_libtool_libs" = no; then
+           # If there is no dlname, no dlopen support or we're linking statically,
+           # we need to preload.
+           prev=dlprefiles
+         else
+           # We should not create a dependency on this library, but we
+           # may need any libraries it requires.
+           compile_command="$compile_command$dependency_libs"
+           finalize_command="$finalize_command$dependency_libs"
+           prev=
+           continue
+         fi
+       fi
+
+       # The library was specified with -dlpreopen.
+       if test "$prev" = dlprefiles; then
+         # Prefer using a static library (so that no silly _DYNAMIC symbols
+         # are required to link).
+         if test -n "$old_library"; then
+           dlprefiles="$dlprefiles $dir/$old_library"
+         else
+           dlprefiles="$dlprefiles $dir/$linklib"
+         fi
+         prev=
+       fi
+
+       if test -n "$library_names" &&
+          { test "$prefer_static_libs" = no || test -z "$old_library"; }; then
+         link_against_libtool_libs="$link_against_libtool_libs $arg"
+         if test -n "$shlibpath_var"; then
+           # Make sure the rpath contains only unique directories.
+           case "$temp_rpath " in
+           *" $dir "*) ;;
+           *) temp_rpath="$temp_rpath $dir" ;;
+           esac
+         fi
+
+         # We need an absolute path.
+         case "$dir" in
+         [\\/] | [A-Za-z]:[\\/]*) absdir="$dir" ;;
+         *)
+           absdir=`cd "$dir" && pwd`
+           if test -z "$absdir"; then
+             $echo "$modename: warning: cannot determine absolute directory name of \`$dir'" 1>&2
+             $echo "$modename: passing it literally to the linker, although it might fail" 1>&2
+             absdir="$dir"
+           fi
+           ;;
+         esac
+         
+         # This is the magic to use -rpath.
+         # Skip directories that are in the system default run-time
+         # search path, unless they have been requested with -R.
+         case " $sys_lib_dlsearch_path " in
+         *" $absdir "*) ;;
+         *)
+           case "$compile_rpath " in
+           *" $absdir "*) ;;
+           *) compile_rpath="$compile_rpath $absdir" 
+           esac
+           ;;
+         esac
+
+         case " $sys_lib_dlsearch_path " in
+         *" $libdir "*) ;;
+         *)
+           case "$finalize_rpath " in
+           *" $libdir "*) ;;
+           *) finalize_rpath="$finalize_rpath $libdir"
+           esac
+           ;;
+         esac
+
+         lib_linked=yes
+         case "$hardcode_action" in
+         immediate | unsupported)
+           if test "$hardcode_direct" = no; then
+             compile_command="$compile_command $dir/$linklib"
+             deplibs="$deplibs $dir/$linklib"
+             case "$host" in
+             *-*-cygwin* | *-*-mingw* | *-*-os2*)
+               dllsearchdir=`cd "$dir" && pwd || echo "$dir"`
+               if test -n "$dllsearchpath"; then
+                 dllsearchpath="$dllsearchpath:$dllsearchdir"
+               else
+                 dllsearchpath="$dllsearchdir"
+               fi
+               ;;
+             esac
+           elif test "$hardcode_minus_L" = no; then
+             case "$host" in
+             *-*-sunos*)
+               compile_shlibpath="$compile_shlibpath$dir:"
+               ;;
+             esac
+             case "$compile_command " in
+             *" -L$dir "*) ;;
+             *) compile_command="$compile_command -L$dir";;
+             esac
+             compile_command="$compile_command -l$name"
+             deplibs="$deplibs -L$dir -l$name"
+           elif test "$hardcode_shlibpath_var" = no; then
+             case ":$compile_shlibpath:" in
+             *":$dir:"*) ;;
+             *) compile_shlibpath="$compile_shlibpath$dir:";;
+             esac
+             compile_command="$compile_command -l$name"
+             deplibs="$deplibs -l$name"
+           else
+             lib_linked=no
+           fi
+           ;;
+
+         relink)
+           if test "$hardcode_direct" = yes; then
+             compile_command="$compile_command $absdir/$linklib"
+             deplibs="$deplibs $absdir/$linklib"
+           elif test "$hardcode_minus_L" = yes; then
+             case "$compile_command " in
+             *" -L$absdir "*) ;;
+             *) compile_command="$compile_command -L$absdir";;
+             esac
+             compile_command="$compile_command -l$name"
+             deplibs="$deplibs -L$absdir -l$name"
+           elif test "$hardcode_shlibpath_var" = yes; then
+             case ":$compile_shlibpath:" in
+             *":$absdir:"*) ;;
+             *) compile_shlibpath="$compile_shlibpath$absdir:";;
+             esac
+             compile_command="$compile_command -l$name"
+             deplibs="$deplibs -l$name"
+           else
+             lib_linked=no
+           fi
+           ;;
+
+         *)
+           lib_linked=no
+           ;;
+         esac
+
+         if test "$lib_linked" != yes; then
+           $echo "$modename: configuration error: unsupported hardcode properties"
+           exit 1
+         fi
+
+         # Finalize command for both is simple: just hardcode it.
+         if test "$hardcode_direct" = yes; then
+           finalize_command="$finalize_command $libdir/$linklib"
+         elif test "$hardcode_minus_L" = yes; then
+           case "$finalize_command " in
+           *" -L$libdir "*) ;;
+           *) finalize_command="$finalize_command -L$libdir";;
+           esac
+           finalize_command="$finalize_command -l$name"
+         elif test "$hardcode_shlibpath_var" = yes; then
+           case ":$finalize_shlibpath:" in
+           *":$libdir:"*) ;;
+           *) finalize_shlibpath="$finalize_shlibpath$libdir:";;
+           esac
+           finalize_command="$finalize_command -l$name"
+         else
+           # We cannot seem to hardcode it, guess we'll fake it.
+           case "$finalize_command " in
+           *" -L$dir "*) ;;
+           *) finalize_command="$finalize_command -L$libdir";;
+           esac
+           finalize_command="$finalize_command -l$name"
+         fi
+       else
+         # Transform directly to old archives if we don't build new libraries.
+         if test -n "$pic_flag" && test -z "$old_library"; then
+           $echo "$modename: cannot find static library for \`$arg'" 1>&2
+           exit 1
+         fi
+
+         # Here we assume that one of hardcode_direct or hardcode_minus_L
+         # is not unsupported.  This is valid on all known static and
+         # shared platforms.
+         if test "$hardcode_direct" != unsupported; then
+           test -n "$old_library" && linklib="$old_library"
+           compile_command="$compile_command $dir/$linklib"
+           finalize_command="$finalize_command $dir/$linklib"
+         else
+           case "$compile_command " in
+           *" -L$dir "*) ;;
+           *) compile_command="$compile_command -L$dir";;
+           esac
+           compile_command="$compile_command -l$name"
+           case "$finalize_command " in
+           *" -L$dir "*) ;;
+           *) finalize_command="$finalize_command -L$dir";;
+           esac
+           finalize_command="$finalize_command -l$name"
+         fi
+       fi
+
+       # Add in any libraries that this one depends upon.
+       compile_command="$compile_command$dependency_libs"
+       finalize_command="$finalize_command$dependency_libs"
+       continue
+       ;;
+
+      # Some other compiler argument.
+      *)
+       # Unknown arguments in both finalize_command and compile_command need
+       # to be aesthetically quoted because they are evaled later.
+       arg=`$echo "X$arg" | $Xsed -e "$sed_quote_subst"`
+       case "$arg" in
+       *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \   ]*|*]*)
+         arg="\"$arg\""
+         ;;
+       esac
+       ;;
+      esac
+
+      # Now actually substitute the argument into the commands.
+      if test -n "$arg"; then
+       compile_command="$compile_command $arg"
+       finalize_command="$finalize_command $arg"
+      fi
+    done
+
+    if test -n "$prev"; then
+      $echo "$modename: the \`$prevarg' option requires an argument" 1>&2
+      $echo "$help" 1>&2
+      exit 1
+    fi
+
+    if test "$export_dynamic" = yes && test -n "$export_dynamic_flag_spec"; then
+      eval arg=\"$export_dynamic_flag_spec\"
+      compile_command="$compile_command $arg"
+      finalize_command="$finalize_command $arg"
+    fi
+
+    oldlibs=
+    # calculate the name of the file, without its directory
+    outputname=`$echo "X$output" | $Xsed -e 's%^.*/%%'`
+    libobjs_save="$libobjs"
+
+    case "$output" in
+    "")
+      $echo "$modename: you must specify an output file" 1>&2
+      $echo "$help" 1>&2
+      exit 1
+      ;;
+
+    *.a | *.lib)
+      if test -n "$link_against_libtool_libs"; then
+       $echo "$modename: error: cannot link libtool libraries into archives" 1>&2
+       exit 1
+      fi
+
+      if test -n "$deplibs"; then
+       $echo "$modename: warning: \`-l' and \`-L' are ignored for archives" 1>&2
+      fi
+
+      if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then
+       $echo "$modename: warning: \`-dlopen' is ignored for archives" 1>&2
+      fi
+
+      if test -n "$rpath"; then
+       $echo "$modename: warning: \`-rpath' is ignored for archives" 1>&2
+      fi
+
+      if test -n "$xrpath"; then
+       $echo "$modename: warning: \`-R' is ignored for archives" 1>&2
+      fi
+
+      if test -n "$vinfo"; then
+       $echo "$modename: warning: \`-version-info' is ignored for archives" 1>&2
+      fi
+
+      if test -n "$release"; then
+       $echo "$modename: warning: \`-release' is ignored for archives" 1>&2
+      fi
+
+      if test -n "$export_symbols" || test -n "$export_symbols_regex"; then
+       $echo "$modename: warning: \`-export-symbols' is ignored for archives" 1>&2
+      fi
+
+      # Now set the variables for building old libraries.
+      build_libtool_libs=no
+      oldlibs="$output"
+      ;;
+
+    *.la)
+      # Make sure we only generate libraries of the form `libNAME.la'.
+      case "$outputname" in
+      lib*)
+       name=`$echo "X$outputname" | $Xsed -e 's/\.la$//' -e 's/^lib//'`
+       eval libname=\"$libname_spec\"
+       ;;
+      *)
+       if test "$module" = no; then
+         $echo "$modename: libtool library \`$output' must begin with \`lib'" 1>&2
+         $echo "$help" 1>&2
+         exit 1
+       fi
+       if test "$need_lib_prefix" != no; then
+         # Add the "lib" prefix for modules if required
+         name=`$echo "X$outputname" | $Xsed -e 's/\.la$//'`
+         eval libname=\"$libname_spec\"
+       else
+         libname=`$echo "X$outputname" | $Xsed -e 's/\.la$//'`
+       fi
+       ;;
+      esac
+
+      output_objdir=`$echo "X$output" | $Xsed -e 's%/[^/]*$%%'`
+      if test "X$output_objdir" = "X$output"; then
+       output_objdir="$objdir"
+      else
+       output_objdir="$output_objdir/$objdir"
+      fi
+
+      if test -n "$objs"; then
+       $echo "$modename: cannot build libtool library \`$output' from non-libtool objects:$objs" 2>&1
+       exit 1
+      fi
+
+      # How the heck are we supposed to write a wrapper for a shared library?
+      if test -n "$link_against_libtool_libs"; then
+        $echo "$modename: error: cannot link shared libraries into libtool libraries" 1>&2
+        exit 1
+      fi
+
+      if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then
+       $echo "$modename: warning: \`-dlopen' is ignored for libtool libraries" 1>&2
+      fi
+
+      set dummy $rpath
+      if test $# -gt 2; then
+       $echo "$modename: warning: ignoring multiple \`-rpath's for a libtool library" 1>&2
+      fi
+      install_libdir="$2"
+
+      oldlibs=
+      if test -z "$rpath"; then
+       if test "$build_libtool_libs" = yes; then
+         # Building a libtool convenience library.
+         libext=al
+         oldlibs="$output_objdir/$libname.$libext $oldlibs"
+         build_libtool_libs=convenience
+         build_old_libs=yes
+       fi
+       dependency_libs="$deplibs"
+
+       if test -n "$vinfo"; then
+         $echo "$modename: warning: \`-version-info' is ignored for convenience libraries" 1>&2
+       fi
+
+       if test -n "$release"; then
+         $echo "$modename: warning: \`-release' is ignored for convenience libraries" 1>&2
+       fi
+      else
+
+       # Parse the version information argument.
+       IFS="${IFS=     }"; save_ifs="$IFS"; IFS=':'
+       set dummy $vinfo 0 0 0
+       IFS="$save_ifs"
+
+       if test -n "$8"; then
+         $echo "$modename: too many parameters to \`-version-info'" 1>&2
+         $echo "$help" 1>&2
+         exit 1
+       fi
+
+       current="$2"
+       revision="$3"
+       age="$4"
+
+       # Check that each of the things are valid numbers.
+       case "$current" in
+       0 | [1-9] | [1-9][0-9]*) ;;
+       *)
+         $echo "$modename: CURRENT \`$current' is not a nonnegative integer" 1>&2
+         $echo "$modename: \`$vinfo' is not valid version information" 1>&2
+         exit 1
+         ;;
+       esac
+
+       case "$revision" in
+       0 | [1-9] | [1-9][0-9]*) ;;
+       *)
+         $echo "$modename: REVISION \`$revision' is not a nonnegative integer" 1>&2
+         $echo "$modename: \`$vinfo' is not valid version information" 1>&2
+         exit 1
+         ;;
+       esac
+
+       case "$age" in
+       0 | [1-9] | [1-9][0-9]*) ;;
+       *)
+         $echo "$modename: AGE \`$age' is not a nonnegative integer" 1>&2
+         $echo "$modename: \`$vinfo' is not valid version information" 1>&2
+         exit 1
+         ;;
+       esac
+
+       if test $age -gt $current; then
+         $echo "$modename: AGE \`$age' is greater than the current interface number \`$current'" 1>&2
+         $echo "$modename: \`$vinfo' is not valid version information" 1>&2
+         exit 1
+       fi
+
+       # Calculate the version variables.
+       major=
+       versuffix=
+       verstring=
+       case "$version_type" in
+       none) ;;
+
+       irix)
+         major=`expr $current - $age + 1`
+         versuffix="$major.$revision"
+         verstring="sgi$major.$revision"
+
+         # Add in all the interfaces that we are compatible with.
+         loop=$revision
+         while test $loop != 0; do
+           iface=`expr $revision - $loop`
+           loop=`expr $loop - 1`
+           verstring="sgi$major.$iface:$verstring"
+         done
+         ;;
+
+       linux)
+         major=.`expr $current - $age`
+         versuffix="$major.$age.$revision"
+         ;;
+
+       osf)
+         major=`expr $current - $age`
+         versuffix=".$current.$age.$revision"
+         verstring="$current.$age.$revision"
+
+         # Add in all the interfaces that we are compatible with.
+         loop=$age
+         while test $loop != 0; do
+           iface=`expr $current - $loop`
+           loop=`expr $loop - 1`
+           verstring="$verstring:${iface}.0"
+         done
+
+         # Make executables depend on our current version.
+         verstring="$verstring:${current}.0"
+         ;;
+
+       sunos)
+         major=".$current"
+         versuffix=".$current.$revision"
+         ;;
+
+       freebsd-aout)
+         major=".$current"
+         versuffix=".$current.$revision";
+         ;;
+
+       freebsd-elf)
+         major=".$current"
+         versuffix=".$current";
+         ;;
+
+       windows)
+         # Like Linux, but with '-' rather than '.', since we only
+         # want one extension on Windows 95.
+         major=`expr $current - $age`
+         versuffix="-$major-$age-$revision"
+         ;;
+
+       *)
+         $echo "$modename: unknown library version type \`$version_type'" 1>&2
+         echo "Fatal configuration error.  See the $PACKAGE docs for more information." 1>&2
+         exit 1
+         ;;
+       esac
+
+       # Clear the version info if we defaulted, and they specified a release.
+       if test -z "$vinfo" && test -n "$release"; then
+         major=
+         verstring="0.0"
+         if test "$need_version" = no; then
+           versuffix=
+         else
+           versuffix=".0.0"
+         fi
+       fi
+
+       # Remove version info from name if versioning should be avoided
+       if test "$avoid_version" = yes && test "$need_version" = no; then
+         major=
+         versuffix=
+         verstring=""
+       fi
+       
+       # Check to see if the archive will have undefined symbols.
+       if test "$allow_undefined" = yes; then
+         if test "$allow_undefined_flag" = unsupported; then
+           $echo "$modename: warning: undefined symbols not allowed in $host shared libraries" 1>&2
+           build_libtool_libs=no
+           build_old_libs=yes
+         fi
+       else
+         # Don't allow undefined symbols.
+         allow_undefined_flag="$no_undefined_flag"
+       fi
+
+       dependency_libs="$deplibs"
+       case "$host" in
+       *-*-cygwin* | *-*-mingw* | *-*-os2* | *-*-beos*)
+         # these systems don't actually have a c library (as such)!
+         ;;
+       *-*-freebsd*)
+         # FreeBSD doesn't need this...
+         ;;
+       *)
+         # Add libc to deplibs on all other systems.
+         deplibs="$deplibs -lc"
+         ;;
+       esac
+      fi
+
+      if test -n "$rpath$xrpath"; then
+       # If the user specified any rpath flags, then add them.
+       for libdir in $rpath $xrpath; do
+         # This is the magic to use -rpath.
+         case "$compile_rpath " in
+         *" $libdir "*) ;;
+         *) compile_rpath="$compile_rpath $libdir" ;;
+         esac
+         case "$finalize_rpath " in
+         *" $libdir "*) ;;
+         *) finalize_rpath="$finalize_rpath $libdir" ;;
+         esac
+       done
+      fi
+
+      # Now hardcode the library paths
+      rpath=
+      hardcode_libdirs=
+      for libdir in $compile_rpath; do
+       if test -n "$hardcode_libdir_flag_spec"; then
+         if test -n "$hardcode_libdir_separator"; then
+           if test -z "$hardcode_libdirs"; then
+             hardcode_libdirs="$libdir"
+           else
+             # Just accumulate the unique libdirs.
+             case "$hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator" in
+             *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*)
+               ;;
+             *)
+               hardcode_libdirs="$hardcode_libdirs$hardcode_libdir_separator$libdir"
+               ;;
+             esac
+           fi
+         else
+           eval flag=\"$hardcode_libdir_flag_spec\"
+           rpath="$rpath $flag"
+         fi
+       elif test -n "$runpath_var"; then
+         case "$perm_rpath " in
+         *" $libdir "*) ;;
+         *) perm_rpath="$perm_rpath $libdir" ;;
+         esac
+       fi
+      done
+      # Substitute the hardcoded libdirs into the rpath.
+      if test -n "$hardcode_libdir_separator" &&
+        test -n "$hardcode_libdirs"; then
+       libdir="$hardcode_libdirs"
+       eval rpath=\" $hardcode_libdir_flag_spec\"
+      fi
+      compile_rpath="$rpath"
+
+      rpath=
+      hardcode_libdirs=
+      for libdir in $finalize_rpath; do
+       if test -n "$hardcode_libdir_flag_spec"; then
+         if test -n "$hardcode_libdir_separator"; then
+           if test -z "$hardcode_libdirs"; then
+             hardcode_libdirs="$libdir"
+           else
+             # Just accumulate the unique libdirs.
+             case "$hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator" in
+             *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*)
+               ;;
+             *)
+               hardcode_libdirs="$hardcode_libdirs$hardcode_libdir_separator$libdir"
+               ;;
+             esac
+           fi
+         else
+           eval flag=\"$hardcode_libdir_flag_spec\"
+           rpath="$rpath $flag"
+         fi
+       elif test -n "$runpath_var"; then
+         case "$finalize_perm_rpath " in
+         *" $libdir "*) ;;
+         *) finalize_perm_rpath="$finalize_perm_rpath $libdir" ;;
+         esac
+       fi
+      done
+      # Substitute the hardcoded libdirs into the rpath.
+      if test -n "$hardcode_libdir_separator" &&
+        test -n "$hardcode_libdirs"; then
+       libdir="$hardcode_libdirs"
+       eval rpath=\" $hardcode_libdir_flag_spec\"
+      fi
+      finalize_rpath="$rpath"
+
+      # Create the output directory, or remove our outputs if we need to.
+      if test -d $output_objdir; then
+       $show "${rm}r $output_objdir/$outputname $output_objdir/$libname.* $output_objdir/${libname}${release}.*"
+       $run ${rm}r $output_objdir/$outputname $output_objdir/$libname.* $output_objdir/${libname}${release}.*
+      else
+       $show "$mkdir $output_objdir"
+       $run $mkdir $output_objdir
+       status=$?
+       if test $status -ne 0 && test ! -d $output_objdir; then
+         exit $status
+       fi
+      fi
+
+      # Now set the variables for building old libraries.
+      if test "$build_old_libs" = yes && test "$build_libtool_libs" != convenience ; then
+       if test "$release_suffix" = all; then
+        oldlibs="$oldlibs $output_objdir/$libname$release.$libext"
+       else
+        oldlibs="$oldlibs $output_objdir/$libname.$libext"
+       fi
+
+       # Transform .lo files to .o files.
+       oldobjs="$objs "`$echo "X$libobjs" | $SP2NL | $Xsed -e '/\.'${libext}'$/d' -e "$lo2o" | $NL2SP`
+      fi
+
+      if test "$build_libtool_libs" = yes; then
+       # Transform deplibs into only deplibs that can be linked in shared.
+       name_save=$name
+       libname_save=$libname
+       release_save=$release
+       versuffix_save=$versuffix
+       major_save=$major
+       # I'm not sure if I'm treating the release correctly.  I think
+       # release should show up in the -l (ie -lgmp5) so we don't want to
+       # add it in twice.  Is that correct?
+       release=""
+       versuffix=""
+       major=""
+       newdeplibs=
+       droppeddeps=no
+       case "$deplibs_check_method" in
+       pass_all)
+         # Don't check for shared/static.  Everything works.
+         # This might be a little naive.  We might want to check
+         # whether the library exists or not.  But this is on
+         # osf3 & osf4 and I'm not really sure... Just
+         # implementing what was already the behaviour.
+         newdeplibs=$deplibs
+         ;;
+       test_compile)
+         # This code stresses the "libraries are programs" paradigm to its
+         # limits. Maybe even breaks it.  We compile a program, linking it
+         # against the deplibs as a proxy for the library.  Then we can check
+         # whether they linked in statically or dynamically with ldd.
+         $rm conftest.c
+         cat > conftest.c <<EOF
+         int main() { return 0; }
+EOF
+         $rm conftest
+         $C_compiler -o conftest conftest.c $deplibs
+         if test $? -eq 0 ; then
+           ldd_output=`ldd conftest`
+           for i in $deplibs; do
+             name="`expr $i : '-l\(.*\)'`"
+             # If $name is empty we are operating on a -L argument.
+             if test "$name" != "" ; then
+               libname=`eval \\$echo \"$libname_spec\"`
+               deplib_matches=`eval \\$echo \"$library_names_spec\"`
+               set dummy $deplib_matches
+               deplib_match=$2
+               if test `expr "$ldd_output" : ".*$deplib_match"` -ne 0 ; then
+                 newdeplibs="$newdeplibs $i"
+               else
+                 droppeddeps=yes
+                 echo
+                 echo "*** Warning: This library needs some functionality provided by $i."
+                 echo "*** I have the capability to make that library automatically link in when"
+                 echo "*** you link to this library.  But I can only do this if you have a"
+                 echo "*** shared version of the library, which you do not appear to have."
+               fi
+             else
+               newdeplibs="$newdeplibs $i"
+             fi
+           done
+         else
+           # Error occured in the first compile.  Let's try to salvage the situation:
+           # Compile a seperate program for each library.
+           for i in $deplibs; do
+             name="`expr $i : '-l\(.*\)'`"
+            # If $name is empty we are operating on a -L argument.
+             if test "$name" != "" ; then
+               $rm conftest
+               $C_compiler -o conftest conftest.c $i
+               # Did it work?
+               if test $? -eq 0 ; then
+                 ldd_output=`ldd conftest`
+                 libname=`eval \\$echo \"$libname_spec\"`
+                 deplib_matches=`eval \\$echo \"$library_names_spec\"`
+                 set dummy $deplib_matches
+                 deplib_match=$2
+                 if test `expr "$ldd_output" : ".*$deplib_match"` -ne 0 ; then
+                   newdeplibs="$newdeplibs $i"
+                 else
+                   droppeddeps=yes
+                   echo
+                   echo "*** Warning: This library needs some functionality provided by $i."
+                   echo "*** I have the capability to make that library automatically link in when"
+                   echo "*** you link to this library.  But I can only do this if you have a"
+                   echo "*** shared version of the library, which you do not appear to have."
+                 fi
+               else
+                 droppeddeps=yes
+                 echo
+                 echo "*** Warning!  Library $i is needed by this library but I was not able to"
+                 echo "***  make it link in!  You will probably need to install it or some"
+                 echo "*** library that it depends on before this library will be fully"
+                 echo "*** functional.  Installing it before continuing would be even better."
+               fi
+             else
+               newdeplibs="$newdeplibs $i"
+             fi
+           done
+         fi
+         ;;
+       file_magic*)
+         set dummy $deplibs_check_method
+         file_magic_regex="`expr \"$deplibs_check_method\" : \"$2 \(.*\)\"`"
+         for a_deplib in $deplibs; do
+           name="`expr $a_deplib : '-l\(.*\)'`"
+           # If $name is empty we are operating on a -L argument.
+           if test "$name" != "" ; then
+             libname=`eval \\$echo \"$libname_spec\"`
+             for i in $lib_search_path; do
+                   potential_libs=`ls $i/$libname[.-]* 2>/dev/null`
+                   for potent_lib in $potential_libs; do
+                     # Follow soft links.
+                     if ls -lLd "$potent_lib" 2>/dev/null \
+                        | grep " -> " >/dev/null; then
+                       continue 
+                     fi
+                     # The statement above tries to avoid entering an
+                     # endless loop below, in case of cyclic links.
+                     # We might still enter an endless loop, since a link
+                     # loop can be closed while we follow links,
+                     # but so what?
+                     potlib="$potent_lib"
+                     while test -h "$potlib" 2>/dev/null; do
+                       potliblink=`ls -ld $potlib | sed 's/.* -> //'`
+                       case "$potliblink" in
+                       [\\/]* | [A-Za-z]:[\\/]*) potlib="$potliblink";;
+                       *) potlib=`$echo "X$potlib" | $Xsed -e 's,[^/]*$,,'`"$potliblink";;
+                       esac
+                     done
+                     if eval $file_magic_cmd \"\$potlib\" 2>/dev/null \
+                        | sed 10q \
+                        | egrep "$file_magic_regex" > /dev/null; then
+                       newdeplibs="$newdeplibs $a_deplib"
+                       a_deplib=""
+                       break 2
+                     fi
+                   done
+             done
+             if test -n "$a_deplib" ; then
+               droppeddeps=yes
+               echo
+               echo "*** Warning: This library needs some functionality provided by $a_deplib."
+               echo "*** I have the capability to make that library automatically link in when"
+               echo "*** you link to this library.  But I can only do this if you have a"
+               echo "*** shared version of the library, which you do not appear to have."
+             fi
+           else
+             # Add a -L argument.
+             newdeplibs="$newdeplibs $a_deplib"
+           fi
+         done # Gone through all deplibs.
+         ;;
+       none | unknown | *)
+         newdeplibs=""
+         if $echo "X $deplibs" | $Xsed -e 's/ -lc$//' \
+              -e 's/ -[LR][^ ]*//g' -e 's/[    ]//g' |
+            grep . >/dev/null; then
+           echo
+           if test "X$deplibs_check_method" = "Xnone"; then
+             echo "*** Warning: inter-library dependencies are not supported in this platform."
+           else
+             echo "*** Warning: inter-library dependencies are not known to be supported."
+           fi
+           echo "*** All declared inter-library dependencies are being dropped."
+           droppeddeps=yes
+         fi
+         ;;
+       esac
+       versuffix=$versuffix_save
+       major=$major_save
+       release=$release_save
+       libname=$libname_save
+       name=$name_save
+
+       if test "$droppeddeps" = yes; then
+         if test "$module" = yes; then
+           echo
+           echo "*** Warning: libtool could not satisfy all declared inter-library"
+           echo "*** dependencies of module $libname.  Therefore, libtool will create"
+           echo "*** a static module, that should work as long as the dlopening"
+           echo "*** application is linked with the -dlopen flag."
+           if test -z "$global_symbol_pipe"; then
+             echo
+             echo "*** However, this would only work if libtool was able to extract symbol"
+             echo "*** lists from a program, using \`nm' or equivalent, but libtool could"
+             echo "*** not find such a program.  So, this module is probably useless."
+             echo "*** \`nm' from GNU binutils and a full rebuild may help."
+           fi
+           if test "$build_old_libs" = no; then
+             if test "$release_suffix" = all; then
+               oldlibs="$output_objdir/$libname$release.$libext"
+             else
+               oldlibs="$output_objdir/$libname.$libext"
+             fi
+             build_libtool_libs=module
+             build_old_libs=yes
+           else
+             build_libtool_libs=no
+           fi
+         else
+           echo "*** The inter-library dependencies that have been dropped here will be"
+           echo "*** automatically added whenever a program is linked with this library"
+           echo "*** or is declared to -dlopen it."
+         fi
+       fi
+       # Done checking deplibs!
+       deplibs=$newdeplibs
+      fi
+
+      # All the library-specific variables (install_libdir is set above).
+      library_names=
+      old_library=
+      dlname=
+      
+      # Test again, we may have decided not to build it any more
+      if test "$build_libtool_libs" = yes; then
+       # Get the real and link names of the library.
+       eval library_names=\"$library_names_spec\"
+       set dummy $library_names
+       realname="$2"
+       shift; shift
+
+       if test -n "$soname_spec"; then
+         eval soname=\"$soname_spec\"
+       else
+         soname="$realname"
+       fi
+
+       lib="$output_objdir/$realname"
+       for link
+       do
+         linknames="$linknames $link"
+       done
+
+       # Ensure that we have .o objects for linkers which dislike .lo
+       # (e.g. aix) incase we are running --disable-static
+       for obj in $libobjs; do
+         oldobj=`$echo "X$obj" | $Xsed -e "$lo2o"`
+         if test ! -f $oldobj; then
+           $show "${LN_S} $obj $oldobj"
+           $run ${LN_S} $obj $oldobj || exit $?
+         fi
+       done
+
+       # Use standard objects if they are pic
+       test -z "$pic_flag" && libobjs=`$echo "X$libobjs" | $SP2NL | $Xsed -e "$lo2o" | $NL2SP`
+
+       # Prepare the list of exported symbols
+       if test -z "$export_symbols"; then
+         if test "$always_export_symbols" = yes || test -n "$export_symbols_regex"; then
+           $show "generating symbol list for \`$libname.la'"
+           export_symbols="$output_objdir/$libname.exp"
+           $run $rm $export_symbols
+           eval cmds=\"$export_symbols_cmds\"
+           IFS="${IFS=         }"; save_ifs="$IFS"; IFS='~'
+           for cmd in $cmds; do
+             IFS="$save_ifs"
+             $show "$cmd"
+             $run eval "$cmd" || exit $?
+           done
+           IFS="$save_ifs"
+           if test -n "$export_symbols_regex"; then
+             $show "egrep -e \"$export_symbols_regex\" \"$export_symbols\" > \"${export_symbols}T\""
+             $run eval 'egrep -e "$export_symbols_regex" "$export_symbols" > "${export_symbols}T"'
+             $show "$mv \"${export_symbols}T\" \"$export_symbols\""
+             $run eval '$mv "${export_symbols}T" "$export_symbols"'
+           fi
+         fi
+       fi
+
+       if test -n "$export_symbols" && test -n "$include_expsyms"; then
+         $run eval '$echo "X$include_expsyms" | $SP2NL >> "$export_symbols"'
+       fi
+
+       if test -n "$convenience"; then
+         if test -n "$whole_archive_flag_spec"; then
+           eval libobjs=\"\$libobjs $whole_archive_flag_spec\"
+         else
+           gentop="$output_objdir/${outputname}x"
+           $show "${rm}r $gentop"
+           $run ${rm}r "$gentop"
+           $show "mkdir $gentop"
+           $run mkdir "$gentop"
+           status=$?
+           if test $status -ne 0 && test ! -d "$gentop"; then
+             exit $status
+           fi
+           generated="$generated $gentop"
+
+           for xlib in $convenience; do
+             # Extract the objects.
+             case "$xlib" in
+             [\\/]* | [A-Za-z]:[\\/]*) xabs="$xlib" ;;
+             *) xabs=`pwd`"/$xlib" ;;
+             esac
+             xlib=`$echo "X$xlib" | $Xsed -e 's%^.*/%%'`
+             xdir="$gentop/$xlib"
+
+             $show "${rm}r $xdir"
+             $run ${rm}r "$xdir"
+             $show "mkdir $xdir"
+             $run mkdir "$xdir"
+             status=$?
+             if test $status -ne 0 && test ! -d "$xdir"; then
+               exit $status
+             fi
+             $show "(cd $xdir && $AR x $xabs)"
+             $run eval "(cd \$xdir && $AR x \$xabs)" || exit $?
+
+             libobjs="$libobjs "`find $xdir -name \*.o -print -o -name \*.lo -print | $NL2SP`
+           done
+         fi
+       fi
+
+       if test "$thread_safe" = yes && test -n "$thread_safe_flag_spec"; then
+         eval flag=\"$thread_safe_flag_spec\"
+         linkopts="$linkopts $flag"
+       fi
+
+       # Do each of the archive commands.
+       if test -n "$export_symbols" && test -n "$archive_expsym_cmds"; then
+         eval cmds=\"$archive_expsym_cmds\"
+       else
+         eval cmds=\"$archive_cmds\"
+       fi
+       IFS="${IFS=     }"; save_ifs="$IFS"; IFS='~'
+       for cmd in $cmds; do
+         IFS="$save_ifs"
+         $show "$cmd"
+         $run eval "$cmd" || exit $?
+       done
+       IFS="$save_ifs"
+
+       # Create links to the real library.
+       for linkname in $linknames; do
+         if test "$realname" != "$linkname"; then
+           $show "(cd $output_objdir && $rm $linkname && $LN_S $realname $linkname)"
+           $run eval '(cd $output_objdir && $rm $linkname && $LN_S $realname $linkname)' || exit $?
+         fi
+       done
+
+       # If -module or -export-dynamic was specified, set the dlname.
+       if test "$module" = yes || test "$export_dynamic" = yes; then
+         # On all known operating systems, these are identical.
+         dlname="$soname"
+       fi
+      fi
+      ;;
+
+    *.lo | *.o | *.obj)
+      if test -n "$link_against_libtool_libs"; then
+       $echo "$modename: error: cannot link libtool libraries into objects" 1>&2
+       exit 1
+      fi
+
+      if test -n "$deplibs"; then
+       $echo "$modename: warning: \`-l' and \`-L' are ignored for objects" 1>&2
+      fi
+
+      if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then
+       $echo "$modename: warning: \`-dlopen' is ignored for objects" 1>&2
+      fi
+
+      if test -n "$rpath"; then
+       $echo "$modename: warning: \`-rpath' is ignored for objects" 1>&2
+      fi
+
+      if test -n "$xrpath"; then
+       $echo "$modename: warning: \`-R' is ignored for objects" 1>&2
+      fi
+
+      if test -n "$vinfo"; then
+       $echo "$modename: warning: \`-version-info' is ignored for objects" 1>&2
+      fi
+
+      if test -n "$release"; then
+       $echo "$modename: warning: \`-release' is ignored for objects" 1>&2
+      fi
+
+      case "$output" in
+      *.lo)
+       if test -n "$objs"; then
+         $echo "$modename: cannot build library object \`$output' from non-libtool objects" 1>&2
+         exit 1
+       fi
+       libobj="$output"
+       obj=`$echo "X$output" | $Xsed -e "$lo2o"`
+       ;;
+      *)
+       libobj=
+       obj="$output"
+       ;;
+      esac
+
+      # Delete the old objects.
+      $run $rm $obj $libobj
+
+      # Objects from convenience libraries.  This assumes
+      # single-version convenience libraries.  Whenever we create
+      # different ones for PIC/non-PIC, this we'll have to duplicate
+      # the extraction.
+      reload_conv_objs=
+      gentop=
+      # reload_cmds runs $LD directly, so let us get rid of
+      # -Wl from whole_archive_flag_spec
+      wl= 
+
+      if test -n "$convenience"; then
+       if test -n "$whole_archive_flag_spec"; then
+         eval reload_conv_objs=\"\$reload_objs $whole_archive_flag_spec\"
+       else
+         gentop="$output_objdir/${obj}x"
+         $show "${rm}r $gentop"
+         $run ${rm}r "$gentop"
+         $show "mkdir $gentop"
+         $run mkdir "$gentop"
+         status=$?
+         if test $status -ne 0 && test ! -d "$gentop"; then
+           exit $status
+         fi
+         generated="$generated $gentop"
+
+         for xlib in $convenience; do
+           # Extract the objects.
+           case "$xlib" in
+           [\\/]* | [A-Za-z]:[\\/]*) xabs="$xlib" ;;
+           *) xabs=`pwd`"/$xlib" ;;
+           esac
+           xlib=`$echo "X$xlib" | $Xsed -e 's%^.*/%%'`
+           xdir="$gentop/$xlib"
+
+           $show "${rm}r $xdir"
+           $run ${rm}r "$xdir"
+           $show "mkdir $xdir"
+           $run mkdir "$xdir"
+           status=$?
+           if test $status -ne 0 && test ! -d "$xdir"; then
+             exit $status
+           fi
+           $show "(cd $xdir && $AR x $xabs)"
+           $run eval "(cd \$xdir && $AR x \$xabs)" || exit $?
+
+           reload_conv_objs="$reload_objs "`find $xdir -name \*.o -print -o -name \*.lo -print | $NL2SP`
+         done
+       fi
+      fi
+
+      # Create the old-style object.
+      reload_objs="$objs "`$echo "X$libobjs" | $SP2NL | $Xsed -e '/\.'${libext}$'/d' -e '/\.lib$/d' -e "$lo2o" | $NL2SP`" $reload_conv_objs"
+
+      output="$obj"
+      eval cmds=\"$reload_cmds\"
+      IFS="${IFS=      }"; save_ifs="$IFS"; IFS='~'
+      for cmd in $cmds; do
+       IFS="$save_ifs"
+       $show "$cmd"
+       $run eval "$cmd" || exit $?
+      done
+      IFS="$save_ifs"
+
+      # Exit if we aren't doing a library object file.
+      if test -z "$libobj"; then
+       if test -n "$gentop"; then
+         $show "${rm}r $gentop"
+         $run ${rm}r $gentop
+       fi
+
+       exit 0
+      fi
+
+      if test "$build_libtool_libs" != yes; then
+       if test -n "$gentop"; then
+         $show "${rm}r $gentop"
+         $run ${rm}r $gentop
+       fi
+
+       # Create an invalid libtool object if no PIC, so that we don't
+       # accidentally link it into a program.
+       $show "echo timestamp > $libobj"
+       $run eval "echo timestamp > $libobj" || exit $?
+       exit 0
+      fi
+
+      if test -n "$pic_flag"; then
+       # Only do commands if we really have different PIC objects.
+       reload_objs="$libobjs $reload_conv_objs"
+       output="$libobj"
+       eval cmds=\"$reload_cmds\"
+       IFS="${IFS=     }"; save_ifs="$IFS"; IFS='~'
+       for cmd in $cmds; do
+         IFS="$save_ifs"
+         $show "$cmd"
+         $run eval "$cmd" || exit $?
+       done
+       IFS="$save_ifs"
+      else
+       # Just create a symlink.
+       $show $rm $libobj
+       $run $rm $libobj
+       $show "$LN_S $obj $libobj"
+       $run $LN_S $obj $libobj || exit $?
+      fi
+
+      if test -n "$gentop"; then
+       $show "${rm}r $gentop"
+       $run ${rm}r $gentop
+      fi
+
+      exit 0
+      ;;
+
+    # Anything else should be a program.
+    *)
+      if test -n "$vinfo"; then
+       $echo "$modename: warning: \`-version-info' is ignored for programs" 1>&2
+      fi
+
+      if test -n "$release"; then
+       $echo "$modename: warning: \`-release' is ignored for programs" 1>&2
+      fi
+
+      if test "$preload" = yes; then
+       if test "$dlopen" = unknown && test "$dlopen_self" = unknown &&
+          test "$dlopen_self_static" = unknown; then
+         $echo "$modename: warning: \`AC_LIBTOOL_DLOPEN' not used. Assuming no dlopen support."
+       fi 
+      fi
+    
+      if test -n "$rpath$xrpath"; then
+       # If the user specified any rpath flags, then add them.
+       for libdir in $rpath $xrpath; do
+         # This is the magic to use -rpath.
+         case "$compile_rpath " in
+         *" $libdir "*) ;;
+         *) compile_rpath="$compile_rpath $libdir" ;;
+         esac
+         case "$finalize_rpath " in
+         *" $libdir "*) ;;
+         *) finalize_rpath="$finalize_rpath $libdir" ;;
+         esac
+       done
+      fi
+
+      # Now hardcode the library paths
+      rpath=
+      hardcode_libdirs=
+      for libdir in $compile_rpath $finalize_rpath; do
+       if test -n "$hardcode_libdir_flag_spec"; then
+         if test -n "$hardcode_libdir_separator"; then
+           if test -z "$hardcode_libdirs"; then
+             hardcode_libdirs="$libdir"
+           else
+             # Just accumulate the unique libdirs.
+             case "$hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator" in
+             *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*)
+               ;;
+             *)
+               hardcode_libdirs="$hardcode_libdirs$hardcode_libdir_separator$libdir"
+               ;;
+             esac
+           fi
+         else
+           eval flag=\"$hardcode_libdir_flag_spec\"
+           rpath="$rpath $flag"
+         fi
+       elif test -n "$runpath_var"; then
+         case "$perm_rpath " in
+         *" $libdir "*) ;;
+         *) perm_rpath="$perm_rpath $libdir" ;;
+         esac
+       fi
+      done
+      # Substitute the hardcoded libdirs into the rpath.
+      if test -n "$hardcode_libdir_separator" &&
+        test -n "$hardcode_libdirs"; then
+       libdir="$hardcode_libdirs"
+       eval rpath=\" $hardcode_libdir_flag_spec\"
+      fi
+      compile_rpath="$rpath"
+
+      rpath=
+      hardcode_libdirs=
+      for libdir in $finalize_rpath; do
+       if test -n "$hardcode_libdir_flag_spec"; then
+         if test -n "$hardcode_libdir_separator"; then
+           if test -z "$hardcode_libdirs"; then
+             hardcode_libdirs="$libdir"
+           else
+             # Just accumulate the unique libdirs.
+             case "$hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator" in
+             *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*)
+               ;;
+             *)
+               hardcode_libdirs="$hardcode_libdirs$hardcode_libdir_separator$libdir"
+               ;;
+             esac
+           fi
+         else
+           eval flag=\"$hardcode_libdir_flag_spec\"
+           rpath="$rpath $flag"
+         fi
+       elif test -n "$runpath_var"; then
+         case "$finalize_perm_rpath " in
+         *" $libdir "*) ;;
+         *) finalize_perm_rpath="$finalize_perm_rpath $libdir" ;;
+         esac
+       fi
+      done
+      # Substitute the hardcoded libdirs into the rpath.
+      if test -n "$hardcode_libdir_separator" &&
+        test -n "$hardcode_libdirs"; then
+       libdir="$hardcode_libdirs"
+       eval rpath=\" $hardcode_libdir_flag_spec\"
+      fi
+      finalize_rpath="$rpath"
+
+      output_objdir=`$echo "X$output" | $Xsed -e 's%/[^/]*$%%'`
+      if test "X$output_objdir" = "X$output"; then
+       output_objdir="$objdir"
+      else
+       output_objdir="$output_objdir/$objdir"
+      fi
+
+      # Create the binary in the object directory, then wrap it.
+      if test ! -d $output_objdir; then
+       $show "$mkdir $output_objdir"
+       $run $mkdir $output_objdir
+       status=$?
+       if test $status -ne 0 && test ! -d $output_objdir; then
+         exit $status
+       fi
+      fi
+
+      if test -n "$libobjs" && test "$build_old_libs" = yes; then
+       # Transform all the library objects into standard objects.
+       compile_command=`$echo "X$compile_command" | $SP2NL | $Xsed -e "$lo2o" | $NL2SP`
+       finalize_command=`$echo "X$finalize_command" | $SP2NL | $Xsed -e "$lo2o" | $NL2SP`
+      fi
+
+      dlsyms=
+      if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then
+       if test -n "$NM" && test -n "$global_symbol_pipe"; then
+         dlsyms="${outputname}S.c"
+       else
+         $echo "$modename: not configured to extract global symbols from dlpreopened files" 1>&2
+       fi
+      fi
+
+      if test -n "$dlsyms"; then
+       case "$dlsyms" in
+       "") ;;
+       *.c)
+         # Discover the nlist of each of the dlfiles.
+         nlist="$output_objdir/${outputname}.nm"
+
+         $show "$rm $nlist ${nlist}S ${nlist}T"
+         $run $rm "$nlist" "${nlist}S" "${nlist}T"
+
+         # Parse the name list into a source file.
+         $show "creating $output_objdir/$dlsyms"
+
+         test -z "$run" && $echo > "$output_objdir/$dlsyms" "\
+/* $dlsyms - symbol resolution table for \`$outputname' dlsym emulation. */
+/* Generated by $PROGRAM - GNU $PACKAGE $VERSION$TIMESTAMP */
+
+#ifdef __cplusplus
+extern \"C\" {
+#endif
+
+/* Prevent the only kind of declaration conflicts we can make. */
+#define lt_preloaded_symbols some_other_symbol
+
+/* External symbol declarations for the compiler. */\
+"
+
+         if test "$dlself" = yes; then
+           $show "generating symbol list for \`$output'"
+
+           test -z "$run" && $echo ': @PROGRAM@ ' > "$nlist"
+
+           # Add our own program objects to the symbol list.
+           progfiles=`$echo "X$objs" | $SP2NL | $Xsed -e "$lo2o" | $NL2SP`
+           for arg in $progfiles; do
+             $show "extracting global C symbols from \`$arg'"
+             $run eval "$NM $arg | $global_symbol_pipe >> '$nlist'"
+           done
+
+           if test -n "$exclude_expsyms"; then
+             $run eval 'egrep -v " ($exclude_expsyms)$" "$nlist" > "$nlist"T'
+             $run eval '$mv "$nlist"T "$nlist"'
+           fi
+           
+           if test -n "$export_symbols_regex"; then
+             $run eval 'egrep -e "$export_symbols_regex" "$nlist" > "$nlist"T'
+             $run eval '$mv "$nlist"T "$nlist"'
+           fi
+
+           # Prepare the list of exported symbols
+           if test -z "$export_symbols"; then
+             export_symbols="$output_objdir/$output.exp"
+             $run $rm $export_symbols
+             $run eval "sed -n -e '/^: @PROGRAM@$/d' -e 's/^.* \(.*\)$/\1/p' "'< "$nlist" > "$export_symbols"'
+           else
+             $run eval "sed -e 's/\([][.*^$]\)/\\\1/g' -e 's/^/ /' -e 's/$/$/'"' < "$export_symbols" > "$output_objdir/$output.exp"'
+             $run eval 'grep -f "$output_objdir/$output.exp" < "$nlist" > "$nlist"T'
+             $run eval 'mv "$nlist"T "$nlist"'
+           fi
+         fi
+
+         for arg in $dlprefiles; do
+           $show "extracting global C symbols from \`$arg'"
+           name=`echo "$arg" | sed -e 's%^.*/%%'`
+           $run eval 'echo ": $name " >> "$nlist"'
+           $run eval "$NM $arg | $global_symbol_pipe >> '$nlist'"
+         done
+
+         if test -z "$run"; then
+           # Make sure we have at least an empty file.
+           test -f "$nlist" || : > "$nlist"
+
+           if test -n "$exclude_expsyms"; then
+             egrep -v " ($exclude_expsyms)$" "$nlist" > "$nlist"T
+             $mv "$nlist"T "$nlist"
+           fi
+
+           # Try sorting and uniquifying the output.
+           if grep -v "^: " < "$nlist" | sort +2 | uniq > "$nlist"S; then
+             :
+           else
+             grep -v "^: " < "$nlist" > "$nlist"S
+           fi
+
+           if test -f "$nlist"S; then
+             eval "$global_symbol_to_cdecl"' < "$nlist"S >> "$output_objdir/$dlsyms"'
+           else
+             echo '/* NONE */' >> "$output_objdir/$dlsyms"
+           fi
+
+           $echo >> "$output_objdir/$dlsyms" "\
+
+#undef lt_preloaded_symbols
+
+#if defined (__STDC__) && __STDC__
+# define lt_ptr_t void *
+#else
+# define lt_ptr_t char *
+# define const
+#endif
+
+/* The mapping between symbol names and symbols. */
+const struct {
+  const char *name;
+  lt_ptr_t address;
+}
+lt_preloaded_symbols[] =
+{\
+"
+
+           sed -n -e 's/^: \([^ ]*\) $/  {\"\1\", (lt_ptr_t) 0},/p' \
+               -e 's/^. \([^ ]*\) \([^ ]*\)$/  {"\2", (lt_ptr_t) \&\2},/p' \
+                 < "$nlist" >> "$output_objdir/$dlsyms"
+
+           $echo >> "$output_objdir/$dlsyms" "\
+  {0, (lt_ptr_t) 0}
+};
+
+/* This works around a problem in FreeBSD linker */
+#ifdef FREEBSD_WORKAROUND
+static const void *lt_preloaded_setup() {
+  return lt_preloaded_symbols;
+}
+#endif
+
+#ifdef __cplusplus
+}
+#endif\
+"
+         fi
+
+         pic_flag_for_symtable=
+         case "$host" in
+         # compiling the symbol table file with pic_flag works around
+         # a FreeBSD bug that causes programs to crash when -lm is
+         # linked before any other PIC object.  But we must not use
+         # pic_flag when linking with -static.  The problem exists in
+         # FreeBSD 2.2.6 and is fixed in FreeBSD 3.1.
+         *-*-freebsd2*|*-*-freebsd3.0*)
+           case "$compile_command " in
+           *" -static "*) ;;
+           *) pic_flag_for_symtable=" $pic_flag -DPIC -DFREEBSD_WORKAROUND";;
+           esac
+         esac
+
+         # Now compile the dynamic symbol file.
+         $show "(cd $output_objdir && $C_compiler -c$no_builtin_flag$pic_flag_for_symtable \"$dlsyms\")"
+         $run eval '(cd $output_objdir && $C_compiler -c$no_builtin_flag$pic_flag_for_symtable "$dlsyms")' || exit $?
+
+         # Clean up the generated files.
+         $show "$rm $output_objdir/$dlsyms $nlist ${nlist}S ${nlist}T"
+         $run $rm "$output_objdir/$dlsyms" "$nlist" "${nlist}S" "${nlist}T"
+
+         # Transform the symbol file into the correct name.
+         compile_command=`$echo "X$compile_command" | $Xsed -e "s%@SYMFILE@%$output_objdir/${outputname}S.${objext}%"`
+         finalize_command=`$echo "X$finalize_command" | $Xsed -e "s%@SYMFILE@%$output_objdir/${outputname}S.${objext}%"`
+         ;;
+       *)
+         $echo "$modename: unknown suffix for \`$dlsyms'" 1>&2
+         exit 1
+         ;;
+       esac
+      else
+       # We keep going just in case the user didn't refer to
+       # lt_preloaded_symbols.  The linker will fail if global_symbol_pipe
+       # really was required.
+
+       # Nullify the symbol file.
+       compile_command=`$echo "X$compile_command" | $Xsed -e "s% @SYMFILE@%%"`
+       finalize_command=`$echo "X$finalize_command" | $Xsed -e "s% @SYMFILE@%%"`
+      fi
+
+      if test -z "$link_against_libtool_libs" || test "$build_libtool_libs" != yes; then
+       # Replace the output file specification.
+       compile_command=`$echo "X$compile_command" | $Xsed -e 's%@OUTPUT@%'"$output"'%g'`
+       link_command="$compile_command$compile_rpath"
+
+       # We have no uninstalled library dependencies, so finalize right now.
+       $show "$link_command"
+       $run eval "$link_command"
+       status=$?
+       
+       # Delete the generated files.
+       if test -n "$dlsyms"; then
+         $show "$rm $output_objdir/${outputname}S.${objext}"
+         $run $rm "$output_objdir/${outputname}S.${objext}"
+       fi
+
+       exit $status
+      fi
+
+      if test -n "$shlibpath_var"; then
+       # We should set the shlibpath_var
+       rpath=
+       for dir in $temp_rpath; do
+         case "$dir" in
+         [\\/]* | [A-Za-z]:[\\/]*)
+           # Absolute path.
+           rpath="$rpath$dir:"
+           ;;
+         *)
+           # Relative path: add a thisdir entry.
+           rpath="$rpath\$thisdir/$dir:"
+           ;;
+         esac
+       done
+       temp_rpath="$rpath"
+      fi
+
+      if test -n "$compile_shlibpath$finalize_shlibpath"; then
+       compile_command="$shlibpath_var=\"$compile_shlibpath$finalize_shlibpath\$$shlibpath_var\" $compile_command"
+      fi
+      if test -n "$finalize_shlibpath"; then
+       finalize_command="$shlibpath_var=\"$finalize_shlibpath\$$shlibpath_var\" $finalize_command"
+      fi
+
+      compile_var=
+      finalize_var=
+      if test -n "$runpath_var"; then
+       if test -n "$perm_rpath"; then
+         # We should set the runpath_var.
+         rpath=
+         for dir in $perm_rpath; do
+           rpath="$rpath$dir:"
+         done
+         compile_var="$runpath_var=\"$rpath\$$runpath_var\" "
+       fi
+       if test -n "$finalize_perm_rpath"; then
+         # We should set the runpath_var.
+         rpath=
+         for dir in $finalize_perm_rpath; do
+           rpath="$rpath$dir:"
+         done
+         finalize_var="$runpath_var=\"$rpath\$$runpath_var\" "
+       fi
+      fi
+
+      if test "$hardcode_action" = relink; then
+       # Fast installation is not supported
+       link_command="$compile_var$compile_command$compile_rpath"
+       relink_command="$finalize_var$finalize_command$finalize_rpath"
+       
+       $echo "$modename: warning: this platform does not like uninstalled shared libraries" 1>&2
+       $echo "$modename: \`$output' will be relinked during installation" 1>&2
+      else
+       if test "$fast_install" != no; then
+         link_command="$finalize_var$compile_command$finalize_rpath"
+         if test "$fast_install" = yes; then
+           relink_command=`$echo "X$compile_var$compile_command$compile_rpath" | $Xsed -e 's%@OUTPUT@%\$progdir/\$file%g'`
+         else
+           # fast_install is set to needless
+           relink_command=
+         fi
+       else
+         link_command="$compile_var$compile_command$compile_rpath"
+         relink_command="$finalize_var$finalize_command$finalize_rpath"
+       fi
+      fi
+
+      # Replace the output file specification.
+      link_command=`$echo "X$link_command" | $Xsed -e 's%@OUTPUT@%'"$output_objdir/$outputname"'%g'`
+      
+      # Delete the old output files.
+      $run $rm $output $output_objdir/$outputname $output_objdir/lt-$outputname
+
+      $show "$link_command"
+      $run eval "$link_command" || exit $?
+
+      # Now create the wrapper script.
+      $show "creating $output"
+
+      # Quote the relink command for shipping.
+      if test -n "$relink_command"; then
+       relink_command=`$echo "X$relink_command" | $Xsed -e "$sed_quote_subst"`
+      fi
+
+      # Quote $echo for shipping.
+      if test "X$echo" = "X$SHELL $0 --fallback-echo"; then
+       case "$0" in
+       [\\/]* | [A-Za-z]:[\\/]*) qecho="$SHELL $0 --fallback-echo";;
+       *) qecho="$SHELL `pwd`/$0 --fallback-echo";;
+       esac
+       qecho=`$echo "X$qecho" | $Xsed -e "$sed_quote_subst"`
+      else
+       qecho=`$echo "X$echo" | $Xsed -e "$sed_quote_subst"`
+      fi
+
+      # Only actually do things if our run command is non-null.
+      if test -z "$run"; then
+       # win32 will think the script is a binary if it has
+       # a .exe suffix, so we strip it off here.
+       case $output in
+         *.exe) output=`echo $output|sed 's,.exe$,,'` ;;
+       esac
+       $rm $output
+       trap "$rm $output; exit 1" 1 2 15
+
+       $echo > $output "\
+#! $SHELL
+
+# $output - temporary wrapper script for $objdir/$outputname
+# Generated by $PROGRAM - GNU $PACKAGE $VERSION$TIMESTAMP
+#
+# The $output program cannot be directly executed until all the libtool
+# libraries that it depends on are installed.
+#
+# This wrapper script should never be moved out of the build directory.
+# If it is, it will not operate correctly.
+
+# Sed substitution that helps us do robust quoting.  It backslashifies
+# metacharacters that are still active within double-quoted strings.
+Xsed='sed -e 1s/^X//'
+sed_quote_subst='$sed_quote_subst'
+
+# The HP-UX ksh and POSIX shell print the target directory to stdout
+# if CDPATH is set.
+if test \"\${CDPATH+set}\" = set; then CDPATH=; export CDPATH; fi
+
+relink_command=\"$relink_command\"
+
+# This environment variable determines our operation mode.
+if test \"\$libtool_install_magic\" = \"$magic\"; then
+  # install mode needs the following variable:
+  link_against_libtool_libs='$link_against_libtool_libs'
+else
+  # When we are sourced in execute mode, \$file and \$echo are already set.
+  if test \"\$libtool_execute_magic\" != \"$magic\"; then
+    echo=\"$qecho\"
+    file=\"\$0\"
+    # Make sure echo works.
+    if test \"X\$1\" = X--no-reexec; then
+      # Discard the --no-reexec flag, and continue.
+      shift
+    elif test \"X\`(\$echo '\t') 2>/dev/null\`\" = 'X\t'; then
+      # Yippee, \$echo works!
+      :
+    else
+      # Restart under the correct shell, and then maybe \$echo will work.
+      exec $SHELL \"\$0\" --no-reexec \${1+\"\$@\"}
+    fi
+  fi\
+"
+       $echo >> $output "\
+
+  # Find the directory that this script lives in.
+  thisdir=\`\$echo \"X\$file\" | \$Xsed -e 's%/[^/]*$%%'\`
+  test \"x\$thisdir\" = \"x\$file\" && thisdir=.
+
+  # Follow symbolic links until we get to the real thisdir.
+  file=\`ls -ld \"\$file\" | sed -n 's/.*-> //p'\`
+  while test -n \"\$file\"; do
+    destdir=\`\$echo \"X\$file\" | \$Xsed -e 's%/[^/]*\$%%'\`
+
+    # If there was a directory component, then change thisdir.
+    if test \"x\$destdir\" != \"x\$file\"; then
+      case \"\$destdir\" in
+      [\\/]* | [A-Za-z]:[\\/]*) thisdir=\"\$destdir\" ;;
+      *) thisdir=\"\$thisdir/\$destdir\" ;;
+      esac
+    fi
+
+    file=\`\$echo \"X\$file\" | \$Xsed -e 's%^.*/%%'\`
+    file=\`ls -ld \"\$thisdir/\$file\" | sed -n 's/.*-> //p'\`
+  done
+
+  # Try to get the absolute directory name.
+  absdir=\`cd \"\$thisdir\" && pwd\`
+  test -n \"\$absdir\" && thisdir=\"\$absdir\"
+"
+
+       if test "$fast_install" = yes; then
+         echo >> $output "\
+  program=lt-'$outputname'
+  progdir=\"\$thisdir/$objdir\"
+  
+  if test ! -f \"\$progdir/\$program\" || \\
+     { file=\`ls -1dt \"\$progdir/\$program\" \"\$progdir/../\$program\" 2>/dev/null | sed 1q\`; \\
+       test \"X\$file\" != \"X\$progdir/\$program\"; }; then
+
+    file=\"\$\$-\$program\"
+
+    if test ! -d \"\$progdir\"; then
+      $mkdir \"\$progdir\"
+    else
+      $rm \"\$progdir/\$file\"
+    fi"
+
+         echo >> $output "\
+
+    # relink executable if necessary
+    if test -n \"\$relink_command\"; then
+      if (cd \"\$thisdir\" && eval \$relink_command); then :
+      else
+       $rm \"\$progdir/\$file\"
+       exit 1
+      fi
+    fi
+
+    $mv \"\$progdir/\$file\" \"\$progdir/\$program\" 2>/dev/null ||
+    { $rm \"\$progdir/\$program\";
+      $mv \"\$progdir/\$file\" \"\$progdir/\$program\"; }
+    $rm \"\$progdir/\$file\"
+  fi"
+       else
+         echo >> $output "\
+  program='$outputname$exeext'
+  progdir=\"\$thisdir/$objdir\"
+"
+       fi
+
+       echo >> $output "\
+
+  if test -f \"\$progdir/\$program\"; then"
+
+       # Export our shlibpath_var if we have one.
+       if test "$shlibpath_overrides_runpath" = yes && test -n "$shlibpath_var" && test -n "$temp_rpath"; then
+         $echo >> $output "\
+    # Add our own library path to $shlibpath_var
+    $shlibpath_var=\"$temp_rpath\$$shlibpath_var\"
+
+    # Some systems cannot cope with colon-terminated $shlibpath_var
+    # The second colon is a workaround for a bug in BeOS R4 sed
+    $shlibpath_var=\`\$echo \"X\$$shlibpath_var\" | \$Xsed -e 's/::*\$//'\`
+
+    export $shlibpath_var
+"
+       fi
+
+       # fixup the dll searchpath if we need to.
+       if test -n "$dllsearchpath"; then
+         $echo >> $output "\
+    # Add the dll search path components to the executable PATH
+    PATH=$dllsearchpath:\$PATH
+"
+       fi
+
+       $echo >> $output "\
+    if test \"\$libtool_execute_magic\" != \"$magic\"; then
+      # Run the actual program with our arguments.
+"
+       case $host in
+       *-*-cygwin* | *-*-mingw | *-*-os2*)
+         # win32 systems need to use the prog path for dll
+         # lookup to work
+         $echo >> $output "\
+      exec \$progdir\\\\\$program \${1+\"\$@\"}
+"
+         ;;
+       *)
+         $echo >> $output "\
+      # Export the path to the program.
+      PATH=\"\$progdir:\$PATH\"
+      export PATH
+
+      exec \$program \${1+\"\$@\"}
+"
+         ;;
+       esac
+       $echo >> $output "\
+      \$echo \"\$0: cannot exec \$program \${1+\"\$@\"}\"
+      exit 1
+    fi
+  else
+    # The program doesn't exist.
+    \$echo \"\$0: error: \$progdir/\$program does not exist\" 1>&2
+    \$echo \"This script is just a wrapper for \$program.\" 1>&2
+    echo \"See the $PACKAGE documentation for more information.\" 1>&2
+    exit 1
+  fi
+fi\
+"
+       chmod +x $output
+      fi
+      exit 0
+      ;;
+    esac
+
+    # See if we need to build an old-fashioned archive.
+    for oldlib in $oldlibs; do
+
+      if test "$build_libtool_libs" = convenience; then
+       oldobjs="$libobjs_save"
+       addlibs="$convenience"
+       build_libtool_libs=no
+      else
+       if test "$build_libtool_libs" = module; then
+         oldobjs="$libobjs_save"
+         build_libtool_libs=no
+       else
+         oldobjs="$objs "`$echo "X$libobjs_save" | $SP2NL | $Xsed -e '/\.'${libext}'$/d' -e '/\.lib$/d' -e "$lo2o" | $NL2SP`
+       fi
+       addlibs="$old_convenience"
+      fi
+
+      if test -n "$addlibs"; then
+       gentop="$output_objdir/${outputname}x"
+       $show "${rm}r $gentop"
+       $run ${rm}r "$gentop"
+       $show "mkdir $gentop"
+       $run mkdir "$gentop"
+       status=$?
+       if test $status -ne 0 && test ! -d "$gentop"; then
+         exit $status
+       fi
+       generated="$generated $gentop"
+         
+       # Add in members from convenience archives.
+       for xlib in $addlibs; do
+         # Extract the objects.
+         case "$xlib" in
+         [\\/]* | [A-Za-z]:[\\/]*) xabs="$xlib" ;;
+         *) xabs=`pwd`"/$xlib" ;;
+         esac
+         xlib=`$echo "X$xlib" | $Xsed -e 's%^.*/%%'`
+         xdir="$gentop/$xlib"
+
+         $show "${rm}r $xdir"
+         $run ${rm}r "$xdir"
+         $show "mkdir $xdir"
+         $run mkdir "$xdir"
+         status=$?
+         if test $status -ne 0 && test ! -d "$xdir"; then
+           exit $status
+         fi
+         $show "(cd $xdir && $AR x $xabs)"
+         $run eval "(cd \$xdir && $AR x \$xabs)" || exit $?
+
+         oldobjs="$oldobjs "`find $xdir -name \*.${objext} -print -o -name \*.lo -print | $NL2SP`
+       done
+      fi
+
+      # Do each command in the archive commands.
+      if test -n "$old_archive_from_new_cmds" && test "$build_libtool_libs" = yes; then
+       eval cmds=\"$old_archive_from_new_cmds\"
+      else
+       # Ensure that we have .o objects in place incase we decided
+       # not to build a shared library, and have fallen back to building
+       # static libs even though --disable-static was passed!
+       for oldobj in $oldobjs; do
+         if test ! -f $oldobj; then
+           obj=`$echo "X$oldobj" | $Xsed -e "$o2lo"`
+           $show "${LN_S} $obj $oldobj"
+           $run ${LN_S} $obj $oldobj || exit $?
+         fi
+       done
+
+       eval cmds=\"$old_archive_cmds\"
+      fi
+      IFS="${IFS=      }"; save_ifs="$IFS"; IFS='~'
+      for cmd in $cmds; do
+       IFS="$save_ifs"
+       $show "$cmd"
+       $run eval "$cmd" || exit $?
+      done
+      IFS="$save_ifs"
+    done
+
+    if test -n "$generated"; then
+      $show "${rm}r$generated"
+      $run ${rm}r$generated
+    fi
+
+    # Now create the libtool archive.
+    case "$output" in
+    *.la)
+      old_library=
+      if test "$release_suffix" = all; then
+        test "$build_old_libs" = yes && old_library="$libname$release.$libext"
+      else
+        test "$build_old_libs" = yes && old_library="$libname.$libext"
+      fi
+      $show "creating $output"
+
+      if test -n "$xrpath"; then
+       temp_xrpath=
+       for libdir in $xrpath; do
+         temp_xrpath="$temp_xrpath -R$libdir"
+       done
+       dependency_libs="$temp_xrpath $dependency_libs"
+      fi
+
+      # Only create the output if not a dry run.
+      if test -z "$run"; then
+       for installed in no yes; do
+         if test "$installed" = yes; then
+           if test -z "$install_libdir"; then
+             break
+           fi
+           output="$output_objdir/$outputname"i
+         fi
+         $rm $output
+         $echo > $output "\
+# $outputname - a libtool library file
+# Generated by $PROGRAM - GNU $PACKAGE $VERSION$TIMESTAMP
+#
+# Please DO NOT delete this file!
+# It is necessary for linking the library.
+
+# The name that we can dlopen(3).
+dlname='$dlname'
+
+# Names of this library.
+library_names='$library_names'
+
+# The name of the static archive.
+old_library='$old_library'
+
+# Libraries that this one depends upon.
+dependency_libs='$dependency_libs'
+
+# Version information for $libname.
+current=$current
+age=$age
+revision=$revision
+
+# Is this an already installed library?
+installed=$installed
+
+# Directory that this library needs to be installed in:
+libdir='$install_libdir'\
+"
+       done
+      fi
+
+      # Do a symbolic link so that the libtool archive can be found in
+      # LD_LIBRARY_PATH before the program is installed.
+      $show "(cd $output_objdir && $rm $outputname && $LN_S ../$outputname $outputname)"
+      $run eval "(cd $output_objdir && $rm $outputname && $LN_S ../$outputname $outputname)" || exit $?
+      ;;
+    esac
+    exit 0
+    ;;
+
+  # libtool install mode
+  install)
+    modename="$modename: install"
+
+    # There may be an optional sh(1) argument at the beginning of
+    # install_prog (especially on Windows NT).
+    if test "$nonopt" = "$SHELL" || test "$nonopt" = /bin/sh; then
+      # Aesthetically quote it.
+      arg=`$echo "X$nonopt" | $Xsed -e "$sed_quote_subst"`
+      case "$arg" in
+      *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \    ]*|*]*)
+       arg="\"$arg\""
+       ;;
+      esac
+      install_prog="$arg "
+      arg="$1"
+      shift
+    else
+      install_prog=
+      arg="$nonopt"
+    fi
+
+    # The real first argument should be the name of the installation program.
+    # Aesthetically quote it.
+    arg=`$echo "X$arg" | $Xsed -e "$sed_quote_subst"`
+    case "$arg" in
+    *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \      ]*|*]*)
+      arg="\"$arg\""
+      ;;
+    esac
+    install_prog="$install_prog$arg"
+
+    # We need to accept at least all the BSD install flags.
+    dest=
+    files=
+    opts=
+    prev=
+    install_type=
+    isdir=no
+    stripme=
+    for arg
+    do
+      if test -n "$dest"; then
+       files="$files $dest"
+       dest="$arg"
+       continue
+      fi
+
+      case "$arg" in
+      -d) isdir=yes ;;
+      -f) prev="-f" ;;
+      -g) prev="-g" ;;
+      -m) prev="-m" ;;
+      -o) prev="-o" ;;
+      -s)
+       stripme=" -s"
+       continue
+       ;;
+      -*) ;;
+
+      *)
+       # If the previous option needed an argument, then skip it.
+       if test -n "$prev"; then
+         prev=
+       else
+         dest="$arg"
+         continue
+       fi
+       ;;
+      esac
+
+      # Aesthetically quote the argument.
+      arg=`$echo "X$arg" | $Xsed -e "$sed_quote_subst"`
+      case "$arg" in
+      *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \    ]*|*]*)
+       arg="\"$arg\""
+       ;;
+      esac
+      install_prog="$install_prog $arg"
+    done
+
+    if test -z "$install_prog"; then
+      $echo "$modename: you must specify an install program" 1>&2
+      $echo "$help" 1>&2
+      exit 1
+    fi
+
+    if test -n "$prev"; then
+      $echo "$modename: the \`$prev' option requires an argument" 1>&2
+      $echo "$help" 1>&2
+      exit 1
+    fi
+
+    if test -z "$files"; then
+      if test -z "$dest"; then
+       $echo "$modename: no file or destination specified" 1>&2
+      else
+       $echo "$modename: you must specify a destination" 1>&2
+      fi
+      $echo "$help" 1>&2
+      exit 1
+    fi
+
+    # Strip any trailing slash from the destination.
+    dest=`$echo "X$dest" | $Xsed -e 's%/$%%'`
+
+    # Check to see that the destination is a directory.
+    test -d "$dest" && isdir=yes
+    if test "$isdir" = yes; then
+      destdir="$dest"
+      destname=
+    else
+      destdir=`$echo "X$dest" | $Xsed -e 's%/[^/]*$%%'`
+      test "X$destdir" = "X$dest" && destdir=.
+      destname=`$echo "X$dest" | $Xsed -e 's%^.*/%%'`
+
+      # Not a directory, so check to see that there is only one file specified.
+      set dummy $files
+      if test $# -gt 2; then
+       $echo "$modename: \`$dest' is not a directory" 1>&2
+       $echo "$help" 1>&2
+       exit 1
+      fi
+    fi
+    case "$destdir" in
+    [\\/]* | [A-Za-z]:[\\/]*) ;;
+    *)
+      for file in $files; do
+       case "$file" in
+       *.lo) ;;
+       *)
+         $echo "$modename: \`$destdir' must be an absolute directory name" 1>&2
+         $echo "$help" 1>&2
+         exit 1
+         ;;
+       esac
+      done
+      ;;
+    esac
+
+    # This variable tells wrapper scripts just to set variables rather
+    # than running their programs.
+    libtool_install_magic="$magic"
+
+    staticlibs=
+    future_libdirs=
+    current_libdirs=
+    for file in $files; do
+
+      # Do each installation.
+      case "$file" in
+      *.a | *.lib)
+       # Do the static libraries later.
+       staticlibs="$staticlibs $file"
+       ;;
+
+      *.la)
+       # Check to see that this really is a libtool archive.
+       if (sed -e '2q' $file | egrep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then :
+       else
+         $echo "$modename: \`$file' is not a valid libtool archive" 1>&2
+         $echo "$help" 1>&2
+         exit 1
+       fi
+
+       library_names=
+       old_library=
+       # If there is no directory component, then add one.
+       case "$file" in
+       */* | *\\*) . $file ;;
+       *) . ./$file ;;
+       esac
+
+       # Add the libdir to current_libdirs if it is the destination.
+       if test "X$destdir" = "X$libdir"; then
+         case "$current_libdirs " in
+         *" $libdir "*) ;;
+         *) current_libdirs="$current_libdirs $libdir" ;;
+         esac
+       else
+         # Note the libdir as a future libdir.
+         case "$future_libdirs " in
+         *" $libdir "*) ;;
+         *) future_libdirs="$future_libdirs $libdir" ;;
+         esac
+       fi
+
+       dir="`$echo "X$file" | $Xsed -e 's%/[^/]*$%%'`/"
+       test "X$dir" = "X$file/" && dir=
+       dir="$dir$objdir"
+
+       # See the names of the shared library.
+       set dummy $library_names
+       if test -n "$2"; then
+         realname="$2"
+         shift
+         shift
+
+         # Install the shared library and build the symlinks.
+         $show "$install_prog $dir/$realname $destdir/$realname"
+         $run eval "$install_prog $dir/$realname $destdir/$realname" || exit $?
+
+         if test $# -gt 0; then
+           # Delete the old symlinks, and create new ones.
+           for linkname
+           do
+             if test "$linkname" != "$realname"; then
+               $show "(cd $destdir && $rm $linkname && $LN_S $realname $linkname)"
+               $run eval "(cd $destdir && $rm $linkname && $LN_S $realname $linkname)"
+             fi
+           done
+         fi
+
+         # Do each command in the postinstall commands.
+         lib="$destdir/$realname"
+         eval cmds=\"$postinstall_cmds\"
+         IFS="${IFS=   }"; save_ifs="$IFS"; IFS='~'
+         for cmd in $cmds; do
+           IFS="$save_ifs"
+           $show "$cmd"
+           $run eval "$cmd" || exit $?
+         done
+         IFS="$save_ifs"
+       fi
+
+       # Install the pseudo-library for information purposes.
+       if test "$install_ltlibs" = yes; then
+         name=`$echo "X$file" | $Xsed -e 's%^.*/%%'`
+         instname="$dir/$name"i
+         $show "$install_prog $instname $destdir/$name"
+         $run eval "$install_prog $instname $destdir/$name" || exit $?
+       fi
+
+       # Maybe install the static library, too.
+       test -n "$old_library" && staticlibs="$staticlibs $dir/$old_library"
+       ;;
+
+      *.lo)
+       # Install (i.e. copy) a libtool object.
+
+       # Figure out destination file name, if it wasn't already specified.
+       if test -n "$destname"; then
+         destfile="$destdir/$destname"
+       else
+         destfile=`$echo "X$file" | $Xsed -e 's%^.*/%%'`
+         destfile="$destdir/$destfile"
+       fi
+
+       # Deduce the name of the destination old-style object file.
+       case "$destfile" in
+       *.lo)
+         staticdest=`$echo "X$destfile" | $Xsed -e "$lo2o"`
+         ;;
+       *.o | *.obj)
+         staticdest="$destfile"
+         destfile=
+         ;;
+       *)
+         $echo "$modename: cannot copy a libtool object to \`$destfile'" 1>&2
+         $echo "$help" 1>&2
+         exit 1
+         ;;
+       esac
+
+       # Install the libtool object if requested.
+       if test -n "$destfile"; then
+         $show "$install_prog $file $destfile"
+         $run eval "$install_prog $file $destfile" || exit $?
+       fi
+
+       # Install the old object if enabled.
+       if test "$build_old_libs" = yes; then
+         # Deduce the name of the old-style object file.
+         staticobj=`$echo "X$file" | $Xsed -e "$lo2o"`
+
+         $show "$install_prog $staticobj $staticdest"
+         $run eval "$install_prog \$staticobj \$staticdest" || exit $?
+       fi
+       exit 0
+       ;;
+
+      *)
+       # Figure out destination file name, if it wasn't already specified.
+       if test -n "$destname"; then
+         destfile="$destdir/$destname"
+       else
+         destfile=`$echo "X$file" | $Xsed -e 's%^.*/%%'`
+         destfile="$destdir/$destfile"
+       fi
+
+       # Do a test to see if this is really a libtool program.
+       if (sed -e '4q' $file | egrep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then
+         link_against_libtool_libs=
+         relink_command=
+
+         # If there is no directory component, then add one.
+         case "$file" in
+         */* | *\\*) . $file ;;
+         *) . ./$file ;;
+         esac
+
+         # Check the variables that should have been set.
+         if test -z "$link_against_libtool_libs"; then
+           $echo "$modename: invalid libtool wrapper script \`$file'" 1>&2
+           exit 1
+         fi
+
+         finalize=yes
+         for lib in $link_against_libtool_libs; do
+           # Check to see that each library is installed.
+           libdir=
+           if test -f "$lib"; then
+             # If there is no directory component, then add one.
+             case "$lib" in
+             */* | *\\*) . $lib ;;
+             *) . ./$lib ;;
+             esac
+           fi
+           libfile="$libdir/`$echo "X$lib" | $Xsed -e 's%^.*/%%g'`"
+           if test -n "$libdir" && test ! -f "$libfile"; then
+             finalize=no
+           fi
+         done
+
+         outputname=
+         if test "$fast_install" = no && test -n "$relink_command"; then
+           if test "$finalize" = yes && test -z "$run"; then
+             tmpdir="/tmp"
+             test -n "$TMPDIR" && tmpdir="$TMPDIR"
+             tmpdir="$tmpdir/libtool-$$"
+             if $mkdir -p "$tmpdir" && chmod 700 "$tmpdir"; then :
+             else
+               $echo "$modename: error: cannot create temporary directory \`$tmpdir'" 1>&2
+               continue
+             fi
+             outputname="$tmpdir/$file"
+             # Replace the output file specification.
+             relink_command=`$echo "X$relink_command" | $Xsed -e 's%@OUTPUT@%'"$outputname"'%g'`
+
+             $show "$relink_command"
+             if $run eval "$relink_command"; then :
+             else
+               $echo "$modename: error: relink \`$file' with the above command before installing it" 1>&2
+               ${rm}r "$tmpdir"
+               continue
+             fi
+             file="$outputname"
+           else
+             $echo "$modename: warning: cannot relink \`$file'" 1>&2
+           fi
+         else
+           # Install the binary that we compiled earlier.
+           file=`$echo "X$file" | $Xsed -e "s%\([^/]*\)$%$objdir/\1%"`
+         fi
+       fi
+
+       $show "$install_prog$stripme $file $destfile"
+       $run eval "$install_prog\$stripme \$file \$destfile" || exit $?
+       test -n "$outputname" && ${rm}r "$tmpdir"
+       ;;
+      esac
+    done
+
+    for file in $staticlibs; do
+      name=`$echo "X$file" | $Xsed -e 's%^.*/%%'`
+
+      # Set up the ranlib parameters.
+      oldlib="$destdir/$name"
+
+      $show "$install_prog $file $oldlib"
+      $run eval "$install_prog \$file \$oldlib" || exit $?
+
+      # Do each command in the postinstall commands.
+      eval cmds=\"$old_postinstall_cmds\"
+      IFS="${IFS=      }"; save_ifs="$IFS"; IFS='~'
+      for cmd in $cmds; do
+       IFS="$save_ifs"
+       $show "$cmd"
+       $run eval "$cmd" || exit $?
+      done
+      IFS="$save_ifs"
+    done
+
+    if test -n "$future_libdirs"; then
+      $echo "$modename: warning: remember to run \`$progname --finish$future_libdirs'" 1>&2
+    fi
+
+    if test -n "$current_libdirs"; then
+      # Maybe just do a dry run.
+      test -n "$run" && current_libdirs=" -n$current_libdirs"
+      exec $SHELL $0 --finish$current_libdirs
+      exit 1
+    fi
+
+    exit 0
+    ;;
+
+  # libtool finish mode
+  finish)
+    modename="$modename: finish"
+    libdirs="$nonopt"
+    admincmds=
+
+    if test -n "$finish_cmds$finish_eval" && test -n "$libdirs"; then
+      for dir
+      do
+       libdirs="$libdirs $dir"
+      done
+
+      for libdir in $libdirs; do
+       if test -n "$finish_cmds"; then
+         # Do each command in the finish commands.
+         eval cmds=\"$finish_cmds\"
+         IFS="${IFS=   }"; save_ifs="$IFS"; IFS='~'
+         for cmd in $cmds; do
+           IFS="$save_ifs"
+           $show "$cmd"
+           $run eval "$cmd" || admincmds="$admincmds
+       $cmd"
+         done
+         IFS="$save_ifs"
+       fi
+       if test -n "$finish_eval"; then
+         # Do the single finish_eval.
+         eval cmds=\"$finish_eval\"
+         $run eval "$cmds" || admincmds="$admincmds
+       $cmds"
+       fi
+      done
+    fi
+
+    # Exit here if they wanted silent mode.
+    test "$show" = : && exit 0
+
+    echo "----------------------------------------------------------------------"
+    echo "Libraries have been installed in:"
+    for libdir in $libdirs; do
+      echo "   $libdir"
+    done
+    echo
+    echo "If you ever happen to want to link against installed libraries"
+    echo "in a given directory, LIBDIR, you must either use libtool, and"
+    echo "specify the full pathname of the library, or use \`-LLIBDIR'"
+    echo "flag during linking and do at least one of the following:"
+    if test -n "$shlibpath_var"; then
+      echo "   - add LIBDIR to the \`$shlibpath_var' environment variable"
+      echo "     during execution"
+    fi
+    if test -n "$runpath_var"; then
+      echo "   - add LIBDIR to the \`$runpath_var' environment variable"
+      echo "     during linking"
+    fi
+    if test -n "$hardcode_libdir_flag_spec"; then
+      libdir=LIBDIR
+      eval flag=\"$hardcode_libdir_flag_spec\"
+
+      echo "   - use the \`$flag' linker flag"
+    fi
+    if test -n "$admincmds"; then
+      echo "   - have your system administrator run these commands:$admincmds"
+    fi
+    if test -f /etc/ld.so.conf; then
+      echo "   - have your system administrator add LIBDIR to \`/etc/ld.so.conf'"
+    fi
+    echo
+    echo "See any operating system documentation about shared libraries for"
+    echo "more information, such as the ld(1) and ld.so(8) manual pages."
+    echo "----------------------------------------------------------------------"
+    exit 0
+    ;;
+
+  # libtool execute mode
+  execute)
+    modename="$modename: execute"
+
+    # The first argument is the command name.
+    cmd="$nonopt"
+    if test -z "$cmd"; then
+      $echo "$modename: you must specify a COMMAND" 1>&2
+      $echo "$help"
+      exit 1
+    fi
+
+    # Handle -dlopen flags immediately.
+    for file in $execute_dlfiles; do
+      if test ! -f "$file"; then
+       $echo "$modename: \`$file' is not a file" 1>&2
+       $echo "$help" 1>&2
+       exit 1
+      fi
+
+      dir=
+      case "$file" in
+      *.la)
+       # Check to see that this really is a libtool archive.
+       if (sed -e '2q' $file | egrep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then :
+       else
+         $echo "$modename: \`$lib' is not a valid libtool archive" 1>&2
+         $echo "$help" 1>&2
+         exit 1
+       fi
+
+       # Read the libtool library.
+       dlname=
+       library_names=
+
+       # If there is no directory component, then add one.
+       case "$file" in
+       */* | *\\*) . $file ;;
+       *) . ./$file ;;
+       esac
+
+       # Skip this library if it cannot be dlopened.
+       if test -z "$dlname"; then
+         # Warn if it was a shared library.
+         test -n "$library_names" && $echo "$modename: warning: \`$file' was not linked with \`-export-dynamic'"
+         continue
+       fi
+
+       dir=`$echo "X$file" | $Xsed -e 's%/[^/]*$%%'`
+       test "X$dir" = "X$file" && dir=.
+
+       if test -f "$dir/$objdir/$dlname"; then
+         dir="$dir/$objdir"
+       else
+         $echo "$modename: cannot find \`$dlname' in \`$dir' or \`$dir/$objdir'" 1>&2
+         exit 1
+       fi
+       ;;
+
+      *.lo)
+       # Just add the directory containing the .lo file.
+       dir=`$echo "X$file" | $Xsed -e 's%/[^/]*$%%'`
+       test "X$dir" = "X$file" && dir=.
+       ;;
+
+      *)
+       $echo "$modename: warning \`-dlopen' is ignored for non-libtool libraries and objects" 1>&2
+       continue
+       ;;
+      esac
+
+      # Get the absolute pathname.
+      absdir=`cd "$dir" && pwd`
+      test -n "$absdir" && dir="$absdir"
+
+      # Now add the directory to shlibpath_var.
+      if eval "test -z \"\$$shlibpath_var\""; then
+       eval "$shlibpath_var=\"\$dir\""
+      else
+       eval "$shlibpath_var=\"\$dir:\$$shlibpath_var\""
+      fi
+    done
+
+    # This variable tells wrapper scripts just to set shlibpath_var
+    # rather than running their programs.
+    libtool_execute_magic="$magic"
+
+    # Check if any of the arguments is a wrapper script.
+    args=
+    for file
+    do
+      case "$file" in
+      -*) ;;
+      *)
+       # Do a test to see if this is really a libtool program.
+       if (sed -e '4q' $file | egrep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then
+         # If there is no directory component, then add one.
+         case "$file" in
+         */* | *\\*) . $file ;;
+         *) . ./$file ;;
+         esac
+
+         # Transform arg to wrapped name.
+         file="$progdir/$program"
+       fi
+       ;;
+      esac
+      # Quote arguments (to preserve shell metacharacters).
+      file=`$echo "X$file" | $Xsed -e "$sed_quote_subst"`
+      args="$args \"$file\""
+    done
+
+    if test -z "$run"; then
+      # Export the shlibpath_var.
+      eval "export $shlibpath_var"
+
+      # Restore saved enviroment variables
+      if test "${save_LC_ALL+set}" = set; then
+       LC_ALL="$save_LC_ALL"; export LC_ALL
+      fi
+      if test "${save_LANG+set}" = set; then
+       LANG="$save_LANG"; export LANG
+      fi
+
+      # Now actually exec the command.
+      eval "exec \$cmd$args"
+
+      $echo "$modename: cannot exec \$cmd$args"
+      exit 1
+    else
+      # Display what would be done.
+      eval "\$echo \"\$shlibpath_var=\$$shlibpath_var\""
+      $echo "export $shlibpath_var"
+      $echo "$cmd$args"
+      exit 0
+    fi
+    ;;
+
+  # libtool uninstall mode
+  uninstall)
+    modename="$modename: uninstall"
+    rm="$nonopt"
+    files=
+
+    for arg
+    do
+      case "$arg" in
+      -*) rm="$rm $arg" ;;
+      *) files="$files $arg" ;;
+      esac
+    done
+
+    if test -z "$rm"; then
+      $echo "$modename: you must specify an RM program" 1>&2
+      $echo "$help" 1>&2
+      exit 1
+    fi
+
+    for file in $files; do
+      dir=`$echo "X$file" | $Xsed -e 's%/[^/]*$%%'`
+      test "X$dir" = "X$file" && dir=.
+      name=`$echo "X$file" | $Xsed -e 's%^.*/%%'`
+
+      rmfiles="$file"
+
+      case "$name" in
+      *.la)
+       # Possibly a libtool archive, so verify it.
+       if (sed -e '2q' $file | egrep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then
+         . $dir/$name
+
+         # Delete the libtool libraries and symlinks.
+         for n in $library_names; do
+           rmfiles="$rmfiles $dir/$n"
+         done
+         test -n "$old_library" && rmfiles="$rmfiles $dir/$old_library"
+
+         $show "$rm $rmfiles"
+         $run $rm $rmfiles
+
+         if test -n "$library_names"; then
+           # Do each command in the postuninstall commands.
+           eval cmds=\"$postuninstall_cmds\"
+           IFS="${IFS=         }"; save_ifs="$IFS"; IFS='~'
+           for cmd in $cmds; do
+             IFS="$save_ifs"
+             $show "$cmd"
+             $run eval "$cmd"
+           done
+           IFS="$save_ifs"
+         fi
+
+         if test -n "$old_library"; then
+           # Do each command in the old_postuninstall commands.
+           eval cmds=\"$old_postuninstall_cmds\"
+           IFS="${IFS=         }"; save_ifs="$IFS"; IFS='~'
+           for cmd in $cmds; do
+             IFS="$save_ifs"
+             $show "$cmd"
+             $run eval "$cmd"
+           done
+           IFS="$save_ifs"
+         fi
+
+         # FIXME: should reinstall the best remaining shared library.
+       fi
+       ;;
+
+      *.lo)
+       if test "$build_old_libs" = yes; then
+         oldobj=`$echo "X$name" | $Xsed -e "$lo2o"`
+         rmfiles="$rmfiles $dir/$oldobj"
+       fi
+       $show "$rm $rmfiles"
+       $run $rm $rmfiles
+       ;;
+
+      *)
+       $show "$rm $rmfiles"
+       $run $rm $rmfiles
+       ;;
+      esac
+    done
+    exit 0
+    ;;
+
+  "")
+    $echo "$modename: you must specify a MODE" 1>&2
+    $echo "$generic_help" 1>&2
+    exit 1
+    ;;
+  esac
+
+  $echo "$modename: invalid operation mode \`$mode'" 1>&2
+  $echo "$generic_help" 1>&2
+  exit 1
+fi # test -z "$show_help"
+
+# We need to display help for each of the modes.
+case "$mode" in
+"") $echo \
+"Usage: $modename [OPTION]... [MODE-ARG]...
+
+Provide generalized library-building support services.
+
+    --config          show all configuration variables
+    --debug           enable verbose shell tracing
+-n, --dry-run         display commands without modifying any files
+    --features        display basic configuration information and exit
+    --finish          same as \`--mode=finish'
+    --help            display this help message and exit
+    --mode=MODE       use operation mode MODE [default=inferred from MODE-ARGS]
+    --quiet           same as \`--silent'
+    --silent          don't print informational messages
+    --version         print version information
+
+MODE must be one of the following:
+
+      compile         compile a source file into a libtool object
+      execute         automatically set library path, then run a program
+      finish          complete the installation of libtool libraries
+      install         install libraries or executables
+      link            create a library or an executable
+      uninstall       remove libraries from an installed directory
+
+MODE-ARGS vary depending on the MODE.  Try \`$modename --help --mode=MODE' for
+a more detailed description of MODE."
+  exit 0
+  ;;
+
+compile)
+  $echo \
+"Usage: $modename [OPTION]... --mode=compile COMPILE-COMMAND... SOURCEFILE
+
+Compile a source file into a libtool library object.
+
+This mode accepts the following additional options:
+
+  -o OUTPUT-FILE    set the output file name to OUTPUT-FILE
+  -static           always build a \`.o' file suitable for static linking
+
+COMPILE-COMMAND is a command to be used in creating a \`standard' object file
+from the given SOURCEFILE.
+
+The output file name is determined by removing the directory component from
+SOURCEFILE, then substituting the C source code suffix \`.c' with the
+library object suffix, \`.lo'."
+  ;;
+
+execute)
+  $echo \
+"Usage: $modename [OPTION]... --mode=execute COMMAND [ARGS]...
+
+Automatically set library path, then run a program.
+
+This mode accepts the following additional options:
+
+  -dlopen FILE      add the directory containing FILE to the library path
+
+This mode sets the library path environment variable according to \`-dlopen'
+flags.
+
+If any of the ARGS are libtool executable wrappers, then they are translated
+into their corresponding uninstalled binary, and any of their required library
+directories are added to the library path.
+
+Then, COMMAND is executed, with ARGS as arguments."
+  ;;
+
+finish)
+  $echo \
+"Usage: $modename [OPTION]... --mode=finish [LIBDIR]...
+
+Complete the installation of libtool libraries.
+
+Each LIBDIR is a directory that contains libtool libraries.
+
+The commands that this mode executes may require superuser privileges.  Use
+the \`--dry-run' option if you just want to see what would be executed."
+  ;;
+
+install)
+  $echo \
+"Usage: $modename [OPTION]... --mode=install INSTALL-COMMAND...
+
+Install executables or libraries.
+
+INSTALL-COMMAND is the installation command.  The first component should be
+either the \`install' or \`cp' program.
+
+The rest of the components are interpreted as arguments to that command (only
+BSD-compatible install options are recognized)."
+  ;;
+
+link)
+  $echo \
+"Usage: $modename [OPTION]... --mode=link LINK-COMMAND...
+
+Link object files or libraries together to form another library, or to
+create an executable program.
+
+LINK-COMMAND is a command using the C compiler that you would use to create
+a program from several object files.
+
+The following components of LINK-COMMAND are treated specially:
+
+  -all-static       do not do any dynamic linking at all
+  -avoid-version    do not add a version suffix if possible
+  -dlopen FILE      \`-dlpreopen' FILE if it cannot be dlopened at runtime
+  -dlpreopen FILE   link in FILE and add its symbols to lt_preloaded_symbols
+  -export-dynamic   allow symbols from OUTPUT-FILE to be resolved with dlsym(3)
+  -export-symbols SYMFILE
+                   try to export only the symbols listed in SYMFILE
+  -export-symbols-regex REGEX
+                   try to export only the symbols matching REGEX
+  -LLIBDIR          search LIBDIR for required installed libraries
+  -lNAME            OUTPUT-FILE requires the installed library libNAME
+  -module           build a library that can dlopened
+  -no-undefined     declare that a library does not refer to external symbols
+  -o OUTPUT-FILE    create OUTPUT-FILE from the specified objects
+  -release RELEASE  specify package release information
+  -rpath LIBDIR     the created library will eventually be installed in LIBDIR
+  -R[ ]LIBDIR       add LIBDIR to the runtime path of programs and libraries
+  -static           do not do any dynamic linking of libtool libraries
+  -version-info CURRENT[:REVISION[:AGE]]
+                   specify library version info [each variable defaults to 0]
+
+All other options (arguments beginning with \`-') are ignored.
+
+Every other argument is treated as a filename.  Files ending in \`.la' are
+treated as uninstalled libtool libraries, other files are standard or library
+object files.
+
+If the OUTPUT-FILE ends in \`.la', then a libtool library is created,
+only library objects (\`.lo' files) may be specified, and \`-rpath' is
+required, except when creating a convenience library.
+
+If OUTPUT-FILE ends in \`.a' or \`.lib', then a standard library is created
+using \`ar' and \`ranlib', or on Windows using \`lib'.
+
+If OUTPUT-FILE ends in \`.lo' or \`.${objext}', then a reloadable object file
+is created, otherwise an executable program is created."
+  ;;
+
+uninstall)
+  $echo \
+"Usage: $modename [OPTION]... --mode=uninstall RM [RM-OPTION]... FILE...
+
+Remove libraries from an installation directory.
+
+RM is the name of the program to use to delete files associated with each FILE
+(typically \`/bin/rm').  RM-OPTIONS are options (such as \`-f') to be passed
+to RM.
+
+If FILE is a libtool library, all the files associated with it are deleted.
+Otherwise, only FILE itself is deleted using RM."
+  ;;
+
+*)
+  $echo "$modename: invalid operation mode \`$mode'" 1>&2
+  $echo "$help" 1>&2
+  exit 1
+  ;;
+esac
+
+echo
+$echo "Try \`$modename --help' for more information about other modes."
+
+exit 0
+
+# Local Variables:
+# mode:shell-script
+# sh-indentation:2
+# End:
diff --git a/contrib/php4/missing b/contrib/php4/missing
new file mode 100644 (file)
index 0000000..e69de29
diff --git a/contrib/php4/mkinstalldirs b/contrib/php4/mkinstalldirs
new file mode 100644 (file)
index 0000000..e69de29
diff --git a/contrib/php4/php_config.h.in b/contrib/php4/php_config.h.in
new file mode 100644 (file)
index 0000000..9c85e15
--- /dev/null
@@ -0,0 +1,11 @@
+/* php_config.h.in.  Generated automatically from configure.in by autoheader.  */
+
+/* Define if your C compiler doesn't accept -c and -o together.  */
+#undef NO_MINUS_C_MINUS_O
+
+/*   */
+#undef HAVE_RRDTOOL
+
+/* Whether to build rrdtool as dynamic module */
+#undef COMPILE_DL_RRDTOOL
+
diff --git a/contrib/php4/php_rrdtool.h b/contrib/php4/php_rrdtool.h
new file mode 100644 (file)
index 0000000..7bc1998
--- /dev/null
@@ -0,0 +1,46 @@
+/*
+ * php_rrdtool.h
+ *
+ * php4 rrdtool module.  
+ *
+ * Joe Miller, <joeym@inficad.com>,<joeym@ibizcorp.com>, 7/19/2000
+ *
+ * $Id$
+ *
+ */
+
+#ifndef _PHP4_RRDTOOL_H
+#define _PHP4_RRDTOOL_H
+
+#if COMPILE_DL
+#undef HAVE_RRDTOOL
+#define HAVE_RRDTOOL 1
+#endif
+#ifndef DLEXPORT
+#define DLEXPORT
+#endif
+
+#if HAVE_RRDTOOL
+
+PHP_MINFO_FUNCTION(rrdtool);
+
+extern zend_module_entry rrdtool_module_entry;
+#define rrdtool_module_ptr &rrdtool_module_entry
+#define phpext_rrdtool_ptr rrdtool_module_ptr
+
+PHP_FUNCTION(rrd_error);
+PHP_FUNCTION(rrd_clear_error);
+PHP_FUNCTION(rrd_update);
+PHP_FUNCTION(rrd_last);
+PHP_FUNCTION(rrd_create);
+PHP_FUNCTION(rrd_graph);
+PHP_FUNCTION(rrd_fetch);
+
+#else
+
+#define phpext_rrdtool_ptr NULL
+
+
+#endif /* HAVE_RRDTOOL */
+
+#endif  /* _PHP4_RRDTOOL_H */
diff --git a/contrib/php4/rrdtool.c b/contrib/php4/rrdtool.c
new file mode 100644 (file)
index 0000000..87b9fd2
--- /dev/null
@@ -0,0 +1,475 @@
+/*
+ *
+ * php4_rrdtool.c
+ *
+ *     PHP interface to RRD Tool. (for php4/zend)
+ *
+ *
+ *       Joe Miller, <joeym@ibizcorp.com>, <joeym@inficad.com> 
+ *          iBIZ Technology Corp,  SkyLynx / Inficad Communications
+ *          2/12/2000 & 7/18/2000
+ *
+ *
+ * See README, INSTALL, and USAGE files for more details.
+ *
+ * $Id$
+ *
+ */
+
+#include "php.h"
+#include "rrd.h"
+#include "php_rrdtool.h"
+
+#if HAVE_RRDTOOL
+
+function_entry rrdtool_functions[] = {
+       PHP_FE(rrd_error, NULL)
+       PHP_FE(rrd_clear_error, NULL)
+       PHP_FE(rrd_graph, NULL)
+       PHP_FE(rrd_last, NULL)
+       PHP_FE(rrd_fetch, NULL)
+       PHP_FE(rrd_update, NULL)
+       PHP_FE(rrd_create, NULL)
+       {NULL, NULL, NULL}
+};
+
+zend_module_entry rrdtool_module_entry = {
+       "RRDTool",
+       rrdtool_functions,
+       NULL,
+       NULL,
+       NULL,
+       NULL,
+       PHP_MINFO(rrdtool),
+       STANDARD_MODULE_PROPERTIES,
+};
+
+#ifdef COMPILE_DL_RRDTOOL
+ZEND_GET_MODULE(rrdtool)
+#endif
+
+PHP_MINFO_FUNCTION(rrdtool)
+{
+       php_info_print_table_start();
+       php_info_print_table_header(2, "rrdtool support", "enabled");
+       php_info_print_table_end();
+}
+
+//PHP_MINIT_FUNCTION(rrdtool)
+//{
+//     return SUCCESS;
+//}
+
+
+/* {{{ proto string rrd_error(void)
+       Get the error message set by the last rrd tool function call */
+
+PHP_FUNCTION(rrd_error)
+{
+       char *msg;
+
+       if ( rrd_test_error() )
+       {
+               msg = rrd_get_error();        
+
+               RETVAL_STRING(msg, 1);
+               rrd_clear_error();
+       }
+       else
+               return;
+}
+/* }}} */
+
+
+
+/* {{{ proto void rrd_clear_error(void)
+       Clear the error set by the last rrd tool function call */
+
+PHP_FUNCTION(rrd_clear_error)
+{
+       if ( rrd_test_error() )
+               rrd_clear_error();
+
+       return;
+}
+/* }}} */
+
+
+
+/* {{{ proto int rrd_update(string file, string opt) 
+       Update an RRD file with values specified */
+
+PHP_FUNCTION(rrd_update)
+{
+       pval *file, *opt;
+       char **argv;
+
+       if ( rrd_test_error() )
+               rrd_clear_error();
+
+       if ( ZEND_NUM_ARGS() == 2 && 
+                zend_get_parameters(ht, 2, &file, &opt) == SUCCESS )
+       {
+               convert_to_string(file);
+               convert_to_string(opt);
+
+               argv = (char **) emalloc(4 * sizeof(char *));
+
+               argv[0] = "dummy";
+               argv[1] = estrdup("update");
+               argv[2] = estrdup(file->value.str.val);
+               argv[3] = estrdup(opt->value.str.val);
+
+               optind = 0; opterr = 0;
+               if ( rrd_update(3, &argv[1]) != -1 )
+               {
+                       RETVAL_TRUE;
+               }
+               else
+               {
+                       RETVAL_FALSE;
+               }
+               efree(argv[1]); efree(argv[2]); efree(argv[3]);
+               efree(argv);
+       }
+       else
+       {
+               WRONG_PARAM_COUNT;
+       }
+       return;
+}
+/* }}} */
+
+
+
+/* {{{ proto int rrd_last(string file)
+       Gets last update time of an RRD file */
+
+PHP_FUNCTION(rrd_last)
+{
+       pval *file;
+       unsigned long retval;
+
+       char **argv = (char **) emalloc(3 * sizeof(char *));
+    
+       if ( rrd_test_error() )
+               rrd_clear_error();
+    
+       if (zend_get_parameters(ht, 1, &file) == SUCCESS)
+       {
+               convert_to_string(file);
+
+               argv[0] = "dummy";
+               argv[1] = estrdup("last");
+               argv[2] = estrdup(file->value.str.val);
+
+               optind = 0; opterr = 0;
+               retval = rrd_last(2, &argv[1]);
+
+               efree(argv[1]);  efree(argv[2]);
+               efree(argv);
+               RETVAL_LONG(retval);
+       }
+       else
+       {
+               WRONG_PARAM_COUNT;
+       }
+       return;
+}
+/* }}} */
+
+
+/* {{{ proto int rrd_create(string file, array args_arr, int argc)
+       Create an RRD file with the options passed (passed via array) */ 
+
+PHP_FUNCTION(rrd_create)
+{
+       pval *file, *args, *p_argc;
+       pval *entry;
+       char **argv;
+       HashTable *args_arr;
+       int argc, i;
+
+       if ( rrd_test_error() )
+               rrd_clear_error();
+
+       if ( ZEND_NUM_ARGS() == 3 && 
+               getParameters(ht, 3, &file, &args, &p_argc) == SUCCESS )
+       {
+               if ( args->type != IS_ARRAY )
+               { 
+                       php_error(E_WARNING, "2nd Variable passed to rrd_create is not an array!\n");
+                       RETURN_FALSE;
+               }
+
+               convert_to_long(p_argc);
+               convert_to_string(file);
+               
+               convert_to_array(args);
+               args_arr = args->value.ht;
+               zend_hash_internal_pointer_reset(args_arr);
+
+               argc = p_argc->value.lval + 3;
+               argv = (char **) emalloc(argc * sizeof(char *));
+
+               argv[0] = "dummy";
+               argv[1] = estrdup("create");
+               argv[2] = estrdup(file->value.str.val);
+
+               for (i = 3; i < argc; i++) 
+               {
+                       pval **dataptr;
+
+                       if ( zend_hash_get_current_data(args_arr, (void *) &dataptr) == FAILURE )
+                               continue;
+
+                       entry = *dataptr;
+
+                       if ( entry->type != IS_STRING )
+                               convert_to_string(entry);
+
+                       argv[i] = estrdup(entry->value.str.val);
+
+                       if ( i < argc )
+                               zend_hash_move_forward(args_arr);
+               }
+  
+               optind = 0;  opterr = 0;
+
+               if ( rrd_create(argc-1, &argv[1]) != -1 )
+               {
+                       RETVAL_TRUE;
+               }
+               else
+               {
+                       RETVAL_FALSE;
+               }
+               for (i = 1; i < argc; i++)
+                       efree(argv[i]);
+
+               efree(argv);
+       }
+       else
+       {
+           WRONG_PARAM_COUNT;
+       }
+       return;
+}
+/* }}} */
+
+
+
+/* {{{ proto mixed rrd_graph(string file, array args_arr, int argc)
+       Creates a graph based on options passed via an array */
+
+PHP_FUNCTION(rrd_graph)
+{
+       pval *file, *args, *p_argc;
+       pval *entry;
+       zval *p_calcpr;
+       HashTable *args_arr;
+       int i, xsize, ysize, argc;
+       char **argv, **calcpr;
+    
+
+       if ( rrd_test_error() )
+               rrd_clear_error();
+    
+       if ( ZEND_NUM_ARGS() == 3 && 
+               zend_get_parameters(ht, 3, &file, &args, &p_argc) == SUCCESS)
+       {
+               if ( args->type != IS_ARRAY )
+               { 
+                       php_error(E_WARNING, "2nd Variable passed to rrd_graph is not an array!\n");
+                       RETURN_FALSE;
+               }
+        
+               convert_to_long(p_argc);
+               convert_to_string(file);
+
+               convert_to_array(args);
+               args_arr = args->value.ht;
+
+               argc = p_argc->value.lval + 3;
+               argv = (char **) emalloc(argc * sizeof(char *));
+               argv[0] = "dummy";
+               argv[1] = estrdup("graph");
+               argv[2] = estrdup(file->value.str.val);
+
+               for (i = 3; i < argc; i++) 
+               {
+                       pval **dataptr;
+
+                       if ( zend_hash_get_current_data(args_arr, (void *) &dataptr) == FAILURE )
+                               continue;
+
+                       entry = *dataptr;
+
+                       if ( entry->type != IS_STRING )
+                               convert_to_string(entry);
+
+                       argv[i] = estrdup(entry->value.str.val);
+
+                       if ( i < argc )
+                               zend_hash_move_forward(args_arr);
+               }
+   
+               optind = 0; opterr = 0; 
+               if ( rrd_graph(argc-1, &argv[1], &calcpr, &xsize, &ysize) != -1 )
+               {
+                       array_init(return_value);
+                       add_assoc_long(return_value, "xsize", xsize);
+                       add_assoc_long(return_value, "ysize", ysize);
+
+                       MAKE_STD_ZVAL(p_calcpr);
+                       array_init(p_calcpr);
+    
+                       if (calcpr)
+                       {
+                               for (i = 0; calcpr[i]; i++)
+                               {
+                                       add_next_index_string(p_calcpr, calcpr[i], 1);
+                                       free(calcpr[i]);
+                               }
+                               free(calcpr);
+                       }
+                       zend_hash_update(return_value->value.ht, "calcpr", sizeof("calcpr"), 
+                                                       (void *)&p_calcpr, sizeof(zval *), NULL);
+               }
+               else
+               {
+                       RETVAL_FALSE;
+               }
+               for (i = 1; i < argc; i++)
+                       efree(argv[i]);
+
+               efree(argv);
+       }
+       else
+       { 
+               WRONG_PARAM_COUNT;
+       }
+       return;
+}
+/* }}} */
+
+
+
+/* {{{ proto mixed rrd_fetch(string file, array args_arr, int p_argc)
+       Fetch info from an RRD file */
+
+PHP_FUNCTION(rrd_fetch)
+{
+       pval *file, *args, *p_argc;
+       pval *entry;
+       pval *p_start, *p_end, *p_step, *p_ds_cnt;
+       HashTable *args_arr;
+       zval *p_ds_namv, *p_data;
+       int i, argc;
+       time_t start, end;
+       unsigned long step, ds_cnt;
+       char **argv, **ds_namv; 
+       rrd_value_t *data, *datap;
+    
+       if ( rrd_test_error() )
+               rrd_clear_error();
+    
+       if ( ZEND_NUM_ARGS() == 3 && 
+                zend_get_parameters(ht, 3, &file, &args, &p_argc) == SUCCESS)
+       {
+               if ( args->type != IS_ARRAY )
+               { 
+                       php_error(E_WARNING, "2nd Variable passed to rrd_fetch is not an array!\n");
+                       RETURN_FALSE;
+               }
+        
+               convert_to_long(p_argc);
+               convert_to_string(file);
+
+               convert_to_array(args);
+               args_arr = args->value.ht;
+
+               argc = p_argc->value.lval + 3;
+               argv = (char **) emalloc(argc * sizeof(char *));
+               argv[0] = "dummy";
+               argv[1] = estrdup("fetch");
+               argv[2] = estrdup(file->value.str.val);
+
+               for (i = 3; i < argc; i++) 
+               {
+                       pval **dataptr;
+
+                       if ( zend_hash_get_current_data(args_arr, (void *) &dataptr) == FAILURE )
+                               continue;
+
+                       entry = *dataptr;
+
+                       if ( entry->type != IS_STRING )
+                               convert_to_string(entry);
+
+                       argv[i] = estrdup(entry->value.str.val);
+
+                       if ( i < argc )
+                               zend_hash_move_forward(args_arr);
+               }
+  
+               optind = 0; opterr = 0; 
+
+               if ( rrd_fetch(argc-1, &argv[1], &start,&end,&step,&ds_cnt,&ds_namv,&data) != -1 )
+               {
+                       array_init(return_value);
+                       add_assoc_long(return_value, "start", start);
+                       add_assoc_long(return_value, "end", end);
+                       add_assoc_long(return_value, "step", step);
+                       add_assoc_long(return_value, "ds_cnt", ds_cnt);
+
+                       MAKE_STD_ZVAL(p_ds_namv);
+                       MAKE_STD_ZVAL(p_data);
+                       array_init(p_ds_namv);
+                       array_init(p_data);
+   
+                       if (ds_namv)
+                       {
+                               for (i = 0; i < ds_cnt; i++)
+                               {
+                                       add_next_index_string(p_ds_namv, ds_namv[i], 1);
+                                       free(ds_namv[i]);
+                               }
+                               free(ds_namv);
+                       }
+
+                       if (data)
+                       {
+                               datap = data;
+                               for (i = start; i <= end; i += step)
+                                       add_next_index_double(p_data, *(datap++));
+                               free(data);
+                       }
+
+                       zend_hash_update(return_value->value.ht, "ds_namv", sizeof("ds_namv"), 
+                                                       (void *)&p_ds_namv, sizeof(zval *), NULL);
+                       zend_hash_update(return_value->value.ht, "data", sizeof("data"), 
+                                                       (void *)&p_data, sizeof(zval *), NULL);
+               }
+               else
+               {
+                       RETVAL_FALSE;
+               }
+               for (i = 1; i < argc; i++)
+                       efree(argv[i]);
+
+               efree(argv);
+       }
+       else
+       { 
+               WRONG_PARAM_COUNT;
+       }
+       return;
+}
+/* }}} */
+
+#endif /* HAVE_RRDTOOL */
diff --git a/contrib/rrd-file-icon/README b/contrib/rrd-file-icon/README
new file mode 100644 (file)
index 0000000..cc06f18
--- /dev/null
@@ -0,0 +1,19 @@
+From: "Alex van den Bogaerdt" <alex@ergens.op.Het.Net>
+
+This icon can be used, for instance, by apache httpd.
+
+(note: path names may differ in your setup)
+
+Copy the icon to /home/apache/icons/
+Modify /etc/httpd/conf/srm.conf by adding:
+
+       AddIcon /icons/rrd.png .rrd
+       AddDescription "Round Robin Database" .rrd
+
+You could even run a script when an rrd file is clicked on:
+
+       AddHandler rrd-handler rrd
+       Action rrd-handler /cgi-bin/some-general-rrd-script.cgi
+
+
+Alex
diff --git a/contrib/rrd-file-icon/rrd.png b/contrib/rrd-file-icon/rrd.png
new file mode 100644 (file)
index 0000000..f05efcd
Binary files /dev/null and b/contrib/rrd-file-icon/rrd.png differ
diff --git a/contrib/rrdexplorer/README.txt b/contrib/rrdexplorer/README.txt
new file mode 100644 (file)
index 0000000..ee94db8
--- /dev/null
@@ -0,0 +1,29 @@
+From: "Claus Norrbohm" <james@type-this.com>
+
+RRD-Explorer (formally known as clickable rrd graphs) is a
+general tool for exploring RRD-files. It eliminates the need
+for creating individual RRDs cgi-scripts to show your RRD
+graphs, just plug these 4 lines into your httpd.conf (thanks
+to Alex van den Bogaerdt):
+
+   # rrd files
+   AddIcon /icons/rrd.png .rrd
+   AddDescription "Round Robin Database" .rrd
+
+   # rrdtool handler
+   AddHandler rrd-handler rrd
+   Action rrd-handler /cgi-bin/map.cgi
+
+Last line must be modified to match your system...
+
+If your placed map.cgi & png.cgi - change owner to reflect
+your cgi-bin user and make the scripts executable ex.:
+
+   chown root.root map.cgi png.cgi
+   chmod a+rx map.cgi png.cgi
+
+Now place your RRD-files in a directory below your "DocumentRoot"
+where they can be seen, i.e. "Options Indexes" must be set for
+the directory.
+
+Enjoy, Claus
diff --git a/contrib/rrdexplorer/map.cgi b/contrib/rrdexplorer/map.cgi
new file mode 100644 (file)
index 0000000..f2ced54
--- /dev/null
@@ -0,0 +1,121 @@
+#!/usr/bin/perl
+# Explore rrd via clickable graphs by. james@type-this.com (Claus Norrbohm)
+
+# Basic idea: click high -> zoom out, click low -> zoom in,
+# click left -> back history, click right -> forward history
+
+use CGI::Carp;
+use CGI;
+use POSIX;
+use lib qw( /usr/local/rrdtool/lib/perl );
+use RRDs;
+
+my $query = new CGI;
+
+# modify as needed
+$hight = 300; # Image size
+$width = 600;
+$refresh = 3600;
+$expiredate = strftime "%a, %e %b %Y %H:%M:%S GMT", gmtime(time); # Format date(now)
+$root = $ENV{"DOCUMENT_ROOT"}; # Location of rrd
+
+print "Content-type: text/html\n"; # Use html
+print "Cache-Control: no-cache\n"; # Ensure no cashing of page
+print "Expires: $expiredate\n"; # Expire now
+print "Refresh: $refresh\n\n";
+
+print $query->start_html("Clickable rrd-graph"); # Title of html page
+
+if ($query->param()) { # the form has already been filled out
+
+  $rrd = $query->param("rrd"); # which rrd file are we tracking
+  $start = $query->param("start"); # Start time
+  $end = $query->param("end"); # End time
+  $x = $query->param("img.x"); # x/y cordinates of click
+  $y = $query->param("img.y");
+
+  # see contrib/rrdfetchnames
+  my ($begin,$step,$name,$data) = RRDs::fetch "$root$rrd","AVERAGE","--start","now","--end","start+1";
+  if ( my $ERR = RRDs::error) {
+    die "ERROR while fetching data from $NAME $ERR\n";
+  }
+  @names = @$name; # list of DS's "@$name"
+  $j = @names;
+  $esu = "";
+
+  for ($i = 0; $i < $j; $i++) { # here we find which DS we are curently tracking
+    if ($query->param("@names[$i]") == "1") {
+      @use[$i] = 1;
+      $esu .= "1"; # DS included
+    } else {
+      @use[$i] = 0;
+      $esu .= "0"; # DS not included
+    }
+  }
+
+  $intv = $end - $start; # Last used interval
+  $zoom = ($hight + 100 - $y) / $hight; # Find zoom factor + 100 because hight is not exact
+  $center = $start + $intv * $x / $width;  # Find time corresponding to click
+
+  $start = int($center - $intv * $zoom); # Calc new start
+  $end = int($center + $intv * $zoom); # Calc new end
+
+} else { # first time through, so present clean form
+
+  $rrd = $ENV{"REQUEST_URI"}; # Location of rrd
+
+  $end = time(); # use now for end
+  $start = $end - 86400; # and go back 24 hours
+
+  # see rrdfetchnames
+  my ($begin,$step,$name,$data) = RRDs::fetch "$root$rrd","AVERAGE","--start","now","--end","start+1";
+  if ( my $ERR = RRDs::error) {
+    die "ERROR while fetching data from $NAME $ERR\n";
+  }
+  @names = @$name; # list of DS's "@$name"
+  $j = @names;
+  $esu = "";
+
+  for ($i = 0; $i < $j; $i++) { # All DS is included first time
+    @use[$i] = 1;
+    $esu .= "1";
+  }
+
+}
+
+# Create a form with clickable image see page xxx in: Wallace, Shawn P.
+# Programming Web Graphics with Perl
+# and GNU Software
+# O'Reilly UK,1999, UK, Paperback
+
+print "<FORM ACTION=\"$rrd\">\n";
+
+print "<TABLE border=\"0\">\n";
+print "<TR><TD colspan=\"3\" align=\"center\">Click on top to zoom out</TD></TR>\n";
+print "<TR><TD align=\"right\">Click<BR>left<BR>to<BR>go<BR>back<BR>in<BR>time</TD>";
+print "<TD>\n";
+# png.cgi prints the rrd graph, by printing to std.out (browser)
+print "<INPUT TYPE=\"image\" NAME=\"img\" SRC=\"/cgi-bin/png.cgi?rrd=$rrd&start=$start&end=$end&hight=$hight&width=$width&use=$esu\">\n";
+print "<INPUT TYPE=\"hidden\" NAME=\"start\" VALUE=\"$start\">\n";
+print "<INPUT TYPE=\"hidden\" NAME=\"end\" VALUE=\"$end\">\n";
+print "<INPUT TYPE=\"hidden\" NAME=\"rrd\" VALUE=\"$rrd\">\n";
+print "</TD>";
+print "<TD align=\"left\">Click<BR>right<BR>to<BR>go<BR>forward<BR>in<BR>time</TD></TR>\n";
+print "<TR><TD colspan=\"3\" align=\"center\">Click on bottom to zoom in</TD></TR>\n";
+print "</TABLE>\n";
+
+print "<BR><HR><BR><TABLE border=\"0\"></TD><TD>Select / Deselect DS: </TD>\n";
+for ($i = 0; $i < $j; $i++) { # present user with list of DS to select / deselect
+  if (@use[$i] == 0) {
+    print "<TD><INPUT TYPE=\"checkbox\" NAME=\"@names[$i]\" VALUE=1>@names[$i] </TD>\n";
+  } else {
+    print "<TD><INPUT TYPE=\"checkbox\" NAME=\"@names[$i]\" VALUE=1 CHECKED>@names[$i] </TD>\n";
+  }
+}
+print "</TR></TABLE>\n";
+
+print "</FORM>\n";
+
+print "<P ALIGN=\"RIGHT\">Created by - Claus Norrbohm - <A HREF=\"mailto:james\@type-this.com\">james\@type-this.com</A></P>";
+
+print $query->end_html(); # lmth ....
diff --git a/contrib/rrdexplorer/png.cgi b/contrib/rrdexplorer/png.cgi
new file mode 100644 (file)
index 0000000..d6e3639
--- /dev/null
@@ -0,0 +1,56 @@
+#!/usr/bin/perl
+# Create rrdtool graph ... 
+
+use CGI::Carp;
+use CGI;
+use POSIX;
+use lib qw( /usr/local/rrdtool/lib/perl );
+use RRDs;
+
+my $query = new CGI;
+
+# Get params from URL
+$rrd = $query->param("rrd"); # RRD absolute path
+$start = $query->param("start"); # start time
+$end = $query->param("end"); # end time
+$hight = $query->param("hight"); # Image sizes
+$width = $query->param("width");
+$use = $query->param("use"); # which DS shal I print
+
+# List of colors for graphs
+@color = ("#FF0000","#00FF00","#FFFF00","#0000FF","#FF00FF","#00FFFF","#FFFFFF",
+         "#800000","#008000","#808000","#000080","#800080","#008080","#808080");
+
+# title of graph with start / end time
+$title = $rrd.": ".scalar(localtime($start))." / ".scalar(localtime($end));
+
+# Formated date(now)
+$expiredate = strftime "%a, %e %b %Y %H:%M:%S GMT", gmtime(time);
+
+print "Content-type: image/png\n"; # Use html
+print "Cache-Control: no-cache\n"; # Ensure no cashing of page
+print "Expires: $expiredate\n\n"; # Expire now
+
+$root = $ENV{"DOCUMENT_ROOT"};
+# see rrdfetchnames
+($begin,$step,$names,$data) = RRDs::fetch "$root$rrd", "AVERAGE", "--start", "now","--end","start+1";
+if ( my $ERR = RRDs::error) {
+  die "ERROR while fetching data from $NAME $ERR\n";
+}
+@names = @$names; # list of def's "@$name"
+$j = @names; # how many DS's
+
+# Append DEF's see examples/shared-demp.pl
+for ($i = 0; $i < $j; $i++) {
+  $val = substr($use, $i, 1);
+  if ( $val == "1" ) {
+    @options = (@options, "DEF:l$i=$root$rrd:@names[$i]:AVERAGE","LINE2:l$i@color[$i]:@names[$i]");
+  }
+}
+
+# Draw the graph to std.out ("-")
+($avg,$xsize,$ysize) = RRDs::graph "-","--title", "$title","--height","$hight","--width",
+  "$width","--start",$start,"--end",$end,"-a","PNG",@options;
+if ($ERROR = RRDs::error) {
+  print "ERROR: $ERROR\n";
+}
diff --git a/contrib/rrdfetchnames/README b/contrib/rrdfetchnames/README
new file mode 100644 (file)
index 0000000..bfd234b
--- /dev/null
@@ -0,0 +1,13 @@
+Is there a program currently to list the available data sources, in a given rrd
+file?
+
+From: Rainer Nagel <rainer@roka.net>
+
+yes ...
+
+here ...
+
+rrdfetchnames.pl my.rrd
+
+have fun
+
diff --git a/contrib/rrdfetchnames/rrdfetchnames.pl b/contrib/rrdfetchnames/rrdfetchnames.pl
new file mode 100755 (executable)
index 0000000..050a9fc
--- /dev/null
@@ -0,0 +1,30 @@
+#!/usr/bin/perl
+
+use strict;
+
+#makes things work when run without install
+use lib qw( ../../perl-shared/blib/lib ../../perl-shared/blib/arch );
+
+#makes programm work AFTER install
+use lib qw( /usr/local/rrdtool-1.0.30/lib/perl ../lib/perl );
+
+use vars qw(@ISA $loaded);
+
+use RRDs;
+
+my $NAME = $ARGV[ 0];
+my $SEPARATOR = " ";
+my $CF = "AVERAGE";
+
+my ($start,$step,$names,$data) = RRDs::fetch "$NAME", "$CF", "--start", "now","--end","start+1";
+
+if ( my $ERR = RRDs::error){
+       die "ERROR while fetching data from $NAME $ERR\n";
+}
+
+print join( $SEPARATOR, @$names), "\n";
+
+sub usage{
+       print "usage: rrdfetchnames filename";
+};
+
diff --git a/contrib/rrdlastds/README b/contrib/rrdlastds/README
new file mode 100644 (file)
index 0000000..491e466
--- /dev/null
@@ -0,0 +1,29 @@
+From: steve rader <rader@teak.wiscnet.net>
+Date: Mon, 10 Jan 2000 10:40:56 -0600
+Subject: ANNOUNCEMENT: "rrdlastds" (was Re: rrd script assistance)
+
+ % ./rrdlastds 
+ usage: rrdlastds [-v] [-a] [-c num] [-l label] [-s stamp] some.rrd
+   -v        print the start and end times (also --verbose)
+   -a        autoscale DS values (also --autoscale)
+   -c num    convert DS values by "num" (also --conversion)
+   -l label  label DS values with "label" (also --label)
+   -s stamp  report about DS values at the time "stamp" (also --start)
+
+The nominal usage is:
+
+ % ./rrdlastds some.rrd
+ Mon Jan 10 10:30:00 2000  146823.19 input  17225.20 output
+
+To get a verbose, autoscaled report about this time yesterday,
+converted to bits and nicely labeled, do:
+
+ % ./rrdlastds -v -a -c 8 -l b/s -s -1day some.rrd
+ Sun Jan  9 10:30:00 2000 through Sun Jan  9 10:35:00 2000
+ average  105.27 kb/s input  17.10 kb/s output
+
+later
+steve
+- - -
+systems guy
+wiscnet.net
diff --git a/contrib/rrdlastds/rrdlastds.pl b/contrib/rrdlastds/rrdlastds.pl
new file mode 100755 (executable)
index 0000000..d4ecf1c
--- /dev/null
@@ -0,0 +1,192 @@
+#! /usr/sepp/bin/perl
+#
+# rrdlastds - report the latest DS values from the RRA with
+# the shortest time resolution
+#
+# steve rader
+# <rader@wiscnet.net>
+# Jan 8th, 2000
+#
+# $Id$
+#
+
+#makes things work when run without install
+use lib qw( ../../perl-shared/blib/lib ../../perl-shared/blib/arch );
+# this is for after install
+use lib qw( /usr/local/rrdtool-1.0.30/lib/perl ../lib/perl );
+
+use RRDs;
+
+%scale_symbols = qw( -18 a -15 f -12 p -9 n -6 u -3 m 
+  3 k 6 M 9 G 12 T 15 P 18 E );
+
+#----------------------------------------
+
+while ( $ARGV[0] =~ /^-/ ) {
+  switch: {
+    if ( $ARGV[0] eq '--autoscale' || $ARGV[0] =~ /^-a/ ) {
+      $scale = 1;
+      last switch;
+    }
+    if ( $ARGV[0] eq '--conversion' || $ARGV[0] =~ /^-c/ ) {
+      shift @ARGV;
+      $conversion = $ARGV[0];
+      if ( $conversion !~ /^\d+$|^\d+\.\d+$|^\.\d+$/ ) {
+        print "rrdlastds: bad conversion factor \"$conversion\"\n";
+        exit 1;
+      }
+      last switch;
+    }
+    if ( $ARGV[0] eq '--label' || $ARGV[0] =~ /^-l/ ) {
+      shift @ARGV;
+      $label = $ARGV[0];
+      last switch;
+    }
+    if ( $ARGV[0] eq '--start' || $ARGV[0] =~ /^-s/ ) {
+      shift @ARGV;
+      $start = $ARGV[0]; 
+      if ( $start =~ /^\d+$/ ) {
+        $end = $start+1;
+      } else {
+        $end = "${start}+1sec";
+      }
+      last switch;
+    }
+    if ( $ARGV[0] eq '--verbose' || $ARGV[0] =~ /^-v/ ) {
+      $verbose = 1;
+      last switch;
+    }
+    if ( $ARGV[0] eq '--debug' || $ARGV[0] =~ /^-d/ ) {
+      $debug = 1;
+      last switch;
+    }
+    print "rrdlastds: unknown option \"$ARGV[0]\"\n";
+    exit 1;
+  }
+  shift @ARGV;
+}
+
+if ( $#ARGV != 0 ) {
+  print <<_EOT_;
+usage: rrdlastds [-v] [-a] [-c num] [-l label] [-s stamp] some.rrd
+  -v        print the start and end times (also --verbose)
+  -a        autoscale DS values (also --autoscale)
+  -c num    convert DS values by "num" (also --conversion)
+  -l label  label DS values with "label" (also --label)
+  -s time   report about DS values at the time "time" (also --start)
+
+  The -s option supports the traditional "seconds since the Unix epoch"
+  and the AT-STYLE time specification (see man rrdfetch)
+_EOT_
+  exit 1;
+}
+
+if ( ! -f "$ARGV[0]" ) {
+  print "rrdlastds: can't find \"$ARGV[0]\"\n";
+  exit 1;
+} 
+
+#----------------------------------------
+
+if ( $start ) {
+  @fetch = ("$ARGV[0]", "-s", "$start", "-e", "$end", "AVERAGE");
+} else {
+  @fetch = ("$ARGV[0]", "-s", "-1sec", "AVERAGE");
+}
+if ( $debug ) {
+  print "rrdfetch ", join(' ',@fetch), "\n";
+}
+
+($start,$step,$names,$data) = RRDs::fetch @fetch;
+
+if ( $error = RRDs::error ) {
+  print "rrdlastds: rrdtool fetch failed: \"$error\"\n";
+  exit 1;
+}
+
+#----------------------------------------
+
+if ( $debug ) {
+  $d_start = $start;
+  print "Start:       ", scalar localtime($d_start), " ($d_start)\n";
+  print "Step size:   $step seconds\n";
+  print "DS names:    ", join (", ", @$names)."\n";
+  print "Data points: ", $#$data + 1, "\n";
+  print "Data:\n";
+  foreach $line (@$data) {
+    print "  ", scalar localtime($d_start), " ($d_start) ";
+    $d_start += $step;
+    foreach $val (@$line) {
+      printf "%12.1f ", $val;
+    }
+    print "\n";
+  }
+  print "\n";
+}
+   
+#----------------------------------------
+
+if ( $verbose ) {
+  print scalar localtime($start), ' through ', 
+    scalar localtime($start+$step), "\naverage";
+} else {
+  print scalar localtime($start);
+}
+
+$line = $$data[0];
+for $i (0 .. $#$names) {
+  if ( $conversion ) {
+    $$line[$i] = $$line[$i] * $conversion;
+  }
+  if ( $scale ) {
+    ($val, $units) = autoscale($$line[$i]);
+  } else {
+    $val = $$line[$i];
+  }
+  printf "  %.2f$units$label %s", $val, $$names[$i];
+}
+print "\n";
+
+exit 0;
+
+#==================================================================
+
+sub autoscale {
+  local($value) = @_;
+  local($floor, $mag, $index, $symbol, $new_value);
+
+  if ( $value =~ /^\s*[0]+\s*$/ || 
+       $value =~ /^\s*[0]+.[0]+\s*$/ || 
+       $value =~ /^\s*NaN\s*$/ ) {
+    return $value, ' ';
+  }
+
+  $floor = &floor($value);
+  $mag = int($floor/3);
+  $index = $mag * 3;
+  $symbol = $scale_symbols{$index};
+  $new_value = $value / (10 ** $index);
+  return $new_value, " $symbol";
+}
+
+#------------------------------------------------------------------
+
+sub floor {
+  local($value) = @_;
+  local($i) = 0;
+
+  if ( $value > 1.0 ) {
+    # scale downward...
+    while ( $value > 10.0 ) {
+      $i++;
+      $value /= 10.0;
+    }
+  } else {
+    while ( $value < 10.0 ) {
+      $i--;
+      $value *= 10.0;
+    }
+  }
+  return $i;
+}
+
diff --git a/contrib/rrdproc/README b/contrib/rrdproc/README
new file mode 100644 (file)
index 0000000..a556f7e
--- /dev/null
@@ -0,0 +1,30 @@
+* rrdproc.c Copyright 1999 Damien Miller <djm@mindrot.org>
+**
+**
+** This program is a very lightweight collecter for rrdtool. It reads
+** and parses /proc/net/dev and sends a rrdtool remote control update
+** command to stdout.
+**
+** rrdproc will sleep a user-defined amount of time between reads from
+** /proc/net/dev. This time should match the sample rate you created your
+** RRD files with.
+**
+** Example:
+**
+** rrdproc --interface=ppp0 \
+**         --wait 30 \
+**         --filename=/home/djm/traffic-ppp0.rrd | rrdtool -
+**
+** This will update the RRD file /home/djm/traffic-eth0.rrd with bytes
+** received and sent on eth0 every 30 seconds.
+**
+** rrdproc --interface=eth0 \
+**         --wait 300 \
+**         --frame \
+**         --filename=/home/djm/traffic-eth0.rrd | rrdtool -
+**
+** Will update /home/djm/traffic-eth0.rrd with counts of framing errors and
+** collisions every 5 minutes
+**
+** rrdproc is licensed under the GNU GPL version 2. Please refer to
+** http://www.fsf.org/copyleft/gpl.html for details.
diff --git a/contrib/rrdproc/rrdproc.c b/contrib/rrdproc/rrdproc.c
new file mode 100644 (file)
index 0000000..ab35f40
--- /dev/null
@@ -0,0 +1,249 @@
+/*
+** rrdproc.c Copyright 1999 Damien Miller <djm@mindrot.org>
+**
+**
+** This program is a very lightweight collecter for rrdtool. It reads
+** and parses /proc/net/dev and sends a rrdtool remote control update
+** command to stdout.
+**
+** rrdproc will sleep a user-defined amount of time between reads from
+** /proc/net/dev. This time should match the sample rate you created your
+** RRD files with.
+**
+** Example:
+**
+** rrdproc --interface=ppp0 \
+**         --wait 30 \
+**         --filename=/home/djm/traffic-ppp0.rrd | rrdtool -
+**
+** This will update the RRD file /home/djm/traffic-eth0.rrd with bytes
+** received and sent on eth0 every 30 seconds.
+**
+** rrdproc --interface=eth0 \
+**         --wait 300 \
+**         --frame \
+**         --filename=/home/djm/traffic-eth0.rrd | rrdtool -
+**
+** Will update /home/djm/traffic-eth0.rrd with counts of framing errors and
+** collisions every 5 minutes
+**
+** rrdproc is licensed under the GNU GPL version 2. Please refer to
+** http://www.fsf.org/copyleft/gpl.html for details.
+**
+*/
+
+#include <stdlib.h>
+#include <stdio.h>
+#include <string.h>
+#include <syslog.h>
+#include <getopt.h>
+#include <unistd.h>
+#include <time.h>
+
+#define PROC_DEV                                       "/proc/net/dev"
+
+#define DEFAULT_SLEEP_TIME             3
+#define DEFAULT_INTERFACE              "eth0"
+#define DEFAULT_FILENAME               "traffic"
+
+#define COLUMN_BYTES                           0
+#define COLUMN_PACKETS                 1
+#define COLUMN_ERRORS                  2
+#define COLUMN_DROPPED                 3
+#define COLUMN_FIFO                            4
+#define COLUMN_FRAME                           5
+
+void get_stats(FILE *devstats, const char *interface, int start_column);
+const char *skip_columns(const char *p, int num_columns);
+void help(void);
+void version(void);
+
+static struct option long_options[] =
+{
+       { "wait", 1, NULL, 'w'},
+       { "interface", 1, NULL, 'i'},
+       { "filename", 1, NULL, 'f'},
+       { "help", 0, NULL, 'h'},
+       { "version", 0, NULL, 'v'},
+       { "bytes", 0, NULL, 'B'},
+       { "packets", 0, NULL, 'P'},
+       { "errors", 0, NULL, 'E'},
+       { "dropped", 0, NULL, 'D'},
+       { "fifo", 0, NULL, 'F'},
+       { "frame", 0, NULL, 'R'},
+};
+
+int main(int argc, char **argv)
+{
+       int sleep_time = DEFAULT_SLEEP_TIME;
+       char *interface = DEFAULT_INTERFACE;
+       char *filename = DEFAULT_FILENAME;
+       int start_column = COLUMN_BYTES;
+       int c;
+       FILE *devstats;
+       
+       extern char *optarg;
+       
+       openlog("if-update", LOG_PERROR|LOG_PID, LOG_DAEMON);
+       
+       while(1)
+       {
+               c = getopt_long(argc, argv, "w:i:f:hvBPEDFRCM", long_options, NULL);
+               if (c == -1)
+                       break;
+               
+               switch(c)
+               {
+                       case 'w':
+                               sleep_time = atoi(optarg);
+                               break;
+                       case 'i':
+                               interface = strdup(optarg);
+                               break;
+                       case 'f':
+                               filename = strdup(optarg);
+                               break;
+                       case 'h':
+                               help();
+                               exit(0);
+                       case 'v':
+                               version();
+                               exit(0);
+                       case 'B':
+                               start_column = COLUMN_BYTES;
+                               break;
+                       case 'P':
+                               start_column = COLUMN_PACKETS;
+                               break;
+                       case 'E':
+                               start_column = COLUMN_ERRORS;
+                               break;
+                       case 'D':
+                               start_column = COLUMN_DROPPED;
+                               break;
+                       case 'F':
+                               start_column = COLUMN_FIFO;
+                               break;
+                       case 'R':
+                               start_column = COLUMN_FRAME;
+                               break;
+                       default:
+                               fprintf(stderr, "Invalid commandline options.\n");
+                               help();
+                               exit(1);
+               }               
+       }
+       
+       setlinebuf(stdout);
+       
+       while(1)
+       {
+               devstats = fopen(PROC_DEV, "r");
+               if (devstats == NULL)
+               {
+                       syslog(LOG_ERR, "Couldn't open proc file \"%s\" for reading: %m", PROC_DEV);
+                       exit(1);
+               }
+               printf("update %s N:", filename);
+               get_stats(devstats, interface, start_column);
+               sleep(sleep_time);
+               fclose(devstats);
+       }
+       exit(0);
+}
+
+void get_stats(FILE *devstats, const char *interface, int start_column)
+{
+       char buffer[2048];
+       const char *p;
+       int if_len;
+       unsigned long long in;
+       unsigned long long out;
+       
+       if_len = strlen(interface);
+       
+       while(fgets(buffer, sizeof(buffer), devstats) != NULL)
+       {
+               p = buffer;
+               
+               /* skip space at start of line */
+               while(*p && (*p == ' '))
+                       p++;
+
+               if (strncmp(p, interface, if_len) == 0)
+               {
+                       /* Skip to the statistic we wnt to report */
+                       p = skip_columns(p + if_len + 1, start_column);
+
+                       in = strtoull(p, NULL, 10);
+
+                       /* Skip from received column to transmit column */
+                       p = skip_columns(p, 8);
+
+                       out = strtoull(p, NULL, 10);
+
+                       printf("%Lu:%Lu\n", in, out);
+
+                       return;
+               }               
+       }
+
+       /* Non-fatal error if interface not found */
+       syslog(LOG_WARNING, "Couldn't find statistics for interface \"%s\"", interface);
+       printf("U:U\n");
+       return;
+}
+
+void help(void)
+{
+       fprintf(stderr, "\
+rrdproc - Update rrd file using statistics in /proc\n\
+\n\
+rrdproc will periodically read /proc/net/dev and update an RRD database\n\
+with the numbers that it finds there.\n\
+\n\
+Options:\n\
+    --wait, -w      [time]      Time to wait between statistics updates\n\
+    --interface, -i [name]      Name of network interface to report on\n\
+    --filename, -f  [filename]  Path of RRD file to update\n\
+    --help, -h                  Display this help\n\
+    --version, -v               Display version information\n\
+    --bytes, -B                 Report bytes in / out\n\
+    --packets, -P               Report packets in / out\n\
+    --errors, -E                Report errors in / out\n\
+    --dropped, -D               Report dropped packets in / out\n\
+    --fifo, -F                  Report fifo in / out\n\
+    --frame, -R                 Report framing errors / collisions\n\
+");
+}
+
+void version(void)
+{
+       fprintf(stderr, "rrdproc v0.0\n");
+}
+
+const char *skip_columns(const char *p, int num_columns)
+{
+       int c;
+       
+       for(c = 0; c < num_columns; c++)
+       {
+               /* Skip numbers */
+               while(*p && (*p != ' '))
+                       p++;
+
+               /* Skip space */
+               while(*p && (*p == ' '))
+                       p++;
+
+               if (!*p)
+               {
+                       /* Line finished early */
+                       printf("U:U\n");
+                       syslog(LOG_WARNING, "Couldn't parse interface statistics");
+                       return;
+               }
+       }
+       
+       return(p);
+}
diff --git a/contrib/rrdview/README b/contrib/rrdview/README
new file mode 100644 (file)
index 0000000..030780a
--- /dev/null
@@ -0,0 +1,63 @@
+User Contributed Perl Documentation                RRDVIEW.CGI(1)
+
+
+
+NNNNAAAAMMMMEEEE
+     rrdview.cgi - Perl CGI software to graph rrd image online
+
+SSSSYYYYNNNNOOOOPPPPSSSSIIIISSSS
+     Put it on any cgi-bin/ directory, use a browser, click and
+     fill in an rrd file in the first textfield (replacing
+     foo.rrd). The file belongs to the web server.
+
+DDDDEEEESSSSCCCCRRRRIIIIPPPPTTTTIIIIOOOONNNN
+     Just another rrd viewer.
+
+TTTTOOOODDDDOOOO
+      . An upload textfield to allow graphing client rrd files.
+      . Deal with LAST, MAX, MIN RRA.
+
+
+AAAAUUUUTTTTHHHHOOOORRRR
+     Gilles LAMIRAL lamiral@mail.dotcom.fr
+
+SSSSEEEEEEEE AAAALLLLSSSSOOOO
+     _r_r_d_t_o_o_l(1), _p_e_r_l(1).
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+2000-09-23          Last change: perl v5.6.0                    1
+
+
+
diff --git a/contrib/rrdview/rrdview.cgi b/contrib/rrdview/rrdview.cgi
new file mode 100644 (file)
index 0000000..ab05f46
--- /dev/null
@@ -0,0 +1,412 @@
+#!/usr/bin/perl -T -w
+
+use CGI::Carp qw(fatalsToBrowser carpout);
+use Time::Local;
+use File::Basename;
+use FileHandle;
+use POSIX;
+use RRDs;
+
+BEGIN {
+       carpout(\*STDOUT);
+};
+
+use strict;
+
+use vars qw($VERSION);
+my $rcs = ' $Id$ ' ;
+$rcs =~ m/,v (\d+\.\d+)/;
+$VERSION = ($1) ? $1 : "UNKNOWN";
+
+my $mod_perl = (exists $ENV{MOD_PERL}) ? 1 : 0;
+my $self  = basename($0);
+my $imgErr; # global is good in that huge case.
+
+doit();
+
+sub doit {
+       
+       my $debug = 0;
+       my $cgi   = myCGI->new();
+       my $q     = $cgi->r();
+       my $now   = time();
+       
+       my $strftime = '%A %d %B %Y %H:%M:%S %Z';
+       
+       my ($minD,$hourD,$mdayD,$monD,$yearD) = (myLocaltime($now));
+       $cgi->paramDefault(
+                          'minE'  => $minD,
+                          'hourE' => $hourD,
+                          'mdayE' => $mdayD,
+                          'monE'  => $monD,
+                          'yearE' => $yearD,
+                         );
+       
+       ($minD,$hourD,$mdayD,$monD,$yearD) = (myLocaltime($now - 86400));
+       
+       $cgi->paramDefault(
+                          'minS'  => $minD,
+                          'hourS' => $hourD,
+                          'mdayS' => $mdayD,
+                          'monS'  => $monD,
+                          'yearS' => $yearD,
+                         );
+       
+       
+       my ($minS,$hourS,$mdayS,$monS,$yearS) = 
+         (
+          $q->param(-Name => 'minS'),
+          $q->param('hourS'),
+          $q->param('mdayS'),
+          $q->param('monS'),
+          $q->param('yearS'),
+         );
+       
+       my ($minE,$hourE,$mdayE,$monE,$yearE) = 
+         (
+          $q->param('minE'),
+          $q->param('hourE'),
+          $q->param('mdayE'),
+          $q->param('monE'),
+          $q->param('yearE'),
+         );
+       
+       my $start = myTimelocal($minS,$hourS,$mdayS,$monS,$yearS);
+       my $end   = myTimelocal($minE,$hourE,$mdayE,$monE,$yearE);
+       
+       my $startString = strftime($strftime, localtime($start));
+       my $endString   = strftime($strftime, localtime($end));
+       
+       $q->param('start', $start);
+       $q->param('end', $end);
+       
+       $cgi->paramDefault(
+                          'hight'   => 150,
+                          'width'   => 600,
+                          'rrdfile' => 'foo.rrd',
+                         );
+       
+       my $width = $q->param(-Name=>'width');
+       my $hight = $q->param(-Name=>'hight');
+       my $owner = $q->param(-Name=>'owner') || "No Owner";
+       my $title = $q->param(-Name=>'title') || "No Title";
+       
+       my $rrdfile = $q->param("rrdfile");
+       
+       $debug and $cgi->saveparam("/tmp/rrdmon.out");
+       my $error = "";
+       my $rrdinfo;
+       my @dsname;
+       unless (-f $rrdfile) {
+               $error = "<big>File '$rrdfile' does not exist!</big><BR>\n";
+       }else{
+               $rrdinfo = RRDs::info $rrdfile;
+               if (my $ERR=RRDs::error) {
+                       $error = "<big>" . $ERR . "</big><BR>\n";
+                       @dsname = ('RRD ERROR');
+               }else{
+                       foreach my $key (keys %$rrdinfo) {
+                               if ($key =~ m/ds\[(\w+)\]\.value/) {
+                                       push(@dsname, $1);
+                               }
+                       }
+               }
+       };
+       
+       my $dsname  = $q->param("dsname") || $dsname[0] || "unknown";
+       
+       if (defined $q->param(-Name=>'child')) {
+               # cgi child
+               imagepage($q, 
+                         $cgi, 
+                         $debug, 
+                         $rrdfile, 
+                         $dsname,
+                         $owner,
+                         $hight,
+                         $width,
+                         $start,
+                         $end,
+                         $title,
+                        );
+       }else{
+               # cgi parent
+               mainpage($q, 
+                        $cgi, 
+                        $debug, 
+                $dsname, 
+                \@dsname, 
+                $hight, 
+                $width, 
+                $error,
+                $startString,
+                $endString,
+               );
+       }
+}
+
+sub mainpage {
+       
+       my $q = shift;
+       my $cgi = shift;
+       my $debug = shift;
+       my $dsname = shift;
+       my $ldsname = shift;
+       my $hight = shift;
+       my $width =  shift;
+       my $error = shift;
+       my $startString = shift;
+       my $endString = shift;
+
+       my $queryChild = "child=yes&".$q->query_string();
+       my $cgiChild = myCGI->new($queryChild);
+       # CGI fork ! 
+       print 
+         $q->header(),
+         #$q->start_html($q->param('owner'). " " . $q->param('title') ),
+         $q->start_html(
+                        -Title=>"RRDVIEW $VERSION",
+                        -Author=>'lamiral@mail.dotcom.fr',
+                        -Meta=>{'keywords'=>'monitoring rrdtool rrdmon rrdview',
+                                'copyright'=>'Copyleft GPL'},
+                        -BGCOLOR=>'lightblue',
+                       ),
+           ($debug) ?                   "<tt>\n" : "",
+           ($debug and $mod_perl) ?     "mod_perl PID $$<BR>\n" : "",
+           ($debug and not $mod_perl) ? "PID=$$<BR>\n" : "",
+           ($debug) ?                   "$cgi<BR>\n" : "",
+           ($debug) ?                   "$q<BR>\n" : "",
+           ($debug) ?                   "img=".\$imgErr."<BR>\n" : "",
+           ($debug) ?                   "</tt>\n" : "",
+           $q->startform(-Method=>'GET',
+                         #-Enctype=>'multipart/form-data',
+                        ),
+           $q->textfield(-Name=>'rrdfile', 
+                       -Default=>'Give me a file like foo.rrd',
+                       -Size=>76),
+         $q->br(),"\n",
+         $q->popup_menu(-Name=>'dsname',
+                        -Values=>[@$ldsname],
+                        -Default=>$dsname,
+                   ),
+         $q->textfield(-Name=>'hight', -Size=>length($hight)), "x",
+         $q->textfield(-Name=>'width', -Size=>length($width)), " ",
+         $q->br(),"\n",
+         $q->image_button(-Name=>'Beautiful Image!',
+                          -Src=>"$self?$queryChild",
+                         ),
+         $q->br(),"\n",
+         $error,
+         $q->tt(" From "),
+         $q->textfield(-Name=>'yearS', -Size=>4),
+         $q->textfield(-Name=>'monS',  -Size=>2),
+         $q->textfield(-Name=>'mdayS', -Size=>2),
+         " ",
+         $q->textfield(-Name=>'hourS', -Size=>2),
+         $q->textfield(-Name=>'minS',  -Size=>2),
+         " $startString",
+         $q->br(),"\n",
+         $q->tt(" To", "&nbsp;" x 2),
+         $q->textfield(-Name=>'yearE', -Size=>4),
+         $q->textfield(-Name=>'monE',  -Size=>2),
+         $q->textfield(-Name=>'mdayE', -Size=>2),
+         " ",
+         $q->textfield(-Name=>'hourE', -Size=>2),
+         $q->textfield(-Name=>'minE',  -Size=>2),
+         " $endString",
+         $q->br(),"\n",
+         $cgi->paramHidden(
+                           'title',
+                           'owner',
+                          ),
+           $q->endform(),
+           ($debug) ? $q->dump(): "",
+           $q->end_html(),
+           "\n",
+           ;
+}
+
+
+sub imagepage {
+
+       my $q = shift;
+       my $cgi = shift;
+       my $debug = shift;
+       my $rrdfile = shift;
+       my $dsname = shift;
+       my $owner  = shift;
+       my $hight = shift;
+       my $width = shift;
+       my $start = shift;
+       my $end = shift;
+       my $title = shift;
+           
+       $debug and $cgi->saveparam("/tmp/png.out");
+       
+       my $output;
+       RRDs::last($rrdfile);
+       
+       print $q->header(
+                        -Type=>'image/png',
+                        -Expires=>'now'
+                       );
+       
+       if($mod_perl) {
+                #carp("we're running under mod_perl");
+               $output = "/tmp/rrdmon.img.$$.png";
+               
+       }
+       else {
+                #we're NOT running under mod_perl
+               $output = "-";
+               
+       }
+
+       RRDs::graph($output,"--title", "$owner",
+                   "--imgformat", "PNG",
+                   "--height","$hight", "--width","$width",
+                   "--start",$start,"--end",$end,
+                   "DEF:value=$rrdfile:$dsname:AVERAGE",
+                   "AREA:value#00FF00:$title",
+                  );
+       
+       
+       if (my $ERROR = RRDs::error()) {
+               carp "ERROR: $ERROR\n";
+               my $rimgErr = loadImageErrorFromVar();
+               print $$rimgErr;
+               return();
+       }
+       if($mod_perl) {
+               my $fh = FileHandle->new($output, "r");
+               unless (defined($fh)){
+                       carp("Could not open ",$output,"$!");
+                       return undef;
+               }
+               local $/ = undef;
+               my $file = <$fh>;
+               $fh->close();
+               print $file;
+       }
+}
+
+
+sub myLocaltime {
+       my $time = shift;
+
+       my ($min,$hour,$mday,$mon,$year) 
+         = (localtime($time))[1,2,3,4,5];
+
+       $min  = sprintf("%02s", $min);
+       $hour = sprintf("%02s", $hour);
+       $mday = sprintf("% 2s", $mday);
+       $mon  = sprintf("% 2s", $mon + 1);
+       
+       return($min,$hour,$mday,$mon,$year + 1900);     
+}
+
+sub myTimelocal {
+       my ($min,$hours,$mday,$mon,$year) = @_;
+       
+       my $time = timelocal(0,$min,$hours,$mday,
+                            $mon - 1,$year - 1900);
+       return($time);
+}
+
+sub loadImageErrorFromVar {
+       unless (defined ($main::imgErr)){
+               $main::imgErr = pack "h*", '9805e474d0a0a1a0000000d09484442500000069000000b480000000100cdc1195000000407614d4140010680a138e69f5000080769444144587adde959607357d51e37fdb7291b42b469cb0e51f283c26028d4ce2484034020129430947b0d24c01a30482e4a30c47b480cc00d2d47adcc47843186a094999423818201a10a9408c0d670360a50c18016316b3605cb8c6958d2b4a7fee7df1290b63bcb45818c8fef1947ed5d9bfd937fbb769bf818246801c204819525793f2746a31d92001110e2070a618aa8300032040c2f590000dbc54000d600b06c22b44ca728f88a7c3f2cbc6168a019d9d08910000ee9f02cbf08a1a381ba164f880211ead6a43a63aad41bb5f6df73074502c8d6db0b3a7866400af76c7844999afc9968ea68ecb6810a74481e1b65022af90888e8debf8e2e7abb57fd7a64d8e88e93776d2bd110b830bdb3ae4602edbb24c18fa08ad9e3d662024c322b4d5852152784fa4b901595259e1dca25483ac40f8f7addbb10fb9473d4aaaea475e5d31119444515711654de759be1c5bebe321380e54f3a2f37e92222eb7c37e9d73870de8f320005cad67eadf871f15c8c1a781dadabd237da20006ba4f1bc2b1006ad520e68e08fcea34f8a979b2db63a76690444467b219e378821ebd44ab61a262ad95c12eb7651752e972232aae9a44f0c68c91b46addeb7eaf2a8ede6f49e776e4f6665f0fc7443f015f78e25e70742a6ab4c7261bc7be7873ec0c96dbe7efaa56d4a6f659d4cfada9cefcb74b72cc8d971b5c5c93a7d3a95f72e6d771888826757decebfc0a26caf0ef69014efa9ff5f1379bd527f1c16c246f1d052faee9d3b7e428888b39fa3d5a728dfade7e8fbd4d50662227f9b7bf02cb9fe9c6b566e4c5aa404150418981736182e53af64c7ed25e008fadce2823ec93c1543af88be7a3ad904d8eccf24cfaf6d00fa6ba9a2f6d77faea2fc179f423753d100007524117008d191e404e2a5304d4c9ef3806fdbdcf47979f5d46d9a981768905ea015be025111115bbdf12644443ba068759bff5f5e3a44cbde7e3724c1617941c632750008f1b73414b7397445f9f57ed5f4eacd959a00082199f1ff7e9d65ce1f7b7ec6f73436ecd63d530efae75d5052a7abefbfc8b3a6abc8f9993a6ab2d4f712a6ab4596e7ab42f5ce8a73f7179e1850db55d24a45709eab2f2f5233f8d4e4397e7fa185a852847d7cbff75352f2e4d205fe31462d930b00d5f80a433af8e03d403fb235b76bfc465a0acbda91b70bfeccf02c5c62d177abddeee358f1fb224c34282c353c78d0bcf39e59957fe15758628fe442c34b990f3e75ebae79622968311193555b3dadcebef5cd5397073dacb13b7988486c39797ea988804c88f9eda7648f3d86f385c2827da5d07adb9f2dd397bf8f7cc653dcec292e6d786479d37e40f7b5d989df8ab00cb7fe1eaec1dd4953b1c2d99f57dd38a405d31d69c74cbfb9f2fc5df53000bc0e71d87d0c18ddab23b99d8f1208973fe47ac4c31189cb7dd44e14abc934678f4055aafe97e9eb41b56c108c3ee76c1cf9f728303febb9b3fb3282febf3e2f8fe9987bc3892cb8c3e18247e246444cda36811b2da0b111d923cb11311a8931c7e4377db5c14444a0cb5bcad8560111949d74412238ca019257faae24a0a04037287bdb93a686e5ed29a322e4ed5afa88134444c6deec55de6f57363e98a95d3d34802afcf0ed74741c4df375d5ef06c76991d0aa30e1be7a81db7b607825253533fb000b97e5861ade67228be24583004bd68a60fa39d32a7565af6e4dfebd7d0d954a5f5aef2edbe89bd5fc71a72aaa52a793d4e7af464fa6396983170aec910d57fe5d1d779a98300bee0d09ee4e2e8b975097a3677b97b8f995c33e7fdc77dd62a836663e0c97e77d17b4b7f72c5fbceee117b04a822bce4ea3dcde78c26656e9cb0de131906926f6d63b89babea1cad4dae454693ff5f70557bb16133429273adc8110657cbfbaa15538c46a4fcc173831d46885ead4de7835aad1c0b8d2d957d0b45959ce85a569426f5e696bfe34d625bdbd1cab6acb83a729bf87db424fb2a22620361eab1fe4a572ccccafcf8a3afb30a21744e8b5251c407c7a5bdfc505036c2c2b6cf86d90f0fef35b5a054260292d2f3e28663758488efe030c800619065c4e7ae99dc1f2011194326571aff934e53bbe3aa681a86151aa41798a264407438d44db14b267ed8c9ca8a4516073fe0b53b38b06c4b8903f091182c17bcf6176953ef259cb697c880c898ed9b86aa4efd26bd635341f2b147aa1d22bcf7f5dad2d9394d2b7fda3fc81f4bf5f391b4448693478cc536552f69dc2db71b8da52ed0201c175f0f1c37dc42231febfdd8fe54814f7f986784c43ad5a0c8decfaef6fcec25dee4dd8f4be8188816a77cf175d1f54b77b5acb6f4a6c6c60f022243deadc7e4c2c9f9779edd79a275e0164444695bbdf9d5d94f9ff5f085435cfb82ec0d03625c801692fc882cc62affba5ee8772d78de3938abc57eea11a5de0f2fecb4809ffd52ad1168bf7fafaba6e6ef1b1a07b6d9c08be0c833eb2e97d9153375b37f8e2f494a7eff1d0274ae1ab57db172e9803fe6ccfd406a159bd1a4070cb1f3aa3499df8576ed21b0eb3aeb86c55335debe36ff3785756f3a431984539616c69f11797e48905db4ff2505eb96642a81992f00ab9a028136168f713219a2b26df50a30d8c90aae43626c573d36c866a61cd834d2e95e493b7d71d699caee630480dd50802254143e9abe75aaf6a49034746e42a7e8e8bbd1a238fb9ceeabe012da3b6a496ce3efeef1a1b437442a6f3171539fa52222278bcdf4db09add60419bd4614ce60657c9fa77ea05bec49117eaf277a597afc9939b211113a0438a9bacdaec0f3734acab9ef6e6cda52f0b1bef39a814b2e78a1222218129e9dcdee3cc9ea47c4ec80619bf4443f9374a72be4d20328ba5e8db3519bfa71b44ea345e9bb023cfefa7179c1d16f65940c9b27e58f0f31b82252fca9d9b2973eac53d765ccd696f55eb94171ec1c27d6d46e019248bbc1d50f4eb14d55fd9c68c8f75708e1fc01ee1a6f570ea646006d00ca10857fa1caff107d7f7057eba98065000000009454e444ea240628';
+       }
+       return(\$main::imgErr);
+}
+
+
+package myCGI;
+
+use CGI;
+
+sub new {
+       my $proto = shift;
+       my $class = ref($proto) || $proto;
+       my $self  = {};
+       $self->{'CGI'} = CGI->new(shift);
+       bless ($self, $class);
+       return $self;
+}
+
+sub r {
+       my $self = shift;
+       return($self->{'CGI'});
+}
+
+sub DESTROY {
+       my $self = shift;
+
+}
+
+sub paramDefault {
+       my $self    = shift;
+       my %param   = @_;
+       
+       foreach my $param (keys(%param)) {
+               unless (defined($self->r->param(-Name=>$param))) {
+                       $self->r->param(-Name=>$param, -Value=>$param{$param});
+               }
+       }
+       return values(%param);
+}
+
+sub paramHidden {
+       my $self    = shift;
+       my @hidden = @_;
+
+       my @result;
+       foreach my $param (@hidden) {
+               push(@result, $self->r->hidden(-Name=>$param));
+       }
+       return(@result);
+}
+
+sub saveparam {
+       my $self = shift;
+       my $savefile = shift;
+       my $fh = FileHandle->new($savefile, "w");
+       defined($fh) || confess("Error opening $savefile (w): $!");
+       $self->r->save($fh);
+       $fh->close();
+       chmod 0777, $savefile;
+}
+
+
+=head1 NAME
+
+rrdview.cgi - Perl CGI software to graph rrd image online
+
+=head1 SYNOPSIS
+
+Put it on any cgi-bin/ directory, use a browser, click and fill in an
+rrd file in the first textfield (replacing foo.rrd). The file belongs
+to the web server. 
+
+=head1 DESCRIPTION
+
+Just another rrd viewer. 
+
+=head1 TODO
+
+ . An upload textfield to allow graphing client rrd files.
+ . Deal with LAST, MAX, MIN RRA.
+
+=head1 AUTHOR
+
+Gilles LAMIRAL 
+lamiral@mail.dotcom.fr
+
+=head1 SEE ALSO
+
+rrdtool(1), perl(1).
+
+=cut
+
+
+
diff --git a/contrib/snmpstats/README b/contrib/snmpstats/README
new file mode 100644 (file)
index 0000000..509acea
--- /dev/null
@@ -0,0 +1,43 @@
+SNMPstats.pl is a moderately simple and quick perl SNMP poller for simple
+interface traffic and other counters. It's written with flexible and easy
+hacking in mind, and is commented appropriately.
+
+It requires Net::SNMP version 2, available from CPAN.
+
+For the sake of simplicity, device names, IPs, and SNMP read strings are
+hard coded, but this can be easily substituted with something more
+dynamic. Structure for the devices hash is:
+
+$devices{<Canonical device name>}{'ip_address'} = <target ip address>
+                                {'snmp_read'}  = <SNMP read community>
+
+SNMP objects are stored in %oids. SNMP objects polled during device sweeps
+are stored in @poll_int, using named references to the object names used
+as key variables in %oids.
+
+Interface stats are only collected for interfaces that have an
+ifAdminStatus of 1. This cuts down on SNMP load quite a bit, given devices
+are properly managed. Your mileage will vary based on device policies.
+
+RRDs are only created for interfaces with ifAdminStatus of 1. This gives
+you some amount of scale control. Interfaces are checked for an existing
+RRD on each collection pass, and RRDs created as needed. They are NOT
+removed if you admin down an interface, so stale RRD cleanup is your
+problem.
+
+One caveat to note is that RRDs are created with upper limits based on
+ifSpeed. For autosensing 10/100 switches, this is a problem. In an effort
+to keep this utility simple, I formally declare it to be 'your
+problem'.
+
+This utility runs as a recurring loop, so it's meant to be run in the
+background like a daemon. You can strip the while/sleep sets and stuff it
+in cron, if you're so inclined. YMMV. 
+
+The script itself is heavily commented, explaining what I do as I go. Be a
+good user, read the code before you run it. It's simple and
+straightforward, and it's a good idea to understand how it works,
+especially if you're a novice user.
+
+Bill Nash
+billn@billn.net / billn@gblx.net
diff --git a/contrib/snmpstats/SNMPstats.pl b/contrib/snmpstats/SNMPstats.pl
new file mode 100755 (executable)
index 0000000..9ebf948
--- /dev/null
@@ -0,0 +1,363 @@
+#!/usr/bin/perl -w
+
+# Q: Who wrote this?
+# Bill Nash - billn@billn.net / billn@gblx.net
+#
+# Q: Why?
+# SNMP retrieval and storage of interface utilization, ala MRTG.
+#
+# Q: Is this a supported utility?
+# Barely. That means if there's a serious problem with it, you can email me. I'll take feature requests
+# provided they're presented in an intelligent manner. I will NOT write scripts for you. There's a plethora
+# of information available to you, stop being lazy and do it yourself. Mostly, I wrote this for myself. I
+# released it to the community at large because it's useful. Your mileage may vary. This code carries no 
+# warranty and I'm not responsible if you do something stupid with it.
+#
+# Q: Why does the author sound like a grumpy curmudgeon?
+# Because I'm releasing a utility to the public, and I detest people. I read the MRTG lists. I know what you 
+# people are and are not capable of. I could jump up on my soapbox and rant about the general laziness of people,
+# but no one will care. The user base at large is full of lazy bastards who just want someone else to create something
+# that does exactly what they want, with as little effort required on their part.
+#
+# Q: Is it safe to ask questions about this utility?
+# I will be more than happy to entertain discussions about this utility, provided:
+#      It's a discussion of perl mechanics, and the person asking the question knows something about Perl.
+#      It's a discussion of SNMP mechanics, and the person asking the question isn't asking where to find Mibs/objects.
+#      You're a Playboy Bunny and you'd like to meet me for dinner.
+#
+# Q: Your code sucks, billn, why does this do [such and such], and why didn't you do condense [this and this]?
+# This is intended to be a simple utility. No fancy obsfucation, no serious attention to efficiency. The only real creative 
+# parts are using ifDescr/ifName as an interface basis (which offsets the nasty ifIndex shift problem by using ifIndex has a 
+# value of the key, ifDescr/ifName, instead of vice versa. The ifIndex can change all it wants. Don't go saying 'Well, what if 
+# interface name changes?', because I'll just say "Then it's a new interface. Cope."
+# Also, by NOT obfuscating functions and keeping things simple, I'd hope people looking at this script that aren't fully versed
+# in the intricacies and foibles of SNMP, PERL and RRD will have an easier time grasping the concepts, and maybe learn a bit from 
+# this. Much of the code contained in here is interchangable, data sources can be substituted left and right, and I fully expect
+# someone to hack this into a shining pearl of relative usefulness on a regular basis. It's not the end all, be all of SNMP pollers,
+# but I expect it'll find widespread use.
+
+$local_dir = "/usr/local/rrdtool-1.0.28";      # Where this script lives
+$rrd_store = "$local_dir/rrd";         # Where to keep our rrd datastores
+
+$debug = 0;
+
+# This is Net::SNMP-2.00. It's not included with this script. Try CPAN.
+use Net::SNMP;
+
+# RRD Perl module. If you don't have it, why are you here?
+use RRDs;
+
+# This piece can be ripped out and subbed for any number of data storage methods. This is a simple method
+# that works for those handling only a few devices. IP addresses are important because I don't use hostname
+# matches for the SNMP calls. This eliminates DNS dependancies, but does require you to maintain your code or
+# host registries.
+
+$devices{"Hades"}{'ip_address'} = "10.0.0.254"; # my switch
+$devices{"Hades"}{'snmp_read'} = "public";
+$devices{"Bifrost"}{'ip_address'} = "10.0.0.253"; # my router
+$devices{"Bifrost"}{'snmp_read'} = "public";
+
+# Standard SNMP mib2 jazz. Feel free to edit. YMMV.
+
+# Variables from the %oids hash we'll be referencing later. It's easier to call them by a name.
+# What, you think I'm gonna memorize SNMP oids? =P
+
+@poll_int = (
+               "ifDescr",
+               "ifOperStatus",
+               "ifAlias",
+               "ifInErrors",
+               "ifInOctets",
+               "ifOutErrors",
+               "ifOutOctets",
+               "ifSpeed"
+);
+
+%oids = (
+       sysDescr              => "1.3.6.1.2.1.1.1.0",
+       sysName               => "1.3.6.1.2.1.1.5.0",
+       sysUptime             => "1.3.6.1.2.1.1.3.0",
+       ifNumber              => "1.3.6.1.2.1.2.1.0",
+       #ifDescr               => "1.3.6.1.2.1.2.2.1.2",
+       ifType                => "1.3.6.1.2.1.2.2.1.3",
+       ifSpeed               => "1.3.6.1.2.1.2.2.1.5",
+       ifPhysAddress         => "1.3.6.1.2.1.2.2.1.6",
+       ifAdminStatus         => "1.3.6.1.2.1.2.2.1.7", 
+       ifOperStatus          => "1.3.6.1.2.1.2.2.1.8",
+       ifAlias               => "1.3.6.1.2.1.31.1.1.1.18",
+       ifInErrors            => "1.3.6.1.2.1.2.2.1.14",
+       ifInOctets            => "1.3.6.1.2.1.2.2.1.10",
+       ifInUnkProtos         => "1.3.6.1.2.1.2.2.1.15",
+       ifLastChange          => "1.3.6.1.2.1.2.2.1.19",
+       ifDescr                => "1.3.6.1.2.1.31.1.1.1.1", # was ifXName, subbed for ifDescr
+       ifOutDiscards         => "1.3.6.1.2.1.2.2.1.19",
+       ifOutErrors           => "1.3.6.1.2.1.2.2.1.20",
+       ifOutOctets           => "1.3.6.1.2.1.2.2.1.16"
+);
+
+while(1) {
+       $start = time;
+
+       foreach $device_name (keys %devices) {
+               undef(%ifAdmin);
+               # Establish an snmp session with the device
+               my($session, $error) = Net::SNMP->session(
+                                            Hostname  => $devices{$device_name}{'ip_address'},
+                                            Community => $devices{$device_name}{'snmp_read'},
+                                            Translate => 1,
+                                            VerifyIP  => 1
+               );
+
+       # This example may seem a bit long and drawn out, but it's better for a clear view of how the procedure works
+       # It's entirely possible (and more efficient) to restructure this into a tight bundle of reusable code.
+               if ($session) {
+                       print "$device_name: SNMP Session established ($device_name, $devices{$device_name}{'ip_address'})\n" if ($debug);
+
+               # First step, find all the administratively active interfaces. Typically, this should be the ONLY
+               # table that takes a walk across all interfaces. If you're doing smart and clean device management,
+               # all unused/undesignated interfaces should be admin'd down and scrubbed of configs. If you don't
+               # maintain this kind of device policy, don't cry to me because things take longer than you expect.
+
+               # For the sake of efficiency, I should note here that this set of data doesn't HAVE to be generated with an SNMP poll
+               # You can have an entirely external management system here that dictates what interfaces are tracked. You can rip this
+               # chunk out and replace it with something else entirely.
+
+               #print "Retrieving ifAdminStatus table: $oids{'ifAdminStatus'}\n" if ($debug);
+                       $response = $session->get_table($oids{'ifAdminStatus'});
+                       if($error_message = $session->error) {
+                               if($error_message eq "Requested table is empty" ||
+                                       $error_message eq "Recieved SNMP noSuchName(2) error-status at error-index 1") {}
+                               else {
+                                       print STDERR "ifAdmin table get failed ($device_name: $oids{'ifAdminStatus'}): $error_message\n"
+                               }       # end if
+                               next; # Can't get an ifAdminStatus table? No active interfaces or a borked SNMP engine. Next!
+                       } # end if
+
+                       %array = %{$response};
+                       foreach $key (keys %array) {
+
+                               $ifIndex = $key;
+                               $ifIndex =~ s/^$oids{'ifAdminStatus'}.//g;
+
+                       # Hash the ifAdminStatus data if the status is 1. We aren't going to bother with any 
+                       # interfaces that aren't set active.
+                       # For the curious, possible values here are:
+                       # @OperStatus=("null", "Up", "Down", "Looped", "null", "Dormant", "Missing");
+
+                                       $ifAdmin{$ifIndex} = $array{$key};
+                               #print "$device_name: ifIndex $ifIndex, ifAdmin $array{$key} $ifAdmin{$ifIndex}\n" if ($debug);
+                       } #end foreach
+
+                       # Cycle through all The admin'd active interfaces, by ifIndex
+                       foreach $ifIndex (keys %ifAdmin) {
+                               undef(@interface_rrd);
+                               next if ($ifAdmin{$ifIndex} != 1);
+                       # Cycle through all the objects we want to track for each interface. This 
+                       # is a highly reusable set of code, set up to perform the same task repeatedly for 
+                       # (potentially long) lists of variables.
+                               foreach $object (@poll_int) {
+                               # get the numeric oid values from the oids table
+                                       $object_id = $oids{$object};
+
+                               # go get the object.
+                                       $response = $session->get_request("$object_id.$ifIndex");
+                                       if($error_message = $session->error) {
+                                               if($error_message eq "Recieved SNMP noSuchName(2) error-status at error-index 1") {
+                                               # It's a common occurence to poll an interface for an object that it
+                                               # doesn't support, so we'll just U the object.
+                                                       $data{$device_name}{$ifIndex}{$object} = "U";
+                                               } #end if
+
+                                       # Whatever the object was, it didn't want to be 'gotten', so screw it.
+                                                       print STDERR "Object get failed ($device_name: $object_id.$ifIndex):$error_message\n" if ($debug);
+                                               next;
+                                       } #end if
+
+                                       %array = %{$response};
+
+                               # Shucks, got data, get to work. This chunk of code is pretty generic, and you'll 
+                               # recognize it from up above. I *could* use a single iteration here, but better save
+                               # in case the snmp engine did something hokey, or we used a table base variable in the get.
+                               # The multilayer hash prolly makes some of you twitch to see, but hey, if you don't like it,
+                               # why are you reading my code to begin with? It works, take a hike.
+                               # Anyway, it's an extensible memory structure that doesn't care what you're stuffing into it.
+
+                                       foreach $key (keys %array) {
+                                               $ifIndex = $key;
+                                                       $ifIndex =~ s/^$oids{$object}.//g;
+
+                                               $data{$device_name}{$ifIndex}{$object} = $array{$key};
+                                               #print "$device_name: ifIndex $ifIndex, $object = $data{$device_name}{$ifIndex}{$object}\n";
+                                       } #end foreach
+                               } #end foreach
+                       } #end foreach
+
+               # Alright, so at this point, we should have a full set of data (whatever we requested) for 
+               # each active interface.
+               # This whole next section is all about what we do with any given piece of data, so if you're doing
+               # customization beyond what I've included, here's your sandbox, here's your shovel. Go build me a Buick.
+
+               # My primary goal for this utility is low overhead interface utilization tracking for my router and switch.
+               # In combination with RRDtool's graphing abilities, poof, it's a skimpy but solid (and extensible) replacement
+               # for MRTG. Don't get me wrong, I like MRTG, but RRDtool a lot easier to do flexible things with. The fact
+               # that this whole piece is in Perl provides a working template for bigger and crazier things, like using 
+               # a real SQL db for tracking port data, or real time data feeds to Linus knows what. With these things in
+               # mind, let's start tossing some data.
+
+               #        ifSpeed               => "1.3.6.1.2.1.2.2.1.5",
+               # Since we're doing traffic graphing, it's helpful to know the size of the pipe we're tracking.
+
+               #       ifOperStatus          => "1.3.6.1.2.1.2.2.1.8",
+               # If the interface is down for some reason, it'd be good to have a way to represent that.
+
+               #       ifAlias               => "1.3.6.1.2.1.31.1.1.1.18",
+               # ifAlias is usually a human supplied interface description. 
+
+               #       ifInErrors            => "1.3.6.1.2.1.2.2.1.14",
+               #       ifInOctets            => "1.3.6.1.2.1.2.2.1.10",
+               #       ifInUnkProtos         => "1.3.6.1.2.1.2.2.1.15",
+               #       ifOutDiscards         => "1.3.6.1.2.1.2.2.1.19",
+               #       ifOutErrors           => "1.3.6.1.2.1.2.2.1.20",
+               #       ifOutOctets           => "1.3.6.1.2.1.2.2.1.16"
+               # These should be pretty obvious. No, that's not short for Uncle Protos.
+
+               #       ifDescr               => "1.3.6.1.2.1.2.2.1.2",
+               # This is usually the name for an interface. Very important variable.
+               # Since I'm testing with a cisco catalyst, I've switched ifDescr for ifName/ifXName, up top. Less pain.
+
+               # We need a place to store this stuff, so let's check out storage structures
+
+                       foreach $device_name (keys %data) {
+                               #print "Generating/feeding data for $device_name\n";
+                               foreach $ifIndex (keys %{$data{$device_name}}) {
+
+                                       $ifDescr = $data{$device_name}{$ifIndex}{'ifDescr'};
+                                       if ($ifDescr eq "") {
+                                               #print "$device_name ifIndex $ifIndex apparantly has a null ifDescr -> [$ifDescr], skipping\n";
+                                               next;
+                                       } # end if
+
+                       # If you recognize where I stole these from, you may already know me as '[tHUg]Heartless'
+                       # I prefer the Aug and the TMP, and I fear no AWP. =)
+                       # This set of regexp's is for scrubbing potentially exciting characters from interface names before 
+                       # using them as the basis for storing files. Some OS's and file systems may object to some of these 
+                       # characters, so, better safe than annoyed.
+                       # You'll note I don't provide facilities for reverting this. I just collect the stuff. Display is your problem.
+
+                                       $ifDescr =~ s/ /_/g;
+                                       $ifDescr =~ s/\=/\[EQUAL\]/g;
+                                       $ifDescr =~ s/\,/\[CMA\]/g;
+                                       $ifDescr =~ s/;/\[SMICLN\]/g;
+                                       $ifDescr =~ s/:/\[CLN\]/g;
+                                       $ifDescr =~ s/\"/\[DBLQT\]/g;
+                                       $ifDescr =~ s/\'/\[SNGLQT\]/g;
+                                       $ifDescr =~ s/\{/\[LB2\]/g;
+                                       $ifDescr =~ s/\}/\[RB2\]/g;
+                                       $ifDescr =~ s/\+/\[PLS\]/g;
+                                       $ifDescr =~ s/\-/\[DSH\]/g;
+                                       $ifDescr =~ s/\(/\[LPRN\]/g;
+                                       $ifDescr =~ s/\)/\[RPRN\]/g;
+                                       $ifDescr =~ s/\*/\[STR\]/g;
+                                       $ifDescr =~ s/\&/\[AND\]/g;
+                                       $ifDescr =~ s/\|/\[PIPE\]/g;
+                                       $ifDescr =~ s/\\/\[BSLSH\]/g;
+                                       $ifDescr =~ s/\//\[FSLSH\]/g;
+                                       $ifDescr =~ s/\?/\[QUESTN\]/g;
+                                       $ifDescr =~ s/\</\[LT\]/g;
+                                       $ifDescr =~ s/\>/\[GT\]/g;
+                                       $ifDescr =~ s/\./\[DOT\]/g;
+                                       $ifDescr =~ s/\!/\[XCLM\]/g;
+                                       $ifDescr =~ s/\@/\[AT\]/g;
+                                       $ifDescr =~ s/\#/\[PND\]/g;
+                                       $ifDescr =~ s/\$/\[DLLR\]/g;
+                                       $ifDescr =~ s/\%/\[\PRCNT\]/g;
+                                       $ifDescr =~ s/\^/\[CRT\]/g;
+               
+                                       if ( -e "$rrd_store/$device_name-$ifDescr.rrd") {
+                                       # Uh, hey, it's there. Don't worry, be happy.
+                                       }
+                                       else {  # Oh, damn, it isn't, better create it.
+                               
+                       # Knowing the speed of the interface, generally reported by SNMP in bits per second,
+                       # we can fairly accurately determine how long it could take that counter to roll over,
+                       # if it's a 32 bit counter.
+                       # So, we'll use that info in creating the interface data. You may recognize these variables
+                       # from the RRD tutorial docs, which were further derived from MRTG. I reuse them both because
+                       # I'm lazy and so people will recognize what to hack on if they've beat up MRTG before.
+
+                                               if ($speed = $data{$device_name}{$ifIndex}{'ifSpeed'}) {
+                                                       print "$device_name: Found $speed speed for $ifIndex\n";
+                                               }
+                                               else {
+                                                       $speed = "U";
+                                               }
+       
+                                               @interface_rrd = (
+                                               "DS:InBits:COUNTER:600:0:$speed",
+                                               "DS:OutBits:COUNTER:600:0:$speed",
+                                               "RRA:AVERAGE:0.5:1:600",
+                                               "RRA:AVERAGE:0.5:6:700",
+                                               "RRA:AVERAGE:0.5:24:775",
+                                               "RRA:AVERAGE:0.5:288:797",
+                                               "RRA:MAX:0.5:1:600",
+                                               "RRA:MAX:0.5:6:700",
+                                               "RRA:MAX:0.5:24:775",
+                                               "RRA:MAX:0.5:288:797"
+                                               );
+       
+                       # I feed the array to the create argument here, so it's easier to alter the rrd
+                       # creation by just changing entries in the array above. Generic and reusable.
+
+                                               if(RRDs::create ("$rrd_store/$device_name-$ifDescr.rrd",
+                                                        "--step=300", 
+                                                        @interface_rrd)) {
+                                                       print "Built RRd for $ifDescr\n";
+                                               }
+                                               else {
+                                                       $ERR=RRDs::error;
+                                                       print "RRd build for $ifDescr appears to have failed: $ERR\n";
+                                                       next;
+                                               }
+                                       }
+
+
+                       # Do some calculations.
+
+                                       $data{$device_name}{$ifIndex}{InBits} = $data{$device_name}{$ifIndex}{ifInOctets} * 8;
+                                       $data{$device_name}{$ifIndex}{OutBits} = $data{$device_name}{$ifIndex}{ifOutOctets} * 8;
+
+                       # Feed the RRD our data.
+
+                                       $rrdfeed = join ":", ("N", 
+                                               $data{$device_name}{$ifIndex}{InBits},
+#                                                      $data{$device_name}{$ifIndex}{IfInErrors},
+                                                       $data{$device_name}{$ifIndex}{OutBits},
+#                                                      $data{$device_name}{$ifIndex}{IfOutErrors},
+                                       );
+
+                                       RRDs::update ("$rrd_store/$device_name-$ifDescr.rrd",
+                                               "--template", "InBits:OutBits", 
+                                               "$rrdfeed"); 
+
+                                       if($ERR=RRDs::error) {
+                                               print STDERR "$rrd_store/$device_name-$ifDescr.rrd update failed: $ERR\n";
+                                       }
+                                       else {
+                                               #print "$rrd_store/$device_name-$ifDescr.rrd updated\n" if ($debug);
+                                       }
+                               }
+                       }       # yeah, it's sloppy, sue me.
+               }
+               else {
+               # Abort abort abort, no go no go. uNF. =)
+                       print STDERR "$device_name: SNMP Session failed: $error\n";
+               }
+       }
+
+       $end = time;
+
+       $duration = $end - $start;
+       $sleep_period = 300 - $duration;
+       if($sleep_period > 0) { sleep($sleep_period) }
+       undef(%data);
+}
diff --git a/contrib/trytime/.deps/trytime.P b/contrib/trytime/.deps/trytime.P
new file mode 100644 (file)
index 0000000..d55b82f
--- /dev/null
@@ -0,0 +1,52 @@
+trytime.o: trytime.c /usr/include/time.h \
+ /usr/include/sys/feature_tests.h /usr/include/sys/time.h \
+ /usr/include/sys/types.h /usr/include/sys/isa_defs.h \
+ /usr/include/sys/machtypes.h /usr/include/sys/int_types.h \
+ /usr/include/sys/select.h /usr/include/sys/siginfo.h \
+ /usr/include/sys/machsig.h /usr/include/stdio.h \
+ /usr/include/sys/va_list.h /usr/include/stdlib.h \
+ /usr/include/string.h ../../src/getopt.h ../../src/rrd_tool.h \
+ ../../config/config.h \
+ /usr/pack/gcc-2.95.2-to/sol26/lib/gcc-lib/sparc-sun-solaris2.6/2.95.2/include/math.h \
+ /usr/include/math.h /usr/include/floatingpoint.h \
+ /usr/include/sys/ieeefp.h /usr/include/float.h /usr/include/ieeefp.h \
+ /usr/include/errno.h /usr/include/sys/errno.h /usr/include/ctype.h \
+ /usr/include/sys/param.h /usr/include/sys/unistd.h \
+ /usr/include/unistd.h /usr/include/sys/times.h \
+ /usr/include/sys/resource.h ../../src/rrd.h ../../src/rrd_format.h \
+ ../../gd1.3/gd.h
+trytime.c :
+/usr/include/time.h :
+/usr/include/sys/feature_tests.h :
+/usr/include/sys/time.h :
+/usr/include/sys/types.h :
+/usr/include/sys/isa_defs.h :
+/usr/include/sys/machtypes.h :
+/usr/include/sys/int_types.h :
+/usr/include/sys/select.h :
+/usr/include/sys/siginfo.h :
+/usr/include/sys/machsig.h :
+/usr/include/stdio.h :
+/usr/include/sys/va_list.h :
+/usr/include/stdlib.h :
+/usr/include/string.h :
+../../src/getopt.h :
+../../src/rrd_tool.h :
+../../config/config.h :
+/usr/pack/gcc-2.95.2-to/sol26/lib/gcc-lib/sparc-sun-solaris2.6/2.95.2/include/math.h :
+/usr/include/math.h :
+/usr/include/floatingpoint.h :
+/usr/include/sys/ieeefp.h :
+/usr/include/float.h :
+/usr/include/ieeefp.h :
+/usr/include/errno.h :
+/usr/include/sys/errno.h :
+/usr/include/ctype.h :
+/usr/include/sys/param.h :
+/usr/include/sys/unistd.h :
+/usr/include/unistd.h :
+/usr/include/sys/times.h :
+/usr/include/sys/resource.h :
+../../src/rrd.h :
+../../src/rrd_format.h :
+../../gd1.3/gd.h :
diff --git a/contrib/trytime/Makefile b/contrib/trytime/Makefile
new file mode 100644 (file)
index 0000000..70e0707
--- /dev/null
@@ -0,0 +1,381 @@
+# Generated automatically from Makefile.in by configure.
+# Makefile.in generated automatically by automake 1.4 from Makefile.am
+
+# Copyright (C) 1994, 1995-8, 1999 Free Software Foundation, Inc.
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+
+SHELL = /bin/sh
+
+srcdir = .
+top_srcdir = ../..
+prefix = /usr/local/rrdtool-1.0.33
+exec_prefix = ${prefix}
+
+bindir = ${exec_prefix}/bin
+sbindir = ${exec_prefix}/sbin
+libexecdir = ${exec_prefix}/libexec
+datadir = ${prefix}/share
+sysconfdir = ${prefix}/etc
+sharedstatedir = ${prefix}/com
+localstatedir = ${prefix}/var
+libdir = ${exec_prefix}/lib
+infodir = ${prefix}/info
+mandir = ${prefix}/man
+includedir = ${prefix}/include
+oldincludedir = /usr/include
+
+DESTDIR =
+
+pkgdatadir = $(datadir)/rrdtool
+pkglibdir = $(libdir)/rrdtool
+pkgincludedir = $(includedir)/rrdtool
+
+top_builddir = ../..
+
+ACLOCAL = aclocal
+AUTOCONF = autoconf
+AUTOMAKE = automake
+AUTOHEADER = autoheader
+
+INSTALL = /usr/sepp/bin/ginstall -c
+INSTALL_PROGRAM = ${INSTALL} $(AM_INSTALL_PROGRAM_FLAGS)
+INSTALL_DATA = ${INSTALL} -m 644
+INSTALL_SCRIPT = ${INSTALL_PROGRAM}
+transform = s,x,x,
+
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_alias = sparc-sun-solaris2.6
+build_triplet = sparc-sun-solaris2.6
+host_alias = sparc-sun-solaris2.6
+host_triplet = sparc-sun-solaris2.6
+target_alias = sparc-sun-solaris2.6
+target_triplet = sparc-sun-solaris2.6
+CC = gcc
+CGI_LIB_DIR = cgilib-0.4
+COMP_PERL = perl_piped perl_shared
+CPP = gcc -E
+GD_LIB_DIR = gd1.3
+LIBTOOL = $(SHELL) $(top_builddir)/libtool
+NROFF = /usr/sepp/bin/gnroff
+PERL = /usr/sepp/bin/perl
+PERLFLAGS = 
+PERL_MAKE_OPTIONS = 
+PNG_LIB_DIR = libpng-1.0.9
+RANLIB = ranlib
+SO_EXT = so
+TCL_LD_SEARCH_FLAGS = 
+TCL_PACKAGE_PATH = 
+TCL_PREFIX = 
+TCL_SHLIB_CFLAGS = 
+TCL_SHLIB_LD = 
+TCL_SHLIB_SUFFIX = 
+TROFF = /usr/sepp/bin/groff
+VERSION = 1.0.33
+ZLIB_LIB_DIR = zlib-1.1.3
+
+INCLUDES = -I../../src -I../../gd1.3
+EXTRA_DIST = trytime.c
+contribdir = $(prefix)/contrib/trytime
+contrib_DATA = README trytime.c
+bin_PROGRAMS = trytime
+trytime_SOURCES = trytime.c
+trytime_LDADD = ../../src/librrd.la
+mkinstalldirs = $(SHELL) $(top_srcdir)/config/mkinstalldirs
+CONFIG_HEADER = ../../config/config.h
+CONFIG_CLEAN_FILES = 
+PROGRAMS =  $(bin_PROGRAMS)
+
+
+DEFS = -DHAVE_CONFIG_H -I. -I$(srcdir) -I../../config
+CPPFLAGS = 
+LDFLAGS = 
+LIBS = -lm 
+trytime_OBJECTS =  trytime.o
+trytime_DEPENDENCIES =  ../../src/librrd.la
+trytime_LDFLAGS = 
+CFLAGS = -g -O2 -Wall -pedantic -Wshadow -Wpointer-arith -Wcast-align -Wmissing-prototypes -Wmissing-declarations -Wnested-externs -Winline  -fPIC
+COMPILE = $(CC) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+LTCOMPILE = $(LIBTOOL) --mode=compile $(CC) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+CCLD = $(CC)
+LINK = $(LIBTOOL) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(LDFLAGS) -o $@
+DATA =  $(contrib_DATA)
+
+DIST_COMMON =  README Makefile.am Makefile.in
+
+
+PACKAGE = rrdtool
+
+DISTFILES = $(DIST_COMMON) $(SOURCES) $(HEADERS) $(TEXINFOS) $(EXTRA_DIST)
+
+TAR = gtar
+GZIP_ENV = --best
+DEP_FILES =  .deps/trytime.P
+SOURCES = $(trytime_SOURCES)
+OBJECTS = $(trytime_OBJECTS)
+
+all: all-redirect
+.SUFFIXES:
+.SUFFIXES: .S .c .lo .o .s
+$(srcdir)/Makefile.in: Makefile.am $(top_srcdir)/configure.in $(ACLOCAL_M4) 
+       cd $(top_srcdir) && $(AUTOMAKE) --foreign contrib/trytime/Makefile
+
+Makefile: $(srcdir)/Makefile.in  $(top_builddir)/config.status $(BUILT_SOURCES)
+       cd $(top_builddir) \
+         && CONFIG_FILES=$(subdir)/$@ CONFIG_HEADERS= $(SHELL) ./config.status
+
+
+mostlyclean-binPROGRAMS:
+
+clean-binPROGRAMS:
+       -test -z "$(bin_PROGRAMS)" || rm -f $(bin_PROGRAMS)
+
+distclean-binPROGRAMS:
+
+maintainer-clean-binPROGRAMS:
+
+install-binPROGRAMS: $(bin_PROGRAMS)
+       @$(NORMAL_INSTALL)
+       $(mkinstalldirs) $(DESTDIR)$(bindir)
+       @list='$(bin_PROGRAMS)'; for p in $$list; do \
+         if test -f $$p; then \
+           echo " $(LIBTOOL)  --mode=install $(INSTALL_PROGRAM) $$p $(DESTDIR)$(bindir)/`echo $$p|sed 's/$(EXEEXT)$$//'|sed '$(transform)'|sed 's/$$/$(EXEEXT)/'`"; \
+           $(LIBTOOL)  --mode=install $(INSTALL_PROGRAM) $$p $(DESTDIR)$(bindir)/`echo $$p|sed 's/$(EXEEXT)$$//'|sed '$(transform)'|sed 's/$$/$(EXEEXT)/'`; \
+         else :; fi; \
+       done
+
+uninstall-binPROGRAMS:
+       @$(NORMAL_UNINSTALL)
+       list='$(bin_PROGRAMS)'; for p in $$list; do \
+         rm -f $(DESTDIR)$(bindir)/`echo $$p|sed 's/$(EXEEXT)$$//'|sed '$(transform)'|sed 's/$$/$(EXEEXT)/'`; \
+       done
+
+.s.o:
+       $(COMPILE) -c $<
+
+.S.o:
+       $(COMPILE) -c $<
+
+mostlyclean-compile:
+       -rm -f *.o core *.core
+
+clean-compile:
+
+distclean-compile:
+       -rm -f *.tab.c
+
+maintainer-clean-compile:
+
+.s.lo:
+       $(LIBTOOL) --mode=compile $(COMPILE) -c $<
+
+.S.lo:
+       $(LIBTOOL) --mode=compile $(COMPILE) -c $<
+
+mostlyclean-libtool:
+       -rm -f *.lo
+
+clean-libtool:
+       -rm -rf .libs _libs
+
+distclean-libtool:
+
+maintainer-clean-libtool:
+
+trytime: $(trytime_OBJECTS) $(trytime_DEPENDENCIES)
+       @rm -f trytime
+       $(LINK) $(trytime_LDFLAGS) $(trytime_OBJECTS) $(trytime_LDADD) $(LIBS)
+
+install-contribDATA: $(contrib_DATA)
+       @$(NORMAL_INSTALL)
+       $(mkinstalldirs) $(DESTDIR)$(contribdir)
+       @list='$(contrib_DATA)'; for p in $$list; do \
+         if test -f $(srcdir)/$$p; then \
+           echo " $(INSTALL_DATA) $(srcdir)/$$p $(DESTDIR)$(contribdir)/$$p"; \
+           $(INSTALL_DATA) $(srcdir)/$$p $(DESTDIR)$(contribdir)/$$p; \
+         else if test -f $$p; then \
+           echo " $(INSTALL_DATA) $$p $(DESTDIR)$(contribdir)/$$p"; \
+           $(INSTALL_DATA) $$p $(DESTDIR)$(contribdir)/$$p; \
+         fi; fi; \
+       done
+
+uninstall-contribDATA:
+       @$(NORMAL_UNINSTALL)
+       list='$(contrib_DATA)'; for p in $$list; do \
+         rm -f $(DESTDIR)$(contribdir)/$$p; \
+       done
+
+tags: TAGS
+
+ID: $(HEADERS) $(SOURCES) $(LISP)
+       list='$(SOURCES) $(HEADERS)'; \
+       unique=`for i in $$list; do echo $$i; done | \
+         awk '    { files[$$0] = 1; } \
+              END { for (i in files) print i; }'`; \
+       here=`pwd` && cd $(srcdir) \
+         && mkid -f$$here/ID $$unique $(LISP)
+
+TAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) $(LISP)
+       tags=; \
+       here=`pwd`; \
+       list='$(SOURCES) $(HEADERS)'; \
+       unique=`for i in $$list; do echo $$i; done | \
+         awk '    { files[$$0] = 1; } \
+              END { for (i in files) print i; }'`; \
+       test -z "$(ETAGS_ARGS)$$unique$(LISP)$$tags" \
+         || (cd $(srcdir) && etags $(ETAGS_ARGS) $$tags  $$unique $(LISP) -o $$here/TAGS)
+
+mostlyclean-tags:
+
+clean-tags:
+
+distclean-tags:
+       -rm -f TAGS ID
+
+maintainer-clean-tags:
+
+distdir = $(top_builddir)/$(PACKAGE)-$(VERSION)/$(subdir)
+
+subdir = contrib/trytime
+
+distdir: $(DISTFILES)
+       here=`cd $(top_builddir) && pwd`; \
+       top_distdir=`cd $(top_distdir) && pwd`; \
+       distdir=`cd $(distdir) && pwd`; \
+       cd $(top_srcdir) \
+         && $(AUTOMAKE) --include-deps --build-dir=$$here --srcdir-name=$(top_srcdir) --output-dir=$$top_distdir --foreign contrib/trytime/Makefile
+       @for file in $(DISTFILES); do \
+         d=$(srcdir); \
+         if test -d $$d/$$file; then \
+           cp -pr $$d/$$file $(distdir)/$$file; \
+         else \
+           test -f $(distdir)/$$file \
+           || ln $$d/$$file $(distdir)/$$file 2> /dev/null \
+           || cp -p $$d/$$file $(distdir)/$$file || :; \
+         fi; \
+       done
+
+DEPS_MAGIC := $(shell mkdir .deps > /dev/null 2>&1 || :)
+
+-include $(DEP_FILES)
+
+mostlyclean-depend:
+
+clean-depend:
+
+distclean-depend:
+       -rm -rf .deps
+
+maintainer-clean-depend:
+
+%.o: %.c
+       @echo '$(COMPILE) -c $<'; \
+       $(COMPILE) -Wp,-MD,.deps/$(*F).pp -c $<
+       @-cp .deps/$(*F).pp .deps/$(*F).P; \
+       tr ' ' '\012' < .deps/$(*F).pp \
+         | sed -e 's/^\\$$//' -e '/^$$/ d' -e '/:$$/ d' -e 's/$$/ :/' \
+           >> .deps/$(*F).P; \
+       rm .deps/$(*F).pp
+
+%.lo: %.c
+       @echo '$(LTCOMPILE) -c $<'; \
+       $(LTCOMPILE) -Wp,-MD,.deps/$(*F).pp -c $<
+       @-sed -e 's/^\([^:]*\)\.o[      ]*:/\1.lo \1.o :/' \
+         < .deps/$(*F).pp > .deps/$(*F).P; \
+       tr ' ' '\012' < .deps/$(*F).pp \
+         | sed -e 's/^\\$$//' -e '/^$$/ d' -e '/:$$/ d' -e 's/$$/ :/' \
+           >> .deps/$(*F).P; \
+       rm -f .deps/$(*F).pp
+info-am:
+info: info-am
+dvi-am:
+dvi: dvi-am
+check-am: all-am
+check: check-am
+installcheck-am:
+installcheck: installcheck-am
+install-exec-am: install-binPROGRAMS
+install-exec: install-exec-am
+
+install-data-am: install-contribDATA
+install-data: install-data-am
+
+install-am: all-am
+       @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+install: install-am
+uninstall-am: uninstall-binPROGRAMS uninstall-contribDATA
+uninstall: uninstall-am
+all-am: Makefile $(PROGRAMS) $(DATA)
+all-redirect: all-am
+install-strip:
+       $(MAKE) $(AM_MAKEFLAGS) AM_INSTALL_PROGRAM_FLAGS=-s install
+installdirs:
+       $(mkinstalldirs)  $(DESTDIR)$(bindir) $(DESTDIR)$(contribdir)
+
+
+mostlyclean-generic:
+
+clean-generic:
+
+distclean-generic:
+       -rm -f Makefile $(CONFIG_CLEAN_FILES)
+       -rm -f config.cache config.log stamp-h stamp-h[0-9]*
+
+maintainer-clean-generic:
+mostlyclean-am:  mostlyclean-binPROGRAMS mostlyclean-compile \
+               mostlyclean-libtool mostlyclean-tags mostlyclean-depend \
+               mostlyclean-generic
+
+mostlyclean: mostlyclean-am
+
+clean-am:  clean-binPROGRAMS clean-compile clean-libtool clean-tags \
+               clean-depend clean-generic mostlyclean-am
+
+clean: clean-am
+
+distclean-am:  distclean-binPROGRAMS distclean-compile distclean-libtool \
+               distclean-tags distclean-depend distclean-generic \
+               clean-am
+       -rm -f libtool
+
+distclean: distclean-am
+
+maintainer-clean-am:  maintainer-clean-binPROGRAMS \
+               maintainer-clean-compile maintainer-clean-libtool \
+               maintainer-clean-tags maintainer-clean-depend \
+               maintainer-clean-generic distclean-am
+       @echo "This command is intended for maintainers to use;"
+       @echo "it deletes files that may require special tools to rebuild."
+
+maintainer-clean: maintainer-clean-am
+
+.PHONY: mostlyclean-binPROGRAMS distclean-binPROGRAMS clean-binPROGRAMS \
+maintainer-clean-binPROGRAMS uninstall-binPROGRAMS install-binPROGRAMS \
+mostlyclean-compile distclean-compile clean-compile \
+maintainer-clean-compile mostlyclean-libtool distclean-libtool \
+clean-libtool maintainer-clean-libtool uninstall-contribDATA \
+install-contribDATA tags mostlyclean-tags distclean-tags clean-tags \
+maintainer-clean-tags distdir mostlyclean-depend distclean-depend \
+clean-depend maintainer-clean-depend info-am info dvi-am dvi check \
+check-am installcheck-am installcheck install-exec-am install-exec \
+install-data-am install-data install-am install uninstall-am uninstall \
+all-redirect all-am all installdirs mostlyclean-generic \
+distclean-generic clean-generic maintainer-clean-generic clean \
+mostlyclean distclean maintainer-clean
+
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/contrib/trytime/Makefile.am b/contrib/trytime/Makefile.am
new file mode 100644 (file)
index 0000000..514a443
--- /dev/null
@@ -0,0 +1,8 @@
+## Process this file with automake to produce Makefile.in
+INCLUDES = -I../../src -I../../gd1.3
+EXTRA_DIST = trytime.c
+contribdir = $(prefix)/contrib/trytime
+contrib_DATA = README trytime.c
+bin_PROGRAMS    = trytime
+trytime_SOURCES  = trytime.c
+trytime_LDADD    = ../../src/librrd.la
diff --git a/contrib/trytime/Makefile.in b/contrib/trytime/Makefile.in
new file mode 100644 (file)
index 0000000..540a816
--- /dev/null
@@ -0,0 +1,381 @@
+# Makefile.in generated automatically by automake 1.4 from Makefile.am
+
+# Copyright (C) 1994, 1995-8, 1999 Free Software Foundation, Inc.
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+
+SHELL = @SHELL@
+
+srcdir = @srcdir@
+top_srcdir = @top_srcdir@
+VPATH = @srcdir@
+prefix = @prefix@
+exec_prefix = @exec_prefix@
+
+bindir = @bindir@
+sbindir = @sbindir@
+libexecdir = @libexecdir@
+datadir = @datadir@
+sysconfdir = @sysconfdir@
+sharedstatedir = @sharedstatedir@
+localstatedir = @localstatedir@
+libdir = @libdir@
+infodir = @infodir@
+mandir = @mandir@
+includedir = @includedir@
+oldincludedir = /usr/include
+
+DESTDIR =
+
+pkgdatadir = $(datadir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+
+top_builddir = ../..
+
+ACLOCAL = @ACLOCAL@
+AUTOCONF = @AUTOCONF@
+AUTOMAKE = @AUTOMAKE@
+AUTOHEADER = @AUTOHEADER@
+
+INSTALL = @INSTALL@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@ $(AM_INSTALL_PROGRAM_FLAGS)
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+transform = @program_transform_name@
+
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_alias = @build_alias@
+build_triplet = @build@
+host_alias = @host_alias@
+host_triplet = @host@
+target_alias = @target_alias@
+target_triplet = @target@
+CC = @CC@
+CGI_LIB_DIR = @CGI_LIB_DIR@
+COMP_PERL = @COMP_PERL@
+CPP = @CPP@
+GD_LIB_DIR = @GD_LIB_DIR@
+LIBTOOL = @LIBTOOL@
+NROFF = @NROFF@
+PERL = @PERL@
+PERLFLAGS = @PERLFLAGS@
+PERL_MAKE_OPTIONS = @PERL_MAKE_OPTIONS@
+PNG_LIB_DIR = @PNG_LIB_DIR@
+RANLIB = @RANLIB@
+SO_EXT = @SO_EXT@
+TCL_LD_SEARCH_FLAGS = @TCL_LD_SEARCH_FLAGS@
+TCL_PACKAGE_PATH = @TCL_PACKAGE_PATH@
+TCL_PREFIX = @TCL_PREFIX@
+TCL_SHLIB_CFLAGS = @TCL_SHLIB_CFLAGS@
+TCL_SHLIB_LD = @TCL_SHLIB_LD@
+TCL_SHLIB_SUFFIX = @TCL_SHLIB_SUFFIX@
+TROFF = @TROFF@
+VERSION = @VERSION@
+ZLIB_LIB_DIR = @ZLIB_LIB_DIR@
+
+INCLUDES = -I../../src -I../../gd1.3
+EXTRA_DIST = trytime.c
+contribdir = $(prefix)/contrib/trytime
+contrib_DATA = README trytime.c
+bin_PROGRAMS = trytime
+trytime_SOURCES = trytime.c
+trytime_LDADD = ../../src/librrd.la
+mkinstalldirs = $(SHELL) $(top_srcdir)/config/mkinstalldirs
+CONFIG_HEADER = ../../config/config.h
+CONFIG_CLEAN_FILES = 
+PROGRAMS =  $(bin_PROGRAMS)
+
+
+DEFS = @DEFS@ -I. -I$(srcdir) -I../../config
+CPPFLAGS = @CPPFLAGS@
+LDFLAGS = @LDFLAGS@
+LIBS = @LIBS@
+trytime_OBJECTS =  trytime.o
+trytime_DEPENDENCIES =  ../../src/librrd.la
+trytime_LDFLAGS = 
+CFLAGS = @CFLAGS@
+COMPILE = $(CC) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+LTCOMPILE = $(LIBTOOL) --mode=compile $(CC) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+CCLD = $(CC)
+LINK = $(LIBTOOL) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(LDFLAGS) -o $@
+DATA =  $(contrib_DATA)
+
+DIST_COMMON =  README Makefile.am Makefile.in
+
+
+PACKAGE = @PACKAGE@
+
+DISTFILES = $(DIST_COMMON) $(SOURCES) $(HEADERS) $(TEXINFOS) $(EXTRA_DIST)
+
+TAR = gtar
+GZIP_ENV = --best
+DEP_FILES =  .deps/trytime.P
+SOURCES = $(trytime_SOURCES)
+OBJECTS = $(trytime_OBJECTS)
+
+all: all-redirect
+.SUFFIXES:
+.SUFFIXES: .S .c .lo .o .s
+$(srcdir)/Makefile.in: Makefile.am $(top_srcdir)/configure.in $(ACLOCAL_M4) 
+       cd $(top_srcdir) && $(AUTOMAKE) --foreign contrib/trytime/Makefile
+
+Makefile: $(srcdir)/Makefile.in  $(top_builddir)/config.status $(BUILT_SOURCES)
+       cd $(top_builddir) \
+         && CONFIG_FILES=$(subdir)/$@ CONFIG_HEADERS= $(SHELL) ./config.status
+
+
+mostlyclean-binPROGRAMS:
+
+clean-binPROGRAMS:
+       -test -z "$(bin_PROGRAMS)" || rm -f $(bin_PROGRAMS)
+
+distclean-binPROGRAMS:
+
+maintainer-clean-binPROGRAMS:
+
+install-binPROGRAMS: $(bin_PROGRAMS)
+       @$(NORMAL_INSTALL)
+       $(mkinstalldirs) $(DESTDIR)$(bindir)
+       @list='$(bin_PROGRAMS)'; for p in $$list; do \
+         if test -f $$p; then \
+           echo " $(LIBTOOL)  --mode=install $(INSTALL_PROGRAM) $$p $(DESTDIR)$(bindir)/`echo $$p|sed 's/$(EXEEXT)$$//'|sed '$(transform)'|sed 's/$$/$(EXEEXT)/'`"; \
+           $(LIBTOOL)  --mode=install $(INSTALL_PROGRAM) $$p $(DESTDIR)$(bindir)/`echo $$p|sed 's/$(EXEEXT)$$//'|sed '$(transform)'|sed 's/$$/$(EXEEXT)/'`; \
+         else :; fi; \
+       done
+
+uninstall-binPROGRAMS:
+       @$(NORMAL_UNINSTALL)
+       list='$(bin_PROGRAMS)'; for p in $$list; do \
+         rm -f $(DESTDIR)$(bindir)/`echo $$p|sed 's/$(EXEEXT)$$//'|sed '$(transform)'|sed 's/$$/$(EXEEXT)/'`; \
+       done
+
+.s.o:
+       $(COMPILE) -c $<
+
+.S.o:
+       $(COMPILE) -c $<
+
+mostlyclean-compile:
+       -rm -f *.o core *.core
+
+clean-compile:
+
+distclean-compile:
+       -rm -f *.tab.c
+
+maintainer-clean-compile:
+
+.s.lo:
+       $(LIBTOOL) --mode=compile $(COMPILE) -c $<
+
+.S.lo:
+       $(LIBTOOL) --mode=compile $(COMPILE) -c $<
+
+mostlyclean-libtool:
+       -rm -f *.lo
+
+clean-libtool:
+       -rm -rf .libs _libs
+
+distclean-libtool:
+
+maintainer-clean-libtool:
+
+trytime: $(trytime_OBJECTS) $(trytime_DEPENDENCIES)
+       @rm -f trytime
+       $(LINK) $(trytime_LDFLAGS) $(trytime_OBJECTS) $(trytime_LDADD) $(LIBS)
+
+install-contribDATA: $(contrib_DATA)
+       @$(NORMAL_INSTALL)
+       $(mkinstalldirs) $(DESTDIR)$(contribdir)
+       @list='$(contrib_DATA)'; for p in $$list; do \
+         if test -f $(srcdir)/$$p; then \
+           echo " $(INSTALL_DATA) $(srcdir)/$$p $(DESTDIR)$(contribdir)/$$p"; \
+           $(INSTALL_DATA) $(srcdir)/$$p $(DESTDIR)$(contribdir)/$$p; \
+         else if test -f $$p; then \
+           echo " $(INSTALL_DATA) $$p $(DESTDIR)$(contribdir)/$$p"; \
+           $(INSTALL_DATA) $$p $(DESTDIR)$(contribdir)/$$p; \
+         fi; fi; \
+       done
+
+uninstall-contribDATA:
+       @$(NORMAL_UNINSTALL)
+       list='$(contrib_DATA)'; for p in $$list; do \
+         rm -f $(DESTDIR)$(contribdir)/$$p; \
+       done
+
+tags: TAGS
+
+ID: $(HEADERS) $(SOURCES) $(LISP)
+       list='$(SOURCES) $(HEADERS)'; \
+       unique=`for i in $$list; do echo $$i; done | \
+         awk '    { files[$$0] = 1; } \
+              END { for (i in files) print i; }'`; \
+       here=`pwd` && cd $(srcdir) \
+         && mkid -f$$here/ID $$unique $(LISP)
+
+TAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) $(LISP)
+       tags=; \
+       here=`pwd`; \
+       list='$(SOURCES) $(HEADERS)'; \
+       unique=`for i in $$list; do echo $$i; done | \
+         awk '    { files[$$0] = 1; } \
+              END { for (i in files) print i; }'`; \
+       test -z "$(ETAGS_ARGS)$$unique$(LISP)$$tags" \
+         || (cd $(srcdir) && etags $(ETAGS_ARGS) $$tags  $$unique $(LISP) -o $$here/TAGS)
+
+mostlyclean-tags:
+
+clean-tags:
+
+distclean-tags:
+       -rm -f TAGS ID
+
+maintainer-clean-tags:
+
+distdir = $(top_builddir)/$(PACKAGE)-$(VERSION)/$(subdir)
+
+subdir = contrib/trytime
+
+distdir: $(DISTFILES)
+       here=`cd $(top_builddir) && pwd`; \
+       top_distdir=`cd $(top_distdir) && pwd`; \
+       distdir=`cd $(distdir) && pwd`; \
+       cd $(top_srcdir) \
+         && $(AUTOMAKE) --include-deps --build-dir=$$here --srcdir-name=$(top_srcdir) --output-dir=$$top_distdir --foreign contrib/trytime/Makefile
+       @for file in $(DISTFILES); do \
+         d=$(srcdir); \
+         if test -d $$d/$$file; then \
+           cp -pr $$d/$$file $(distdir)/$$file; \
+         else \
+           test -f $(distdir)/$$file \
+           || ln $$d/$$file $(distdir)/$$file 2> /dev/null \
+           || cp -p $$d/$$file $(distdir)/$$file || :; \
+         fi; \
+       done
+
+DEPS_MAGIC := $(shell mkdir .deps > /dev/null 2>&1 || :)
+
+-include $(DEP_FILES)
+
+mostlyclean-depend:
+
+clean-depend:
+
+distclean-depend:
+       -rm -rf .deps
+
+maintainer-clean-depend:
+
+%.o: %.c
+       @echo '$(COMPILE) -c $<'; \
+       $(COMPILE) -Wp,-MD,.deps/$(*F).pp -c $<
+       @-cp .deps/$(*F).pp .deps/$(*F).P; \
+       tr ' ' '\012' < .deps/$(*F).pp \
+         | sed -e 's/^\\$$//' -e '/^$$/ d' -e '/:$$/ d' -e 's/$$/ :/' \
+           >> .deps/$(*F).P; \
+       rm .deps/$(*F).pp
+
+%.lo: %.c
+       @echo '$(LTCOMPILE) -c $<'; \
+       $(LTCOMPILE) -Wp,-MD,.deps/$(*F).pp -c $<
+       @-sed -e 's/^\([^:]*\)\.o[      ]*:/\1.lo \1.o :/' \
+         < .deps/$(*F).pp > .deps/$(*F).P; \
+       tr ' ' '\012' < .deps/$(*F).pp \
+         | sed -e 's/^\\$$//' -e '/^$$/ d' -e '/:$$/ d' -e 's/$$/ :/' \
+           >> .deps/$(*F).P; \
+       rm -f .deps/$(*F).pp
+info-am:
+info: info-am
+dvi-am:
+dvi: dvi-am
+check-am: all-am
+check: check-am
+installcheck-am:
+installcheck: installcheck-am
+install-exec-am: install-binPROGRAMS
+install-exec: install-exec-am
+
+install-data-am: install-contribDATA
+install-data: install-data-am
+
+install-am: all-am
+       @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+install: install-am
+uninstall-am: uninstall-binPROGRAMS uninstall-contribDATA
+uninstall: uninstall-am
+all-am: Makefile $(PROGRAMS) $(DATA)
+all-redirect: all-am
+install-strip:
+       $(MAKE) $(AM_MAKEFLAGS) AM_INSTALL_PROGRAM_FLAGS=-s install
+installdirs:
+       $(mkinstalldirs)  $(DESTDIR)$(bindir) $(DESTDIR)$(contribdir)
+
+
+mostlyclean-generic:
+
+clean-generic:
+
+distclean-generic:
+       -rm -f Makefile $(CONFIG_CLEAN_FILES)
+       -rm -f config.cache config.log stamp-h stamp-h[0-9]*
+
+maintainer-clean-generic:
+mostlyclean-am:  mostlyclean-binPROGRAMS mostlyclean-compile \
+               mostlyclean-libtool mostlyclean-tags mostlyclean-depend \
+               mostlyclean-generic
+
+mostlyclean: mostlyclean-am
+
+clean-am:  clean-binPROGRAMS clean-compile clean-libtool clean-tags \
+               clean-depend clean-generic mostlyclean-am
+
+clean: clean-am
+
+distclean-am:  distclean-binPROGRAMS distclean-compile distclean-libtool \
+               distclean-tags distclean-depend distclean-generic \
+               clean-am
+       -rm -f libtool
+
+distclean: distclean-am
+
+maintainer-clean-am:  maintainer-clean-binPROGRAMS \
+               maintainer-clean-compile maintainer-clean-libtool \
+               maintainer-clean-tags maintainer-clean-depend \
+               maintainer-clean-generic distclean-am
+       @echo "This command is intended for maintainers to use;"
+       @echo "it deletes files that may require special tools to rebuild."
+
+maintainer-clean: maintainer-clean-am
+
+.PHONY: mostlyclean-binPROGRAMS distclean-binPROGRAMS clean-binPROGRAMS \
+maintainer-clean-binPROGRAMS uninstall-binPROGRAMS install-binPROGRAMS \
+mostlyclean-compile distclean-compile clean-compile \
+maintainer-clean-compile mostlyclean-libtool distclean-libtool \
+clean-libtool maintainer-clean-libtool uninstall-contribDATA \
+install-contribDATA tags mostlyclean-tags distclean-tags clean-tags \
+maintainer-clean-tags distdir mostlyclean-depend distclean-depend \
+clean-depend maintainer-clean-depend info-am info dvi-am dvi check \
+check-am installcheck-am installcheck install-exec-am install-exec \
+install-data-am install-data install-am install uninstall-am uninstall \
+all-redirect all-am all installdirs mostlyclean-generic \
+distclean-generic clean-generic maintainer-clean-generic clean \
+mostlyclean distclean maintainer-clean
+
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/contrib/trytime/README b/contrib/trytime/README
new file mode 100644 (file)
index 0000000..544abf9
--- /dev/null
@@ -0,0 +1,85 @@
+"trytime" is a small program that allows you to play with at-style
+time specifications without actually bothering any of the rrd databases.
+It takes either single at-style specification or two of those
+(for start and end time, just like rrdtool fetch or graph do) and
+reports what it thinks of it. The diagnostic is as close as possible
+to that of rrdtool compiled for at-style time specification support.
+
+To learn what's possible with at-style time specifications, see
+the AT-STYLE TIME SPECIFICATION section in the rrdfetch documentation.
+
+The formal syntax parsed is (this is taken right from the parsetime.c):
+
+/*
+ * The BNF-like specification of the time syntax parsed is below:
+ *                                                               
+ * As usual, [ X ] means that X is optional, { X } means that X may
+ * be either omitted or specified as many times as needed,
+ * alternatives are separated by |, brackets are used for grouping.
+ * (# marks the beginning of comment that extends to the end of line)
+ *
+ * TIME-SPECIFICATION ::= TIME-REFERENCE [ OFFSET-SPEC ] |
+ *                                        OFFSET-SPEC   |
+ *                        ( START | END ) OFFSET-SPEC 
+ *
+ * TIME-REFERENCE ::= NOW | TIME-OF-DAY-SPEC [ DAY-SPEC-1 ] |
+ *                        [ TIME-OF-DAY-SPEC ] DAY-SPEC-2
+ *
+ * TIME-OF-DAY-SPEC ::= NUMBER [(':'|'.') NUMBER] [am|pm] | # HH:MM HH.MM HH[MM]
+ *                     'noon' | 'midnight' | 'teatime'
+ *
+ * DAY-SPEC-1 ::= NUMBER '/' NUMBER '/' NUMBER |  # MM/DD/[YY]YY
+ *                NUMBER '.' NUMBER '.' NUMBER |  # DD.MM.[YY]YY
+ *                NUMBER                          # DDMM[YY]YY
+ *
+ * DAY-SPEC-2 ::= MONTH-NAME NUMBER [NUMBER] |    # Month DD [YY]YY
+ *                'yesterday' | 'today' | 'tomorrow' |
+ *                DAY-OF-WEEK
+ *
+ *
+ * OFFSET-SPEC ::= '+'|'-' NUMBER TIME-UNIT { ['+'|'-'] NUMBER TIME-UNIT }
+ *
+ * TIME-UNIT ::= SECONDS | MINUTES | HOURS |
+ *               DAYS | WEEKS | MONTHS | YEARS
+ *
+ * NOW ::= 'now' | 'n'
+ *
+ * START ::= 'start' | 's'
+ * END   ::= 'end' | 'e'
+ *
+ * SECONDS ::= 'seconds' | 'second' | 'sec' | 's'
+ * MINUTES ::= 'minutes' | 'minute' | 'min' | 'm'
+ * HOURS   ::= 'hours' | 'hour' | 'hr' | 'h'
+ * DAYS    ::= 'days' | 'day' | 'd'
+ * WEEKS   ::= 'weeks' | 'week' | 'wk' | 'w'
+ * MONTHS  ::= 'months' | 'month' | 'mon' | 'm'
+ * YEARS   ::= 'years' | 'year' | 'yr' | 'y'
+ *
+ * MONTH-NAME ::= 'jan' | 'january' | 'feb' | 'february' | 'mar' | 'march' |
+ *                'apr' | 'april' | 'may' | 'jun' | 'june' | 'jul' | 'july' |
+ *                'aug' | 'august' | 'sep' | 'september' | 'oct' | 'october' |
+ *               'nov' | 'november' | 'dec' | 'december'
+ *
+ * DAY-OF-WEEK ::= 'sunday' | 'sun' | 'monday' | 'mon' | 'tuesday' | 'tue' |
+ *                 'wednesday' | 'wed' | 'thursday' | 'thu' | 'friday' | 'fri' |
+ *                 'saturday' | 'sat'
+ *
+ *
+ * As you may note, there is an ambiguity with respect to
+ * the 'm' time unit (which can mean either minutes or months).
+ * To cope with this, code tries to read users mind :) by applying
+ * certain heuristics. There are two of them:
+ *
+ * 1. If 'm' is used in context of (i.e. right after the) years,
+ *    months, weeks, or days it is assumed to mean months, while
+ *    in the context of hours, minutes, and seconds it means minutes.
+ *    (e.g., in -1y6m or +3w1m 'm' means 'months', while in
+ *    -3h20m or +5s2m 'm' means 'minutes')
+ *
+ * 2. Out of context (i.e. right after the '+' or '-' sign) the
+ *    meaning of 'm' is guessed from the number it directly follows.
+ *    Currently, if the number absolute value is below 25 it is assumed
+ *    that 'm' means months, otherwise it is treated as minutes.
+ *    (e.g., -25m == -25 minutes, while +24m == +24 months)
+ *
+ */
diff --git a/contrib/trytime/trytime.c b/contrib/trytime/trytime.c
new file mode 100644 (file)
index 0000000..8e6e260
--- /dev/null
@@ -0,0 +1,105 @@
+#include <time.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <getopt.h>
+#include <rrd_tool.h>
+
+#ifndef        WANT_AT_STYLE_TIMESPEC
+#define        WANT_AT_STYLE_TIMESPEC
+#endif
+
+#define BUF_LEN 128
+
+static char soption[BUF_LEN];
+static char eoption[BUF_LEN];
+
+int main ( int ac, char **av )
+{
+  static struct option long_options[] =
+  {
+     {"start",      required_argument, 0, 's'},
+     {"end",        required_argument, 0, 'e'},
+     {0,0,0,0}};
+  int option_index = 0;
+  int opt;
+   
+  time_t start_tmp, end_tmp, Now = time(NULL);
+  char tim_b[200];
+  
+  struct time_value start_tv, end_tv;
+  char *parsetime_error = NULL;
+  
+  /* default values */
+  parsetime("end-24h", &start_tv);
+  parsetime("now", &end_tv);
+
+  if( ac < 2 )
+    {
+    printf( "usage: %s [--start|-s start] [--end|-e end]\n"
+           "\n"
+           "In plain English, this means that to time specification try\n"
+           "a single time specification (just like in the rrdtool create)\n"
+           "you can use the first form, while to try two of them at once\n"
+           "(just like in rrdtool graph or fetch) you need the seconf form\n",
+           av[0] );
+    exit(0);
+    }
+  
+  printf( "The time now is: %s\n", ctime(&Now) );
+  
+  while(1){
+       opt = getopt_long(ac, av, "s:e:", long_options, &option_index);
+    
+       if (opt == EOF)  
+           break;
+       
+       switch(opt)
+       {
+       case 's': 
+           strncpy( soption, optarg, BUF_LEN );
+           if ((parsetime_error = parsetime(optarg, &start_tv))) {
+               fprintf( stderr, "ERROR: start time: %s\n", parsetime_error );
+               exit(1);
+           }
+           
+           break;
+       case 'e': 
+           strncpy( eoption, optarg, BUF_LEN );
+           if ((parsetime_error = parsetime(optarg, &end_tv))) {
+               fprintf( stderr, "ERROR: end time: %s\n", parsetime_error );
+               exit(1);
+           }       
+           break;
+       }
+  }
+  
+  if (proc_start_end(&start_tv,&end_tv,&start_tmp,&end_tmp) == -1){
+      printf("ERROR: %s\n",rrd_get_error());
+      rrd_clear_error();
+      exit(1);
+  }
+  
+  strftime(tim_b,100,"%c %Z",localtime(&start_tmp));
+  if( *soption )
+      printf( "Start time was specified as: '%s',\n"
+             "for me this means: %s (or %ld sec since epoch)\n\n", 
+              soption, tim_b, start_tmp );
+    else
+      printf( "Start time was not specified, default value will be used (end-24h)\n"
+             "for me this means: %s (or %ld sec since epoch)\n\n",
+             tim_b, start_tmp );
+    
+  strftime(tim_b,100,"%c %Z",localtime(&end_tmp));
+  if( *eoption )
+      printf( "End time was specified as: '%s',\n"
+             "for me this means: %s (or %ld sec since epoch)\n", 
+              eoption, tim_b, end_tmp );
+  else
+      printf( "End time was not specified, default value will be used (now)\n"
+             "for me this means: %s (or %ld sec since epoch)\n\n",
+             tim_b, end_tmp );
+  exit(0);
+}
+
+
diff --git a/website/.img/.imgdot-1x1-transp.gif b/website/.img/.imgdot-1x1-transp.gif
new file mode 100644 (file)
index 0000000..5bfd67a
Binary files /dev/null and b/website/.img/.imgdot-1x1-transp.gif differ
diff --git a/website/.pics/CAIDAlogo.120.gif b/website/.pics/CAIDAlogo.120.gif
new file mode 100644 (file)
index 0000000..a5263b4
Binary files /dev/null and b/website/.pics/CAIDAlogo.120.gif differ
diff --git a/website/.pics/CAIDAlogo.120.png b/website/.pics/CAIDAlogo.120.png
new file mode 100644 (file)
index 0000000..2302158
Binary files /dev/null and b/website/.pics/CAIDAlogo.120.png differ
diff --git a/website/.pics/CAIDAlogo.gif b/website/.pics/CAIDAlogo.gif
new file mode 100644 (file)
index 0000000..84c9051
Binary files /dev/null and b/website/.pics/CAIDAlogo.gif differ
diff --git a/website/.pics/CAIDAlogo.png b/website/.pics/CAIDAlogo.png
new file mode 100644 (file)
index 0000000..b027575
Binary files /dev/null and b/website/.pics/CAIDAlogo.png differ
diff --git a/website/.pics/CAIDAlogo.spons.png b/website/.pics/CAIDAlogo.spons.png
new file mode 100644 (file)
index 0000000..0b061ea
Binary files /dev/null and b/website/.pics/CAIDAlogo.spons.png differ
diff --git a/website/.pics/CAIDAlogo.xpm b/website/.pics/CAIDAlogo.xpm
new file mode 100644 (file)
index 0000000..c755753
--- /dev/null
@@ -0,0 +1,381 @@
+/* XPM */
+static char * CAIDAlogo_xpm[] = {
+"84 122 256 2",
+"      c None",
+".     c #020204",
+"+     c #1E961C",
+"@     c #1E4428",
+"#     c #620549",
+"$     c #212326",
+"%     c #868483",
+"&     c #644554",
+"*     c #9FC391",
+"=     c #3103A1",
+"-     c #370318",
+";     c #646462",
+">     c #87A6A7",
+",     c #32142B",
+"'     c #382526",
+")     c #8C657A",
+"!     c #393434",
+"~     c #8EE2E4",
+"{     c #1A7614",
+"]     c #AB8897",
+"^     c #854D5E",
+"/     c #66746B",
+"(     c #32025E",
+"_     c #909392",
+":     c #66545E",
+"<     c #B2A4AA",
+"[     c #434343",
+"}     c #40553E",
+"|     c #151616",
+"1     c #C7C4C4",
+"2     c #361357",
+"3     c #65243F",
+"4     c #3C2560",
+"5     c #403468",
+"6     c #D5D4D4",
+"7     c #4C0330",
+"8     c #B5B4B3",
+"9     c #4F344A",
+"0     c #4D2442",
+"a     c #79656E",
+"b     c #4E1435",
+"c     c #524446",
+"d     c #755469",
+"e     c #9C848F",
+"f     c #1B0354",
+"g     c #8C7482",
+"h     c #08B6C0",
+"i     c #D2E5DC",
+"j     c #5F354C",
+"k     c #F5F5F4",
+"l     c #767472",
+"m     c #250313",
+"n     c #320C28",
+"o     c #4C878B",
+"p     c #9A9595",
+"q     c #351D1F",
+"r     c #A07582",
+"s     c #784268",
+"t     c #645C5F",
+"u     c #4C0361",
+"v     c #8E85A2",
+"w     c #DFD5D7",
+"x     c #7D7C7C",
+"y     c #544C51",
+"z     c #8BB789",
+"A     c #D2C5C9",
+"B     c #C5B4BF",
+"C     c #4C3C47",
+"D     c #654471",
+"E     c #9E9C9C",
+"F     c #8B7C82",
+"G     c #0A2E94",
+"H     c #8D8C8B",
+"I     c #3E2541",
+"J     c #C7ADBA",
+"K     c #776C6F",
+"L     c #4D2B45",
+"M     c #4C9C9C",
+"N     c #E8E5E5",
+"O     c #2D2F2C",
+"P     c #3D3D3C",
+"Q     c #6B6C6C",
+"R     c #8A021C",
+"S     c #7E3458",
+"T     c #380338",
+"U     c #061244",
+"V     c #A5A4A3",
+"W     c #B1ADAE",
+"X     c #210D0F",
+"Y     c #380C5A",
+"Z     c #555454",
+"`     c #5D037F",
+" .    c #644C5A",
+"..    c #45444F",
+"+.    c #3E6561",
+"@.    c #251323",
+"#.    c #5F3C57",
+"$.    c #5C123E",
+"%.    c #1A2650",
+"&.    c #CCCCCC",
+"*.    c #D7DBDB",
+"=.    c #4A1362",
+"-.    c #EDECEC",
+";.    c #4F0D36",
+">.    c #9A8C93",
+",.    c #6E8786",
+"'.    c #3B1C37",
+").    c #A9ABAB",
+"!.    c #3F1434",
+"~.    c #BCBBBB",
+"{.    c #7C748A",
+"].    c #685C7B",
+"^.    c #76254E",
+"/.    c #595B5C",
+"(.    c #6A547A",
+"_.    c #AC959E",
+":.    c #775D72",
+"<.    c #8F7C9E",
+"[.    c #0D0C0D",
+"}.    c #3E344C",
+"|.    c #FEFEFC",
+"1.    c #4E7274",
+"2.    c #2A2727",
+"3.    c #8F8489",
+"4.    c #6B6566",
+"5.    c #4B1D35",
+"6.    c #564459",
+"7.    c #807476",
+"8.    c #23032F",
+"9.    c #46BE44",
+"0.    c #16A224",
+"a.    c #4AD2E4",
+"b.    c #04CCD0",
+"c.    c #298527",
+"d.    c #6AB664",
+"e.    c #12A6A8",
+"f.    c #0E6E6C",
+"g.    c #420695",
+"h.    c #1A5251",
+"i.    c #7E9A7C",
+"j.    c #1A7884",
+"k.    c #3C8484",
+"l.    c #123EC4",
+"m.    c #AEC6BC",
+"n.    c #3AB8B8",
+"o.    c #088C94",
+"p.    c #3E14B0",
+"q.    c #865D7B",
+"r.    c #7AC6B4",
+"s.    c #AEEAAC",
+"t.    c #8A0E34",
+"u.    c #249EBC",
+"v.    c #4A9694",
+"w.    c #688E70",
+"x.    c #4C235F",
+"y.    c #52644C",
+"z.    c #144464",
+"A.    c #62CECC",
+"B.    c #A66A88",
+"C.    c #A5B4AD",
+"D.    c #5E0463",
+"E.    c #22D4D4",
+"F.    c #1E0AF4",
+"G.    c #4102CC",
+"H.    c #231A4C",
+"I.    c #32523C",
+"J.    c #2E26C4",
+"K.    c #4EAAA4",
+"L.    c #C585A7",
+"M.    c #349494",
+"N.    c #6EA7A7",
+"O.    c #58787C",
+"P.    c #687694",
+"Q.    c #9CC3C4",
+"R.    c #5C2A64",
+"S.    c #7C3888",
+"T.    c #2A6464",
+"U.    c #B3D1D1",
+"V.    c #2EA7AC",
+"W.    c #7A2E57",
+"X.    c #760274",
+"Y.    c #27035B",
+"Z.    c #5ABE9C",
+"`.    c #9C5C7C",
+" +    c #621B43",
+".+    c #4D2C63",
+"++    c #A41424",
+"@+    c #2A4254",
+"#+    c #52366A",
+"$+    c #BE9CB0",
+"%+    c #8C6C7D",
+"&+    c #546C6E",
+"*+    c #68DEE0",
+"=+    c #254B4A",
+"-+    c #501C58",
+";+    c #A07B96",
+">+    c #497D6C",
+",+    c #612C47",
+"'+    c #669494",
+")+    c #445861",
+"!+    c #96B6B4",
+"~+    c #4D0493",
+"{+    c #3C1E54",
+"]+    c #600C37",
+"^+    c #647D74",
+"/+    c #909C9B",
+"(+    c #4E0B5A",
+"_+    c #65336B",
+":+    c #784B62",
+"<+    c #305E40",
+"[+    c #327A9C",
+"}+    c #9ECECC",
+"|+    c #E1E3E3",
+"1+    c #372D28",
+"2+    c #454B3F",
+"3+    c #C5BDBD",
+"4+    c #6A4D78",
+"5+    c #3C2C42",
+"6+    c #484B52",
+"7+    c #5A02CC",
+"8+    c #260E44",
+"9+    c #322694",
+"0+    c #72B6B4",
+"a+    c #3E6D77",
+"b+    c #211D1C",
+"c+    c #E0DDDD",
+"d+    c #753B57",
+"e+    c #BCC5C3",
+"f+    c #199194",
+"g+    c #629A94",
+"h+    c #5A9287",
+"i+    c #1D0D4C",
+"j+    c #8D8CA1",
+"k+    c #AD9CA1",
+"l+    c #600B66",
+"m+    c #B6EEF4",
+"n+    c #749DA4",
+"o+    c #264E7C",
+"p+    c #924E6C",
+"q+    c #272553",
+"r+    c #3002E4",
+"s+    c #130520",
+"t+    c #3E0360",
+"u+    c #3E0C30",
+"v+    c #1A4E5C",
+"w+    c #4C2694",
+"x+    c #7C638A",
+"y+    c #250C31",
+"z+    c #51646E",
+"A+    c #7C8587",
+"B+    c #75908F",
+"C+    c #6E1254",
+"D+    c #4E3A94",
+"E+    c #D4CDCF",
+"F+    c #241870",
+"G+    c #90A5A4",
+"                                                                                                                                                                        ",
+"                                                                                                                                                                        ",
+"                                                                                                                                                                        ",
+"                                                                                                                                                                        ",
+"                                                                                                                                                                        ",
+"                                                                                                                                                                        ",
+"                                                                                                                                                                        ",
+"              . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ",
+"              . . . . Z E t . . t E p % [.. . | p p Z . . Q t . . V P . b+% % | . . . l p H . . O p p E x . . x E E V ; . l p E K [.. . . . K E p H $ . % Q . [.H c . . ",
+"              . . . 4.3+; w V . _ 8 t W 1 . [ N E F |+H . V -.. . |.; [.E+x k+-.[.. w 1 l B w [.[ 6 4./.E+H . A _ Z t P . 8 E Z E c+2.. . . ).k+Z E w [.[ N [.l &.| . . ",
+"              . . . _ x . $ Z . p H . 2.6 | % W . . /.1 . E N H . k /.O 3+. . /.[.b+c+O . | 6 [ P 3+. . E V . 3+Z . . . . 8 ; . . 8 H . . . V Q . [ |+| [.w x B % . . . ",
+"              . . . Z c+E+H ! . >.V ! _ A . k ; . . | E+$ k+% 3+2.-.t . ~.c+W t . _ B . . . p % ! w p p c+b+. 1 E+&.6 t . 8 ; . . l V . . . < 6 3+c+p . . ; N &.. . . . ",
+"              . . . | | 2.H 1 . >.c+B E | . N K . . b+E+b+V 7./.E -.t . b+| t E+..x ~.. . . k+x P A t 4.c+! . 1 K | 2.[.. B ; . . F V . . . < % | ! 1 ! . $ E+; . . . . ",
+"              . . [.E K . P E+. _ % . . . . Q E+| . _ 1 . V % . W -.; 6+8 . . 8 ; . -./.. ..-.2.P e+[.. ~./.. 1 y . . . . W /.. b+6 Q . . . V ; . . 1 Z . | A P . . . . ",
+"              . . . O E+1 &.% . H H . . . . | E E+A A ! . V F . P |+/.. E A 1 3+| . l A 1 6 l . ..~.| . 8 x . ~.E+1 A V | < E+1 1 H . . . [.k+6 3+A ~.| . | 3+P . . . . ",
+"              . . . . | 2.b+. . b+b+. . . . . . 2.O | . . $ | . . ! [.. . 2.$ [.. . . $ 2.2.. . [.2.. . b+$ . 2.2.2.O 2.. $ 2.2.b+. . . . . $ 2.2.2.[.. . . O . . . . . ",
+"              ..[ P [ [ P P P [ P P P P P P P [ P P P P P [ P P P P P [ [ P P P P P P [ P P P P [ P [ [ P P P [ P P P P P [ P P P P P P P P [ P P P P P [ P [ P P P P y ",
+"              |.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.",
+"              |.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.",
+"              |.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.",
+"              |.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.",
+"              |.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.k w 8 ).t Q l y ; Q Q x V E+-.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.",
+"              |.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.*.V /.! 1+[ [.C c ! | Z 2.t 1+[.c b+! K 8 |+|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.",
+"              |.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.c+E c X !.q ! - 0 [.b+2.! 1+[ 2.2.[.X y }.! b+| $ c W -.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.",
+"              |.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.&...O | [.'.n - '.0 y P [ h.O P B+x =+C /.N.V W / c V l O Z l c+|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.",
+"              |.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.6 c [ q $ W.{+(+7 m & i.} 9 <+w.& Z z.& y 1+@.K Q y.> B+I.x 4.N E Z x k |.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.",
+"              |.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.E / : l W.;.~+9+q+..+.! : [ x y 4 9 L y j & y l Z V y Z )+y.C y /.3+N E l c+|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.",
+"              |.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.E+2+O C ;.7 u {+H.s+2.F k <+C.|.E+n T 3. .9 !.9 L 6+g+,+& g 9 t ^+e+-.).l Q _ b+Q -.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.",
+"              |.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.x K y.1+7 - 8..+X !+ .].: c ,  .w :.Z Y Z ; H u+-+t+7 x.n L $.q s 7.c ~ |.|.~.K K E : 8 |.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.",
+"              |.|.|.|.|.|.|.|.|.|.|.|.|.|.|.*.H Z _ @.q n ! [ Z 2.1 W q.k+a 3.t L {.Z n ! 2.* : F+= t+t+T '.5.n v+Q G+&+1 |.|+E V e+V ..W |.|.|.|.|.|.|.|.|.|.|.|.|.|.|.",
+"              |.|.|.|.|.|.|.|.|.|.|.|.|.|.H E _ G+^+;.q b+K /.8 ).c+~.D+4+d v z /.& {+#+O b+{.! h.[+= Y.( !.:.,+j.&+Q  .4./ % |.|.*.p V 1 ).|+|.|.|.|.|.|.|.|.|.|.|.|.|.",
+"              |.|.|.|.|.|.|.|.|.|.|.|.|.V 4.H p 2+ .u T ! l ; P a Z P 3.#+L /+{ I.8.8.( 4+]. .7 6.~.4+H.Y..+_+^.C m n b+b+&+[ 1 k |.-.>.l % H N |.|.|.|.|.|.|.|.|.|.|.|.",
+"              |.|.|.|.|.|.|.|.|.|.|.|.&.3+8 [ y - =.D+K E k *.W |.p E p #.#+`. .Q x+T !.Y !.%.!.q 3 t b.a+T 5+!.t 9 } E ,.*.E+x 3.3.E 8 t [ 6 E N |.|.|.|.|.|.|.|.|.|.|.",
+"              |.|.|.|.|.|.|.|.|.|.|.E+% E y &+X T j+].~.|.|.W |+|.H |.E+W o.4.C K k+y+5.Y.!.#.# $._.N m.a+ .,+0 F x+ .&.N.*+|.k W |.-.E % K Z ).V |.|.|.|.|.|.|.|.|.|.|.",
+"              |.|.|.|.|.|.|.|.|.|.&.t H % t %+L g H {+F |.|.p |._ k |._.-.z+2 6.:+J $ ,+u.j., C 7 c > &.d w :+y. .4.& y < < |.|.1 l >.E+|.|.E _ _ 6+N |.|.|.|.|.|.|.|.|.",
+"              |.|.|.|.|.|.|.|.|.*.l w 6 p >+&.N |.V 3.i+H x x w ~.|.6 1 3+e 8.#+(+:.s+7 g.{+/.c+$.!.7.A+: N >.)+1 ) +.& K I k.H 8 ~.W |.|.|.|.>.-._ x |.|.|.|.|.|.|.|.|.",
+"              |.|.|.|.|.|.|.|.|.3._ 6 C |.~.J |.V -.N 5  .).C.c E p C 3.(.V y f ( u Y F Y.T H.Q '.#.U K 9 g #.c 8 H r.k+)+o '+&.|.|.V 6 |.|.|.e+K 3+k+V |.|.|.|.|.|.|.|.",
+"              |.|.|.|.|.|.|.|.8 6 &.; H |.|.*.< k+|.|.{.5 3.1 E k ~.x %+a ).Z =.t+Y H...f 8+5 C q 7 s+L F C !.>.1 6 N -.l C.O.d.|.|.|.V |.|.|.k Q Z -.V -.|.|.|.|.|.|.|.",
+"              |.|.|.|.|.|.|.|.p |.k+; W V *.|+4.7.k+8 4.C q Q ~.~.Q 6.].1 F I R.R.Y..+4+t+Y.)+x.#+^.C }.I O 1+ .K V 8 ~.H F Z ; ).V B C.p -.~.E V 2+-.N ).|.|.|.|.|.|.|.",
+"              |.|.|.|.|.|.|.V &.|+l Q E % 7.P 6+Q : V *.z+s+p |.|.]. .-.8 !.c+{.#+Y.R..+#+w+9 F+b 3 $.: W d L 6.F F B |.|.).x |+k &.E ; [ 4.l H E Z g |.).c+|.|.|.|.|.|.",
+"              |.|.|.|.|.|.-.p p / t |+|.|.k W |.&.~.j+].! C 5+~.{.5+V < <.p |.p :.Y Y.4 q t+_+D m y+ +7.k %+c 8 k >.X }.J F t F V V ~.-.k V |.|.|.8 2+Q V _ |.|.|.|.|.|.",
+"              |.|.|.|.|.|.Q F H % ).|.|.|.8 &.|.|.|.|.c+y ].Q 6+q+q+4+<.a 2.H.{+, t+( {+y -+#+F I 4.:+;  .n y+j H F B E+) G+V.3+|.|.|.|.|.W c+|.|.|+W < < 2+8 |.|.|.|.|.",
+"              |.|.|.|.|.N % W E 1 &.|.|.|.>.|.|.|.|.|.|.C j+<.4 {+v v v (.y F x+J .+=.Y 5 Y f (.}.>.j 1 N 0 u+l W |.|.|.|.x o.H |.|.|.|.|.c+V |.|.|.p |+8 E l |.|.|.|.|.",
+"              |.|.|.|.|.8 &.8 K 4.8 N |.8 *.|.|.|.|.|.k y 8 G+G p.q+f  .d 5+K #+e -+t+t+0 Y.Y.#+b 0 9 B.k+& 8.g d A |.|.%+`.X 3.|.9.i |.|.|.p k k 6 H x y |.E N |.|.|.|.",
+"              |.|.|.|.|.H |.E k l 1 k+_ C x e+-.|.|.|.6 ; v |.o+f i+i+6.].g >.4 :.x.t+u x.x.;.( 5.Z j  .& >.Y ~.7.^ K a.,+k+j V *.c.z |.|+8 ; 4._ E ).V &.6 &.1 |.|.|.|.",
+"              |.|.|.|.c+).k x c+V |.|.|.E |.1 W H A+V /+H Q ).~.#+#+5 5+8+i+:.: $+%+B.7 Y.[.x.2 s %+x.- 3  .m 7.B j+@+0.: >+o 2+C 6+>.p E N |._ |.|.|.p |.>.k E |.|.|.|.",
+"              |.|.|.|.k+c+*.1 8 *.k |.~.8 N 1 1 1 V k+y Q P P z+Z 6.C Z ' 6.2.1+].0 d+u+t+$.S.(+0 % e 7 C 6.i+P y 6.Z c.q 2+}.: - e.&+[ + e+-._ -.k |.k+-._ |.p N |.|.|.",
+"              |.|.|.|._ w H H ; >.E k+Z E V &.E+E+*.|+x |.*.W |.|.< v c+K V v Q ] 4+: T Y T a 8+8.|+|.`.D 6 {+:.9 :.:.).L %+S j ) Q.N w s.&.V % 7._.E ; x Z &.V ).|.|.|.",
+"              |.|.|.|.! >.Q c+V |.|.|.E |.|.|.|.|.|.|.H |.|.v |.|.|.:. .A+-.g v J g  .x.< R.I t+8.$+|.r 0 a+%.C < x+, B+x+$.:  ._.|.|.|.|.|.|.N 8 |.|.6 E A x F t |.|.|.",
+"              |.|.|.|.Q ).t V /.>.E W E |.|.|.|.|.|.|.; |.|._.|.|.|.&.q j+|.-.F <.8 H D _ ;+D x._+{+: 9 `.{+f 6.g 9 d ] F q h A._.|.|.|.|.|.|.|.p 1 _ A+Q ).y ~.F |.|.|.",
+"              |.|.|.&.1 *.8 |.E |.-.).; x A+7.% _ _ F 1+8 V x x W V ~..+, 3+V j+:.4+:.-+(.x+l+n #..+V 0 9 2+z.g.t+- 9 g b.9 e.*+X _ _ _ H % x x c c+k |+E |.E |.H |.|.|.",
+"              |.|.|.H |.~.&.k _ |.|.w 3+|.|.|.|.k |.~.P k -.c+F -.*.6 W Z (.8 _.D 4.<.L c y ( T  .6.:.p (...H.=.L 6+l i k.Z E.m+' k |.k |.|.|.|.H |.|.-.E |.p k x |.|.|.",
+"              |.|.|._ |.8 6 k V |.|.&.~.|.|.|.|.|.|.6 O |.|.|.H |.|.|.-.: (.).E+;+<.< E D q.( u 9 & ( |.x #.0 0 V ;+& F _.p Z.r.! |.|.|.|.|.|.|.3.|.|.|.x |.8 |+1 W |.|.",
+"              |.|.|.% |./+-.*.8 |.|.V c+|.|.|.|.|.|.&.O |.|.|.W 6 |.|.c+E _.) B L._ _.E+W.I 8.-+!.C 8.|.A 5.-+q+A+l  .3 F 8 } * ' -.|.|.|.|.|.|.3.|.|.|.x |.8 c+|+W |.|.",
+"              |.|.|.l |.E |.c+~.|.|.k+k |.|.|.|.|.|.E /.|.|.|.E+W |.|.|+8 < J _.x+< >.c+x.s+X %+( s #.1 k n ;.x n C e |.e+h+P.N ! k |.|.|.|.|.|.c+8 |.|._ |.&.&.-.8 |.|.",
+"              |.|.-.l ~.: 8 p Q C.8 Z ).).).).).).8 y K 8 ).W p 4.8 )._ x /+].0 4 F 4+W , 8+..-+T R.].(./+, 9 c , q+,.~._ @+; %+@ k+).W ).).).8 _ Q 8 8 K E H l p V |.|.",
+"              |.|.k x k x *.e+p N -.% *.|+c+c+c+c+-.Q % -.c+|+N K -.N ~.E k g g !.H <.A 9 9 : y+5. +<.L #.{+e $.:.F 4.J 8 i.< z+c.F h+e+,.Q.|+e+e+p |+N % *.W E &.8 |.|.",
+"              |.|.|.x |._ |.c+8 |.|.V -.|.|.|.|.|.|.~.[ |.|.|.|.A 3+|.*.W |.E q.`.x.w E+p ;+].#+x+^.B 5.!.{.2.].|.c+!+3.4+/ :+F 5+>.k+_.1 e+p 0+< -.|.|.x |.8 &.c+).|.|.",
+"              |.|.|.F |.V |+-.).|.|.V 1 |.|.|.|.|.|.&.O |.|.|.|.|.>.|.c+8 |.~.%+] - 8 J N <.8+%+<.S.s <.D e 4 &+k _ V.; j : 7.%+L p E+k+k+_.6 |./+|.|.|.l |.8 N c+W |.|.",
+"              |.|.|._ |.~.6 k p |.|.6 8 |.|.|.|.|.|.6 P |.|.|.|.|._.|.|+~.|.~...#.D x+'.-.x 4+<.{+L T <.j ]..+9 a ;+%+: a  .d t L F _.N |.w < k+k.-.|.-.E |.V -.V c+|.|.",
+"              |.|.|.V -.&.&.|.p |.|.c+1 -.6 6 E+B 8 3.! p H H 3.H  .% x ; k+%+j 0 q. .L >...5 }.!.{+7 R.(+C 0 #.'.9 x+5+& #.: O !.+.8 K )+F < -./+|.|.k V |.E |.x |.|.|.",
+"              |.|.|.|.H w 3.~.} H H K Z E 8 8 8 c+c+&.P -.|.|.|.|.B E+k E |.A L.d %+J 9 J j+;+. 2 I T .+d+L L I I C }.5.L :+9 L 5.- : : Q.C.G+K z.x _ % K 6 F k >.|.|.|.",
+"              |.|.|.|.O x x E+p k |.|.V |.|.|.|.|.|.|.7.|.|.|.|.|.k >.|.H |.< p+g a e %+k+y <.s+'.{+t+u+u+2 0 =.u+u+, 5.!.'.0 n 7.e k+q.^ %+x g f+|.|.c+E 6 Z Q Z |.|.|.",
+"              |.|.|.|.Q W Z E l W 6 N H k k |.|.|.|.|._ |.|.|.|.|.|._.|.3.|.>.m r w d v >.a J F+y+( u T (+ +, T n 8.m , d+$+K u+}.%+] %+E+|.|.m.e k e+H % x A+H p |.|.|.",
+"              |.|.|.|.V k 8 1 _ e+p p t E V H Q E p ).4.W E E E E E K 7.c *.F j ^ _.p t E+c :.Y.( t+g.D.~+D.t+=.D -+T y+- - @.@.E.> H K Z 3.k++.H /+&.V 3+_ |.8 *.|.|.|.",
+"              |.|.|.|.&.1 N 8 3+c+|.|.-.~.|.|.|.~.~.W H 4._ H 3._ H K c Q H :+!.d a 3+9 E 6.b+I.J.p.g.` (+=.D.Y }.H.m @.;.b n , n.k+g A m._.}+^+|.|.|.V k k+|.E |.|.|.|.",
+"              |.|.|.|.k % |.e |.e k w 6 P p % A+~.3+6 W 4.k k k |.k k _.8 N e - $+B |.: d 2 ( l.F.r+= ~+g.l+X.D.D.l+# b u+m Z I _ :+e : P q f.T.*.-.-.H k ).c+k+|.|.|.|.",
+"              |.|.|.|.|.k+k ~._ [ H E &.>.6 |.|.|.|.|.-.; |.|.|.|.|.|.< e+&.r 7 _.,.F 4 T ( G.r+G.G.w+u u l+D.(+.+K 5+#.0 m '.b b+q %+F ] V t 1.Q.).x x % |.W &.|.|.|.|.",
+"              |.|.|.|.|.*.V V x W 6 |.|.*.).|.|.|.|.|.|.P -.|.|.|.|.|.&.W ~.@.q ) P 0 8.( g.= G.= ~+~+Y Y -+7 # D.=._+%+>.< 3.[.) 3.n+E+A A+/+|.|.|./+3+y &._ |.|.|.|.|.",
+"              |.|.|.|.|.|./.3+8 6 8 |.|.|./+k |.|.|.|.|.p V |.|.|.|.|.A a x 7 !.q q 8+Y t+t+~+7+~+` u -+# R.;.;.T s+C -+,+B.q.n B.] c+|.|.~.8 |.|.-.p e+*.l ).|.|.|.|.|.",
+"              |.|.|.|.|.|.3+7.V Z H |.|.|.6 p |.|.-.6 3+Z t V A+x % _ >.F G+L ^.m X T T Y 2 g.~+u ` t+Y 7 n 7 ;.7 #.6.8.: X y 9 C ^.f+o r ^+M |.|.E+>.Z E t k |.|.|.|.|.",
+"              |.|.|.|.|.|.k V -.V y H 8 w 6 4._ 3.% A E+% _ ~.|.|.|.|.|.3+g  +3 }.8.T 4  +=.t+l+t+D.T Y D.'.d+j ]+_+>.C :.#.d !.U.C.>+x : =+N.6 E t 2+&.c+).|.|.|.|.|.|.",
+"              |.|.|.|.|.|.|.-.W |.l H V 6+a p y V V 8 ~.~.Q H k -.-.-.k e+C R  +Q m #.0 .+R.u -+=._+D.- ]+u+P ^.7 T q i+E+F & T t 7.K Q Q < Q t 1 4.6 k _ |.|.|.|.|.|.|.",
+"              |.|.|.|.|.|.|.|.< |.~.c H k |.|.~.E+|.N *.6 Q H 3.).V V A+ .5.t.L !.8.4+;..+5.u {+-+(+# T #.]+n - d C+& c L ; : :./+l F y.6 |.|.*.H y |.3+1 |.|.|.|.|.|.|.",
+"              |.|.|.|.|.|.|.|.-.)._ x 4.|.|.|.|.% |.|.|.|.8 |+).|+B W 2+K n ++5+5.: 3 L  .u+7 0 .+T b 7 m ^.#.u+5.- ]+9 ,  .j y |.|.>.C '+|.|.|+4.p 3+p |.|.|.|.|.|.|.|.",
+"              |.|.|.|.|.|.|.|.|.1 x k H |+|.|.|.&.1 k c+1 K Z K % k > a ;+a ++C 9 C m x+_+8.]+0 '.;., 7 u+j :+u+$.%.]. +h M.F m x *.).k k |.|.H e+6 l N |.|.|.|.|.|.|.|.",
+"              |.|.|.|.|.|.|.|.|.|.% y &.p k |.|.k x x 8 &.&.E |.E |.i.p k+& u+d+3 # !.a ,+5.S L #. +^ - 7 1+:.A+p+,+L n O.c E+t A+V.w.m.|.|.E+V A l 6 |.|.|.|.|.|.|.|.|.",
+"              |.|.|.|.|.|.|.|.|.|.|._ /+K Q -.V p *.< |+|.|.p k 1 ^+k+J A a r & t n  .^.;.T n j l+-+B.j 5.q k+3.a 9 q #.6.p r V Q N * z |+w y l l w |.|.|.|.|.|.|.|.|.|.",
+"              |.|.|.|.|.|.|.|.|.|.|.k p c+; [ /.p 8 &.8 -.|.&.w |.G+E E+K Q c , 5.u+K c 5+m 7 a 0 m T & ;.m }.t g I 8.{+0 -.k : u.e+p Q Z ! 8 < E |.|.|.|.|.|.|.|.|.|.|.",
+"              |.|.|.|.|.|.|.|.|.|.|.|.|.x < ..H -.c+).3./.H V 4.8 [ C c V 7.B r 6+q.;+) 5.s+X 3+K 3.I >.B.M.T._.1+q , '.@ >+/.4.C.E+k 1 K 3.V ).|.|.|.|.|.|.|.|.|.|.|.|.",
+"              |.|.|.|.|.|.|.|.|.|.|.|.|.-.% V % E c+|.|.k y y t ~.e+ .Z t A+:.t q t 7 } - | m a L y L O y.; Z [ /.1+c t n.x < |.|.|.8 /+H p V |.|.|.|.|.|.|.|.|.|.|.|.|.",
+"              |.|.|.|.|.|.|.|.|.|.|.|.|.|.|.V _ E 8 &.c+8 8 1 E ).Q.*.< F ).e F /+3.^ :.L c d+< #.r F ] |.L.J t |.8 /+O n+1 E W -.p 1 % p 1 |.|.|.|.|.|.|.|.|.|.|.|.|.|.",
+"              |.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.1 [ V &.Q w |.|.1 y e+k V 1 /.' C F ;.p %+3.P <+M.! & Z P E F y 3.|.|./+g+|.|.|.V V E+l _ c+|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.",
+"              |.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.k l C 2.2+l |+|.|./ h+n+_ h.=+&.|.v.G+_.< )+_ -.:+:.U.] 3+^+f+&+,._ p |.|.A : 2+1+P < |.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.",
+"              |.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.8 Z 6 1 p Z x /.! K ).C.6 x ,.o ).n+< x J |.v.A+&.^+A+k K.Q : 1+% ; 4.e+e+W a c+|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.",
+"              |.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.-.p Q 8 |+< Z [ _ B p Q l ; [ % /.o P ^+3.+.T.^+l l ; < 8 7.Z Z ~.6 p x ).|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.",
+"              |.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.6 ; ; Q F &.H H &.8 K ).)._ < _ Q k p E % 8 H 7.8 1 Z p ~.l l a E |.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.",
+"              |.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.k &.x X 2.[ Z /.F 1 Z P 1+b+P q Z 2.b+1+! V 8 /.t b+1+1+2.V k |.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.",
+"              |.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.1 V Z . . ! . b+4.$ y O t $ [ Z . O X . b+4.).|+|.|.&.1 k |.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.",
+"              |.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.k 1 V K t K ! P ).; ~.% !  .l x x 3+|+|.|.|.|.|./...*.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.",
+"              |.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.-.N N N -.N -.k |.|.|.|.|.|.|.|.|.|.Z [ c+|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.",
+"              |.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.y P |+|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.",
+"              |.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|...! c+|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.",
+"              |.|.|.|.|.|.|.|.|.|.|.|.-.N N k |.|.|.|.|.|.|.|.|.k &.&.&.k |.|.|.|.|.|.|.|+8 &.|.|.|.|.|.|.|.-.).).&.|.|.6+! c+|.|.|.|.|.|.N V H H &.k |.|.|.|.|.|.|.|.|.",
+"              |.|.|.|.|.|.|.|.|.|.*.&.&.1 &.&.*.|.|.|.|.|.|.-.8 V _ H H p ).k |.|.|.|.|.&.Q V |.|.|.|.|.*.x ; 6+P [ Q N /.O |+|.|.|.|.-.Q O | [.. [.P W |.|.|.|.|.|.|.|.",
+"              |.|.|.|.|.|.|.|.|.*.6 N |.|.k c+3+6 |.|.|.|.|.1 V 8 |.|.k *.p E -.|.|.|.|.&.K E |.|.|.|.N Q /.H 6 k k ).x 2+! *.|.|.|.|.E P Z 6 -.k 1 O [.V |.|.|.|.|.|.|.",
+"              |.|.|.|.|.|.|.|.k w 6 |.|.|.|.|.&.~.k |.|.|.|.|.|.|.|.|.|.|.8 _ 6 |.|.|.|.&.Q V |.|.|.|.8 /.% |.|.|.|.|.G+c P c+|.|.|.|.N |+-.|.|.|.|._ . 6+|.|.|.|.|.|.|.",
+"              |.|.|.|.|.|.|.|.-.*.-.|.|.|.|.|.c+~.6 |.|.|.|.|.|.|.|.|.|.|.*._ V |.|.|.|.6 l E |.|.|.|.W /.E |.|.|.|.|.c+..! c+|.|.|.|.|.|.|.|.|.|.|.N . | N |.|.|.|.|.|.",
+"              |.|.|.|.|.|.|.|.N 6 -.|.|.|.|.|.N ~.6 |.|.|.|.|.|.|.|.|.|.|.|+p ).|.|.|.|.6 / E |.|.|.|.Q Z ~.|.|.|.|.|.|.6+! c+|.|.|.|.|.|.|.|.|.|.|.|.. | -.|.|.|.|.|.|.",
+"              |.|.|.|.|.|.|.|.-.&.-.|.|.|.|.|.k |+-.|.|.|.|.|.|.|.|.|.|.|.c+p V |.|.|.|.&.K V |.|.|.|././.k |.|.|.|.|.|.2+! 6 |.|.|.|.|.|.|.|.|.|.|.|.. | N |.|.|.|.|.|.",
+"              |.|.|.|.|.|.|.|.N 6 -.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.N p ).|.|.|.|.6 l G+|.|.|.|.t /.-.|.|.|.|.|.|.6+P *.|.|.|.|.|.|.|.|.|.|.|.|.. | N |.|.|.|.|.|.",
+"              |.|.|.|.|.|.|.|.|+6 -.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.*.1 /+V |.|.|.|.&.K E |.|.|.|././.-.|.|.|.|.|.|.y O c+|.|.|.|.|.|.|.|.|.|.8 E . | |+|.|.|.|.|.|.",
+"              |.|.|.|.|.|.|.|.|+6 -.|.|.|.|.|.|.|.|.|.|.|.|.|.|+8 E _ p _ E /+V |.|.|.|.&.l V |.|.|.|././.-.|.|.|.|.|.|.6+! c+|.|.|.|.|.6 x $ $ b+| b+[.| -.|.|.|.|.|.|.",
+"              |.|.|.|.|.|.|.|.-.E+-.|.|.|.|.|.|.|.|.|.|.|.|.6 k+/+W 1 N -.&.p ).|.|.|.|.6 l p |.|.|.|././.-.|.|.|.|.|.|.6+! |+|.|.|.|.).O b+O x ~.&.1 [.| |+|.|.|.|.|.|.",
+"              |.|.|.|.|.|.|.|.|+6 -.|.|.|.|.|.|.|.|.|.|.|.N V ).|+|.|.|.|.N p ).|.|.|.|.&./ V |.|.|.|.t /.-.|.|.|.|.|.|.2+! *.|.|.|.k P 2._ |.|.|.|.|.. | -.|.|.|.|.|.|.",
+"              |.|.|.|.|.|.|.|.|+6 -.|.|.|.|.|.|.|.|.|.|.|.6 V e+|.|.|.|.|.|+E E |.|.|.|.6 l E |.|.|.|././.-.|.|.|.|.|.|...P *.|.|.|.~.O [ |.|.|.|.|.|.. | |+|.|.|.|.|.|.",
+"              |.|.|.|.|.|.|.|.|+6 -.|.|.|.|.|.|.|.|.|.|.|.).V N |.|.|.|.|.|+E ).|.|.|.|.&.K G+|.|.|.|.t /.-.|.|.|.|.|.|...! |+|.|.|.l b+% |.|.|.|.|.|.. | N |.|.|.|.|.|.",
+"              |.|.|.|.|.|.|.|.|+6 -.|.|.|.|.|.|.|.|.|.|.|.W V k |.|.|.|.|.c+p ).|.|.|.|.&.l E |.|.|.|././.-.|.|.|.|.|.|.2+P *.|.|.|.x $ E |.|.|.|.|.|.. | N |.|.|.|.|.|.",
+"              |.|.|.|.|.|.|.|.N E+-.|.|.|.|.|.N 1 6 |.|.|.W V k |.|.|.|.|.|+p V |.|.|.|.6 l E |.|.|.|./.t k |.|.|.|.|.|.6+! *.|.|.|.x b+E |.|.|.|.|.|.. | N |.|.|.|.|.|.",
+"              |.|.|.|.|.|.|.|.-.*.-.|.|.|.|.|.|+8 c+|.|.|.V V -.|.|.|.|.|.6 /+V |.|.|.|.1 l V |.|.|.|.x /.).|.|.|.|.|.c+[ ! c+|.|.|.l $ _ |.|.|.|.|.N . [.-.|.|.|.|.|.|.",
+"              |.|.|.|.|.|.|.|.k 6 *.|.|.|.|.|.6 e+k |.|.|.1 V &.|.|.|.|.|.8 p ).|.|.|.|.&.l /+|.|.|.|.W Z E |.|.|.|.|.E 6+P *.|.|.|.V 2.Z |.|.|.|.|.% [.| -.|.|.|.|.|.|.",
+"              |.|.|.|.|.|.|.|.|.c+6 k |.|.|.k 1 ~.k |.|.|.|+).V 6 |.|.|.&.E /+).|.|.|.|.&.K V |.|.|.|.*.Q ; ~.|.|.|.6 t 2+O c+|.|.|.*.[ $ l |.|.|.8 O [.| N |.|.|.|.|.|.",
+"              |.|.|.|.|.|.|.|.|.-.6 &.*.*.6 1 1 k |.|.|.|.|.3+V E 8 W V E 1 _ E |.|.|.|.&.Q E |.|.|.|.|.V Z /.% x Q [ /+c O w |.|.|.|./+| b+..y Z | B+. . |+|.|.|.|.|.|.",
+"              |.|.|.|.|.|.|.|.|.|.k N 6 6 *.-.|.|.|.|.|.|.|.|.c+3+8 ).&.k k E+6 |.|.|.|.N ~.6 |.|.|.|.|.|.-./+l x V N |.~.G+k |.|.|.|.|.w _ Z [ l e+|.H E k |.|.|.|.|.|.",
+"              |.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.k |.|.|.|.|.|.|.|.|.|.|.|.|.k k |.|.|.|.|.|.|.|.|.|.|.|.",
+"              |.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.",
+"              -.|.k k k k k k k k k k k k k k k k k k k k k k k k k k k k k k k k k k k k k k k k k k k k k k k k k k k k k k k k k k k k k k k k k k k k k k k k k k *.",
+"                                                                                                                                                                        ",
+"                                                                                                                                                                        ",
+"                                                                                                                                                                        ",
+"                                                                                                                                                                        ",
+"                                                                                                                                                                        "};
diff --git a/website/.pics/CAIDAlogo2.gif b/website/.pics/CAIDAlogo2.gif
new file mode 100644 (file)
index 0000000..fa150a6
Binary files /dev/null and b/website/.pics/CAIDAlogo2.gif differ
diff --git a/website/.pics/CAIDAlogo_small.gif b/website/.pics/CAIDAlogo_small.gif
new file mode 100644 (file)
index 0000000..bc15877
Binary files /dev/null and b/website/.pics/CAIDAlogo_small.gif differ
diff --git a/website/.pics/b.gif b/website/.pics/b.gif
new file mode 100644 (file)
index 0000000..7288d96
Binary files /dev/null and b/website/.pics/b.gif differ
diff --git a/website/.pics/b.png b/website/.pics/b.png
new file mode 100644 (file)
index 0000000..696cfe9
Binary files /dev/null and b/website/.pics/b.png differ
diff --git a/website/.pics/background.xcf b/website/.pics/background.xcf
new file mode 100644 (file)
index 0000000..72d142e
Binary files /dev/null and b/website/.pics/background.xcf differ
diff --git a/website/.pics/bbo.gif b/website/.pics/bbo.gif
new file mode 100644 (file)
index 0000000..602239b
Binary files /dev/null and b/website/.pics/bbo.gif differ
diff --git a/website/.pics/bbo.png b/website/.pics/bbo.png
new file mode 100644 (file)
index 0000000..72d3fed
Binary files /dev/null and b/website/.pics/bbo.png differ
diff --git a/website/.pics/bco.gif b/website/.pics/bco.gif
new file mode 100644 (file)
index 0000000..051d81e
Binary files /dev/null and b/website/.pics/bco.gif differ
diff --git a/website/.pics/bco.png b/website/.pics/bco.png
new file mode 100644 (file)
index 0000000..3418cea
Binary files /dev/null and b/website/.pics/bco.png differ
diff --git a/website/.pics/border.gif b/website/.pics/border.gif
new file mode 100644 (file)
index 0000000..195bc1e
Binary files /dev/null and b/website/.pics/border.gif differ
diff --git a/website/.pics/bro.gif b/website/.pics/bro.gif
new file mode 100644 (file)
index 0000000..d3b1814
Binary files /dev/null and b/website/.pics/bro.gif differ
diff --git a/website/.pics/bro.png b/website/.pics/bro.png
new file mode 100644 (file)
index 0000000..ed09c99
Binary files /dev/null and b/website/.pics/bro.png differ
diff --git a/website/.pics/ecke.gif b/website/.pics/ecke.gif
new file mode 100644 (file)
index 0000000..a74ce32
Binary files /dev/null and b/website/.pics/ecke.gif differ
diff --git a/website/.pics/logo-apache.gif b/website/.pics/logo-apache.gif
new file mode 100644 (file)
index 0000000..2995609
Binary files /dev/null and b/website/.pics/logo-apache.gif differ
diff --git a/website/.pics/logo-apache.small.gif b/website/.pics/logo-apache.small.gif
new file mode 100644 (file)
index 0000000..2995609
Binary files /dev/null and b/website/.pics/logo-apache.small.gif differ
diff --git a/website/.pics/logo-extra.gif b/website/.pics/logo-extra.gif
new file mode 100755 (executable)
index 0000000..9dc2555
Binary files /dev/null and b/website/.pics/logo-extra.gif differ
diff --git a/website/.pics/logo-linux.gif b/website/.pics/logo-linux.gif
new file mode 100644 (file)
index 0000000..ad26453
Binary files /dev/null and b/website/.pics/logo-linux.gif differ
diff --git a/website/.pics/logo-wml.gif b/website/.pics/logo-wml.gif
new file mode 100644 (file)
index 0000000..1928abe
Binary files /dev/null and b/website/.pics/logo-wml.gif differ
diff --git a/website/.pics/rrddemo.gif b/website/.pics/rrddemo.gif
new file mode 100644 (file)
index 0000000..251a858
Binary files /dev/null and b/website/.pics/rrddemo.gif differ
diff --git a/website/.pics/rrdlogdemo.gif b/website/.pics/rrdlogdemo.gif
new file mode 100644 (file)
index 0000000..295b588
Binary files /dev/null and b/website/.pics/rrdlogdemo.gif differ
diff --git a/website/.pics/rrdtool.gif b/website/.pics/rrdtool.gif
new file mode 100644 (file)
index 0000000..cf2b3a8
Binary files /dev/null and b/website/.pics/rrdtool.gif differ
diff --git a/website/.pics/rrdtool.xar b/website/.pics/rrdtool.xar
new file mode 100644 (file)
index 0000000..b857e6c
Binary files /dev/null and b/website/.pics/rrdtool.xar differ
diff --git a/website/.pics/unten.gif b/website/.pics/unten.gif
new file mode 100644 (file)
index 0000000..c641f56
Binary files /dev/null and b/website/.pics/unten.gif differ
diff --git a/website/.ttf/futurab.ttf b/website/.ttf/futurab.ttf
new file mode 100644 (file)
index 0000000..7f0b700
Binary files /dev/null and b/website/.ttf/futurab.ttf differ
diff --git a/website/.ttf/futurabc.ttf b/website/.ttf/futurabc.ttf
new file mode 100644 (file)
index 0000000..3fcd868
Binary files /dev/null and b/website/.ttf/futurabc.ttf differ
diff --git a/website/.ttf/futurabi.ttf b/website/.ttf/futurabi.ttf
new file mode 100644 (file)
index 0000000..c1e1783
Binary files /dev/null and b/website/.ttf/futurabi.ttf differ
diff --git a/website/.ttf/futurah.ttf b/website/.ttf/futurah.ttf
new file mode 100644 (file)
index 0000000..5c009ab
Binary files /dev/null and b/website/.ttf/futurah.ttf differ
diff --git a/website/.ttf/futurahi.ttf b/website/.ttf/futurahi.ttf
new file mode 100644 (file)
index 0000000..f8186ab
Binary files /dev/null and b/website/.ttf/futurahi.ttf differ
diff --git a/website/.ttf/futurak.ttf b/website/.ttf/futurak.ttf
new file mode 100644 (file)
index 0000000..0148006
Binary files /dev/null and b/website/.ttf/futurak.ttf differ
diff --git a/website/.ttf/futural.ttf b/website/.ttf/futural.ttf
new file mode 100644 (file)
index 0000000..aa77fad
Binary files /dev/null and b/website/.ttf/futural.ttf differ
diff --git a/website/.ttf/futuralc.ttf b/website/.ttf/futuralc.ttf
new file mode 100644 (file)
index 0000000..723df72
Binary files /dev/null and b/website/.ttf/futuralc.ttf differ
diff --git a/website/.ttf/futurali.ttf b/website/.ttf/futurali.ttf
new file mode 100644 (file)
index 0000000..ab2d487
Binary files /dev/null and b/website/.ttf/futurali.ttf differ
diff --git a/website/.ttf/futuram.ttf b/website/.ttf/futuram.ttf
new file mode 100644 (file)
index 0000000..2e1694b
Binary files /dev/null and b/website/.ttf/futuram.ttf differ
diff --git a/website/.ttf/futuramc.ttf b/website/.ttf/futuramc.ttf
new file mode 100644 (file)
index 0000000..d46fb35
Binary files /dev/null and b/website/.ttf/futuramc.ttf differ
diff --git a/website/.ttf/futurami.ttf b/website/.ttf/futurami.ttf
new file mode 100644 (file)
index 0000000..ceefaaf
Binary files /dev/null and b/website/.ttf/futurami.ttf differ
diff --git a/website/.ttf/futuran.ttf b/website/.ttf/futuran.ttf
new file mode 100644 (file)
index 0000000..90a32ce
Binary files /dev/null and b/website/.ttf/futuran.ttf differ
diff --git a/website/.ttf/futurani.ttf b/website/.ttf/futurani.ttf
new file mode 100644 (file)
index 0000000..0e67d78
Binary files /dev/null and b/website/.ttf/futurani.ttf differ
diff --git a/website/.ttf/futuraxk.ttf b/website/.ttf/futuraxk.ttf
new file mode 100644 (file)
index 0000000..b903c64
Binary files /dev/null and b/website/.ttf/futuraxk.ttf differ
diff --git a/website/.ttf/futurbci.ttf b/website/.ttf/futurbci.ttf
new file mode 100644 (file)
index 0000000..6d2b690
Binary files /dev/null and b/website/.ttf/futurbci.ttf differ
diff --git a/website/.ttf/futurlci.ttf b/website/.ttf/futurlci.ttf
new file mode 100644 (file)
index 0000000..0c013eb
Binary files /dev/null and b/website/.ttf/futurlci.ttf differ
diff --git a/website/.ttf/futurmci.ttf b/website/.ttf/futurmci.ttf
new file mode 100644 (file)
index 0000000..8e7a56d
Binary files /dev/null and b/website/.ttf/futurmci.ttf differ
diff --git a/website/.ttf/futurxkc.ttf b/website/.ttf/futurxkc.ttf
new file mode 100644 (file)
index 0000000..b3c30ba
Binary files /dev/null and b/website/.ttf/futurxkc.ttf differ
diff --git a/website/.ttf/futurxki.ttf b/website/.ttf/futurxki.ttf
new file mode 100644 (file)
index 0000000..a22b489
Binary files /dev/null and b/website/.ttf/futurxki.ttf differ
diff --git a/website/.ttf/futuxkci.ttf b/website/.ttf/futuxkci.ttf
new file mode 100644 (file)
index 0000000..3067508
Binary files /dev/null and b/website/.ttf/futuxkci.ttf differ
diff --git a/website/.ttf/trebuc.ttf b/website/.ttf/trebuc.ttf
new file mode 100644 (file)
index 0000000..bbf36fc
Binary files /dev/null and b/website/.ttf/trebuc.ttf differ
diff --git a/website/.ttf/trebucbd.ttf b/website/.ttf/trebucbd.ttf
new file mode 100644 (file)
index 0000000..96a3611
Binary files /dev/null and b/website/.ttf/trebucbd.ttf differ
diff --git a/website/.ttf/trebucbi.ttf b/website/.ttf/trebucbi.ttf
new file mode 100644 (file)
index 0000000..44fe76c
Binary files /dev/null and b/website/.ttf/trebucbi.ttf differ
diff --git a/website/.ttf/trebucit.ttf b/website/.ttf/trebucit.ttf
new file mode 100644 (file)
index 0000000..95e4332
Binary files /dev/null and b/website/.ttf/trebucit.ttf differ
diff --git a/website/.ttf/zinjaron.ttf b/website/.ttf/zinjaron.ttf
new file mode 100644 (file)
index 0000000..282765e
Binary files /dev/null and b/website/.ttf/zinjaron.ttf differ
diff --git a/website/.wml/navbar.inc b/website/.wml/navbar.inc
new file mode 100644 (file)
index 0000000..1252485
--- /dev/null
@@ -0,0 +1,69 @@
+<nnb:define "main" "main" "">
+  <nnb:button about    "About"         "index.html"           large>
+  <nnb:button screen   "Screenshots"   "screen.html"          large>
+  <nnb:button gallery  "Gallery"       "gallery/"             large>
+  <nnb:button license  "License"       "license.html"         large>
+  <nnb:button download  "Download"     "download.html"        large>
+  <nnb:button compiling "Compiling"    "compiling.html"       large>
+  <nnb:button mailinglists "Mailinglists" "mailinglists.html"  large>
+  <nnb:button tutorial  "Tutorial"     "tutorial/"            large>
+  <nnb:button manual    "RRDtool Manual" "manual/index.html"   large>
+  <nnb:button rrdcgi    "RRDcgi Manual" "rrdcgi.html"    large>
+  <nnb:button perlbind  "Perl Bindings"        "perlbind/index.html"  large>
+  <nnb:button frontends "Frontends"    "frontends/index.html" large>
+  <nnb:button developers "Developers"  "developers.html"      large>
+  <nnb:button contrib   "Contributors"  "contributors.html"    large>
+</nnb:define>
+
+<nnb:define "sub" manual "manual/">
+  <nnb:button rrdcreate         "create"      rrdcreate.html           small>
+  <nnb:button rrdupdate         "update"      rrdupdate.html           small>
+  <nnb:button rrdgraph  "graph"       rrdgraph.html            small>
+  <nnb:button rrddump   "dump"        rrddump.html             small>
+  <nnb:button rrdinfo   "info"        rrdinfo.html             small>
+  <nnb:button rrdrestore "restore"     rrdrestore.html         small>
+  <nnb:button rrdfetch   "fetch"       rrdfetch.html           small>
+  <nnb:button rrdresize         "resize"      rrdresize.html           small>
+  <nnb:button rrdtune   "tune"        rrdtune.html             small>
+  <nnb:button rrdlast   "last"        rrdlast.html             small>
+</nnb:define>
+
+<nnb:define "sub" gallery "gallery/">
+  <nnb:button alex-01   "Billing Check"   alex-01.html         small>
+  <nnb:button bkw-01    "Portmaster"   bkw-01.html             small>
+  <nnb:button blair-01  "Webserver"   blair-01.html            small>
+  <nnb:button chris-01    "Weather Stats"  chris-01.html               small>
+  <nnb:button colleen-01 "Space Shuttle"  colleen-01.html              small>
+  <nnb:button edvard-01         "Link Status"  edvard-01.html          small>
+  <nnb:button jeff-01   "Routing"  jeff-01.html                small>
+  <nnb:button neal-01   "Data Management"  neal-01.html                small>
+  <nnb:button steve-01  "DNS Query Rate"  steve-01.html                small>
+  <nnb:button simon-01  "FluxScope"  simon-01.html             small>
+</nnb:define>
+
+<nnb:define "sub" perlbind "perlbind/">
+  <nnb:button RRDp      "RRD Pipes"   RRDp.html                small>
+  <nnb:button RRDs      "Shared RRD"  RRDs.html                small>
+</nnb:define>
+
+<nnb:define "sub" tutorial "tutorial/">
+  <nnb:button rrdtut    "First Steps"   rrdtutorial.html               small>
+  <nnb:button rpntut    "RPN Tutorial"  rpntutorial.html               small>
+  <nnb:button cdeftut   "CDEF Tutorial"  cdeftutorial.html             small>
+</nnb:define>
+
+<nnb:define "sub" frontends "frontends/">
+  <nnb:button bigsister     "BigSister"           bigsister.html small>
+  <nnb:button bronc        "Bronc"        bronc.html small>
+  <nnb:button cricket      "Cricket"      cricket.html small>
+  <nnb:button flowscan     "FlowScan"     flowscan.html small>  
+  <nnb:button fwgold       "FwGold"       fwgold.html small>  
+  <nnb:button hoth         "Hoth"         hoth.html small>  
+  <nnb:button nmis          "NMIS"         nmis.html small>
+  <nnb:button ntop          "Ntop"         ntop.html small>
+  <nnb:button nrg          "NRG"          nrg.html small>
+  <nnb:button orca         "Orca"         orca.html small>
+  <nnb:button remstats     "Remstat"      remstats.html small>
+  <nnb:button rrgrapher     "RRGrapher"    rrgrapher.html small>
+  <nnb:button slamon        "SLAMon"       slamon.html small>
+</nnb:define>
diff --git a/website/.wml/nestednavbar.inc b/website/.wml/nestednavbar.inc
new file mode 100644 (file)
index 0000000..d99feb0
--- /dev/null
@@ -0,0 +1,62 @@
+## Nested Navigation Bar
+##
+## Based on original work by Ralf Engelschall and Fritz Zaucker.
+## All errors by Tobias Oetiker
+
+# Extends the original WML Navbar 
+
+#use wml::des::navbar
+#use wml::des::space
+#use wml::std::tags
+
+#   the container tag for definition of the
+#   main navbar or a sub navbar
+
+<define-container nnb:define>
+<ifeq "%0" "main"
+     <prog  
+           <navbar:define name=main
+                        urlbase="$(ROOT)/%2"
+                        imgbase="$(ROOT)/.img"
+                         imgstar="std:sel:ovr">
+              %body
+              <navbar:epilog><BR></navbar:epilog>
+              <navbar:epilog type=S><BR><<SUBNAVBAR>></navbar:epilog>
+             <navbar:epilog type=SS><BR><<SUBNAVBAR>></navbar:epilog>
+           </navbar:define>
+     > 
+     <prog 
+           <navbar:define name=%1 
+                         urlbase="$(ROOT)/%2"
+                         imgbase="$(ROOT)/.img"
+                          imgstar="std:sel:ovr">
+              %body
+              <navbar:epilog><BR></navbar:epilog>
+     </navbar:define>
+     >
+>
+</define-container>
+
+
+<define-tag nnb:button>
+<MAGICK Button%3 %0>%1</MAGICK>
+<navbar:button alt="%1" id=%0 url=%2 img="%0-*.gif">
+</define-tag>
+
+#   and finally the nested rendering
+
+<define-tag nnb:render>
+  <navbar:render name=main 
+                 select=%0
+                 <ifeq "%1" "none" "" "subselected">>
+
+..SUBNAVBAR>><navbar:render name=%0  
+                 select=%1
+                 <ifeq "%1" "none" "subselected">><<..
+</define-tag>
+
+
+
+
+
+
diff --git a/website/.wml/template.inc b/website/.wml/template.inc
new file mode 100644 (file)
index 0000000..c1c4bbe
--- /dev/null
@@ -0,0 +1,88 @@
+#include "$(ROOT)/.wml/nestednavbar.inc"
+#include "$(ROOT)/.wml/tobis.inc"
+#include "$(ROOT)/.wml/navbar.inc"
+
+
+
+# The Template
+<HTML>
+<HEAD>
+<!-- The Template for this webpage has been created by Tobi Oetiker -->
+<TITLE*>RRD TOOL -- <<TITLE>></TITLE*>
+<STYLE TYPE="text/css">
+<protect>
+<!--
+H1, H2, DIV, P, LI, 
+UL, OL, TABLE, TD, TR {font-family: trebuchet ms, lucida sans, helvetica, sans-serif}
+PRE {font-family: courier, courier-new, lucidatypewriter}
+-->
+</protect>
+</STYLE>
+</HEAD>
+<BODY bgcolor=white 
+      text=#00000 LINK=#0000a0 
+      VLINK=#0000a0 ALINK=#0000a0
+      MARGINWIDTH=0 MARGINHEIGHT=0>
+<TABLE BORDER=0 CELLPADDING=0 CELLSPACING=0>
+<TR><TD width=8 ALIGN=left VALIGN=TOP 
+        BACKGROUND="$(ROOT)/.pics/b.gif" BGCOLOR=#6c9bcd><hspace 8></TD>
+<TD width=126 ALIGN=left VALIGN=TOP 
+        BACKGROUND="$(ROOT)/.pics/b.gif" BGCOLOR=#6c9bcd>
+<DIV><vspace 10></DIV>
+<A HREF="http://ee-staff.ethz.ch/~oetiker/webtools/rrdtool/"
+><img border=0 src="$(ROOT)/.pics/rrdtool.gif"></A><hspace 5>
+<DIV><vspace 10></DIV>
+# Nav Bar
+<nnb:render $(section) $(subsection)>
+<BR>
+<vspace 40><BR>
+<small>
+Website and<br>
+RRD TOOL<br>
+created by<br>
+<B><A HREF="http://www.caida.org/~tobi">Tobi Oetiker</A></B><BR>
+<vspace 10><BR>
+For more information<BR>
+about CAIDA write to<BR>
+<TABLE CELLPADDING=0 CELLSPACING=0 BORDER=0><TR><TD><small>info</small></TD><TD><small>@</small></TD><TD><small>caida.org</small></TD></TR></TABLE><BR>
+<vspace 30><BR>
+<A HREF="http://www.engelschall.com/sw/wml"><IMG border=0 SRC="$(ROOT)/.pics/logo-wml.gif"></A><BR>
+<vspace 10><BR>
+</TD>
+<TD WIDTH=22 background="$(ROOT)/.pics/bro.gif"><hspace 22></TD><TD><hspace 5></TD>
+<TD valign=top align=left>
+<vspace 10><BR>
+<A HREF="http://www.caida.org"><IMG ALIGN=right border=0 SRC="$(ROOT)/.pics/CAIDAlogo.120.gif"></A>
+<<H1>>
+<<Body>>
+<DIV><vspace 20></DIV>
+<HR noshade size=1>
+<DIV align=right><FONT color="#bfbfbf">
+<small><script type="text/javascript" language="JavaScript">
+<!--
+  document.write("Original location of this page: ");
+  document.write(document.location);
+  document.write("<BR>");
+//  -->
+</script>
+This page was updated on, <:print "".localtime(time):></small></font></DIV>
+</TD></TR>
+<TR><TD colspan=2 background="$(ROOT)/.pics/bbo.gif"><vspace 22></TD><TD><IMG SRC="$(ROOT)/.pics/bco.gif"></TD>
+<TD colspan=2></TD></TR>
+# The End
+</TABLE>
+</BODY>
+
+# All the rest goes into Body
+..Body>>
+
+
+
+
+
+
+
+
+
+
+
diff --git a/website/.wml/tobis.inc b/website/.wml/tobis.inc
new file mode 100644 (file)
index 0000000..8646b68
--- /dev/null
@@ -0,0 +1,153 @@
+#use wml::des::space
+#use wml::std::tags
+#use wml::fmt::url
+#use wml::std::box
+
+<define-container TITLE>
+..TITLE>>%body<<..
+</define-container>
+
+<define-container LI>
+<LI*>%body</LI*><DIV><vspace 7></DIV>
+</define-container>
+
+<define-container MAGICK>
+# <MAGICK ButtonSmall|ButtonLarge|Title|Section  optfilename>
+<perl>
+BEGIN{unshift @INC, "/usr/pack/imagemagick-4.2.9-to/solaris/perl/"};
+use Image::Magick;
+my $type = lc("%0");
+my $text = <<'sdosidufgtjseflsdj';
+%body
+sdosidufgtjseflsdj
+$text =~ s/%/%%/g;
+
+my $fontpath = "/home/oetiker/data/projects/AABN-rrdtool/website/.ttf";
+my %props = (
+       "buttonsmall" =>["trebuc","20","250x34",  "+40+0"],
+       "buttonlarge" =>["trebuc","21","250x38",  "+24+3"],
+       "title" =>      ["trebucbd","50","940x400", "+0+1"],
+       "section" =>    ["trebucbd","32","940x60",  "+0+1"]
+);
+
+my %color = ( "back" => "#6c9bcd",
+              "fore" => "#14195d",
+              "activ" =>   "#fdfbcc",
+              "marker" =>  "#14195d",
+              "tfore" =>   "#14195d",
+              "tactiv" => "#5786bf",
+              "tback" =>   "#ffffff",         
+);
+
+my $file = $text;
+$file =~ s/\s+|\/|<|>|"|\?/_/g;
+$file = "%1" if "%1";
+
+if ($type =~ /^button/) {
+      @filetask = ("$file-sel","$file-std","$file-ovr");
+} else {
+      @filetask = ($file);
+}
+foreach $file (@filetask){
+       next if -e "$(ROOT)/.img/$file.gif";
+       my ($q);
+       
+       $q=Image::Magick->new;     
+       $q->Set(size=>$props{$type}[2]);
+       if ($type =~ /^title/ ||$type =~ /^section/ ){
+        $q->ReadImage("xc:$color{tback}");
+       $col=$color{tfore};
+       } else {
+        $q->ReadImage("xc:$color{back}");
+       $col=$color{fore};
+       }
+       $border=0;
+
+       if ($type =~ /^title/){
+        $q->Annotate(text=>$text,
+              geometry=>"+3+3",
+              font=>"\@${fontpath}/$props{$type}[0].ttf",
+              pointsize=>$props{$type}[1],
+              pen=>$color{tactiv},
+              align=>'left');
+        $q->Blur(factor=>99);
+        $q->Blur(factor=>99);
+        $q->Blur(factor=>99);
+        $q->Blur(factor=>99);
+        $q->Blur(factor=>99);
+        $q->Blur(factor=>99);
+        $q->Blur(factor=>99);
+        $q->Blur(factor=>99);
+        $q->Blur(factor=>99);
+        $q->Blur(factor=>99);
+        $q->Blur(factor=>99);
+        $q->Blur(factor=>99);
+        $q->Blur(factor=>99);
+        $q->Blur(factor=>99);
+        $q->Blur(factor=>99);
+       }
+
+       if ($type =~ /^button/) {
+       SWITCH: for ($file) {
+            /-sel$/ && do { $col = $color{activ}; $border=1; last;};
+            /-ovr$/ && do { $col = $color{activ};
+               if ($type =~ /small$/) {
+                           $q->Draw(primitive=>'FillPolygon',
+                                    pen=>$color{marker},
+                                    points => "10,4 24,14 10,24");
+               } else {
+                           $q->Draw(primitive=>'FillPolygon',
+                                    pen=>$color{marker},
+                                    points => "0,10 14,20 0,30");
+               }
+                           last;};
+            /-std$/ && do { $col = $color{fore}; last;};
+          }
+        }
+
+
+        $q->Annotate(text=>$text,
+              geometry=>$props{$type}[3],
+              font=>"\@${fontpath}/$props{$type}[0].ttf",
+              pointsize=>$props{$type}[1],
+              pen=>$col,
+              align=>'left');
+
+       $q->Scale(geometry=>"50%");
+       $q->Crop(geometry=>"0x0+1+1") unless $type =~ /^button/;
+       $q->Sharpen(factor=>"30%") if $type =~ /^button/;
+       $q->Quantize(colors=>15,olorspace=>"RGB", dither=>"true");      
+       $q->Write(filename=>"gif:$(ROOT)/.img/$file.gif", 
+                 colors=>16,                                                    
+                 interlace=>"line",
+                compress=>'lzw');
+}
+
+print "$(ROOT)/.img/$file.gif" unless "%1";
+
+</perl>
+</define-container>
+
+<define-container H1>
+..!H1>>
+<H1*><IMG SRC="<MAGICK Title>%body</MAGICK>" ALT="<: print qq{%body} :> "></H1*>
+<<..
+..!TITLE>><: print qq{%body} :><<..
+</define-container>
+
+<define-container H2>
+<DIV><vspace 6><BR><IMG SRC="<MAGICK Section>%body</MAGICK>" ALT="%body"><BR><vspace 5></DIV>
+</define-container>
+
+#<define-container P>
+#<DIV>%body<BR><vspace 4></DIV>
+#</define-container>
+
+<define-container DD>
+<DD*>%BODY</DD*><P*>
+</define-container>
+
+<define-container DT>
+<DT*><B>%BODY</B></DT*>
+</define-container>
+
diff --git a/website/.wmlrc b/website/.wmlrc
new file mode 100644 (file)
index 0000000..256eaaa
--- /dev/null
@@ -0,0 +1,4 @@
+-DROOT~.
+-DIMGDOT_BASE~./.img/
+-DLOGO_BASE~./.img/
+-I.
diff --git a/website/compiling.wml b/website/compiling.wml
new file mode 100644 (file)
index 0000000..1f2d1ae
--- /dev/null
@@ -0,0 +1,70 @@
+#include "$(ROOT)/.wml/template.inc" section=compiling subsection=none
+
+<H1>Compiling</H1>
+
+<P>This is for UNIX! A precompiled NT version of RRDtool is available from
+the download area</P>
+
+<H2>Prerequisits</H2>
+
+<P>Before you start compiling RRDtool, make sure you have the following
+packages installed on your system:</P>
+
+<UL>
+<LI><A HREF="http://www.perl.com">Perl 5.005</A></LI>
+<LI><A HREF="ftp://ftp.gnu.org/gnu/make">GNU make</A></LI>
+<LI><A HREF="ftp://ftp.gnu.org/gnu/gcc">GNU gcc</A></LI>
+</UL>
+
+<P>If you want to start hacking RRDtool, make sure you also have these:</P>
+
+<UL>
+<LI><A HREF="ftp://ftp.gnu.org/gnu/autoconf">GNU autoconf</A></LI>
+<LI><A HREF="ftp://ftp.gnu.org/gnu/automake">GNU automake</A></LI>
+<LI><A HREF="ftp://ftp.gnu.org/gnu/libtool">GNU libtool</A></LI>
+</UL>
+
+<H2>Compilation</H2>
+
+<P>Now you are ready to compile the code:</P>
+
+<PRE>
+sh configure
+make
+make install
+</PRE>
+
+
+<P>This will configure, compile and install RRDtool in
+<CODE>/usr/local/rrdtool-VERSION</CODE>.</P>
+
+<H2>Additional Notes</H2>
+
+<P>If you prefer to install RRDtool in some other place, use:</P>
+
+<PRE>
+sh configure --prefix=/some/other/RRDtool-dir
+</PRE>
+
+<P> If you prefer to live with shared libraries, make sure you add the
+<CODE>--enable-shared</CODE> option to your configure call:</P>
+
+<PRE>
+sh configure --enable-shared
+</PRE>
+
+<P> The configure script will try to find your perl installation. If it does
+not find it, you can still build RRDtool but no perl modules will be
+generated.</P>
+
+<P>By default the perl modules will be installed under the RRDtool install
+directory. This will require you to use a 'use lib' statement in your
+RRDtool perl programs. If you do not care what happens to your site-perl
+directory, you can also use:</P>
+
+<PRE>
+make site-perl-install
+</PRE>
+
+<P> will install the perl modules whereever you keep your local perl
+modules. Doing this reliefs you from using 'use lib' in your scripts. </P> 
diff --git a/website/contributors.wml b/website/contributors.wml
new file mode 100644 (file)
index 0000000..29eedc4
--- /dev/null
@@ -0,0 +1,10 @@
+#include "$(ROOT)/.wml/template.inc" section=contrib subsection=none
+#use wml::fmt::verbatim
+
+<H1>Contributors</H1>
+
+During the long months of RRDtool development, I received a lot of
+support and patches from the people subscribed on the mrtg-developers
+mailinglist.
+
+<: print  &wml_fmt_verbatim( {FILE => "$(ROOT)/../CONTRIBUTORS"}); :>
diff --git a/website/developers.wml b/website/developers.wml
new file mode 100644 (file)
index 0000000..15ba5df
--- /dev/null
@@ -0,0 +1,27 @@
+#include "$(ROOT)/.wml/template.inc" section=developers subsection=none
+
+<H1>Keep in Touch</H1>
+
+<H2>rrd-developers mailing list</H2>
+
+<P>If you start hacking rrdtool, make sure you subscribe to the
+rrd-developers mailing list by sending a message with the subject
+'subscribe' to <A
+HREF="mailto:rrd-developers-request@list.ee.ethz.ch?subject=subscribe">rrd-developers-request@list.ee.ethz.ch</A>. On
+this list you will find other people who are interested in the guts
+of RRDtool.</P>
+
+<P>There is also an <A HREF="http://www.ee.ethz.ch/~slist/rrd-developers/">archive</A> of past
+Traffic on this List</P>
+
+<H2>Contributing</H2>
+
+<P>Contributed feature and bug patches are most welcome. But please
+send complete patches. A complete patch patches the CODE as well as
+the CHANGES, CONTRIBUTORS and the POD files. Please send your Patches
+either to the mailing list or directly to the <A
+HREF="mailto:oetiker@ee.ethz.ch">Author</A>.</P>
+
+<P>NOTE: Use GNU '<TT>diff --recursive --unified oldtree newtree</TT>' for generating
+your patchfiles</P>
+
diff --git a/website/download.wml b/website/download.wml
new file mode 100644 (file)
index 0000000..385e2b3
--- /dev/null
@@ -0,0 +1,32 @@
+#include "$(ROOT)/.wml/template.inc" section=download subsection=none
+
+<H1>RRDtool Download</H1>
+
+You can download RRD tool from several places:
+
+<H2>Primary Distribution Points</H2>
+
+<UL>
+ <LI><A HREF="http://ee-staff.ethz.ch/~oetiker/webtools/rrdtool/pub/?M=D">http://ee-staff.ethz.ch/~oetiker/webtools/rrdtool/pub</A></LI>
+# <LI><A HREF="http://www.caida.org/Tools/RRDtool/pub/">http://www.caida.org/Tools/RRDtool/pub/</A></LI>
+</UL>
+
+<H2>Mirror Sites</H2>
+
+<UL>
+  <LI><A HREF="ftp://ftp.sunet.se/pub/network/monitoring/rrdtool/">ftp://ftp.sunet.se/pub/network/monitoring/rrdtool/</A> (Johan.Hofvander@sdi.slu.se)</LI>
+  <LI><A HREF="ftp://ftp.grmbl.com/pub/webtools/rrdtool/">ftp://ftp.grmbl.com/pub/webtools/rrdtool/</A> (Bram Dumolin bram@grmbl.be)</LI>
+  <LI><A HREF="http://ftp.sunet.se/pub/network/monitoring/rrdtool/">http://ftp.sunet.se/pub/network/monitoring/rrdtool/</A> (Johan.Hofvander@sdi.slu.se)</LI>
+  <LI><A HREF="ftp://ftp.nutt.net.au/pub/rrdtool/">ftp://ftp.nutt.net.au/pub/rrdtool</A> (mirror@utopia.nutt.net.au)</LI>
+</UL>
+
+<H2>Binary Distributions</H2>
+
+<UL>
+  <LI>AIX 4.3.2 by <A HREF="mailto:Ciaran.Deignan@bull.net">Ciaran Deignan</A> -- <A HREF="http://www-frec.bull.com/cgi-bin/list_dir.cgi/download/aix432/">http://www-frec.bull.com/download/aix432/</A></LI>
+  <LI>Linux x86 RPM by <A HREF="mailto:hgomez@slib.fr">Henri Gomez</A> -- <A HREF="ftp://ftp.falsehope.com/home/gomez/rrdtool/">ftp://ftp.falsehope.com/home/gomez/rrdtool/</A></LI>
+</UL>
+
+If you want to provide a mirror site or are producing binaries for another
+platform, please drop a line to <A
+HREF="mailto:oetiker@ee.ethz.ch">oetiker@ee.ethz.ch</A>.
diff --git a/website/frontends/bigsister.wml b/website/frontends/bigsister.wml
new file mode 100644 (file)
index 0000000..ca92042
--- /dev/null
@@ -0,0 +1,63 @@
+#include "$(ROOT)/.wml/template.inc" section=frontends subsection=bigsister
+
+<h1>Big Sister</h1>
+<p>by Thomas Aeby</p>
+
+<p>
+
+The Big Sister system and network monitor concentrates on
+detecting failing services and systems, displaying status
+overviews and alarming. As a means of providing diagnostic
+information to the system administrator Big Sister also
+collects trend data and uses RRDTool as a powerful and
+easy-to-use utility for storing and visualizing collected
+data.
+
+</p>
+
+<p>
+
+Big Sister's features include:
+
+</p>
+
+<ul>
+
+<li>
+
+detection of service or system failure via an agent
+
+</li>
+
+<li>
+
+alarming
+
+</li>
+
+<li>
+
+display of consolidated and/or detailed status overviews
+
+</li>
+
+<li>
+
+collection and visualization of system performance data via RRDTool
+
+</li>
+
+<li>
+
+interconnection of different Big Sister sites
+
+</li>
+
+</ul>
+
+<p>
+
+Big Sister is available at
+<a href="http://bigsister.graeff.com/">http://bigsister.graeff.com/</a>.
+
+</p>
diff --git a/website/frontends/bronc.wml b/website/frontends/bronc.wml
new file mode 100644 (file)
index 0000000..41da4bd
--- /dev/null
@@ -0,0 +1,21 @@
+#include "$(ROOT)/.wml/template.inc" section=frontends subsection=bronc
+
+<H1>Bronc</H1>
+<P>by Chris Snell</P>
+
+<P>Bronc aims to be the fastest front-end available for RRDtool.  It is
+written in Perl, using Mason as a template/component engine and mod_perl
+to speed things up.  Bronc features...</P>
+
+<UL>
+<LI>a SNMP collector, which queries SNMP-capable devices and stores
+measurements in RRDtool databases</LI>
+
+<LI>on-the-fly graphing using BRONC::Grapher, which runs under mod_perl</LI>
+
+<LI>a extensible, Perl-based configuration file, which allows for quick
+configuration of complex graphs</LI>
+</UL>
+
+<P>Bronc is written by Chris Snell and is available from the <A
+HREF="http://bronc.blueaspen.com">Bronc Home Site</A>.</P>
diff --git a/website/frontends/cricket.wml b/website/frontends/cricket.wml
new file mode 100644 (file)
index 0000000..e5b90cc
--- /dev/null
@@ -0,0 +1,17 @@
+#include "$(ROOT)/.wml/template.inc" section=frontends subsection=cricket
+
+<H1>Cricket</H1>
+<P>by Jeff R. Allen</P>
+
+<P>Cricket is the result of work at WebTV to design and implement a completely
+different kind of wrapper for RRD. It features:</P>
+<UL>
+<LI>a hierarchical configuration system, which avoids duplicate info in the
+  config files</LI>
+<LI>full flexibility in RRD structure (arbitrary numbers of DS's and RRA's)</LI>
+<LI>a CGI-based graph-on-demand application</LI>
+<LI>SNMP- and EXEC-based data gathering</LI>
+</UL>
+
+<P>Available from <A HREF="http://cricket.sourceforge.net">
+Jeff's Cricket Site</A>
diff --git a/website/frontends/flowscan.wml b/website/frontends/flowscan.wml
new file mode 100644 (file)
index 0000000..7806b11
--- /dev/null
@@ -0,0 +1,52 @@
+#include "$(ROOT)/.wml/template.inc" section=frontends subsection=flowscan
+
+<h1>FlowScan</h1>
+<p>by Dave Plonka</p>
+
+<p>
+FlowScan is a network analysis and reporting tool that processes flow
+files generated by Cflowd, <a href="http://www.caida.org/Tools/Cflowd/">http://www.caida.org/Tools/Cflowd/</a>,
+which collects flow data from Cisco routers.
+</p>
+
+<p>
+Sample graphs produced using FlowScan can be seen here:
+<a href="http://wwwstats.net.wisc.edu">http://wwwstats.net.wisc.edu</a>.
+</p>
+
+<p>
+FlowScan's features include:
+</p>
+
+<ul>
+
+<li>
+a "CampusIO" report which allows one to generate graphs showing traffic
+by IP protocol, traffic by "well-known" service, and traffic passed
+between Autonomous Systems.
+</li>
+
+<li>
+a "SubNetIO" report which maintains RRD files containing information
+on how many bytes, packets, and flows have been sourced from or destined
+for each subnet.
+</li>
+
+<li>
+the ability to determine bandwidth usage by "elusive" application protocols
+such as "RealMedia" and "Napster" using an adaptive, state-based measurement
+technique.  See <a href="http://net.doit.wisc.edu/data/Napster/">http://net.doit.wisc.edu/data/Napster/</a> for more details.
+</li>
+
+<li>
+a modular report mechanism that enables users to write or customize
+reports that can either derived from existing reports or be altogether
+new ones.
+</li>
+
+</ul>
+
+<p>
+FlowScan is available at
+<a href="http://net.doit.wisc.edu/~plonka/FlowScan/">http://net.doit.wisc.edu/~plonka/FlowScan/</a>.
+</p>
diff --git a/website/frontends/fwgold.wml b/website/frontends/fwgold.wml
new file mode 100644 (file)
index 0000000..0ce7a56
--- /dev/null
@@ -0,0 +1,78 @@
+#include "$(ROOT)/.wml/template.inc" section=frontends subsection=fwgold
+
+<h1>FwGold</h1>
+<p>by Gianluca Rotoni</p>
+
+<p>
+A tool to graphically display Checkpoint Firewall-1&reg; logging statistical data
+</p>
+
+<p>
+Snapshots of graphics produced using FwGold can be seen here:
+<a href="http://rotoni.com/FwGold/example.htm">http://rotoni.com/FwGold/example.htm</a>.
+</p>
+
+<p>
+FwGold's features include:
+</p>
+
+<ul>
+
+<LI>
+Firewall access statistics logging and graphics
+</LI>
+
+<LI>
+Keep graphics of last day, week, month and year statistical data
+</LI>
+
+<LI>
+<A HREF="http://ee-staff.ethz.ch/~oetiker/webtools/rrdtool">RRDtool</A> based  (stores data into non growing round robin databases)
+</LI>
+
+<LI>
+Completely Perl written (uses RRDs perl module)
+</LI>
+
+<LI>
+Client/Server structure (the server runs on the fw-1 managment module, the client can be anywhere perhaps where a Web server runs, the communication TCP port is configurable)
+</LI>
+
+<LI>
+Both client and server sides don't need to run as 'root'
+</LI>
+
+<LI>
+Fully configurable (users can freely define criterias to match when filtering the FW log and which db and graphics to generate, which graphic's format, colors and labels, which file names etc.)
+</LI>
+
+<LI>
+Automatic generation of DBs, graphics and html files
+</LI>
+
+<LI>
+Automatic prevention of spikes in case of counter resets due to server restarts
+</LI>
+
+<LI>
+Automatic detection of missed data
+</LI>
+
+<LI>
+Automatic detection of configuration errors
+</LI>
+
+<LI>
+Default configuration file to generate common firewall statistics (total connections, connections per protocol, total accepted connections per protocol, etc.)
+</LI>
+
+<LI>
+Detailed installation and configuration instructions
+</LI>
+
+</UL>
+
+<p>
+FwGold is available at
+<a href="http://rotoni.com/FwGold">http://rotoni.com/FwGold</a>.
+</p>
diff --git a/website/frontends/hoth.wml b/website/frontends/hoth.wml
new file mode 100644 (file)
index 0000000..d6068f1
--- /dev/null
@@ -0,0 +1,18 @@
+#include "$(ROOT)/.wml/template.inc" section=frontends subsection=hoth
+
+<H1>Hoth</H1>
+<P>by Alexander Reelsen</P>
+
+<P>Hoth is an IP accounting tool exclusively for Linux 2.2, as it relies
+on the IPChains firewalling code (it will be ported to 2.4 once the kernel
+is stable). Hoth has the ability to account per source/destination IP,
+source/destination port, protocol, interface, just like the real ipchains.
+Furthermore you can stack every accounted data.</P>
+
+<P>Hoth consists of an .ini style like config file, scripts for creating
+the firewall rules out of the config file and a CGI script to view the accounted
+data as graphics, which are created realtime.</P>
+
+<P>Download from the <A HREF="http://joker.rhwd.de/software/hoth/">Hoth site</A>.
+
+
diff --git a/website/frontends/index.wml b/website/frontends/index.wml
new file mode 100644 (file)
index 0000000..90d564b
--- /dev/null
@@ -0,0 +1,34 @@
+#include "$(ROOT)/.wml/template.inc" section=frontends subsection=none
+
+<H1>Frontends</H1>
+
+<P>Using RRDtool from the command line or through its Perl bindings is
+pretty straight forward. But this will not buy you the solution to all your
+monitoring needs. RRDtool does not help you to organize your data
+acquisition and presentation. This is the point where the front ends come
+in. Some of these are tools which relie on rrdtool to functions, others are
+tools which can work nicely all on their own, and rrdtool is just an
+optional data graphing and logging addon.</P>
+
+<H2>Availability</H2>
+
+<P>To my knowledge these are the RRDtool frontends which are publicly
+available:</P>
+
+<UL>
+<LI><A HREF="bigsister.html">Tom Aebis's BigSister</A></LI>
+<LI><A HREF="cricket.html">Jeff Allen's Cricket</A></LI>
+<LI><A HREF="ntop.html">Luca Deri's Ntop</A></LI>
+<LI><A HREF="remstats.html">Thomas Erskine's remstats</A></LI>
+<LI><A HREF="rrgrapher.html">Dave Plonka's RRGrapher</A></LI>
+<LI><A HREF="nrg.html">Steve Rader's NRG</A></LI>
+<LI><A HREF="fwgold.html">Gianluca Rotoni's FwGold</A></LI>
+<LI><A HREF="hoth.html">Alexander Reelsen's Hoth</A></LI>
+<LI><A HREF="nmis.html">Keith Sinclair's NMIS</A></LI>
+<LI><A HREF="bronc.html">Chris Snell's Bronc</A></LI>
+<LI><A HREF="orca.html">Blair Zajac's Orca</A></LI>
+
+<LI><A HREF="slamon.html">Frank Harper's SLAMon</A></LI>
+</UL>
+
+<P>If you know others, please let me know. I will add them to the list</P>
diff --git a/website/frontends/nmis.wml b/website/frontends/nmis.wml
new file mode 100644 (file)
index 0000000..55909c3
--- /dev/null
@@ -0,0 +1,97 @@
+#include "$(ROOT)/.wml/template.inc" section=frontends subsection=nmis
+
+<h1>NMIS</h1>
+<h3>Network Management Information System</h3>
+<p>by Keith Sinclair</p>
+
+<p>
+NMIS is a Network Management System which performs multiple functions from the OSI Network Management Functional Areas, mainly Fault and Performance Management.  The idea being to make use of all that polling for performance stats and get fault management for free.
+</p>
+
+<p>
+Sample pages are available on the NMIS home page.
+</p>
+
+<p>
+NMIS features include:
+</p>
+<ul>
+<li>
+The entire network is summarised into a single metric, which indicates reachability, availability and health of all network devices being managed by NMIS. 
+</li>
+<li>
+Summary page for entire network with reachability, availability, health, response time metrics 
+</li>
+<li>
+Summary pages of devices including device information, health graph, and interface summary 
+</li>
+<li>
+Color coded events, status for at a glance interpretation. 
+</li>
+<li>
+Graphing of Interface, CPU, Memory stats for Cisco Routers and Switches. 
+</li>
+<li>
+Graphs can be drilled into. 
+</li>
+<li>
+Graphs produced on the fly. 
+</li>
+<li>
+Graphs can have varying lengths from 2hours to 1 year 
+</li>
+<li>
+Interface statistics are returned in Utilisation not just bits per second 
+</li>
+<li>
+Response time graphed and metrics for health and availability generated from statistics collected  
+</li>
+<li>
+Integrated Fault and Performance Management 
+</li>
+<li>
+Threshold engine which send alerts on certain thresholds. 
+</li>
+<li>
+Alert events are issued for device down or interface down 
+</li>
+<li>
+Event levels are set according to how important the device is 
+</li>
+<li>
+Events are "State full" including thresholds, meaning that an event is only issued once.  
+</li>
+<li>
+Notification engine can be expanded to handle any "command line" notification method, including email, paging, 
+signs, speakers, etc 
+</li>
+<li>
+A list of current events is available and there is an escalation level and time the event has been active. 
+</li>
+<li>
+Events are logged 
+</li>
+<li>
+Outage time calculated for each down event  
+</li>
+<li>
+Planned outages can be put in so alerts are not issued 
+</li>
+<li>
+Reports for utilisation, outages, etc 
+</li>
+<li>
+Find functions which search based on strings in interface types and descriptions. 
+</li>
+<li>
+Dynamic handling of ifIndex changes and difficult SNMP interface handling 
+</li>
+<li>
+Integrated logging facility to view events and syslog messages. 
+</li>
+</ul>
+
+<p>
+NMIS is available at
+<a href="http://www.sins.com.au/nmis/">http://www.sins.com.au/nmis/</a>.
+</p>
diff --git a/website/frontends/nrg.wml b/website/frontends/nrg.wml
new file mode 100644 (file)
index 0000000..c015f42
--- /dev/null
@@ -0,0 +1,15 @@
+#include "$(ROOT)/.wml/template.inc" section=frontends subsection=nrg
+
+<H1>NRG</H1>
+<P>by Steve Rader</P>
+
+<P>The Network Resource Grapher is a MRTG-like package for the generation
+and automation of very large quantities or RRDtool databases and their
+graphs. (WiscNet has over 8,000 MRTG rype graphs)</P>
+
+<P>NRG works with several meta layers, allowing for efficient maintenance of
+very large configurations. The lowest layer of configuration uses a configuration files very much like the ones from MRTG.</P>
+
+<P>Check this <A HREF="http://teak.wiscnet.net/nrg/NoSuchSD.html">example page</A>
+or download from <A HREF="ftp://teak.wiscnet.net/pub/src/nrg">Steves ftp site</A>.
+
diff --git a/website/frontends/ntop.wml b/website/frontends/ntop.wml
new file mode 100644 (file)
index 0000000..7872ad3
--- /dev/null
@@ -0,0 +1,28 @@
+#include "$(ROOT)/.wml/template.inc" section=frontends subsection=ntop
+
+<h1>ntop</h1>
+<p>by <A HREF=mailto:deri@ntop.org>Luca Deri</A></p>
+
+<p>
+
+ntop is a web-based application for both Unix and Win32 that reports information about network traffic, similar to what the popular Unix <a HREF=http://www.groupsys.com/top/>top</A> command does. Main ntop features include:
+<ul>
+<li>Sort network traffic according to many (IP and non-IP) protocols 
+<li>Display traffic statistics 
+<li>Show IP traffic distribution among the various protocols 
+<li>Analyse IP traffic and sort it according to the source/destination 
+<li>Display IP Traffic Subnet matrix (who's talking to who?) 
+<li>Indentify network security violations
+<li>Ability to browse data from a <A HREF=http://www.wapforum.org>WAP</A> phone
+<li>Ability to access data from remote using popular languagues such as <A HREF=http://www.perl.org/>Perl</A> and <A HRFE=http://www.php.net/>PHP</A>
+</ul>
+</p>
+<p>
+By means of the ntop Perl API, it is possible to extract live traffic data from ntop and easily store them into the RRDTool. Thanks to the RRDTool, network administrators can perform advanced and long-term traffic trend analysis statistics. An early prototype of ntop+RRDTool can be found at <A HREF=http://www.ntop.org/RRD/>http://www.ntop.org/RRD/</A>. 
+</p>
+
+<p>
+
+ntop home page is <A HREF="http://www.ntop.org/">http://www.ntop.org/</a>.
+
+</p>
diff --git a/website/frontends/orca.wml b/website/frontends/orca.wml
new file mode 100644 (file)
index 0000000..2ed55d0
--- /dev/null
@@ -0,0 +1,10 @@
+#include "$(ROOT)/.wml/template.inc" section=frontends subsection=orca
+
+<H1>Orca</H1>
+<P>by Blair Zajac</P>
+
+<P>Orca is a tool useful for plotting arbitrary data from text files onto a
+directory on a Web server.</P>              
+
+<P>Available from <A HREF="http://www.gps.caltech.edu/~blair/orca/">
+Blair's Homepage</A>
diff --git a/website/frontends/remstats.wml b/website/frontends/remstats.wml
new file mode 100644 (file)
index 0000000..6c85412
--- /dev/null
@@ -0,0 +1,12 @@
+#include "$(ROOT)/.wml/template.inc" section=frontends subsection=remstats
+
+<H1>remstats</H1>
+<P>by Thomas Erskine</P>
+
+<P>Remstats is a statistics gathering and graphing system. The idea behind remstat is
+to run little data collection agents on remote machines and poll them from a central server where the data is kept.
+The datapresentation happens on the fly with automatically generated rrdcgi scripts which
+create the necessary graphs on demand. Graphs can also be created statically if running rrdcgi is not possible.
+</P>
+
+<P>For more information please go to <A HREF="http://silverlock.dgim.crc.ca/remstats/release/">Thomas's Website</A>.
diff --git a/website/frontends/rrgrapher.wml b/website/frontends/rrgrapher.wml
new file mode 100644 (file)
index 0000000..abb967e
--- /dev/null
@@ -0,0 +1,70 @@
+#include "$(ROOT)/.wml/template.inc" section=frontends subsection=rrgrapher
+
+<h1>RRGrapher</h1>
+<p>by Dave Plonka</p>
+
+<p>
+
+RRGrapher is a front-end for RRDTOOL that allows you to interactively
+build graphs of your own design.  It allows you the freedom to use any
+combination of other RRDTOOL frond-ends such as MRTG, Cricket, and
+14all to create and maintain the .rrd files, but generate graphs
+containing data from any of those sources in the same graphs.
+
+</p>
+
+<p>
+
+Unlike other RRDTOOL front-ends, RRGrapher doesn't produce ".rrd"
+files, it is used in conjunction with other popular front-ends, or
+custom front-ends of your own devising.
+
+</p>
+
+<p>
+
+RRGrapher's features include:
+
+</p>
+
+<ul>
+
+<li>
+
+A simple installation - RRGrapher is just a single CGI script.
+
+</li>
+
+<li>
+
+The ability to create graphs from data sources stored in many ".rrd"
+files, even those created by any number of different RRDTOOL
+front-ends.
+
+</li>
+
+<li>
+
+"Bookmark-able" URLs for your web browser - RRGrapher generates URLs
+which contain all the information needed to reproduce your custom
+graph, allowing you to produce them on-demand in the future.
+
+</li>
+
+<li>
+
+Display of an rrdtool command-line that you could use to generate the
+graph - RRGrapher could help you to learn how to use RRDTOOL, or will
+at least provide a command line which you can cut-and-paste to generate
+your graph in "batch" mode, for instance to display on a web page.
+
+</li>
+
+</ul>
+
+<p>
+
+RRGrapher is available at
+<a href="http://net.doit.wisc.edu/~plonka/RRGrapher/">http://net.doit.wisc.edu/~plonka/RRGrapher/</a>.
+
+</p>
diff --git a/website/frontends/slamon.wml b/website/frontends/slamon.wml
new file mode 100644 (file)
index 0000000..65d8b4e
--- /dev/null
@@ -0,0 +1,26 @@
+#include "$(ROOT)/.wml/template.inc" section=frontends subsection=slamon
+
+<h1>SLAMon</h1>
+<p>by Frank Harper</p>
+
+<p>
+SLAMon is a front-end for RRDTool that allows you to calculate working
+hour and 24-by-7 availability for anything that you're currently
+monitoring with RRDTool. The graphs and reports can cover any time
+period you're interested in: daily, monthly, yearly, etc.
+</p>
+
+<p>
+Currently SLAMon doesn't directly do any monitoring itself. For that you
+need another front-end,  to create and update RRD files for each
+resource. The measurements contained in these files are used as input by
+SLAMon to calculate availability and update the corresponding
+availability RRDs.
+</p>
+
+<p>
+
+SLAMon is available at
+<a href="http://slamon.sourceforge.net">http://slamon.sourceforge.net</a>.
+
+</p>
diff --git a/website/gallery/alex-01.bash b/website/gallery/alex-01.bash
new file mode 100644 (file)
index 0000000..e87d4bf
--- /dev/null
@@ -0,0 +1,138 @@
+#!/bin/bash
+
+# Slightly modified version of my script to check the bill
+# Alex van den Bogaerdt <alex@ergens.op.Het.Net> , oct 11, 2000
+#
+# It is hereby in the public domain.  Use at your own risk.
+#
+# Prices, bandwidth etcetera are not fetched from a database
+# in this example.  You need to modify that anyway.
+#
+# To be useful, this script needs access to an RRD which covers
+# at least two months worth of data, in the correct resolution.
+#
+# For an RRA which covers 62 days (2 months), 15 minutes per
+# sample, 512kbps:
+#
+# rrdtool create internet.rrd --step 900
+#       DS:int1in:COUNTER:1000:0:64000 \
+#       DS:int1out:COUNTER:1000:0:64000 \
+#       RRA:AVERAGE:0.5:1:6000
+
+exec 2>&1
+
+FIXEDk=64
+LIMITk=512
+FIXED=$((FIXEDk*1000))
+LIMIT=$((LIMITk*1000))
+
+ACCESSLINE=2585.05
+FIXEDPRICE=530.00
+PERinb=9.50
+PERout=0.95
+
+RRD=/home/rrdtool/rrddata/internet.rrd
+
+/bin/rm -f /home/rrdtool/rrdpng/internet*.png
+
+echo 'Content-Type: text/html'
+echo ''
+
+export DATUM=`/bin/date +date/time:\ %Y%m%d\ %H:%M:%S`
+export FILENAME=`/bin/date +%s`$$
+
+#
+# Calculate 1st of the month
+#
+# Tip, use a script here that can parse QUERY_STRING.  This allows you
+# to setup some links with varying time spans.  You will be interested
+# in intermediate results; such as "what would the bill be like if the
+# traffic would be like this the whole month long".
+#
+FIRST=`/bin/date +%Y%m01`
+LAST=`date -d $FIRST +%s`
+START=end-1m
+
+#
+# And finally the output:
+#
+echo '<HTML><HEAD><TITLE>Internet</TITLE></HEAD>'
+echo '<BODY text="#FFFFFF" bgcolor="#000000" alink="#FFFF00" vlink="#FF00FF" link="#FFFF00">'
+echo '<TABLE border=0 align=center width=760 cellpadding=0 cellspacing=0>'
+echo -n '<TR><TD>'
+echo 'Our internet provider will bill us for the amount of bandwidth used
+       per month.  Part of this bandwidth is prepaid, the rest is paid for
+       on a kilobit-per-second basis.  Bandwidth used outside the red lines
+       is expensive as this needs to be paid for separately in addition to
+       the fee for the connection itself.'
+echo '</TD></TR>'
+
+echo '<TR><TD><HR></TR>'
+
+echo -n '<TR><TD>'
+
+# Easy workaround for avoiding caches.  Just alter the filename ...
+/usr/local/bin/rrdtool graph "/home/rrdtool/rrdpng/internet-b-$FILENAME.png"           \
+       --title="Internet Router, Fixed=$FIXED   $DATUM"                \
+       --end "${LAST}" --start "${START}"                              \
+       --vertical-label "bits per second"                              \
+       --imginfo '<IMG src="/rrdpng/%s" WIDTH="%lu" HEIGHT="%lu">'     \
+       --imgformat PNG                                                 \
+       --y-grid 64000:2                                                \
+       --lower-limit -$LIMIT                                           \
+       --upper-limit  $LIMIT                                           \
+       --color CANVAS#000000                                           \
+       --color BACK#101010                                             \
+       --color FONT#C0C0C0                                             \
+       --color MGRID#80C080                                            \
+       --color GRID#808020                                             \
+       --color FRAME#808080                                            \
+       --color ARROW#FFFFFF                                            \
+       --color SHADEA#404040                                           \
+       --color SHADEB#404040                                           \
+       --height 256                                                    \
+       --width 480                                                     \
+       DEF:bytesinb="$RRD":int1in:AVERAGE                              \
+       DEF:bytesout="$RRD":int1out:AVERAGE                             \
+       CDEF:inb=bytesinb,8,*                                           \
+       CDEF:out=bytesout,8,*                                           \
+       CDEF:Iinb=inb,$FIXED,LE,inb,$FIXED,IF                           \
+       CDEF:Iout=out,$FIXED,LE,out,$FIXED,IF                           \
+       CDEF:Oinb=inb,$FIXED,LE,0,inb,$FIXED,-,IF                       \
+       CDEF:Oout=out,$FIXED,LE,0,out,$FIXED,-,IF                       \
+       CDEF:Pinb=Oinb,$PERinb,*,1000,/                                 \
+       CDEF:Pout=Oout,$PERout,*,1000,/                                 \
+       CDEF:Ptotal=Pinb,Pout,$FIXEDPRICE,$ACCESSLINE,+,+,+             \
+       CDEF:NIinb=Iinb,0,EQ,Iinb,Iinb,-1,*,IF                          \
+       CDEF:NOinb=Oinb,0,EQ,Oinb,Oinb,-1,*,IF                          \
+       HRULE:$FIXED#FF0000:"Outside these lines costs extra per kbps"  \
+       COMMENT:"F $PERout for outgoing, F $PERinb for incoming\n"      \
+       COMMENT:"\n"                                                    \
+       COMMENT:"traffic      "                                         \
+       COMMENT:"Max          Min         Average      UBB tarif  (  price   )    Last\n"\
+       AREA:Iout#00C000:"from HC\:"                                    \
+       STACK:Oout#C0FF00                                               \
+       GPRINT:out:MAX:"%6.2lf %sbps"                                   \
+       GPRINT:out:MIN:"%6.2lf %sbps"                                   \
+       GPRINT:out:AVERAGE:"%6.2lf %sbps"                               \
+       GPRINT:Oout:AVERAGE:"%6.2lf %sbps"                              \
+       GPRINT:Pout:AVERAGE:"(Fl%8.2lf)"                                \
+       GPRINT:out:LAST:"%6.2lf %sbps\\n"                               \
+       AREA:NIinb#0000FF:"into HC\:"                                   \
+       STACK:NOinb#C080FF                                              \
+       GPRINT:inb:MAX:"%6.2lf %sbps"                                   \
+       GPRINT:inb:MIN:"%6.2lf %sbps"                                   \
+       GPRINT:inb:AVERAGE:"%6.2lf %sbps"                               \
+       GPRINT:Oinb:AVERAGE:"%6.2lf %sbps"                              \
+       GPRINT:Pinb:AVERAGE:"(Fl%8.2lf)"                                \
+       GPRINT:inb:LAST:"%6.2lf %sbps\\n"                               \
+       HRULE:$LIMIT#000000:"Access Line                              " \
+       COMMENT:"                    Fl $ACCESSLINE   $LIMITk.00 kbps\n"\
+       HRULE:-$FIXED#FF0000:"Fixed tarif                              "\
+       COMMENT:"                    Fl  $FIXEDPRICE    $FIXEDk.00 kbps\n"\
+       COMMENT:"The bill should read, approximately,                 " \
+       GPRINT:Ptotal:AVERAGE:"         Fl %8.2lf\n"            \
+       | sed 's/[0-9]*x[0-9]*//'
+       echo '</TR></TABLE>'
+echo '</BODY></HTML>'
+----cut here----
diff --git a/website/gallery/alex-01.png b/website/gallery/alex-01.png
new file mode 100644 (file)
index 0000000..5091082
Binary files /dev/null and b/website/gallery/alex-01.png differ
diff --git a/website/gallery/alex-01.wml b/website/gallery/alex-01.wml
new file mode 100644 (file)
index 0000000..b609dbe
--- /dev/null
@@ -0,0 +1,32 @@
+#include "$(ROOT)/.wml/template.inc" section=gallery subsection=alex-01
+
+<H1>Billing Cross Check</H1>
+
+<P>by <A HREF="mailto:alex@ergens.op.Het.Net">Alex van den Bogaerdt</A></P>
+
+<P>
+Our internet provider does usage based billing.  Part of the bandwidth
+is at a fixed price, the remaining bandwidth is subject to UBB.</P>
+
+<P>The UBB works as follows:  every sample period the current bandwidth is
+calculated.  When it is above the UBB rate, the excess is used to build
+an average over a month.  This average is used to calculate the bill.</P>
+
+<P>I do trust the provider however I do not necessarily trust their billing
+system.  Therefore I need a way to check the bill.</P>
+
+<P>Normal usage would be to graph from the 1st of the previous month until
+the 1st of the current month.  RRDtool does all the calculations, using
+CDEF statements.  I use bash to collect the prices from a database, then
+start the RRDtool script with those variables filled in.</P>
+
+<P>The data that I used to create the image has been altered to protect
+our privacy and the providers pricing policy (meaning: its bogus data).
+It does show however how it works.  If I create the graph using correct
+values for start and end times, the only difference should be caused by
+rounding and by different polling times.</P>
+
+<P><IMG SRC="alex-01.png"></P>
+
+<P>If you are interested in the script generating this, get it
+<A HREF="alex-01.bash">here</A>.</P>
diff --git a/website/gallery/bkw-01.gif b/website/gallery/bkw-01.gif
new file mode 100644 (file)
index 0000000..f36e98a
Binary files /dev/null and b/website/gallery/bkw-01.gif differ
diff --git a/website/gallery/bkw-01.pl b/website/gallery/bkw-01.pl
new file mode 100644 (file)
index 0000000..2fec453
--- /dev/null
@@ -0,0 +1,434 @@
+#!/usr/local/bin/perl -w
+#From: Brian K. West <brian@bkw.org>
+#
+# snmpwalks all nas boxen specified in the configuration file,
+# tallies the number of connect speeds, and returns a percentage
+# of various data sets in the form:
+#
+# N:blah:blah:blah:blah:blah:blah
+#
+# requires a configuration file specified by $naslist
+# config file format is:
+# nas name:community
+# i.e.
+# pm1-stigler:communitystring
+#
+#
+# mad propz to teep
+# Need to redo graphing but hey it works..
+#
+use lib qw( /usr/local/rrdtool-1.0.8/lib/perl ../lib/perl );
+use RRDs;
+use strict;
+
+my($totlines)   = 248; # Total Ports
+my($workdir) = "/export/home/brian/public_html"; # Directory where you want
+the images copied too
+my($uptime) = `uptime`; # Uptime is printed on graph
+my($rrd) = "overall.rrd"; # RRD file name
+my($target) = "overall"; # Target name(Used for Images)
+my($option) = "GAUGE"; # This can get COUNTER, GAUGE
+my($naslist) = "./nas.dat"; # path and name of configuration file
+my($domain) = "cwis.net"; # your domain name (used for snmpwalk)
+my($path_to_snmpwalk) = "/usr/local/bin"; # no trailing slash
+
+# speed ranges are totally dynamic
+# ranges are  range[x] to ((range[x+1]) - 1)
+# i.e.  1 to 14399, 14400 to 28799, 28800 to 33599, et al
+#
+
+
+my(@speed_range) = qw(1 14400 28800 33600 40000 43000 45000 50000 65000);
+
+### nothing else should need configured below this line ###
+my($cpyfiles);
+my($ERROR);
+my($rrdata);
+my($filetest);
+
+$filetest = stat($rrd);
+if(!$filetest) {
+RRDs::create ($rrd,  "--step",300,
+        "DS:a:$option:600:0:100",
+        "DS:b:$option:600:0:100",
+        "DS:c:$option:600:0:100",
+        "DS:d:$option:600:0:100",
+        "DS:e:$option:600:0:100",
+        "DS:f:$option:600:0:100",
+        "DS:g:$option:600:0:100",
+        "DS:h:$option:600:0:100",
+        "DS:i:$option:600:0:100",
+        "DS:j:$option:600:0:100",
+        "RRA:AVERAGE:0.5:1:600",
+        "RRA:AVERAGE:0.5:6:700",
+        "RRA:AVERAGE:0.5:24:775",
+        "RRA:AVERAGE:0.5:288:797",
+        "RRA:MAX:0.5:1:600 ",
+        "RRA:MAX:0.5:6:700 ",
+        "RRA:MAX:0.5:24:775",
+        "RRA:MAX:0.5:288:797")
+;
+
+my $ERROR = RRDs::error;
+die "$0: unable to create `$rrd': $ERROR\n" if $ERROR;
+}
+
+my($num_ranges) = 0;
+$num_ranges = @speed_range;
+my(%speeds);
+
+open(NASLIST, "<$naslist");
+my($line);
+my($foo) = 0;
+my(@nases);
+my(%comms);
+my(@raw_data);
+my($line_count) = 0;
+
+while(defined ($line = <NASLIST>)) {
+chop $line;
+my($nas,$community) = split(/:/,$line);
+$nases[$foo++] = $nas;
+$comms{$nas} = $community;
+}
+
+my($speed_list);
+foreach $speed_list (@speed_range) {
+$speeds{$speed_list} = 0;
+}
+undef($speed_list);
+
+my(@data,$cnt);
+
+foreach $cnt (0 .. $#nases) {
+my($nas) = $nases[$cnt];
+@data = `$path_to_snmpwalk/snmpwalk -v 1 $nas.$domain $comms{$nas}
+interfaces.ifTable.ifEntry.ifSpeed`;
+
+
+my($blah);
+foreach $blah (@data) {
+my($a);
+chomp $blah;
+(undef,$a) = split(/:/,$blah);
+$a =~ s/ file://g;
+if($a > 1 && $a < 65000) {
+$raw_data[$line_count++] = $a;
+}
+}
+
+}
+
+my($foo3) = 0;
+my($foo2);
+foreach $foo2 (@raw_data) {
+chomp $foo2;
+my($carrier);
+($carrier = $foo2) =~ s/ file://g;
+my($test);
+my($i) = 0;
+foreach $i (0 .. $num_ranges) {
+if($i+1 < $num_ranges && ($carrier >= $speed_range[$i] && $carrier <=
+(($speed_range[$i+1])-1)))
+{
+$speeds{$speed_range[$i]}++;
+$foo3++;
+
+}
+
+}
+}
+
+my($total,$num) = 0;
+my($key,$value);
+$rrdata = "N";
+#print "N";
+foreach $key (sort keys %speeds) {
+$num = $speeds{$key};
+$total = ($num/$line_count)*100;
+$total = sprintf("%3.2f",$total);
+$rrdata .=":$total";
+}
+#print "$rrdata";
+my($utilization);
+$utilization = ($foo3/$totlines)*100;
+$utilization = sprintf("%3.2f",$utilization);
+$rrdata .=":$utilization";
+close(NASLIST);
+
+RRDs::update $rrd, "$rrdata";
+        if ($ERROR = RRDs::error) {
+                die "$0: unable to update `$rrd': $ERROR\n";
+        };
+
+RRDs::graph "$target-day.gif",
+        "--start", " -86400",
+        "--title", "Modem Carrier Stats.(Daily) - $target",
+        "--rigid",
+        "--width=600",
+        "--height=250",
+        "--upper-limit","100",
+        "--lower-limit","0",
+        "--vertical-label","Percent(%)",
+        "DEF:a=$rrd:a:AVERAGE",
+        "DEF:b=$rrd:b:AVERAGE",
+        "DEF:c=$rrd:c:AVERAGE",
+        "DEF:d=$rrd:d:AVERAGE",
+        "DEF:e=$rrd:e:AVERAGE",
+        "DEF:f=$rrd:f:AVERAGE",
+        "DEF:g=$rrd:g:AVERAGE",
+        "DEF:h=$rrd:h:AVERAGE",
+"DEF:j=$rrd:j:AVERAGE",
+        "AREA:a#FFFF00:    1-14399",
+        "GPRINT:a:LAST:Current \\: %8.2lf %s",
+        "GPRINT:a:AVERAGE:Avg \\: %8.2lf %s",
+        "GPRINT:a:MIN:Min \\: %8.2lf %s",
+        "GPRINT:a:MAX:Max \\: %8.2lf %s\\n",
+        "STACK:b#C0C0C0:14400-28799",
+        "GPRINT:b:LAST:Current \\: %8.2lf %s",
+        "GPRINT:b:AVERAGE:Avg \\: %8.2lf %s",
+        "GPRINT:b:MIN:Min \\: %8.2lf %s",
+        "GPRINT:b:MAX:Max \\: %8.2lf %s\\n",
+        "STACK:c#FF7E6C:28800-33599",
+        "GPRINT:c:LAST:Current \\: %8.2lf %s",
+        "GPRINT:c:AVERAGE:Avg \\: %8.2lf %s",
+        "GPRINT:c:MIN:Min \\: %8.2lf %s",
+        "GPRINT:c:MAX:Max \\: %8.2lf %s\\n",
+        "STACK:d#6DC8FE:33600-39999",
+        "GPRINT:d:LAST:Current \\: %8.2lf %s",
+        "GPRINT:d:AVERAGE:Avg \\: %8.2lf %s",
+        "GPRINT:d:MIN:Min \\: %8.2lf %s",
+        "GPRINT:d:MAX:Max \\: %8.2lf %s\\n",
+        "STACK:e#00FF00:40000-42999",
+        "GPRINT:e:LAST:Current \\: %8.2lf %s",
+        "GPRINT:e:AVERAGE:Avg \\: %8.2lf %s",
+        "GPRINT:e:MIN:Min \\: %8.2lf %s",
+        "GPRINT:e:MAX:Max \\: %8.2lf %s\\n",
+        "STACK:f#FF00FF:43000-44999",
+        "GPRINT:f:LAST:Current \\: %8.2lf %s",
+        "GPRINT:f:AVERAGE:Avg \\: %8.2lf %s",
+        "GPRINT:f:MIN:Min \\: %8.2lf %s",
+        "GPRINT:f:MAX:Max \\: %8.2lf %s\\n",
+        "STACK:g#FF0000:45000-49999",
+        "GPRINT:g:LAST:Current \\: %8.2lf %s",
+        "GPRINT:g:AVERAGE:Avg \\: %8.2lf %s",
+        "GPRINT:g:MIN:Min \\: %8.2lf %s",
+        "GPRINT:g:MAX:Max \\: %8.2lf %s\\n",
+        "STACK:h#4444FF:50000-65000",
+        "GPRINT:h:LAST:Current \\: %8.2lf %s",
+        "GPRINT:h:AVERAGE:Avg \\: %8.2lf %s",
+        "GPRINT:h:MIN:Min \\: %8.2lf %s",
+        "GPRINT:h:MAX:Max \\: %8.2lf %s\\n",
+"LINE1:j#000000:Utilization",
+        "GPRINT:j:LAST:Current \\: %8.2lf %s",
+        "GPRINT:j:AVERAGE:Avg \\: %8.2lf %s",
+        "GPRINT:j:MIN:Min \\: %8.2lf %s",
+        "GPRINT:j:MAX:Max \\: %8.2lf %s\\n",
+        "COMMENT:\\n",
+        "COMMENT:                                 Graph Shows Percent of
+user connected at X Speed.\\n",
+        "COMMENT:\\n",
+        "COMMENT:                  $uptime",
+;
+if ($ERROR = RRDs::error) {
+  print "ERROR: $ERROR\n";
+};
+RRDs::graph "$target-week.gif",
+        "--start", " -604800",
+        "--title", "Modem Carrier Stats.(Weekly) - $target",
+        "--rigid",
+        "--width=600",
+        "--height=250",
+        "--upper-limit","100",
+        "--lower-limit","0",
+        "--vertical-label","Percent(%)",
+        "DEF:a=$rrd:a:AVERAGE",
+        "DEF:b=$rrd:b:AVERAGE",
+        "DEF:c=$rrd:c:AVERAGE",
+        "DEF:d=$rrd:d:AVERAGE",
+        "DEF:e=$rrd:e:AVERAGE",
+        "DEF:f=$rrd:f:AVERAGE",
+        "DEF:g=$rrd:g:AVERAGE",
+        "DEF:h=$rrd:h:AVERAGE",
+"DEF:j=$rrd:j:AVERAGE",
+        "AREA:a#FFFF00:    1-14399",
+        "GPRINT:a:AVERAGE:Avg \\: %8.2lf %s",
+        "GPRINT:a:MIN:Min \\: %8.2lf %s",
+        "GPRINT:a:MAX:Max \\: %8.2lf %s\\n",
+        "STACK:b#C0C0C0:14400-28799",
+        "GPRINT:b:AVERAGE:Avg \\: %8.2lf %s",
+        "GPRINT:b:MIN:Min \\: %8.2lf %s",
+        "GPRINT:b:MAX:Max \\: %8.2lf %s\\n",
+        "STACK:c#FF7E6C:28800-33599",
+        "GPRINT:c:AVERAGE:Avg \\: %8.2lf %s",
+        "GPRINT:c:MIN:Min \\: %8.2lf %s",
+        "GPRINT:c:MAX:Max \\: %8.2lf %s\\n",
+        "STACK:d#6DC8FE:33600-39999",
+        "GPRINT:d:AVERAGE:Avg \\: %8.2lf %s",
+        "GPRINT:d:MIN:Min \\: %8.2lf %s",
+        "GPRINT:d:MAX:Max \\: %8.2lf %s\\n",
+        "STACK:e#00FF00:40000-42999",
+        "GPRINT:e:AVERAGE:Avg \\: %8.2lf %s",
+        "GPRINT:e:MIN:Min \\: %8.2lf %s",
+        "GPRINT:e:MAX:Max \\: %8.2lf %s\\n",
+        "STACK:f#FF00FF:43000-44999",
+        "GPRINT:f:AVERAGE:Avg \\: %8.2lf %s",
+        "GPRINT:f:MIN:Min \\: %8.2lf %s",
+        "GPRINT:f:MAX:Max \\: %8.2lf %s\\n",
+        "STACK:g#FF0000:45000-49999",
+        "GPRINT:g:AVERAGE:Avg \\: %8.2lf %s",
+        "GPRINT:g:MIN:Min \\: %8.2lf %s",
+        "GPRINT:g:MAX:Max \\: %8.2lf %s\\n",
+        "STACK:h#4444FF:50000-65000",
+        "GPRINT:h:AVERAGE:Avg \\: %8.2lf %s",
+        "GPRINT:h:MIN:Min \\: %8.2lf %s",
+        "GPRINT:h:MAX:Max \\: %8.2lf %s\\n",
+"LINE1:j#000000:Utilization",
+        "GPRINT:j:AVERAGE:Avg \\: %8.2lf %s",
+        "GPRINT:j:MIN:Min \\: %8.2lf %s",
+        "GPRINT:j:MAX:Max \\: %8.2lf %s\\n",
+        "COMMENT:\\n",
+        "COMMENT:                                 Graph Shows Percent of
+user connected at X Speed.\\n",
+        "COMMENT:\\n",
+        "COMMENT:                  $uptime",
+;
+if ($ERROR = RRDs::error) {
+  print "ERROR: $ERROR\n";
+};
+RRDs::graph "$target-month.gif",
+        "--start", " -2600640",
+        "--title", "Modem Carrier Stats.(Monthly) - $target",
+        "--rigid",
+        "--width=600",
+        "--height=250",
+        "--upper-limit","100",
+        "--lower-limit","0",
+        "--vertical-label","Percent(%)",
+        "DEF:a=$rrd:a:AVERAGE",
+        "DEF:b=$rrd:b:AVERAGE",
+        "DEF:c=$rrd:c:AVERAGE",
+        "DEF:d=$rrd:d:AVERAGE",
+        "DEF:e=$rrd:e:AVERAGE",
+        "DEF:f=$rrd:f:AVERAGE",
+        "DEF:g=$rrd:g:AVERAGE",
+        "DEF:h=$rrd:h:AVERAGE",
+"DEF:j=$rrd:j:AVERAGE",
+        "AREA:a#FFFF00:    1-14399",
+        "GPRINT:a:AVERAGE:Avg \\: %8.2lf %s",
+        "GPRINT:a:MIN:Min \\: %8.2lf %s",
+        "GPRINT:a:MAX:Max \\: %8.2lf %s\\n",
+        "STACK:b#C0C0C0:14400-28799",
+        "GPRINT:b:AVERAGE:Avg \\: %8.2lf %s",
+        "GPRINT:b:MIN:Min \\: %8.2lf %s",
+        "GPRINT:b:MAX:Max \\: %8.2lf %s\\n",
+        "STACK:c#FF7E6C:28800-33599",
+        "GPRINT:c:AVERAGE:Avg \\: %8.2lf %s",
+        "GPRINT:c:MIN:Min \\: %8.2lf %s",
+        "GPRINT:c:MAX:Max \\: %8.2lf %s\\n",
+        "STACK:d#6DC8FE:33600-39999",
+        "GPRINT:d:AVERAGE:Avg \\: %8.2lf %s",
+        "GPRINT:d:MIN:Min \\: %8.2lf %s",
+        "GPRINT:d:MAX:Max \\: %8.2lf %s\\n",
+        "STACK:e#00FF00:40000-42999",
+        "GPRINT:e:AVERAGE:Avg \\: %8.2lf %s",
+        "GPRINT:e:MIN:Min \\: %8.2lf %s",
+        "GPRINT:e:MAX:Max \\: %8.2lf %s\\n",
+        "STACK:f#FF00FF:43000-44999",
+        "GPRINT:f:AVERAGE:Avg \\: %8.2lf %s",
+        "GPRINT:f:MIN:Min \\: %8.2lf %s",
+        "GPRINT:f:MAX:Max \\: %8.2lf %s\\n",
+        "STACK:g#FF0000:45000-49999",
+        "GPRINT:g:AVERAGE:Avg \\: %8.2lf %s",
+        "GPRINT:g:MIN:Min \\: %8.2lf %s",
+        "GPRINT:g:MAX:Max \\: %8.2lf %s\\n",
+        "STACK:h#4444FF:50000-65000",
+        "GPRINT:h:AVERAGE:Avg \\: %8.2lf %s",
+        "GPRINT:h:MIN:Min \\: %8.2lf %s",
+        "GPRINT:h:MAX:Max \\: %8.2lf %s\\n",
+"LINE1:j#000000:Utilization",
+        "GPRINT:j:AVERAGE:Avg \\: %8.2lf %s",
+        "GPRINT:j:MIN:Min \\: %8.2lf %s",
+        "GPRINT:j:MAX:Max \\: %8.2lf %s\\n",
+        "COMMENT:\\n",
+        "COMMENT:                                 Graph Shows Percent of
+user connected at X Speed.\\n",
+        "COMMENT:\\n",
+        "COMMENT:                  $uptime",
+;
+if ($ERROR = RRDs::error) {
+  print "ERROR: $ERROR\n";
+};
+RRDs::graph "$target-year.gif",
+        "--start", " -31557600",
+        "--title", "Modem Carrier Stats.(Yearly) - $target",
+        "--rigid",
+        "--width=600",
+        "--height=250",
+        "--upper-limit","100",
+        "--lower-limit","0",
+        "--vertical-label","Percent(%)",
+        "DEF:a=$rrd:a:AVERAGE",
+        "DEF:b=$rrd:b:AVERAGE",
+        "DEF:c=$rrd:c:AVERAGE",
+        "DEF:d=$rrd:d:AVERAGE",
+        "DEF:e=$rrd:e:AVERAGE",
+        "DEF:f=$rrd:f:AVERAGE",
+        "DEF:g=$rrd:g:AVERAGE",
+        "DEF:h=$rrd:h:AVERAGE",
+"DEF:j=$rrd:j:AVERAGE",
+        "AREA:a#FFFF00:    1-14399",
+        "GPRINT:a:AVERAGE:Avg \\: %8.2lf %s",
+        "GPRINT:a:MIN:Min \\: %8.2lf %s",
+        "GPRINT:a:MAX:Max \\: %8.2lf %s\\n",
+        "STACK:b#C0C0C0:14400-28799",
+        "GPRINT:b:AVERAGE:Avg \\: %8.2lf %s",
+        "GPRINT:b:MIN:Min \\: %8.2lf %s",
+        "GPRINT:b:MAX:Max \\: %8.2lf %s\\n",
+        "STACK:c#FF7E6C:28800-33599",
+        "GPRINT:c:AVERAGE:Avg \\: %8.2lf %s",
+        "GPRINT:c:MIN:Min \\: %8.2lf %s",
+        "GPRINT:c:MAX:Max \\: %8.2lf %s\\n",
+        "STACK:d#6DC8FE:33600-39999",
+        "GPRINT:d:AVERAGE:Avg \\: %8.2lf %s",
+        "GPRINT:d:MIN:Min \\: %8.2lf %s",
+        "GPRINT:d:MAX:Max \\: %8.2lf %s\\n",
+        "STACK:e#00FF00:40000-42999",
+        "GPRINT:e:AVERAGE:Avg \\: %8.2lf %s",
+        "GPRINT:e:MIN:Min \\: %8.2lf %s",
+        "GPRINT:e:MAX:Max \\: %8.2lf %s\\n",
+        "STACK:f#FF00FF:43000-44999",
+        "GPRINT:f:AVERAGE:Avg \\: %8.2lf %s",
+        "GPRINT:f:MIN:Min \\: %8.2lf %s",
+        "GPRINT:f:MAX:Max \\: %8.2lf %s\\n",
+        "STACK:g#FF0000:45000-49999",
+        "GPRINT:g:AVERAGE:Avg \\: %8.2lf %s",
+        "GPRINT:g:MIN:Min \\: %8.2lf %s",
+        "GPRINT:g:MAX:Max \\: %8.2lf %s\\n",
+        "STACK:h#4444FF:50000-65000",
+        "GPRINT:h:AVERAGE:Avg \\: %8.2lf %s",
+        "GPRINT:h:MIN:Min \\: %8.2lf %s",
+        "GPRINT:h:MAX:Max \\: %8.2lf %s\\n",
+"LINE1:j#000000:Utilization",
+        "GPRINT:j:AVERAGE:Avg \\: %8.2lf %s",
+        "GPRINT:j:MIN:Min \\: %8.2lf %s",
+        "GPRINT:j:MAX:Max \\: %8.2lf %s\\n",
+        "COMMENT:\\n",
+        "COMMENT:                                 Graph Shows Percent of
+user connected at X Speed.\\n",
+        "COMMENT:\\n",
+        "COMMENT:                  $uptime",
+;
+if ($ERROR = RRDs::error) {
+  print "ERROR: $ERROR\n";
+};
+
+
+$cpyfiles = `cp -f *.gif $workdir`;
+exit;
+
+
+
+
+
+
diff --git a/website/gallery/bkw-01.wml b/website/gallery/bkw-01.wml
new file mode 100644 (file)
index 0000000..31ad110
--- /dev/null
@@ -0,0 +1,21 @@
+#include "$(ROOT)/.wml/template.inc" section=gallery subsection=bkw-01
+
+<H1>Portmaster</H1>
+
+<P>by <A HREF="mailto:bkw@bkw.org">Brian K. West</A></P>
+
+<P>I work for an ISP in southeastern Oklahoma,  One day the owner wanted to
+know the percentages of users connected at a certain carrier speeds.  So him
+and I started working on a perl script that would do this job.  What we did
+is setup a perl script that would snmpwalk every Lucent Portmaster we had
+and tally up the results and build the graph.  I also added the percent of
+totally port utilization with the black line on the graph.  As we found out
+less than 50% of our users do not connect at v.90 speeds.  I love rrdtool I
+write all of my rrdtool probes in perl and use all the perl bindings the
+add/build/update/graph... Its really quite easy once I realized how it
+worked.  MRTG was easy to learn but rrdtool was a totally different ball
+game.</P>
+
+<P><A HREF="bkw-01.pl">The Script for those who care</A></P>
+
+<P><IMG SRC="bkw-01.gif"></P>
diff --git a/website/gallery/blair-01-a.png b/website/gallery/blair-01-a.png
new file mode 100644 (file)
index 0000000..442a56b
Binary files /dev/null and b/website/gallery/blair-01-a.png differ
diff --git a/website/gallery/blair-01-b.png b/website/gallery/blair-01-b.png
new file mode 100644 (file)
index 0000000..0327407
Binary files /dev/null and b/website/gallery/blair-01-b.png differ
diff --git a/website/gallery/blair-01-c.png b/website/gallery/blair-01-c.png
new file mode 100644 (file)
index 0000000..d360a88
Binary files /dev/null and b/website/gallery/blair-01-c.png differ
diff --git a/website/gallery/blair-01-d.png b/website/gallery/blair-01-d.png
new file mode 100644 (file)
index 0000000..02d1968
Binary files /dev/null and b/website/gallery/blair-01-d.png differ
diff --git a/website/gallery/blair-01-e.png b/website/gallery/blair-01-e.png
new file mode 100644 (file)
index 0000000..749b496
Binary files /dev/null and b/website/gallery/blair-01-e.png differ
diff --git a/website/gallery/blair-01-f.png b/website/gallery/blair-01-f.png
new file mode 100644 (file)
index 0000000..afefeaf
Binary files /dev/null and b/website/gallery/blair-01-f.png differ
diff --git a/website/gallery/blair-01.wml b/website/gallery/blair-01.wml
new file mode 100644 (file)
index 0000000..d271246
--- /dev/null
@@ -0,0 +1,62 @@
+#include "$(ROOT)/.wml/template.inc" section=gallery subsection=blair-01
+
+<H1>Comprehensive\nMeasurements\nof a Web Server</H1>
+
+<P>by <A HREF="mailto:blair@akamai.com">Blair Zajac</A></P>
+
+<P><a href="http://www.gps.caltech.edu/~blair/orca/">Orca</a> is a
+general purpose tool for taking arbitrary numerical data in text files
+to generate daily through yearly plots.</P>
+
+<P>For sites with more than one system, Orca allows comparisons
+between different measurements on the same system and plotting the
+same measurement from different systems on the same page.  This allows
+easy problem identification and debugging when a working system is
+compared to a non-working system.</P>
+
+<P>The Orca plotting system is broken into two parts, a data
+measurement tool and the plotting tool.  One data gathering tool,
+orcallator.se, currently consists of a program that only runs on
+Solaris hosts and gathers CPU, disk, network, memory, etc usage
+information.  Orcallator.se is a single process program that gathers
+all system statistics, so it's nice to a busy system in that it
+doesn't impact the system by spawning many subprocesses as a shell
+script would.  Orcallator.se places the gathered information in a
+space separated text file.</P>
+
+<P>Orca, the Perl plotting tool, then reads these text files from one
+or most hosts and generates RRD files and an HTML tree of plots and
+pages.  Any data gathering tool that outputs data in an acceptable
+format can be used with Orca.  Orca reads a configuration file that
+specifies which data to read from the input text files and how to plot
+it.</P>
+
+<P>The plots below show a subset of the measurements for a single
+Solaris host running at Yahoo!/GeoCities.  Visit <a
+href="http://www.gps.caltech.edu/~blair/orca/orca-example/">this
+site</a> for a more complete example.</P>
+
+<img
+ src="blair-01-a.png"
+ alt="Average # Processes in Run Queue">
+<br>
+
+<img alt="CPU Usage"
+ src="blair-01-b.png">
+<br>
+
+<img alt="Web Server Hit Rate"
+ src="blair-01-c.png">
+<br>
+
+<img alt="Web Server File Size"
+ src="blair-01-d.png">
+<br>
+
+<img alt="Interface Bits Per Second"
+ src="blair-01-e.png">
+<br>
+
+<img alt="Disk Run Percent"
+ src="blair-01-f.png">
+<br>
diff --git a/website/gallery/chris-01.wml b/website/gallery/chris-01.wml
new file mode 100644 (file)
index 0000000..6d60b5f
--- /dev/null
@@ -0,0 +1,42 @@
+#include "$(ROOT)/.wml/template.inc" section=gallery subsection=chris-01
+
+<H1>Weather Station</H1>
+
+<P>by <A HREF="mailto:chris@bikeworld.com">Chris Snell</A></P>
+
+<P>I work for Weathertools.com, here in San Antonio, TX USA.  Among other
+things, we sell weather stations that can be mounted on a roof of a
+building.  Some of these weather stations are wireless and solar powered
+and are able to measure temperature, wind speed, wind direction,
+barometric pressure and rainfall, as well as other things.  We have a
+demonstation unit up on our roof and I wanted to put some graphs of the
+readings on the web.  We've been graphing the readings using a
+Windows-based program but its <A
+HREF="http://www.bikeworld.com/trend.htm">graphs</a> just don't look all
+that cool.  I thought I could improve on them, so I scoured the 'Net and
+found some <A
+HREF="http://www.rdrop.com/cgi-bin/wiz3web">software</a> written by a guy
+named Alan Batie from Portland, Oregon USA.  His software (written on a
+FreeBSD box) pulls the data from the weather station over the station's
+serial port.  Alan is currently <A
+HREF="http://www.rdrop.com/mrtg/weather.html">graphing</A> his weather
+readings with MRTG but I wanted to take it a step further and graph mine
+with RRDtool.  So, I wrote a quick little Perl hack that reads the data
+from Alan's utility and then sends the data, via a HTTP request, to our
+colocated servers downtown.  The HTTP request is made to another Perl hack
+I wrote which runs under mod_perl.  This script takes the readings and
+stores them in an RRD file using the shared RRD Perl module, RRDs.  
+Finally, I needed a way to graph this data.  To do this, I used a program
+called <A HREF="http://bronc.blueaspen.com">Bronc</A>, which I wrote last
+year.  Bronc reads its configuration from a template and then generates
+graphs in real time (on-the-fly) using the RRDs Perl module.</P>
+
+<P><A
+HREF="http://bronc.blueaspen.com/breakdown.html?definition=5&dfile=definitions">
+<IMG SRC="chris-01temp.png" BORDER=0></A></P>
+
+<P><A
+HREF="http://bronc.blueaspen.com/breakdown.html?definition=6&dfile=definitions">
+<IMG SRC="chris-01wind.png" WIDTH=595 HEIGHT=286 BORDER=0></A>
+</P>
+
diff --git a/website/gallery/chris-01temp.png b/website/gallery/chris-01temp.png
new file mode 100644 (file)
index 0000000..5dd3390
Binary files /dev/null and b/website/gallery/chris-01temp.png differ
diff --git a/website/gallery/chris-01wind.png b/website/gallery/chris-01wind.png
new file mode 100644 (file)
index 0000000..7caeb5a
Binary files /dev/null and b/website/gallery/chris-01wind.png differ
diff --git a/website/gallery/colleen-01.gif b/website/gallery/colleen-01.gif
new file mode 100644 (file)
index 0000000..abac143
Binary files /dev/null and b/website/gallery/colleen-01.gif differ
diff --git a/website/gallery/colleen-01.wml b/website/gallery/colleen-01.wml
new file mode 100644 (file)
index 0000000..f73016b
--- /dev/null
@@ -0,0 +1,20 @@
+#include "$(ROOT)/.wml/template.inc" section=gallery subsection=colleen-01
+
+<H1>Space Shuttle</H1>
+
+<P>by <A HREF="mailto:cmshanno@ucsd.edu">Colleen M. Shannon</A></P>
+
+<P>
+I worked for a NASA project called <A
+HREF="http://www.earthkam.ucsd.edu">EarthKAM</A> in southern California.
+Our project must monitor space shuttle telemetry both real-time and after 
+the mission has been completed.  The information is stored in a database,
+so rrdtool was the perfect solution - it's cgi interface allows generation 
+of web pages showing the status of incoming telemetry, and the perl module 
+allowed me to quickly create a user interface allowing users to display any 
+or all of the incoming information on whatever time scale they need.  
+rrdtool is awesome!
+</P>
+
+<P><IMG SRC="colleen-01.gif"></P>
+
diff --git a/website/gallery/edvard-01.png b/website/gallery/edvard-01.png
new file mode 100644 (file)
index 0000000..aac14d6
Binary files /dev/null and b/website/gallery/edvard-01.png differ
diff --git a/website/gallery/edvard-01.wml b/website/gallery/edvard-01.wml
new file mode 100644 (file)
index 0000000..132f887
--- /dev/null
@@ -0,0 +1,10 @@
+#include "$(ROOT)/.wml/template.inc" section=gallery subsection=edvard-01
+
+<H1>Link Status</H1>
+
+<P>by <A HREF="mailto:ed@cistron.net">Edvard Tuinder</A></P>
+
+<P>A fancy way of looking at our Link Status</P>
+
+<P><IMG SRC="edvard-01.png"></P>
+
diff --git a/website/gallery/index.wml b/website/gallery/index.wml
new file mode 100644 (file)
index 0000000..e45e2b5
--- /dev/null
@@ -0,0 +1,26 @@
+#include "$(ROOT)/.wml/template.inc" section=gallery subsection=none
+
+<H1>RRD Gallery</H1>
+
+<P>RRDtool has a lot of power, but it is not immediately visible to the
+uninitiated. In the gallery you can read short reports of people who
+did interesting stuff with RRDtool together with impressive graphs.</P>
+
+<UL>
+<LI><A HREF="alex-01.html"> Alex van den Bogaerdt makes sure his ISPs bills are correct</A></LI>
+<LI><A HREF="bkw-01.html">Brian K. West takes a close look at his Lucent Portmaster</A></LI>
+<LI><A HREF="blair-01.html">Blair Zajac shows Orca as it monitors all aspects of a Webserver</A></LI>
+<LI><A HREF="chris-01.html">Chris Snell monitors the Weathertools.com Weather Station</A></LI> 
+<LI><A HREF="colleen-01.html">Colleen Shannon works for EarthKam and plots Telemetry data from the Space Shuttle</A></LI> 
+<LI><A HREF="edvard-01.html">Edvard Tuinder has devised a fancy way of looking at his Internet link</A></LI>
+<LI><A HREF="jeff-01.html">Jeff "Cricket" Allen explains a route flap</A></LI>
+<LI><A HREF="neal-01.html">Neal S. Pressman monitors all aspects of a Sun</A></LI>
+<LI><A HREF="steve-01.html">Steve "NRG" Rader shows what his DNS server does</A></LI>
+<LI><A HREF="simon-01.html">Simon "SNMP" Leinen shows what his FluxScope can do</A></LI>
+</UL>
+
+<P>If you have a material to contribute to the gallery as well, please
+send me an interesting graph together with some words describing it.
+For me it is best if your contribution come in the form of a <B>wml</B> file.
+Look <A HREF="bkw-01.wml">here</A> for an example <B>wml</B> file. Modle your
+entry after this example.</P>
diff --git a/website/gallery/jeff-01.png b/website/gallery/jeff-01.png
new file mode 100644 (file)
index 0000000..8f9c765
Binary files /dev/null and b/website/gallery/jeff-01.png differ
diff --git a/website/gallery/jeff-01.wml b/website/gallery/jeff-01.wml
new file mode 100644 (file)
index 0000000..3eb00b3
--- /dev/null
@@ -0,0 +1,20 @@
+#include "$(ROOT)/.wml/template.inc" section=gallery subsection=jeff-01
+
+<H1>Routing instability</H1>
+
+<P>by <A HREF="mailto:jra@corp.webtv.net">Jeff Allen</A></P>
+
+
+
+<P>These two graphs show a routing instability in peer1's network which
+caused traffic to swing over to peer2's network. The names have been
+changed to protect the innocent. This is an example of how graphs from
+RRD Tool (in this case, created using Cricket) can show behavior of a
+network (automatic failover and recovery) that's otherwise hard to
+visualize.</P>
+
+<P>Jeff is also the Author of 
+<A HREF="http://www.munitions.com/~jra/cricket">Cricket</A>
+the most popular frontend to RRDtool.</P>
+
+<P><IMG SRC="jeff-01.png"></P>
diff --git a/website/gallery/neal-01.png b/website/gallery/neal-01.png
new file mode 100644 (file)
index 0000000..fa5f61d
Binary files /dev/null and b/website/gallery/neal-01.png differ
diff --git a/website/gallery/neal-01.wml b/website/gallery/neal-01.wml
new file mode 100644 (file)
index 0000000..b951984
--- /dev/null
@@ -0,0 +1,18 @@
+#include "$(ROOT)/.wml/template.inc" section=gallery subsection=neal-01
+
+<H1>Data Management</H1>
+
+<P>by Neal S. Pressman</A></P>
+
+<P>I currently use rrdtool with Jeff Allen's cricket frontend to monitor all
+aspects of my Sun servers mostly through custom scripts that feed the data
+into cricket.  With the ability to visualy see what is happening with our
+servers we are better able to proactively manage them.  Included here are
+graphs for application licenseing statistics ( Flexlm ), system load average,
+CPU-utilization, Memory usage, and Disk utilization.  I have many more items
+on each server that get monitored but these are some of the more interesting
+looking graphs.
+
+</P>
+
+<P><IMG SRC="neal-01.png"></P>
diff --git a/website/gallery/simon-01.png b/website/gallery/simon-01.png
new file mode 100644 (file)
index 0000000..12e5bd5
Binary files /dev/null and b/website/gallery/simon-01.png differ
diff --git a/website/gallery/simon-01.wml b/website/gallery/simon-01.wml
new file mode 100644 (file)
index 0000000..d45f31a
--- /dev/null
@@ -0,0 +1,17 @@
+#include "$(ROOT)/.wml/template.inc" section=gallery subsection=simon-01
+
+<H1>Fluxoscope</H1>
+
+<P>by <A HREF="http://www.switch.ch/misc/leinen/">Simon Leinen</A></P>
+
+<P><a href="http://www.switch.ch/lan/stat/fluxoscope/">Fluxoscope</a>
+is a system used by <a href="http://www.switch.ch/">SWITCH</a> for
+measurements of our external network traffic.  One of its products are
+graphs which represent, for each external connection, the protocol
+distribution of traffic over time.  The example graph shows the
+traffic distribution on our connection to UUnet (our main US transit
+provider) over a period of a week.  The "positive" part of the graph
+shows incoming traffic (what we receive from the US), the "negative"
+part corresponds to outgoing traffic (what we send them). </P>
+
+<P><IMG SRC="simon-01.png"></P>
diff --git a/website/gallery/steve-01.gif b/website/gallery/steve-01.gif
new file mode 100644 (file)
index 0000000..5573266
Binary files /dev/null and b/website/gallery/steve-01.gif differ
diff --git a/website/gallery/steve-01.wml b/website/gallery/steve-01.wml
new file mode 100644 (file)
index 0000000..f57aa49
--- /dev/null
@@ -0,0 +1,14 @@
+#include "$(ROOT)/.wml/template.inc" section=gallery subsection=steve-01
+
+<H1>DNS Query Rate Graph</H1>
+
+<P>by <A HREF="mailto:rader@hep.physics.wisc.edu">steve rader &lt;rader@hep.physics.wisc.edu&gt;</A></P>
+
+<P>Below is a graph generated by a RRDtool front-end called
+"Network Resource Grapher" (aka NRG.)  It shows the query
+rates of a domain name server for a non-profit regional network
+service provider during a work-day.
+
+</P>
+
+<P><IMG SRC="steve-01.gif"></P>
diff --git a/website/index.wml b/website/index.wml
new file mode 100644 (file)
index 0000000..cf5aa04
--- /dev/null
@@ -0,0 +1,61 @@
+#use wml::std::box
+#include "$(ROOT)/.wml/template.inc" section=about subsection=none
+<!--#include virtual="/parsed/logger.html" -->
+
+<H1>About RRDtool</H1>
+
+
+#<vspace 10>
+
+#<box bdcolor=#000000 bgcolor=#f0f0ff>
+#<H2*>RRDtool Up Close and Personal</H2*>
+#At the end of September and in early October, there are two opportunities to learn more about
+#RRDtool:
+#
+#<UL>
+#<LI>I will be leading a RRDtool workshop @ CAIDA (San Diego) from September
+#29th to September 30th 1999 (<A
+#HREF="http://iec.caida.org/workshop/9909/">iec.caida.org/workshop/9909/</A>)</LI>
+#<LI>On October the 4th I will give a Talk on RRDtool @ NANOG-17 in Montreal
+#(<A HREF="http://www.nanog.org/mtg-9910/">www.nanog.org/mtg-9910/</A>)</LI>
+#</UL>
+#</box> 
+
+#<vspace 10>
+
+
+<H2>RRDtool</H2>
+
+<P>If you know MRTG, you can think of RRDtool as a reimplementation of MRTGs
+graphing and logging features. Magnitudes faster and more flexible than you ever
+thought possible</P>
+
+<P>RRD is the Acronym for Round Robin Database. RRD is a system to store and
+display time-series data (i.e. network bandwidth, machine-room temperature,
+server load average). It stores the data in a very compact way that will not
+expand over time, and it presents useful graphs by processing the data to
+enforce a certain data density. It can be used either via simple wrapper
+scripts (from shell or Perl) or via frontends that poll network devices and
+put a friendly user interface on it.</P>
+
+<H2>Get IT</H2>
+
+<P>RRDtool is available for <A HREF="pub/">download</A> from this site.
+Currently it compiles on a number of different Unix platforms as well as on
+NT. No binaries are officially provided at this point in time.</P>
+
+<H2>Project -- Happy Tobi</H2>
+
+<P>You like RRDtool? <A HREF="$(ROOT)/license.html">There is a simple way to show your appreciation</A>.</P>
+
+<H2>The Future</H2>
+
+<P>RRDtool is not a full replacement for MRTG, as it does not implement all
+the frontend and data aquisition features of MRTG. But it is an excellent
+base for building tools which work much like MRTG only better. Eventually,
+MRTG-3 will be built on top of RRDtool. You do not have to wait though. If you
+can program yourselfe you can use RRDtool right out of the box or if you don't program
+you can use one of several <A HREF="frontends/">frontends</A> which use RRDtool.</P>
+
+<P>If you want to stay with MRTG-2 go into the contrib folder of the latest release and take a close look at
+<B>14all</B>.</P>
diff --git a/website/license.wml b/website/license.wml
new file mode 100644 (file)
index 0000000..86b7076
--- /dev/null
@@ -0,0 +1,53 @@
+#include "$(ROOT)/.wml/template.inc" section=license subsection=none
+
+<H1>License</H1>
+
+<H2>GNU General Public License</H2>
+
+<P>RRDtool is available under the terms of the <A
+HREF="http://www.gnu.org/copyleft/gpl.html">GNU General Public License</A>.
+This means you can do most things you want with this software as long as you
+do not claim you created the software and don't sell it (or modified version
+of it) under a license other than the GNU GPL.</P>
+
+<H2>Give Credit</H2>
+
+<P>One of the things I get out of RRDtool is 'Being Known in the Industry'.
+This only works if you give credit to RRDtool. This means that you
+mention RRDtool on webpages and other publications containing graphs
+created with RRDtool. If possible, a link should be included in the
+publication, pointing to the RRDtool homepage. Best is to include the RRD
+TOOL logo on these pages.</P>
+
+<vspace 20>
+<DIV ALIGN=center>
+<IMG SRC="$(ROOT)/.pics/rrdtool.gif">
+</DIV>
+<vspace 20>
+
+<H2>Make Tobi happy</H2>
+
+<P>I am giving RRDtool away for free. This does not mean, that I don't
+like getting appreciation for my program.  If you like RRDtool and
+want to show me your appreciation, have a look at
+my <A HREF="http://ee-staff.ethz.ch/~oetiker/wish">CD wishlist
+</A>. Please put your <B>eMail</B> address into the the Message area, so
+that I can thank you for your present. I do keep a list of People who sent
+me CDs. You can look at it <A
+HREF="http://ee-staff.ethz.ch/~oetiker/webtools/appreciators.txt">here</A>. 
+</P>
+
+<vspace 30>
+<P>
+<TABLE><TR><TD width=30></TD><TD>
+<I>remember, information is not knowledge,<BR>
+        knowledge is not wisdom<BR>
+        wisdom is not truth<BR>
+        truth is not  beauty<BR>
+        beauty is not love<BR>
+        love is not music<BR>
+        music is the best</I><BR>
+<vspace 5><BR>
+<hspace 70>-- frank zappa<BR>
+</TD></TR></TABLE>
+</P>
diff --git a/website/mailinglists.wml b/website/mailinglists.wml
new file mode 100644 (file)
index 0000000..bc51210
--- /dev/null
@@ -0,0 +1,38 @@
+#include "$(ROOT)/.wml/template.inc" section=mailinglists subsection=none
+
+<H1>Mailinglists</H1>
+
+There are 3 mailinglists for RRDtool
+
+<H2>rrd-announce mailing list</H2>
+
+<P>If you want to keep uptodate with the progress of RRDtool, subscribe to
+this LOW VOLUME list by sending a message with the subject 'subscribe' to <A
+HREF="mailto:rrd-announce-request@list.ee.ethz.ch?subject=subscribe">rrd-announce-request@list.ee.ethz.ch</A>.</P>
+
+<P>There is also an <A
+HREF="http://www.ee.ethz.ch/~slist/rrd-announce/">archive</A> of past
+Traffic on this List</P>
+
+<P>Note, that posts to this list will be crossposted to the rrd-users and rrd-developers
+mailinglists.</P>
+
+<H2>rrd-users mailing list</H2>
+
+<P>If you are using RRDtool in your applications, subscribe to
+this list by sending a message with the subject 'subscribe' to <A
+HREF="mailto:rrd-users-request@list.ee.ethz.ch?subject=subscribe">rrd-users-request@list.ee.ethz.ch</A>.</P>
+
+<P>There is an <A
+HREF="http://www.ee.ethz.ch/~slist/rrd-users/">archive</A> of past
+Traffic on this List</P>
+
+<H2>rrd-developers mailing list</H2>
+
+<P>If you start HACKING RRDtool, subscribe to
+this list by sending a message with the subject 'subscribe' to <A
+HREF="mailto:rrd-developers-request@list.ee.ethz.ch?subject=subscribe">rrd-developers-request@list.ee.ethz.ch</A>.</P>
+
+<P>There is an <A
+HREF="http://www.ee.ethz.ch/~slist/rrd-developers/">archive</A> of past
+Traffic on this List</P>
diff --git a/website/manual/bin_dec_hex.wml b/website/manual/bin_dec_hex.wml
new file mode 100644 (file)
index 0000000..040ddf6
--- /dev/null
@@ -0,0 +1,6 @@
+#include "$(ROOT)/.wml/template.inc" section=tutorial subsection=cdeftut
+#use wml::fmt::pod
+
+<H1>Bin Dec Hex Tutorial</H1>
+
+<: print &wml_fmt_pod({ FILE => "--podroot=$(ROOT)/../doc  --htmlroot=. --podpath=. $(ROOT)/../doc/bin_dec_hex.pod"}); :>
diff --git a/website/manual/cdeftutorial.wml b/website/manual/cdeftutorial.wml
new file mode 100644 (file)
index 0000000..d92b0d6
--- /dev/null
@@ -0,0 +1,6 @@
+#include "$(ROOT)/.wml/template.inc" section=tutorial subsection=cdeftut
+#use wml::fmt::pod
+
+<H1>CDEF Tutorial</H1>
+
+<: print &wml_fmt_pod({ FILE => "--podroot=$(ROOT)/../doc  --htmlroot=. --podpath=. $(ROOT)/../doc/cdeftutorial.pod"}); :>
diff --git a/website/manual/index.wml b/website/manual/index.wml
new file mode 100644 (file)
index 0000000..3daa084
--- /dev/null
@@ -0,0 +1,6 @@
+#include "$(ROOT)/.wml/template.inc" section=manual subsection=none
+#use wml::fmt::pod
+
+<H1>MANUAL</H1>
+
+<: print &wml_fmt_pod({ FILE => "--podroot=$(ROOT)/../doc  --htmlroot=. --podpath=. $(ROOT)/../doc/rrdtool.pod"}); :>
diff --git a/website/manual/rpntutorial.wml b/website/manual/rpntutorial.wml
new file mode 100644 (file)
index 0000000..5f3970b
--- /dev/null
@@ -0,0 +1,7 @@
+#include "$(ROOT)/.wml/template.inc" section=tutorial subsection=rpntut
+#use wml::fmt::pod
+
+<H1>RPN Tutorial</H1>
+
+<: print &wml_fmt_pod({ FILE => "$(ROOT)/../doc/rpntutorial.pod"}); :>
+
diff --git a/website/manual/rrdcgi.wml b/website/manual/rrdcgi.wml
new file mode 100644 (file)
index 0000000..f1b7ece
--- /dev/null
@@ -0,0 +1,6 @@
+#include "$(ROOT)/.wml/template.inc" section=rrdcgi subsection=none
+#use wml::fmt::pod
+
+<H1>RRDCGI MANPAGE</H1>
+
+<: print &wml_fmt_pod({ FILE => "$(ROOT)/../doc/rrdcgi.pod"}); :>
diff --git a/website/manual/rrdcreate.wml b/website/manual/rrdcreate.wml
new file mode 100644 (file)
index 0000000..399d001
--- /dev/null
@@ -0,0 +1,6 @@
+#include "$(ROOT)/.wml/template.inc" section=manual subsection=rrdcreate
+#use wml::fmt::pod
+
+<H1>RRD CREATE</H1>
+
+<: print &wml_fmt_pod({ FILE => "--podroot=$(ROOT)/../doc $(ROOT)/../doc/rrdcreate.pod"}); :>
diff --git a/website/manual/rrddump.wml b/website/manual/rrddump.wml
new file mode 100644 (file)
index 0000000..cc67ba4
--- /dev/null
@@ -0,0 +1,6 @@
+#include "$(ROOT)/.wml/template.inc" section=manual subsection=rrddump
+#use wml::fmt::pod
+
+<H1>RRD DUMP</H1>
+
+<: print &wml_fmt_pod({ FILE => "--podroot=$(ROOT)/../doc $(ROOT)/../doc/rrddump.pod"}); :>
diff --git a/website/manual/rrdfetch.wml b/website/manual/rrdfetch.wml
new file mode 100644 (file)
index 0000000..1f151b2
--- /dev/null
@@ -0,0 +1,6 @@
+#include "$(ROOT)/.wml/template.inc" section=manual subsection=rrdfetch
+#use wml::fmt::pod
+
+<H1>RRD FETCH</H1>
+
+<:= &wml_fmt_pod({ FILE =>"--podroot=$(ROOT)/../ --podpath=doc  $(ROOT)/../doc/rrdfetch.pod"}); :>
diff --git a/website/manual/rrdgraph.wml b/website/manual/rrdgraph.wml
new file mode 100644 (file)
index 0000000..d13abe9
--- /dev/null
@@ -0,0 +1,6 @@
+#include "$(ROOT)/.wml/template.inc" section=manual subsection=rrdgraph
+#use wml::fmt::pod
+
+<H1>RRD GRAPH</H1>
+
+<:= &wml_fmt_pod({ FILE => "--podroot=$(ROOT)/.. --podpath=doc $(ROOT)/../doc/rrdgraph.pod"}); :>
diff --git a/website/manual/rrdinfo.wml b/website/manual/rrdinfo.wml
new file mode 100644 (file)
index 0000000..a415062
--- /dev/null
@@ -0,0 +1,6 @@
+#include "$(ROOT)/.wml/template.inc" section=manual subsection=rrdinfo
+#use wml::fmt::pod
+
+<H1>RRD INFO</H1>
+
+<: print &wml_fmt_pod({ FILE => "--podroot=$(ROOT)/../doc  --htmlroot=. --podpath=. $(ROOT)/../doc/rrdinfo.pod"}); :>
diff --git a/website/manual/rrdlast.wml b/website/manual/rrdlast.wml
new file mode 100644 (file)
index 0000000..4275aa5
--- /dev/null
@@ -0,0 +1,7 @@
+#include "$(ROOT)/.wml/template.inc" section=manual subsection=rrdlast
+#use wml::fmt::pod
+
+<H1>RRD LAST</H1>
+
+<: print &wml_fmt_pod({ FILE => "--podroot=$(ROOT)/../doc $(ROOT)/../doc/rrdlast.pod"}); :>
+
diff --git a/website/manual/rrdresize.wml b/website/manual/rrdresize.wml
new file mode 100644 (file)
index 0000000..9575e17
--- /dev/null
@@ -0,0 +1,6 @@
+#include "$(ROOT)/.wml/template.inc" section=manual subsection=rrdresize
+#use wml::fmt::pod
+
+<H1>RRD RESIZE</H1>
+
+<: print &wml_fmt_pod({ FILE => "--podroot=$(ROOT)/../doc $(ROOT)/../doc/rrdresize.pod"}); :>
diff --git a/website/manual/rrdrestore.wml b/website/manual/rrdrestore.wml
new file mode 100644 (file)
index 0000000..af75fb6
--- /dev/null
@@ -0,0 +1,6 @@
+#include "$(ROOT)/.wml/template.inc" section=manual subsection=rrdrestore
+#use wml::fmt::pod
+
+<H1>RRD RESTORE</H1>
+
+<: print &wml_fmt_pod({ FILE => "--podroot=$(ROOT)/../doc $(ROOT)/../doc/rrdrestore.pod"}); :>
diff --git a/website/manual/rrdtune.wml b/website/manual/rrdtune.wml
new file mode 100644 (file)
index 0000000..8af98a8
--- /dev/null
@@ -0,0 +1,6 @@
+#include "$(ROOT)/.wml/template.inc" section=manual subsection=rrdtune
+#use wml::fmt::pod
+
+<H1>RRD TUNE</H1>
+
+<: print &wml_fmt_pod({ FILE => "--podroot=$(ROOT)/../doc $(ROOT)/../doc/rrdtune.pod"}); :>
diff --git a/website/manual/rrdtutorial.es.wml b/website/manual/rrdtutorial.es.wml
new file mode 100644 (file)
index 0000000..dbe9051
--- /dev/null
@@ -0,0 +1,6 @@
+#include "$(ROOT)/.wml/template.inc" section=tutorial subsection=cdeftut
+#use wml::fmt::pod
+
+<H1>CDEF Tutorial</H1>
+
+<: print &wml_fmt_pod({ FILE => "--podroot=$(ROOT)/../doc  --htmlroot=. --podpath=. $(ROOT)/../doc/rrdtutorial.es.pod"}); :>
diff --git a/website/manual/rrdtutorial.wml b/website/manual/rrdtutorial.wml
new file mode 100644 (file)
index 0000000..1227b2e
--- /dev/null
@@ -0,0 +1,6 @@
+#include "$(ROOT)/.wml/template.inc" section=tutorial subsection=cdeftut
+#use wml::fmt::pod
+
+<H1>CDEF Tutorial</H1>
+
+<: print &wml_fmt_pod({ FILE => "--podroot=$(ROOT)/../doc  --htmlroot=. --podpath=. $(ROOT)/../doc/rrdtutorial.pod"}); :>
diff --git a/website/manual/rrdupdate.wml b/website/manual/rrdupdate.wml
new file mode 100644 (file)
index 0000000..bae328a
--- /dev/null
@@ -0,0 +1,6 @@
+#include "$(ROOT)/.wml/template.inc" section=manual subsection=rrdupdate
+#use wml::fmt::pod
+
+<H1>RRD UPDATE</H1>
+
+<: print &wml_fmt_pod({ FILE => "--podroot=$(ROOT)/../doc $(ROOT)/../doc/rrdupdate.pod"}); :>
diff --git a/website/news.wml b/website/news.wml
new file mode 100644 (file)
index 0000000..ac7f576
--- /dev/null
@@ -0,0 +1,19 @@
+#include "$(ROOT)/.wml/template.inc" section=news subsection=none
+
+<H1>News</H1>
+
+<H2>1999-02-04</H2>
+
+Updated Website with License section and CSS for better looks.
+
+<H2>1999-01-25</H2>
+
+Spell checked the web site and removed a few navigation quirks.
+
+<H2>1999-01-24</H2>
+
+Creation of the RRDtool logo and web site.
+
+<H2>1999-01-22</H2>
+
+Release of the second beta Version of RRDtool (0.99.1) 
\ No newline at end of file
diff --git a/website/perlbind/RRDp.wml b/website/perlbind/RRDp.wml
new file mode 100644 (file)
index 0000000..c4a2241
--- /dev/null
@@ -0,0 +1,6 @@
+#include "$(ROOT)/.wml/template.inc" section=perlbind subsection=RRDp
+#use wml::fmt::pod
+
+<H1>RRD Pipes Module</H1>
+
+<: print &wml_fmt_pod({ FILE => "$(ROOT)/../perl-piped/RRDp.pm"}); :>
diff --git a/website/perlbind/RRDs.wml b/website/perlbind/RRDs.wml
new file mode 100644 (file)
index 0000000..ffd243a
--- /dev/null
@@ -0,0 +1,6 @@
+#include "$(ROOT)/.wml/template.inc" section=perlbind subsection=RRDs
+#use wml::fmt::pod
+
+<H1>Shared RRD Module</H1>
+
+<: print &wml_fmt_pod({ FILE => "$(ROOT)/../perl-shared/RRDs.pm"}); :>
diff --git a/website/perlbind/index.wml b/website/perlbind/index.wml
new file mode 100644 (file)
index 0000000..11d7030
--- /dev/null
@@ -0,0 +1,17 @@
+#include "$(ROOT)/.wml/template.inc" section=perlbind subsection=none
+#use wml::fmt::pod
+
+<H1>Perl Bindings</H1>
+
+<P>RRDtool comes with two sets of Perl bindings.<P>
+
+<H2>RRD Pipes</H2>
+<P>which works by attaching an independent rrdtool process to your
+Perl program through a set of pipes.</P>
+
+<H2>Shared RRD</H2>
+
+<P>integrates RRDtool functionality directly into Perl as a shared
+library module. If you have the choice use this interface, as it is
+more efficient and gives you better access to data returned from the
+various functions of RRDtool</P>
diff --git a/website/rrdcgi.wml b/website/rrdcgi.wml
new file mode 100644 (file)
index 0000000..f1b7ece
--- /dev/null
@@ -0,0 +1,6 @@
+#include "$(ROOT)/.wml/template.inc" section=rrdcgi subsection=none
+#use wml::fmt::pod
+
+<H1>RRDCGI MANPAGE</H1>
+
+<: print &wml_fmt_pod({ FILE => "$(ROOT)/../doc/rrdcgi.pod"}); :>
diff --git a/website/screen.wml b/website/screen.wml
new file mode 100644 (file)
index 0000000..71bf6b5
--- /dev/null
@@ -0,0 +1,18 @@
+#include "$(ROOT)/.wml/template.inc" section=screen subsection=none
+
+<H1>The Look</H1>
+
+RRDtool does not have a GUI or anything presentable like this
+yet, but you can use RRDtool to create GIF images visualizing the
+data collected with it. Here are two sample images. They do not
+represent any sensible data, they simply show some of the features
+of RRDtool. Most of the visual aspects of the graphs are auto
+configured, but can be overridden when needed.
+
+<DIV><vspace 20></DIV>
+
+<IMG SRC="$(ROOT)/.pics/rrddemo.gif">
+
+<DIV><vspace 20></DIV>
+
+<IMG SRC="$(ROOT)/.pics/rrdlogdemo.gif">
diff --git a/website/site-sync b/website/site-sync
new file mode 100755 (executable)
index 0000000..817e1ed
--- /dev/null
@@ -0,0 +1,2 @@
+rsync --copy-unsafe-links --verbose --times --delete --exclude pub --exclude='*~' -r . /home/oetiker/public_html/webtools/rrdtool
+#rsync --links --verbose --times --delete --exclude pub --exclude='*~' --rsh=ssh -r . tobi@ipn.caida.org:/ipn/web/Tools/RRDtool
diff --git a/website/tutorial/bin_dec_hex.wml b/website/tutorial/bin_dec_hex.wml
new file mode 100644 (file)
index 0000000..040ddf6
--- /dev/null
@@ -0,0 +1,6 @@
+#include "$(ROOT)/.wml/template.inc" section=tutorial subsection=cdeftut
+#use wml::fmt::pod
+
+<H1>Bin Dec Hex Tutorial</H1>
+
+<: print &wml_fmt_pod({ FILE => "--podroot=$(ROOT)/../doc  --htmlroot=. --podpath=. $(ROOT)/../doc/bin_dec_hex.pod"}); :>
diff --git a/website/tutorial/cdeftutorial.wml b/website/tutorial/cdeftutorial.wml
new file mode 100644 (file)
index 0000000..d92b0d6
--- /dev/null
@@ -0,0 +1,6 @@
+#include "$(ROOT)/.wml/template.inc" section=tutorial subsection=cdeftut
+#use wml::fmt::pod
+
+<H1>CDEF Tutorial</H1>
+
+<: print &wml_fmt_pod({ FILE => "--podroot=$(ROOT)/../doc  --htmlroot=. --podpath=. $(ROOT)/../doc/cdeftutorial.pod"}); :>
diff --git a/website/tutorial/index.wml b/website/tutorial/index.wml
new file mode 100644 (file)
index 0000000..01cef3d
--- /dev/null
@@ -0,0 +1,18 @@
+#include "$(ROOT)/.wml/template.inc" section=tutorial subsection=none
+
+<H1>Tutorials</H1>
+
+<P>RRDtool is a new software concept. Contrary to many other Open Source
+projects this one is not tracking what is available in the commercial world,
+but it is a new approach to data logging and graphing problems.</P>
+
+<P>If you are new to the RRDtool it is quite likely that you will not be able to make
+do with the information available in the manual. Therefore I recommend everybody
+uses the tutorials as a starting point for exploring RRDtool and its functions.</P>
+
+<UL>
+<LI>The <A HREF="rrdtutorial.html">RRD Tutorial</A> by Alex van den Bogaerdt is best for getting started.</LI>
+<LI>The <A HREF="cdeftutorial.html">CDEF Tutorial</A> another one by Alex which is recommended for people who want to get the most out of RRDs graphing function.</LI>
+<LI>The <A HREF="rpntutorial.html">RPN Tutorial</A> by Steve Rader that helps those who have forgotten their HP days.</LI>
+</UL>
+
diff --git a/website/tutorial/rpntutorial.wml b/website/tutorial/rpntutorial.wml
new file mode 100644 (file)
index 0000000..5f3970b
--- /dev/null
@@ -0,0 +1,7 @@
+#include "$(ROOT)/.wml/template.inc" section=tutorial subsection=rpntut
+#use wml::fmt::pod
+
+<H1>RPN Tutorial</H1>
+
+<: print &wml_fmt_pod({ FILE => "$(ROOT)/../doc/rpntutorial.pod"}); :>
+
diff --git a/website/tutorial/rrdtutorial.es.wml b/website/tutorial/rrdtutorial.es.wml
new file mode 100644 (file)
index 0000000..dbe9051
--- /dev/null
@@ -0,0 +1,6 @@
+#include "$(ROOT)/.wml/template.inc" section=tutorial subsection=cdeftut
+#use wml::fmt::pod
+
+<H1>CDEF Tutorial</H1>
+
+<: print &wml_fmt_pod({ FILE => "--podroot=$(ROOT)/../doc  --htmlroot=. --podpath=. $(ROOT)/../doc/rrdtutorial.es.pod"}); :>
diff --git a/website/tutorial/rrdtutorial.ps b/website/tutorial/rrdtutorial.ps
new file mode 100644 (file)
index 0000000..041fcee
--- /dev/null
@@ -0,0 +1,1717 @@
+%!PS-Adobe-3.0
+%%Creator: groff version 1.11
+%%CreationDate: Wed Oct 27 07:32:11 1999
+%%DocumentNeededResources: font Times-Roman
+%%+ font Times-Bold
+%%+ font Symbol
+%%+ font Courier
+%%DocumentSuppliedResources: procset grops 1.11 0
+%%Pages: 17
+%%PageOrder: Ascend
+%%Orientation: Portrait
+%%EndComments
+%%BeginProlog
+%%BeginResource: procset grops 1.11 0
+/setpacking where{
+pop
+currentpacking
+true setpacking
+}if
+/grops 120 dict dup begin
+/SC 32 def
+/A/show load def
+/B{0 SC 3 -1 roll widthshow}bind def
+/C{0 exch ashow}bind def
+/D{0 exch 0 SC 5 2 roll awidthshow}bind def
+/E{0 rmoveto show}bind def
+/F{0 rmoveto 0 SC 3 -1 roll widthshow}bind def
+/G{0 rmoveto 0 exch ashow}bind def
+/H{0 rmoveto 0 exch 0 SC 5 2 roll awidthshow}bind def
+/I{0 exch rmoveto show}bind def
+/J{0 exch rmoveto 0 SC 3 -1 roll widthshow}bind def
+/K{0 exch rmoveto 0 exch ashow}bind def
+/L{0 exch rmoveto 0 exch 0 SC 5 2 roll awidthshow}bind def
+/M{rmoveto show}bind def
+/N{rmoveto 0 SC 3 -1 roll widthshow}bind def
+/O{rmoveto 0 exch ashow}bind def
+/P{rmoveto 0 exch 0 SC 5 2 roll awidthshow}bind def
+/Q{moveto show}bind def
+/R{moveto 0 SC 3 -1 roll widthshow}bind def
+/S{moveto 0 exch ashow}bind def
+/T{moveto 0 exch 0 SC 5 2 roll awidthshow}bind def
+/SF{
+findfont exch
+[exch dup 0 exch 0 exch neg 0 0]makefont
+dup setfont
+[exch/setfont cvx]cvx bind def
+}bind def
+/MF{
+findfont
+[5 2 roll
+0 3 1 roll
+neg 0 0]makefont
+dup setfont
+[exch/setfont cvx]cvx bind def
+}bind def
+/level0 0 def
+/RES 0 def
+/PL 0 def
+/LS 0 def
+/MANUAL{
+statusdict begin/manualfeed true store end
+}bind def
+/PLG{
+gsave newpath clippath pathbbox grestore
+exch pop add exch pop
+}bind def
+/BP{
+/level0 save def
+1 setlinecap
+1 setlinejoin
+72 RES div dup scale
+LS{
+90 rotate
+}{
+0 PL translate
+}ifelse
+1 -1 scale
+}bind def
+/EP{
+level0 restore
+showpage
+}bind def
+/DA{
+newpath arcn stroke
+}bind def
+/SN{
+transform
+.25 sub exch .25 sub exch
+round .25 add exch round .25 add exch
+itransform
+}bind def
+/DL{
+SN
+moveto
+SN
+lineto stroke
+}bind def
+/DC{
+newpath 0 360 arc closepath
+}bind def
+/TM matrix def
+/DE{
+TM currentmatrix pop
+translate scale newpath 0 0 .5 0 360 arc closepath
+TM setmatrix
+}bind def
+/RC/rcurveto load def
+/RL/rlineto load def
+/ST/stroke load def
+/MT/moveto load def
+/CL/closepath load def
+/FL{
+currentgray exch setgray fill setgray
+}bind def
+/BL/fill load def
+/LW/setlinewidth load def
+/RE{
+findfont
+dup maxlength 1 index/FontName known not{1 add}if dict begin
+{
+1 index/FID ne{def}{pop pop}ifelse
+}forall
+/Encoding exch def
+dup/FontName exch def
+currentdict end definefont pop
+}bind def
+/DEFS 0 def
+/EBEGIN{
+moveto
+DEFS begin
+}bind def
+/EEND/end load def
+/CNT 0 def
+/level1 0 def
+/PBEGIN{
+/level1 save def
+translate
+div 3 1 roll div exch scale
+neg exch neg exch translate
+0 setgray
+0 setlinecap
+1 setlinewidth
+0 setlinejoin
+10 setmiterlimit
+[]0 setdash
+/setstrokeadjust where{
+pop
+false setstrokeadjust
+}if
+/setoverprint where{
+pop
+false setoverprint
+}if
+newpath
+/CNT countdictstack def
+userdict begin
+/showpage{}def
+}bind def
+/PEND{
+clear
+countdictstack CNT sub{end}repeat
+level1 restore
+}bind def
+end def
+/setpacking where{
+pop
+setpacking
+}if
+%%EndResource
+%%IncludeResource: font Times-Roman
+%%IncludeResource: font Times-Bold
+%%IncludeResource: font Symbol
+%%IncludeResource: font Courier
+grops begin/DEFS 1 dict def DEFS begin/u{.001 mul}bind def end/RES 72
+def/PL 792 def/LS false def/ENC0[/asciicircum/asciitilde/Scaron/Zcaron
+/scaron/zcaron/Ydieresis/trademark/quotesingle/.notdef/.notdef/.notdef
+/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef
+/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef
+/.notdef/.notdef/space/exclam/quotedbl/numbersign/dollar/percent
+/ampersand/quoteright/parenleft/parenright/asterisk/plus/comma/hyphen
+/period/slash/zero/one/two/three/four/five/six/seven/eight/nine/colon
+/semicolon/less/equal/greater/question/at/A/B/C/D/E/F/G/H/I/J/K/L/M/N/O
+/P/Q/R/S/T/U/V/W/X/Y/Z/bracketleft/backslash/bracketright/circumflex
+/underscore/quoteleft/a/b/c/d/e/f/g/h/i/j/k/l/m/n/o/p/q/r/s/t/u/v/w/x/y
+/z/braceleft/bar/braceright/tilde/.notdef/quotesinglbase/guillemotleft
+/guillemotright/bullet/florin/fraction/perthousand/dagger/daggerdbl
+/endash/emdash/ff/fi/fl/ffi/ffl/dotlessi/dotlessj/grave/hungarumlaut
+/dotaccent/breve/caron/ring/ogonek/quotedblleft/quotedblright/oe/lslash
+/quotedblbase/OE/Lslash/.notdef/exclamdown/cent/sterling/currency/yen
+/brokenbar/section/dieresis/copyright/ordfeminine/guilsinglleft
+/logicalnot/minus/registered/macron/degree/plusminus/twosuperior
+/threesuperior/acute/mu/paragraph/periodcentered/cedilla/onesuperior
+/ordmasculine/guilsinglright/onequarter/onehalf/threequarters
+/questiondown/Agrave/Aacute/Acircumflex/Atilde/Adieresis/Aring/AE
+/Ccedilla/Egrave/Eacute/Ecircumflex/Edieresis/Igrave/Iacute/Icircumflex
+/Idieresis/Eth/Ntilde/Ograve/Oacute/Ocircumflex/Otilde/Odieresis
+/multiply/Oslash/Ugrave/Uacute/Ucircumflex/Udieresis/Yacute/Thorn
+/germandbls/agrave/aacute/acircumflex/atilde/adieresis/aring/ae/ccedilla
+/egrave/eacute/ecircumflex/edieresis/igrave/iacute/icircumflex/idieresis
+/eth/ntilde/ograve/oacute/ocircumflex/otilde/odieresis/divide/oslash
+/ugrave/uacute/ucircumflex/udieresis/yacute/thorn/ydieresis]def
+/Courier@0 ENC0/Courier RE/Times-Bold@0 ENC0/Times-Bold RE/Times-Roman@0
+ENC0/Times-Roman RE
+%%EndProlog
+%%Page: 1 1
+%%BeginPageSetup
+BP
+%%EndPageSetup
+/F0 10/Times-Roman@0 SF(RRDTUT)72 48 Q -.834(ORIAL \( 1 \))-.18 F
+130.862(rrdtool RRDTUT)133.362 F -.834(ORIAL \( 1 \))-.18 F/F1 9
+/Times-Bold@0 SF 10.562 -6.496(NN AA)72 96 T -8.494(MM)6.496 G -6.001
+(EE)8.494 G F0(rrdtutorial \255 Ale)108 108 Q 2.5(xv)-.15 G(an den Bog)
+-2.75 E(aerdt')-.05 E 2.5(sR)-.55 G(RDtool tutorial)-2.5 E F1 -6.496(DD)
+72 124.8 S -6.001(EE)6.496 G -5.002(SS)6.001 G -6.496(CC)5.002 G -6.496
+(RR)6.496 G -3.499(II)6.496 G -5.497(PP)3.499 G -6.001(TT)5.497 G -3.499
+(II)6.001 G -7(OO)3.499 G -6.496(NN)7 G F0 2.325
+(RRDtool is written by T)108 136.8 R 2.325(obias Oetik)-.8 F 2.325
+(er <oetik)-.1 F 2.325(er@ee.ethz.ch> with contrib)-.1 F 2.325
+(utions from man)-.2 F 4.825(yp)-.15 G 2.325(eople all)-4.825 F 1.047
+(around the w)108 148.8 R 1.048(orld. This document is written by Ale)
+-.1 F 3.548(xv)-.15 G 1.048(an den Bog)-3.798 F 1.048(aerdt <ale)-.05 F
+(x@er)-.15 E 1.048(gens.op.het.net> to help)-.18 F
+(you understand what RRDtool is and what it can do for you.)108 160.8 Q
+.954(The documentation pro)108 177.6 R .953(vided with RRDtool can be t\
+oo technical for some people. This tutorial is here to)-.15 F .875(help\
+ you understand the basics of RRDtool. It should prepare you to read th\
+e documentation yourself.)108 189.6 R(It)5.875 E(also e)108 201.6 Q
+(xplains the general things about statistics with a focus on netw)-.15 E
+(orking.)-.1 E F1 -6.001(TT)72 218.4 S -6.496(UU)6.001 G 9.59 -6.001
+(TT O)6.496 H(OR)-.999 E(RI)-6.496 E(IA)-3.499 E(AL)-6.496 E(L)-6.001 E
+/F2 10/Times-Bold@0 SF -3.888(II)108 230.4 S -8.328(mm)3.888 G -5.558
+(pp)8.328 G -4.998(oo)5.558 G -4.438(rr)4.998 G -3.328(tt)4.438 G -4.998
+(aa)3.328 G -5.558(nn)4.998 G -3.328(tt)5.558 G F0 .734(Please don')108
+247.2 R 3.234(ts)-.18 G .734(kip ahead in this document!)-3.234 F .734
+(The \214rst part of this document e)5.734 F .734
+(xplains the basics and may be)-.15 F 2.5(boring. But)108 259.2 R
+(if you don')2.5 E 2.5(tu)-.18 G(nderstand the basics, the e)-2.5 E
+(xamples will not be as meaningful to you.)-.15 E F2 -9.998(WW)108 282 S
+-5.558(hh)9.998 G -4.998(aa)5.558 G 6.656 -3.328(tt i)4.998 H(is).55 E
+2.5(sR)-3.888 G(RR)-9.718 E(RD)-7.218 E(Dt)-7.218 E(to)-3.328 E(oo)
+-4.998 E(ol)-4.998 E 2.5(l?)-2.778 G(?)-7.498 E F0 .313
+(RRDtool refers to Round Robin Database tool.)108 298.8 R .314
+(Round robin is a technique that w)5.313 F .314(orks with a \214x)-.1 F
+.314(ed amount)-.15 F .923(of data, and a pointer to the current elemen\
+t. Think of a circle with some dots plotted on the edge, these)108 310.8
+R .191(dots are the places where data can be stored. Dra)108 322.8 R
+2.691(wa)-.15 G 2.691(na)-2.691 G(rro)-2.691 E 2.691(wf)-.25 G .191
+(rom the center of the circle to one of the dots,)-2.691 F .57
+(this is the pointer)108 334.8 R 5.57(.W)-.55 G .57
+(hen the current data is read or written, the pointer mo)-5.57 F -.15
+(ve)-.15 G 3.07(st).15 G 3.07(ot)-3.07 G .57(he ne)-3.07 F .57
+(xt element. As we)-.15 F .021(are on a circle there is no be)108 346.8
+R .021
+(ginning nor an end, you can go on and on. After a while, all the a)-.15
+F -.25(va)-.2 G .021(ilable places).25 F .077(will be used and the proc\
+ess automatically reuses old locations. This w)108 358.8 R(ay)-.1 E
+2.577(,t)-.65 G .077(he database will not gro)-2.577 F 2.577(wi)-.25 G
+2.577(ns)-2.577 G(ize)-2.577 E .055
+(and therefore requires no mainenance.)108 370.8 R .055(RRDtool w)5.055
+F .055(orks with with Round Robin Databases \(RRDs\). It stores)-.1 F
+(and retrie)108 382.8 Q -.15(ve)-.25 G 2.5(sd).15 G(ata from them.)-2.5
+E F2 -9.998(WW)108 405.6 S -5.558(hh)9.998 G -4.998(aa)5.558 G 6.656
+-3.328(tt d)4.998 H(da)-2.23 E(at)-4.998 E(ta)-3.328 E 2.5(ac)-4.998 G
+(ca)-6.938 E(an)-4.998 E 2.5(nb)-5.558 G(be)-8.058 E 2.5(ep)-4.438 G(pu)
+-8.058 E(ut)-5.558 E 2.5(ti)-3.328 G(in)-5.278 E(nt)-5.558 E(to)-3.328 E
+2.5(oa)-4.998 G(an)-7.498 E(n)-5.558 E F1 -6.496(RR)2.5 G -6.496(DD)
+6.496 G -6.496(DD)6.496 G F2 -4.998(??)8.996 G F0 -1.1(Yo)108 422.4 S
+3.328(un)1.1 G .828(ame it, it will probably \214t. Y)-3.328 F .827
+(ou should be able to measure some v)-1.1 F .827(alue at se)-.25 F -.15
+(ve)-.25 G .827(ral points in time and).15 F(pro)108 434.4 Q .023(vide \
+this information to RRDtool. If you can do this, RRDtool will be able t\
+o store it. The v)-.15 F .024(alues need to)-.25 F(be numerical b)108
+446.4 Q(ut don')-.2 E 2.5(th)-.18 G -2.25 -.2(av e)-2.5 H
+(to be, as opposed to)2.7 E/F3 9/Times-Roman@0 SF(MR)2.5 E(TG)-.54 E F0
+2.5(,i)C(nte)-2.5 E(gers.)-.15 E(Man)108 463.2 Q 3.231(ye)-.15 G .731
+(xamples talk about)-3.381 F F3(SNMP)3.23 E F0 .73(which is an acron)
+3.23 F .73(ym for Simple Netw)-.15 F .73(ork Management Protocol. `)-.1
+F(`Sim-)-.74 E(ple')108 475.2 Q 3.053('r)-.74 G .553(efers to the proto\
+col -- it does not mean it is simple to manage or monitor a netw)-3.053
+F .553(ork. After w)-.1 F(orking)-.1 E .142(your w)108 487.2 R .141
+(ay through this document, you should kno)-.1 F 2.641(we)-.25 G .141
+(nough to be able to understand what people are talking)-2.641 F .152
+(about. F)108 499.2 R .152(or no)-.15 F 1.452 -.65(w, j)-.25 H .152
+(ust realize that).65 F F3(SNMP)2.652 E F0 .152(is a w)2.652 F .152
+(ay to ask de)-.1 F .153(vices for the v)-.25 F .153
+(alues of counters the)-.25 F 2.653(yk)-.15 G 2.653(eep. It)-2.753 F
+.153(is the)2.653 F -.25(va)108 511.2 S
+(lue from those counters that are k).25 E(ept in the)-.1 E F3(RRD)2.5 E
+F0(.)A F2 -9.998(WW)108 534 S -5.558(hh)9.998 G -4.998(aa)5.558 G 6.656
+-3.328(tt c)4.998 H(ca)-1.11 E(an)-4.998 E 2.5(nI)-5.558 G 2.5(Id)-6.388
+G(do)-8.058 E 2.5(ow)-4.998 G(wi)-9.718 E(it)-2.778 E(th)-3.328 E 2.5
+(ht)-5.558 G(th)-5.828 E(hi)-5.558 E(is)-2.778 E 2.5(st)-3.888 G(to)
+-5.828 E(oo)-4.998 E(ol)-4.998 E 2.5(l?)-2.778 G(?)-7.498 E F0 1.329
+(RRDtool originated from)108 550.8 R F3(MR)3.829 E(TG)-.54 E F0 1.329
+(\(Multi Router T)3.829 F(raf)-.35 E 1.329(\214c Grapher\).)-.25 F F3
+(MR)6.329 E(TG)-.54 E F0 1.328(started as a tin)3.828 F 3.828(yl)-.15 G
+1.328(ittle script for)-3.828 F .509
+(graphing the use of a connection to the Internet.)108 562.8 R F3(MR)
+3.009 E(TG)-.54 E F0 -2.2 -.25(ev o)3.009 H(lv).25 E .509
+(ed into a tool for graphing other data sources)-.15 F .095
+(including temperature, speed, v)108 574.8 R .094
+(oltage, number of printouts and the lik)-.2 F .094(e. Most lik)-.1 F
+.094(ely you will start to use the)-.1 F .81
+(RRDtool to store and process data collected via)108 586.8 R F3(SNMP)
+3.31 E F0 3.31(.T)C .81(he data will most lik)-3.31 F .811
+(ely be bytes \(or bits\) trans-)-.1 F .019(fered from and to a netw)108
+598.8 R .019(ork or a computer)-.1 F 5.019(.R)-.55 G .018
+(RDtool lets you create a database, store data in it, retrie)-5.019 F
+.318 -.15(ve t)-.25 H(hat).15 E .293(data and create graphs in)108 610.8
+R F3(GIF)2.793 E F0 .293(format for display on a web bro)2.793 F(wser)
+-.25 E 2.793(.T)-.55 G(hose)-2.793 E F3(GIF)2.793 E F0 .294
+(images are dependent on the)2.794 F .559
+(data you collected and could be, for instance, an o)108 622.8 R -.15
+(ve)-.15 G(rvie).15 E 3.059(wo)-.25 G 3.059(ft)-3.059 G .559(he a)-3.059
+F -.15(ve)-.2 G .559(rage netw).15 F .559(ork usage, or the peaks that)
+-.1 F 2.62(occurred. It)108 634.8 R .12
+(can also be used to display tidal w)2.62 F -2.25 -.2(av e)-.1 H .121
+(s, solar radiation, po).2 F .121(wer consumption, number of visitors)
+-.25 F .542(at an e)108 646.8 R .542(xhibition, noise le)-.15 F -.15(ve)
+-.25 G .542(ls near an airport, temperature on your f).15 F -.2(avo)-.1
+G .542(rite holiday location, temperature in).2 F .54
+(the fridge and whate)108 658.8 R -.15(ve)-.25 G 3.04(ry).15 G .54
+(ou imagination can come up with. Y)-3.04 F .54
+(ou need a sensor to measure the data and be)-1.1 F
+(able to feed the numbers to RRDtool.)108 670.8 Q 154.84(24/Oct/99 Last)
+72 768 R(change: 1.0.8)2.5 E(1)192.34 E EP
+%%Page: 2 2
+%%BeginPageSetup
+BP
+%%EndPageSetup
+/F0 10/Times-Roman@0 SF(RRDTUT)72 48 Q -.834(ORIAL \( 1 \))-.18 F
+130.862(rrdtool RRDTUT)133.362 F -.834(ORIAL \( 1 \))-.18 F/F1 10
+/Times-Bold@0 SF -9.998(WW)108 96 S -5.558(hh)9.998 G -4.998(aa)5.558 G
+6.656 -3.328(tt i)4.998 H(if).55 E 2.5(fI)-3.328 G 2.5(Is)-6.388 G(st)
+-6.388 E(ti)-3.328 E(il)-2.778 E(ll)-2.778 E 2.5(lh)-2.778 G(ha)-8.058 E
+-.25(av)-4.998 G -.1(ve)-4.748 G 2.5(ep)-4.338 G(pr)-8.058 E -.18(ro)
+-4.438 G(ob)-4.818 E(bl)-5.558 E(le)-2.778 E(em)-4.438 E(ms)-8.328 E 2.5
+(sa)-3.888 G(af)-7.498 E(ft)-3.328 E(te)-3.328 E(er)-4.438 E 2.5(rr)
+-4.438 G -.18(re)-6.938 G(ea)-4.258 E(ad)-4.998 E(di)-5.558 E(in)-2.778
+E(ng)-5.558 E 2.5(gt)-4.998 G(th)-5.828 E(hi)-5.558 E(is)-2.778 E 2.5
+(sd)-3.888 G(do)-8.058 E(oc)-4.998 E(cu)-4.438 E(um)-5.558 E(me)-8.328 E
+(en)-4.438 E(nt)-5.558 E 2.5(t?)-3.328 G(?)-7.498 E F0 .729
+(First of all: read it ag)108 112.8 R .729(ain! Y)-.05 F .729(ou may ha)
+-1.1 F 1.028 -.15(ve m)-.2 H .728(issed something.).15 F .728
+(If you are unable to compile the sources and)5.728 F .208(you ha)108
+124.8 R .508 -.15(ve a f)-.2 H .208(airly common).05 F/F2 9
+/Times-Roman@0 SF(OS)2.708 E F0 2.708(,i)C 2.708(tw)-2.708 G .208
+(ill probably not be the f)-2.708 F .209
+(ault of RRDtool. There may be precompiled v)-.1 F(er)-.15 E(-)-.2 E
+.556(sions around on the Internet. If the)108 136.8 R 3.056(yc)-.15 G
+.556(ome from trusted sources, get one of those.)-3.056 F .556
+(If on the other hand the)5.556 F .373(program w)108 148.8 R .373
+(orks b)-.1 F .373(ut does not gi)-.2 F .673 -.15(ve y)-.25 H .373
+(ou the e).15 F .374
+(xpected results, it will be a problem with con\214guring it. Re)-.15 F
+(vie)-.25 E(w)-.25 E(your con\214guration and compare it with the e)108
+160.8 Q(xamples that follo)-.15 E -.65(w.)-.25 G .053
+(There is a mailing list and an archi)108 177.6 R .352 -.15(ve o)-.25 H
+2.552(fi).15 G .052(t. Read the list for a fe)-2.552 F 2.552(ww)-.25 G
+.052(eeks and search the archi)-2.552 F -.15(ve)-.25 G 2.552(.I).15 G
+2.552(ti)-2.552 G 2.552(sc)-2.552 G(onsid-)-2.552 E .126
+(ered rude to just ask a question without searching the archi)108 189.6
+R -.15(ve)-.25 G .127(s: your problem may already ha).15 F .427 -.15
+(ve b)-.2 H .127(een solv).15 F(ed)-.15 E .504(for somebody else!)108
+201.6 R .503(This is true for most, if not all, mailing lists and not o\
+nly for this particular list! Look)5.504 F(in the documentation that ca\
+me with RRDtool for the location and usage of the list.)108 213.6 Q
+3.191(Is)108 230.4 S .691(uggest you tak)-3.191 F 3.191(eam)-.1 G .691
+(oment to subscribe to the mailing list right no)-3.191 F 3.191(wb)-.25
+G 3.191(ys)-3.191 G .691(ending an email to <rrd-users-)-3.191 F 1.379
+(request@list.ee.ethz.ch> with a subject of `)108 242.4 R(`subscribe')
+-.74 E 1.379('. If you e)-.74 F -.15(ve)-.25 G 3.879(rw).15 G 1.379
+(ant to lea)-3.979 F 1.679 -.15(ve t)-.2 H 1.378(his list, you write an)
+.15 F(email to the same address b)108 254.4 Q(ut no)-.2 E 2.5(ww)-.25 G
+(ith a subject of `)-2.5 E(`unsubscribe')-.74 E('.)-.74 E F1 -7.778(HH)
+108 277.2 S 7.396 -4.998(oo w)7.778 H 2.5(ww)-2.22 G(wi)-9.718 E(il)
+-2.778 E(ll)-2.778 E 2.5(ly)-2.778 G -.25(yo)-7.498 G(ou)-4.748 E 2.5
+(uh)-5.558 G(he)-8.058 E(el)-4.438 E(lp)-2.778 E 2.5(pm)-5.558 G(me)
+-10.828 E 2.5(e?)-4.438 G(?)-7.498 E F0 .382(By gi)108 294 R .382
+(ving you some detailed descriptions with detailed e)-.25 F 2.882
+(xamples. It)-.15 F .382(is assumed that follo)2.882 F .382
+(wing the instruc-)-.25 F .674(tions in the order presented will gi)108
+306 R .974 -.15(ve y)-.25 H .674(ou enough kno).15 F .674
+(wledge of RRDtool to e)-.25 F .674(xperiment for yourself.)-.15 F .674
+(If it)5.674 F(doesn')108 318 Q 3.203(tw)-.18 G .704
+(ork the \214rst time, don')-3.303 F 3.204(tg)-.18 G -2.15 -.25(iv e)
+-3.204 H .704(up. Reread the stuf)3.454 F 3.204(ft)-.25 G .704
+(hat you did understand, you may ha)-3.204 F 1.004 -.15(ve m)-.2 H
+(issed).15 E 2.755(something. By)108 330 R(follo)2.755 E .255
+(wing the e)-.25 F .254(xamples you get some hands-on e)-.15 F .254
+(xperience and, e)-.15 F -.15(ve)-.25 G 2.754(nm).15 G .254
+(ore important, some)-2.754 F(background information of ho)108 342 Q 2.5
+(wi)-.25 G 2.5(tw)-2.5 G(orks.)-2.6 E -1.1(Yo)108 358.8 S 5.044(uw)1.1 G
+2.544(ill need to kno)-5.044 F 5.044(ws)-.25 G 2.545(omething about he)
+-5.044 F 2.545(xadecimal numbers. If you don')-.15 F 5.045(tt)-.18 G
+2.545(hen start with reading)-5.045 F -.74(``)108 370.8 S(bin_dec_he).74
+E(x')-.15 E 2.5('b)-.74 G(efore you continue here.)-2.5 E F1 10.826
+-7.218(YY o)108 393.6 T(ou)2.22 E(ur)-5.558 E 2.5<728c>-4.438 G<8c72>
+-8.058 E(rs)-4.438 E(st)-3.888 E 2.5(tR)-3.328 G(Ro)-9.718 E(ou)-4.998 E
+(un)-5.558 E(nd)-5.558 E 2.5(dR)-5.558 G(Ro)-9.718 E(ob)-4.998 E(bi)
+-5.558 E(in)-2.778 E 2.5(nD)-5.558 G(Da)-9.718 E(at)-4.998 E(ta)-3.328 E
+(ab)-4.998 E(ba)-5.558 E(as)-4.998 E(se)-3.888 E(e)-4.438 E F0 .102
+(In my opinion the best w)108 410.4 R .102
+(ay to learn something is to actually do it.)-.1 F(Wh)5.101 E 2.601(yn)
+-.05 G .101(ot start right no)-2.601 F 2.601(w? W)-.25 F 2.601(ew)-.8 G
+.101(ill create)-2.601 F 2.944(ad)108 422.4 S .444(atabase, put some v)
+-2.944 F .444(alues in it and e)-.25 F .444(xtract this data ag)-.15 F
+2.944(ain. Y)-.05 F .444(our output should be the same as the output)
+-1.1 F(that is included in this document.)108 434.4 Q 2.605 -.8(We w)108
+451.2 T 1.005(ill start with some easy stuf).8 F 3.505(fa)-.25 G 1.005
+(nd compare a car with a router)-3.505 F 3.505(,o)-.4 G 3.504(rc)-3.505
+G 1.004(ompare kilometers \(miles if you)-3.504 F
+(wish\) with bits and bytes. It')108 463.2 Q 2.5(sa)-.55 G
+(ll the same: some number o)-2.5 E -.15(ve)-.15 G 2.5(rs).15 G
+(ome time.)-2.5 E 1.002(Assume we ha)108 480 R 1.302 -.15(ve a d)-.2 H
+-.25(ev).15 G 1.003(ice that transfers bytes to and from the Internet.)
+.25 F 1.003(This de)6.003 F 1.003(vice k)-.25 F 1.003
+(eeps a counter that)-.1 F .982
+(starts at zero when it is turned on, increasing with e)108 492 R -.15
+(ve)-.25 G .982(ry byte that is transfered. This counter will ha).15 F
+1.282 -.15(ve a)-.2 H 1.066(maximum v)108 504 R 1.066(alue, if that v)
+-.25 F 1.066(alue is reached and an e)-.25 F 1.066
+(xtra byte is counted, the counter starts all o)-.15 F -.15(ve)-.15 G
+3.567(ra).15 G 3.567(tz)-3.567 G(ero.)-3.567 E 1.276
+(This is the same as man)108 516 R 3.776(yc)-.15 G 1.276
+(ounters in the w)-3.776 F 1.276
+(orld such as the mileage counter in a car)-.1 F 6.275(.M)-.55 G 1.275
+(ost discussions)-6.275 F .471(about netw)108 528 R .471
+(orking talk about bits per second so lets get used to that right a)-.1
+F -.1(wa)-.15 G 1.771 -.65(y. A).1 H .471(ssume a byte is eight bits).65
+F .049(and start to think in bits not bytes. The counter)108 540 R 2.548
+(,h)-.4 G -.25(ow)-2.548 G -2.15 -.25(ev e).25 H .848 -.4(r, s).25 H
+.048(till counts bytes !).4 F .048(In the)5.048 F F2(SNMP)2.548 E F0 -.1
+(wo)2.548 G .048(rld most of the).1 F .566
+(counters are 32 bits. That means the)108 552 R 3.066(ya)-.15 G .566
+(re counting from 0 to 4294967295. W)-3.066 F 3.067(ew)-.8 G .567
+(ill use these v)-3.067 F .567(alues in the)-.25 F -.15(ex)108 564 S
+3.71(amples. The).15 F(de)3.71 E 1.21(vice, when ask)-.25 F 1.21
+(ed, returns the current v)-.1 F 1.209(alue of the counter)-.25 F 3.709
+(.W)-.55 G 3.709(ek)-4.509 G(no)-3.709 E 3.709(wt)-.25 G 1.209
+(he time that has)-3.709 F .861(passes since we last ask)108 576 R .861
+(ed so we no)-.1 F 3.361(wk)-.25 G(no)-3.361 E 3.361(wh)-.25 G 1.361
+-.25(ow m)-3.361 H(an).25 E 3.361(yb)-.15 G .861(ytes ha)-3.361 F 1.161
+-.15(ve b)-.2 H .861(een transfered).15 F/F3 10/Symbol SF(***)3.362 E F0
+.862(on a)B -.15(ve)-.2 G(rage).15 E F3(***)A F0(per)3.362 E
+(second. This is not v)108 588 Q(ery hard to calculate. First in w)-.15
+E(ords, then in calculations:)-.1 E 5(1. T)108 604.8 R(ak)-.8 E 2.5(et)
+-.1 G(he current counter)-2.5 E 2.5(,s)-.4 G(ubtract the pre)-2.5 E
+(vious v)-.25 E(alue from it.)-.25 E 5(2. Do)108 621.6 R
+(the same with the current time and the pre)2.5 E(vious time.)-.25 E 5
+(3. Di)108 638.4 R .311(vide the outcome of \(1\) by the outcome of \(2\
+\), the result is the amount of bytes per second. Multiply)-.25 F
+(by eight to get the number of bits per second \(bps\).)123 650.4 Q/F4
+10/Courier@0 SF
+(bps = \(counter_now - counter_before\) / \(time_now - time_before\))120
+667.2 Q F3(*)6 E F4(8)6 E F0 -.15(Fo)108 691.2 S 2.915(rs).15 G .415
+(ome people it may help to translate this to a automobile e)-2.915 F
+.416(xample: Do not try this e)-.15 F .416(xample, and if you)-.15 F
+(do, don')108 703.2 Q 2.5(tb)-.18 G(lame me for the results.)-2.5 E
+154.84(24/Oct/99 Last)72 768 R(change: 1.0.8)2.5 E(2)192.34 E EP
+%%Page: 3 3
+%%BeginPageSetup
+BP
+%%EndPageSetup
+/F0 10/Times-Roman@0 SF(RRDTUT)72 48 Q -.834(ORIAL \( 1 \))-.18 F
+130.862(rrdtool RRDTUT)133.362 F -.834(ORIAL \( 1 \))-.18 F .456(People\
+ who are not used to think in kilometers per hour can translate most in\
+to miles per hour by di)108 96 R(viding)-.25 E
+(km by 1.6 \(close enough\).)108 108 Q 2.5(Iw)5 G(ill use the follo)-2.5
+E(wing abbre)-.25 E(viations:)-.25 E/F1 10/Courier@0 SF 18(M: meter)114
+124.8 R 12(KM: kilometer)114 136.8 R(\(= 1000 meters\).)6 E 18(H: hour)
+114 148.8 R 18(S: second)114 160.8 R(KM/H: kilometers per hour)114 172.8
+Q 6(M/S: meters)114 184.8 R(per second)6 E F0 -1.1(Yo)108 208.8 S(u')1.1
+E .28(re dri)-.5 F .28(ving a car)-.25 F 2.78(.A)-.55 G 2.78(t1)-2.78 G
+.281(2:05 you read the counter in the dashboard and it tells you that t\
+he car has mo)-2.78 F -.15(ve)-.15 G(d).15 E(12345)108 220.8 Q/F2 9
+/Times-Roman@0 SF(KM)3.019 E F0 .519(until that moment.)3.019 F .519
+(At 12:10 you look ag)5.519 F .518(ain, it reads 12357)-.05 F F2(KM)
+3.018 E F0 3.018(.T)C .518(his means you ha)-3.018 F .818 -.15(ve t)-.2
+H(ra).15 E -.15(ve)-.2 G(led).15 E(12)108 232.8 Q F2(KM)3.061 E F0 .561
+(in \214v)3.061 F 3.061(em)-.15 G .561(inutes. A scientist w)-3.061 F
+.562(ould translate that into meters per second and this mak)-.1 F .562
+(es a nice com-)-.1 F(parison to)108 244.8 Q -.1(wa)-.25 G
+(rds the problem of \(bytes per \214v).1 E 2.5(em)-.15 G(inutes\) v)-2.5
+E(ersus \(bits per second\).)-.15 E 1.63 -.8(We t)108 261.6 T(ra).8 E
+-.15(ve)-.2 G .03(led 12 kilometers which is 12000 meters. W).15 F 2.53
+(ed)-.8 G .03(id that in \214v)-2.53 F 2.53(em)-.15 G .03
+(inutes which translates into 300 sec-)-2.53 F
+(onds. Our speed is 12000M / 300S equals 40 M/S.)108 273.6 Q 1.867 -.8
+(We c)108 290.4 T .267(ould also calculate the speed in).8 F F2(KM/H)
+2.767 E F0 2.767(:1)C 2.767(2t)-2.767 G .267(imes \214v)-2.767 F 2.767
+(em)-.15 G .267(inutes is an hour so we ha)-2.767 F .568 -.15(ve t)-.2 H
+2.768(om).15 G .268(ultiply 12)-2.768 F F2(KM)2.768 E F0 .162
+(by 12 to get 144)108 302.4 R F2(KM/H)2.662 E F0 5.162(.F)C .162
+(or our nati)-5.312 F .461 -.15(ve E)-.25 H .161
+(nglish speaking friends: that').15 F 2.661(s9)-.55 G(0)-2.661 E F2(MPH)
+2.661 E F0 .161(so don')2.661 F 2.661(tt)-.18 G .161(ry this e)-2.661 F
+.161(xample at)-.15 F(home or where I li)108 314.4 Q .3 -.15(ve :)-.25 H
+(\)).15 E .208(Remember: these numbers are a)108 331.2 R -.15(ve)-.2 G
+.209(rages only).15 F 5.209(.T)-.65 G .209(here is no w)-5.209 F .209
+(ay to \214gure out from the numbers, if you dro)-.1 F -.15(ve)-.15 G
+(at a constant speed.)108 343.2 Q(There is an e)5 E
+(xample later on in this tutorial that e)-.15 E(xplains this.)-.15 E
+2.538(Ih)108 360 S .038(ope you understand that there is no dif)-2.538 F
+.038(ference in calculating M/S or bps; only the w)-.25 F .038
+(ay we collect the data)-.1 F(is dif)108 372 Q(ferent. Ev)-.25 E
+(en the K from kilo is the same as in netw)-.15 E
+(orking terms k also means 1000.)-.1 E 2.228 -.8(We w)108 388.8 T .628
+(ill no).8 F 3.128(wc)-.25 G .628(reate a database where we can k)-3.128
+F .629(eep all these interesting numbers. The method used to start)-.1 F
+.853(the program may dif)108 400.8 R .853(fer slightly from)-.25 F F2
+(OS)3.352 E F0(to)3.352 E F2(OS)3.352 E F0 -.2(bu)3.352 G 3.352(tIa).2 G
+.852(ssume you can \214gure it out if it w)-3.352 F .852(orks dif)-.1 F
+.852(ferent on)-.25 F(your)108 412.8 Q F2(OS)2.989 E F0 2.989(.M)C(ak)
+-2.989 E 2.989(es)-.1 G .489(ure you do not o)-2.989 F -.15(ve)-.15 G
+.489(rwrite an).15 F 2.989<798c>-.15 G .489(le on your system when e)
+-2.989 F -.15(xe)-.15 G .49(cuting the follo).15 F .49(wing command)-.25
+F(and type the whole line as one long line \(I had to split it for read\
+ability\) and skip all of the `\\' characters.)108 424.8 Q F1
+(rrdtool create test.rrd)126 441.6 Q(\\)78 E(--start 920804400)180 453.6
+Q(\\)60 E 12(DS:speed:COUNTER:600:U:U \\)180 465.6 R 36
+(RRA:AVERAGE:0.5:1:24 \\)180 477.6 R(RRA:AVERAGE:0.5:6:10)180 489.6 Q F0
+(\(So enter:)108 513.6 Q F1
+(rrdtool create test.rrd --start 920804400 DS ...)2.5 E F0(\))A/F3 10
+/Times-Bold@0 SF -9.998(WW)108 536.4 S -5.558(hh)9.998 G -4.998(aa)5.558
+G 6.656 -3.328(tt h)4.998 H(ha)-2.23 E(as)-4.998 E 2.5(sb)-3.888 G(be)
+-8.058 E(ee)-4.438 E(en)-4.438 E 2.5(nc)-5.558 G(cr)-6.938 E -.18(re)
+-4.438 G(ea)-4.258 E(at)-4.998 E(te)-3.328 E(ed)-4.438 E 2.5(d?)-5.558 G
+(?)-7.498 E F0 3.135 -.8(We c)108 553.2 T 1.534(reated the round robin \
+database called test \(test.rrd\) which starts at noon the day I starte\
+d \(7th of).8 F .933
+(march, 1999\) writing this document. It holds one data source \()108
+565.2 R F2(DS)A F0 3.433(\)n)C .933(amed `)-3.433 F(`speed')-.74 E 3.433
+('t)-.74 G .933(hat gets b)-3.433 F .933(uilt from a)-.2 F(counter)108
+577.2 Q 3.623(.T)-.55 G 1.123(his counter is read e)-3.623 F -.15(ve)
+-.25 G 1.123(ry \214v).15 F 3.623(em)-.15 G 1.123(inutes \(def)-3.623 F
+1.122(ault\) In the same database tw)-.1 F 3.622(or)-.1 G 1.122
+(ound robin archi)-3.622 F -.15(ve)-.25 G(s).15 E .83(\(RRAs\) are k)108
+589.2 R .83(ept, one a)-.1 F -.15(ve)-.2 G .83(rages the data e).15 F
+-.15(ve)-.25 G .831(ry time it is read \(e).15 F 3.331(gt)-.15 G(here')
+-3.331 E 3.331(sn)-.55 G .831(othing to a)-3.331 F -.15(ve)-.2 G .831
+(rage\) and k).15 F .831(eeps 24)-.1 F .784
+(samples \(24 times 5 minutes is 2 hours\). The other a)108 601.2 R -.15
+(ve)-.2 G .784(rages 6 v).15 F .783
+(alues \(half hour\) and contains 10 of such)-.25 F -2.25 -.2(av e)108
+613.2 T(rages \(e).2 E 2.5(g5h)-.15 G
+(ours\) The remaining options will be discussed later on.)-2.5 E .489
+(RRDtool w)108 630 R .49(orks with special time stamps coming from the)
+-.1 F F2(UNIX)2.99 E F0 -.1(wo)2.99 G 2.99(rld. This).1 F .49
+(time stamp is the number of)2.99 F .779
+(seconds that passed since January 1st 1970)108 642 R F2(UTC)3.279 E F0
+5.779(.T)C .779
+(his time stamp is translated into local time and it will)-5.779 F
+(therefore look dif)108 654 Q(ferent for the dif)-.25 E
+(ferent time zones.)-.25 E .249
+(Chances are that you are not in the same part of the w)108 670.8 R .25
+(orld as I am.)-.1 F .25(This means your time zone is dif)5.25 F
+(ferent.)-.25 E .105(In all e)108 682.8 R .104(xamples where I talk abo\
+ut time, the hours may be wrong for you. This has little ef)-.15 F .104
+(fect on the results)-.25 F 1.082(of the e)108 694.8 R 1.082
+(xamples, just correct the hours while reading.)-.15 F 1.082(As an e)
+6.082 F 1.083(xample: where I will see `)-.15 F(`12:05')-.74 E 3.583('t)
+-.74 G(he)-3.583 E F2(UK)3.583 E F0(folks will see `)108 706.8 Q
+(`11:05')-.74 E('.)-.74 E 154.84(24/Oct/99 Last)72 768 R(change: 1.0.8)
+2.5 E(3)192.34 E EP
+%%Page: 4 4
+%%BeginPageSetup
+BP
+%%EndPageSetup
+/F0 10/Times-Roman@0 SF(RRDTUT)72 48 Q -.834(ORIAL \( 1 \))-.18 F
+130.862(rrdtool RRDTUT)133.362 F -.834(ORIAL \( 1 \))-.18 F 1.6 -.8
+(We n)108 96 T .5 -.25(ow h).8 H -2.25 -.2(av e).25 H
+(to \214ll our database with some numbers. W)2.7 E(e')-.8 E
+(ll pretend to ha)-.1 E .3 -.15(ve r)-.2 H(ead the follo).15 E
+(wing numbers:)-.25 E/F1 10/Courier@0 SF 6(12:05 12345)114 112.8 R(KM)6
+E 6(12:10 12357)114 124.8 R(KM)6 E 6(12:15 12363)114 136.8 R(KM)6 E 6
+(12:20 12363)114 148.8 R(KM)6 E 6(12:25 12363)114 160.8 R(KM)6 E 6
+(12:30 12373)114 172.8 R(KM)6 E 6(12:35 12383)114 184.8 R(KM)6 E 6
+(12:40 12393)114 196.8 R(KM)6 E 6(12:45 12399)114 208.8 R(KM)6 E 6
+(12:50 12405)114 220.8 R(KM)6 E 6(12:55 12411)114 232.8 R(KM)6 E 6
+(13:00 12415)114 244.8 R(KM)6 E 6(13:05 12420)114 256.8 R(KM)6 E 6
+(13:10 12422)114 268.8 R(KM)6 E 6(13:15 12423)114 280.8 R(KM)6 E F0 1.6
+-.8(We \214)108 304.8 T(ll the database as follo).8 E(ws:)-.25 E F1(rrd\
+tool update test.rrd 920804700:12345 920805000:12357 920805300:12363)114
+321.6 Q(rrdtool update test.rrd 920805600:12363 920805900:12363 9208062\
+00:12373)114 333.6 Q(rrdtool update test.rrd 920806500:12383 920806800:\
+12393 920807100:12399)114 345.6 Q(rrdtool update test.rrd 920807400:124\
+05 920807700:12411 920808000:12415)114 357.6 Q(rrdtool update test.rrd \
+920808300:12420 920808600:12422 920808900:12423)114 369.6 Q F0
+(This reads: update our test database with the follo)108 393.6 Q
+(wing numbers)-.25 E F1(time 920804700, value 12345)114 410.4 Q
+(time 920805000, value 12357)114 422.4 Q F0(etcetera.)108 446.4 Q .433
+(As you can see, it is possible to feed more than one v)108 463.2 R .433
+(alue into the database in one command. I had to stop)-.25 F
+(at three for readability b)108 475.2 Q(ut the real maximum is)-.2 E/F2
+9/Times-Roman@0 SF(OS)2.5 E F0(dependent.)2.5 E 1.6 -.8(We c)108 492 T
+(an no).8 E 2.5(wr)-.25 G(etrie)-2.5 E .3 -.15(ve t)-.25 H
+(he data from our database using `).15 E(`rrdtool fetch":)-.74 E F1
+(rrdtool fetch test.rrd AVERAGE --start 920804400 --end 920809200)114
+508.8 Q F0(It should return the follo)108 532.8 Q(wing output:)-.25 E F1
+(speed)204 549.6 Q F0 154.84(24/Oct/99 Last)72 768 R(change: 1.0.8)2.5 E
+(4)192.34 E EP
+%%Page: 5 5
+%%BeginPageSetup
+BP
+%%EndPageSetup
+/F0 10/Times-Roman@0 SF(RRDTUT)72 48 Q -.834(ORIAL \( 1 \))-.18 F
+130.862(rrdtool RRDTUT)133.362 F -.834(ORIAL \( 1 \))-.18 F/F1 10
+/Courier@0 SF 36(920804700: NaN)114 96 R 30(920805000: 0.04)114 108 R 30
+(920805300: 0.02)114 120 R 30(920805600: 0.00)114 132 R 30
+(920805900: 0.00)114 144 R 30(920806200: 0.03)114 156 R 30
+(920806500: 0.03)114 168 R 30(920806800: 0.03)114 180 R 30
+(920807100: 0.02)114 192 R 30(920807400: 0.02)114 204 R 30
+(920807700: 0.02)114 216 R 30(920808000: 0.01)114 228 R 30
+(920808300: 0.02)114 240 R 30(920808600: 0.01)114 252 R 30
+(920808900: 0.00)114 264 R 36(920809200: NaN)114 276 R F0 .925
+(If it doesn')108 300 R .925(t, something may be wrong.)-.18 F .925
+(Perhaps your)5.925 F/F2 9/Times-Roman@0 SF(OS)3.425 E F0 .926
+(will print `)3.425 F(`NaN')-.74 E 3.426('i)-.74 G 3.426(nad)-3.426 G
+(if)-3.426 E .926(ferent form.)-.25 F .926(It repre-)5.926 F 1.011
+(sents `)108 312 R 1.011(`Not A Number')-.74 F 3.511('. If)-.74 F(your)
+3.511 E F2(OS)3.511 E F0 1.01(writes `)3.51 F(`U')-.74 E 3.51('o)-.74 G
+3.51(r`)-3.51 G(`)-4.25 E F2(UNKN)A F0 2.49 -.74('' o)D 3.51(rs).74 G
+1.01(omething similar that')-3.51 F 3.51(so)-.55 G(kay)-3.51 E 6.01(.I)
+-.65 G 3.51(fs)-6.01 G(ome-)-3.51 E .838(thing else is wrong, it will p\
+robably be due to an error you made \(assuming that my tutorial is corr\
+ect of)108 324 R
+(course :\255\). In that case: delete the database and try ag)108 336 Q
+(ain.)-.05 E(What this output represents will become clear in the rest \
+of the tutorial.)108 352.8 Q/F3 10/Times-Bold@0 SF -3.888(II)108 375.6 S
+6.656 -3.328(tt i)3.888 H(is).55 E 2.5(st)-3.888 G(ti)-5.828 E(im)-2.778
+E(me)-8.328 E 2.5(et)-4.438 G(to)-5.828 E 2.5(oc)-4.998 G(cr)-6.938 E
+-.18(re)-4.438 G(ea)-4.258 E(at)-4.998 E(te)-3.328 E 2.5(es)-4.438 G(so)
+-6.388 E(om)-4.998 E(me)-8.328 E 2.5(eg)-4.438 G(gr)-7.498 E(ra)-4.438 E
+(ap)-4.998 E(ph)-5.558 E(hi)-5.558 E(ic)-2.778 E(cs)-4.438 E(s)-3.888 E
+F0 -.35(Tr)108 392.4 S 2.5(yt).35 G(he follo)-2.5 E(wing command:)-.25 E
+F1(rrdtool graph speed.gif)114 409.2 Q(\\)198 E
+(--start 920804400 --end 920808000)162 421.2 Q(\\)90 E 78
+(DEF:myspeed=test.rrd:speed:AVERAGE \\)162 433.2 R(LINE2:myspeed#FF0000)
+162 445.2 Q F0 2.325
+(This will create speed.gif which starts at 12:00 and ends at 13:00.)108
+469.2 R 2.325(There is a de\214nition of v)7.325 F(ariable)-.25 E .491
+(myspeed, it is the data from)108 481.2 R F2(RRA)2.991 E F0 -.74(``)
+2.991 G(speed').74 E 2.991('o)-.74 G .491(ut of database `)-2.991 F
+(`test.rrd')-.74 E .492('. The line dra)-.74 F .492(wn is 2 pix)-.15 F
+.492(els high, and)-.15 F .366(comes from v)108 493.2 R .366
+(ariable myspeed. The color is red.)-.25 F -1.1(Yo)5.366 G(u')1.1 E .366
+(ll notice that the start of the graph is not at 12:00 b)-.1 F(ut)-.2 E
+1.064(at 12:05 and this is because we ha)108 505.2 R 1.365 -.15(ve i)-.2
+H(nsuf).15 E 1.065(\214cient data to tell the a)-.25 F -.15(ve)-.2 G
+1.065(rage before that time. This will only).15 F(happen when you miss \
+some samples, this will not happen a lot, hopefully)108 517.2 Q(.)-.65 E
+(If this has w)108 534 Q(ork)-.1 E
+(ed: congratulations! If not, check what went wrong.)-.1 E .148
+(The colors are b)108 550.8 R .148(uilt up from red, green and blue. F)
+-.2 F .148(or each of the components, you specify ho)-.15 F 2.648(wm)
+-.25 G .148(uch to use)-2.648 F .201(in he)108 562.8 R .201
+(xadecimal where 00 means not included and)-.15 F F2(FF)2.701 E F0 .201
+(means fully included.)2.701 F .202(The `)5.201 F(`color')-.74 E 2.702
+('w)-.74 G .202(hite is a mixture)-2.702 F(of red, green and blue:)108
+574.8 Q F2(FFFFFF)2.5 E F0(The `)2.5 E(`color')-.74 E 2.5('b)-.74 G
+(lack is all colors of)-2.5 E(f: 000000)-.25 E F1 24(red #FF0000)126
+591.6 R 12(green #00FF00)126 603.6 R 18(blue #0000FF)126 615.6 R
+(magenta #FF00FF)126 627.6 Q(\(mixed red with blue\))30 E 18
+(gray #555555)126 639.6 R(\(one third of all components\))30 E F0(The)
+108 663.6 Q F2(GIF)2.643 E F0 .143
+(you just created can be displayed using your f)2.643 F -.2(avo)-.1 G
+.143(rite image vie).2 F(wer)-.25 E 5.143(.W)-.55 G .143(eb bro)-5.943 F
+.143(wsers will display the)-.25 F F2(GIF)108 675.6 Q F0(via the)2.5 E
+F2(URL)2.5 E F0 -.74(``)2.5 G -1.95(\214le://the/path/to/speed.gif ').74
+F(')-.74 E 154.84(24/Oct/99 Last)72 768 R(change: 1.0.8)2.5 E(5)192.34 E
+EP
+%%Page: 6 6
+%%BeginPageSetup
+BP
+%%EndPageSetup
+/F0 10/Times-Roman@0 SF(RRDTUT)72 48 Q -.834(ORIAL \( 1 \))-.18 F
+130.862(rrdtool RRDTUT)133.362 F -.834(ORIAL \( 1 \))-.18 F/F1 10
+/Times-Bold@0 SF -7.778(GG)108 96 S -4.438(rr)7.778 G -4.998(aa)4.438 G
+-5.558(pp)4.998 G -5.558(hh)5.558 G -2.778(ii)5.558 G -4.438(cc)2.778 G
+7.776 -3.888(ss w)4.438 H(wi)-3.33 E(it)-2.778 E(th)-3.328 E 2.5(hs)
+-5.558 G(so)-6.388 E(om)-4.998 E(me)-8.328 E 2.5(em)-4.438 G(ma)-10.828
+E(at)-4.998 E(th)-3.328 E(h)-5.558 E F0 .985(When looking at the image,\
+ you notice that the horizontal axis is labeled 12:10, 12:20, 12:30, 12\
+:40 and)108 112.8 R .305(12:50. The tw)108 124.8 R 2.804(or)-.1 G .304
+(emaining times \(12:00 and 13:00\) w)-2.804 F .304
+(ould not be displayed nicely so the)-.1 F 2.804(ya)-.15 G .304
+(re skipped.)-2.804 F(The)5.304 E -.15(ve)108 136.8 S .492
+(rtical axis displays the range we entered. W).15 F 2.992(ep)-.8 G(ro)
+-2.992 E .493(vided kilometers and when di)-.15 F .493
+(vided by 300 seconds, we)-.25 F .647(get v)108 148.8 R .646
+(ery small numbers. T)-.15 F 3.146(ob)-.8 G 3.146(ee)-3.146 G .646
+(xact, the \214rst v)-3.296 F .646(alue w)-.25 F .646
+(as 12 \(12357-12345\) and di)-.1 F .646(vided by 300 this mak)-.25 F
+(es)-.1 E 1.165(0.04, which is displayed by RRDtool as `)108 160.8 R
+1.165(`40 m')-.74 F 3.665('m)-.74 G 1.165(eaning `)-3.665 F(`40/1000')
+-.74 E 1.165('. The `)-.74 F(`m')-.74 E 3.666('h)-.74 G 1.166
+(as nothing to do with)-3.666 F .193
+(meters, kilometers or millimeters! RRDtool doesn')108 172.8 R 2.693(tk)
+-.18 G(no)-2.693 E 2.693(wa)-.25 G .193(bout all this, it just w)-2.693
+F .193(orks with numbers and not)-.1 F(with meters...)108 184.8 Q 5.568
+(What we did wrong w)108 201.6 R 5.568(as that we should ha)-.1 F 5.868
+-.15(ve m)-.2 H 5.568(easured in meters, this w).15 F 5.568(ould ha)-.1
+F 5.868 -.15(ve b)-.2 H(een).15 E
+(\(12357000-12345000\)/300 = 12000/300 = 40.)108 213.6 Q(Let')108 230.4
+Q 3.46(sc)-.55 G .96(orrect that. W)-3.46 F 3.46(ec)-.8 G .96
+(ould recreate our database and store the correct data b)-3.46 F .959
+(ut there is a better w)-.2 F .959(ay: do)-.1 F
+(some calculations while creating the gif \214le !)108 242.4 Q/F2 10
+/Courier@0 SF(rrdtool graph speed2.gif)126 259.2 Q(\\)162 E
+(--start 920804400 --end 920808000)144 271.2 Q(\\)90 E
+(--vertical-label m/s)144 283.2 Q(\\)168 E 78
+(DEF:myspeed=test.rrd:speed:AVERAGE \\)144 295.2 R
+(CDEF:realspeed=myspeed,1000,)144 307.2 Q/F3 10/Symbol SF(*)A F2(\\)114
+E(LINE2:realspeed#FF0000)144 319.2 Q F0 .244(After vie)108 343.2 R .244
+(wing this)-.25 F/F4 9/Times-Roman@0 SF(GIF)2.744 E F0 2.744(,y)C .244
+(ou notice the `)-2.744 F(`m')-.74 E 2.744('h)-.74 G .245
+(as disappeared. This it what the correct result w)-2.744 F .245
+(ould be. Also,)-.1 F 2.5(al)108 355.2 S
+(abel has been added to the image.)-2.5 E
+(Apart from the things mentioned abo)5 E -.15(ve)-.15 G 2.5(,t).15 G(he)
+-2.5 E F4(GIF)2.5 E F0(should be the same.)2.5 E .04
+(The calculations are in the)108 372 R F4(CDEF)2.54 E F0 .04
+(part and are in Re)2.54 F -.15(ve)-.25 G .039(rse Polish Notation \(")
+.15 F F4(RPN)A F0 .039("\). What it says is: `)B(`tak)-.74 E 2.539(et)
+-.1 G(he)-2.539 E 2.563
+(data source myspeed and the number 1000; multiply those')108 384 R
+2.563('. Don')-.74 F 5.063(tb)-.18 G 2.563(other with)-5.063 F F4(RPN)
+5.063 E F0 2.563(yet, it will be)5.063 F -.15(ex)108 396 S .01
+(plained later on in more detail. Also, you may w).15 F .01
+(ant to read my tutorial on CDEFs and Ste)-.1 F .31 -.15(ve R)-.25 H
+(ader').15 E 2.51(st)-.55 G(uto-)-2.51 E(rial on)108 408 Q F4(RPN)2.5 E
+F0 2.5(.B)C(ut \214rst \214nish this tutorial.)-2.5 E 1.099
+(Hang on! If we can multiply v)108 424.8 R 1.099(alues with 1000, it sh\
+ould also be possible to display kilometers per hour)-.25 F
+(from the same data!)108 436.8 Q 1.6 -.8(To c)108 453.6 T(hange a v).8 E
+(alue that is measured in meters per second:)-.25 E<ad>110.5 465.6 Q F3
+(*)A F0 2.5(-C)C(alculate meters per hour:)-2.5 E -.25(va)12.5 G(lue).25
+E F3(*)2.5 E F0(3600)2.5 E<ad>110.5 477.6 Q F3(*)A F0 2.5(-C)C
+(alculate kilometers per hour: v)-2.5 E(alue / 1000)-.25 E<ad>110.5
+489.6 Q F3(*)A F0 2.5(-T)C(ogether this mak)-3.3 E 25(es: v)-.1 F(alue)
+-.25 E F3(*)2.5 E F0(\(3600/1000\) == v)2.5 E(alue)-.25 E F3(*)2.5 E F0
+(3.6)2.5 E .299(In our e)108 506.4 R .299
+(xample database we made a mistak)-.15 F 2.798(ea)-.1 G .298
+(nd we need to compensate for this by multiplying with 1000.)-2.798 F
+(Applying that correction:)108 518.4 Q<ad>110.5 530.4 Q F3(*)A F0 2.5
+(-v)C(alue)-2.75 E F3(*)2.5 E F0(3.6)2.5 E F3(*)5 E F0(1000 == v)A(alue)
+-.25 E F3(*)2.5 E F0(3600)2.5 E(No)108 547.2 Q 2.5(wl)-.25 G(et')-2.5 E
+2.5(sc)-.55 G(reate this)-2.5 E F4(GIF)2.5 E F0 2.5(,a)C
+(nd add some more magic ...)-2.5 E F2(rrdtool graph speed3.gif)126 564 Q
+(\\)162 E(--start 920804400 --end 920808000)144 576 Q(\\)90 E
+(--vertical-label km/h)144 588 Q(\\)162 E 78
+(DEF:myspeed=test.rrd:speed:AVERAGE \\)144 600 R
+("CDEF:kmh=myspeed,3600,)144 612 Q F3(*)A F2 138("\\)C 108
+(CDEF:fast=kmh,100,GT,kmh,0,IF \\)144 624 R 108
+(CDEF:good=kmh,100,GT,0,kmh,IF \\)144 636 R
+(HRULE:100#0000FF:"Maximum allowed")144 648 Q(\\)84 E
+(AREA:good#00FF00:"Good speed")144 660 Q(\\)114 E
+(AREA:fast#FF0000:"Too fast")144 672 Q F0 .966(This looks much better)
+108 696 R 3.466(.S)-.55 G .966(peed in)-3.466 F F4(KM/H)3.467 E F0 .967
+(and e)3.467 F -.15(ve)-.25 G 3.467(na).15 G 3.467(ne)-3.467 G .967
+(xtra line with the maximum allo)-3.617 F .967(wed speed \(on the)-.25 F
+(road I tra)108 708 Q -.15(ve)-.2 G 2.5(la).15 G(t\). I also changed th\
+e colors used to display speed and changed it from a line into an area.)
+-2.5 E 154.84(24/Oct/99 Last)72 768 R(change: 1.0.8)2.5 E(6)192.34 E EP
+%%Page: 7 7
+%%BeginPageSetup
+BP
+%%EndPageSetup
+/F0 10/Times-Roman@0 SF(RRDTUT)72 48 Q -.834(ORIAL \( 1 \))-.18 F
+130.862(rrdtool RRDTUT)133.362 F -.834(ORIAL \( 1 \))-.18 F
+(The calculations are more comple)108 96 Q 2.5(xn)-.15 G -.25(ow)-2.5 G
+2.5(.F)-.4 G(or the `)-2.65 E(`good')-.74 E 2.5('s)-.74 G(peed the)-2.5
+E 2.5(ya)-.15 G(re:)-2.5 E/F1 10/Courier@0 SF
+(Check if kmh is greater than 100)126 112.8 Q 6(\(k)24 G(mh,100 \) GT)-6
+E(If so, return 0, else kmh)126 124.8 Q
+(\(\(\( kmh,100 \) GT \), 0, kmh\) IF)66 E F0 -.15(Fo)108 148.8 S 2.5
+(rt).15 G(he other speed:)-2.5 E F1(Check if kmh is greater than 100)126
+165.6 Q 6(\(k)24 G(mh,100 \) GT)-6 E(If so, return kmh, else return 0)
+126 177.6 Q(\(\(\( kmh,100\) GT \), kmh, 0\) IF)24 E/F2 10/Times-Bold@0
+SF -7.778(GG)108 212.4 S -4.438(rr)7.778 G -4.998(aa)4.438 G -5.558(pp)
+4.998 G -5.558(hh)5.558 G -2.778(ii)5.558 G -4.438(cc)2.778 G 7.776
+-3.888(ss M)4.438 H(Ma)-5.55 E(ag)-4.998 E(gi)-4.998 E(ic)-2.778 E(c)
+-4.438 E F0 2.977(Il)108 229.2 S(ik)-2.977 E 2.977(et)-.1 G 2.977(ob)
+-2.977 G(elie)-2.977 E .777 -.15(ve t)-.25 H .476
+(here are virtually no limits to ho).15 F 2.976(wR)-.25 G .476
+(RDtool graph can manipulate data. I will not e)-2.976 F(xplain)-.15 E
+(ho)108 241.2 Q 2.5(wi)-.25 G 2.5(tw)-2.5 G(orks, b)-2.6 E
+(ut look at the follo)-.2 E(wing)-.25 E/F3 9/Times-Roman@0 SF(GIF)2.5 E
+F0(:)A F1(rrdtool graph speed4.gif)126 258 Q(\\)162 E
+(--start 920804400 --end 920808000)144 270 Q(\\)90 E
+(--vertical-label km/h)144 282 Q(\\)162 E 78
+(DEF:myspeed=test.rrd:speed:AVERAGE \\)144 294 R
+("CDEF:kmh=myspeed,3600,)144 306 Q/F4 10/Symbol SF(*)A F1 138("\\)C 108
+(CDEF:fast=kmh,100,GT,100,0,IF \\)144 318 R 72
+(CDEF:over=kmh,100,GT,kmh,100,-,0,IF \\)144 330 R 108
+(CDEF:good=kmh,100,GT,0,kmh,IF \\)144 342 R
+(HRULE:100#0000FF:"Maximum allowed")144 354 Q(\\)84 E
+(AREA:good#00FF00:"Good speed")144 366 Q(\\)114 E
+(AREA:fast#550000:"Too fast")144 378 Q(\\)126 E
+(STACK:over#FF0000:"Over speed")144 390 Q F0(Let')108 414 Q 2.5(sc)-.55
+G(reate a quick and dirty)-2.5 E F3(HTML)2.5 E F0(page to vie)2.5 E 2.5
+(wt)-.25 G(hree GIFs:)-2.5 E F1
+(<HTML><HEAD><TITLE>Speed</TITLE></HEAD><BODY>)126 430.8 Q
+(<IMG src="speed2.gif" alt="Speed in meters per second">)126 442.8 Q
+(<BR>)126 454.8 Q
+(<IMG src="speed3.gif" alt="Speed in kilometers per hour">)126 466.8 Q
+(<BR>)126 478.8 Q(<IMG src="speed4.gif" alt="Traveled too fast?">)126
+490.8 Q(</BODY></HTML>)126 502.8 Q F0(Name the \214le `)108 526.8 Q
+(`speed.html')-.74 E 2.5('o)-.74 G 2.5(rs)-2.5 G(imilar)-2.5 E 2.5(,a)
+-.4 G(nd vie)-2.5 E 2.5(wi)-.25 G(t.)-2.5 E(No)108 543.6 Q 1.865 -.65
+(w, a)-.25 H .565(ll you ha).65 F .865 -.15(ve t)-.2 H 3.066(od).15 G
+3.066(oi)-3.066 G 3.066(sm)-3.066 G .566(easure the v)-3.066 F .566
+(alues re)-.25 F .566(gularly and update the database.)-.15 F .566
+(When you w)5.566 F .566(ant to vie)-.1 F(w)-.25 E .506
+(the data, recreate the GIFs and mak)108 555.6 R 3.006(es)-.1 G .506
+(ure to refresh them in your bro)-3.006 F(wser)-.25 E 3.006(.\()-.55 G
+.506(Note: just clicking reload may)-3.006 F .12
+(not be enough; Netscape in particular has a problem doing so and you')
+108 567.6 R .121(ll need to click reload while pressing)-.1 F
+(the shift k)108 579.6 Q -.15(ey)-.1 G(\).).15 E F2 -7.218(UU)108 602.4
+S -5.558(pp)7.218 G -5.558(dd)5.558 G -4.998(aa)5.558 G -3.328(tt)4.998
+G -4.438(ee)3.328 G 7.776 -3.888(ss i)4.438 H(in)1.11 E 2.5(nR)-5.558 G
+(Re)-9.718 E(ea)-4.438 E(al)-4.998 E(li)-2.778 E(it)-2.778 E(ty)-3.328 E
+(y)-4.998 E F0 -.8(We)108 619.2 S -1.65 -.5('v e).8 H 4.687
+(already used the `)7.687 F(`update')-.74 E 7.187('c)-.74 G 4.687
+(ommand: it took one or more parameters in the form of)-7.187 F -.74(``)
+108 631.2 S(<time>:<v).74 E(alue>')-.25 E .069('. Y)-.74 F(ou')-1.1 E
+.069(ll be glad to kno)-.1 F 2.569(wt)-.25 G .069
+(hat you can get the current time by \214lling in a `)-2.569 F(`N')-.74
+E 2.569('a)-.74 G 2.569(st)-2.569 G .069(he time.)-2.569 F
+(If you wish, you can also use the `)108 643.2 Q(`time')-.74 E 2.5('f)
+-.74 G(unction in perl.)-2.5 E(The shortest e)5 E
+(xample in this doc :\))-.15 E F1(perl -e 'print time, "\\n" ')126 660 Q
+F0(Ho)108 684 Q 2.5(wy)-.25 G(ou can run a program on re)-2.5 E
+(gular interv)-.15 E(als is)-.25 E F3(OS)2.5 E F0(speci\214c. But here')
+2.5 E 2.5(sa)-.55 G 2.5(ne)-2.5 G(xample in pseudo code:)-2.65 E F1
+(Get the value, put it in variable "$speed")126 700.8 Q
+(rrdtool update speed.rrd N:$speed)126 712.8 Q F0 154.84(24/Oct/99 Last)
+72 768 R(change: 1.0.8)2.5 E(7)192.34 E EP
+%%Page: 8 8
+%%BeginPageSetup
+BP
+%%EndPageSetup
+/F0 10/Times-Roman@0 SF(RRDTUT)72 48 Q -.834(ORIAL \( 1 \))-.18 F
+130.862(rrdtool RRDTUT)133.362 F -.834(ORIAL \( 1 \))-.18 F
+(\(Do not try this with our test database, it is used in further e)108
+96 Q(xamples\))-.15 E .355(This is all. Run this script e)108 112.8 R
+-.15(ve)-.25 G .355(ry \214v).15 F 2.855(em)-.15 G .355
+(inutes. When you need to kno)-2.855 F 2.855(ww)-.25 G .355
+(hat the graphics look lik)-2.855 F .355(e, run the)-.1 F -.15(ex)108
+124.8 S(amples abo).15 E -.15(ve)-.15 G 2.5(.Y).15 G
+(ou could put them in a script. After running that script, vie)-3.6 E
+2.5(wi)-.25 G(nde)-2.5 E(x.html)-.15 E/F1 10/Times-Bold@0 SF -5.558(SS)
+108 147.6 S -4.998(oo)5.558 G -8.328(mm)4.998 G 8.876 -4.438(ee w)8.328
+H -.1(wo)-2.78 G(or)-4.898 E(rd)-4.438 E(ds)-5.558 E 2.5(so)-3.888 G(on)
+-7.498 E(n)-5.558 E/F2 9/Times-Bold@0 SF -5.002(SS)2.5 G -6.496(NN)5.002
+G -8.494(MM)6.496 G -5.497(PP)8.494 G F0 2.91(Ic)108 164.4 S .41
+(an imagine v)-2.91 F .41(ery fe)-.15 F 2.91(wp)-.25 G .41
+(eople will be able to get real data from their car e)-2.91 F -.15(ve)
+-.25 G .41(ry \214v).15 F 2.91(em)-.15 G .41(inutes, all other peo-)
+-2.91 F .357(ple will ha)108 176.4 R .657 -.15(ve t)-.2 H 2.857(os).15 G
+.357(ettle for some other kind of counter)-2.857 F 2.856(.Y)-.55 G .356
+(ou could measure the number of pages printed by a)-3.956 F(printer)108
+188.4 Q 3.849(,t)-.4 G 1.349(he cof)-3.849 F 1.349(fee made by the cof)
+-.25 F 1.349(fee machine, a de)-.25 F 1.35
+(vice that counts the electricity used, whate)-.25 F -.15(ve)-.25 G 2.45
+-.55(r. A).15 H -.15(ny).55 G .223
+(incrementing counter can be monitored and graphed using the stuf)108
+200.4 R 2.722(fy)-.25 G .222(ou learned until no)-2.722 F 1.522 -.65
+(w. L)-.25 H .222(ater on we will).65 F .355
+(also be able to monitor other types of v)108 212.4 R .356(alues lik)
+-.25 F 2.856(et)-.1 G 2.856(emperature. Most)-2.856 F .356
+(people will use the counter that k)2.856 F(eeps)-.1 E 1.638
+(track of octets \(bytes\) transfered by a netw)108 224.4 R 1.638
+(ork de)-.1 F 1.638(vice so we ha)-.25 F 1.937 -.15(ve t)-.2 H 4.137(od)
+.15 G 4.137(oj)-4.137 G 1.637(ust that. W)-4.137 F 4.137(ew)-.8 G 1.637
+(ill start with a)-4.137 F .902(description of ho)108 236.4 R 3.402(wt)
+-.25 G 3.402(oc)-3.402 G .902(ollect data.)-3.402 F .902
+(Some people will mak)5.902 F 3.402(ear)-.1 G .902
+(emark that there are tools who can do this)-3.402 F .065
+(data collection for you. The)108 248.4 R 2.564(ya)-.15 G .064
+(re right!)-2.564 F(Ho)5.064 E(we)-.25 E -.15(ve)-.25 G .864 -.4(r, I f)
+.15 H .064(eel it is important that you understand the).4 F 2.564(ya)
+-.15 G .064(re not nec-)-2.564 F(essary)108 260.4 Q 5(.W)-.65 G
+(hen you ha)-5 E .3 -.15(ve t)-.2 H 2.5(od).15 G(etermine wh)-2.5 E 2.5
+(yt)-.05 G(hings went wrong you need to kno)-2.5 E 2.5(wh)-.25 G .5 -.25
+(ow t)-2.5 H(he).25 E 2.5(yw)-.15 G(ork.)-2.6 E 1.101
+(One tool used in the e)108 277.2 R 1.101(xample has been talk)-.15 F
+1.101(ed about v)-.1 F 1.101(ery brie\215y in the be)-.15 F 1.101
+(ginning of this document, it is)-.15 F(called)108 289.2 Q/F3 9
+/Times-Roman@0 SF(SNMP)2.76 E F0 2.76(.I)C 2.76(ti)-2.76 G 2.76(saw)
+-2.76 G .26(ay of talking to equipment. The tool I use belo)-2.86 F
+2.759(wi)-.25 G 2.759(sc)-2.759 G .259(alled `)-2.759 F(`snmpget')-.74 E
+2.759('a)-.74 G .259(nd this is ho)-2.759 F(w)-.25 E(it w)108 301.2 Q
+(orks:)-.1 E/F4 10/Courier@0 SF(snmpget device password OID)126 318 Q F0
+-.15(Fo)108 342 S 2.94(rd).15 G -.25(ev)-2.94 G .44
+(ice you substitute the name, or the).25 F F3(IP)2.94 E F0 .441
+(address, of your de)2.94 F 2.941(vice. F)-.25 F .441(or passw)-.15 F
+.441(ord you use the `)-.1 F(`commu-)-.74 E .522(nity read string')108
+354 R 3.022('a)-.74 G 3.022(si)-3.022 G 3.022(ti)-3.022 G 3.022(sc)
+-3.022 G .522(alled in the)-3.022 F F3(SNMP)3.022 E F0 -.1(wo)3.022 G
+3.022(rld. F).1 F .522(or some de)-.15 F .522(vices the def)-.25 F .521
+(ault of `)-.1 F(`public')-.74 E 3.021('m)-.74 G .521(ight w)-3.021 F
+(ork,)-.1 E(ho)108 366 Q(we)-.25 E -.15(ve)-.25 G 2.504(rt).15 G .004
+(his can be disabled, altered or protected for pri)-2.504 F -.25(va)-.25
+G .305 -.15(cy a).25 H .005(nd security reasons.).15 F .005
+(Read the documentation)5.005 F(that comes with your de)108 378 Q
+(vice or program.)-.25 E(Then there is this third parameter)108 394.8 Q
+2.5(,c)-.4 G(alled)-2.5 E F3(OID)2.5 E F0 2.5(,w)C(hich means `)-2.5 E
+(`object identi\214er')-.74 E('.)-.74 E .531
+(When you start to learn about)108 411.6 R F3(SNMP)3.03 E F0 .53
+(it looks v)3.03 F .53(ery confusing. It isn')-.15 F 3.03(ta)-.18 G .53
+(ll that dif)-3.03 F .53(\214cult when you look at the)-.25 F .118
+(Management Information Base \(")108 423.6 R F3(MIB)A F0 2.618("\). It)B
+.118(is an upside-do)2.618 F .118
+(wn tree that describes data, with a single node as)-.25 F .061
+(the root and from there a number of branches.)108 435.6 R .06
+(These branches end up in another node, the)5.061 F 2.56(yb)-.15 G .06
+(ranch out, etc.)-2.56 F .604(All the branches ha)108 447.6 R .904 -.15
+(ve a n)-.2 H .604(ame and the).15 F 3.104(yf)-.15 G .604
+(orm the path that we follo)-3.104 F 3.104(wa)-.25 G .604(ll the w)
+-3.104 F .604(ay do)-.1 F 3.104(wn. The)-.25 F .604(branches that)3.104
+F .739(we follo)108 459.6 R 3.239(wa)-.25 G .739(re named: iso, or)
+-3.239 F .739(g, dod, internet, mgmt and mib-2.)-.18 F .739
+(These names can also be written do)5.739 F .738(wn as)-.25 F
+(numbers and are 1 3 6 1 2 1.)108 471.6 Q F4
+(iso.org.dod.internet.mgmt.mib-2 \(1.3.6.1.2.1\))126 488.4 Q F0 .547(Th\
+ere is a lot of confusion about the leading dot that some programs use.)
+108 512.4 R .547(There is)5.547 F/F5 10/Symbol SF(*)3.047 E F0(no)A F5
+(*)A F0 .547(leading dot in an)3.047 F F3(OID)108 524.4 Q F0 5.116(.H)C
+-.25(ow)-5.116 G -2.15 -.25(ev e).25 H .916 -.4(r, s).25 H .116
+(ome programs can use abo).4 F .416 -.15(ve p)-.15 H .116
+(art of OIDs as a def).15 F 2.615(ault. T)-.1 F 2.615(oi)-.8 G .115
+(ndicate the dif)-2.615 F .115(ference between)-.25 F(abbre)108 536.4 Q
+.561(viated OIDs and full OIDs the)-.25 F 3.061(yn)-.15 G .562
+(eed a leading dot when you specify the complete)-3.061 F F3(OID)3.062 E
+F0 5.562(.O)C .562(ften those)-5.562 F 1.13(programs will lea)108 548.4
+R 1.43 -.15(ve o)-.2 H 1.13(ut the def).15 F 1.13
+(ault portion when returning the data to you.)-.1 F 2.73 -.8(To m)6.13 H
+(ak).8 E 3.63(et)-.1 G 1.13(hings w)-3.63 F 1.13(orse, the)-.1 F(y)-.15
+E(ha)108 560.4 Q .3 -.15(ve s)-.2 H -2.15 -.25(ev e).15 H(ral def).25 E
+(ault pre\214x)-.1 E(es ...)-.15 E .722
+(Right, lets continue to the start of our)108 577.2 R F3(OID)3.223 E F0
+3.223(:w)C 3.223(eh)-3.223 G .723
+(ad 1.3.6.1.2.1 From there, we are especially interested in)-3.223 F
+(the branch `)108 589.2 Q(`interf)-.74 E(aces')-.1 E 2.5('w)-.74 G
+(hich has number 2 \(e)-2.5 E 2.5(g1)-.15 G
+(.3.6.1.2.1.2 or 1.3.6.1.2.1.interf)-2.5 E(aces\).)-.1 E .496
+(First, we ha)108 606 R .796 -.15(ve t)-.2 H 2.996(og).15 G .496
+(et some)-2.996 F F3(SNMP)2.996 E F0 .496
+(program. First look if there is a pre-compiled package a)2.996 F -.25
+(va)-.2 G .495(ilable for your).25 F F3(OS)108 618 Q F0 3.655(.T)C 1.155
+(his is the preferred w)-3.655 F(ay)-.1 E 6.155(.I)-.65 G 3.655(fn)
+-6.155 G 1.155(ot, you will ha)-3.655 F 1.455 -.15(ve t)-.2 H 3.655(og)
+.15 G 1.155(et yourself the sources and compile those.)-3.655 F(The)
+6.156 E .277(Internet is full of sources, programs etc. Find informatio\
+n using a search engine or whate)108 630 R -.15(ve)-.25 G 2.777(ry).15 G
+.277(ou prefer)-2.777 F 2.777(.A)-.55 G(s)-2.777 E 2.5(as)108 642 S
+(uggestion: look for)-2.5 E F3(CMU)2.5 E F0<ad>A F3(SNMP)A F0 5(.I)C 2.5
+(ti)-5 G 2.5(sc)-2.5 G(ommonly used.)-2.5 E .685
+(Assume you got the program. First try to collect some data that is a)
+108 658.8 R -.25(va)-.2 G .685(ilable on most systems. Remember:).25 F(\
+there is a short name for the part of the tree that interests us most i\
+n the w)108 670.8 Q(orld we li)-.1 E .3 -.15(ve i)-.25 H(n!).15 E 3.303
+(Iw)108 687.6 S .803(ill use the short v)-3.303 F .802
+(ersion as I think this document is lar)-.15 F .802
+(ge enough as it is. If that doesn')-.18 F 3.302(tw)-.18 G .802
+(ork for you,)-3.402 F .46(pre\214x with .1.3.6.1.2.1 and try ag)108
+699.6 R 2.96(ain. Also,)-.05 F .461(Read The Fine Manual.)2.961 F .461
+(Skip the parts you cannot understand)5.461 F
+(yet, you should be able to \214nd out ho)108 711.6 Q 2.5(wt)-.25 G 2.5
+(os)-2.5 G(tart the program and use it.)-2.5 E 154.84(24/Oct/99 Last)72
+768 R(change: 1.0.8)2.5 E(8)192.34 E EP
+%%Page: 9 9
+%%BeginPageSetup
+BP
+%%EndPageSetup
+/F0 10/Times-Roman@0 SF(RRDTUT)72 48 Q -.834(ORIAL \( 1 \))-.18 F
+130.862(rrdtool RRDTUT)133.362 F -.834(ORIAL \( 1 \))-.18 F/F1 10
+/Courier@0 SF(snmpget myrouter public system.sysdescr.0)126 96 Q F0 .442
+(The de)108 120 R .441
+(vice should answer with a description of itself, perhaps empty)-.25 F
+5.441(.U)-.65 G .441(ntil you got a v)-5.441 F .441(alid answer from a)
+-.25 F(de)108 132 Q(vice, perhaps using a dif)-.25 E(ferent `)-.25 E
+(`passw)-.74 E(ord')-.1 E(', or a dif)-.74 E(ferent de)-.25 E
+(vice, there is no point in continuing.)-.25 E F1
+(snmpget myrouter public interfaces.ifnumber.0)126 148.8 Q F0 .13
+(Hopefully you get a number as a result, the number of interf)108 172.8
+R 2.631(aces. If)-.1 F .131(so, you can carry on and try a dif)2.631 F
+(ferent)-.25 E(program called `)108 184.8 Q(`snmpw)-.74 E(alk')-.1 E('.)
+-.74 E F1(snmpwalk myrouter public interfaces.iftable.ifentry.ifdescr)
+126 201.6 Q F0(If it returns with a list of interf)108 225.6 Q
+(aces, you')-.1 E(re almost there.)-.5 E(Here')5 E 2.5(sa)-.55 G 2.5(ne)
+-2.5 G(xample:)-2.65 E([user@host /home/ale)115.5 237.6 Q(x]$ snmpw)-.15
+E(alk cisco public 2.2.1.2)-.1 E F1
+(interfaces.ifTable.ifEntry.ifDescr.1 = "BRI0: B-Channel 1")126 254.4 Q
+(interfaces.ifTable.ifEntry.ifDescr.2 = "BRI0: B-Channel 2")126 266.4 Q
+(interfaces.ifTable.ifEntry.ifDescr.3 = "BRI0" Hex: 42 52 49 30)126
+278.4 Q(interfaces.ifTable.ifEntry.ifDescr.4 = "Ethernet0")126 290.4 Q
+(interfaces.ifTable.ifEntry.ifDescr.5 = "Loopback0")126 302.4 Q F0 .276
+(On this cisco equipment, I w)108 326.4 R .275(ould lik)-.1 F 2.775(et)
+-.1 G 2.775(om)-2.775 G .275(onitor the `)-2.775 F(`Ethernet0')-.74 E
+2.775('i)-.74 G(nterf)-2.775 E .275(ace and see that it is number four)
+-.1 F 2.775(.I)-.55 G(try:)108 338.4 Q F1
+([user@host /home/alex]$ snmpget cisco public 2.2.1.10.4 2.2.1.16.4)126
+355.2 Q(interfaces.ifTable.ifEntry.ifInOctets.4 = 2290729126)126 379.2 Q
+(interfaces.ifTable.ifEntry.ifOutOctets.4 = 1256486519)126 391.2 Q F0
+(So no)108 415.2 Q 2.5(wIh)-.25 G -2.25 -.2(av e)-2.5 H(tw)2.7 E 2.5(oO)
+-.1 G(IDs to monitor and the)-2.5 E 2.5(ya)-.15 G
+(re \(in full, this time\):)-2.5 E F1(1.3.6.1.2.1.2.2.1.10)126 432 Q F0
+(and)108 456 Q F1(1.3.6.1.2.1.2.2.1.16)126 472.8 Q F0
+(both with an interf)108 496.8 Q(ace number of 4.)-.1 E(Don')108 513.6 Q
+2.546(tg)-.18 G .046(et fooled, this w)-2.546 F(asn')-.1 E 2.546(tm)-.18
+G 2.546<798c>-2.546 G .046(rst try)-2.546 F 2.546(.I)-.65 G 2.546(tt)
+-2.546 G .046
+(ook some time for me too to understand what all these numbers)-2.546 F
+.91(mean, it does help a lot when the)108 525.6 R 3.41(yg)-.15 G .909
+(et translated into descripti)-3.41 F 1.209 -.15(ve t)-.25 H -.15(ex).15
+G .909(t... At least, when people are talking).15 F .251
+(about MIBs and OIDs you kno)108 537.6 R 2.751(ww)-.25 G .251(hat it')
+-2.751 F 2.751(sa)-.55 G .251(ll about.)-2.751 F .251(Do not for)5.251 F
+.252(get the interf)-.18 F .252(ace number \(0 if it is not inter)-.1 F
+(-)-.2 E -.1(fa)108 549.6 S(ce dependent\) and try snmpw).1 E
+(alk if you don')-.1 E 2.5(tg)-.18 G(et an answer from snmpget.)-2.5 E
+.3(If you understand abo)108 566.4 R .6 -.15(ve p)-.15 H .3
+(art, and get numbers from your de).15 F .299
+(vice, continue on with this tutorial. If not, then)-.25 F
+(go back and re-read this part.)108 578.4 Q/F2 10/Times-Bold@0 SF 14.436
+-7.218(AA RR)108 601.2 T -4.438(ee)7.218 G -4.998(aa)4.438 G 5.556
+-2.778(ll W)4.998 H -.75(Wo)-7.22 G(or)-4.248 E(rl)-4.438 E(ld)-2.778 E
+2.5(dE)-5.558 G(Ex)-9.168 E(xa)-4.998 E(am)-4.998 E(mp)-8.328 E(pl)
+-5.558 E(le)-2.778 E(e)-4.438 E F0 .405(Let the fun be)108 618 R .405
+(gin. First, create a ne)-.15 F 2.905(wd)-.25 G .406
+(atabase. It contains data from tw)-2.905 F 2.906(oc)-.1 G .406
+(ounters, called input and output.)-2.906 F .285
+(The data is put into archi)108 630 R -.15(ve)-.25 G 2.785(st).15 G .285
+(hat a)-2.785 F -.15(ve)-.2 G .285(rage it. The).15 F 2.784(yt)-.15 G
+(ak)-2.784 E 2.784(e1)-.1 G 2.784(,6)-2.784 G 2.784(,2)-2.784 G 2.784
+(4o)-2.784 G 2.784(r2)-2.784 G .284(88 samples at a time.)-2.784 F(The)
+5.284 E 2.784(ya)-.15 G .284(lso go into)-2.784 F(archi)108 642 Q -.15
+(ve)-.25 G 2.946(st).15 G .446(hat k)-2.946 F .447
+(eep the maximum numbers. This will be e)-.1 F .447
+(xplained later on. The time in-between samples is)-.15 F
+(300 seconds, a good starting point, which is the same as \214v)108 654
+Q 2.5(em)-.15 G(inutes.)-2.5 E F1 6(1s)114 670.8 S
+(ample "averaged" stays 1 period of 5 minutes)-6 E 6(6s)114 682.8 S
+(amples averaged become one average on 30 minutes)-6 E
+(24 samples averaged become one average on 2 hours)114 694.8 Q
+(288 samples averaged become one average on 1 day)114 706.8 Q F0
+(Lets try to be compatible with)108 730.8 Q/F3 9/Times-Roman@0 SF(MR)2.5
+E(TG)-.54 E F0(:)A F3(MR)2.5 E(TG)-.54 E F0(stores about the follo)2.5 E
+(wing amount of data:)-.25 E 154.84(24/Oct/99 Last)72 778.8 R
+(change: 1.0.8)2.5 E(9)192.34 E EP
+%%Page: 10 10
+%%BeginPageSetup
+BP
+%%EndPageSetup
+/F0 10/Times-Roman@0 SF(RRDTUT)72 48 Q -.834(ORIAL \( 1 \))-.18 F
+130.862(rrdtool RRDTUT)133.362 F -.834(ORIAL \( 1 \))-.18 F/F1 10
+/Courier@0 SF(600 5-minute samples:)114 96 Q 18(2d)24 G(ays and 2 hours)
+-18 E(600 30-minute samples:)114 108 Q(12.5 days)12 E
+(600 2-hour samples:)114 120 Q 12(50 days)30 F(600 1-day samples:)114
+132 Q 12(732 days)30 F F0 .209
+(These ranges are appended so the total amount of data k)108 156 R .209
+(ept is approximately 797 days.)-.1 F .208(RRDtool stores the)5.208 F
+.13(data dif)108 168 R(ferently)-.25 E 2.63(,i)-.65 G 2.63(td)-2.63 G
+(oesn')-2.63 E 2.63(ts)-.18 G .13(tart the `)-2.63 F(`weekly')-.74 E
+2.63('a)-.74 G(rchi)-2.63 E .43 -.15(ve w)-.25 H .13(here the `).15 F
+(`daily')-.74 E 2.63('a)-.74 G(rchi)-2.63 E .43 -.15(ve s)-.25 H 2.63
+(topped. F).15 F .13(or both archi)-.15 F -.15(ve)-.25 G(s).15 E
+(the most recent data will be near `)108 180 Q(`no)-.74 E(w')-.25 E 2.5
+('a)-.74 G(nd therefore we will need to k)-2.5 E(eep more data than)-.1
+E/F2 9/Times-Roman@0 SF(MR)2.5 E(TG)-.54 E F0(does!)2.5 E 1.6 -.8(We w)
+108 196.8 T(ill need:).8 E F1(600 samples of 5 minutes)114 213.6 Q
+(\(2 days and 2 hours\))12 E
+(700 samples of 30 minutes \(2 days and 2 hours, plus 12.5 days\))114
+225.6 Q(775 samples of 2 hours)114 237.6 Q(\(above + 50 days\))24 E
+(797 samples of 1 day)114 249.6 Q
+(\(above + 732 days, rounded up to 797\))36 E
+(rrdtool create myrouter.rrd)126 273.6 Q(\\)54 E 12
+(DS:input:COUNTER:600:U:U \\)180 285.6 R 6(DS:output:COUNTER:600:U:U \\)
+180 297.6 R 30(RRA:AVERAGE:0.5:1:600 \\)180 309.6 R 30
+(RRA:AVERAGE:0.5:6:700 \\)180 321.6 R 24(RRA:AVERAGE:0.5:24:775 \\)180
+333.6 R 18(RRA:AVERAGE:0.5:288:797 \\)180 345.6 R 54
+(RRA:MAX:0.5:1:600 \\)180 357.6 R 54(RRA:MAX:0.5:6:700 \\)180 369.6 R 48
+(RRA:MAX:0.5:24:775 \\)180 381.6 R(RRA:MAX:0.5:288:797)180 393.6 Q F0
+(Ne)108 417.6 Q .826
+(xt thing to do is collect data and store it. Here is an e)-.15 F 3.326
+(xample. It)-.15 F .826(is written partially in pseudo code so)3.326 F
+(you will ha)108 429.6 Q .3 -.15(ve t)-.2 H 2.5<6f8c>.15 G
+(nd out what to do e)-2.5 E(xactly on your)-.15 E F2(OS)2.5 E F0(to mak)
+2.5 E 2.5(ei)-.1 G 2.5(tw)-2.5 G(ork.)-2.6 E F1
+(while not the end of the universe)126 446.4 Q(do)126 458.4 Q
+(get result of)144 470.4 Q(snmpget router community 2.2.1.10.4)162 482.4
+Q(into variable $in)144 494.4 Q(get result of)144 506.4 Q
+(snmpget router community 2.2.1.16.4)162 518.4 Q(into variable $out)144
+530.4 Q(rrdtool update myrouter.rrd N:$in:$out)144 554.4 Q
+(wait for 5 minutes)144 578.4 Q(done)126 590.4 Q F0
+(Then, after collecting data for a day)108 614.4 Q 2.5(,t)-.65 G
+(ry to create an image using:)-2.5 E F1
+(rrdtool graph myrouter-day.gif --start -86400 \\)126 631.2 Q
+(DEF:inoctets=myrouter.rrd:input:AVERAGE \\)180 643.2 Q
+(DEF:outoctets=myrouter.rrd:output:AVERAGE \\)180 655.2 Q
+(AREA:inoctets#00FF00:"In traffic" \\)180 667.2 Q
+(LINE1:outoctets#0000FF:"Out traffic")180 679.2 Q F0 .445
+(This should produce a picture with one day w)108 703.2 R .446
+(orth of traf)-.1 F 2.946(\214c. One)-.25 F .446
+(day is 24 hours of 60 minutes of 60 sec-)2.946 F 1.108(onds: 24)108
+715.2 R/F3 10/Symbol SF(*)A F0(60)A F3(*)A F0 1.108
+(60=86400, we start at no)B 3.607(wm)-.25 G 1.107(inus 86400 seconds. W)
+-3.607 F 3.607(ed)-.8 G 1.107(e\214ne \(with DEFs\) inoctets and out-)
+-3.607 F .36(octets as the a)108 727.2 R -.15(ve)-.2 G .36(rage v).15 F
+.36(alues from the database myrouter)-.25 F .36(.rrd and dra)-.55 F 2.86
+(wa)-.15 G 2.86(na)-2.86 G .36(rea for the `)-2.86 F(`in')-.74 E 2.86
+('t)-.74 G(raf)-2.86 E .36(\214c and a line)-.25 F 154.84
+(24/Oct/99 Last)72 775.2 R(change: 1.0.8)2.5 E(10)187.34 E EP
+%%Page: 11 11
+%%BeginPageSetup
+BP
+%%EndPageSetup
+/F0 10/Times-Roman@0 SF(RRDTUT)72 48 Q -.834(ORIAL \( 1 \))-.18 F
+130.862(rrdtool RRDTUT)133.362 F -.834(ORIAL \( 1 \))-.18 F(for the `)
+108 96 Q(`out')-.74 E 2.5('t)-.74 G(raf)-2.5 E(\214c.)-.25 E -.6(Vi)108
+112.8 S 1.135 -.25(ew t).6 H .635(he image and k).25 F .635
+(eep logging data for a fe)-.1 F 3.135(wm)-.25 G .635(ore days.)-3.135 F
+.635(If you lik)5.635 F .635(e, you could try the e)-.1 F .635
+(xamples from)-.15 F(the test database and see if you can get v)108
+124.8 Q(arious options and calculations w)-.25 E(orking.)-.1 E
+(Suggestion:)108 141.6 Q .34
+(Display in bytes per second and in bits per second. Mak)108 158.4 R
+2.841(et)-.1 G .341(he Ethernet graphics go red if the)-2.841 F 2.841
+(ya)-.15 G .341(re o)-2.841 F -.15(ve)-.15 G 2.841(rf).15 G(our)-2.841 E
+(me)108 170.4 Q -.05(ga)-.15 G(bits per second.).05 E/F1 10/Times-Bold@0
+SF -7.218(CC)108 193.2 S -4.998(oo)7.218 G -5.558(nn)4.998 G -3.888(ss)
+5.558 G -4.998(oo)3.888 G -2.778(ll)4.998 G -2.778(ii)2.778 G -5.558(dd)
+2.778 G -4.998(aa)5.558 G -3.328(tt)4.998 G -2.778(ii)3.328 G -4.998(oo)
+2.778 G 11.116 -5.558(nn F)4.998 H(Fu)-.55 E(un)-5.558 E(nc)-5.558 E(ct)
+-4.438 E(ti)-3.328 E(io)-2.778 E(on)-4.998 E(ns)-5.558 E(s)-3.888 E F0
+3.141(Af)108 210 S 1.141 -.25(ew p)-3.141 H .641
+(aragraphs back I mentioned the possibility of k).25 F .64
+(eeping the maximum v)-.1 F .64(alues instead of the a)-.25 F -.15(ve)
+-.2 G(rage).15 E -.25(va)108 222 S(lues. Let').25 E 2.5(sg)-.55 G 2.5
+(oi)-2.5 G(nto this a bit more.)-2.5 E .802(Recall all the stuf)108
+238.8 R 3.302(fa)-.25 G .802(bout the speed of the car)-3.302 F 3.303
+(.S)-.55 G .803(uppose we dro)-3.303 F 1.103 -.15(ve a)-.15 H 3.303(t1)
+.15 G(44)-3.303 E/F2 9/Times-Roman@0 SF(KM/H)3.303 E F0 .803
+(during 5 minutes and then)3.303 F 1.031
+(were stopped by the police for 25 minutes.)108 250.8 R 1.031
+(At the end of the lecture we w)6.031 F 1.031(ould tak)-.1 F 3.531(eo)
+-.1 G 1.031(ur laptop and cre-)-3.531 F(ate+vie)108 262.8 Q 3.209(wt)
+-.25 G .709(he image tak)-3.209 F .71
+(en from the database. If we look at the second)-.1 F F2(RRA)3.21 E F0
+.71(we did create, we w)3.21 F .71(ould ha)-.1 F -.15(ve)-.2 G 1.034
+(the a)108 274.8 R -.15(ve)-.2 G 1.034
+(rage from 6 samples. The samples measured w).15 F 1.033
+(ould be 144+0+0+0+0+0=144, di)-.1 F 1.033(vided by 30 min-)-.25 F .938
+(utes, corrected for the error by 1000, translated into)108 286.8 R F2
+(KM/H)3.439 E F0 3.439(,w)C .939(ith a result of 24)-3.439 F F2(KM/H)
+3.439 E F0 5.939(.I)C -.1(wo)-2.5 G .939(uld still get a).1 F(tick)108
+298.8 Q(et b)-.1 E(ut not for speeding an)-.2 E(ymore :\))-.15 E(Ob)108
+315.6 Q(viously)-.15 E 3.589(,i)-.65 G 3.589(nt)-3.589 G 1.089
+(his case, we shouldn')-3.589 F 3.589(tl)-.18 G 1.089(ook at the a)
+-3.589 F -.15(ve)-.2 G 1.089(rages. In some cases the).15 F 3.589(ya)
+-.15 G 1.089(re handy)-3.589 F 3.589(.I)-.65 G 3.589(fy)-3.589 G 1.089
+(ou w)-3.589 F 1.088(ant to)-.1 F(kno)108 327.6 Q 2.799(wh)-.25 G .799
+-.25(ow m)-2.799 H(uch).25 E F2(KM)2.799 E F0 .299(you had tra)2.799 F
+-.15(ve)-.2 G .299(led, the picture w).15 F .3
+(ould be the right one to look at. On the other hand, for)-.1 F .859
+(the speed that we tra)108 339.6 R -.15(ve)-.2 G .859
+(led at, the maximum number seen is much more v).15 F .859
+(aluable. \(later we will see more)-.25 F(types\))108 351.6 Q .341
+(It is the same for data. If you w)108 368.4 R .341(ant to kno)-.1 F
+2.841(wt)-.25 G .341(he amount, look at the a)-2.841 F -.15(ve)-.2 G
+.342(rages. If you w).15 F .342(ant to kno)-.1 F 2.842(wt)-.25 G .342
+(he rate,)-2.842 F .011(look at the maximum.)108 380.4 R(Ov)5.011 E .011
+(er time, the)-.15 F 2.511(yw)-.15 G .011(ill gro)-2.511 F 2.511(wa)-.25
+G .011(part more and more. In the last database we ha)-2.511 F .311 -.15
+(ve c)-.2 H(reated,).15 E .57(there are tw)108 392.4 R 3.07(oa)-.1 G
+(rchi)-3.07 E -.15(ve)-.25 G 3.07(st).15 G .57(hat k)-3.07 F .57
+(eep data per day)-.1 F 3.071(.T)-.65 G .571(he archi)-3.071 F .871 -.15
+(ve t)-.25 H .571(hat k).15 F .571(eeps a)-.1 F -.15(ve)-.2 G .571
+(rages will sho).15 F 3.071(wl)-.25 G 1.071 -.25(ow n)-3.071 H .571
+(umbers, the).25 F(archi)108 404.4 Q .762 -.15(ve t)-.25 H .462(hat sho)
+.15 F .461(ws maxima will ha)-.25 F .761 -.15(ve h)-.2 H .461
+(igher numbers.).15 F -.15(Fo)5.461 G 2.961(rm).15 G 2.961(yc)-2.961 G
+.461(ar this w)-2.961 F .461(ould translate in a)-.1 F -.15(ve)-.2 G
+.461(rages per day).15 F .28(of 96/24=4)108 416.4 R F2(KM/H)2.78 E F0
+.28(\(as I tra)2.78 F -.15(ve)-.2 G 2.78(la).15 G .28
+(bout 94 kilometers on a day\) during week days, and maximum of 120)
+-2.78 F F2(KM/H)2.781 E F0(on weekdays \(my top speed that I reach e)108
+428.4 Q -.15(ve)-.25 G(ry day\).).15 E .207(Big dif)108 445.2 R .206(fe\
+rence. Do not look at the second graph to estimate the distances that I\
+ tra)-.25 F -.15(ve)-.2 G 2.706(la).15 G .206(nd do not look at the)
+-2.706 F .67(\214rst graph to estimate my speed. This will w)108 457.2 R
+.671(ork if the samples are close together)-.1 F 3.171(,a)-.4 G 3.171
+(st)-3.171 G(he)-3.171 E 3.171(ya)-.15 G .671(re in \214v)-3.171 F 3.171
+(em)-.15 G(in-)-3.171 E(utes, b)108 469.2 Q(ut not if you a)-.2 E -.15
+(ve)-.2 G(rage.).15 E .626
+(On some days, I go for a long ride. If I go across Europe and tra)108
+486 R -.15(ve)-.2 G 3.126(lf).15 G .626(or o)-3.126 F -.15(ve)-.15 G
+3.126(r1).15 G 3.126(2h)-3.126 G .626(ours, the \214rst graph will)
+-3.126 F .866(rise to about 60)108 498 R F2(KM/H)3.366 E F0 3.366(.T)C
+.866(he second one will sho)-3.366 F 3.366(w1)-.25 G(80)-3.366 E F2
+(KM/H)3.366 E F0 3.366(.T)C .866(his means that I tra)-3.366 F -.15(ve)
+-.2 G .866(led a distance of 60).15 F F2(KM/H)108 510 Q F0 1.495
+(times 24 H = 1440)3.995 F F2(KM)3.994 E F0 3.994(.Id)C 1.494
+(id this with a higher speed and a maximum around 180)-3.994 F F2(KM/H)
+3.994 E F0 3.994(.T)C(his)-3.994 E(doesn')108 522 Q 2.882(tm)-.18 G .382
+(ean that I tra)-2.882 F -.15(ve)-.2 G .383
+(led for 8 hours at a constant speed of 180).15 F F2(KM/H)2.883 E F0
+5.383(!T)2.883 G .383(his is a real e)-5.383 F .383(xample: go with)-.15
+F .134(the \215o)108 534 R 2.634(wt)-.25 G .134(hrough German)-2.634 F
+2.634(y\()-.15 G -.1(fa)-2.634 G .134(st!\) and stop a fe).1 F 2.633(wt)
+-.25 G .133(imes for g)-2.633 F .133(as and cof)-.05 F .133(fee. Dri)
+-.25 F .433 -.15(ve s)-.25 H(lo).15 E .133(wly through Austria and)-.25
+F .244
+(the Netherlands. Be careful in the mountains and villages. If you w)108
+546 R .245(ould look at the graphs created from the)-.1 F<8c76>108 558 Q
+.487(e-minute a)-.15 F -.15(ve)-.2 G .487(rages you w).15 F .487
+(ould get a totally dif)-.1 F .487(ferent picture. Y)-.25 F .486(ou w)
+-1.1 F .486(ould see the same v)-.1 F .486(alues on the a)-.25 F -.15
+(ve)-.2 G -.2(r-).15 G 1.418(age and maximum graphs \(pro)108 570 R
+1.419(vided I measured e)-.15 F -.15(ve)-.25 G 1.419(ry 300 seconds\).)
+.15 F -1.1(Yo)6.419 G 3.919(uw)1.1 G 1.419(ould be able to see when I)
+-4.019 F 1.045(stopped, when I w)108 582 R 1.045(as in top gear)-.1 F
+3.545(,w)-.4 G 1.045(hen I dro)-3.545 F 1.345 -.15(ve ove)-.15 H 3.544
+(rf).15 G 1.044(ast hiw)-3.644 F 1.044
+(ays etc. The granularity of the data is much)-.1 F(higher)108 594 Q
+2.66(,s)-.4 G 2.66(oy)-2.66 G .16(ou can see more. Ho)-2.66 F(we)-.25 E
+-.15(ve)-.25 G .96 -.4(r, t).15 H .16(his tak).4 F .16
+(es 12 samples per hour)-.1 F 2.66(,o)-.4 G 2.66(r2)-2.66 G .16(88 v)
+-2.66 F .16(alues per day)-.25 F 2.66(,s)-.65 G 2.66(oi)-2.66 G 2.66(tw)
+-2.66 G .16(ould be)-2.76 F .345(too much to k)108 606 R .345
+(eep for a long period of time. Therefore we a)-.1 F -.15(ve)-.2 G .345
+(rage it, e).15 F -.15(ve)-.25 G .345(ntually to one v).15 F .345
+(alue per day)-.25 F 2.845(.F)-.65 G(rom)-2.845 E(this one v)108 618 Q
+(alue, we cannot see much detail.)-.25 E(Mak)108 634.8 Q 2.574(es)-.1 G
+.074(ure you understand the last fe)-2.574 F 2.574(wp)-.25 G .074
+(aragraphs. There is no v)-2.574 F .074(alue in only a line and a fe)
+-.25 F 2.575(wa)-.25 G .075(xis, you need)-2.575 F(to kno)108 646.8 Q
+2.5(ww)-.25 G(hat the)-2.5 E 2.5(ym)-.15 G
+(ean and interpret the data in a good w)-2.5 E(ay)-.1 E 2.5(.T)-.65 G
+(his is true for all data.)-2.5 E .459(The biggest mistak)108 663.6 R
+2.959(ey)-.1 G .459(ou can mak)-2.959 F 2.959(ei)-.1 G 2.959(st)-2.959 G
+2.959(ou)-2.959 G .458
+(se the collected data for something that it is not suitable for)-2.959
+F 2.958(.Y)-.55 G(ou)-4.058 E -.1(wo)108 675.6 S(uld be better of).1 E
+2.5(fi)-.25 G 2.5(fy)-2.5 G(ou w)-2.5 E(ould not ha)-.1 E .3 -.15(ve t)
+-.2 H(he graphics at all in that case.).15 E 154.84(24/Oct/99 Last)72
+768 R(change: 1.0.8)2.5 E(11)187.34 E EP
+%%Page: 12 12
+%%BeginPageSetup
+BP
+%%EndPageSetup
+/F0 10/Times-Roman@0 SF(RRDTUT)72 48 Q -.834(ORIAL \( 1 \))-.18 F
+130.862(rrdtool RRDTUT)133.362 F -.834(ORIAL \( 1 \))-.18 F/F1 10
+/Times-Bold@0 SF -6.668(LL)108 96 S -4.438(ee)6.668 G -3.328(tt)4.438 G
+3.786 -3.328('' s)3.328 H 2.5(sr)-.56 G -.18(re)-6.938 G -.15(ev)-4.258
+G(vi)-4.848 E(ie)-2.778 E(ew)-4.438 E 2.5(ww)-7.218 G(wh)-9.718 E(ha)
+-5.558 E(at)-4.998 E 2.5(ty)-3.328 G -.25(yo)-7.498 G(ou)-4.748 E 2.5
+(un)-5.558 G(no)-8.058 E -.1(ow)-4.998 G 2.5(ws)-7.118 G(sh)-6.388 E(ho)
+-5.558 E(ou)-4.998 E(ul)-5.558 E(ld)-2.778 E 2.5(dk)-5.558 G(kn)-8.058 E
+(no)-5.558 E -.1(ow)-4.998 G -.7(w.)-7.118 G(.)-1.798 E F0 -1.1(Yo)108
+112.8 S 3.019(un)1.1 G 1.019 -.25(ow k)-3.019 H(no).25 E 3.019(wh)-.25 G
+1.019 -.25(ow t)-3.019 H 3.019(oc).25 G .519(reate a database. Y)-3.019
+F .52(ou can put the numbers in it, get them out ag)-1.1 F .52
+(ain by creating an)-.05 F .991
+(image, do math on the data from the database and vie)108 124.8 R 3.491
+(wt)-.25 G .991(he outcome instead of the ra)-3.491 F 3.491(wd)-.15 G
+3.491(ata. Y)-3.491 F .991(ou kno)-1.1 F(w)-.25 E(about the dif)108
+136.8 Q(ference between a)-.25 E -.15(ve)-.2 G
+(rages and maxima, and when to use which \(or at least you ha).15 E .3
+-.15(ve a)-.2 H 2.5(ni).15 G(dea\).)-2.5 E .092
+(RRDtool can do more than what we ha)108 153.6 R .392 -.15(ve l)-.2 H
+.092(earned up to no).15 F 1.392 -.65(w. B)-.25 H .092
+(efore you continue with the rest of this doc, I).65 F .104(recommend t\
+hat you reread from the start and try some modi\214cations on the e)108
+165.6 R .103(xamples. Mak)-.15 F 2.603(es)-.1 G .103(ure you fully)
+-2.603 F .142(understand e)108 177.6 R -.15(ve)-.25 G .142
+(rything. It will be w).15 F .142(orth the ef)-.1 F .142
+(fort and helps you not only with the rest of this doc b)-.25 F .143
+(ut also in)-.2 F
+(your day to day monitoring long after you read this introduction.)108
+189.6 Q F1 -7.218(DD)108 212.4 S -4.998(aa)7.218 G -3.328(tt)4.998 G
+9.996 -4.998(aa S)3.328 H(So)-.56 E(ou)-4.998 E(ur)-5.558 E -.18(rc)
+-4.438 G(ce)-4.258 E 2.5(eT)-4.438 G -.74(Ty)-9.168 G(yp)-4.258 E(pe)
+-5.558 E(es)-4.438 E(s)-3.888 E F0 .206(All right, you feel lik)108
+229.2 R 2.706(ec)-.1 G .206(ontinuing. W)-2.706 F .205
+(elcome back and get ready for an increased speed in the e)-.8 F .205
+(xamples and)-.15 F -.15(ex)108 241.2 S(planation.).15 E -1.1(Yo)108 258
+S 2.599(uk)1.1 G(no)-2.599 E 2.599(wt)-.25 G .099(hat in order to vie)
+-2.599 F 2.599(wac)-.25 G .099(ounter o)-2.599 F -.15(ve)-.15 G 2.599
+(rt).15 G .099(ime, you ha)-2.599 F .399 -.15(ve t)-.2 H 2.599(ot).15 G
+(ak)-2.599 E 2.599(et)-.1 G .299 -.1(wo n)-2.599 H .099(umbers and di).1
+F .099(vide the dif)-.25 F(ference)-.25 E .52
+(of them between the time lapsed.)108 270 R .52(This mak)5.52 F .52
+(es sense for the e)-.1 F .52(xamples I g)-.15 F -2.25 -.2(av e)-.05 H
+.52(you b)3.22 F .52(ut there are other possi-)-.2 F 2.997(bilities. F)
+108 282 R .497(or instance, I'm able to retrie)-.15 F .798 -.15(ve t)
+-.25 H .498
+(he temperature from my router in three places namely the inlet,).15 F
+.901(the so called hot-spot and the e)108 294 R 3.401(xhaust. These)-.15
+F -.25(va)3.401 G .901(lues are not counters.).25 F .901(If I tak)5.901
+F 3.401(et)-.1 G .901(he dif)-3.401 F .901(ference of the tw)-.25 F(o)
+-.1 E .715(samples and di)108 306 R .715(vide that by 300 seconds I w)
+-.25 F .715(ould be asking for the temperature change per second.)-.1 F
+(Hope-)5.716 E
+(fully this is zero! If not, the computerroom is on \214re :\))108 318 Q
+.503(So, what can we do ?)108 334.8 R 2.102 -.8(We c)5.503 H .502
+(an tell RRDtool to store the v).8 F .502
+(alues we measure directly as the)-.25 F 3.002(ya)-.15 G .502
+(re \(this is not)-3.002 F .114(entirely true b)108 346.8 R .114
+(ut close enough\). The graphs we mak)-.2 F 2.614(ew)-.1 G .115
+(ill look much better)-2.614 F 2.615(,t)-.4 G(he)-2.615 E 2.615(yw)-.15
+G .115(ill sho)-2.615 F 2.615(war)-.25 G .115(ather constant)-2.615 F
+-.25(va)108 358.8 S .192(lue. I kno).25 F 2.692(ww)-.25 G .192
+(hen the router is b)-2.692 F .192(usy \(it w)-.2 F .192(orks \255> it \
+uses more electricity \255> it generates more heat \255> the)-.1 F .002
+(temperature rises\). I kno)108 370.8 R 2.503(ww)-.25 G .003
+(hen the doors are left open \(the room is cooled \255> the w)-2.503 F
+.003(arm air from the rest of)-.1 F .702(the b)108 382.8 R .702
+(uilding \215o)-.2 F .701(ws into the computer room \255> the inlet tem\
+perature rises\) etc. The data type we use when)-.25 F .094
+(creating the database before w)108 394.8 R .094(as counter)-.1 F 2.594
+(,w)-.4 G 2.594(en)-2.594 G .594 -.25(ow h)-2.594 H -2.25 -.2(av e).25 H
+2.594(ad)2.794 G(if)-2.594 E .094(ferent data type and thus a dif)-.25 F
+.095(ferent name for it.)-.25 F(It is called)108 406.8 Q/F2 9
+/Times-Roman@0 SF(GA)2.5 E(UGE)-.495 E F0 2.5(.T)C
+(here are more such data types:)-2.5 E/F3 10/Courier@0 SF 6(-C)114 423.6
+S 12(OUNTER we)-6 F(already know this one)6 E 6(-G)114 435.6 S 24
+(AUGE we)-6 F(just learned this one)6 E 6(-D)114 447.6 S(ERIVE)-6 E 6
+(-A)114 459.6 S(BSOLUTE)-6 E F0 1.06(The tw)108 483.6 R 3.56(on)-.1 G
+1.56 -.25(ew t)-3.56 H 1.06(ypes are).25 F F2(DERIVE)3.56 E F0(and)3.56
+E F2(ABSOLUTE)3.56 E F0 3.56(.A)C 1.06(bsolute can be used lik)-3.56 F
+3.56(ec)-.1 G 1.059(ounter with one dif)-3.56 F(ference:)-.25 E 1.408
+(RRDtool assumes the counter is reset when it')108 495.6 R 3.908(sr)-.55
+G 1.408(ead. That is: its delta is kno)-3.908 F 1.409
+(wn without calculation by)-.25 F .666
+(RRDtool whereas RRDtool needs to calculate it for the counter type.)108
+507.6 R .665(Example: our \214rst e)5.665 F .665(xample \(12345,)-.15 F
+.195(12357, 12363, 12363\) w)108 519.6 R .195(ould read: unkno)-.1 F
+.196(wn, 12, 6, 0. The rest of the calculations stay the same.)-.25 F
+.196(The other)5.196 F .64(one, deri)108 531.6 R -.15(ve)-.25 G 3.14(,i)
+.15 G 3.14(sl)-3.14 G(ik)-3.14 E 3.14(ec)-.1 G(ounter)-3.14 E 3.14(.U)
+-.55 G(nlik)-3.14 E 3.14(ec)-.1 G(ounter)-3.14 E 3.14(,i)-.4 G 3.14(tc)
+-3.14 G .639(an also decrease so it can ha)-3.14 F .939 -.15(ve a n)-.2
+H -2.25 -.15(eg a).15 H(ti).15 E .939 -.15(ve d)-.25 H .639(elta. Ag).15
+F .639(ain, the)-.05 F(rest of the calculations stay the same.)108 543.6
+Q(Let')108 560.4 Q 2.5(st)-.55 G(ry them all:)-2.5 E 154.84
+(24/Oct/99 Last)72 768 R(change: 1.0.8)2.5 E(12)187.34 E EP
+%%Page: 13 13
+%%BeginPageSetup
+BP
+%%EndPageSetup
+/F0 10/Times-Roman@0 SF(RRDTUT)72 48 Q -.834(ORIAL \( 1 \))-.18 F
+130.862(rrdtool RRDTUT)133.362 F -.834(ORIAL \( 1 \))-.18 F/F1 10
+/Courier@0 SF(rrdtool create all.rrd --start 978300900 \\)126 96 Q
+(DS:a:COUNTER:600:U:U \\)180 108 Q(DS:b:GAUGE:600:U:U \\)180 120 Q
+(DS:c:DERIVE:600:U:U \\)180 132 Q(DS:d:ABSOLUTE:600:U:U \\)180 144 Q
+(RRA:AVERAGE:0.5:1:10)180 156 Q(rrdtool update all.rrd \\)126 168 Q 18
+(978301200:300:1:600:300 \\)180 180 R 12(978301500:600:3:1200:600 \\)180
+192 R 12(978301800:900:5:1800:900 \\)180 204 R
+(978302100:1200:3:2400:1200 \\)180 216 Q(978302400:1500:1:2400:1500 \\)
+180 228 Q(978302700:1800:2:1800:1800 \\)180 240 Q 18
+(978303000:2100:4:0:2100 \\)180 252 R 6(978303300:2400:6:600:2400 \\)180
+264 R 6(978303600:2700:4:600:2700 \\)180 276 R
+(978303900:3000:2:1200:3000)180 288 Q
+(rrdtool graph all1.gif -s 978300600 -e 978304200 -h 400 \\)126 300 Q
+(DEF:linea=all.rrd:a:AVERAGE LINE3:linea#FF0000:"Line A" \\)180 312 Q
+(DEF:lineb=all.rrd:b:AVERAGE LINE3:lineb#00FF00:"Line B" \\)180 324 Q
+(DEF:linec=all.rrd:c:AVERAGE LINE3:linec#0000FF:"Line C" \\)180 336 Q
+(DEF:lined=all.rrd:d:AVERAGE LINE3:lined#000000:"Line D")180 348 Q/F2 10
+/Times-Bold@0 SF -7.218(RR)108 382.8 S -7.218(RR)7.218 G -7.218(DD)7.218
+G -3.328(tt)7.218 G -4.998(oo)3.328 G -4.998(oo)4.998 G 5.556 -2.778
+(ll u)4.998 H(un)-2.78 E(nd)-5.558 E(de)-5.558 E(er)-4.438 E 2.5(rt)
+-4.438 G(th)-5.828 E(he)-5.558 E 2.5(eM)-4.438 G(Mi)-11.938 E(ic)-2.778
+E(cr)-4.438 E -.18(ro)-4.438 G(os)-4.818 E(sc)-3.888 E(co)-4.438 E(op)
+-4.998 E(pe)-5.558 E(e)-4.438 E F0 6.5<834c>108 399.6 S .894(ine A is a\
+ counter so it should continuously increment and RRDtool should calcula\
+te the dif)-6.5 F(ferences.)-.25 E 1.314(Also, RRDtool needs to di)118
+411.6 R 1.314(vide the dif)-.25 F 1.314
+(ference by the amount of time lapsed. This should end up as a)-.25 F
+(straight line at 1 \(the deltas are 300, the time is 300\).)118 423.6 Q
+6.5<834c>108 440.4 S(ine B is of type g)-6.5 E(auge. These are `)-.05 E
+(`real')-.74 E 2.5('v)-.74 G(alues so the)-2.75 E 2.5(ys)-.15 G
+(hould match what we put in: a sort of a w)-2.5 E -2.25 -.2(av e)-.1 H
+(.).2 E 6.5<834c>108 457.2 S .514(ine C is deri)-6.5 F -.15(ve)-.25 G
+3.014(.I).15 G 3.014(ts)-3.014 G .515(hould be a counter that can decre\
+ase. It does so between 2400 and 0, with 1800 in-)-3.014 F(between.)118
+469.2 Q 6.5<834c>108 486 S .38(ine D is of type absolute. This is lik)
+-6.5 F 2.88(ec)-.1 G .38(ounter b)-2.88 F .38(ut it w)-.2 F .38
+(orks on v)-.1 F .38(alues without calculating the dif)-.25 F(ference.)
+-.25 E(The numbers are the same and as you can see \(hopefully\) this h\
+as a dif)118 498 Q(ferent result.)-.25 E .505
+(This translates in the follo)108 514.8 R .505(wing v)-.25 F .505
+(alues, starting at 23:10 and ending at 00:10 the ne)-.25 F .505
+(xt day \(where U means)-.15 F(unkno)108 526.8 Q(wn/unplotted\):)-.25 E
+F1 6(-L)114 543.6 S(ine A:)-6 E 12(uu111111111u)12 G 6(-L)114 555.6 S
+(ine B:)-6 E 12(u1353124642u)12 G 6(-L)114 567.6 S(ine C:)-6 E 12
+(uu2220)12 G(-2 -6)-6 E 12(202u)12 G 6(-L)114 579.6 S(ine D:)-6 E 12
+(u123456789)12 G 6(10 u)-6 F F0 .737(If your)108 603.6 R/F3 9
+/Times-Roman@0 SF(GIF)3.237 E F0(sho)3.237 E .736(ws all this, you kno)
+-.25 F 3.236(wy)-.25 G .736(ou ha)-3.236 F 1.036 -.15(ve t)-.2 H .736
+(yped the data correct, the RRDtool e).15 F -.15(xe)-.15 G .736
+(cutable is w).15 F(orking)-.1 E(properly)108 615.6 Q 2.505(,y)-.65 G
+.005(our vie)-2.505 F .005(wer doesn')-.25 F 2.505(tf)-.18 G .006
+(ool you and you successfully entered the year 2000 :\) Y)-2.505 F .006
+(ou could try the same)-1.1 F -.15(ex)108 627.6 S
+(ample four times, each time with only one of the lines.).15 E(Let')108
+644.4 Q 2.5(sg)-.55 G 2.5(oo)-2.5 G -.15(ve)-2.65 G 2.5(rt).15 G
+(he data ag)-2.5 E(ain:)-.05 E 6.5<834c>108 661.2 S .741(ine A: 300,600\
+,900 and so on. The counter delta is a constant 300 and so it the time \
+delta. A number)-6.5 F(di)118 673.2 Q .081(vided by itself is al)-.25 F
+-.1(wa)-.1 G .081(ys 1 \(e).1 F .082(xcept when di)-.15 F .082
+(viding by zero which is unde\214ned/ille)-.25 F -.05(ga)-.15 G 2.582
+(l\). Wh).05 F 2.582(yi)-.05 G 2.582(si)-2.582 G 2.582(tt)-2.582 G .082
+(hat the)-2.582 F .039(\214rst point is unkno)118 685.2 R .039(wn ? W)
+-.25 F 2.539(ed)-.8 G 2.538(ok)-2.539 G(no)-2.538 E 2.538(ww)-.25 G .038
+(hat we put into the database ? T)-2.538 F .038(rue ! But we didn')-.35
+F 2.538(th)-.18 G -2.25 -.2(av e)-2.538 H 2.538(av)2.738 G .038(alue to)
+-2.788 F .547(calculate the delta from so we don')118 697.2 R 3.047(tk)
+-.18 G(no)-3.047 E 3.047(ww)-.25 G .547(here we started. It w)-3.047 F
+.548(ould be wrong to assume we started at)-.1 F(zero so we don')118
+709.2 Q 2.5(t!)-.18 G 154.84(24/Oct/99 Last)72 768 R(change: 1.0.8)2.5 E
+(13)187.34 E EP
+%%Page: 14 14
+%%BeginPageSetup
+BP
+%%EndPageSetup
+/F0 10/Times-Roman@0 SF(RRDTUT)72 48 Q -.834(ORIAL \( 1 \))-.18 F
+130.862(rrdtool RRDTUT)133.362 F -.834(ORIAL \( 1 \))-.18 F 6.5<834c>108
+96 S(ine B: There is nothing to calculate. The numbers are as is.)-6.5 E
+6.5<834c>108 112.8 S .911(ine C: Ag)-6.5 F .911(ain, the start-out v)
+-.05 F .911(alue is unkno)-.25 F .911(wn. The same story is v)-.25 F
+.911(alid lik)-.25 F 3.411(ef)-.1 G .911(or line A. In this case the)
+-3.411 F .237(deltas are not constant so the line is not. If we w)118
+124.8 R .238(ould put the same numbers in the database as we did for)-.1
+F .949(line A, we w)118 136.8 R .949(ould ha)-.1 F 1.249 -.15(ve g)-.2 H
+.949(otten the same line. Unlik).15 F 3.449(et)-.1 G .949(ype counter)
+-3.449 F 3.449(,t)-.4 G .949(his type can decrease and I hope to)-3.449
+F(sho)118 148.8 Q 2.5(wy)-.25 G(ou later on wh)-2.5 E 2.5(yt)-.05 G
+(here is a dif)-2.5 E(ference.)-.25 E 6.5<834c>108 165.6 S .415
+(ine D: Here the de)-6.5 F .415
+(vice calculates the deltas. Therefore we)-.25 F/F1 9/Times-Roman@0 SF
+(DO)2.915 E F0(kno)2.916 E 2.916(wt)-.25 G .416
+(he \214rst delta and it is plotted. W)-2.916 F(e)-.8 E .579
+(had the same input as with line A b)118 177.6 R .578
+(ut the meaning of this input is dif)-.2 F .578
+(ferent. Therefore the line is dif)-.25 F(fer)-.25 E(-)-.2 E 2.729
+(ent. In)118 189.6 R .229(this case the deltas increase each time with \
+300. The time delta stays at a constant 300 and there-)2.729 F
+(fore the di)118 201.6 Q(vision of the tw)-.25 E 2.5(og)-.1 G -2.15 -.25
+(iv e)-2.5 H 2.5(si).25 G(ncreasing results.)-2.5 E/F2 10/Times-Bold@0
+SF -7.218(CC)108 224.4 S -4.998(oo)7.218 G -5.558(uu)4.998 G -5.558(nn)
+5.558 G -3.328(tt)5.558 G -4.438(ee)3.328 G 8.876 -4.438(rr W)4.438 H
+(Wr)-5.56 E(ra)-4.438 E(ap)-4.998 E(ps)-5.558 E(s)-3.888 E F0 .217
+(There are a fe)108 241.2 R 2.717(wm)-.25 G .217(ore basics to sho)
+-2.717 F 1.517 -.65(w. S)-.25 H .217
+(ome important options are still to be co).65 F -.15(ve)-.15 G .217
+(red and we ha).15 F -.15(ve)-.2 G(n').15 E 2.717(tl)-.18 G .217(ook at)
+-2.717 F .081(counter wraps yet. First the counter wrap: In our car we \
+notice that our counter sho)108 253.2 R .082(ws 999987. W)-.25 F 2.582
+(et)-.8 G(ra)-2.582 E -.15(ve)-.2 G 2.582(l2).15 G(0)-2.582 E F1(KM)108
+265.2 Q F0 1.35(and the counter should go to 1000007. Unfortunately)
+3.851 F 3.85(,t)-.65 G 1.35
+(here are only six digits on our counter so it)-3.85 F .313(really sho)
+108 277.2 R .313(ws 000007. If we w)-.25 F .314
+(ould plot that on a type)-.1 F F1(DERIVE)2.814 E F0 2.814(,i)C 2.814
+(tw)-2.814 G .314(ould mean that the counter w)-2.914 F .314
+(as set back)-.1 F(999980)108 289.2 Q F1(KM)3.593 E F0 3.593(.I)C 3.593
+(tw)-3.593 G(asn')-3.693 E 1.093(t, and there has to be some protection\
+ for this. This protection is only a)-.18 F -.25(va)-.2 G 1.092
+(ilable for).25 F(type)108 301.2 Q F1(COUNTER)3.124 E F0 .624
+(which should be used for this kind of counter an)3.124 F(yw)-.15 E .625
+(ays. Ho)-.1 F 3.125(wd)-.25 G .625(oes it w)-3.125 F .625(ork ? T)-.1 F
+.625(ype counter)-.8 F .741(should ne)108 313.2 R -.15(ve)-.25 G 3.241
+(rd).15 G .741(ecrease and therefore RRDtool must assume it wrapped if \
+it does decrease !)-3.241 F .74(If the delta is)5.74 F(ne)108 325.2 Q
+-.05(ga)-.15 G(ti).05 E -.15(ve)-.25 G 3.461(,t).15 G .961
+(his can be compensated for by adding the maximum v)-3.461 F .961
+(alue of the counter + 1. F)-.25 F .961(or our car this)-.15 F -.1(wo)
+108 337.2 S(uld be:).1 E/F3 10/Courier@0 SF
+(Delta = 7 - 999987 = -999980)114 354 Q
+(\(instead of 1000007-999987=20\))24 E
+(Real delta = -999980 + 999999 + 1 = 20)114 378 Q F0 .531
+(At the time of writing this document, RRDtool kno)108 402 R .53
+(ws of counters that are either 32 bits or 64 bits of size.)-.25 F
+(These counters can handle the follo)108 414 Q(wing dif)-.25 E(ferent v)
+-.25 E(alues:)-.25 E F3 6(-3)114 430.8 S 6(2b)-6 G(its: 0 ..)-6 E
+(4294967295)66 E 6(-6)114 442.8 S 6(4b)-6 G
+(its: 0 .. 18446744073709551615)-6 E F0
+(If these numbers look strange to you, you w)108 466.8 Q(ould lik)-.1 E
+2.5(et)-.1 G 2.5(ov)-2.5 G(ie)-2.5 E 2.5(wt)-.25 G(hem in their he)-2.5
+E(xadecimal form:)-.15 E F3 6(-3)114 483.6 S 6(2b)-6 G(its: 0 ..)-6 E
+(FFFFFFFF)54 E 6(-6)114 495.6 S 6(4b)-6 G(its: 0 .. FFFFFFFFFFFFFFFF)-6
+E F0 .553(RRDtool handles both counters the same. If an o)108 519.6 R
+-.15(ve)-.15 G(r\215o).15 E 3.054(wo)-.25 G .554(ccurs and the delta w)
+-3.054 F .554(ould be ne)-.1 F -.05(ga)-.15 G(ti).05 E -.15(ve)-.25 G
+3.054(,R).15 G(RDtool)-3.054 E .137(\214rst adds the maximum of a small\
+ counter + 1 to the delta. If the delta is still ne)108 531.6 R -.05(ga)
+-.15 G(ti).05 E -.15(ve)-.25 G 2.637(,i).15 G 2.637(th)-2.637 G .137
+(ad to be the lar)-2.637 F(ge)-.18 E 1.03
+(counter that wrapped. Add the maximum possible v)108 543.6 R 1.031
+(alue of the lar)-.25 F 1.031(ge counter + 1 and subtract the f)-.18 F
+(alsely)-.1 E .454(added small v)108 555.6 R 2.954(alue. There)-.25 F
+.453(is a risk in this: suppose the lar)2.953 F .453
+(ge counter wrapped while adding a huge delta, it)-.18 F .027
+(could happen in theory that adding the smaller v)108 567.6 R .028
+(alue w)-.25 F .028(ould mak)-.1 F 2.528(et)-.1 G .028(he delta positi)
+-2.528 F -.15(ve)-.25 G 2.528(.I).15 G 2.528(nt)-2.528 G .028(his unlik)
+-2.528 F .028(ely case the)-.1 F .49(results w)108 579.6 R .49(ould not\
+ be correct. The increase should be nearly as high as the maximum count\
+er v)-.1 F .49(alue for that)-.25 F .293(to happen so chances are you w)
+108 591.6 R .293(ould ha)-.1 F .593 -.15(ve s)-.2 H -2.15 -.25(ev e).15
+H .293(ral other problems as well and this particular problem w).25 F
+(ould)-.1 E 1.129(not e)108 603.6 R -.15(ve)-.25 G 3.629(nb).15 G 3.629
+(ew)-3.629 G 1.129(orth thinking about. Ev)-3.729 F 1.129
+(en though I did include an e)-.15 F 1.128
+(xample of it so you can judge that for)-.15 F(yourself.)108 615.6 Q
+.055(The ne)108 632.4 R .055(xt section gi)-.15 F -.15(ve)-.25 G 2.555
+(sy).15 G .055(ou some numerical e)-2.555 F .055(xamples for counter)
+-.15 F 2.555(-wraps. T)-.2 F .056(ry to do the calculations yourself)
+-.35 F(or just belie)108 644.4 Q .3 -.15(ve m)-.25 H 2.5(ei).15 G 2.5
+(fy)-2.5 G(our calculator can')-2.5 E 2.5(th)-.18 G
+(andle the numbers :\))-2.5 E(Correction numbers:)108 661.2 Q F3 6(-3)
+114 678 S 6(2b)-6 G(its: \(4294967295+1\) =)-6 E(4294967296)198 E 6(-6)
+114 690 S 6(4b)-6 G
+(its: \(18446744073709551615+1\)-correction1 = 18446744069414584320)-6 E
+F0 154.84(24/Oct/99 Last)72 768 R(change: 1.0.8)2.5 E(14)187.34 E EP
+%%Page: 15 15
+%%BeginPageSetup
+BP
+%%EndPageSetup
+/F0 10/Times-Roman@0 SF(RRDTUT)72 48 Q -.834(ORIAL \( 1 \))-.18 F
+130.862(rrdtool RRDTUT)133.362 F -.834(ORIAL \( 1 \))-.18 F/F1 10
+/Courier@0 SF 42(Before: 4294967200)114 96 R 72(Increase: 100)114 108 R
+(Should become: 4294967300)114 120 Q(But really is:)114 132 Q(4)60 E 42
+(Delta: -4294967196)114 144 R 6(Correction1: -4294967196)114 156 R
+(+4294967296 = 100)6 E 42(Before: 18446744073709551000)114 180 R 132
+(Increase: 800)114 192 R(Should become: 18446744073709551800)114 204 Q
+(But really is:)114 216 Q(184)108 E 42(Delta: -18446744073709550816)114
+228 R 6(Correction1: -18446744073709550816)114 240 R
+(+4294967296 = -18446744069414583520)6 E 6
+(Correction2: -18446744069414583520)114 252 R
+(+18446744069414584320 = 800)6 E 42(Before: 18446744073709551615)114 276
+R 6(\(m)6 G(aximum value \))-6 E 30(Increase: 18446744069414584320)114
+288 R 6(\(a)6 G(bsurd increase, minimum for)-6 E
+(Should become: 36893488143124135935)114 300 Q(this example to work \))
+78 E(But really is: 18446744069414584319)114 312 Q 102
+(Delta: -4294967296)114 324 R 6(Correction1: -4294967296)114 336 R 6(+4)
+6 G(294967296 = 0)-6 E(\(not negative -> no correction2\))114 348 Q 42
+(Before: 18446744073709551615)114 372 R 6(\(m)6 G(aximum value \))-6 E
+30(Increase: 18446744069414584319)114 384 R 6(\(o)6 G
+(ne less increase \))-6 E(Should become: 36893488143124135934)114 396 Q
+(But really is: 18446744069414584318)114 408 Q 102(Delta: -4294967297)
+114 420 R 6(Correction1: -4294967297)114 432 R(+4294967296 = -1)6 E 6
+(Correction2: -1)114 444 R(+18446744069414584320 = 18446744069414584319)
+6 E F0 .929(As you can see from the last tw)108 468 R 3.429(oe)-.1 G
+.929(xamples, you need strange numbers for RRDtool to f)-3.579 F .928
+(ail \(pro)-.1 F .928(vided it')-.15 F(s)-.55 E -.2(bu)108 480 S 3.107
+(gf).2 G .608(ree of course\) so this should not happen.)-3.107 F(Ho)
+5.608 E(we)-.25 E -.15(ve)-.25 G -.4(r,).15 G/F2 9/Times-Roman@0 SF
+(SNMP)3.508 E F0 .608(or whate)3.108 F -.15(ve)-.25 G 3.108(rm).15 G
+.608(ethod you choose to collect)-3.108 F 1.486
+(the data might also report wrong numbers occasionally)108 492 R 6.486
+(.W)-.65 G 3.986(ec)-7.286 G(an')-3.986 E 3.986(tp)-.18 G(re)-3.986 E
+-.15(ve)-.25 G 1.485(nt all errors b).15 F 1.485(ut there are some)-.2 F
+.47(things we can do.)108 504 R .47(The RRDtool `)5.47 F(`create')-.74 E
+2.971('c)-.74 G .471(ommand tak)-2.971 F .471(es tw)-.1 F 2.971(os)-.1 G
+.471(pecial parameters for this. The)-2.971 F 2.971(yd)-.15 G .471
+(e\214ne the)-2.971 F .083(minimum and maximum allo)108 516 R .083
+(wed v)-.25 F .083(alue. Until no)-.25 F 1.383 -.65(w, w)-.25 H 2.583
+(eu).65 G .083(sed `)-2.583 F(`U')-.74 E .083(', meaning `)-.74 F
+(`unkno)-.74 E(wn')-.25 E .082('. If you pro)-.74 F .082(vide v)-.15 F
+(al-)-.25 E .204(ues for one or both of them and if RRDtool recei)108
+528 R -.15(ve)-.25 G 2.704(sv).15 G .204
+(alues that are outside these limits, it will ignore those)-2.954 F -.25
+(va)108 540 S .882(lues. F).25 F .882(or a thermometer in de)-.15 F .882
+(grees Celsius, the absolute minimum is just under \255273. F)-.15 F
+.881(or my router)-.15 F 3.381(,I)-.4 G .009
+(can assume this minimum is much higher so I w)108 552 R .01
+(ould say it is 10. The maximum temperature for my router I)-.1 F -.1
+(wo)108 564 S .232(uld state as 80. An).1 F 2.732(yh)-.15 G .232
+(igher and the de)-2.732 F .232(vice w)-.25 F .232(ould be out of order)
+-.1 F 5.232(.F)-.55 G .232(or my car)-5.382 F 2.732(,Iw)-.4 G .232
+(ould ne)-2.832 F -.15(ve)-.25 G 2.731(re).15 G .231(xpect ne)-2.881 F
+(g-)-.15 E(ati)108 576 Q 1.106 -.15(ve n)-.25 H .806
+(umbers and also I w).15 F .806(ould not e)-.1 F .807
+(xpect numbers to be higher than 230. An)-.15 F .807
+(ything else, and there must)-.15 F(ha)108 588 Q .656 -.15(ve b)-.2 H
+.356(een an error).15 F 2.856(.R)-.55 G .356(emember: the opposite is n\
+ot true, if the numbers pass this check it doesn')-2.856 F 2.855(tm)-.18
+G .355(ean that)-2.855 F(the)108 600 Q 2.5(ya)-.15 G(re correct. Al)-2.5
+E -.1(wa)-.1 G(ys judge the graph with a health).1 E 2.5(yd)-.05 G
+(ose of paranoia if it looks weird.)-2.5 E/F3 10/Times-Bold@0 SF -7.218
+(DD)108 622.8 S -4.998(aa)7.218 G -3.328(tt)4.998 G 9.996 -4.998(aa R)
+3.328 H(Re)-2.22 E(es)-4.438 E(sa)-3.888 E(am)-4.998 E(mp)-8.328 E(pl)
+-5.558 E(li)-2.778 E(in)-2.778 E(ng)-5.558 E(g)-4.998 E F0 .57
+(One important feature of RRDtool has not been e)108 639.6 R .57
+(xplained yet: It is virtually impossible to collect the data)-.15 F
+.511(and feed it into RRDtool on e)108 651.6 R .511(xact interv)-.15 F
+.51(als. RRDtool therefore interpolates the data so it is on e)-.25 F
+.51(xact inter)-.15 F(-)-.2 E -.25(va)108 663.6 S(ls. If you do not kno)
+.25 E 2.5(ww)-.25 G(hat this means or ho)-2.5 E 2.5(wi)-.25 G 2.5(tw)
+-2.5 G(orks, then here')-2.6 E 2.5(st)-.55 G(he help you seek:)-2.5 E
+1.369(Suppose a counter increases with e)108 680.4 R 1.369
+(xactly one for e)-.15 F -.15(ve)-.25 G 1.369(ry second. Y).15 F 1.37
+(ou w)-1.1 F 1.37(ant to measure it in 300 seconds)-.1 F(interv)108
+692.4 Q .333(als. Y)-.25 F .333(ou should retrie)-1.1 F .633 -.15(ve v)
+-.25 H .333(alues that are e)-.1 F .333(xactly 300 apart. Ho)-.15 F(we)
+-.25 E -.15(ve)-.25 G 1.132 -.4(r, d).15 H .332(ue to v).4 F .332
+(arious circumstances you)-.25 F .607(are a fe)108 704.4 R 3.107(ws)-.25
+G .607(econds late and the interv)-3.107 F .608
+(al is 303. The delta will also be 303 in that case. Ob)-.25 F .608
+(viously RRDtool)-.15 F 1.053
+(should not put 303 in the database and mak)108 716.4 R 3.553(ey)-.1 G
+1.053(ou belie)-3.553 F 1.353 -.15(ve t)-.25 H 1.052
+(hat the counter increased 303 in 300 seconds.).15 F .193
+(This is where RRDtool interpolates: it alters the 303 v)108 728.4 R
+.193(alue as if it w)-.25 F .193(ould ha)-.1 F .493 -.15(ve b)-.2 H .193
+(een stored earlier and it will).15 F 154.84(24/Oct/99 Last)72 776.4 R
+(change: 1.0.8)2.5 E(15)187.34 E EP
+%%Page: 16 16
+%%BeginPageSetup
+BP
+%%EndPageSetup
+/F0 10/Times-Roman@0 SF(RRDTUT)72 48 Q -.834(ORIAL \( 1 \))-.18 F
+130.862(rrdtool RRDTUT)133.362 F -.834(ORIAL \( 1 \))-.18 F .533
+(be 300 in 300 seconds.)108 96 R(Ne)5.533 E .533(xt time you are at e)
+-.15 F .533(xactly the right time. This means that the current interv)
+-.15 F .533(al is)-.25 F .671
+(297 seconds and also the counter increased with 297. Ag)108 108 R .671
+(ain RRDtool alters the v)-.05 F .671(alue and stores 300 as it)-.25 F
+(should be.)108 120 Q/F1 10/Courier@0 SF(in the RDD)144 136.8 Q
+(in reality)102 E 12(time+000: 0)114 160.8 R 12(delta="U" time+000:)6 F
+6(0d)24 G(elta="U")-6 E(time+300: 300 delta=300)114 172.8 Q 6
+(time+300: 300)18 F(delta=300)6 E(time+600: 600 delta=300)114 184.8 Q 6
+(time+603: 603)18 F(delta=303)6 E(time+900: 900 delta=300)114 196.8 Q 6
+(time+900: 900)18 F(delta=297)6 E F0(Let')108 220.8 Q 2.877(sc)-.55 G
+.377(reate tw)-2.877 F 2.877(oi)-.1 G .377(dentical databases. I')-2.877
+F .677 -.15(ve c)-.5 H .377
+(hosen the time range 920805000 to 920805900 as this goes v).15 F(ery)
+-.15 E(well with the e)108 232.8 Q(xample numbers.)-.15 E F1
+(rrdtool create seconds1.rrd)126 249.6 Q(\\)18 E(--start 920804700)144
+261.6 Q(\\)60 E(DS:seconds:COUNTER:600:U:U \\)144 273.6 Q
+(RRA:AVERAGE:0.5:1:24)144 285.6 Q
+(for Unix: cp seconds1.rrd seconds2.rrd)126 309.6 Q(for Dos:)126 321.6 Q
+(copy seconds1.rrd seconds2.rrd)12 E(for vms:)126 333.6 Q
+(how would I know :\))12 E(rrdtool update seconds1.rrd \\)126 357.6 Q
+(920805000:000 920805300:300 920805600:600 920805900:900)144 369.6 Q
+(rrdtool update seconds2.rrd \\)126 381.6 Q
+(920805000:000 920805300:300 920805603:603 920805900:900)144 393.6 Q
+(rrdtool graph seconds1.gif)126 417.6 Q(\\)138 E
+(--start 920804700 --end 920806200)144 429.6 Q(\\)78 E(--height 200)144
+441.6 Q(\\)204 E(--upper-limit 1.05 --lower-limit 0.95 --rigid \\)144
+453.6 Q 30(DEF:seconds=seconds1.rrd:seconds:AVERAGE \\)144 465.6 R 132
+(CDEF:unknown=seconds,UN \\)144 477.6 R 150(LINE2:seconds#0000FF \\)144
+489.6 R(AREA:unknown#FF0000)144 501.6 Q(rrdtool graph seconds2.gif)126
+513.6 Q(\\)138 E(--start 920804700 --end 920806200)144 525.6 Q(\\)78 E
+(--height 200)144 537.6 Q(\\)204 E
+(--upper-limit 1.05 --lower-limit 0.95 --rigid \\)144 549.6 Q 30
+(DEF:seconds=seconds2.rrd:seconds:AVERAGE \\)144 561.6 R 132
+(CDEF:unknown=seconds,UN \\)144 573.6 R 150(LINE2:seconds#0000FF \\)144
+585.6 R(AREA:unknown#FF0000)144 597.6 Q F0(Both graphs should sho)108
+621.6 Q 2.5(wt)-.25 G(he same.)-2.5 E/F2 9/Times-Bold@0 SF -8.998(WW)72
+638.4 S -6.496(RR)8.998 G -6.496(AA)6.496 G -5.497(PP)6.496 G -6.496(UU)
+5.497 G -5.497(PP)6.496 G F0(It')108 650.4 Q 3.206(st)-.55 G .706
+(ime to wrap up this document. Y)-3.206 F .706(ou no)-1.1 F 3.206(wk)
+-.25 G(no)-3.206 E 3.206(wa)-.25 G .706(ll the basics to be able to w)
+-3.206 F .707(ork with RRDtool and to)-.1 F .384
+(read the documentation a)108 662.4 R -.25(va)-.2 G 2.883(ilable. There)
+.25 F .383(is plenty more to disco)2.883 F -.15(ve)-.15 G 2.883(ra).15 G
+.383(bout RRDtool and you will \214nd more)-2.883 F .401
+(and more uses for the package. Y)108 674.4 R .401
+(ou could create easy graphics using just the e)-1.1 F .402(xamples pro)
+-.15 F .402(vided and using)-.15 F(only RRDtool. Y)108 686.4 Q
+(ou could also use the front ends that are a)-1.1 E -.25(va)-.2 G
+(ilable.).25 E F2 -8.494(MM)72 703.2 S -6.496(AA)8.494 G -3.499(II)6.496
+G -6.001(LL)3.499 G -3.499(II)6.001 G -6.496(NN)3.499 G -7(GG)6.496 G
+-6.001(LL)7 G -3.499(II)6.001 G -5.002(SS)3.499 G -6.001(TT)5.002 G F0
+.683(Remember to subscribe to the mailing-list. Ev)108 715.2 R .682
+(en if you are not answering the mails that come by)-.15 F 3.182(,i)-.65
+G 3.182(th)-3.182 G(elps)-3.182 E 1.574
+(both you and the rest. A lot of the stuf)108 727.2 R 4.075(ft)-.25 G
+1.575(hat I kno)-4.075 F 4.075(wa)-.25 G 1.575(bout MR)-4.075 F 1.575
+(TG \(and therefore about RRDtool\) I')-.6 F -.15(ve)-.5 G 154.84
+(24/Oct/99 Last)72 775.2 R(change: 1.0.8)2.5 E(16)187.34 E EP
+%%Page: 17 17
+%%BeginPageSetup
+BP
+%%EndPageSetup
+/F0 10/Times-Roman@0 SF(RRDTUT)72 48 Q -.834(ORIAL \( 1 \))-.18 F
+130.862(rrdtool RRDTUT)133.362 F -.834(ORIAL \( 1 \))-.18 F .289(learne\
+d while just reading the list without posting to it. I did not need to \
+ask the basic questions as the)108 96 R 2.789(ya)-.15 G(re)-2.789 E .943
+(answered in the F)108 108 R 2.043 -.55(AQ \()-.74 H .943
+(read it!\) and in v).55 F .943(arious mails by other users.)-.25 F -.4
+(Wi)5.943 G .943(th thousands of users all o).4 F -.15(ve)-.15 G 3.444
+(rt).15 G(he)-3.444 E -.1(wo)108 120 S .457(rld, there will al).1 F -.1
+(wa)-.1 G .457(ys be people who ask questions that you can answer becau\
+se you read this and other).1 F(documentation and the)108 132 Q 2.5(yd)
+-.15 G(idn')-2.5 E(t.)-.18 E/F1 9/Times-Bold@0 SF -5.002(SS)72 148.8 S
+-6.001(EE)5.002 G 12.002 -6.001(EE A)6.001 H(AL)-.495 E(LS)-6.001 E(SO)
+-5.002 E(O)-7 E F0(The RRDtool manpages)108 160.8 Q F1 10.292 -6.496
+(AA UU)72 177.6 T -6.001(TT)6.496 G -7(HH)6.001 G -7(OO)7 G -6.496(RR)7
+G F0 3.306(Ih)108 189.6 S .806(ope you enjo)-3.306 F .806(yed the e)-.1
+F .807(xamples and their descriptions. If you do, help other people by \
+pointing them to)-.15 F .96(this document when the)108 201.6 R 3.46(ya)
+-.15 G .96(re asking basic questions. The)-3.46 F 3.459(yw)-.15 G .959
+(ill not only get their answer b)-3.459 F .959(ut at the same)-.2 F
+(time learn a whole lot more.)108 213.6 Q(Ale)108 230.4 Q 2.5(xv)-.15 G
+(an den Bog)-2.75 E(aerdt <ale)-.05 E(x@er)-.15 E(gens.op.het.net>)-.18
+E 154.84(24/Oct/99 Last)72 768 R(change: 1.0.8)2.5 E(17)187.34 E EP
+%%Trailer
+end
+%%EOF
diff --git a/website/tutorial/rrdtutorial.wml b/website/tutorial/rrdtutorial.wml
new file mode 100644 (file)
index 0000000..1227b2e
--- /dev/null
@@ -0,0 +1,6 @@
+#include "$(ROOT)/.wml/template.inc" section=tutorial subsection=cdeftut
+#use wml::fmt::pod
+
+<H1>CDEF Tutorial</H1>
+
+<: print &wml_fmt_pod({ FILE => "--podroot=$(ROOT)/../doc  --htmlroot=. --podpath=. $(ROOT)/../doc/rrdtutorial.pod"}); :>