Annotation of embedaddon/curl/src/mkhelp.pl, revision 1.1.1.1

1.1       misho       1: #!/usr/bin/env perl
                      2: #***************************************************************************
                      3: #                                  _   _ ____  _
                      4: #  Project                     ___| | | |  _ \| |
                      5: #                             / __| | | | |_) | |
                      6: #                            | (__| |_| |  _ <| |___
                      7: #                             \___|\___/|_| \_\_____|
                      8: #
                      9: # Copyright (C) 1998 - 2019, Daniel Stenberg, <daniel@haxx.se>, et al.
                     10: #
                     11: # This software is licensed as described in the file COPYING, which
                     12: # you should have received as part of this distribution. The terms
                     13: # are also available at https://curl.haxx.se/docs/copyright.html.
                     14: #
                     15: # You may opt to use, copy, modify, merge, publish, distribute and/or sell
                     16: # copies of the Software, and permit persons to whom the Software is
                     17: # furnished to do so, under the terms of the COPYING file.
                     18: #
                     19: # This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
                     20: # KIND, either express or implied.
                     21: #
                     22: ###########################################################################
                     23: 
                     24: # Yeah, I know, probably 1000 other persons already wrote a script like
                     25: # this, but I'll tell ya:
                     26: 
                     27: # THEY DON'T FIT ME :-)
                     28: 
                     29: # Get readme file as parameter:
                     30: 
                     31: if($ARGV[0] eq "-c") {
                     32:     $c=1;
                     33:     shift @ARGV;
                     34: }
                     35: 
                     36: push @out, "                                  _   _ ____  _\n";
                     37: push @out, "  Project                     ___| | | |  _ \\| |\n";
                     38: push @out, "                             / __| | | | |_) | |\n";
                     39: push @out, "                            | (__| |_| |  _ <| |___\n";
                     40: push @out, "                             \\___|\\___/|_| \\_\\_____|\n";
                     41: 
                     42: my $olen=0;
                     43: while (<STDIN>) {
                     44:     my $line = $_;
                     45: 
                     46:     # this should be removed:
                     47:     $line =~ s/(.|_)//g;
                     48: 
                     49:     # remove trailing CR from line. msysgit checks out files as line+CRLF
                     50:     $line =~ s/\r$//;
                     51: 
                     52:     if($line =~ /^([ \t]*\n|curl)/i) {
                     53:         # cut off headers and empty lines
                     54:         $wline++; # count number of cut off lines
                     55:         next;
                     56:     }
                     57: 
                     58:     my $text = $line;
                     59:     $text =~ s/^\s+//g; # cut off preceding...
                     60:     $text =~ s/\s+$//g; # and trailing whitespaces
                     61: 
                     62:     $tlen = length($text);
                     63: 
                     64:     if($wline && ($olen == $tlen)) {
                     65:         # if the previous line with contents was exactly as long as
                     66:         # this line, then we ignore the newlines!
                     67: 
                     68:         # We do this magic because a header may abort a paragraph at
                     69:         # any line, but we don't want that to be noticed in the output
                     70:         # here
                     71:         $wline=0;
                     72:     }
                     73:     $olen = $tlen;
                     74: 
                     75:     if($wline) {
                     76:         # we only make one empty line max
                     77:         $wline = 0;
                     78:         push @out, "\n";
                     79:     }
                     80:     push @out, $line;
                     81: }
                     82: push @out, "\n"; # just an extra newline
                     83: 
                     84: print <<HEAD
                     85: /*
                     86:  * NEVER EVER edit this manually, fix the mkhelp.pl script instead!
                     87:  */
                     88: #ifdef USE_MANUAL
                     89: #include "tool_hugehelp.h"
                     90: HEAD
                     91:     ;
                     92: if($c) {
                     93:     # If compression requested, check that the Gzip module is available
                     94:     # or else disable compression
                     95:     $c = eval
                     96:     {
                     97:       require IO::Compress::Gzip;
                     98:       IO::Compress::Gzip->import();
                     99:       1;
                    100:     };
                    101:     print STDERR "Warning: compression requested but Gzip is not available\n" if (!$c)
                    102: }
                    103: 
                    104: if($c)
                    105: {
                    106:     my $content = join("", @out);
                    107:     my $gzippedContent;
                    108:     IO::Compress::Gzip::gzip(
                    109:         \$content, \$gzippedContent, Level => 9, TextFlag => 1, Time=>0) or die "gzip failed:";
                    110:     $gzip = length($content);
                    111:     $gzipped = length($gzippedContent);
                    112: 
                    113:     print <<HEAD
                    114: #include <zlib.h>
                    115: #include "memdebug.h" /* keep this as LAST include */
                    116: static const unsigned char hugehelpgz[] = {
                    117:   /* This mumbo-jumbo is the huge help text compressed with gzip.
                    118:      Thanks to this operation, the size of this data shrank from $gzip
                    119:      to $gzipped bytes. You can disable the use of compressed help
                    120:      texts by NOT passing -c to the mkhelp.pl tool. */
                    121: HEAD
                    122: ;
                    123: 
                    124:     my $c=0;
                    125:     print " ";
                    126:     for(split(//, $gzippedContent)) {
                    127:         my $num=ord($_);
                    128:         printf(" 0x%02x,", 0+$num);
                    129:         if(!(++$c % 12)) {
                    130:             print "\n ";
                    131:         }
                    132:     }
                    133:     print "\n};\n";
                    134: 
                    135:     print <<EOF
                    136: #define BUF_SIZE 0x10000
                    137: static voidpf zalloc_func(voidpf opaque, unsigned int items, unsigned int size)
                    138: {
                    139:   (void) opaque;
                    140:   /* not a typo, keep it calloc() */
                    141:   return (voidpf) calloc(items, size);
                    142: }
                    143: static void zfree_func(voidpf opaque, voidpf ptr)
                    144: {
                    145:   (void) opaque;
                    146:   free(ptr);
                    147: }
                    148: /* Decompress and send to stdout a gzip-compressed buffer */
                    149: void hugehelp(void)
                    150: {
                    151:   unsigned char* buf;
                    152:   int status,headerlen;
                    153:   z_stream z;
                    154: 
                    155:   /* Make sure no gzip options are set */
                    156:   if (hugehelpgz[3] & 0xfe)
                    157:     return;
                    158: 
                    159:   headerlen = 10;
                    160:   memset(&z, 0, sizeof(z_stream));
                    161:   z.zalloc = (alloc_func)zalloc_func;
                    162:   z.zfree = (free_func)zfree_func;
                    163:   z.avail_in = (unsigned int)(sizeof(hugehelpgz) - headerlen);
                    164:   z.next_in = (unsigned char *)hugehelpgz + headerlen;
                    165: 
                    166:   if (inflateInit2(&z, -MAX_WBITS) != Z_OK)
                    167:     return;
                    168: 
                    169:   buf = malloc(BUF_SIZE);
                    170:   if (buf) {
                    171:     while(1) {
                    172:       z.avail_out = BUF_SIZE;
                    173:       z.next_out = buf;
                    174:       status = inflate(&z, Z_SYNC_FLUSH);
                    175:       if (status == Z_OK || status == Z_STREAM_END) {
                    176:         fwrite(buf, BUF_SIZE - z.avail_out, 1, stdout);
                    177:         if (status == Z_STREAM_END)
                    178:           break;
                    179:       }
                    180:       else
                    181:         break;    /* Error */
                    182:     }
                    183:     free(buf);
                    184:   }
                    185:   inflateEnd(&z);
                    186: }
                    187: EOF
                    188:     ;
                    189: foot();
                    190: exit;
                    191: }
                    192: else {
                    193:     print <<HEAD
                    194: void hugehelp(void)
                    195: {
                    196:    fputs(
                    197: HEAD
                    198:          ;
                    199: }
                    200: 
                    201: $outsize=0;
                    202: for(@out) {
                    203:     chop;
                    204: 
                    205:     $new = $_;
                    206: 
                    207:     $outsize += length($new)+1; # one for the newline
                    208: 
                    209:     $new =~ s/\\/\\\\/g;
                    210:     $new =~ s/\"/\\\"/g;
                    211: 
                    212:     # gcc 2.96 claims ISO C89 only is required to support 509 letter strings
                    213:     if($outsize > 500) {
                    214:         # terminate and make another fputs() call here
                    215:         print ", stdout);\n fputs(\n";
                    216:         $outsize=length($new)+1;
                    217:     }
                    218:     printf("\"%s\\n\"\n", $new);
                    219: 
                    220: }
                    221: 
                    222: print ", stdout) ;\n}\n";
                    223: 
                    224: foot();
                    225: 
                    226: sub foot {
                    227:   print <<FOOT
                    228: #else /* !USE_MANUAL */
                    229: /* built-in manual is disabled, blank function */
                    230: #include "tool_hugehelp.h"
                    231: void hugehelp(void) {}
                    232: #endif /* USE_MANUAL */
                    233: FOOT
                    234:   ;
                    235: }

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>