Re: [PATCH] Making adding binary files possible
Yves Orton [Wed, 20 Dec 2006 16:00:33 +0000 (17:00 +0100)]
Message-ID: <9b18b3110612200700k48157cd1n1f2305f306b7de32@mail.gmail.com>

plus matching updates to Makefile.SH and patching.pod

p4raw-id: //depot/perl@29604

MANIFEST
Makefile.SH
Porting/patching.pod
pack.pl [deleted file]
packed_files.pl [deleted file]
uupacktool.pl [new file with mode: 0644]
win32/Makefile
win32/Makefile.ce
win32/makefile.mk
win32/makeico.pl [deleted file]
win32/perlexe.ico.packd [new file with mode: 0644]

index 35533af..ba88a78 100644 (file)
--- a/MANIFEST
+++ b/MANIFEST
@@ -2916,8 +2916,7 @@ os2/perlrexx.c                    Support perl interpreter embedded in REXX
 os2/perlrexx.cmd               Test perl interpreter embedded in REXX
 overload.h                     generated overload enum and name table
 overload.pl                    generate overload.h
-pack.pl                                Pack/unpack individual files to the .packed format
-packed_files.pl                        Extract all .packed files mentioned in MANIFEST
+uupacktool.pl                  Pack/unpack files to the .packed format
 pad.c                          Scratchpad functions
 pad.h                          Scratchpad headers
 parser.h                       parser object header
@@ -3819,7 +3818,7 @@ win32/include/sys/socket.h        Win32 port
 win32/Makefile                 Win32 makefile for NMAKE (Visual C++ build)
 win32/Makefile.ce              WinCE port
 win32/makefile.mk              Win32 makefile for DMAKE (BC++, VC++ builds)
-win32/makeico.pl               script to create perlexe.ico image file
+win32/perlexe.ico.packd                uupacktool.pl packed perlexe.ico image file, 'packd' ext is deliberate!
 win32/mdelete.bat              multifile delete
 win32/perlexe.rc               associated perl binary with icon
 win32/perlglob.c               Win32 port
index bba2e1b..df94359 100644 (file)
@@ -1175,10 +1175,10 @@ _test_notty:
        cd t && $(PERL_DEBUG) PERL_SKIP_TTY_TEST=1 $(LDLIBPTH) $(PERL) $(TESTFILE) $(TEST_ARGS)
 
 unpack_files:
-       $(LDLIBPTH) ./miniperl$(EXE_EXT) -Ilib packed_files.pl -u
+       $(LDLIBPTH) ./miniperl$(EXE_EXT) -Ilib uupacktool.pl -u -m
 
 cleanup_unpacked_files:
-       $(LDLIBPTH) ./miniperl$(EXE_EXT) -Ilib packed_files.pl -c
+       $(LDLIBPTH) ./miniperl$(EXE_EXT) -Ilib uupacktool.pl -c
 
 # The second branch is for testing without a tty or controlling terminal,
 # see t/op/stat.t
index 52c60d0..0b9e484 100644 (file)
@@ -2,17 +2,10 @@
 
 patching.pod - Appropriate format for patches to the perl source tree
 
-=head2 Where to get this document
-
-The latest version of this document is available from
-     http://perrin.dimensional.com/perl/perlpatch.html
-
 =head2 How to contribute to this document
 
-You may mail corrections, additions, and suggestions to me
-at dgris@dimensional.com but the preferred method would be
-to follow the instructions set forth in this document and 
-submit a patch 8-).
+You may mail corrections, additions, and suggestions by following the
+instructions set forth in this document and submitting a patch :).
 
 =head1 Description
 
@@ -85,16 +78,16 @@ diffs.  Some examples using GNU diff:
 
     # generate a patch for a newly added file
     % diff -u /dev/null new/file
-    
+
     # generate a patch to remove a file (patch > v2.4 will remove it cleanly)
     % diff -u old/goner /dev/null
-    
+
     # get additions, deletions along with everything else, recursively
     % diff -ruN olddir newdir
-    
+
     # ignore whitespace
     % diff -bu a/file b/file
-    
+
     # show function name in every hunk (safer, more informative)
     % diff -u -p old/file new/file
     % diff -u -F '^[_a-zA-Z0-9]+ *(' old/file new/file
@@ -156,12 +149,12 @@ you have your changes, you would run makepatch as follows:
 Since the patch(1) utility cannot deal with binary files, it's important
 that you either avoid the use of binary files in your patch, generate the
 files dynamically, or that you encode any binary files using the
-F<pack.pl> utility.
+F<uupacktool.pl> utility.
 
 Assuming you needed to include a gzip-encoded file for a module's test
-suite, you might do this as follows using the F<pack.pl> utility:
+suite, you might do this as follows using the F<uupacktool.pl> utility:
 
-    $ perl pack.pl -v -D lib/Some/Module/t/src/t.gz
+    $ perl uupacktool.pl -v -p -D lib/Some/Module/t/src/t.gz
     Writing lib/Some/Module/t/src/t.gz into lib/Some/Module/t/src/t.gz.packed
 
 This will replace the C<t.gz> file with an encoded counterpart. During
@@ -398,7 +391,7 @@ numbers and offsets in the patch, making it useless.
 If you follow these guidelines it will make everybody's life a little
 easier.  You'll have the satisfaction of having contributed to perl,
 others will have an easy time using your work, and it should be easier
-for the maintainers to coordinate the occasionally large numbers of 
+for the maintainers to coordinate the occasionally large numbers of
 patches received.
 
 Also, just because you're not a brilliant coder doesn't mean that you
@@ -416,13 +409,6 @@ hundreds of patches and that it is B<your> responsibility to integrate
 them into the source.  Obviously you'd want the patches to be as easy
 to apply as possible.  Keep that in mind.  8-)
 
-=head1 Last Modified
-
-Last modified 22 August 2002
-H.Merijn Brand <h.m.brand@xs4all.nl>
-Prev modified 21 January 1999 
-Daniel Grisinger <dgris@dimensional.com>
-
 =head1 Author and Copyright Information
 
 Copyright (c) 1998-2002 Daniel Grisinger
diff --git a/pack.pl b/pack.pl
deleted file mode 100644 (file)
index e82c4e1..0000000
--- a/pack.pl
+++ /dev/null
@@ -1,68 +0,0 @@
-#!perl
-use strict;
-use Getopt::Std;
-
-my $opts = {};
-getopts('ushvD', $opts );
-
-die usage() if $opts->{h};
-
-my $file    = shift or die "Need file\n". usage();
-my $outfile = shift || '';
-my $mode    = (stat($file))[2] & 07777;
-
-open my $fh, $file or die "Could not open input file $file: $!";
-my $str = do { local $/; <$fh> };
-
-### unpack?
-my $outstr;
-if( $opts->{u} ) {
-    if( !$outfile ) {
-        $outfile = $file;
-        $outfile =~ s/\.packed$//;
-    }
-
-    $outstr  = unpack 'u', $str;
-
-} else {
-    $outfile ||= $file . '.packed';
-
-    $outstr = pack 'u', $str;
-}
-
-### output the file
-if( $opts->{'s'} ) {
-    print STDOUT $outstr;
-} else {
-    print "Writing $file into $outfile\n" if $opts->{'v'};
-    open my $outfh, ">$outfile"
-        or die "Could not open $outfile for writing: $!";
-    print $outfh $outstr;
-    close $outfh;
-
-    chmod $mode, $outfile;
-}
-
-### delete source file?
-if( $opts->{'D'} and $file ne $outfile ) {
-    1 while unlink $file;
-}
-
-sub usage {
-    return qq[
-Usage: $0 [-v] [-s] [-D] SOURCE [OUTPUT_FILE]
-       $0 [-v] [-s] [-D] -u SOURCE [OUTPUT_FILE]
-       $0 -h
-
-    uuencodes a file, either to a target file or STDOUT.
-    If no output file is provided, it outputs to SOURCE.packed
-
-Options:
-    -v  Run verbosely
-    -s  Output to STDOUT rather than OUTPUT_FILE
-    -h  Display this help message
-    -u  Unpack rather than pack
-    -D  Delete source file after encoding/decoding
-
-]
-}
diff --git a/packed_files.pl b/packed_files.pl
deleted file mode 100644 (file)
index f71290d..0000000
+++ /dev/null
@@ -1,58 +0,0 @@
-#!perl
-use strict;
-use Getopt::Std;
-
-my $opts = {};
-getopts('uch', $opts );
-
-die usage() if $opts->{'h'} or ( not $opts->{'u'} and not $opts->{'c'} );
-
-my $Pack = 'pack.pl';
-die "Could not find $Pack" unless -e $Pack;
-
-open my $fh, "MANIFEST" or die "Could not open MANIFEST";
-
-while( my $line = <$fh> ) {
-    chomp $line;
-    my ($file) = split /\s+/, $line;
-
-    next unless $file =~ /\.packed/;
-
-    my $out = $file;
-    $out =~ s/\.packed//;
-
-    ### unpack
-    if( $opts->{'u'} ) {
-
-        my $cmd =  "$^X -Ilib $Pack -u -v $file $out";
-        system( $cmd ) and die "Could not unpack $file: $?";
-
-    ### clean up
-    } else {
-
-        ### file exists?
-        unless( -e $out ) {
-            print "File $file was not unpacked into $out. Can not remove.\n";
-
-        ### remove it
-        } else {
-            print "Removing $out\n";
-            1 while unlink $out;
-        }
-    }
-}
-
-sub usage {
-    return qq[
-Usage: $^X $0 -u | -c | -h
-
-    Unpack or clean up .packed files from the source tree.
-    This program is just a wrapper around $Pack.
-
-Options:
-    -u  Unpack all files in this source tree
-    -c  Clean up all unpacked files from this source tree
-    -h  Display this help text
-
-];
-}
diff --git a/uupacktool.pl b/uupacktool.pl
new file mode 100644 (file)
index 0000000..5656cef
--- /dev/null
@@ -0,0 +1,185 @@
+#!perl
+
+use strict;
+use warnings;
+use Getopt::Long;
+use File::Basename;
+
+our $LastUpdate = -M $0;
+
+sub handle_file {
+    my $opts    = shift;
+    my $file    = shift or die "Need file\n". usage();
+    my $outfile = shift || '';
+    my $mode    = (stat($file))[2] & 07777;
+
+    open my $fh, "<", $file
+        or die "Could not open input file $file: $!";
+    binmode $fh;
+    my $str = do { local $/; <$fh> };
+
+    ### unpack?
+    my $outstr;
+    if( $opts->{u} ) {
+        if( !$outfile ) {
+            $outfile = $file;
+            $outfile =~ s/\.packed//;
+        }
+        my ($head, $body) = split /__UU__\n/, $str;
+        die "Can't unpack malformed data in '$file'\n"
+            if !$head or !$body;
+        $outstr = unpack 'u', $body;
+
+    } else {
+        $outfile ||= $file . '.packed';
+
+        my $me = basename($0);
+
+        $outstr = <<"EOFBLURB" . pack 'u', $str;
+#########################################################################
+This is a binary file that was packed with the 'uupacktool.pl' which
+is included in the Perl distribution.
+
+To unpack this file use the following command:
+
+     $me -u $outfile $file
+
+To recreate it use the following command:
+
+     $me -p $file $outfile
+
+Created at @{[scalar localtime]}
+#########################################################################
+__UU__
+EOFBLURB
+    }
+
+    ### output the file
+    if( $opts->{'s'} ) {
+        print STDOUT $outstr;
+    } else {
+        print "Writing $file into $outfile\n" if $opts->{'v'};
+        open my $outfh, ">", $outfile
+            or die "Could not open $outfile for writing: $!";
+        binmode $outfh;
+        print $outfh $outstr;
+        close $outfh;
+
+        chmod $mode, $outfile;
+    }
+
+    ### delete source file?
+    if( $opts->{'D'} and $file ne $outfile ) {
+        1 while unlink $file;
+    }
+}
+
+sub bulk_process {
+    my $opts = shift;
+    my $Manifest = $opts->{'m'};
+
+    open my $fh, "<", $Manifest or die "Could not open '$Manifest':$!";
+
+    print "Reading $Manifest\n"
+            if $opts->{'v'};
+
+    my $count = 0;
+    my $lines = 0;
+    while( my $line = <$fh> ) {
+        chomp $line;
+        my ($file) = split /\s+/, $line;
+
+        $lines++;
+
+        next unless $file =~ /\.packed/;
+
+        $count++;
+
+        my $out = $file;
+        $out =~ s/\.packed//;
+
+        ### unpack
+        if( !$opts->{'c'} ) {
+            ( $out, $file ) = ( $file, $out ) if $opts->{'p'};
+            if (-e $out) {
+                my $changed = -M _;
+                if ($changed < $LastUpdate and $changed < -M $file) {
+                    print "Skipping '$file' as '$out' is up-to-date.\n"
+                        if $opts->{'v'};
+                    next;
+                }
+            }
+            handle_file($opts, $file, $out);
+            print "Converted '$file' to '$out'\n"
+                if $opts->{'v'};
+
+        ### clean up
+        } else {
+
+            ### file exists?
+            unless( -e $out ) {
+                print "File '$file' was not unpacked into '$out'. Can not remove.\n";
+
+            ### remove it
+            } else {
+                print "Removing '$out'\n";
+                1 while unlink $out;
+            }
+        }
+    }
+    print "Found $count files to process out of $lines in '$Manifest'\n"
+            if $opts->{'v'};
+}
+
+sub usage {
+    return qq[
+Usage: $^X $0 [-d dir] [-v] [-c] [-D] -p|-u [orig [packed|-s] | -m [manifest]]
+
+    Handle binary files in source tree. Can be used to pack or
+    unpack files individiually or as specified by a manifest file.
+
+Options:
+    -u  Unpack files (defaults to -u unless -p is specified)
+    -p  Pack files
+    -c  Clean up all unpacked files. Implies -m
+
+    -D  Delete source file after encoding/decoding
+
+    -s  Output to STDOUT rather than OUTPUT_FILE
+    -m  Use manifest file, if none is explicitly provided defaults to 'MANIFEST'
+
+    -d  Change directory to dir before processing
+
+    -v  Run verbosely
+    -h  Display this help message
+];
+}
+
+my $opts = {};
+GetOptions($opts,'u','p','c','m:s','s','d=s','v','h');
+
+die "Can't pack and unpack at the same time!\n", usage()
+    if $opts->{'u'} && $opts->{'p'};
+die usage() if $opts->{'h'};
+
+if ( $opts->{'d'} ) {
+    chdir $opts->{'d'}
+        or die "Failed to chdir to '$opts->{'d'}':$!";
+}
+$opts->{'u'} = 1 if !$opts->{'p'};
+binmode STDOUT if $opts->{'s'};
+if ( exists $opts->{'m'} or exists $opts->{'c'} ) {
+    $opts->{'m'} ||= "MANIFEST";
+    bulk_process($opts);
+    exit(0);
+} else {
+    if (@ARGV) {
+        handle_file($opts, @ARGV);
+    } else {
+        die "No file to process specified!\n", usage();
+    }
+    exit(0);
+}
+
+
+die usage();
index 6399b57..6b6c1d9 100644 (file)
@@ -920,8 +920,8 @@ $(PERLSTATICLIB): Extensions_static
 <<
        $(XCOPY) $(PERLSTATICLIB) $(COREDIR)
 
-$(PERLEXE_ICO): $(MINIPERL) makeico.pl
-       $(MINIPERL) makeico.pl > $@
+$(PERLEXE_ICO): $(MINIPERL) ..\uupacktool.pl $(PERLEXE_ICO).packd
+       $(MINIPERL) -I..\lib ..\uupacktool.pl -u $(PERLEXE_ICO).packd $(PERLEXE_ICO)
 
 $(PERLEXE_RES): perlexe.rc $(PERLEXE_ICO)
 
@@ -1206,7 +1206,7 @@ minitest : $(MINIPERL) $(GLOBEXE) $(CONFIGPM) utils $(UNIDATAFILES)
        cd ..\t && \
        $(MINIPERL) -I..\lib harness base/*.t comp/*.t cmd/*.t io/*.t op/*.t pragma/*.t
 
-test-prep : all utils
+test-prep : all utils unpack_files
        $(XCOPY) $(PERLEXE) ..\t\$(NULL)
        $(XCOPY) $(PERLDLL) ..\t\$(NULL)
        $(XCOPY) $(GLOBEXE) ..\t\$(NULL)
@@ -1216,6 +1216,12 @@ test : test-prep
        $(PERLEXE) -I..\lib harness $(TEST_SWITCHES) $(TEST_FILES)
        cd ..\win32
 
+unpack_files:
+       $(MINIPERL) -I..\lib ..\uupacktool.pl -u -d .. -m
+
+cleanup_unpacked_files:
+       $(MINIPERL) -I..\lib ..\uupacktool.pl -c -d .. -m
+
 test-reonly : reonly utils
        $(XCOPY) $(PERLEXE) ..\t\$(NULL)
        $(XCOPY) $(PERLDLL) ..\t\$(NULL)
@@ -1272,9 +1278,11 @@ _clean :
        -@$(DEL) *.pdb
        -@$(DEL) Extensions_static
 
-clean : Extensions_clean _clean
+_preclean : cleanup_unpacked_files
+
+clean : _preclean Extensions_clean _clean
 
-realclean : Extensions_realclean MakePPPort_clean _clean
+realclean : _preclean Extensions_realclean MakePPPort_clean _clean
 
 # Handy way to run perlbug -ok without having to install and run the
 # installed perlbug. We don't re-run the tests here - we trust the user.
index 7907c2a..4c2bc16 100644 (file)
@@ -933,7 +933,7 @@ zip:
        $(HPERL) -I..\lib -MCross=$(CROSS_NAME) ce-helpers\makedist.pl --distdir=dist-$(CROSS_NAME) --cross-name=$(CROSS_NAME) --zip
 
 perl.ico:
-       $(HPERL) makeico.pl perl.ico
+       $(HPERL) -I..\lib ..\uupacktool.pl -u perlexe.ico.packd perl.ico
 
 hostminiperl: ..\miniperl.exe
 
index 75975a0..dcbd4af 100644 (file)
@@ -1224,8 +1224,8 @@ $(PERLSTATICLIB): Extensions_static
 .ENDIF
        $(XCOPY) $(PERLSTATICLIB) $(COREDIR)
 
-$(PERLEXE_ICO): $(MINIPERL) makeico.pl
-       $(MINIPERL) makeico.pl > $@
+$(PERLEXE_ICO): $(MINIPERL) ..\uupacktool.pl $(PERLEXE_ICO).packd
+       $(MINIPERL) -I..\lib ..\uupacktool.pl -u $(PERLEXE_ICO).packd $(PERLEXE_ICO)
 
 $(PERLEXE_RES): perlexe.rc $(PERLEXE_ICO)
 
@@ -1537,7 +1537,13 @@ minitest : $(MINIPERL) $(GLOBEXE) $(CONFIGPM) $(UNIDATAFILES) utils
        cd ..\t && \
        $(MINIPERL) -I..\lib harness base/*.t comp/*.t cmd/*.t io/*.t op/*.t pragma/*.t
 
-test-prep : all utils
+unpack_files:
+       $(MINIPERL) -I..\lib ..\uupacktool.pl -u -d .. -m
+
+cleanup_unpacked_files:
+       $(MINIPERL) -I..\lib ..\uupacktool.pl -c -d .. -m
+       
+test-prep : all utils unpack_files
        $(XCOPY) $(PERLEXE) ..\t\$(NULL)
        $(XCOPY) $(PERLDLL) ..\t\$(NULL)
 .IF "$(CCTYPE)" == "BORLAND"
@@ -1604,9 +1610,13 @@ _clean :
        -@erase *.tds
        -@erase Extensions_static
 
-clean : Extensions_clean _clean
 
-realclean : Extensions_realclean MakePPPort_clean _clean
+
+_preclean : cleanup_unpacked_files
+       
+clean : _preclean Extensions_clean _clean
+
+realclean : _preclean Extensions_realclean MakePPPort_clean _clean
 
 # Handy way to run perlbug -ok without having to install and run the
 # installed perlbug. We don't re-run the tests here - we trust the user.
diff --git a/win32/makeico.pl b/win32/makeico.pl
deleted file mode 100644 (file)
index 12685f9..0000000
+++ /dev/null
@@ -1,106 +0,0 @@
-if (@ARGV) {
-    open ICO, ">", shift or die $!;
-} else {
-    *ICO= *STDOUT;
-}
-binmode ICO;
-while (<DATA>) {
-  chomp;
-  print ICO pack "H*", $_;
-}
-
-# Create new hex data with
-# perl -wle "binmode STDIN; $/ = \32; while (<>) {print unpack 'H*', $_}" <perl.ico.orig
-# then place after __DATA__
-__DATA__
-0000010003001010100001000400280100003600000010100000010008006805
-00005e010000101000000100200068040000c606000028000000100000002000
-00000100040000000000c000000000000000000000000000000000000000ffff
-ff007b000000007b00007b7b000000007b007b007b00007b7b00bdbdbd007b7b
-7b00ff00000000ff0000ffff00000000ff00ff00ff0000ffff0000000000ffff
-fffffffffffffffffffff7ff8fffffffffffff8fffffffffffffff7fffffffff
-ffffff8fffffffffffffff8fffffffffffffff8f7ffffffffffffffff87fffff
-fffffffffffffffff8fffffff8ffffffff8ffffffffffffffff8ffff7fffff8f
-f8ff8ffffffffffffffff8ffffffffffffffffffffffffffffffffffffffffff
-9e5cfbb77420fd9b7865fd9b2074fd5b7320fd5b6e20fd137573f0017072e003
-6c65e0032077e4076e20e6076577c30f6720ff9f6520ffff6f6effff6e202800
-0000100000002000000001000800000000004001000000000000000000000000
-000000000000ffffff00fefefe00d6d6d600aaaaaa00fdfdfd00797979000000
-00007a7a7a00fcfcfc004141410075757500848484001e1e1e00cbcbcb00b7b7
-b70003030300888888000202020081818100f6f6f60020202000b6b6b6008a8a
-8a00040404001a1a1a00e7e7e7000e0e0e00383838006b6b6b0018181800b2b2
-b200c1c1c10015151600171717000b0b0b00010101001f1f1f000a0a0a007070
-70009b9b9b00e9e9e80078787800111111002323230044444400e2e2e200a6a6
-a600656565006a6a6a00b4b4b400afafaf00cfcfcf00080808006c6c6c008f8f
-8f00b1b1b100bfbfbf00f1f1f100585858009a9a9a00ffffff00ffffff00ffff
-ff00ffffff00ffffff00ffffff00ffffff00ffffff00ffffff00ffffff00ffff
-ff00ffffff00ffffff00ffffff00ffffff00ffffff00ffffff00ffffff00ffff
-ff00ffffff00ffffff00ffffff00ffffff00ffffff00ffffff00ffffff00ffff
-ff00ffffff00ffffff00ffffff00ffffff00ffffff00ffffff00ffffff00ffff
-ff00ffffff00ffffff00ffffff00ffffff00ffffff00ffffff00ffffff00ffff
-ff00ffffff00ffffff00ffffff00ffffff00ffffff00ffffff00ffffff00ffff
-ff00ffffff00ffffff00ffffff00ffffff00ffffff00ffffff00ffffff00ffff
-ff00ffffff00ffffff00ffffff00ffffff00ffffff00ffffff00ffffff00ffff
-ff00ffffff00ffffff00ffffff00ffffff00ffffff00ffffff00ffffff00ffff
-ff00ffffff00ffffff00ffffff00ffffff00ffffff00ffffff00ffffff00ffff
-ff00ffffff00ffffff00ffffff00ffffff00ffffff00ffffff00ffffff00ffff
-ff00ffffff00ffffff00ffffff00ffffff00ffffff00ffffff00ffffff00ffff
-ff00ffffff00ffffff00ffffff00ffffff00ffffff00ffffff00ffffff00ffff
-ff00ffffff00ffffff00ffffff00ffffff00ffffff00ffffff00ffffff00ffff
-ff00ffffff00ffffff00ffffff00ffffff00ffffff00ffffff00ffffff00ffff
-ff00ffffff00ffffff00ffffff00ffffff00ffffff00ffffff00ffffff00ffff
-ff00ffffff00ffffff00ffffff00ffffff00ffffff00ffffff00ffffff00ffff
-ff00ffffff00ffffff00ffffff00ffffff00ffffff00ffffff00ffffff00ffff
-ff00ffffff00ffffff00ffffff00ffffff00ffffff00ffffff00ffffff00ffff
-ff00ffffff00ffffff00ffffff00ffffff00ffffff00ffffff00ffffff00ffff
-ff00ffffff00ffffff00ffffff00ffffff00ffffff00ffffff00ffffff00ffff
-ff00ffffff00ffffff00ffffff00ffffff00ffffff00ffffff00ffffff00ffff
-ff00ffffff00ffffff00ffffff00ffffff00ffffff00ffffff00ffffff00ffff
-ff00ffffff00ffffff00ffffff00ffffff00ffffff00ffffff00ffffff00ffff
-ff00ffffff00060606060606060606060606060606060606060606060606060d
-06063a060606060606060606060606061c060606060606060606060606060606
-030606060606060606060606060606061c060606060606060606060606060606
-1c060606060606060606060606060c14090605060606060606060c0c06060606
-061406052706060606060606060606060606060c060606060606061b06060606
-0606061c06060606060614060b06060606060c060606060606060606060b0606
-06060b06060606060906060506060b06060c0606060606060606060606060605
-0606060606060606060606060606060606060606060606060606060606060606
-060606060606ffff9e5cfbb77420fd9b7865fd9b2074fd5b7320fd5b6e20fd13
-7573f0017072e0036c65e0032077e4076e20e6076577c30f6720ff9f6520ffff
-6f6effff6e202800000010000000200000000100200000000000400400000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000ff00000070000000010000004ebfbfbf400000000e000000005858
-58a7000000650000000000000000000000000000000000000000000000000000
-000000000030000000ff0000000100000001080808f76c6c6c93000000000000
-0001000000ff0000000000000000000000000000000000000000000000000000
-000000000003000000ff000000010000004b000000ffafafaf50000000000000
-0001000000ff0000000100000000000000000000000000000000000000000000
-000000000001000000ff00000001000000ff000000006a6a6a95000000010000
-0001000000ff0000000100000000000000000000000000000000000000000000
-000000000001000000ff00000001000000ff000000596565659a000000010000
-0001000000ff0000000000000000000000000000000000000000000000000000
-000000000017000000ff00000087111111ee232323dc444444bb000000017a7a
-7a85000000ff0000001d000000000000000000000000000000010000003e1515
-16ea171717e8020202fd0b0b0bf4010101fe000000ff020202fd1f1f1fe00a0a
-0af57070708f9b9b9b6400000000000000000000000000000001000000ff0000
-00ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff0000
-00ff181818e70000004d00000000000000000000000000000001000000ff0e0e
-0ef1383838c7000000ff000000ff000000ff000000ff000000ff000000ff0000
-00ff6b6b6b940000000000000000000000000000000000000000000000ff2020
-20df000000498a8a8a75040404fb000000ff000000ff000000ff000000ff1a1a
-1ae5000000180000000000000000000000000000000000000048000000ff0303
-03fc0000008a0000000188888877020202fd000000ff000000ff000000ff8181
-817e0000000900000000000000000000000000000000414141be000000ff0000
-00ff7575758a00000000000000008484847b000000ff000000ff1e1e1ee10000
-0034000000000000000000000000000000000000000000000001000000290000
-00550000000100000000000000000000000279797986000000ff000000850000
-0003000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000ffff9e5cfbb77420fd9b7865fd9b2074fd5b
-7320fd5b6e20fd137573f0017072e0036c65e0032077e4076e20e6076577c30f
-6720ff9f6520ffff6f6effff6e20
-
diff --git a/win32/perlexe.ico.packd b/win32/perlexe.ico.packd
new file mode 100644 (file)
index 0000000..93dd263
--- /dev/null
@@ -0,0 +1,79 @@
+#########################################################################
+This is a binary file that was packed with the 'uupacktool.pl' which
+is included in the Perl distribution.
+
+To unpack this file use the following command:
+
+     uupacktool.pl -u perlexe.ico.packd perlexe.ico 
+
+To recreate it use the following command:
+
+     uupacktool.pl -p perlexe.ico perlexe.ico.packd 
+
+Created at Wed Dec 20 15:48:40 2006
+#########################################################################
+__UU__
+M```!``,`$!`0``$`!``H`0``-@```!`0```!``@`:`4``%X!```0$````0`@
+M`&@$``#&!@``*````!`````@`````0`$``````#`````````````````````
+M`````/___P![`````'L``'M[`````'L`>P![``![>P"]O;T`>WM[`/\`````
+M_P``__\`````_P#_`/\``/__``````#________________W_X________^/
+M_________W__________C_________^/_________X]___________A_____
+M__________C____X_____X__________^/__?___C_C_C__________X____
+M________________________GES[MW0@_9MX9?V;('3]6W,@_5MN(/T3=7/P
+M`7!RX`-L9>`#('?D!VX@Y@=E=\,/9R#_GV4@__]O;O__;B`H````$````"``
+M```!``@``````$`!````````````````````````____`/[^_@#6UM8`JJJJ
+M`/W]_0!Y>7D``````'IZ>@#\_/P`04%!`'5U=0"$A(0`'AX>`,O+RP"WM[<`
+M`P,#`(B(B``"`@(`@8&!`/;V]@`@("``MK:V`(J*B@`$!`0`&AH:`.?GYP`.
+M#@X`.#@X`&MK:P`8&!@`LK*R`,'!P0`5%18`%Q<7``L+"P`!`0$`'Q\?``H*
+M"@!P<'``FYN;`.GIZ`!X>'@`$1$1`",C(P!$1$0`XN+B`*:FI@!E964`:FIJ
+M`+2TM`"OKZ\`S\_/``@("`!L;&P`CX^/`+&QL0"_O[\`\?'Q`%A86`":FIH`
+M____`/___P#___\`____`/___P#___\`____`/___P#___\`____`/___P#_
+M__\`____`/___P#___\`____`/___P#___\`____`/___P#___\`____`/__
+M_P#___\`____`/___P#___\`____`/___P#___\`____`/___P#___\`____
+M`/___P#___\`____`/___P#___\`____`/___P#___\`____`/___P#___\`
+M____`/___P#___\`____`/___P#___\`____`/___P#___\`____`/___P#_
+M__\`____`/___P#___\`____`/___P#___\`____`/___P#___\`____`/__
+M_P#___\`____`/___P#___\`____`/___P#___\`____`/___P#___\`____
+M`/___P#___\`____`/___P#___\`____`/___P#___\`____`/___P#___\`
+M____`/___P#___\`____`/___P#___\`____`/___P#___\`____`/___P#_
+M__\`____`/___P#___\`____`/___P#___\`____`/___P#___\`____`/__
+M_P#___\`____`/___P#___\`____`/___P#___\`____`/___P#___\`____
+M`/___P#___\`____`/___P#___\`____`/___P#___\`____`/___P#___\`
+M____`/___P#___\`____`/___P#___\`____`/___P#___\`____`/___P#_
+M__\`____`/___P#___\`____`/___P#___\`____`/___P#___\`____`/__
+M_P#___\`____`/___P#___\`____`/___P#___\`____`/___P#___\`____
+M`/___P#___\`____`/___P#___\`____`/___P#___\`____`/___P#___\`
+M____`/___P#___\`____`/___P#___\`____`/___P#___\`____`/___P#_
+M__\`____`/___P#___\`____``8&!@8&!@8&!@8&!@8&!@8&!@8&!@8&!@8-
+M!@8Z!@8&!@8&!@8&!@8&!AP&!@8&!@8&!@8&!@8&!@8#!@8&!@8&!@8&!@8&
+M!@8&'`8&!@8&!@8&!@8&!@8&!AP&!@8&!@8&!@8&!@8&#!0)!@4&!@8&!@8&
+M#`P&!@8&!A0&!2<&!@8&!@8&!@8&!@8&!@P&!@8&!@8&&P8&!@8&!@8<!@8&
+M!@8&%`8+!@8&!@8,!@8&!@8&!@8&!@L&!@8&"P8&!@8&"08&!08&"P8&#`8&
+M!@8&!@8&!@8&!@8%!@8&!@8&!@8&!@8&!@8&!@8&!@8&!@8&!@8&!@8&!@8&
+M!@8&!@;__YY<^[=T(/V;>&7]FR!T_5MS(/U;;B#]$W5S\`%P<N`#;&7@`R!W
+MY`=N(.8'97?##V<@_Y]E(/__;V[__VX@*````!`````@`````0`@``````!`
+M!```````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M`````````````````````/\```!P`````0```$Z_O[]`````#@````!86%BG
+M````90`````````````````````````````````````````P````_P````$`
+M```!"`@(]VQL;),``````````0```/\`````````````````````````````
+M`````````````P```/\````!````2P```/^OKZ]0``````````$```#_````
+M`0````````````````````````````````````$```#_`````0```/\`````
+M:FIJE0````$````!````_P````$`````````````````````````````````
+M```!````_P````$```#_````665E99H````!`````0```/\`````````````
+M````````````````````````````%P```/\```"'$1$1[B,C(]Q$1$2[````
+M`7IZ>H4```#_````'0````````````````````$````^%146ZA<7%^@"`@+]
+M"PL+]`$!`?X```#_`@("_1\?'^`*"@KU<'!PCYN;FV0`````````````````
+M```!````_P```/\```#_````_P```/\```#_````_P```/\```#_````_Q@8
+M&.<```!-`````````````````````0```/\.#@[Q.#@XQP```/\```#_````
+M_P```/\```#_````_P```/]K:VN4``````````````````````````````#_
+M("`@WP```$F*BHIU!`0$^P```/\```#_````_P```/\:&AKE````&```````
+M``````````````````!(````_P,#`_P```"*`````8B(B'<"`@+]````_P``
+M`/\```#_@8&!?@````D`````````````````````04%!O@```/\```#_=75U
+MB@``````````A(2$>P```/\```#_'AX>X0```#0`````````````````````
+M``````````$````I````50````$```````````````)Y>7F&````_P```(4`
+M```#````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M``````````#__YY<^[=T(/V;>&7]FR!T_5MS(/U;;B#]$W5S\`%P<N`#;&7@
+;`R!WY`=N(.8'97?##V<@_Y]E(/__;V[__VX@