r2359 - in packages/libmodule-signature-perl/trunk: . debian inc inc/Module inc/Module/Install inc/Test lib/Module script

Krzysztof Krzyzaniak eloy at costa.debian.org
Wed Mar 15 16:27:34 UTC 2006


Author: eloy
Date: 2006-03-15 16:26:45 +0000 (Wed, 15 Mar 2006)
New Revision: 2359

Added:
   packages/libmodule-signature-perl/trunk/AUDREY2006.pub
   packages/libmodule-signature-perl/trunk/inc/Module/AutoInstall.pm
   packages/libmodule-signature-perl/trunk/inc/Test/Builder/
Removed:
   packages/libmodule-signature-perl/trunk/AUTRIJUS.pub
   packages/libmodule-signature-perl/trunk/TODO
   packages/libmodule-signature-perl/trunk/inc/ExtUtils/
Modified:
   packages/libmodule-signature-perl/trunk/Changes
   packages/libmodule-signature-perl/trunk/MANIFEST
   packages/libmodule-signature-perl/trunk/META.yml
   packages/libmodule-signature-perl/trunk/Makefile.PL
   packages/libmodule-signature-perl/trunk/README
   packages/libmodule-signature-perl/trunk/SIGNATURE
   packages/libmodule-signature-perl/trunk/debian/changelog
   packages/libmodule-signature-perl/trunk/debian/control
   packages/libmodule-signature-perl/trunk/debian/rules
   packages/libmodule-signature-perl/trunk/inc/Module/Install.pm
   packages/libmodule-signature-perl/trunk/inc/Module/Install/AutoInstall.pm
   packages/libmodule-signature-perl/trunk/inc/Module/Install/Base.pm
   packages/libmodule-signature-perl/trunk/inc/Module/Install/Can.pm
   packages/libmodule-signature-perl/trunk/inc/Module/Install/Fetch.pm
   packages/libmodule-signature-perl/trunk/inc/Module/Install/Include.pm
   packages/libmodule-signature-perl/trunk/inc/Module/Install/Makefile.pm
   packages/libmodule-signature-perl/trunk/inc/Module/Install/Metadata.pm
   packages/libmodule-signature-perl/trunk/inc/Module/Install/Scripts.pm
   packages/libmodule-signature-perl/trunk/inc/Module/Install/Win32.pm
   packages/libmodule-signature-perl/trunk/inc/Module/Install/WriteAll.pm
   packages/libmodule-signature-perl/trunk/inc/Test/Builder.pm
   packages/libmodule-signature-perl/trunk/inc/Test/More.pm
   packages/libmodule-signature-perl/trunk/lib/Module/Signature.pm
   packages/libmodule-signature-perl/trunk/script/cpansign
Log:
eloy: new upstream version


Copied: packages/libmodule-signature-perl/trunk/AUDREY2006.pub (from rev 2358, packages/libmodule-signature-perl/branches/upstream/current/AUDREY2006.pub)

Deleted: packages/libmodule-signature-perl/trunk/AUTRIJUS.pub
===================================================================
--- packages/libmodule-signature-perl/trunk/AUTRIJUS.pub	2006-03-15 16:18:08 UTC (rev 2358)
+++ packages/libmodule-signature-perl/trunk/AUTRIJUS.pub	2006-03-15 16:26:45 UTC (rev 2359)
@@ -1,368 +0,0 @@
------BEGIN PGP PUBLIC KEY BLOCK-----
-Version: GnuPG v1.2.2 (FreeBSD)
-
-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
-PB3bAO9JE1rzH4sAnRke1F6Icefl+NM3x26+HEbC5AjBiEYEEhECAAYFAj6nm84A
-CgkQdU4vU8LFvP2h2ACfUSB6EbQxOC+Yl+uw5rVCbTN4zaoAmgK24g/GUBi1VaAN
-s58Sizk5aopuiEYEExECAAYFAj8/URYACgkQ1dlLUeP4bkyHYwCfX0EWja3AOCgt
-PWWUFfdTYhl65YwAoIPm1WCEkziEsY3E4p06OpJfyyHNiEYEExECAAYFAj8/l4oA
-CgkQlZ/JOHsLIwjXrwCgoPeXflfdlbLknJ2jiy+UmEa2XSQAoOkEaWZ73oW2Y24a
-XtQ7e+CW3+eJ0dGb0ZkBEAABAQAAAAAAAAAAAAAAAP/Y/+AAEEpGSUYAAQIBAEgA
-SAAA/+4ADkFkb2JlAGSAAAAAAf/bAIQACAYGBgYGCAYGCAwIBwgMDgoICAoOEA0N
-Dg0NEBEMDAwMDAwRDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAEJCAgJCgkL
-CQkLDgsNCw4RDg4ODhERDAwMDAwREQwMDAwMDBEMDAwMDAwMDAwMDAwMDAwMDAwM
-DAwMDAwMDAwM/8AAEQgAVQBuAwEiAAIRAQMRAf/dAAQAB//EAaIAAAAHAQEBAQEA
-AAAAAAAAAAQFAwIGAQAHCAkKCwEAAgIDAQEBAQEAAAAAAAAAAQACAwQFBgcICQoL
-EAACAQMDAgQCBgcDBAIGAnMBAgMRBAAFIRIxQVEGE2EicYEUMpGhBxWxQiPBUtHh
-MxZi8CRygvElQzRTkqKyY3PCNUQnk6OzNhdUZHTD0uIIJoMJChgZhJRFRqS0VtNV
-KBry4/PE1OT0ZXWFlaW1xdXl9WZ2hpamtsbW5vY3R1dnd4eXp7fH1+f3OEhYaHiI
-mKi4yNjo+Ck5SVlpeYmZqbnJ2en5KjpKWmp6ipqqusra6voRAAICAQIDBQUEBQYE
-CAMDbQEAAhEDBCESMUEFURNhIgZxgZEyobHwFMHR4SNCFVJicvEzJDRDghaSUyWi
-Y7LCB3PSNeJEgxdUkwgJChgZJjZFGidkdFU38qOzwygp0+PzhJSktMTU5PRldYWV
-pbXF1eX1RlZmdoaWprbG1ub2R1dnd4eXp7fH1+f3OEhYaHiImKi4yNjo+DlJWWl5
-iZmpucnZ6fkqOkpaanqKmqq6ytrq+v/aAAwDAQACEQMRAD8AiOj2UD6dYu1ir1t4
-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
-peRwqZxLK5ncvt4KMg==
-=/69j
------END PGP PUBLIC KEY BLOCK-----

Modified: packages/libmodule-signature-perl/trunk/Changes
===================================================================
--- packages/libmodule-signature-perl/trunk/Changes	2006-03-15 16:18:08 UTC (rev 2358)
+++ packages/libmodule-signature-perl/trunk/Changes	2006-03-15 16:26:45 UTC (rev 2359)
@@ -1,3 +1,38 @@
+[Changes for 0.53 - 2006-01-31]
+
+* The explicit call to "readline(D)" didn't compile on earlier perls which
+  demanded either "readline(*D)" or "<D>" -- I elected the latter form.
+  Reported by: Matthew Persic
+
+* Update my author key to reflect revoked past uids.
+
+[Changes for 0.52 - 2006-01-19]
+
+* POD and source code cleanup; no functional changes.
+
+* Updated my author key to reflect my new name and identity.
+
+* Upgrade to the latest Module::Install to fix Cygwin
+  installation problems.
+  Reported by: Lyle Ziegelmiller
+
+[Changes for 0.51 - 2006-01-02]
+
+* Even more flexible CRLF handling for SIGNATURE files,
+  Contributed by: Andreas Koenig.
+
+[Changes for 0.50 - 2005-08-21]
+
+* Add support for to SHA-256, requested by Mark Shelor in light
+  of the recent SHA1 attacks.  SHA1 is still the default, but
+  you can now override this by settings MODULE_SIGNATURE_CIPHER
+  environment variable to SHA256.
+
+[Changes for 0.45 - 2005-08-09]
+
+* Andreas Koenig ported out that "Import GPG keys?" was asked
+  far too many times during autoinstall.
+
 [Changes for 0.44 - 2004-12-16]
 
 * Add "pmfiles.dat" to legacy manifest_skip routine to accomodate

Modified: packages/libmodule-signature-perl/trunk/MANIFEST
===================================================================
--- packages/libmodule-signature-perl/trunk/MANIFEST	2006-03-15 16:18:08 UTC (rev 2358)
+++ packages/libmodule-signature-perl/trunk/MANIFEST	2006-03-15 16:26:45 UTC (rev 2359)
@@ -1,7 +1,7 @@
+AUDREY2006.pub
 AUTHORS
-AUTRIJUS.pub
 Changes
-inc/ExtUtils/AutoInstall.pm
+inc/Module/AutoInstall.pm
 inc/Module/Install.pm
 inc/Module/Install/AutoInstall.pm
 inc/Module/Install/Base.pm
@@ -14,6 +14,7 @@
 inc/Module/Install/Win32.pm
 inc/Module/Install/WriteAll.pm
 inc/Test/Builder.pm
+inc/Test/Builder/Module.pm
 inc/Test/More.pm
 lib/Module/Signature.pm
 Makefile.PL
@@ -25,4 +26,3 @@
 SIGNATURE
 t/0-signature.t
 t/1-basic.t
-TODO

Modified: packages/libmodule-signature-perl/trunk/META.yml
===================================================================
--- packages/libmodule-signature-perl/trunk/META.yml	2006-03-15 16:18:08 UTC (rev 2358)
+++ packages/libmodule-signature-perl/trunk/META.yml	2006-03-15 16:26:45 UTC (rev 2359)
@@ -1,16 +1,18 @@
-name: Module-Signature
-version: 0.44
+
 abstract: Module signature file manipulation
-author: Autrijus Tang (autrijus at autrijus.org)
+author: Audrey Tang <autrijus at autrijus.org>
+build_requires: 
+  Test::More: 0
+distribution_type: module
+generated_by: Module::Install version 0.55
 license: perl
-distribution_type: module
-build_requires:
-  Test::More: 0
-requires:
+name: Module-Signature
+no_index: 
+  directory: 
+    - inc
+    - t
+recommends: 
+  PAR::Dist: 0
+requires: 
   perl: 5.005
-recommends:
-  PAR::Dist: 0
-no_index:
-  directory:
-    - inc
-generated_by: Module::Install version 0.36
+version: 0.53

Modified: packages/libmodule-signature-perl/trunk/Makefile.PL
===================================================================
--- packages/libmodule-signature-perl/trunk/Makefile.PL	2006-03-15 16:18:08 UTC (rev 2358)
+++ packages/libmodule-signature-perl/trunk/Makefile.PL	2006-03-15 16:26:45 UTC (rev 2359)
@@ -3,68 +3,60 @@
 use 5.005;
 use inc::Module::Install;
 
-name            ('Module-Signature');
-abstract        ('Module signature file manipulation');
-author          ('Autrijus Tang (autrijus at autrijus.org)');
-version_from    ('lib/Module/Signature.pm');
-license         ('perl');
-install_script	('script/cpansign');
+$|++;
 
-=for Non-Debian
+name            'Module-Signature';
+all_from        'lib/Module/Signature.pm';
+install_script  'script/cpansign';
 
-requires( perl => 5.005 );
-requires( can_cc() ? 'Digest::SHA' : 'Digest::SHA::PurePerl' )
-    unless eval { require Digest::SHA1; 1 }
-        or eval { require Digest::SHA; 1 }
-        or eval { require Digest::SHA::PurePerl; 1 };
-features(
-    'Crypt::OpenPGP Support'	=> [
-	-default    => 0,
-        'MIME::Base64' => 0,
-	'Compress::Zlib' => 0,
-	'Crypt::CBC' => 0,
-	'Crypt::DES' => 0,
-	'Crypt::Blowfish' => 0,
-	'Crypt::RIPEMD160' => 0,
-	'Tie::EncryptedHash' => 0,
-	'Class::Loader' => 0,
-	'Convert::ASCII::Armour' => 0,
-	'Data::Buffer' => 0.04,
-	'Digest::MD2' => 0,
-	'Math::Pari' => 0,
-	'Crypt::Random' => 0,
-	'Crypt::Primes' => 0,
-	'Crypt::DES_EDE3' => 0,
-	'Crypt::DSA' => 0,
-	'Crypt::RSA' => 0,
-	'Convert::ASN1' => 0,
-	'Convert::PEM' => 0,
-	'Crypt::OpenPGP' => 1.0,
-    ],
+requires (can_cc() ? 'Digest::SHA' : 'Digest::SHA::PurePerl')
+    unless can_use 'Digest::SHA'
+        or can_use 'Digest::SHA1'
+        or can_use 'Digest::SHA::PurePerl';
+
+requires qw(
+    MIME::Base64
+    Compress::Zlib
+    Crypt::CBC
+    Crypt::DES
+    Crypt::Blowfish
+    Crypt::RIPEMD160
+    Tie::EncryptedHash
+    Class::Loader
+    Convert::ASCII::Armour
+    Data::Buffer    0.04
+    Digest::MD2
+    Math::Pari
+    Crypt::Random
+    Crypt::Primes
+    Crypt::DES_EDE3
+    Crypt::DSA
+    Crypt::RSA
+    Convert::ASN1
+    Convert::PEM
+    Crypt::OpenPGP  1.00
 ) if want_openpgp();
 
-features(
-    'Display checksum differences' => [
-	recommends( 'Algorithm::Diff' => 0 ),
-	recommends( 'Text::Diff'      => 0 ),
-    ],
-) unless (can_run('diff'));
+feature 'Display checksum differences', recommends qw(
+    Algorithm::Diff
+    Text::Diff
+) unless can_run 'diff';
 
-features(
-    'Sign and verify PAR (Perl Archive) files' => [
-	-default => 0,
-	recommends( 'PAR::Dist'	=> 0 ),
-    ],
+feature 'Sign and verify PAR (Perl Archive) files', recommends qw(
+    PAR::Dist
 );
 
-include('ExtUtils/AutoInstall.pm');
-build_requires('Test::More');
-auto_include_deps();
-auto_install( -default => 0 );
+feature 'Support for SHA-256', recommends
+    (can_cc() ? 'Digest::SHA' : 'Digest::SHA::PurePerl')
+    unless can_use 'Digest::SHA'
+        or can_use 'Digest::SHA256'
+        or can_use 'Digest::SHA::PurePerl';
 
-=cut
+build_requires  'Test::More';
+auto_include_deps;
+auto_install    -default => 0;
 
-&WriteAll( sign => 1 );
+sign; WriteAll;
 
 my $make = eval { require Config; $Config{make} } || 'make';
 print "\nNow, please enter '$make test' to test, and '$make install' to install.\n";
@@ -73,8 +65,8 @@
     print "*** Looking for Crypt::OpenPGP (Pure-Perl OpenPGP implementation)...\n";
     my $version = eval { require Crypt::OpenPGP; Crypt::OpenPGP->VERSION };
     if ($version) {
-	print "Crypt::OpenPGP found (version $version), good.\n";
-	return 1;
+        print "Crypt::OpenPGP found (version $version), good.\n";
+        return 1;
     }
 }
 
@@ -83,19 +75,22 @@
 
     my $gpg = can_run('gpg');
     my $has_gpg = (
-	$gpg and
-	`gpg --version` =~ /GnuPG/ and
-	defined `gpg --list-public-keys`
+        $gpg and
+        `gpg --version` =~ /GnuPG/ and
+        defined `gpg --list-public-keys`
     );
 
     if ($has_gpg) {
-	print "GnuPG found ($gpg).\n";
-	if (prompt("Import PAUSE and author keys to GnuPG?", 'y') =~ /^y/i) {
-	    print "Importing... ";
-	    system('gpg', '--quiet', '--import', <*.pub>);
-	    print "done.\n";
-	}
-	return 1;
+        print "GnuPG found ($gpg).\n";
+
+        return 1 if grep { /^--installdeps/} @ARGV;
+
+        if (prompt("Import PAUSE and author keys to GnuPG?", 'y') =~ /^y/i) {
+            print 'Importing... ';
+            system 'gpg', '--quiet', '--import', glob('*.pub');
+            print "done.\n";
+        }
+        return 1;
     }
 
     print "GnugPG not found anywhere in your PATH, eek.\n";
@@ -114,8 +109,8 @@
 
     my $punt = 2;
     if (can_cc()) {
-	$punt++;
-	print << '.';
+        $punt++;
+        print << '.';
 2) Automatically install Crypt::OpenPGP and the 20 modules it requires
    from CPAN, which will give the same functionality as GnuPG.
 .
@@ -127,9 +122,9 @@
 
     my $choice;
     while (1) {
-	$choice = prompt("Your choice:", 3) || 3;
-	last if $choice =~ /^[123]$/;
-	print "Sorry, I cannot understand '$choice'.\n"
+        $choice = prompt("Your choice:", 3) || 3;
+        last if $choice =~ /^[123]$/;
+        print "Sorry, I cannot understand '$choice'.\n"
     }
 
     goto &want_openpgp if $choice == 1;

Modified: packages/libmodule-signature-perl/trunk/README
===================================================================
--- packages/libmodule-signature-perl/trunk/README	2006-03-15 16:18:08 UTC (rev 2358)
+++ packages/libmodule-signature-perl/trunk/README	2006-03-15 16:26:45 UTC (rev 2359)
@@ -5,15 +5,15 @@
 
 Module::Signature uses the standard perl module install process:
 
-cpansign -v		# optional; see SIGNATURE for details
-perl Makefile.PL
-make                    # or 'nmake' on Win32
-make test
-make install
+    cpansign -v         # optional; see SIGNATURE for details
+    perl Makefile.PL
+    make                # or 'nmake' on Win32
+    make test
+    make install
 
 * Copyright
 
-Copyright 2002, 2003, 2004 by Autrijus Tang <autrijus at autrijus.org>.
+Copyright 2002, 2003, 2004, 2005, 2006 by Audrey Tang.
 
 All rights reserved.  You can redistribute and/or modify
 this bundle under the same terms as Perl itself.

Modified: packages/libmodule-signature-perl/trunk/SIGNATURE
===================================================================
--- packages/libmodule-signature-perl/trunk/SIGNATURE	2006-03-15 16:18:08 UTC (rev 2358)
+++ packages/libmodule-signature-perl/trunk/SIGNATURE	2006-03-15 16:26:45 UTC (rev 2359)
@@ -1,5 +1,5 @@
 This file contains message digests of all files listed in MANIFEST,
-signed via the Module::Signature module, version 0.42.
+signed via the Module::Signature module, version 0.53.
 
 To verify the content in this distribution, first make sure you have
 Module::Signature installed, then type:
@@ -14,37 +14,37 @@
 -----BEGIN PGP SIGNED MESSAGE-----
 Hash: SHA1
 
+SHA1 6e76ed411078b4a6264358d8b42ee91337d2def5 AUDREY2006.pub
 SHA1 6b29cb3b011d6dd95e512361c6b4ce2f5a8cdb17 AUTHORS
-SHA1 e3d33ad00ef3d1a151a20f2ca0259370198ed837 AUTRIJUS.pub
-SHA1 6a0fbc62cd2d6be73f90a8ba2fecd2f32724c9dd Changes
-SHA1 106e3d36e8ef72c765753635cd006df64d07a1fd MANIFEST
-SHA1 ad594608e587bf9c3c6a5c7fce7ad9901d7c7b8c META.yml
-SHA1 f75067726286d7d8d7f936f5d9747020ef8eccfe Makefile.PL
+SHA1 63e63c35410b8a34997bce49a35f5744d4aa567c Changes
+SHA1 1c0f4e6cdda728ea415bf23abfb4fc2b037ce6ee MANIFEST
+SHA1 479630b02c804cfc57a9f4b33a36661c763f9491 META.yml
+SHA1 c2b095718c410cf8276605758c963c1badcfe1f6 Makefile.PL
 SHA1 37e858c51409a297ef5d3fb35dc57cd3b57f9a4d PAUSE2003.pub
-SHA1 c1227eeb333e6204dabd6d3fc5c087ce032fb0de README
-SHA1 22574acffb701e362b50fea0face2f61c7224c20 TODO
-SHA1 c04c3acb9d1c7e211114dacf7b686ddc0d062831 inc/ExtUtils/AutoInstall.pm
-SHA1 06d883487127fa0026311904e7c4867e850c505c inc/Module/Install.pm
-SHA1 25c1920fccb1077b2e11ed0f18df50089d2beb5d inc/Module/Install/AutoInstall.pm
-SHA1 2771d5c5033e94c4789c66a0aad4e21c62985ce9 inc/Module/Install/Base.pm
-SHA1 b5e2d5fc07b92d042c97631d2b00f61f974fc164 inc/Module/Install/Can.pm
-SHA1 c3747aa4bd8faa530c974b78f729c67f15c6f928 inc/Module/Install/Fetch.pm
-SHA1 c6d2a330e2a8cb3a1db7bfc4236fea9a8aafe297 inc/Module/Install/Include.pm
-SHA1 d8bc0d6e0a82d2b7533bdd3de467593094cc8b2c inc/Module/Install/Makefile.pm
-SHA1 6fca1d05c6b9a8f10865de5be4fefb9bfa7a52e9 inc/Module/Install/Metadata.pm
-SHA1 2e6f5004ac895a26c41f043bf8fa5efb4f5b21c4 inc/Module/Install/Scripts.pm
-SHA1 6b051a6d3ed824df40343a7ff09b66282e1783c3 inc/Module/Install/Win32.pm
-SHA1 77f82ce7c623e05304ac9aae05bcd1a5558fadbb inc/Module/Install/WriteAll.pm
-SHA1 e2048afd26bd18a6177af810952e35ecb5585e17 inc/Test/Builder.pm
-SHA1 5f8ae8af3dde9b106b3c964c8984fb5fca98f1dc inc/Test/More.pm
-SHA1 b3ef4e65127906409e2c6c8f34cdca03aacf3530 lib/Module/Signature.pm
-SHA1 15590ad33de70d273fcc6a2b163da7870b65fce3 script/cpansign
+SHA1 3de4ca2bf4a3bdbfc3a8ed8077c9cce87a35b3fe README
+SHA1 1928fb2aeea34583be40feecc60c2d0f4dbb911a inc/Module/AutoInstall.pm
+SHA1 c8086e2f417e1e979ad159f65cb5fbc3a0252e1a inc/Module/Install.pm
+SHA1 eecffd8a3a2675292f0d0af96f2f1c4cfc066a2a inc/Module/Install/AutoInstall.pm
+SHA1 4ed81cf0a97ac5df87a4032435dee277d582f90c inc/Module/Install/Base.pm
+SHA1 8b6b20c1fadc6dcc4defd276af029ff06a31b5f3 inc/Module/Install/Can.pm
+SHA1 c78a2e772d17c54522e6f327587524b769c56577 inc/Module/Install/Fetch.pm
+SHA1 81bba4e527917d1ac06fc6fea676bc4a40ea25ad inc/Module/Install/Include.pm
+SHA1 c201df1e509f4f708754da171285cb523df3a73b inc/Module/Install/Makefile.pm
+SHA1 c62e34ab923a8fe263e32f2a8d7140562e257448 inc/Module/Install/Metadata.pm
+SHA1 17a1d6f233b4a97f36484780c61fd7886f73c3a8 inc/Module/Install/Scripts.pm
+SHA1 34299cd6be8088430ada9cd2ba5d1c4463add0b5 inc/Module/Install/Win32.pm
+SHA1 8e8ad58cbc7d5df7becd400ee2105d2b0301aa62 inc/Module/Install/WriteAll.pm
+SHA1 d1902fb469cb7152151d43935a65a6794b5a84a1 inc/Test/Builder.pm
+SHA1 4e768c8b073c735864f2edf348cd6a1680037205 inc/Test/Builder/Module.pm
+SHA1 e7af6efa2813de38c4d938cfe53104e6831c3f26 inc/Test/More.pm
+SHA1 be6c1b4fb05d8bcf382cbbf7d619cd4fe86e8c45 lib/Module/Signature.pm
+SHA1 0882c50213a28b7a30fc91fd58c19015f33348d0 script/cpansign
 SHA1 ad7d30f2b8e7f62006bd64a64759049af0cd97bb t/0-signature.t
 SHA1 307a744384e704d94031df73233f24174b843bc8 t/1-basic.t
 -----BEGIN PGP SIGNATURE-----
-Version: GnuPG v1.2.6 (FreeBSD)
+Version: GnuPG v1.4.2 (FreeBSD)
 
-iD8DBQFBwTWMtLPdNzw1AaARAuN0AKCBz2vZwBGTOUADRYIiYHhLv7ZrNwCgjNJL
-O2odqvSr2ODE/plPnTjG4YM=
-=J63o
+iD8DBQFD3u7rtLPdNzw1AaARAnnuAJ94vTkukjAs2i9SLymxOJsGffsSkQCgoU2e
+Jcq+iVH87ztw8g2P/buwLeo=
+=zgXW
 -----END PGP SIGNATURE-----

Deleted: packages/libmodule-signature-perl/trunk/TODO
===================================================================
--- packages/libmodule-signature-perl/trunk/TODO	2006-03-15 16:18:08 UTC (rev 2358)
+++ packages/libmodule-signature-perl/trunk/TODO	2006-03-15 16:26:45 UTC (rev 2359)
@@ -1,3 +0,0 @@
-
-- PKI.
-

Modified: packages/libmodule-signature-perl/trunk/debian/changelog
===================================================================
--- packages/libmodule-signature-perl/trunk/debian/changelog	2006-03-15 16:18:08 UTC (rev 2358)
+++ packages/libmodule-signature-perl/trunk/debian/changelog	2006-03-15 16:26:45 UTC (rev 2359)
@@ -1,3 +1,16 @@
+libmodule-signature-perl (0.53-1) unstable; urgency=low
+
+  * New upstream release, taking package for Perl Group 
+    (closes: #329595) (closes: #357075)
+  * debian/watch - added
+  * debian/control:
+   - Standards-Version: upgraded to 3.6.2
+   - Uploaders: added me
+   - Maintainer: set to Debian Perl Group <pkg-perl-maintainers at lists.alioth.debian.org>
+  * debian/rules - compat increased to 4
+  
+ -- Krzysztof Krzyzaniak (eloy) <eloy at debian.org>  Wed, 15 Mar 2006 17:18:22 +0100
+
 libmodule-signature-perl (0.44-3) unstable; urgency=low
 
   * Re-upload with full source, as the 0.44-1 upload was borked so the

Modified: packages/libmodule-signature-perl/trunk/debian/control
===================================================================
--- packages/libmodule-signature-perl/trunk/debian/control	2006-03-15 16:18:08 UTC (rev 2358)
+++ packages/libmodule-signature-perl/trunk/debian/control	2006-03-15 16:26:45 UTC (rev 2359)
@@ -3,8 +3,9 @@
 Priority: optional
 Build-Depends: debhelper (>= 3.0.5), libtest-simple-perl, libdigest-sha1-perl
 Build-Depends-Indep: perl (>= 5.8.0-7)
-Maintainer: Chip Salzenberg <chip at debian.org>
-Standards-Version: 3.5.1
+Maintainer: Debian Perl Group <pkg-perl-maintainers at lists.alioth.debian.org>
+Uploaders: Krzysztof Krzyzaniak (eloy) <eloy at debian.org>
+Standards-Version: 3.6.2
 
 Package: libmodule-signature-perl
 Architecture: all

Modified: packages/libmodule-signature-perl/trunk/debian/rules
===================================================================
--- packages/libmodule-signature-perl/trunk/debian/rules	2006-03-15 16:18:08 UTC (rev 2358)
+++ packages/libmodule-signature-perl/trunk/debian/rules	2006-03-15 16:26:45 UTC (rev 2359)
@@ -6,7 +6,7 @@
 
 # Uncomment this to turn on verbose mode.
 #export DH_VERBOSE=1
-export DH_COMPAT=3
+export DH_COMPAT=4
 
 PACKAGE=$(shell dh_listpackages)
 

Copied: packages/libmodule-signature-perl/trunk/inc/Module/AutoInstall.pm (from rev 2358, packages/libmodule-signature-perl/branches/upstream/current/inc/Module/AutoInstall.pm)

Modified: packages/libmodule-signature-perl/trunk/inc/Module/Install/AutoInstall.pm
===================================================================
--- packages/libmodule-signature-perl/trunk/inc/Module/Install/AutoInstall.pm	2006-03-15 16:18:08 UTC (rev 2358)
+++ packages/libmodule-signature-perl/trunk/inc/Module/Install/AutoInstall.pm	2006-03-15 16:26:45 UTC (rev 2359)
@@ -1,7 +1,9 @@
-#line 1 "inc/Module/Install/AutoInstall.pm - /usr/local/lib/perl5/site_perl/5.8.5/Module/Install/AutoInstall.pm"
+#line 1 "inc/Module/Install/AutoInstall.pm - /usr/local/lib/perl5/site_perl/5.8.8/Module/Install/AutoInstall.pm"
 package Module::Install::AutoInstall;
-use Module::Install::Base; @ISA = qw(Module::Install::Base);
 
+use Module::Install::Base;
+ at ISA = qw{Module::Install::Base};
+
 sub AutoInstall { $_[0] }
 
 sub run {
@@ -18,45 +20,35 @@
     my $self = shift;
     return if $self->{done}++;
 
-# ExtUtils::AutoInstall Bootstrap Code, version 7.
-AUTO:{my$p='ExtUtils::AutoInstall';my$v=0.49;$p->VERSION||0>=$v
-or+eval"use $p $v;1"or+do{my$e=$ENV{PERL_EXTUTILS_AUTOINSTALL};
-(!defined($e)||$e!~m/--(?:default|skip|testonly)/and-t STDIN or
-eval"use ExtUtils::MakeMaker;WriteMakefile(PREREQ_PM=>{'$p',$v}
-);1"and exit)and print"==> $p $v required. Install it from CP".
-"AN? [Y/n] "and<STDIN>!~/^n/i and print"*** Installing $p\n"and
-do{if (eval '$>' and lc(`sudo -V`) =~ /version/){system('sudo',
-$^X,"-MCPANPLUS","-e","CPANPLUS::install $p");eval"use $p $v;1"
-||system('sudo', $^X, "-MCPAN", "-e", "CPAN::install $p")}eval{
-require CPANPLUS;CPANPLUS::install$p};eval"use $p $v;1"or eval{
-require CPAN;CPAN::install$p};eval"use $p $v;1"||die"*** Please
-manually install $p $v from cpan.org first...\n"}}}
-
     # Flatten array of arrays into a single array
     my @core = map @$_, map @$_, grep ref,
                $self->build_requires, $self->requires;
 
-    while ( @core and @_ > 1 and $_[0] =~ /^-\w+$/ ) {
-        push @core, splice(@_, 0, 2);
-    }
+    my @config = @_;
 
-    ExtUtils::AutoInstall->import(
-        (@core ? (-core => \@core) : ()), @_, $self->features
+    # We'll need Module::AutoInstall
+    $self->include('Module::AutoInstall');
+    require Module::AutoInstall;
+
+    Module::AutoInstall->import(
+        (@config ? (-config => \@config) : ()),
+        (@core   ? (-core   => \@core)   : ()),
+        $self->features,
     );
 
-    $self->makemaker_args( ExtUtils::AutoInstall::_make_args() );
+    $self->makemaker_args( Module::AutoInstall::_make_args() );
 
     my $class = ref($self);
     $self->postamble(
         "# --- $class section:\n" .
-        ExtUtils::AutoInstall::postamble()
+        Module::AutoInstall::postamble()
     );
 }
 
 sub auto_install_now {
     my $self = shift;
-    $self->auto_install;
-    ExtUtils::AutoInstall::do_install();
+    $self->auto_install(@_);
+    Module::AutoInstall::do_install();
 }
 
 1;

Modified: packages/libmodule-signature-perl/trunk/inc/Module/Install/Base.pm
===================================================================
--- packages/libmodule-signature-perl/trunk/inc/Module/Install/Base.pm	2006-03-15 16:18:08 UTC (rev 2358)
+++ packages/libmodule-signature-perl/trunk/inc/Module/Install/Base.pm	2006-03-15 16:26:45 UTC (rev 2359)
@@ -1,8 +1,14 @@
-#line 1 "inc/Module/Install/Base.pm - /usr/local/lib/perl5/site_perl/5.8.5/Module/Install/Base.pm"
+#line 1 "inc/Module/Install/Base.pm - /usr/local/lib/perl5/site_perl/5.8.8/Module/Install/Base.pm"
 package Module::Install::Base;
 
-#line 28
+# Suspend handler for "redefined" warnings
+BEGIN {
+	my $w = $SIG{__WARN__};
+	$SIG{__WARN__} = sub { $w };
+}
 
+#line 36
+
 sub new {
     my ($class, %args) = @_;
 
@@ -15,27 +21,28 @@
     bless(\%args, $class);
 }
 
-#line 46
+#line 56
 
 sub AUTOLOAD {
     my $self = shift;
-    goto &{$self->_top->autoload};
+
+    local $@;
+    my $autoload = eval { $self->_top->autoload } or return;
+    goto &$autoload;
 }
 
-#line 57
+#line 72
 
 sub _top { $_[0]->{_top} }
 
-#line 68
+#line 85
 
 sub admin {
-    my $self = shift;
-    $self->_top->{admin} or Module::Install::Base::FakeAdmin->new;
+    $_[0]->_top->{admin} or Module::Install::Base::FakeAdmin->new;
 }
 
 sub is_admin {
-    my $self = shift;
-    $self->admin->VERSION;
+    $_[0]->admin->VERSION;
 }
 
 sub DESTROY {}
@@ -44,11 +51,16 @@
 
 my $Fake;
 sub new { $Fake ||= bless(\@_, $_[0]) }
+
 sub AUTOLOAD {}
+
 sub DESTROY {}
 
+# Restore warning handler
+BEGIN {
+	$SIG{__WARN__} = $SIG{__WARN__}->();
+}
+
 1;
 
-__END__
-
-#line 112
+#line 134

Modified: packages/libmodule-signature-perl/trunk/inc/Module/Install/Can.pm
===================================================================
--- packages/libmodule-signature-perl/trunk/inc/Module/Install/Can.pm	2006-03-15 16:18:08 UTC (rev 2358)
+++ packages/libmodule-signature-perl/trunk/inc/Module/Install/Can.pm	2006-03-15 16:26:45 UTC (rev 2359)
@@ -1,6 +1,9 @@
-#line 1 "inc/Module/Install/Can.pm - /usr/local/lib/perl5/site_perl/5.8.5/Module/Install/Can.pm"
+#line 1 "inc/Module/Install/Can.pm - /usr/local/lib/perl5/site_perl/5.8.8/Module/Install/Can.pm"
 package Module::Install::Can;
-use Module::Install::Base; @ISA = qw(Module::Install::Base);
+
+use Module::Install::Base;
+ at ISA = qw(Module::Install::Base);
+
 $VERSION = '0.01';
 
 use strict;
@@ -8,6 +11,20 @@
 use File::Spec ();
 use ExtUtils::MakeMaker ();
 
+# check if we can load some module
+sub can_use {
+    my ($self, $mod, $ver) = @_;
+    $mod =~ s{::|\\}{/}g;
+    $mod .= ".pm" unless $mod =~ /\.pm$/i;
+
+    my $pkg = $mod;
+    $pkg =~ s{/}{::}g;
+    $pkg =~ s{\.pm$}{}i;
+
+    local $@;
+    eval { require $mod; $pkg->VERSION($ver || 0); 1 };
+}
+
 # check if we can run some command
 sub can_run {
     my ($self, $cmd) = @_;
@@ -35,4 +52,21 @@
     return;
 }
 
+# Fix Cygwin bug on maybe_command();
+if ($^O eq 'cygwin') {
+    require ExtUtils::MM_Cygwin;
+    require ExtUtils::MM_Win32;
+    if ( ! defined(&ExtUtils::MM_Cygwin::maybe_command) ) {
+        *ExtUtils::MM_Cygwin::maybe_command = sub {
+            my ($self, $file) = @_;
+            if ($file =~ m{^/cygdrive/}i and ExtUtils::MM_Win32->can('maybe_command')) {
+                ExtUtils::MM_Win32->maybe_command($file);
+            }
+            else {
+                ExtUtils::MM_Unix->maybe_command($file);
+            }
+        }
+    }
+}
+
 1;

Modified: packages/libmodule-signature-perl/trunk/inc/Module/Install/Fetch.pm
===================================================================
--- packages/libmodule-signature-perl/trunk/inc/Module/Install/Fetch.pm	2006-03-15 16:18:08 UTC (rev 2358)
+++ packages/libmodule-signature-perl/trunk/inc/Module/Install/Fetch.pm	2006-03-15 16:26:45 UTC (rev 2359)
@@ -1,7 +1,9 @@
-#line 1 "inc/Module/Install/Fetch.pm - /usr/local/lib/perl5/site_perl/5.8.5/Module/Install/Fetch.pm"
+#line 1 "inc/Module/Install/Fetch.pm - /usr/local/lib/perl5/site_perl/5.8.8/Module/Install/Fetch.pm"
 package Module::Install::Fetch;
-use Module::Install::Base; @ISA = qw(Module::Install::Base);
 
+use Module::Install::Base;
+ at ISA = qw(Module::Install::Base);
+
 $VERSION = '0.01';
 
 sub get_file {
@@ -9,7 +11,7 @@
     my ($scheme, $host, $path, $file) = 
         $args{url} =~ m|^(\w+)://([^/]+)(.+)/(.+)| or return;
 
-    if ($scheme eq 'http' and !eval { require LWP::Simple; 1 }) {
+    if ( $scheme eq 'http' and ! eval { require LWP::Simple; 1 } ) {
         $args{url} = $args{ftp_url}
             or (warn("LWP support unavailable!\n"), return);
         ($scheme, $host, $path, $file) = 

Modified: packages/libmodule-signature-perl/trunk/inc/Module/Install/Include.pm
===================================================================
--- packages/libmodule-signature-perl/trunk/inc/Module/Install/Include.pm	2006-03-15 16:18:08 UTC (rev 2358)
+++ packages/libmodule-signature-perl/trunk/inc/Module/Install/Include.pm	2006-03-15 16:26:45 UTC (rev 2359)
@@ -1,10 +1,12 @@
-#line 1 "inc/Module/Install/Include.pm - /usr/local/lib/perl5/site_perl/5.8.5/Module/Install/Include.pm"
+#line 1 "inc/Module/Install/Include.pm - /usr/local/lib/perl5/site_perl/5.8.8/Module/Install/Include.pm"
 package Module::Install::Include;
-use Module::Install::Base; @ISA = qw(Module::Install::Base);
 
+use Module::Install::Base;
+ at ISA = qw(Module::Install::Base);
+
 sub include { +shift->admin->include(@_) };
 sub include_deps { +shift->admin->include_deps(@_) };
 sub auto_include { +shift->admin->auto_include(@_) };
 sub auto_include_deps { +shift->admin->auto_include_deps(@_) };
-
+sub auto_include_dependent_dists { +shift->admin->auto_include_dependent_dists(@_) }
 1;

Modified: packages/libmodule-signature-perl/trunk/inc/Module/Install/Makefile.pm
===================================================================
--- packages/libmodule-signature-perl/trunk/inc/Module/Install/Makefile.pm	2006-03-15 16:18:08 UTC (rev 2358)
+++ packages/libmodule-signature-perl/trunk/inc/Module/Install/Makefile.pm	2006-03-15 16:26:45 UTC (rev 2359)
@@ -1,7 +1,9 @@
-#line 1 "inc/Module/Install/Makefile.pm - /usr/local/lib/perl5/site_perl/5.8.5/Module/Install/Makefile.pm"
+#line 1 "inc/Module/Install/Makefile.pm - /usr/local/lib/perl5/site_perl/5.8.8/Module/Install/Makefile.pm"
 package Module::Install::Makefile;
-use Module::Install::Base; @ISA = qw(Module::Install::Base);
 
+use Module::Install::Base;
+ at ISA = qw(Module::Install::Base);
+
 $VERSION = '0.01';
 
 use strict 'vars';
@@ -23,6 +25,14 @@
     $args;
 }
 
+sub build_subdirs {
+    my $self = shift;
+    my $subdirs = $self->makemaker_args->{DIR} ||= [];
+    for my $subdir (@_) {
+        push @$subdirs, $subdir;
+    }
+}
+
 sub clean_files {
     my $self = shift;
     my $clean = $self->makemaker_args->{clean} ||= {};
@@ -54,15 +64,17 @@
     $args->{VERSION} = $self->version || $self->determine_VERSION($args);
     $args->{NAME} =~ s/-/::/g;
 
+    $args->{test} = {TESTS => $self->tests} if $self->tests;
+
     if ($] >= 5.005) {
-	$args->{ABSTRACT} = $self->abstract;
-	$args->{AUTHOR} = $self->author;
+        $args->{ABSTRACT} = $self->abstract;
+        $args->{AUTHOR} = $self->author;
     }
     if ( eval($ExtUtils::MakeMaker::VERSION) >= 6.10 ) {
         $args->{NO_META} = 1;
     }
     if ( eval($ExtUtils::MakeMaker::VERSION) > 6.17 ) {
-	$args->{SIGN} = 1 if $self->sign;
+        $args->{SIGN} = 1 if $self->sign;
     }
     delete $args->{SIGN} unless $self->is_admin;
 
@@ -72,10 +84,13 @@
                  ($self->build_requires, $self->requires) );
 
     # merge both kinds of requires into prereq_pm
-    my $dir = ($args->{DIR} ||= []);
+    my $subdirs = ($args->{DIR} ||= []);
     if ($self->bundles) {
-        push @$dir, map "$_->[1]", @{$self->bundles};
-        delete $prereq->{$_->[0]} for @{$self->bundles};
+        foreach my $bundle (@{ $self->bundles }) {
+            my ($file, $dir) = @$bundle;
+            push @$subdirs, $dir if -d $dir;
+            delete $prereq->{$file};
+        }
     }
 
     if (my $perl_version = $self->perl_version) {
@@ -106,6 +121,7 @@
     my $postamble = "# Postamble by $top_class $top_version\n" . 
                     ($self->postamble || '');
 
+    local *MAKEFILE;
     open MAKEFILE, '< Makefile' or die $!;
     my $makefile = do { local $/; <MAKEFILE> };
     close MAKEFILE;
@@ -140,4 +156,4 @@
 
 __END__
 
-#line 273
+#line 288

Modified: packages/libmodule-signature-perl/trunk/inc/Module/Install/Metadata.pm
===================================================================
--- packages/libmodule-signature-perl/trunk/inc/Module/Install/Metadata.pm	2006-03-15 16:18:08 UTC (rev 2358)
+++ packages/libmodule-signature-perl/trunk/inc/Module/Install/Metadata.pm	2006-03-15 16:26:45 UTC (rev 2359)
@@ -1,25 +1,31 @@
-#line 1 "inc/Module/Install/Metadata.pm - /usr/local/lib/perl5/site_perl/5.8.5/Module/Install/Metadata.pm"
+#line 1 "inc/Module/Install/Metadata.pm - /usr/local/lib/perl5/site_perl/5.8.8/Module/Install/Metadata.pm"
 package Module::Install::Metadata;
-use Module::Install::Base; @ISA = qw(Module::Install::Base);
 
-$VERSION = '0.04';
+use Module::Install::Base;
+ at ISA = qw{Module::Install::Base};
 
+$VERSION = '0.06';
+
 use strict 'vars';
-use vars qw($VERSION);
 
-sub Meta { shift }
+my @scalar_keys = qw{
+    name module_name abstract author version license
+    distribution_type perl_version tests
+};
 
-my @scalar_keys = qw(
-    name module_name version abstract author license
-    distribution_type sign perl_version
-);
-my @tuple_keys  = qw(build_requires requires recommends bundles);
+my @tuple_keys = qw{
+    build_requires requires recommends bundles
+};
 
+sub Meta            { shift        }
+sub Meta_ScalarKeys { @scalar_keys }
+sub Meta_TupleKeys  { @tuple_keys  }
+
 foreach my $key (@scalar_keys) {
     *$key = sub {
         my $self = shift;
-        return $self->{'values'}{$key} unless @_;
-        $self->{'values'}{$key} = shift;
+        return $self->{values}{$key} if defined wantarray and !@_;
+        $self->{values}{$key} = shift;
         return $self;
     };
 }
@@ -27,122 +33,152 @@
 foreach my $key (@tuple_keys) {
     *$key = sub {
         my $self = shift;
-        return $self->{'values'}{$key} unless @_;
+        return $self->{values}{$key} unless @_;
+
         my @rv;
         while (@_) {
-            my $module  = shift or last;
+            my $module = shift or last;
             my $version = shift || 0;
-            if ($module eq 'perl') {
+            if ( $module eq 'perl' ) {
                 $version =~ s{^(\d+)\.(\d+)\.(\d+)}
                              {$1 + $2/1_000 + $3/1_000_000}e;
                 $self->perl_version($version);
                 next;
             }
-            my $rv = [$module, $version];
-            push @{$self->{'values'}{$key}}, $rv;
+            my $rv = [ $module, $version ];
             push @rv, $rv;
         }
-        return @rv;
+        push @{ $self->{values}{$key} }, @rv;
+        @rv;
     };
 }
 
-sub features {
+sub sign {
     my $self = shift;
-    while (my ($name, $mods) = splice(@_, 0, 2)) {
-        my $count = 0;
-        push @{$self->{'values'}{'features'}}, ($name => [
-            map { (++$count % 2 and ref($_) and ($count += $#$_)) ? @$_ : $_ } @$mods
-        ] );
+    return $self->{'values'}{'sign'} if defined wantarray and !@_;
+    $self->{'values'}{'sign'} = ( @_ ? $_[0] : 1 );
+    return $self;
+}
+
+sub all_from {
+    my ( $self, $file ) = @_;
+
+    unless ( defined($file) ) {
+        my $name = $self->name
+            or die "all_from called with no args without setting name() first";
+        $file = join('/', 'lib', split(/-/, $name)) . '.pm';
+        $file =~ s{.*/}{} unless -e $file;
+        die "all_from: cannot find $file from $name" unless -e $file;
     }
-    return @{$self->{'values'}{'features'}};
+
+    $self->version_from($file)      unless $self->version;
+    $self->perl_version_from($file) unless $self->perl_version;
+
+    # The remaining probes read from POD sections; if the file
+    # has an accompanying .pod, use that instead
+    my $pod = $file;
+    if ( $pod =~ s/\.pm$/.pod/i and -e $pod ) {
+        $file = $pod;
+    }
+
+    $self->author_from($file)   unless $self->author;
+    $self->license_from($file)  unless $self->license;
+    $self->abstract_from($file) unless $self->abstract;
 }
 
-sub no_index {
-    my $self = shift;
-    my $type = shift;
-    push @{$self->{'values'}{'no_index'}{$type}}, @_ if $type;
-    return $self->{'values'}{'no_index'};
+sub provides {
+    my $self     = shift;
+    my $provides = ( $self->{values}{provides} ||= {} );
+    %$provides = (%$provides, @_) if @_;
+    return $provides;
 }
 
-sub _dump {
+sub auto_provides {
     my $self = shift;
-    my $package = ref($self->_top);
-    my $version = $self->_top->VERSION;
-    my %values = %{$self->{'values'}};
+    return $self unless $self->is_admin;
 
-    delete $values{sign};
-    if (my $perl_version = delete $values{perl_version}) {
-        # Always canonical to three-dot version 
-        $perl_version =~ s{^(\d+)\.(\d\d\d)(\d*)}{join('.', $1, int($2), int($3))}e
-            if $perl_version >= 5.006;
-        $values{requires} = [
-            [perl => $perl_version],
-            @{$values{requires}||[]},
-        ];
+    unless (-e 'MANIFEST') {
+        warn "Cannot deduce auto_provides without a MANIFEST, skipping\n";
+        return $self;
     }
 
-    warn "No license specified, setting license = 'unknown'\n"
-        unless $values{license};
+    # Avoid spurious warnings as we are not checking manifest here.
 
-    $values{license} ||= 'unknown';
-    $values{distribution_type} ||= 'module';
-    $values{name} ||= do {
-        my $name = $values{module_name};
-        $name =~ s/::/-/g;
-        $name;
-    } if $values{module_name};
+    local $SIG{__WARN__} = sub {1};
+    require ExtUtils::Manifest;
+    local *ExtUtils::Manifest::manicheck = sub { return };
 
-    if ($values{name} =~ /::/) {
-        my $name = $values{name};
-        $name =~ s/::/-/g;
-        die "Error in name(): '$values{name}' should be '$name'!\n";
-    }
+    require Module::Build;
+    my $build = Module::Build->new(
+        dist_name    => $self->{name},
+        dist_version => $self->{version},
+        license      => $self->{license},
+    );
+    $self->provides(%{ $build->find_dist_packages || {} });
+}
 
-    my $dump = '';
-    foreach my $key (@scalar_keys) {
-        $dump .= "$key: $values{$key}\n" if exists $values{$key};
-    }
-    foreach my $key (@tuple_keys) {
-        next unless exists $values{$key};
-        $dump .= "$key:\n";
-        foreach (@{$values{$key}}) {
-            $dump .= "  $_->[0]: $_->[1]\n";
-        }
-    }
+sub feature {
+    my $self     = shift;
+    my $name     = shift;
+    my $features = ( $self->{values}{features} ||= [] );
 
-    if (my $no_index = $values{no_index}) {
-        push @{$no_index->{'directory'}}, 'inc';
-        require YAML;
-        local $YAML::UseHeader = 0;
-        $dump .= YAML::Dump({ no_index => $no_index});
+    my $mods;
+
+    if ( @_ == 1 and ref( $_[0] ) ) {
+        # The user used ->feature like ->features by passing in the second
+        # argument as a reference.  Accomodate for that.
+        $mods = $_[0];
     }
     else {
-        $dump .= << "META";
-no_index:
-  directory:
-    - inc
-META
+        $mods = \@_;
     }
-    
-    $dump .= "generated_by: $package version $version\n";
-    return $dump;
+
+    my $count = 0;
+    push @$features, (
+        $name => [
+            map {
+                ref($_) ? ( ref($_) eq 'HASH' ) ? %$_
+                                                : @$_
+                        : $_
+            } @$mods
+        ]
+    );
+
+    return @$features;
 }
 
+sub features {
+    my $self = shift;
+    while ( my ( $name, $mods ) = splice( @_, 0, 2 ) ) {
+        $self->feature( $name, @$mods );
+    }
+    return @{ $self->{values}{features} };
+}
+
+sub no_index {
+    my $self = shift;
+    my $type = shift;
+    push @{ $self->{values}{no_index}{$type} }, @_ if $type;
+    return $self->{values}{no_index};
+}
+
 sub read {
     my $self = shift;
     $self->include_deps( 'YAML', 0 );
+
     require YAML;
-    my $data = YAML::LoadFile( 'META.yml' );
+    my $data = YAML::LoadFile('META.yml');
+
     # Call methods explicitly in case user has already set some values.
-    while ( my ($key, $value) = each %$data ) {
-        next unless $self->can( $key );
-        if (ref $value eq 'HASH') {
-            while (my ($module, $version) = each %$value) {
-                $self->$key( $module => $version );
+    while ( my ( $key, $value ) = each %$data ) {
+        next unless $self->can($key);
+        if ( ref $value eq 'HASH' ) {
+            while ( my ( $module, $version ) = each %$value ) {
+                $self->can($key)->($self, $module => $version );
             }
         }
         else {
-            $self->$key( $value );
+            $self->can($key)->($self, $value);
         }
     }
     return $self;
@@ -151,37 +187,113 @@
 sub write {
     my $self = shift;
     return $self unless $self->is_admin;
-
-    META_NOT_OURS: {
-        local *FH;
-        if (open FH, "META.yml") {
-            while (<FH>) {
-                last META_NOT_OURS if /^generated_by: Module::Install\b/;
-            }
-            return $self if -s FH;
-        }
-    }
-
-    warn "Writing META.yml\n";
-    open META, "> META.yml" or warn "Cannot write to META.yml: $!";
-    print META $self->_dump;
-    close META;
+    $self->admin->write_meta;
     return $self;
 }
 
 sub version_from {
-    my ($self, $version_from) = @_;
+    my ( $self, $file ) = @_;
     require ExtUtils::MM_Unix;
-    $self->version(ExtUtils::MM_Unix->parse_version($version_from));
+    $self->version( ExtUtils::MM_Unix->parse_version($file) );
 }
 
 sub abstract_from {
-    my ($self, $abstract_from) = @_;
+    my ( $self, $file ) = @_;
     require ExtUtils::MM_Unix;
     $self->abstract(
-        bless( { DISTNAME => $self->name }, 'ExtUtils::MM_Unix')
-            ->parse_abstract($abstract_from)
-    );
+        bless(
+            { DISTNAME => $self->name },
+            'ExtUtils::MM_Unix'
+        )->parse_abstract($file)
+     );
 }
 
+sub _slurp {
+    my ( $self, $file ) = @_;
+
+    local *FH;
+    open FH, "< $file" or die "Cannot open $file.pod: $!";
+    do { local $/; <FH> };
+}
+
+sub perl_version_from {
+    my ( $self, $file ) = @_;
+
+    if (
+        $self->_slurp($file) =~ m/
+        ^
+        use \s*
+        v?
+        ([\d\.]+)
+        \s* ;
+    /ixms
+      )
+    {
+        $self->perl_version($1);
+    }
+    else {
+        warn "Cannot determine perl version info from $file\n";
+        return;
+    }
+}
+
+sub author_from {
+    my ( $self, $file ) = @_;
+    my $content = $self->_slurp($file);
+    if ($content =~ m/
+        =head \d \s+ (?:authors?)\b \s*
+        ([^\n]*)
+        |
+        =head \d \s+ (?:licen[cs]e|licensing|copyright|legal)\b \s*
+        .*? copyright .*? \d\d\d[\d.]+ \s* (?:\bby\b)? \s*
+        ([^\n]*)
+    /ixms) {
+        my $author = $1 || $2;
+        $author =~ s{E<lt>}{<}g;
+        $author =~ s{E<gt>}{>}g;
+        $self->author($author); 
+    }
+    else {
+        warn "Cannot determine author info from $file\n";
+    }
+}
+
+sub license_from {
+    my ( $self, $file ) = @_;
+
+    if (
+        $self->_slurp($file) =~ m/
+        =head \d \s+
+        (?:licen[cs]e|licensing|copyright|legal)\b
+        (.*?)
+        (=head\\d.*|=cut.*|)
+        \z
+    /ixms
+      )
+    {
+        my $license_text = $1;
+        my @phrases      = (
+            'under the same (?:terms|license) as perl itself' => 'perl',
+            'GNU public license'                              => 'gpl',
+            'GNU lesser public license'                       => 'gpl',
+            'BSD license'                                     => 'bsd',
+            'Artistic license'                                => 'artistic',
+            'GPL'                                             => 'gpl',
+            'LGPL'                                            => 'lgpl',
+            'BSD'                                             => 'bsd',
+            'Artistic'                                        => 'artistic',
+        );
+        while ( my ( $pattern, $license ) = splice( @phrases, 0, 2 ) ) {
+            $pattern =~ s{\s+}{\\s+}g;
+            if ( $license_text =~ /\b$pattern\b/i ) {
+                $self->license($license);
+                return 1;
+            }
+        }
+    }
+
+    warn "Cannot determine license info from $file\n";
+    return 'unknown';
+}
+
 1;

Modified: packages/libmodule-signature-perl/trunk/inc/Module/Install/Scripts.pm
===================================================================
--- packages/libmodule-signature-perl/trunk/inc/Module/Install/Scripts.pm	2006-03-15 16:18:08 UTC (rev 2358)
+++ packages/libmodule-signature-perl/trunk/inc/Module/Install/Scripts.pm	2006-03-15 16:26:45 UTC (rev 2359)
@@ -1,7 +1,11 @@
-#line 1 "inc/Module/Install/Scripts.pm - /usr/local/lib/perl5/site_perl/5.8.5/Module/Install/Scripts.pm"
+#line 1 "inc/Module/Install/Scripts.pm - /usr/local/lib/perl5/site_perl/5.8.8/Module/Install/Scripts.pm"
 package Module::Install::Scripts;
-use Module::Install::Base; @ISA = qw(Module::Install::Base);
+
+use Module::Install::Base;
+ at ISA = qw(Module::Install::Base);
+
 $VERSION = '0.02';
+
 use strict;
 use File::Basename ();
 

Modified: packages/libmodule-signature-perl/trunk/inc/Module/Install/Win32.pm
===================================================================
--- packages/libmodule-signature-perl/trunk/inc/Module/Install/Win32.pm	2006-03-15 16:18:08 UTC (rev 2358)
+++ packages/libmodule-signature-perl/trunk/inc/Module/Install/Win32.pm	2006-03-15 16:26:45 UTC (rev 2359)
@@ -1,7 +1,9 @@
-#line 1 "inc/Module/Install/Win32.pm - /usr/local/lib/perl5/site_perl/5.8.5/Module/Install/Win32.pm"
+#line 1 "inc/Module/Install/Win32.pm - /usr/local/lib/perl5/site_perl/5.8.8/Module/Install/Win32.pm"
 package Module::Install::Win32;
-use Module::Install::Base; @ISA = qw(Module::Install::Base);
 
+use Module::Install::Base;
+ at ISA = qw(Module::Install::Base);
+
 $VERSION = '0.02';
 
 use strict;

Modified: packages/libmodule-signature-perl/trunk/inc/Module/Install/WriteAll.pm
===================================================================
--- packages/libmodule-signature-perl/trunk/inc/Module/Install/WriteAll.pm	2006-03-15 16:18:08 UTC (rev 2358)
+++ packages/libmodule-signature-perl/trunk/inc/Module/Install/WriteAll.pm	2006-03-15 16:26:45 UTC (rev 2359)
@@ -1,13 +1,15 @@
-#line 1 "inc/Module/Install/WriteAll.pm - /usr/local/lib/perl5/site_perl/5.8.5/Module/Install/WriteAll.pm"
+#line 1 "inc/Module/Install/WriteAll.pm - /usr/local/lib/perl5/site_perl/5.8.8/Module/Install/WriteAll.pm"
 package Module::Install::WriteAll;
-use Module::Install::Base; @ISA = qw(Module::Install::Base);
 
+use Module::Install::Base;
+ at ISA = qw(Module::Install::Base);
+
 sub WriteAll {
     my $self = shift;
     my %args = (
-        meta => 1,
-        sign => 0,
-        inline => 0,
+        meta        => 1,
+        sign        => 0,
+        inline      => 0,
         check_nmake => 1,
         @_
     );
@@ -17,10 +19,10 @@
     $self->admin->WriteAll(%args) if $self->is_admin;
 
     if ($0 =~ /Build.PL$/i) {
-	$self->Build->write;
+        $self->Build->write;
     }
     else {
-	$self->check_nmake if $args{check_nmake};
+        $self->check_nmake if $args{check_nmake};
         $self->makemaker_args( PL_FILES => {} )
             unless $self->makemaker_args->{'PL_FILES'};
 

Modified: packages/libmodule-signature-perl/trunk/inc/Module/Install.pm
===================================================================
--- packages/libmodule-signature-perl/trunk/inc/Module/Install.pm	2006-03-15 16:18:08 UTC (rev 2358)
+++ packages/libmodule-signature-perl/trunk/inc/Module/Install.pm	2006-03-15 16:26:45 UTC (rev 2359)
@@ -1,8 +1,17 @@
-#line 1 "inc/Module/Install.pm - /usr/local/lib/perl5/site_perl/5.8.5/Module/Install.pm"
+#line 1 "/home/autrijus/work/Module-Signature-0.50/inc/Module/Install.pm - /usr/local/lib/perl5/site_perl/5.8.8/Module/Install.pm"
 package Module::Install;
-$VERSION = '0.36';
 
-die << "." unless $INC{join('/', inc => split(/::/, __PACKAGE__)).'.pm'};
+use 5.004;
+use strict 'vars';
+use vars qw{$VERSION};
+BEGIN {
+    # Don't forget to update Module::Install::Admin too!
+    $VERSION = '0.55';
+}
+
+# inc::Module::Install must be loaded first
+unless ( $INC{join('/', inc => split(/::/, __PACKAGE__)).'.pm'} ) {
+    die <<"END_DIE";
 Please invoke ${\__PACKAGE__} with:
 
     use inc::${\__PACKAGE__};
@@ -11,23 +20,40 @@
 
     use ${\__PACKAGE__};
 
-.
+END_DIE
+}
 
-use strict 'vars';
-use Cwd ();
+use Cwd        ();
+use FindBin;
 use File::Find ();
 use File::Path ();
 
- at inc::Module::Install::ISA = 'Module::Install';
 *inc::Module::Install::VERSION = *VERSION;
+ at inc::Module::Install::ISA     = 'Module::Install';
 
-#line 129
+sub autoload {
+    my $self   = shift;
+    my $caller = $self->_caller;
+    my $cwd    = Cwd::cwd();
+    my $sym    = "$caller\::AUTOLOAD";
 
+    $sym->{$cwd} = sub {
+        my $pwd = Cwd::cwd();
+        if ( my $code = $sym->{$pwd} ) {
+            # delegate back to parent dirs
+            goto &$code unless $cwd eq $pwd;
+        }
+        $$sym =~ /([^:]+)$/ or die "Cannot autoload $caller - $sym";
+        unshift @_, ($self, $1);
+        goto &{$self->can('call')} unless uc($1) eq $1;
+    };
+}
+
 sub import {
     my $class = shift;
-    my $self = $class->new(@_);
+    my $self  = $class->new(@_);
 
-    if (not -f $self->{file}) {
+    unless ( -f $self->{file} ) {
         require "$self->{path}/$self->{dispatch}.pm";
         File::Path::mkpath("$self->{prefix}/$self->{author}");
         $self->{admin} = 
@@ -37,44 +63,64 @@
         goto &{"$self->{name}::import"};
     }
 
-    *{caller(0) . "::AUTOLOAD"} = $self->autoload;
+    *{$self->_caller . "::AUTOLOAD"} = $self->autoload;
+    $self->preload;
 
     # Unregister loader and worker packages so subdirs can use them again
     delete $INC{"$self->{file}"};
     delete $INC{"$self->{path}.pm"};
 }
 
-#line 156
+sub preload {
+    my ($self) = @_;
 
-sub autoload {
-    my $self = shift;
-    my $caller = caller;
+        unless ( $self->{extentions} ) {
+                $self->load_extensions(
+                        "$self->{prefix}/$self->{path}", $self
+                        );
+        }
 
-    my $cwd = Cwd::cwd();
-    my $sym = "$caller\::AUTOLOAD";
+    my @exts = @{$self->{extensions}};
+    unless ( @exts ) {
+        my $admin = $self->{admin};
+        @exts = $admin->load_all_extensions;
+    }
 
-    $sym->{$cwd} = sub {
-        my $pwd = Cwd::cwd();
-        if (my $code = $sym->{$pwd}) {
-            goto &$code unless $cwd eq $pwd; # delegate back to parent dirs
+    my %seen_method;
+    foreach my $obj ( @exts ) {
+        while (my ($method, $glob) = each %{ref($obj) . '::'}) {
+            next unless defined *{$glob}{CODE};
+            next if $method =~ /^_/;
+            next if $method eq uc($method);
+            $seen_method{$method}++;
         }
-        $$sym =~ /([^:]+)$/ or die "Cannot autoload $caller";
-        unshift @_, ($self, $1);
-        goto &{$self->can('call')} unless uc($1) eq $1;
-    };
+    }
+
+    my $caller = $self->_caller;
+    foreach my $name (sort keys %seen_method) {
+        *{"${caller}::$name"} = sub {
+            ${"${caller}::AUTOLOAD"} = "${caller}::$name";
+            goto &{"${caller}::AUTOLOAD"};
+        };
+    }
 }
 
-#line 181
-
 sub new {
     my ($class, %args) = @_;
 
+    # ignore the prefix on extension modules built from top level.
+    my $base_path = Cwd::abs_path($FindBin::Bin);
+    unless ( Cwd::abs_path(Cwd::cwd()) eq $base_path ) {
+        delete $args{prefix};
+    }
+
     return $args{_self} if $args{_self};
 
     $args{dispatch} ||= 'Admin';
     $args{prefix}   ||= 'inc';
     $args{author}   ||= '.author';
     $args{bundle}   ||= 'inc/BUNDLES';
+    $args{base}     ||= $base_path;
 
     $class =~ s/^\Q$args{prefix}\E:://;
     $args{name}     ||= $class;
@@ -84,24 +130,20 @@
         $args{path}  = $args{name};
         $args{path}  =~ s!::!/!g;
     }
-    $args{file}     ||= "$args{prefix}/$args{path}.pm";
+    $args{file}     ||= "$args{base}/$args{prefix}/$args{path}.pm";
 
     bless(\%args, $class);
 }
 
-#line 210
-
 sub call {
     my $self   = shift;
     my $method = shift;
-    my $obj = $self->load($method) or return;
+    my $obj    = $self->load($method) or return;
 
     unshift @_, $obj;
     goto &{$obj->can($method)};
 }
 
-#line 225
-
 sub load {
     my ($self, $method) = @_;
 
@@ -113,10 +155,10 @@
         return $obj if $obj->can($method);
     }
 
-    my $admin = $self->{admin} or die << "END";
+    my $admin = $self->{admin} or die <<"END_DIE";
 The '$method' method does not exist in the '$self->{prefix}' path!
 Please remove the '$self->{prefix}' directory and run $0 again to load it.
-END
+END_DIE
 
     my $obj = $admin->load($method, 1);
     push @{$self->{extensions}}, $obj;
@@ -124,8 +166,6 @@
     $obj;
 }
 
-#line 255
-
 sub load_extensions {
     my ($self, $path, $top_obj) = @_;
 
@@ -137,33 +177,46 @@
         my ($file, $pkg) = @{$rv};
         next if $self->{pathnames}{$pkg};
 
-        eval { require $file; 1 } or (warn($@), next);
+        local $@;
+        my $new = eval { require $file; $pkg->can('new') };
+        unless ( $new ) {
+            warn $@ if $@;
+            next;
+        }
         $self->{pathnames}{$pkg} = delete $INC{$file};
-        push @{$self->{extensions}}, $pkg->new( _top => $top_obj );
+        push @{$self->{extensions}}, &{$new}($pkg, _top => $top_obj );
     }
+
+    $self->{extensions} ||= [];
 }
 
-#line 279
-
 sub find_extensions {
     my ($self, $path) = @_;
+
     my @found;
-
-    File::Find::find(sub {
+    File::Find::find( sub {
         my $file = $File::Find::name;
         return unless $file =~ m!^\Q$path\E/(.+)\.pm\Z!is;
         return if $1 eq $self->{dispatch};
 
         $file = "$self->{path}/$1.pm";
         my $pkg = "$self->{name}::$1"; $pkg =~ s!/!::!g;
-        push @found, [$file, $pkg];
-    }, $path) if -d $path;
+        push @found, [ $file, $pkg ];
+    }, $path ) if -d $path;
 
     @found;
 }
 
-1;
+sub _caller {
+    my $depth  = 0;
+    my $caller = caller($depth);
 
-__END__
+    while ($caller eq __PACKAGE__) {
+        $depth++;
+        $caller = caller($depth);
+    }
 
-#line 617
+    $caller;
+}
+
+1;

Copied: packages/libmodule-signature-perl/trunk/inc/Test/Builder (from rev 2358, packages/libmodule-signature-perl/branches/upstream/current/inc/Test/Builder)

Modified: packages/libmodule-signature-perl/trunk/inc/Test/Builder.pm
===================================================================
--- packages/libmodule-signature-perl/trunk/inc/Test/Builder.pm	2006-03-15 16:18:08 UTC (rev 2358)
+++ packages/libmodule-signature-perl/trunk/inc/Test/Builder.pm	2006-03-15 16:26:45 UTC (rev 2359)
@@ -1,4 +1,4 @@
-#line 1 "inc/Test/Builder.pm - /usr/local/lib/perl5/site_perl/5.8.6/Test/Builder.pm"
+#line 1 "inc/Test/Builder.pm - /usr/local/lib/perl5/site_perl/5.8.7/Test/Builder.pm"
 package Test::Builder;
 
 use 5.004;
@@ -8,64 +8,139 @@
 $^C ||= 0;
 
 use strict;
-use vars qw($VERSION $CLASS);
-$VERSION = '0.17';
-$CLASS = __PACKAGE__;
+use vars qw($VERSION);
+$VERSION = '0.32';
+$VERSION = eval $VERSION;    # make the alpha version come out as a number
 
-my $IsVMS = $^O eq 'VMS';
-
 # Make Test::Builder thread-safe for ithreads.
 BEGIN {
     use Config;
-    if( $] >= 5.008 && $Config{useithreads} ) {
-        require threads;
+    # Load threads::shared when threads are turned on
+    if( $] >= 5.008 && $Config{useithreads} && $INC{'threads.pm'}) {
         require threads::shared;
-        threads::shared->import;
+
+        # Hack around YET ANOTHER threads::shared bug.  It would 
+        # occassionally forget the contents of the variable when sharing it.
+        # So we first copy the data, then share, then put our copy back.
+        *share = sub (\[$@%]) {
+            my $type = ref $_[0];
+            my $data;
+
+            if( $type eq 'HASH' ) {
+                %$data = %{$_[0]};
+            }
+            elsif( $type eq 'ARRAY' ) {
+                @$data = @{$_[0]};
+            }
+            elsif( $type eq 'SCALAR' ) {
+                $$data = ${$_[0]};
+            }
+            else {
+                die "Unknown type: ".$type;
+            }
+
+            $_[0] = &threads::shared::share($_[0]);
+
+            if( $type eq 'HASH' ) {
+                %{$_[0]} = %$data;
+            }
+            elsif( $type eq 'ARRAY' ) {
+                @{$_[0]} = @$data;
+            }
+            elsif( $type eq 'SCALAR' ) {
+                ${$_[0]} = $$data;
+            }
+            else {
+                die "Unknown type: ".$type;
+            }
+
+            return $_[0];
+        };
     }
+    # 5.8.0's threads::shared is busted when threads are off.
+    # We emulate it here.
     else {
-        *share = sub { 0 };
+        *share = sub { return $_[0] };
         *lock  = sub { 0 };
     }
 }
 
-use vars qw($Level);
-my($Test_Died) = 0;
-my($Have_Plan) = 0;
-my $Original_Pid = $$;
-my $Curr_Test = 0;      share($Curr_Test);
-my @Test_Results = ();  share(@Test_Results);
-my @Test_Details = ();  share(@Test_Details);
 
+#line 127
 
-#line 94
-
-my $Test;
+my $Test = Test::Builder->new;
 sub new {
     my($class) = shift;
-    $Test ||= bless ['Move along, nothing to see here'], $class;
+    $Test ||= $class->create;
     return $Test;
 }
 
-#line 120
 
-my $Exported_To;
+#line 149
+
+sub create {
+    my $class = shift;
+
+    my $self = bless {}, $class;
+    $self->reset;
+
+    return $self;
+}
+
+#line 168
+
+use vars qw($Level);
+
+sub reset {
+    my ($self) = @_;
+
+    # We leave this a global because it has to be localized and localizing
+    # hash keys is just asking for pain.  Also, it was documented.
+    $Level = 1;
+
+    $self->{Test_Died}    = 0;
+    $self->{Have_Plan}    = 0;
+    $self->{No_Plan}      = 0;
+    $self->{Original_Pid} = $$;
+
+    share($self->{Curr_Test});
+    $self->{Curr_Test}    = 0;
+    $self->{Test_Results} = &share([]);
+
+    $self->{Exported_To}    = undef;
+    $self->{Expected_Tests} = 0;
+
+    $self->{Skip_All}   = 0;
+
+    $self->{Use_Nums}   = 1;
+
+    $self->{No_Header}  = 0;
+    $self->{No_Ending}  = 0;
+
+    $self->_dup_stdhandles unless $^C;
+
+    return undef;
+}
+
+#line 220
+
 sub exported_to {
     my($self, $pack) = @_;
 
     if( defined $pack ) {
-        $Exported_To = $pack;
+        $self->{Exported_To} = $pack;
     }
-    return $Exported_To;
+    return $self->{Exported_To};
 }
 
-#line 143
+#line 242
 
 sub plan {
     my($self, $cmd, $arg) = @_;
 
     return unless $cmd;
 
-    if( $Have_Plan ) {
+    if( $self->{Have_Plan} ) {
         die sprintf "You tried to plan twice!  Second plan at %s line %d\n",
           ($self->caller)[1,2];
     }
@@ -97,42 +172,47 @@
     return 1;
 }
 
-#line 190
+#line 289
 
-my $Expected_Tests = 0;
 sub expected_tests {
-    my($self, $max) = @_;
+    my $self = shift;
+    my($max) = @_;
 
-    if( defined $max ) {
-        $Expected_Tests = $max;
-        $Have_Plan      = 1;
+    if( @_ ) {
+        die "Number of tests must be a postive integer.  You gave it '$max'.\n"
+          unless $max =~ /^\+?\d+$/ and $max > 0;
 
+        $self->{Expected_Tests} = $max;
+        $self->{Have_Plan}      = 1;
+
         $self->_print("1..$max\n") unless $self->no_header;
     }
-    return $Expected_Tests;
+    return $self->{Expected_Tests};
 }
 
 
-#line 212
+#line 314
 
-my($No_Plan) = 0;
 sub no_plan {
-    $No_Plan    = 1;
-    $Have_Plan  = 1;
+    my $self = shift;
+
+    $self->{No_Plan}   = 1;
+    $self->{Have_Plan} = 1;
 }
 
-#line 226
+#line 329
 
 sub has_plan {
-	return($Expected_Tests) if $Expected_Tests;
-	return('no_plan') if $No_Plan;
-	return(undef);
+    my $self = shift;
+
+    return($self->{Expected_Tests}) if $self->{Expected_Tests};
+    return('no_plan') if $self->{No_Plan};
+    return(undef);
 };
 
 
-#line 242
+#line 347
 
-my $Skip_All = 0;
 sub skip_all {
     my($self, $reason) = @_;
 
@@ -140,13 +220,13 @@
     $out .= " # Skip $reason" if $reason;
     $out .= "\n";
 
-    $Skip_All = 1;
+    $self->{Skip_All} = 1;
 
     $self->_print($out) unless $self->no_header;
     exit(0);
 }
 
-#line 276
+#line 380
 
 sub ok {
     my($self, $test, $name) = @_;
@@ -155,14 +235,17 @@
     # store, so we turn it into a boolean.
     $test = $test ? 1 : 0;
 
-    unless( $Have_Plan ) {
+    unless( $self->{Have_Plan} ) {
         require Carp;
         Carp::croak("You tried to run a test without a plan!  Gotta have a plan.");
     }
 
-    lock $Curr_Test;
-    $Curr_Test++;
+    lock $self->{Curr_Test};
+    $self->{Curr_Test}++;
 
+    # In case $name is a string overloaded object, force it to stringify.
+    $self->_unoverload_str(\$name);
+
     $self->diag(<<ERR) if defined $name and $name =~ /^[\d\s]+$/;
     You named your test '$name'.  You shouldn't use numbers for your test names.
     Very confusing.
@@ -171,10 +254,10 @@
     my($pack, $file, $line) = $self->caller;
 
     my $todo = $self->todo($pack);
+    $self->_unoverload_str(\$todo);
 
     my $out;
-    my $result = {};
-    share($result);
+    my $result = &share({});
 
     unless( $test ) {
         $out .= "not ";
@@ -185,7 +268,7 @@
     }
 
     $out .= "ok";
-    $out .= " $Curr_Test" if $self->use_numbers;
+    $out .= " $self->{Curr_Test}" if $self->use_numbers;
 
     if( defined $name ) {
         $name =~ s|#|\\#|g;     # # in a name can confuse Test::Harness.
@@ -197,9 +280,8 @@
     }
 
     if( $todo ) {
-        my $what_todo = $todo;
-        $out   .= " # TODO $what_todo";
-        $result->{reason} = $what_todo;
+        $out   .= " # TODO $todo";
+        $result->{reason} = $todo;
         $result->{type}   = 'todo';
     }
     else {
@@ -207,25 +289,92 @@
         $result->{type}   = '';
     }
 
-    $Test_Results[$Curr_Test-1] = $result;
+    $self->{Test_Results}[$self->{Curr_Test}-1] = $result;
     $out .= "\n";
 
     $self->_print($out);
 
     unless( $test ) {
         my $msg = $todo ? "Failed (TODO)" : "Failed";
-        $self->diag("    $msg test ($file at line $line)\n");
+        $self->_print_diag("\n") if $ENV{HARNESS_ACTIVE};
+
+	if( defined $name ) {
+	    $self->diag(qq[  $msg test '$name'\n]);
+	    $self->diag(qq[  in $file at line $line.\n]);
+	}
+	else {
+	    $self->diag(qq[  $msg test in $file at line $line.\n]);
+	}
     } 
 
     return $test ? 1 : 0;
 }
 
-#line 364
 
+sub _unoverload {
+    my $self  = shift;
+    my $type  = shift;
+
+    local($@,$!);
+
+    eval { require overload } || return;
+
+    foreach my $thing (@_) {
+        eval { 
+            if( _is_object($$thing) ) {
+                if( my $string_meth = overload::Method($$thing, $type) ) {
+                    $$thing = $$thing->$string_meth();
+                }
+            }
+        };
+    }
+}
+
+
+sub _is_object {
+    my $thing = shift;
+
+    return eval { ref $thing && $thing->isa('UNIVERSAL') } ? 1 : 0;
+}
+
+
+sub _unoverload_str {
+    my $self = shift;
+
+    $self->_unoverload(q[""], @_);
+}    
+
+sub _unoverload_num {
+    my $self = shift;
+
+    $self->_unoverload('0+', @_);
+
+    for my $val (@_) {
+        next unless $self->_is_dualvar($$val);
+        $$val = $$val+0;
+    }
+}
+
+
+# This is a hack to detect a dualvar such as $!
+sub _is_dualvar {
+    my($self, $val) = @_;
+
+    local $^W = 0;
+    my $numval = $val+0;
+    return 1 if $numval != 0 and $numval ne $val;
+}
+
+
+
+#line 535
+
 sub is_eq {
     my($self, $got, $expect, $name) = @_;
     local $Level = $Level + 1;
 
+    $self->_unoverload_str(\$got, \$expect);
+
     if( !defined $got || !defined $expect ) {
         # undef only matches undef and nothing else
         my $test = !defined $got && !defined $expect;
@@ -242,6 +391,8 @@
     my($self, $got, $expect, $name) = @_;
     local $Level = $Level + 1;
 
+    $self->_unoverload_num(\$got, \$expect);
+
     if( !defined $got || !defined $expect ) {
         # undef only matches undef and nothing else
         my $test = !defined $got && !defined $expect;
@@ -265,7 +416,7 @@
             }
             else {
                 # force numeric context
-                $$val = $$val+0;
+                $self->_unoverload_num($val);
             }
         }
         else {
@@ -280,7 +431,7 @@
 
 }    
 
-#line 438
+#line 613
 
 sub isnt_eq {
     my($self, $got, $dont_expect, $name) = @_;
@@ -291,7 +442,7 @@
         my $test = defined $got || defined $dont_expect;
 
         $self->ok($test, $name);
-        $self->_cmp_diag('ne', $got, $dont_expect) unless $test;
+        $self->_cmp_diag($got, 'ne', $dont_expect) unless $test;
         return $test;
     }
 
@@ -307,7 +458,7 @@
         my $test = defined $got || defined $dont_expect;
 
         $self->ok($test, $name);
-        $self->_cmp_diag('!=', $got, $dont_expect) unless $test;
+        $self->_cmp_diag($got, '!=', $dont_expect) unless $test;
         return $test;
     }
 
@@ -315,7 +466,7 @@
 }
 
 
-#line 490
+#line 665
 
 sub like {
     my($self, $this, $regex, $name) = @_;
@@ -331,27 +482,35 @@
     $self->_regex_ok($this, $regex, '!~', $name);
 }
 
-#line 531
+#line 706
 
 
 sub maybe_regex {
-	my ($self, $regex) = @_;
+    my ($self, $regex) = @_;
     my $usable_regex = undef;
+
+    return $usable_regex unless defined $regex;
+
+    my($re, $opts);
+
+    # Check for qr/foo/
     if( ref $regex eq 'Regexp' ) {
         $usable_regex = $regex;
     }
-    # Check if it looks like '/foo/'
-    elsif( my($re, $opts) = $regex =~ m{^ /(.*)/ (\w*) $ }sx ) {
+    # Check for '/foo/' or 'm,foo,'
+    elsif( ($re, $opts)        = $regex =~ m{^ /(.*)/ (\w*) $ }sx           or
+           (undef, $re, $opts) = $regex =~ m,^ m([^\w\s]) (.+) \1 (\w*) $,sx
+         )
+    {
         $usable_regex = length $opts ? "(?$opts)$re" : $re;
-    };
-    return($usable_regex)
+    }
+
+    return $usable_regex;
 };
 
 sub _regex_ok {
     my($self, $this, $regex, $cmp, $name) = @_;
 
-    local $Level = $Level + 1;
-
     my $ok = 0;
     my $usable_regex = $self->maybe_regex($regex);
     unless (defined $usable_regex) {
@@ -361,9 +520,19 @@
     }
 
     {
-        local $^W = 0;
-        my $test = $this =~ /$usable_regex/ ? 1 : 0;
+        my $test;
+        my $code = $self->_caller_context;
+
+        local($@, $!);
+
+        # Yes, it has to look like this or 5.4.5 won't see the #line directive.
+        # Don't ask me, man, I just work here.
+        $test = eval "
+$code" . q{$test = $this =~ /$usable_regex/ ? 1 : 0};
+
         $test = !$test if $cmp eq '!~';
+
+        local $Level = $Level + 1;
         $ok = $self->ok( $test, $name );
     }
 
@@ -380,17 +549,35 @@
     return $ok;
 }
 
-#line 588
+#line 781
 
+
+my %numeric_cmps = map { ($_, 1) } 
+                       ("<",  "<=", ">",  ">=", "==", "!=", "<=>");
+
 sub cmp_ok {
     my($self, $got, $type, $expect, $name) = @_;
 
+    # Treat overloaded objects as numbers if we're asked to do a
+    # numeric comparison.
+    my $unoverload = $numeric_cmps{$type} ? '_unoverload_num'
+                                          : '_unoverload_str';
+
+    $self->$unoverload(\$got, \$expect);
+
+
     my $test;
     {
-        local $^W = 0;
         local($@,$!);   # don't interfere with $@
                         # eval() sometimes resets $!
-        $test = eval "\$got $type \$expect";
+
+        my $code = $self->_caller_context;
+
+        # Yes, it has to look like this or 5.4.5 won't see the #line directive.
+        # Don't ask me, man, I just work here.
+        $test = eval "
+$code" . "\$got $type \$expect;";
+
     }
     local $Level = $Level + 1;
     my $ok = $self->ok($test, $name);
@@ -418,87 +605,102 @@
 DIAGNOSTIC
 }
 
-#line 636
 
-sub BAILOUT {
+sub _caller_context {
+    my $self = shift;
+
+    my($pack, $file, $line) = $self->caller(1);
+
+    my $code = '';
+    $code .= "#line $line $file\n" if defined $file and defined $line;
+
+    return $code;
+}
+
+
+#line 860
+
+sub BAIL_OUT {
     my($self, $reason) = @_;
 
+    $self->{Bailed_Out} = 1;
     $self->_print("Bail out!  $reason");
     exit 255;
 }
 
-#line 652
+#line 873
 
+*BAILOUT = \&BAIL_OUT;
+
+
+#line 885
+
 sub skip {
     my($self, $why) = @_;
     $why ||= '';
+    $self->_unoverload_str(\$why);
 
-    unless( $Have_Plan ) {
+    unless( $self->{Have_Plan} ) {
         require Carp;
         Carp::croak("You tried to run tests without a plan!  Gotta have a plan.");
     }
 
-    lock($Curr_Test);
-    $Curr_Test++;
+    lock($self->{Curr_Test});
+    $self->{Curr_Test}++;
 
-    my %result;
-    share(%result);
-    %result = (
+    $self->{Test_Results}[$self->{Curr_Test}-1] = &share({
         'ok'      => 1,
         actual_ok => 1,
         name      => '',
         type      => 'skip',
         reason    => $why,
-    );
-    $Test_Results[$Curr_Test-1] = \%result;
+    });
 
     my $out = "ok";
-    $out   .= " $Curr_Test" if $self->use_numbers;
-    $out   .= " # skip $why\n";
+    $out   .= " $self->{Curr_Test}" if $self->use_numbers;
+    $out   .= " # skip";
+    $out   .= " $why"       if length $why;
+    $out   .= "\n";
 
-    $Test->_print($out);
+    $self->_print($out);
 
     return 1;
 }
 
 
-#line 697
+#line 930
 
 sub todo_skip {
     my($self, $why) = @_;
     $why ||= '';
 
-    unless( $Have_Plan ) {
+    unless( $self->{Have_Plan} ) {
         require Carp;
         Carp::croak("You tried to run tests without a plan!  Gotta have a plan.");
     }
 
-    lock($Curr_Test);
-    $Curr_Test++;
+    lock($self->{Curr_Test});
+    $self->{Curr_Test}++;
 
-    my %result;
-    share(%result);
-    %result = (
+    $self->{Test_Results}[$self->{Curr_Test}-1] = &share({
         'ok'      => 1,
         actual_ok => 0,
         name      => '',
         type      => 'todo_skip',
         reason    => $why,
-    );
+    });
 
-    $Test_Results[$Curr_Test-1] = \%result;
-
     my $out = "not ok";
-    $out   .= " $Curr_Test" if $self->use_numbers;
+    $out   .= " $self->{Curr_Test}" if $self->use_numbers;
     $out   .= " # TODO & SKIP $why\n";
 
-    $Test->_print($out);
+    $self->_print($out);
 
     return 1;
 }
 
 
-#line 772
+#line 1001
 
 sub level {
     my($self, $level) = @_;
@@ -509,69 +711,66 @@
     return $Level;
 }
 
-$CLASS->level(1);
 
+#line 1036
 
-#line 809
-
-my $Use_Nums = 1;
 sub use_numbers {
     my($self, $use_nums) = @_;
 
     if( defined $use_nums ) {
-        $Use_Nums = $use_nums;
+        $self->{Use_Nums} = $use_nums;
     }
-    return $Use_Nums;
+    return $self->{Use_Nums};
 }
 
-#line 836
 
-my($No_Header, $No_Ending) = (0,0);
-sub no_header {
-    my($self, $no_header) = @_;
+#line 1070
 
-    if( defined $no_header ) {
-        $No_Header = $no_header;
-    }
-    return $No_Header;
-}
+foreach my $attribute (qw(No_Header No_Ending No_Diag)) {
+    my $method = lc $attribute;
 
-sub no_ending {
-    my($self, $no_ending) = @_;
+    my $code = sub {
+        my($self, $no) = @_;
 
-    if( defined $no_ending ) {
-        $No_Ending = $no_ending;
-    }
-    return $No_Ending;
+        if( defined $no ) {
+            $self->{$attribute} = $no;
+        }
+        return $self->{$attribute};
+    };
+
+    no strict 'refs';
+    *{__PACKAGE__.'::'.$method} = $code;
 }
 
 
-#line 891
+#line 1124
 
 sub diag {
     my($self, @msgs) = @_;
+
+    return if $self->no_diag;
     return unless @msgs;
 
     # Prevent printing headers when compiling (i.e. -c)
     return if $^C;
 
+    # Smash args together like print does.
+    # Convert undef to 'undef' so its readable.
+    my $msg = join '', map { defined($_) ? $_ : 'undef' } @msgs;
+
     # Escape each line with a #.
-    foreach (@msgs) {
-        $_ = 'undef' unless defined;
-        s/^/# /gms;
-    }
+    $msg =~ s/^/# /gm;
 
-    push @msgs, "\n" unless $msgs[-1] =~ /\n\Z/;
+    # Stick a newline on the end if it needs it.
+    $msg .= "\n" unless $msg =~ /\n\Z/;
 
     local $Level = $Level + 1;
-    my $fh = $self->todo ? $self->todo_output : $self->failure_output;
-    local($\, $", $,) = (undef, ' ', '');
-    print $fh @msgs;
+    $self->_print_diag($msg);
 
     return 0;
 }
 
-#line 926
+#line 1161
 
 sub _print {
     my($self, @msgs) = @_;
@@ -580,73 +779,107 @@
     # tests are deparsed with B::Deparse
     return if $^C;
 
+    my $msg = join '', @msgs;
+
     local($\, $", $,) = (undef, ' ', '');
     my $fh = $self->output;
 
     # Escape each line after the first with a # so we don't
     # confuse Test::Harness.
-    foreach (@msgs) {
-        s/\n(.)/\n# $1/sg;
-    }
+    $msg =~ s/\n(.)/\n# $1/sg;
 
-    push @msgs, "\n" unless $msgs[-1] =~ /\n\Z/;
+    # Stick a newline on the end if it needs it.
+    $msg .= "\n" unless $msg =~ /\n\Z/;
 
-    print $fh @msgs;
+    print $fh $msg;
 }
 
 
-#line 977
+#line 1192
 
-my($Out_FH, $Fail_FH, $Todo_FH);
+sub _print_diag {
+    my $self = shift;
+
+    local($\, $", $,) = (undef, ' ', '');
+    my $fh = $self->todo ? $self->todo_output : $self->failure_output;
+    print $fh @_;
+}    
+
+#line 1229
+
 sub output {
     my($self, $fh) = @_;
 
     if( defined $fh ) {
-        $Out_FH = _new_fh($fh);
+        $self->{Out_FH} = _new_fh($fh);
     }
-    return $Out_FH;
+    return $self->{Out_FH};
 }
 
 sub failure_output {
     my($self, $fh) = @_;
 
     if( defined $fh ) {
-        $Fail_FH = _new_fh($fh);
+        $self->{Fail_FH} = _new_fh($fh);
     }
-    return $Fail_FH;
+    return $self->{Fail_FH};
 }
 
 sub todo_output {
     my($self, $fh) = @_;
 
     if( defined $fh ) {
-        $Todo_FH = _new_fh($fh);
+        $self->{Todo_FH} = _new_fh($fh);
     }
-    return $Todo_FH;
+    return $self->{Todo_FH};
 }
 
+
 sub _new_fh {
     my($file_or_fh) = shift;
 
     my $fh;
-    unless( UNIVERSAL::isa($file_or_fh, 'GLOB') ) {
+    if( _is_fh($file_or_fh) ) {
+        $fh = $file_or_fh;
+    }
+    else {
         $fh = do { local *FH };
         open $fh, ">$file_or_fh" or 
             die "Can't open test output log $file_or_fh: $!";
+	_autoflush($fh);
     }
-    else {
-        $fh = $file_or_fh;
-    }
 
     return $fh;
 }
 
-unless( $^C ) {
-    # We dup STDOUT and STDERR so people can change them in their
-    # test suites while still getting normal test output.
-    open(TESTOUT, ">&STDOUT") or die "Can't dup STDOUT:  $!";
-    open(TESTERR, ">&STDERR") or die "Can't dup STDERR:  $!";
 
+sub _is_fh {
+    my $maybe_fh = shift;
+    return 0 unless defined $maybe_fh;
+
+    return 1 if ref \$maybe_fh eq 'GLOB'; # its a glob
+
+    return UNIVERSAL::isa($maybe_fh,               'GLOB')       ||
+           UNIVERSAL::isa($maybe_fh,               'IO::Handle') ||
+
+           # 5.5.4's tied() and can() doesn't like getting undef
+           UNIVERSAL::can((tied($maybe_fh) || ''), 'TIEHANDLE');
+}
+
+
+sub _autoflush {
+    my($fh) = shift;
+    my $old_fh = select $fh;
+    $| = 1;
+    select $old_fh;
+}
+
+
+sub _dup_stdhandles {
+    my $self = shift;
+
+    $self->_open_testhandles;
+
     # Set everything to unbuffered else plain prints to STDOUT will
     # come out in the wrong order from our own prints.
     _autoflush(\*TESTOUT);
@@ -654,78 +887,89 @@
     _autoflush(\*TESTERR);
     _autoflush(\*STDERR);
 
-    $CLASS->output(\*TESTOUT);
-    $CLASS->failure_output(\*TESTERR);
-    $CLASS->todo_output(\*TESTOUT);
+    $self->output(\*TESTOUT);
+    $self->failure_output(\*TESTERR);
+    $self->todo_output(\*TESTOUT);
 }
 
-sub _autoflush {
-    my($fh) = shift;
-    my $old_fh = select $fh;
-    $| = 1;
-    select $old_fh;
+
+my $Opened_Testhandles = 0;
+sub _open_testhandles {
+    return if $Opened_Testhandles;
+    # We dup STDOUT and STDERR so people can change them in their
+    # test suites while still getting normal test output.
+    open(TESTOUT, ">&STDOUT") or die "Can't dup STDOUT:  $!";
+    open(TESTERR, ">&STDERR") or die "Can't dup STDERR:  $!";
+    $Opened_Testhandles = 1;
 }
 
 
-#line 1065
+#line 1347
 
 sub current_test {
     my($self, $num) = @_;
 
-    lock($Curr_Test);
+    lock($self->{Curr_Test});
     if( defined $num ) {
-        unless( $Have_Plan ) {
+        unless( $self->{Have_Plan} ) {
             require Carp;
             Carp::croak("Can't change the current test number without a plan!");
         }
 
-        $Curr_Test = $num;
-        if( $num > @Test_Results ) {
-            my $start = @Test_Results ? $#Test_Results + 1 : 0;
+        $self->{Curr_Test} = $num;
+
+        # If the test counter is being pushed forward fill in the details.
+        my $test_results = $self->{Test_Results};
+        if( $num > @$test_results ) {
+            my $start = @$test_results ? @$test_results : 0;
             for ($start..$num-1) {
-                my %result;
-                share(%result);
-                %result = ( ok        => 1, 
-                            actual_ok => undef, 
-                            reason    => 'incrementing test number', 
-                            type      => 'unknown', 
-                            name      => undef 
-                          );
-                $Test_Results[$_] = \%result;
+                $test_results->[$_] = &share({
+                    'ok'      => 1, 
+                    actual_ok => undef, 
+                    reason    => 'incrementing test number', 
+                    type      => 'unknown', 
+                    name      => undef 
+                });
             }
         }
+        # If backward, wipe history.  Its their funeral.
+        elsif( $num < @$test_results ) {
+            $#{$test_results} = $num - 1;
+        }
     }
-    return $Curr_Test;
+    return $self->{Curr_Test};
 }
 
 
-#line 1106
+#line 1393
 
 sub summary {
     my($self) = shift;
 
-    return map { $_->{'ok'} } @Test_Results;
+    return map { $_->{'ok'} } @{ $self->{Test_Results} };
 }
 
-#line 1161
+#line 1448
 
 sub details {
-    return @Test_Results;
+    my $self = shift;
+    return @{ $self->{Test_Results} };
 }
 
-#line 1185
+#line 1473
 
 sub todo {
     my($self, $pack) = @_;
 
-    $pack = $pack || $self->exported_to || $self->caller(1);
+    $pack = $pack || $self->exported_to || $self->caller($Level);
+    return 0 unless $pack;
 
     no strict 'refs';
     return defined ${$pack.'::TODO'} ? ${$pack.'::TODO'}
                                      : 0;
 }
 
-#line 1205
+#line 1494
 
 sub caller {
     my($self, $height) = @_;
@@ -735,20 +979,22 @@
     return wantarray ? @caller : $caller[0];
 }
 
-#line 1217
+#line 1506
 
-#line 1231
+#line 1520
 
 #'#
 sub _sanity_check {
-    _whoa($Curr_Test < 0,  'Says here you ran a negative number of tests!');
-    _whoa(!$Have_Plan and $Curr_Test, 
+    my $self = shift;
+
+    _whoa($self->{Curr_Test} < 0,  'Says here you ran a negative number of tests!');
+    _whoa(!$self->{Have_Plan} and $self->{Curr_Test}, 
           'Somehow your tests ran without a plan!');
-    _whoa($Curr_Test != @Test_Results,
+    _whoa($self->{Curr_Test} != @{ $self->{Test_Results} },
           'Somehow you got a different number of results than tests ran!');
 }
 
-#line 1250
+#line 1541
 
 sub _whoa {
     my($check, $desc) = @_;
@@ -760,7 +1006,7 @@
     }
 }
 
-#line 1271
+#line 1562
 
 sub _my_exit {
     $? = $_[0];
@@ -769,7 +1015,7 @@
 }
 
 
-#line 1284
+#line 1575
 
 $SIG{__DIE__} = sub {
     # We don't want to muck with death in an eval, but $^S isn't
@@ -780,77 +1026,104 @@
     for( my $stack = 1;  my $sub = (CORE::caller($stack))[3];  $stack++ ) {
         $in_eval = 1 if $sub =~ /^\(eval\)/;
     }
-    $Test_Died = 1 unless $in_eval;
+    $Test->{Test_Died} = 1 unless $in_eval;
 };
 
 sub _ending {
     my $self = shift;
 
-    _sanity_check();
+    $self->_sanity_check();
 
     # Don't bother with an ending if this is a forked copy.  Only the parent
     # should do the ending.
-    do{ _my_exit($?) && return } if $Original_Pid != $$;
+    # Exit if plan() was never called.  This is so "require Test::Simple" 
+    # doesn't puke.
+    # Don't do an ending if we bailed out.
+    if( ($self->{Original_Pid} != $$) 			or
+	(!$self->{Have_Plan} && !$self->{Test_Died}) 	or
+	$self->{Bailed_Out}
+      )
+    {
+	_my_exit($?);
+	return;
+    }
 
-    # Bailout if plan() was never called.  This is so
-    # "require Test::Simple" doesn't puke.
-    do{ _my_exit(0) && return } if !$Have_Plan && !$Test_Died;
-
     # Figure out if we passed or failed and print helpful messages.
-    if( @Test_Results ) {
+    my $test_results = $self->{Test_Results};
+    if( @$test_results ) {
         # The plan?  We have no plan.
-        if( $No_Plan ) {
-            $self->_print("1..$Curr_Test\n") unless $self->no_header;
-            $Expected_Tests = $Curr_Test;
+        if( $self->{No_Plan} ) {
+            $self->_print("1..$self->{Curr_Test}\n") unless $self->no_header;
+            $self->{Expected_Tests} = $self->{Curr_Test};
         }
 
-        # 5.8.0 threads bug.  Shared arrays will not be auto-extended 
-        # by a slice.  Worse, we have to fill in every entry else
-        # we'll get an "Invalid value for shared scalar" error
-        for my $idx ($#Test_Results..$Expected_Tests-1) {
-            my %empty_result = ();
-            share(%empty_result);
-            $Test_Results[$idx] = \%empty_result
-              unless defined $Test_Results[$idx];
+        # Auto-extended arrays and elements which aren't explicitly
+        # filled in with a shared reference will puke under 5.8.0
+        # ithreads.  So we have to fill them in by hand. :(
+        my $empty_result = &share({});
+        for my $idx ( 0..$self->{Expected_Tests}-1 ) {
+            $test_results->[$idx] = $empty_result
+              unless defined $test_results->[$idx];
         }
 
-        my $num_failed = grep !$_->{'ok'}, @Test_Results[0..$Expected_Tests-1];
-        $num_failed += abs($Expected_Tests - @Test_Results);
+        my $num_failed = grep !$_->{'ok'}, 
+                              @{$test_results}[0..$self->{Curr_Test}-1];
 
-        if( $Curr_Test < $Expected_Tests ) {
+        my $num_extra = $self->{Curr_Test} - $self->{Expected_Tests};
+
+        if( $num_extra < 0 ) {
+            my $s = $self->{Expected_Tests} == 1 ? '' : 's';
             $self->diag(<<"FAIL");
-Looks like you planned $Expected_Tests tests but only ran $Curr_Test.
+Looks like you planned $self->{Expected_Tests} test$s but only ran $self->{Curr_Test}.
 FAIL
         }
-        elsif( $Curr_Test > $Expected_Tests ) {
-            my $num_extra = $Curr_Test - $Expected_Tests;
+        elsif( $num_extra > 0 ) {
+            my $s = $self->{Expected_Tests} == 1 ? '' : 's';
             $self->diag(<<"FAIL");
-Looks like you planned $Expected_Tests tests but ran $num_extra extra.
+Looks like you planned $self->{Expected_Tests} test$s but ran $num_extra extra.
 FAIL
         }
-        elsif ( $num_failed ) {
+
+        if ( $num_failed ) {
+            my $num_tests = $self->{Curr_Test};
+            my $s = $num_failed == 1 ? '' : 's';
+
+            my $qualifier = $num_extra == 0 ? '' : ' run';
+
             $self->diag(<<"FAIL");
-Looks like you failed $num_failed tests of $Expected_Tests.
+Looks like you failed $num_failed test$s of $num_tests$qualifier.
 FAIL
         }
 
-        if( $Test_Died ) {
+        if( $self->{Test_Died} ) {
             $self->diag(<<"FAIL");
-Looks like your test died just after $Curr_Test.
+Looks like your test died just after $self->{Curr_Test}.
 FAIL
 
             _my_exit( 255 ) && return;
         }
 
-        _my_exit( $num_failed <= 254 ? $num_failed : 254  ) && return;
+        my $exit_code;
+        if( $num_failed ) {
+            $exit_code = $num_failed <= 254 ? $num_failed : 254;
+        }
+        elsif( $num_extra != 0 ) {
+            $exit_code = 255;
+        }
+        else {
+            $exit_code = 0;
+        }
+
+        _my_exit( $exit_code ) && return;
     }
-    elsif ( $Skip_All ) {
+    elsif ( $self->{Skip_All} ) {
         _my_exit( 0 ) && return;
     }
-    elsif ( $Test_Died ) {
+    elsif ( $self->{Test_Died} ) {
         $self->diag(<<'FAIL');
 Looks like your test died before it could output anything.
 FAIL
+        _my_exit( 255 ) && return;
     }
     else {
         $self->diag("No tests run!\n");
@@ -862,6 +1135,6 @@
     $Test->_ending if defined $Test and !$Test->no_ending;
 }
 
-#line 1407
+#line 1747
 
 1;

Modified: packages/libmodule-signature-perl/trunk/inc/Test/More.pm
===================================================================
--- packages/libmodule-signature-perl/trunk/inc/Test/More.pm	2006-03-15 16:18:08 UTC (rev 2358)
+++ packages/libmodule-signature-perl/trunk/inc/Test/More.pm	2006-03-15 16:26:45 UTC (rev 2359)
@@ -1,10 +1,9 @@
-#line 1 "inc/Test/More.pm - /usr/local/lib/perl5/site_perl/5.8.6/Test/More.pm"
+#line 1 "inc/Test/More.pm - /usr/local/lib/perl5/site_perl/5.8.7/Test/More.pm"
 package Test::More;
 
 use 5.004;
 
 use strict;
-use Test::Builder;
 
 
 # Can't use Carp because it might cause use_ok() to accidentally succeed
@@ -17,10 +16,12 @@
 
 
 
-require Exporter;
 use vars qw($VERSION @ISA @EXPORT %EXPORT_TAGS $TODO);
-$VERSION = '0.47';
- at ISA    = qw(Exporter);
+$VERSION = '0.62';
+$VERSION = eval $VERSION;    # make the alpha version come out as a number
+
+use Test::Builder::Module;
+ at ISA    = qw(Test::Builder::Module);
 @EXPORT = qw(ok use_ok require_ok
              is isnt like unlike is_deeply
              cmp_ok
@@ -31,101 +32,107 @@
              plan
              can_ok  isa_ok
              diag
+	     BAIL_OUT
             );
 
-my $Test = Test::Builder->new;
 
+#line 157
 
-# 5.004's Exporter doesn't have export_to_level.
-sub _export_to_level
-{
-      my $pkg = shift;
-      my $level = shift;
-      (undef) = shift;                  # redundant arg
-      my $callpkg = caller($level);
-      $pkg->export($callpkg, @_);
+sub plan {
+    my $tb = Test::More->builder;
+
+    $tb->plan(@_);
 }
 
 
-#line 172
+# This implements "use Test::More 'no_diag'" but the behavior is
+# deprecated.
+sub import_extra {
+    my $class = shift;
+    my $list  = shift;
 
-sub plan {
-    my(@plan) = @_;
+    my @other = ();
+    my $idx = 0;
+    while( $idx <= $#{$list} ) {
+        my $item = $list->[$idx];
 
-    my $caller = caller;
+        if( defined $item and $item eq 'no_diag' ) {
+            $class->builder->no_diag(1);
+        }
+        else {
+            push @other, $item;
+        }
 
-    $Test->exported_to($caller);
-
-    my @imports = ();
-    foreach my $idx (0..$#plan) {
-        if( $plan[$idx] eq 'import' ) {
-            my($tag, $imports) = splice @plan, $idx, 2;
-            @imports = @$imports;
-            last;
-        }
+        $idx++;
     }
 
-    $Test->plan(@plan);
-
-    __PACKAGE__->_export_to_level(1, __PACKAGE__, @imports);
+    @$list = @other;
 }
 
-sub import {
-    my($class) = shift;
-    goto &plan;
-}
 
+#line 257
 
-#line 266
-
 sub ok ($;$) {
     my($test, $name) = @_;
-    $Test->ok($test, $name);
+    my $tb = Test::More->builder;
+
+    $tb->ok($test, $name);
 }
 
-#line 330
+#line 324
 
 sub is ($$;$) {
-    $Test->is_eq(@_);
+    my $tb = Test::More->builder;
+
+    $tb->is_eq(@_);
 }
 
 sub isnt ($$;$) {
-    $Test->isnt_eq(@_);
+    my $tb = Test::More->builder;
+
+    $tb->isnt_eq(@_);
 }
 
 *isn't = \&isnt;
 
 
-#line 371
+#line 369
 
 sub like ($$;$) {
-    $Test->like(@_);
+    my $tb = Test::More->builder;
+
+    $tb->like(@_);
 }
 
 
 #line 385
 
-sub unlike {
-    $Test->unlike(@_);
+sub unlike ($$;$) {
+    my $tb = Test::More->builder;
+
+    $tb->unlike(@_);
 }
 
 
-#line 423
+#line 425
 
 sub cmp_ok($$$;$) {
-    $Test->cmp_ok(@_);
+    my $tb = Test::More->builder;
+
+    $tb->cmp_ok(@_);
 }
 
 
-#line 457
+#line 461
 
 sub can_ok ($@) {
     my($proto, @methods) = @_;
     my $class = ref $proto || $proto;
+    my $tb = Test::More->builder;
 
     unless( @methods ) {
-        my $ok = $Test->ok( 0, "$class->can(...)" );
-        $Test->diag('    can_ok() called with no methods');
+        my $ok = $tb->ok( 0, "$class->can(...)" );
+        $tb->diag('    can_ok() called with no methods');
         return $ok;
     }
 
@@ -140,17 +147,18 @@
     $name = @methods == 1 ? "$class->can('$methods[0]')" 
                           : "$class->can(...)";
     
-    my $ok = $Test->ok( !@nok, $name );
+    my $ok = $tb->ok( !@nok, $name );
 
-    $Test->diag(map "    $class->can('$_') failed\n", @nok);
+    $tb->diag(map "    $class->can('$_') failed\n", @nok);
 
     return $ok;
 }
 
-#line 514
+#line 519
 
 sub isa_ok ($$;$) {
     my($object, $class, $obj_name) = @_;
+    my $tb = Test::More->builder;
 
     my $diag;
     $obj_name = 'The object' unless defined $obj_name;
@@ -190,54 +198,62 @@
 
     my $ok;
     if( $diag ) {
-        $ok = $Test->ok( 0, $name );
-        $Test->diag("    $diag\n");
+        $ok = $tb->ok( 0, $name );
+        $tb->diag("    $diag\n");
     }
     else {
-        $ok = $Test->ok( 1, $name );
+        $ok = $tb->ok( 1, $name );
     }
 
     return $ok;
 }
 
 
-#line 583
+#line 589
 
 sub pass (;$) {
-    $Test->ok(1, @_);
+    my $tb = Test::More->builder;
+    $tb->ok(1, @_);
 }
 
 sub fail (;$) {
-    $Test->ok(0, @_);
+    my $tb = Test::More->builder;
+    $tb->ok(0, @_);
 }
 
-#line 627
+#line 650
 
-sub diag {
-    $Test->diag(@_);
-}
-
-
-#line 677
-
 sub use_ok ($;@) {
     my($module, @imports) = @_;
     @imports = () unless @imports;
+    my $tb = Test::More->builder;
 
-    my $pack = caller;
+    my($pack,$filename,$line) = caller;
 
     local($@,$!);   # eval sometimes interferes with $!
-    eval <<USE;
+
+    if( @imports == 1 and $imports[0] =~ /^\d+(?:\.\d+)?$/ ) {
+        # probably a version check.  Perl needs to see the bare number
+        # for it to work with non-Exporter based modules.
+        eval <<USE;
 package $pack;
-require $module;
-'$module'->import(\@imports);
+use $module $imports[0];
 USE
+    }
+    else {
+        eval <<USE;
+package $pack;
+use $module \@imports;
+USE
+    }
 
-    my $ok = $Test->ok( !$@, "use $module;" );
+    my $ok = $tb->ok( !$@, "use $module;" );
 
     unless( $ok ) {
         chomp $@;
-        $Test->diag(<<DIAGNOSTIC);
+        $@ =~ s{^BEGIN failed--compilation aborted at .*$}
+                {BEGIN failed--compilation aborted at $filename line $line.}m;
+        $tb->diag(<<DIAGNOSTIC);
     Tried to use '$module'.
     Error:  $@
 DIAGNOSTIC
@@ -247,24 +263,29 @@
     return $ok;
 }
 
-#line 712
+#line 699
 
 sub require_ok ($) {
     my($module) = shift;
+    my $tb = Test::More->builder;
 
     my $pack = caller;
 
+    # Try to deterine if we've been given a module name or file.
+    # Module names must be barewords, files not.
+    $module = qq['$module'] unless _is_module_name($module);
+
     local($!, $@); # eval sometimes interferes with $!
     eval <<REQUIRE;
 package $pack;
 require $module;
 REQUIRE
 
-    my $ok = $Test->ok( !$@, "require $module;" );
+    my $ok = $tb->ok( !$@, "require $module;" );
 
     unless( $ok ) {
         chomp $@;
-        $Test->diag(<<DIAGNOSTIC);
+        $tb->diag(<<DIAGNOSTIC);
     Tried to require '$module'.
     Error:  $@
 DIAGNOSTIC
@@ -274,67 +295,57 @@
     return $ok;
 }
 
-#line 796
 
-#'#
-sub skip {
-    my($why, $how_many) = @_;
+sub _is_module_name {
+    my $module = shift;
 
-    unless( defined $how_many ) {
-        # $how_many can only be avoided when no_plan is in use.
-        _carp "skip() needs to know \$how_many tests are in the block"
-          unless $Test::Builder::No_Plan;
-        $how_many = 1;
-    }
-
-    for( 1..$how_many ) {
-        $Test->skip($why);
-    }
-
-    local $^W = 0;
-    last SKIP;
+    # Module names start with a letter.
+    # End with an alphanumeric.
+    # The rest is an alphanumeric or ::
+    $module =~ s/\b::\b//g;
+    $module =~ /^[a-zA-Z]\w*$/;
 }
 
+#line 775
 
-#line 874
+use vars qw(@Data_Stack %Refs_Seen);
+my $DNE = bless [], 'Does::Not::Exist';
+sub is_deeply {
+    my $tb = Test::More->builder;
 
-sub todo_skip {
-    my($why, $how_many) = @_;
+    unless( @_ == 2 or @_ == 3 ) {
+        my $msg = <<WARNING;
+is_deeply() takes two or three args, you gave %d.
+This usually means you passed an array or hash instead 
+of a reference to it
+WARNING
+        chop $msg;   # clip off newline so carp() will put in line/file
 
-    unless( defined $how_many ) {
-        # $how_many can only be avoided when no_plan is in use.
-        _carp "todo_skip() needs to know \$how_many tests are in the block"
-          unless $Test::Builder::No_Plan;
-        $how_many = 1;
-    }
+        _carp sprintf $msg, scalar @_;
 
-    for( 1..$how_many ) {
-        $Test->todo_skip($why);
+	return $tb->ok(0);
     }
 
-    local $^W = 0;
-    last TODO;
-}
+    my($this, $that, $name) = @_;
 
-#line 933
+    $tb->_unoverload_str(\$that, \$this);
 
-use vars qw(@Data_Stack);
-my $DNE = bless [], 'Does::Not::Exist';
-sub is_deeply {
-    my($this, $that, $name) = @_;
-
     my $ok;
-    if( !ref $this || !ref $that ) {
-        $ok = $Test->is_eq($this, $that, $name);
+    if( !ref $this and !ref $that ) {  		# neither is a reference
+        $ok = $tb->is_eq($this, $that, $name);
     }
-    else {
+    elsif( !ref $this xor !ref $that ) {  	# one's a reference, one isn't
+        $ok = $tb->ok(0, $name);
+	$tb->diag( _format_stack({ vals => [ $this, $that ] }) );
+    }
+    else {			       		# both references
         local @Data_Stack = ();
         if( _deep_check($this, $that) ) {
-            $ok = $Test->ok(1, $name);
+            $ok = $tb->ok(1, $name);
         }
         else {
-            $ok = $Test->ok(0, $name);
-            $ok = $Test->diag(_format_stack(@Data_Stack));
+            $ok = $tb->ok(0, $name);
+            $tb->diag(_format_stack(@Data_Stack));
         }
     }
 
@@ -370,9 +381,10 @@
     my $out = "Structures begin differing at:\n";
     foreach my $idx (0..$#vals) {
         my $val = $vals[$idx];
-        $vals[$idx] = !defined $val ? 'undef' : 
-                      $val eq $DNE  ? "Does not exist"
-                                    : "'$val'";
+        $vals[$idx] = !defined $val ? 'undef'          :
+                      $val eq $DNE  ? "Does not exist" :
+	              ref $val      ? "$val"           :
+                                      "'$val'";
     }
 
     $out .= "$vars[0] = $vals[0]\n";
@@ -383,11 +395,96 @@
 }
 
 
-#line 1007
+sub _type {
+    my $thing = shift;
 
+    return '' if !ref $thing;
+
+    for my $type (qw(ARRAY HASH REF SCALAR GLOB CODE Regexp)) {
+        return $type if UNIVERSAL::isa($thing, $type);
+    }
+
+    return '';
+}
+
+#line 915
+
+sub diag {
+    my $tb = Test::More->builder;
+
+    $tb->diag(@_);
+}
+
+
+#line 984
+
 #'#
-sub eq_array  {
+sub skip {
+    my($why, $how_many) = @_;
+    my $tb = Test::More->builder;
+
+    unless( defined $how_many ) {
+        # $how_many can only be avoided when no_plan is in use.
+        _carp "skip() needs to know \$how_many tests are in the block"
+          unless $tb->has_plan eq 'no_plan';
+        $how_many = 1;
+    }
+
+    for( 1..$how_many ) {
+        $tb->skip($why);
+    }
+
+    local $^W = 0;
+    last SKIP;
+}
+
+
+#line 1066
+
+sub todo_skip {
+    my($why, $how_many) = @_;
+    my $tb = Test::More->builder;
+
+    unless( defined $how_many ) {
+        # $how_many can only be avoided when no_plan is in use.
+        _carp "todo_skip() needs to know \$how_many tests are in the block"
+          unless $tb->has_plan eq 'no_plan';
+        $how_many = 1;
+    }
+
+    for( 1..$how_many ) {
+        $tb->todo_skip($why);
+    }
+
+    local $^W = 0;
+    last TODO;
+}
+
+#line 1119
+
+sub BAIL_OUT {
+    my $reason = shift;
+    my $tb = Test::More->builder;
+
+    $tb->BAIL_OUT($reason);
+}
+
+#line 1158
+
+#'#
+sub eq_array {
+    local @Data_Stack;
+    _deep_check(@_);
+}
+
+sub _eq_array  {
     my($a1, $a2) = @_;
+
+    if( grep !_type($_) eq 'ARRAY', $a1, $a2 ) {
+        warn "eq_array passed a non-array ref";
+        return 0;
+    }
+
     return 1 if $a1 eq $a2;
 
     my $ok = 1;
@@ -402,49 +499,82 @@
 
         last unless $ok;
     }
+
     return $ok;
 }
 
 sub _deep_check {
     my($e1, $e2) = @_;
+    my $tb = Test::More->builder;
+
     my $ok = 0;
 
-    my $eq;
+    # Effectively turn %Refs_Seen into a stack.  This avoids picking up
+    # the same referenced used twice (such as [\$a, \$a]) to be considered
+    # circular.
+    local %Refs_Seen = %Refs_Seen;
+
     {
         # Quiet uninitialized value warnings when comparing undefs.
         local $^W = 0; 
 
-        if( $e1 eq $e2 ) {
+        $tb->_unoverload_str(\$e1, \$e2);
+
+        # Either they're both references or both not.
+        my $same_ref = !(!ref $e1 xor !ref $e2);
+	my $not_ref  = (!ref $e1 and !ref $e2);
+
+        if( defined $e1 xor defined $e2 ) {
+            $ok = 0;
+        }
+        elsif ( $e1 == $DNE xor $e2 == $DNE ) {
+            $ok = 0;
+        }
+        elsif ( $same_ref and ($e1 eq $e2) ) {
             $ok = 1;
         }
+	elsif ( $not_ref ) {
+	    push @Data_Stack, { type => '', vals => [$e1, $e2] };
+	    $ok = 0;
+	}
         else {
-            if( UNIVERSAL::isa($e1, 'ARRAY') and
-                UNIVERSAL::isa($e2, 'ARRAY') )
-            {
-                $ok = eq_array($e1, $e2);
+            if( $Refs_Seen{$e1} ) {
+                return $Refs_Seen{$e1} eq $e2;
             }
-            elsif( UNIVERSAL::isa($e1, 'HASH') and
-                   UNIVERSAL::isa($e2, 'HASH') )
-            {
-                $ok = eq_hash($e1, $e2);
+            else {
+                $Refs_Seen{$e1} = "$e2";
             }
-            elsif( UNIVERSAL::isa($e1, 'REF') and
-                   UNIVERSAL::isa($e2, 'REF') )
-            {
-                push @Data_Stack, { type => 'REF', vals => [$e1, $e2] };
+
+            my $type = _type($e1);
+            $type = 'DIFFERENT' unless _type($e2) eq $type;
+
+            if( $type eq 'DIFFERENT' ) {
+                push @Data_Stack, { type => $type, vals => [$e1, $e2] };
+                $ok = 0;
+            }
+            elsif( $type eq 'ARRAY' ) {
+                $ok = _eq_array($e1, $e2);
+            }
+            elsif( $type eq 'HASH' ) {
+                $ok = _eq_hash($e1, $e2);
+            }
+            elsif( $type eq 'REF' ) {
+                push @Data_Stack, { type => $type, vals => [$e1, $e2] };
                 $ok = _deep_check($$e1, $$e2);
                 pop @Data_Stack if $ok;
             }
-            elsif( UNIVERSAL::isa($e1, 'SCALAR') and
-                   UNIVERSAL::isa($e2, 'SCALAR') )
-            {
+            elsif( $type eq 'SCALAR' ) {
                 push @Data_Stack, { type => 'REF', vals => [$e1, $e2] };
                 $ok = _deep_check($$e1, $$e2);
+                pop @Data_Stack if $ok;
             }
-            else {
-                push @Data_Stack, { vals => [$e1, $e2] };
+            elsif( $type ) {
+                push @Data_Stack, { type => $type, vals => [$e1, $e2] };
                 $ok = 0;
             }
+	    else {
+		_whoa(1, "No type in _deep_check");
+	    }
         }
     }
 
@@ -452,10 +582,32 @@
 }
 
 
-#line 1083
+sub _whoa {
+    my($check, $desc) = @_;
+    if( $check ) {
+        die <<WHOA;
+WHOA!  $desc
+This should never happen!  Please contact the author immediately!
+WHOA
+    }
+}
 
+
+#line 1289
+
 sub eq_hash {
+    local @Data_Stack;
+    return _deep_check(@_);
+}
+
+sub _eq_hash {
     my($a1, $a2) = @_;
+
+    if( grep !_type($_) eq 'HASH', $a1, $a2 ) {
+        warn "eq_hash passed a non-hash ref";
+        return 0;
+    }
+
     return 1 if $a1 eq $a2;
 
     my $ok = 1;
@@ -474,27 +626,32 @@
     return $ok;
 }
 
-#line 1116
+#line 1346
 
-# We must make sure that references are treated neutrally.  It really
-# doesn't matter how we sort them, as long as both arrays are sorted
-# with the same algorithm.
-sub _bogus_sort { local $^W = 0;  ref $a ? 0 : $a cmp $b }
-
 sub eq_set  {
     my($a1, $a2) = @_;
     return 0 unless @$a1 == @$a2;
 
     # There's faster ways to do this, but this is easiest.
-    return eq_array( [sort _bogus_sort @$a1], [sort _bogus_sort @$a2] );
-}
+    local $^W = 0;
 
-#line 1154
-
-sub builder {
-    return Test::Builder->new;
+    # It really doesn't matter how we sort them, as long as both arrays are 
+    # sorted with the same algorithm.
+    #
+    # Ensure that references are not accidentally treated the same as a
+    # string containing the reference.
+    #
+    # Have to inline the sort routine due to a threading/sort bug.
+    # See [rt.cpan.org 6782]
+    #
+    # I don't know how references would be sorted so we just don't sort
+    # them.  This means eq_set doesn't really work with refs.
+    return eq_array(
+           [grep(ref, @$a1), sort( grep(!ref, @$a1) )],
+           [grep(ref, @$a2), sort( grep(!ref, @$a2) )],
+    );
 }
 
-#line 1247
+#line 1534
 
 1;

Modified: packages/libmodule-signature-perl/trunk/lib/Module/Signature.pm
===================================================================
--- packages/libmodule-signature-perl/trunk/lib/Module/Signature.pm	2006-03-15 16:18:08 UTC (rev 2358)
+++ packages/libmodule-signature-perl/trunk/lib/Module/Signature.pm	2006-03-15 16:26:45 UTC (rev 2359)
@@ -1,12 +1,13 @@
 package Module::Signature;
-$Module::Signature::VERSION = '0.44';
+$Module::Signature::VERSION = '0.53';
 
+use 5.005;
 use strict;
 use vars qw($VERSION $SIGNATURE @ISA @EXPORT_OK);
 use vars qw($Preamble $Cipher $Debug $Verbose $Timeout);
 use vars qw($KeyServer $KeyServerPort $AutoKeyRetrieve $CanKeyRetrieve); 
 
-use constant CANNOT_VERIFY       => "0E0";
+use constant CANNOT_VERIFY       => '0E0';
 use constant SIGNATURE_OK        => 0;
 use constant SIGNATURE_MISSING   => -1;
 use constant SIGNATURE_MALFORMED => -2;
@@ -18,18 +19,20 @@
 use ExtUtils::Manifest ();
 use Exporter;
 
- at EXPORT_OK	= (qw(sign verify),
-		   qw($SIGNATURE $KeyServer $Cipher $Preamble),
-		   grep /^[A-Z_]+_[A-Z_]+$/, keys %Module::Signature::);
- at ISA		= 'Exporter';
+ at EXPORT_OK      = (
+    qw(sign verify),
+    qw($SIGNATURE $KeyServer $Cipher $Preamble),
+    (grep { /^[A-Z_]+_[A-Z_]+$/ } keys %Module::Signature::),
+);
+ at ISA            = 'Exporter';
 
-$SIGNATURE	= 'SIGNATURE';
+$SIGNATURE      = 'SIGNATURE';
 $Timeout        = $ENV{MODULE_SIGNATURE_TIMEOUT} || 3;
 $Verbose        = $ENV{MODULE_SIGNATURE_VERBOSE} || 0;
-$KeyServer	= $ENV{MODULE_SIGNATURE_KEYSERVER} || 'subkeys.pgp.net';
-$KeyServerPort	= $ENV{MODULE_SIGNATURE_KEYSERVERPORT} || '11371';
-$Cipher		= 'SHA1';
-$Preamble	= << ".";
+$KeyServer      = $ENV{MODULE_SIGNATURE_KEYSERVER} || 'pgp.mit.edu';
+$KeyServerPort  = $ENV{MODULE_SIGNATURE_KEYSERVERPORT} || '11371';
+$Cipher         = $ENV{MODULE_SIGNATURE_CIPHER} || 'SHA1';
+$Preamble       = << ".";
 This file contains message digests of all files listed in MANIFEST,
 signed via the Module::Signature module, version $VERSION.
 
@@ -46,327 +49,50 @@
 .
 
 $AutoKeyRetrieve    = 1;
-$CanKeyRetrieve	    = undef;
+$CanKeyRetrieve     = undef;
 
-=head1 NAME
-
-Module::Signature - Module signature file manipulation
-
-=head1 VERSION
-
-This document describes version 0.44 of B<Module::Signature>,
-released December 16, 2004.
-
-=head1 SYNOPSIS
-
-As a shell command:
-
-    % cpansign		    # verify an existing SIGNATURE, or
-			    # make a new one if none exists 
-
-    % cpansign sign	    # make signature; overwrites existing one
-    % cpansign -s	    # same thing
-
-    % cpansign verify	    # verify a signature
-    % cpansign -v	    # same thing
-    % cpansign -v --skip    # ignore files in MANIFEST.SKIP
-
-    % cpansign help	    # display this documentation
-    % cpansign -h	    # same thing
-
-In programs:
-
-    use Module::Signature qw(sign verify SIGNATURE_OK);
-    sign();
-    sign(overwrite => 1);	# overwrites without asking
-
-    # see the CONSTANTS section below
-    (verify() == SIGNATURE_OK) or die "failed!";
-
-=head1 DESCRIPTION
-
-B<Module::Signature> adds cryptographic authentications to CPAN
-distributions, via the special F<SIGNATURE> file.
-
-If you are a module user, all you have to do is to remember to run
-C<cpansign -v> (or just C<cpansign>) before issuing C<perl Makefile.PL>
-or C<perl Build.PL>; that will ensure the distribution has not been
-tampered with.
-
-For module authors, you'd want to add the F<SIGNATURE> file to your
-F<MANIFEST>, then type C<cpansign -s> before making a distribution.
-You may also want to consider adding this code as F<t/0-signature.t>:
-
-    #!/usr/bin/perl
-    use strict;
-    print "1..1\n";
-
-    if (!-s 'SIGNATURE') {
-        print "ok 1 # skip No signature file found\n";
-    }
-    elsif (!eval { require Module::Signature; 1 }) {
-        print "ok 1 # skip ",
-              "Next time around, consider install Module::Signature, ",
-              "so you can verify the integrity of this distribution.\n";
-    }
-    elsif (!eval { require Socket; Socket::inet_aton('subkeys.pgp.net') }) {
-        print "ok 1 # skip Cannot connect to the keyserver\n";
-    }
-    else {
-        (Module::Signature::verify() == Module::Signature::SIGNATURE_OK())
-            or print "not ";
-        print "ok 1 # Valid signature\n";
-    }
-
-    __END__
-
-Note that you'd want to keep your F<SIGNATURE> file at 0 bytes (or
-missing altogether) during development, so C<make test> would not fail;
-that file should only be generated during the C<make dist> time; see
-L</NOTES> for how to do it automatically.
-
-If you are already using B<Test::More> for testing, a more
-straightforward version of F<t/0-signature.t> can be found in the
-B<Module::Signature> distribution.
-
-Also, if you prefer a more full-fledged testing package, and are
-willing to inflict the dependency of B<Module::Build> on your users,
-Iain Truskett's B<Test::Signature> might be a better choice.
-
-Please also see L</NOTES> about F<MANIFEST.SKIP> issues, especially if
-you are using B<Module::Build> or writing your own F<MANIFEST.SKIP>.
-
-=head1 VARIABLES
-
-No package variables are exported by default.
-
-=over 4
-
-=item $Verbose
-
-If true, Module::Signature will give information during processing including
-gpg output.  If false, Module::Signature will be as quiet as possible as
-long as everything is working ok.  Defaults to false.
-
-=item $SIGNATURE
-
-The filename for a distribution's signature file.  Defaults to
-C<SIGNATURE>.
-
-=item $KeyServer
-
-The OpenPGP key server for fetching the author's public key
-(currently only implemented on C<gpg>, not C<Crypt::OpenPGP>).
-May be set to a false value to prevent this module from
-fetching public keys.
-
-=item $KeyServerPort
-
-The OpenPGP key server port, defaults to C<11371>.
-
-=item $Timeout
-
-Maximum time to wait to try to establish a link to the key server.
-Defaults to C<3>.
-
-=item $AutoKeyRetrieve
-
-Whether to automatically fetch unknown keys from the key server.
-Defaults to C<1>.
-
-=item $Cipher
-
-The default cipher used by the C<Digest> module to make signature
-files.  Defaults to C<SHA1>, but may be changed to other ciphers
-if the SHA1 cipher is undesirable for the user.
-
-The cipher specified in the F<SIGNATURE> file's first entry will
-be used to validate its integrity.  For C<SHA1>, the user needs
-to have any one of these four modules installed: B<Digest::SHA>,
-B<Digest::SHA1>, B<Digest::SHA::PurePerl>, or (currently nonexistent)
-B<Digest::SHA1::PurePerl>.
-
-=item $Preamble
-
-The explanatory text written to newly generated F<SIGNATURE> files
-before the actual entries.
-
-=back
-
-=head1 ENVIRONMENT
-
-B<Module::Signature> honors these environment variables:
-
-=over 4
-
-=item MODULE_SIGNATURE_VERBOSE
-
-Works like $Verbose.
-
-=item MODULE_SIGNATURE_KEYSERVER
-
-Works like $KeyServer.
-
-=item MODULE_SIGNATURE_KEYSERVERPORT
-
-Works like $KeyServerPort.
-
-=item MODULE_SIGNATURE_TIMEOUT
-
-Works like $Timeout.
-
-=back
-
-=head1 CONSTANTS
-
-These constants are not exported by default.
-
-=over 4
-
-=item CANNOT_VERIFY (C<0E0>)
-
-Cannot verify the OpenPGP signature, maybe due to the lack of a network
-connection to the key server, or if neither gnupg nor Crypt::OpenPGP
-exists on the system.
-
-=item SIGNATURE_OK (C<0>)
-
-Signature successfully verified.
-
-=item SIGNATURE_MISSING (C<-1>)
-
-The F<SIGNATURE> file does not exist.
-
-=item SIGNATURE_MALFORMED (C<-2>)
-
-The signature file does not contains a valid OpenPGP message.
-
-=item SIGNATURE_BAD (C<-3>)
-
-Invalid signature detected -- it might have been tampered with.
-
-=item SIGNATURE_MISMATCH (C<-4>)
-
-The signature is valid, but files in the distribution have changed
-since its creation.
-
-=item MANIFEST_MISMATCH (C<-5>)
-
-There are extra files in the current directory not specified by
-the MANIFEST file.
-
-=item CIPHER_UNKNOWN (C<-6>)
-
-The cipher used by the signature file is not recognized by the
-C<Digest> and C<Digest::*> modules.
-
-=back
-
-=head1 NOTES
-
-=head2 Signing your module as part of C<make dist>
-
-B<Module::Install> users should simply do this:
-
-    WriteAll( sign => 1 );
-
-For B<ExtUtils::MakeMaker> (version 6.18 or above), you may do this:
-
-    WriteMakefile(
-        (MM->can('signature_target') ? (SIGN => 1) : ()),
-        # ... original arguments ...
-    );
-
-Users of B<Module::Build> may do this:
-
-    Module::Build->new(
-        (sign => 1),
-        # ... original arguments ...
-    )->create_build_script;
-
-=head2 F<MANIFEST.SKIP> Considerations
-
-(The following section is lifted from Iain Truskett's B<Test::Signature>
-module, under the Perl license.  Thanks, Iain!)
-
-It is B<imperative> that your F<MANIFEST> and F<MANIFEST.SKIP> files be
-accurate and complete. If you are using C<ExtUtils::MakeMaker> and you
-do not have a F<MANIFEST.SKIP> file, then don't worry about the rest of
-this. If you do have a F<MANIFEST.SKIP> file, or you use
-C<Module::Build>, you must read this.
-
-Since the test is run at C<make test> time, the distribution has been
-made. Thus your F<MANIFEST.SKIP> file should have the entries listed
-below.
-
-If you're using C<ExtUtils::MakeMaker>, you should have, at least:
-
-    #defaults
-    ^Makefile$
-    ^blib/
-    ^pm_to_blib
-    ^blibdirs
-
-These entries are part of the default set provided by
-C<ExtUtils::Manifest>, which is ignored if you provide your own
-F<MANIFEST.SKIP> file.
-
-If you are using C<Module::Build>, you should have two extra entries:
-
-    ^Build$
-    ^_build/
-
-If you don't have the correct entries, C<Module::Signature> will
-complain that you have:
-
-    ==> MISMATCHED content between MANIFEST and distribution files! <==
-
-You should note this during normal development testing anyway.
-
-=cut
-
 sub verify {
     my %args = ( skip => 1, @_ );
     my $rv;
 
     (-r $SIGNATURE) or do {
-	warn "==> MISSING Signature file! <==\n";
-	return SIGNATURE_MISSING;
+        warn "==> MISSING Signature file! <==\n";
+        return SIGNATURE_MISSING;
     };
 
     (my $sigtext = _read_sigfile($SIGNATURE)) or do {
-	warn "==> MALFORMED Signature file! <==\n";
-	return SIGNATURE_MALFORMED;
+        warn "==> MALFORMED Signature file! <==\n";
+        return SIGNATURE_MALFORMED;
     };
 
     (my ($cipher) = ($sigtext =~ /^(\w+) /)) or do {
-	warn "==> MALFORMED Signature file! <==\n";
-	return SIGNATURE_MALFORMED;
+        warn "==> MALFORMED Signature file! <==\n";
+        return SIGNATURE_MALFORMED;
     };
 
     (defined(my $plaintext = _mkdigest($cipher))) or do {
-	warn "==> UNKNOWN Cipher format! <==\n";
-	return CIPHER_UNKNOWN;
+        warn "==> UNKNOWN Cipher format! <==\n";
+        return CIPHER_UNKNOWN;
     };
 
     $rv = _verify($SIGNATURE, $sigtext, $plaintext);
 
     if ($rv == SIGNATURE_OK) {
-	my ($mani, $file) = _fullcheck($args{skip});
+        my ($mani, $file) = _fullcheck($args{skip});
 
-	if (@{$mani} or @{$file}) {
-	    warn "==> MISMATCHED content between MANIFEST and distribution files! <==\n";
-	    return MANIFEST_MISMATCH;
-	}
-	else {
-	    warn "==> Signature verified OK! <==\n" if $Verbose;
-	}
+        if (@{$mani} or @{$file}) {
+            warn "==> MISMATCHED content between MANIFEST and distribution files! <==\n";
+            return MANIFEST_MISMATCH;
+        }
+        else {
+            warn "==> Signature verified OK! <==\n" if $Verbose;
+        }
     }
     elsif ($rv == SIGNATURE_BAD) {
-	warn "==> BAD/TAMPERED signature detected! <==\n";
+        warn "==> BAD/TAMPERED signature detected! <==\n";
     }
     elsif ($rv == SIGNATURE_MISMATCH) {
-	warn "==> MISMATCHED content between SIGNATURE and distribution files! <==\n";
+        warn "==> MISMATCHED content between SIGNATURE and distribution files! <==\n";
     }
 
     return $rv;
@@ -380,27 +106,27 @@
     local $SIGNATURE = $signature if $signature ne $SIGNATURE;
 
     if ($AutoKeyRetrieve and !$CanKeyRetrieve) {
-	if (!defined $CanKeyRetrieve) {
-	    require IO::Socket::INET;
-	    my $sock = IO::Socket::INET->new(
+        if (!defined $CanKeyRetrieve) {
+            require IO::Socket::INET;
+            my $sock = IO::Socket::INET->new(
                 Timeout => $Timeout,
                 PeerAddr => "$KeyServer:$KeyServerPort",
             );
-	    $CanKeyRetrieve = ($sock ? 1 : 0);
-	    $sock->shutdown(2) if $sock;
-	}
-	$AutoKeyRetrieve = $CanKeyRetrieve;
+            $CanKeyRetrieve = ($sock ? 1 : 0);
+            $sock->shutdown(2) if $sock;
+        }
+        $AutoKeyRetrieve = $CanKeyRetrieve;
     }
 
     if (my $version = _has_gpg()) {
-	return _verify_gpg($sigtext, $plaintext, $version);
+        return _verify_gpg($sigtext, $plaintext, $version);
     }
     elsif (eval {require Crypt::OpenPGP; 1}) {
-	return _verify_crypt_openpgp($sigtext, $plaintext);
+        return _verify_crypt_openpgp($sigtext, $plaintext);
     }
     else {
-	warn "Cannot use GnuPG or Crypt::OpenPGP, please install either one first!\n";
-	return _compare($sigtext, $plaintext, CANNOT_VERIFY);
+        warn "Cannot use GnuPG or Crypt::OpenPGP, please install either one first!\n";
+        return _compare($sigtext, $plaintext, CANNOT_VERIFY);
     }
 }
 
@@ -421,13 +147,13 @@
         my $_maniskip = &ExtUtils::Manifest::_maniskip;
 
         local *ExtUtils::Manifest::_maniskip = sub { sub {
-	    return unless $skip;
-	    my $ok = $_maniskip->(@_);
-	    if ($ok ||= (!-e 'MANIFEST.SKIP' and _default_skip(@_))) {
-	        print "Skipping $_\n" for @_;
-	        push @extra, @_;
-	    }
-	    return $ok;
+            return unless $skip;
+            my $ok = $_maniskip->(@_);
+            if ($ok ||= (!-e 'MANIFEST.SKIP' and _default_skip(@_))) {
+                print "Skipping $_\n" for @_;
+                push @extra, @_;
+            }
+            return $ok;
         } };
 
         ($mani, $file) = ExtUtils::Manifest::fullcheck();
@@ -437,9 +163,9 @@
     }
 
     foreach my $makefile ('Makefile', 'Build') {
-	warn "==> SKIPPED CHECKING '$_'!" .
-		(-e "$_.PL" && " (run $_.PL to ensure its integrity)") .
-		" <===\n" for grep $_ eq $makefile, @extra;
+        warn "==> SKIPPED CHECKING '$_'!" .
+                (-e "$_.PL" && " (run $_.PL to ensure its integrity)") .
+                " <===\n" for grep $_ eq $makefile, @extra;
     }
 
     @{$mani} = grep {$_ ne 'SIGNATURE'} @{$mani};
@@ -458,28 +184,28 @@
 sub _default_skip {
     local $_ = shift;
     return 1 if /\bRCS\b/ or /\bCVS\b/ or /\B\.svn\b/ or /,v$/
-	     or /^MANIFEST\.bak/ or /^Makefile$/ or /^blib\//
-	     or /^MakeMaker-\d/ or /^pm_to_blib/ or /^blibdirs/
-	     or /^_build\// or /^Build$/ or /^pmfiles\.dat/
-	     or /~$/ or /\.old$/ or /\#$/ or /^\.#/;
+             or /^MANIFEST\.bak/ or /^Makefile$/ or /^blib\//
+             or /^MakeMaker-\d/ or /^pm_to_blib/ or /^blibdirs/
+             or /^_build\// or /^Build$/ or /^pmfiles\.dat/
+             or /~$/ or /\.old$/ or /\#$/ or /^\.#/;
 }
 
 sub _verify_gpg {
     my ($sigtext, $plaintext, $version) = @_;
 
     local $SIGNATURE = Win32::GetShortPathName($SIGNATURE)
-	if defined &Win32::GetShortPathName and $SIGNATURE =~ /[^-\w.:~\\\/]/;
+        if defined &Win32::GetShortPathName and $SIGNATURE =~ /[^-\w.:~\\\/]/;
 
     my $keyserver = _keyserver($version);
 
     my @quiet = $Verbose ? () : qw(-q --logger-fd=1);
     my @cmd = (
-	qw(gpg --verify --batch --no-tty), @quiet, ($KeyServer ? (
-	    "--keyserver=$keyserver",
-	    ($AutoKeyRetrieve and $version ge "1.0.7")
-		? "--keyserver-options=auto-key-retrieve"
-		: ()
-	) : ()), $SIGNATURE
+        qw(gpg --verify --batch --no-tty), @quiet, ($KeyServer ? (
+            "--keyserver=$keyserver",
+            ($AutoKeyRetrieve and $version ge '1.0.7')
+                ? '--keyserver-options=auto-key-retrieve'
+                : ()
+        ) : ()), $SIGNATURE
     );
 
     my $output = '';
@@ -496,7 +222,7 @@
         print STDERR $output;
     }
     elsif ($output =~ /((?: +[\dA-F]{4}){10,})/) {
-	warn "WARNING: This key is not certified with a trusted signature!\n";
+        warn "WARNING: This key is not certified with a trusted signature!\n";
         warn "Primary key fingerprint:$1\n";
     }
 
@@ -506,8 +232,8 @@
 
 sub _keyserver {
     my $version = shift;
-    my $scheme = "x-hkp";
-    $scheme = "hkp" if $version ge "1.2.0";
+    my $scheme = 'x-hkp';
+    $scheme = 'hkp' if $version ge '1.2.0';
 
     return "$scheme://$KeyServer:$KeyServerPort";
 }
@@ -517,20 +243,20 @@
 
     require Crypt::OpenPGP;
     my $pgp = Crypt::OpenPGP->new(
-	($KeyServer) ? ( KeyServer => $KeyServer, AutoKeyRetrieve => $AutoKeyRetrieve ) : (),
+        ($KeyServer) ? ( KeyServer => $KeyServer, AutoKeyRetrieve => $AutoKeyRetrieve ) : (),
     );
     my $rv = $pgp->handle( Filename => $SIGNATURE )
-	or die $pgp->errstr;
+        or die $pgp->errstr;
 
     return SIGNATURE_BAD if (!$rv->{Validity} and $AutoKeyRetrieve);
 
     if ($rv->{Validity}) {
-	warn "Signature made ", scalar localtime($rv->{Signature}->timestamp),
-	     " using key ID ", substr(uc(unpack("H*", $rv->{Signature}->key_id)), -8), "\n",
-	     "Good signature from \"$rv->{Validity}\"\n" if $Verbose;
+        warn 'Signature made ', scalar localtime($rv->{Signature}->timestamp),
+             ' using key ID ', substr(uc(unpack('H*', $rv->{Signature}->key_id)), -8), "\n",
+             "Good signature from \"$rv->{Validity}\"\n" if $Verbose;
     }
     else {
-	warn "Cannot verify signature; public key not found\n";
+        warn "Cannot verify signature; public key not found\n";
     }
 
     return _compare($sigtext, $plaintext, $rv->{Validity} ? SIGNATURE_OK : CANNOT_VERIFY);
@@ -543,11 +269,21 @@
 
     local *D;
     open D, $sigfile or die "Could not open $sigfile: $!";
+
+    if ($] >= 5.006 and <D> =~ /\r/) {
+        close D;
+        open D, $sigfile or die "Could not open $sigfile: $!";
+        binmode D, ':crlf';
+    } else {
+        close D;
+        open D, $sigfile or die "Could not open $sigfile: $!";
+    }
+
     while (<D>) {
-	next if (1 .. /^-----BEGIN PGP SIGNED MESSAGE-----/);
-	last if /^-----BEGIN PGP SIGNATURE/;
+        next if (1 .. /^-----BEGIN PGP SIGNED MESSAGE-----/);
+        last if /^-----BEGIN PGP SIGNATURE/;
 
-	$signature .= $_;
+        $signature .= $_;
     }
 
     return ((split(/\n+/, $signature, 2))[1]);
@@ -562,22 +298,22 @@
     return $ok if $str1 eq $str2;
 
     if (eval { require Text::Diff; 1 }) {
-	warn "--- $SIGNATURE ".localtime((stat($SIGNATURE))[9])."\n";
-	warn "+++ (current) ".localtime()."\n";
-	warn Text::Diff::diff( \$str1, \$str2, { STYLE => "Unified" } );
+        warn "--- $SIGNATURE ".localtime((stat($SIGNATURE))[9])."\n";
+        warn '+++ (current) '.localtime()."\n";
+        warn Text::Diff::diff( \$str1, \$str2, { STYLE => 'Unified' } );
     }
     else {
-	local (*D, *S);
-	open S, $SIGNATURE or die "Could not open $SIGNATURE: $!";
-	open D, "| diff -u $SIGNATURE -" or (warn "Could not call diff: $!", return SIGNATURE_MISMATCH);
-	while (<S>) {
-	    print D $_ if (1 .. /^-----BEGIN PGP SIGNED MESSAGE-----/);
-	    print D if (/^Hash: / .. /^$/);
-	    next if (1 .. /^-----BEGIN PGP SIGNATURE/);
-	    print D $str2, "-----BEGIN PGP SIGNATURE-----\n", $_ and last;
-	}
-	print D <S>;
-	close D;
+        local (*D, *S);
+        open S, $SIGNATURE or die "Could not open $SIGNATURE: $!";
+        open D, "| diff -u $SIGNATURE -" or (warn "Could not call diff: $!", return SIGNATURE_MISMATCH);
+        while (<S>) {
+            print D $_ if (1 .. /^-----BEGIN PGP SIGNED MESSAGE-----/);
+            print D if (/^Hash: / .. /^$/);
+            next if (1 .. /^-----BEGIN PGP SIGNATURE/);
+            print D $str2, "-----BEGIN PGP SIGNATURE-----\n", $_ and last;
+        }
+        print D <S>;
+        close D;
     }
 
     return SIGNATURE_MISMATCH;
@@ -591,24 +327,24 @@
     my ($mani, $file) = _fullcheck($args{skip});
 
     if (@{$mani} or @{$file}) {
-	warn "==> MISMATCHED content between MANIFEST and the distribution! <==\n";
-	warn "==> Please correct your MANIFEST file and/or delete extra files. <==\n";
+        warn "==> MISMATCHED content between MANIFEST and the distribution! <==\n";
+        warn "==> Please correct your MANIFEST file and/or delete extra files. <==\n";
     }
 
     if (!$overwrite and -e $SIGNATURE and -t STDIN) {
-	local $/ = "\n";
-	print "$SIGNATURE already exists; overwrite [y/N]? ";
-	return unless <STDIN> =~ /[Yy]/;
+        local $/ = "\n";
+        print "$SIGNATURE already exists; overwrite [y/N]? ";
+        return unless <STDIN> =~ /[Yy]/;
     }
 
     if (my $version = _has_gpg()) {
-	_sign_gpg($SIGNATURE, $plaintext, $version);
+        _sign_gpg($SIGNATURE, $plaintext, $version);
     }
     elsif (eval {require Crypt::OpenPGP; 1}) {
-	_sign_crypt_openpgp($SIGNATURE, $plaintext);
+        _sign_crypt_openpgp($SIGNATURE, $plaintext);
     }
     else {
-	die "Cannot use GnuPG or Crypt::OpenPGP, please install either one first!";
+        die 'Cannot use GnuPG or Crypt::OpenPGP, please install either one first!';
     }
 
     warn "==> SIGNATURE file created successfully. <==\n";
@@ -619,7 +355,7 @@
     my ($sigfile, $plaintext, $version) = @_;
 
     die "Could not write to $sigfile"
-	if -e $sigfile and (-d $sigfile or not -w $sigfile);
+        if -e $sigfile and (-d $sigfile or not -w $sigfile);
 
     local *D;
     open D, "| gpg --clearsign >> $sigfile.tmp" or die "Could not call gpg: $!";
@@ -627,15 +363,15 @@
     close D;
 
     (-e "$sigfile.tmp" and -s "$sigfile.tmp") or do {
-	unlink "$sigfile.tmp";
-	die "Cannot find $sigfile.tmp, signing aborted.\n";
+        unlink "$sigfile.tmp";
+        die "Cannot find $sigfile.tmp, signing aborted.\n";
     };
 
     open D, "$sigfile.tmp" or die "Cannot open $sigfile.tmp: $!";
 
     open S, ">$sigfile" or do {
-	unlink "$sigfile.tmp";
-	die "Could not write to $sigfile: $!";
+        unlink "$sigfile.tmp";
+        die "Could not write to $sigfile: $!";
     };
 
     print S $Preamble;
@@ -694,27 +430,27 @@
     require Crypt::OpenPGP;
     my $pgp = Crypt::OpenPGP->new;
     my $ring = Crypt::OpenPGP::KeyRing->new(
-	Filename => $pgp->{cfg}->get('SecRing')
+        Filename => $pgp->{cfg}->get('SecRing')
     ) or die $pgp->error(Crypt::OpenPGP::KeyRing->errstr);
     my $kb = $ring->find_keyblock_by_index(-1)
-	or die $pgp->error("Can't find last keyblock: " . $ring->errstr);
+        or die $pgp->error('Can\'t find last keyblock: ' . $ring->errstr);
 
     my $cert = $kb->signing_key;
     my $uid = $cert->uid($kb->primary_uid);
     warn "Debug: acquiring signature from $uid\n" if $Debug;
 
     my $signature = $pgp->sign(
-	Data       => $plaintext,
-	Detach     => 0,
-	Clearsign  => 1,
-	Armour     => 1,
-	Key        => $cert,
-	PassphraseCallback => \&Crypt::OpenPGP::_default_passphrase_cb,
+        Data       => $plaintext,
+        Detach     => 0,
+        Clearsign  => 1,
+        Armour     => 1,
+        Key        => $cert,
+        PassphraseCallback => \&Crypt::OpenPGP::_default_passphrase_cb,
     ) or die $pgp->errstr;
 
 
     local *D;
-    open D, ">$sigfile" or die "Could not write to $sigfile: $!";
+    open D, "> $sigfile" or die "Could not write to $sigfile: $!";
     print D $Preamble;
     print D $signature;
     close D;
@@ -746,8 +482,8 @@
     my $plaintext = '';
 
     foreach my $file (sort keys %$digest) {
-	next if $file eq $SIGNATURE;
-	$plaintext .= "@{$digest->{$file}} $file\n";
+        next if $file eq $SIGNATURE;
+        $plaintext .= "@{$digest->{$file}} $file\n";
     }
 
     return $plaintext;
@@ -761,40 +497,40 @@
     my $found = ExtUtils::Manifest::manifind($p);
     my(%digest) = ();
     my $obj = eval { Digest->new($algorithm) } || eval {
-        my ($base, $variant) = ($algorithm =~ /^(\w+)(\d+)$/g) or die;
-	require "Digest/$base.pm"; "Digest::$base"->new($variant)
+        my ($base, $variant) = ($algorithm =~ /^(\w+?)(\d+)$/g) or die;
+        require "Digest/$base.pm"; "Digest::$base"->new($variant)
     } || eval {
-	require "Digest/$algorithm.pm"; "Digest::$algorithm"->new
+        require "Digest/$algorithm.pm"; "Digest::$algorithm"->new
     } || eval {
-        my ($base, $variant) = ($algorithm =~ /^(\w+)(\d+)$/g) or die;
-	require "Digest/$base/PurePerl.pm"; "Digest::$base\::PurePerl"->new($variant)
+        my ($base, $variant) = ($algorithm =~ /^(\w+?)(\d+)$/g) or die;
+        require "Digest/$base/PurePerl.pm"; "Digest::$base\::PurePerl"->new($variant)
     } || eval {
-	require "Digest/$algorithm/PurePerl.pm"; "Digest::$algorithm\::PurePerl"->new
+        require "Digest/$algorithm/PurePerl.pm"; "Digest::$algorithm\::PurePerl"->new
     } or do { eval {
-        my ($base, $variant) = ($algorithm =~ /^(\w+)(\d+)$/g) or die;
-	warn("Unknown cipher: $algorithm, please install Digest::$base, Digest::$base$variant, or Digest::$base\::PurePerl\n");
+        my ($base, $variant) = ($algorithm =~ /^(\w+?)(\d+)$/g) or die;
+        warn "Unknown cipher: $algorithm, please install Digest::$base, Digest::$base$variant, or Digest::$base\::PurePerl\n";
     } and return } or do {
-	warn("Unknown cipher: $algorithm, please install Digest::$algorithm\n"); return;
+        warn "Unknown cipher: $algorithm, please install Digest::$algorithm\n"; return;
     };
 
     foreach my $file (sort keys %$read){
         warn "Debug: collecting digest from $file\n" if $Debug;
         if ($dosnames){
             $file = lc $file;
-            $file =~ s=(\.(\w|-)+)=substr ($1,0,4)=ge;
-            $file =~ s=((\w|-)+)=substr ($1,0,8)=ge;
+            $file =~ s!(\.(\w|-)+)!substr ($1,0,4)!ge;
+            $file =~ s!((\w|-)+)!substr ($1,0,8)!ge;
         }
         unless ( exists $found->{$file} ) {
             warn "No such file: $file\n" if $Verbose;
         }
-	else {
-	    local *F;
-	    open F, $file or die "Cannot open $file for reading: $!";
-	    binmode(F) if -B $file;
-	    $obj->addfile(*F);
-	    $digest{$file} = [$algorithm, $obj->hexdigest];
-	    $obj->reset;
-	}
+        else {
+            local *F;
+            open F, $file or die "Cannot open $file for reading: $!";
+            binmode(F) if -B $file;
+            $obj->addfile(*F);
+            $digest{$file} = [$algorithm, $obj->hexdigest];
+            $obj->reset;
+        }
     }
 
     return \%digest;
@@ -804,19 +540,304 @@
 
 __END__
 
+=head1 NAME
+
+Module::Signature - Module signature file manipulation
+
+=head1 VERSION
+
+This document describes version 0.53 of B<Module::Signature>,
+released January 31, 2006.
+
+=head1 SYNOPSIS
+
+As a shell command:
+
+    % cpansign              # verify an existing SIGNATURE, or
+                            # make a new one if none exists 
+
+    % cpansign sign         # make signature; overwrites existing one
+    % cpansign -s           # same thing
+
+    % cpansign verify       # verify a signature
+    % cpansign -v           # same thing
+    % cpansign -v --skip    # ignore files in MANIFEST.SKIP
+
+    % cpansign help         # display this documentation
+    % cpansign -h           # same thing
+
+In programs:
+
+    use Module::Signature qw(sign verify SIGNATURE_OK);
+    sign();
+    sign(overwrite => 1);       # overwrites without asking
+
+    # see the CONSTANTS section below
+    (verify() == SIGNATURE_OK) or die "failed!";
+
+=head1 DESCRIPTION
+
+B<Module::Signature> adds cryptographic authentications to CPAN
+distributions, via the special F<SIGNATURE> file.
+
+If you are a module user, all you have to do is to remember to run
+C<cpansign -v> (or just C<cpansign>) before issuing C<perl Makefile.PL>
+or C<perl Build.PL>; that will ensure the distribution has not been
+tampered with.
+
+Module authors can easily add the F<SIGNATURE> file to the distribution
+tarball; see L</NOTES> below for how to do it as part of C<make dist>.
+
+If you I<really> want to sign a distribution manually, simply add
+C<SIGNATURE> to F<MANIFEST>, then type C<cpansign -s> immediately
+before C<make dist>.  Be sure to delete the F<SIGNATURE> file afterwards.
+
+Please also see L</NOTES> about F<MANIFEST.SKIP> issues, especially if
+you are using B<Module::Build> or writing your own F<MANIFEST.SKIP>.
+
+=head1 VARIABLES
+
+No package variables are exported by default.
+
+=over 4
+
+=item $Verbose
+
+If true, Module::Signature will give information during processing including
+gpg output.  If false, Module::Signature will be as quiet as possible as
+long as everything is working ok.  Defaults to false.
+
+=item $SIGNATURE
+
+The filename for a distribution's signature file.  Defaults to
+C<SIGNATURE>.
+
+=item $KeyServer
+
+The OpenPGP key server for fetching the author's public key
+(currently only implemented on C<gpg>, not C<Crypt::OpenPGP>).
+May be set to a false value to prevent this module from
+fetching public keys.
+
+=item $KeyServerPort
+
+The OpenPGP key server port, defaults to C<11371>.
+
+=item $Timeout
+
+Maximum time to wait to try to establish a link to the key server.
+Defaults to C<3>.
+
+=item $AutoKeyRetrieve
+
+Whether to automatically fetch unknown keys from the key server.
+Defaults to C<1>.
+
+=item $Cipher
+
+The default cipher used by the C<Digest> module to make signature
+files.  Defaults to C<SHA1>, but may be changed to other ciphers
+via the C<MODULE_SIGNATURE_CIPHER> environment variable if the SHA1
+cipher is undesirable for the user.
+
+The cipher specified in the F<SIGNATURE> file's first entry will
+be used to validate its integrity.  For C<SHA1>, the user needs
+to have any one of these four modules installed: B<Digest::SHA>,
+B<Digest::SHA1>, B<Digest::SHA::PurePerl>, or (currently nonexistent)
+B<Digest::SHA1::PurePerl>.
+
+=item $Preamble
+
+The explanatory text written to newly generated F<SIGNATURE> files
+before the actual entries.
+
+=back
+
+=head1 ENVIRONMENT
+
+B<Module::Signature> honors these environment variables:
+
+=over 4
+
+=item MODULE_SIGNATURE_CIPHER
+
+Works like C<$Cipher>.
+
+=item MODULE_SIGNATURE_VERBOSE
+
+Works like C<$Verbose>.
+
+=item MODULE_SIGNATURE_KEYSERVER
+
+Works like C<$KeyServer>.
+
+=item MODULE_SIGNATURE_KEYSERVERPORT
+
+Works like C<$KeyServerPort>.
+
+=item MODULE_SIGNATURE_TIMEOUT
+
+Works like C<$Timeout>.
+
+=back
+
+=head1 CONSTANTS
+
+These constants are not exported by default.
+
+=over 4
+
+=item CANNOT_VERIFY (C<0E0>)
+
+Cannot verify the OpenPGP signature, maybe due to the lack of a network
+connection to the key server, or if neither gnupg nor Crypt::OpenPGP
+exists on the system.
+
+=item SIGNATURE_OK (C<0>)
+
+Signature successfully verified.
+
+=item SIGNATURE_MISSING (C<-1>)
+
+The F<SIGNATURE> file does not exist.
+
+=item SIGNATURE_MALFORMED (C<-2>)
+
+The signature file does not contains a valid OpenPGP message.
+
+=item SIGNATURE_BAD (C<-3>)
+
+Invalid signature detected -- it might have been tampered with.
+
+=item SIGNATURE_MISMATCH (C<-4>)
+
+The signature is valid, but files in the distribution have changed
+since its creation.
+
+=item MANIFEST_MISMATCH (C<-5>)
+
+There are extra files in the current directory not specified by
+the MANIFEST file.
+
+=item CIPHER_UNKNOWN (C<-6>)
+
+The cipher used by the signature file is not recognized by the
+C<Digest> and C<Digest::*> modules.
+
+=back
+
+=head1 NOTES
+
+=head2 Signing your module as part of C<make dist>
+
+The easiest way is to use B<Module::Install>:
+
+    sign;       # put this before "WriteAll"
+    WriteAll;
+
+For B<ExtUtils::MakeMaker> (version 6.18 or above), you may do this:
+
+    WriteMakefile(
+        (MM->can('signature_target') ? (SIGN => 1) : ()),
+        # ... original arguments ...
+    );
+
+Users of B<Module::Build> may do this:
+
+    Module::Build->new(
+        (sign => 1),
+        # ... original arguments ...
+    )->create_build_script;
+
+=head2 F<MANIFEST.SKIP> Considerations
+
+(The following section is lifted from Iain Truskett's B<Test::Signature>
+module, under the Perl license.  Thanks, Iain!)
+
+It is B<imperative> that your F<MANIFEST> and F<MANIFEST.SKIP> files be
+accurate and complete. If you are using C<ExtUtils::MakeMaker> and you
+do not have a F<MANIFEST.SKIP> file, then don't worry about the rest of
+this. If you do have a F<MANIFEST.SKIP> file, or you use
+C<Module::Build>, you must read this.
+
+Since the test is run at C<make test> time, the distribution has been
+made. Thus your F<MANIFEST.SKIP> file should have the entries listed
+below.
+
+If you're using C<ExtUtils::MakeMaker>, you should have, at least:
+
+    #defaults
+    ^Makefile$
+    ^blib/
+    ^pm_to_blib
+    ^blibdirs
+
+These entries are part of the default set provided by
+C<ExtUtils::Manifest>, which is ignored if you provide your own
+F<MANIFEST.SKIP> file.
+
+If you are using C<Module::Build>, you should have two extra entries:
+
+    ^Build$
+    ^_build/
+
+If you don't have the correct entries, C<Module::Signature> will
+complain that you have:
+
+    ==> MISMATCHED content between MANIFEST and distribution files! <==
+
+You should note this during normal development testing anyway.
+
+=head2 Testing signatures
+
+You may add this code as F<t/0-signature.t> in your distribution tree:
+
+    #!/usr/bin/perl
+    use strict;
+    print "1..1\n";
+
+    if (!-s 'SIGNATURE') {
+        print "ok 1 # skip No signature file found\n";
+    }
+    elsif (!eval { require Module::Signature; 1 }) {
+        print "ok 1 # skip ",
+              "Next time around, consider install Module::Signature, ",
+              "so you can verify the integrity of this distribution.\n";
+    }
+    elsif (!eval { require Socket; Socket::inet_aton('pgp.mit.edu') }) {
+        print "ok 1 # skip Cannot connect to the keyserver\n";
+    }
+    else {
+        (Module::Signature::verify() == Module::Signature::SIGNATURE_OK())
+            or print "not ";
+        print "ok 1 # Valid signature\n";
+    }
+
+If you are already using B<Test::More> for testing, a more
+straightforward version of F<t/0-signature.t> can be found in the
+B<Module::Signature> distribution.
+
+Also, if you prefer a more full-fledged testing package, and are
+willing to inflict the dependency of B<Module::Build> on your users,
+Iain Truskett's B<Test::Signature> might be a better choice.
+
+=cut
+
 =head1 SEE ALSO
 
 L<Digest>, L<Digest::SHA>, L<Digest::SHA1>, L<Digest::SHA::PurePerl>
 
 L<ExtUtils::Manifest>, L<Crypt::OpenPGP>, L<Test::Signature>
 
+L<Module::Install>, L<ExtUtils::MakeMaker>, L<Module::Build>
+
 =head1 AUTHORS
 
-Autrijus Tang E<lt>autrijus at autrijus.orgE<gt>
+Audrey Tang E<lt>autrijus at autrijus.orgE<gt>
 
 =head1 COPYRIGHT
 
-Copyright 2002, 2003, 2004 by Autrijus Tang E<lt>autrijus at autrijus.orgE<gt>.
+Copyright 2002, 2003, 2004, 2005 by Audrey Tang.
 
 Parts of the documentation are copyrighted by Iain Truskett, 2002.
 

Modified: packages/libmodule-signature-perl/trunk/script/cpansign
===================================================================
--- packages/libmodule-signature-perl/trunk/script/cpansign	2006-03-15 16:18:08 UTC (rev 2358)
+++ packages/libmodule-signature-perl/trunk/script/cpansign	2006-03-15 16:26:45 UTC (rev 2359)
@@ -81,11 +81,11 @@
 
 =head1 AUTHORS
 
-Autrijus Tang E<lt>autrijus at autrijus.orgE<gt>
+Audrey Tang E<lt>autrijus at autrijus.orgE<gt>
 
 =head1 COPYRIGHT
 
-Copyright 2002, 2003 by Autrijus Tang E<lt>autrijus at autrijus.orgE<gt>.
+Copyright 2002, 2003, 2006 by Audrey Tang.
 
 This program is free software; you can redistribute it and/or 
 modify it under the same terms as Perl itself.




More information about the Pkg-perl-cvs-commits mailing list