aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorDaniel Stenberg <daniel@haxx.se>2003-06-12 12:54:34 +0000
committerDaniel Stenberg <daniel@haxx.se>2003-06-12 12:54:34 +0000
commit9c7703ace1dcf05707a15fb15db8048d016fa208 (patch)
tree07b2faaf0fb3b7d64b8909456ba7af3e93e29a29 /src
parent4a8155b53c2ac01f90ab81c2c77845e82dc36103 (diff)
Based on Dan Fandrich's patch and gzip unpack function, we now compress
the 'hugehelp' text if libz and gzip are available at build time.
Diffstat (limited to 'src')
-rw-r--r--src/Makefile.am10
-rw-r--r--src/mkhelp.pl119
2 files changed, 115 insertions, 14 deletions
diff --git a/src/Makefile.am b/src/Makefile.am
index 00c51afd6..1699c96e7 100644
--- a/src/Makefile.am
+++ b/src/Makefile.am
@@ -11,6 +11,14 @@ INCLUDES = -I$(top_srcdir)/include -I$(top_builddir)/src -I$(top_srcdir)/src
bin_PROGRAMS = curl #memtest
+if HAVE_LIBZ
+# libz available, attempt to compress the help data
+MKHELPOPT=-c
+else
+# no libz, don't try to compress
+MKHELPOPT=
+endif
+
#memtest_SOURCES = memtest.c
#memtest_LDADD = $(top_srcdir)/lib/libcurl.la
@@ -38,4 +46,4 @@ MKHELP=$(top_srcdir)/src/mkhelp.pl
# This generates the hugehelp.c file
hugehelp.c: $(README) $(MANPAGE) mkhelp.pl
rm -f hugehelp.c
- $(NROFF) -man $(MANPAGE) | $(PERL) $(MKHELP) $(README) > hugehelp.c
+ $(NROFF) -man $(MANPAGE) | $(PERL) -s $(MKHELP) $(MKHELPOPT) $(README) > hugehelp.c
diff --git a/src/mkhelp.pl b/src/mkhelp.pl
index d58ccf989..8487b8782 100644
--- a/src/mkhelp.pl
+++ b/src/mkhelp.pl
@@ -6,10 +6,10 @@
# THEY DON'T FIT ME :-)
# Get readme file as parameter:
-$README = $ARGV[0];
+my $README = $ARGV[0];
if($README eq "") {
- print "usage: mkreadme.pl <README>\n";
+ print "usage: mkreadme.pl [-c] <README> < manpage\n";
exit;
}
@@ -20,8 +20,8 @@ push @out, " / __| | | | |_) | | \n";
push @out, " | (__| |_| | _ <| |___ \n";
push @out, " \\___|\\___/|_| \\_\\_____|\n";
-$head=0;
-loop:
+my $head=0;
+
while (<STDIN>) {
$line = $_;
@@ -34,13 +34,13 @@ while (<STDIN>) {
if($line =~ /^curl/i) {
# cut off the page headers
$head=1;
- next loop;
+ next;
}
if($line =~ /^[ \t]*\n/) {
$wline++;
# we only make one empty line max
- next loop;
+ next;
}
if($wline) {
$wline = 0;
@@ -54,20 +54,113 @@ while (<STDIN>) {
push @out, "\n"; # just an extra newline
open(READ, "<$README") ||
- die "couldn't read the README infile";
+ die "couldn't read the README infile $README";
while(<READ>) {
push @out, $_;
}
close(READ);
+# if compressed
+if($c) {
+ my @test = `gzip --version 2>&1`;
+ if($test[0] =~ /gzip/) {
+ open(GZIP, "|gzip -9 >dumpit.gz");
+ binmode GZIP;
+ for(@out) {
+ print GZIP $_;
+ $gzip += length($_);
+ }
+ close(GZIP);
+
+ open(GZIP, "<dumpit.gz");
+ binmode GZIP;
+ while(<GZIP>) {
+ push @gzip, $_;
+ $gzipped += length($_);
+ }
+ close(GZIP);
+ }
+ else {
+ # no gzip, no compression!
+ undef $c;
+ print STDERR "MEEEP: Couldn't find gzip, disable compression\n";
+ }
+}
-print "/* NEVER EVER edit this manually, fix the mkhelp script instead! */\n"
-;
-print "#include <stdio.h>\n";
-print "void hugehelp(void)\n";
-print "{\n";
-print " fputs (\n";
+$now = localtime;
+print <<HEAD
+/*
+ * NEVER EVER edit this manually, fix the mkhelp.pl script instead!
+ * Generation time: $now
+ */
+#include <stdio.h>
+HEAD
+ ;
+if($c) {
+ print "/* gzip shrunk this data from $gzip to $gzipped bytes */\n",
+ "#include <zlib.h>\nstatic const unsigned char hugehelpgz[] = {\n ";
+ my $c=0;
+ for(@gzip) {
+ my @all=split(//, $_);
+ for(@all) {
+ my $num=ord($_);
+ printf("0x%02x, ", 0+$num);
+ if(++$c>11) {
+ print "\n ";
+ $c=0;
+ }
+ }
+ }
+ print "\n};\n";
+
+ print <<EOF
+/* Decompress and send to stdout a gzip-compressed buffer */
+void hugehelp(void)
+{
+ unsigned char buf[0x10000];
+ int status,headerlen;
+ z_stream z;
+
+ /* Make sure no gzip options are set */
+ if (hugehelpgz[3] & 0xfe)
+ return;
+
+ headerlen = 10;
+ z.avail_in = sizeof(hugehelpgz) - headerlen;
+ z.next_in = (unsigned char *)hugehelpgz + headerlen;
+ z.zalloc = (alloc_func)Z_NULL;
+ z.zfree = (free_func)Z_NULL;
+ z.opaque = 0;
+
+ if (inflateInit2(&z, -MAX_WBITS) != Z_OK)
+ return;
+
+ for (;;) {
+ z.avail_out = (int)sizeof(buf);
+ z.next_out = buf;
+ status = inflate(&z, Z_SYNC_FLUSH);
+ if (status == Z_OK || status == Z_STREAM_END) {
+ fwrite(buf, sizeof(buf) - z.avail_out, 1, stdout);
+ if (status == Z_STREAM_END)
+ break;
+ } else
+ break; /* Error */
+ }
+ inflateEnd(&z);
+}
+EOF
+ ;
+exit;
+}
+else {
+ print <<HEAD
+void hugehelp(void)
+{
+ fputs(
+HEAD
+ ;
+}
$outsize=0;
for(@out) {