Resync
[CMakeLuaTailorHgBridge.git] / CMakeLua / Utilities / cmcurl-7.19.0 / src / mkhelp.pl
blob7fb37db58bbd66ade0093f2dabebee2ea5713b1c
1 #!/usr/local/bin/perl
3 # Yeah, I know, probably 1000 other persons already wrote a script like
4 # this, but I'll tell ya:
6 # THEY DON'T FIT ME :-)
8 # Get readme file as parameter:
10 if($ARGV[0] eq "-c") {
11 $c=1;
12 shift @ARGV;
15 my $README = $ARGV[0];
17 if($README eq "") {
18 print "usage: mkreadme.pl [-c] <README> < manpage\n";
19 exit;
23 push @out, " _ _ ____ _ \n";
24 push @out, " Project ___| | | | _ \\| | \n";
25 push @out, " / __| | | | |_) | | \n";
26 push @out, " | (__| |_| | _ <| |___ \n";
27 push @out, " \\___|\\___/|_| \\_\\_____|\n";
29 my $olen=0;
30 while (<STDIN>) {
31 my $line = $_;
33 # this should be removed:
34 $line =~ s/(\b.|_\b)//g;
36 if($line =~ /^([ \t]*\n|curl)/i) {
37 # cut off headers and empty lines
38 $wline++; # count number of cut off lines
39 next;
42 my $text = $line;
43 $text =~ s/^\s+//g; # cut off preceeding...
44 $text =~ s/\s+$//g; # and trailing whitespaces
46 $tlen = length($text);
48 if($wline && ($olen == $tlen)) {
49 # if the previous line with contents was exactly as long as
50 # this line, then we ignore the newlines!
52 # We do this magic because a header may abort a paragraph at
53 # any line, but we don't want that to be noticed in the output
54 # here
55 $wline=0;
57 $olen = $tlen;
59 if($wline) {
60 # we only make one empty line max
61 $wline = 0;
62 push @out, "\n";
64 push @out, $line;
66 push @out, "\n"; # just an extra newline
68 open(READ, "<$README") ||
69 die "couldn't read the README infile $README";
71 while(<READ>) {
72 push @out, $_;
74 close(READ);
76 # if compressed
77 if($c) {
78 my @test = `gzip --version 2>&1`;
79 if($test[0] =~ /gzip/) {
80 open(GZIP, ">dumpit") ||
81 die "can't create the dumpit file, try without -c";
82 binmode GZIP;
83 for(@out) {
84 print GZIP $_;
85 $gzip += length($_);
87 close(GZIP);
89 system("gzip --best --no-name dumpit");
91 open(GZIP, "<dumpit.gz") ||
92 die "can't read the dumpit.gz file, try without -c";
93 binmode GZIP;
94 while(<GZIP>) {
95 push @gzip, $_;
96 $gzipped += length($_);
98 close(GZIP);
100 unlink("dumpit.gz");
102 else {
103 # no gzip, no compression!
104 undef $c;
105 print STDERR "MEEEP: Couldn't find gzip, disable compression\n";
109 $now = localtime;
110 print <<HEAD
112 * NEVER EVER edit this manually, fix the mkhelp.pl script instead!
113 * Generation time: $now
115 #include "setup.h"
116 #ifdef USE_MANUAL
117 #include "hugehelp.h"
118 #include <stdio.h>
119 HEAD
121 if($c) {
122 print <<HEAD
123 #include <stdlib.h>
124 #include <zlib.h>
125 static const unsigned char hugehelpgz[] = {
126 /* This mumbo-jumbo is the huge help text compressed with gzip.
127 Thanks to this operation, the size of this data shrunk from $gzip
128 to $gzipped bytes. You can disable the use of compressed help
129 texts by NOT passing -c to the mkhelp.pl tool. */
130 HEAD
132 my $c=0;
133 print " ";
134 for(@gzip) {
135 my @all=split(//, $_);
136 for(@all) {
137 my $num=ord($_);
138 printf(" 0x%02x,", 0+$num);
139 if(++$c>11) {
140 print "\n ";
141 $c=0;
145 print "\n};\n";
147 print <<EOF
148 #define BUF_SIZE 0x10000
149 /* Decompress and send to stdout a gzip-compressed buffer */
150 void hugehelp(void)
152 unsigned char* buf;
153 int status,headerlen;
154 z_stream z;
156 /* Make sure no gzip options are set */
157 if (hugehelpgz[3] & 0xfe)
158 return;
160 headerlen = 10;
161 z.avail_in = (unsigned int)(sizeof(hugehelpgz) - headerlen);
162 z.next_in = (unsigned char *)hugehelpgz + headerlen;
163 z.zalloc = (alloc_func)Z_NULL;
164 z.zfree = (free_func)Z_NULL;
165 z.opaque = 0;
167 if (inflateInit2(&z, -MAX_WBITS) != Z_OK)
168 return;
170 buf = malloc(BUF_SIZE);
171 if (buf) {
172 while(1) {
173 z.avail_out = BUF_SIZE;
174 z.next_out = buf;
175 status = inflate(&z, Z_SYNC_FLUSH);
176 if (status == Z_OK || status == Z_STREAM_END) {
177 fwrite(buf, BUF_SIZE - z.avail_out, 1, stdout);
178 if (status == Z_STREAM_END)
179 break;
181 else
182 break; /* Error */
184 free(buf);
186 inflateEnd(&z);
190 foot();
191 exit;
193 else {
194 print <<HEAD
195 void hugehelp(void)
197 fputs(
198 HEAD
202 $outsize=0;
203 for(@out) {
204 chop;
206 $new = $_;
208 $outsize += length($new)+1; # one for the newline
210 $new =~ s/\\/\\\\/g;
211 $new =~ s/\"/\\\"/g;
213 # gcc 2.96 claims ISO C89 only is required to support 509 letter strings
214 if($outsize > 500) {
215 # terminate and make another fputs() call here
216 print ", stdout);\n fputs(\n";
217 $outsize=length($new)+1;
219 printf("\"%s\\n\"\n", $new);
223 print ", stdout) ;\n}\n";
225 foot();
227 sub foot {
228 print <<FOOT
229 #endif /* USE_MANUAL */
230 FOOT