r2353 - in packages: . libmodule-signature-perl libmodule-signature-perl/branches libmodule-signature-perl/branches/upstream libmodule-signature-perl/branches/upstream/current libmodule-signature-perl/branches/upstream/current/inc libmodule-signature-perl/branches/upstream/current/inc/ExtUtils libmodule-signature-perl/branches/upstream/current/inc/Module libmodule-signature-perl/branches/upstream/current/inc/Module/Install libmodule-signature-perl/branches/upstream/current/inc/Test libmodule-signature-perl/branches/upstream/current/lib libmodule-signature-perl/branches/upstream/current/lib/Module libmodule-signature-perl/branches/upstream/current/script libmodule-signature-perl/branches/upstream/current/t

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


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

Added:
   packages/libmodule-signature-perl/
   packages/libmodule-signature-perl/branches/
   packages/libmodule-signature-perl/branches/upstream/
   packages/libmodule-signature-perl/branches/upstream/current/
   packages/libmodule-signature-perl/branches/upstream/current/AUTHORS
   packages/libmodule-signature-perl/branches/upstream/current/AUTRIJUS.pub
   packages/libmodule-signature-perl/branches/upstream/current/Changes
   packages/libmodule-signature-perl/branches/upstream/current/MANIFEST
   packages/libmodule-signature-perl/branches/upstream/current/META.yml
   packages/libmodule-signature-perl/branches/upstream/current/Makefile.PL
   packages/libmodule-signature-perl/branches/upstream/current/PAUSE2003.pub
   packages/libmodule-signature-perl/branches/upstream/current/README
   packages/libmodule-signature-perl/branches/upstream/current/SIGNATURE
   packages/libmodule-signature-perl/branches/upstream/current/TODO
   packages/libmodule-signature-perl/branches/upstream/current/inc/
   packages/libmodule-signature-perl/branches/upstream/current/inc/ExtUtils/
   packages/libmodule-signature-perl/branches/upstream/current/inc/ExtUtils/AutoInstall.pm
   packages/libmodule-signature-perl/branches/upstream/current/inc/Module/
   packages/libmodule-signature-perl/branches/upstream/current/inc/Module/Install.pm
   packages/libmodule-signature-perl/branches/upstream/current/inc/Module/Install/
   packages/libmodule-signature-perl/branches/upstream/current/inc/Module/Install/AutoInstall.pm
   packages/libmodule-signature-perl/branches/upstream/current/inc/Module/Install/Base.pm
   packages/libmodule-signature-perl/branches/upstream/current/inc/Module/Install/Can.pm
   packages/libmodule-signature-perl/branches/upstream/current/inc/Module/Install/Fetch.pm
   packages/libmodule-signature-perl/branches/upstream/current/inc/Module/Install/Include.pm
   packages/libmodule-signature-perl/branches/upstream/current/inc/Module/Install/Makefile.pm
   packages/libmodule-signature-perl/branches/upstream/current/inc/Module/Install/Metadata.pm
   packages/libmodule-signature-perl/branches/upstream/current/inc/Module/Install/Scripts.pm
   packages/libmodule-signature-perl/branches/upstream/current/inc/Module/Install/Win32.pm
   packages/libmodule-signature-perl/branches/upstream/current/inc/Module/Install/WriteAll.pm
   packages/libmodule-signature-perl/branches/upstream/current/inc/Test/
   packages/libmodule-signature-perl/branches/upstream/current/inc/Test/Builder.pm
   packages/libmodule-signature-perl/branches/upstream/current/inc/Test/More.pm
   packages/libmodule-signature-perl/branches/upstream/current/lib/
   packages/libmodule-signature-perl/branches/upstream/current/lib/Module/
   packages/libmodule-signature-perl/branches/upstream/current/lib/Module/Signature.pm
   packages/libmodule-signature-perl/branches/upstream/current/script/
   packages/libmodule-signature-perl/branches/upstream/current/script/cpansign
   packages/libmodule-signature-perl/branches/upstream/current/t/
   packages/libmodule-signature-perl/branches/upstream/current/t/0-signature.t
   packages/libmodule-signature-perl/branches/upstream/current/t/1-basic.t
   packages/libmodule-signature-perl/tags/
Log:
[svn-inject] Installing original source of libmodule-signature-perl

Added: packages/libmodule-signature-perl/branches/upstream/current/AUTHORS
===================================================================
--- packages/libmodule-signature-perl/branches/upstream/current/AUTHORS	2006-03-15 14:10:18 UTC (rev 2352)
+++ packages/libmodule-signature-perl/branches/upstream/current/AUTHORS	2006-03-15 16:14:26 UTC (rev 2353)
@@ -0,0 +1,24 @@
+Here is a list of people and their CPAN id, extracted from the ChangeLog
+file and the mailing list archives.  These people have either submitted
+patches or suggestions, or their bug reports or comments have inspired
+the appropriate patches.  Corrections, additions, deletions welcome:
+
+Adam J. Foxson      (FOX)
+Alan Burlison       (ABURLISON)
+Arthur Bergman      (ABERGMAN)
+Andreas Koenig      (ANDK)
+Benjamin Goldberg   (GOLDBB)
+Blair Zajac         (BZAJAC)
+Dave Rolsky         (DROLSKY)
+Iain Truskett       (SPOON)
+Jarkko Hietaniemi   (JHI)
+Jos Boumans         (KANE)
+Mark Shelor
+Matt Southall
+Michael G Schwern   (MSCHWERN)
+Scott R. Godin
+Soren A
+Steve Hay           (SHAY)
+Tels                (TELS)
+Walt Mankowski
+William Wentworth-Sheilds

Added: packages/libmodule-signature-perl/branches/upstream/current/AUTRIJUS.pub
===================================================================
--- packages/libmodule-signature-perl/branches/upstream/current/AUTRIJUS.pub	2006-03-15 14:10:18 UTC (rev 2352)
+++ packages/libmodule-signature-perl/branches/upstream/current/AUTRIJUS.pub	2006-03-15 16:14:26 UTC (rev 2353)
@@ -0,0 +1,368 @@
+-----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-----

Added: packages/libmodule-signature-perl/branches/upstream/current/Changes
===================================================================
--- packages/libmodule-signature-perl/branches/upstream/current/Changes	2006-03-15 14:10:18 UTC (rev 2352)
+++ packages/libmodule-signature-perl/branches/upstream/current/Changes	2006-03-15 16:14:26 UTC (rev 2353)
@@ -0,0 +1,290 @@
+[Changes for 0.44 - 2004-12-16]
+
+* Add "pmfiles.dat" to legacy manifest_skip routine to accomodate
+  early Win32 hacks.  Reported by Steve Hay via Michael Schwern.
+
+[Changes for 0.43 - 2004-12-16]
+
+* Updated t/0-signature.t to be more friendly with Test::More;
+  contributed by Michael Schwern.
+
+* Add $Timeout (default 3 seconds) to control the timeout for
+  probing connections to the key server.
+
+* Take account of the .ts files produced by newer MakeMakers
+  in the suggested MANIFEST.SKIP list.
+
+[Changes for 0.42 - 2004-11-20]
+
+* Move under SVK version control management; ditch keyword tags.
+
+* Michael Schwern pointed out that during development, the
+  "signature.t" file would keep failing. 
+
+* Documented how to generate SIGNATURE files as part of "make dist",
+  for Module::Install, ExtUtils::MakeMaker and Module::Build users .
+
+[Changes for 0.41 - 2004-07-04]
+
+* Mark Shelor points out that support for Digest::SHA was broken.
+
+[Changes for 0.40 - 2004-07-01]
+
+* Dave Rolsky points out that GPG version detection always
+  returns '1'. (bug #6810)
+
+[Changes for 0.39 - 2004-06-17]
+
+* Supports Digest::SHA (now preferred) and Digest::SHA1::PurePerl,
+  in addition to the original Digest::SHA1 backend.
+
+* We now asks before importing the default keys,
+  also suggested by Tels.
+
+* Unknown cipher is made fatal, thanks to suggestion by Tels.
+
+* Apply Dave Rolsky's patch to verify that author's pubkey
+  is available on a keyserver. may need more work.
+
+[Changes for 0.38 - 2004-01-01]
+
+* Update to the newest Module::Install.
+
+* Not using inc/SCRIPT/ anymore.
+
+* Add "#defaults" and "^blibdirs$" to recommended MANIFEST.SKIP
+  to pacify newer ExtUtil::MakeMaker.
+
+* Starting to think about how to make "disttest" + "dist"
+  not signing twice.
+
+[Changes for 0.37 - 2003-11-06]
+
+* Move bin/cpansign to script/cpansign.
+
+* Make cpansign exit upon failure.
+
+[Changes for 0.36 - 2003-10-28]
+
+* Use sign(1) to autosign ourselves.
+
+* Soren A pointed out that hkp:// didn't work with GnuPG.
+
+[Changes for 0.25 - 2003-08-28]
+
+* Now ships with my pubkey and PAUSE's.
+
+* Interactive Makefile.PL, suggested by Jarkko.
+
+[Changes for 0.34 - 2003-08-18]
+
+* Don't ask user to install Crypt::OpenPGP if she does not have a
+  C compiler anyway.
+
+* ExtUtils::Manifest 1.38 does not support good enough skips even
+  for Makefile.PL, sigh.
+
+[Changes for 0.33 - 2003-08-12]
+
+* William Wentworth-Sheilds points out that META.yml is dynamic,
+  which makes SIGNATURE incorrect for people without either "diff"
+  or "gpg".  Fixed.
+
+[Changes for 0.32 - 2003-08-11]
+
+* Take Schwern's patch to only set _maniskip for legacy EU::Manifest.
+
+* Remove ::TieOut since we are not using it anymore.
+
+* Reduce noise for untrusted signatures to two lines.
+
+[Changes for 0.31 - 2003-08-10]
+
+* Scott R. Godin pointed out 0.30 had bad signature.  whoops.
+
+[Changes for 0.30 - 2003-08-10]
+
+* Add JHI to authors.
+
+* Patch from Michael Schwern: only let GnuPG display anything
+  if we're handling suspicious keys, not when you have added
+  the signer into the trustdb.
+
+* New global config variable, $Verbose.
+
+* MODULE_SIGNATURE_VERBOSE, MODULE_SIGNATURE_KEYSERVER and
+  MODULE_SIGNATURE_KEYSERVERPORT env variables are now respected.
+
+* Only supply _default_skip if our ExtUtils::MakeMaker is too old.
+
+[Changes for 0.29 - 2003-08-08]
+
+* Now fails gracefully all the time, including when incapable of
+  connecting to the keyserver.
+
+* Also, SHA1 sum is still checked even if the user does not have
+  GnuPg/Crypt::OpenPGP.
+
+* Hence, Crypt::OpenPGP is no longer a mandatory prerequisite even
+  for users without gnupg.
+
+* "0E0" is now made into a constant, CANNOT_VERIFY.
+
+* Do not die() when we absolutely can't verify.
+
+* BZAJAC pointed out that we should add .svn to _default_skip.
+
+[Changes for 0.28 - 2003-07-29]
+
+* Remove Digest.pm dependency.
+
+* Don't test for "diff -version" anymore -- not all diffs
+  have -version, thanks again to Alan Burlison.
+
+[Changes for 0.27 - 2003-07-28]
+
+* More punctuation cleanups in POD.
+
+* Michael Schwern pointed out that successful tests shouldn't be noisy.
+
+[Changes for 0.26 - 2003-07-17]
+
+* New internal function, _verify(), that takes $sigfile as its first
+  argument, eliminating the "local $Module::Signautre::SIGNATURE" approach.
+
+* sign() now also takes a skip=> parameter (defaults to true)
+  about whether to respect MANIFEST.SKIP.  This needs to be
+  set to 0 to sign blib/ archives.
+
+* Officially supporting signing and verification of PAR files, using PAR::Dist.
+
+* Let's ignore warnings when performing on exe files
+
+[Changes for 0.24 - 2003-07-08]
+
+* Preliminary PAR support.
+
+[Changes for 0.23 - 2003-07-07]
+
+* Ken Williams noted that M::B now works on 5.005.
+
+[Changes for 0.22 - 2003-05-15]
+
+* Move Signature.pm to lib/Module/Signature.pm.
+
+* Switch to the Module::Install framework.
+
+* Updates TODO to reflect correspondence with andk.
+
+* Matt Southall mentioned that, if somebody has never run gpg before,
+  we need to initialize it once before running test.
+
+* Warn about potential 'Makefile' exploit as pointed out by Tels.
+  Document pending.
+
+* Bugfix for incorrect 'MALFORMED' response to signatures made from 
+  older versions of GnuPG, as reported by Tels.
+
+[Changes for 0.18 - 2002-11-04]
+
+* Binary files handling on win32 was broken. (Jos Boumans)
+
+[Changes for 0.17 - 2002-10-30]
+
+* Resolve bug report by Iain Truskett: cpansign -s should not complain
+  manifest mismatch if SIGNATURE is lacking.
+
+* Also, bail out gracefully when signing fails, instead of crippling the
+  old SIGNATURE.
+
+* MANIFEST.SKIP doc lifted from Test::Signature.
+
+* Minor POD fixups.
+
+[Changes for 0.16 - 2002-10-28]
+
+* Adds AUTHORS file.
+
+* Added connectivity probing for testing.
+
+* Print a helpful success message after signing.
+
+* Don't cripple old SIGNATURE file.
+
+* Suggestion from Tels: skip the ambiguous 'optional'
+  probing for Crypt::OpenPGP if gnupg is there.
+
+[Changes for 0.15 - 2002-10-17]
+
+* Fixed compatibility with old MakeMaker versions, thanks to chromatic.
+
+* Fixed "no /dev/tty" bug during smoke testing,
+  as reported by the excellent CPAN Smokers.
+
+[Changes for 0.12 - 2002-10-12]
+
+* Supports automatic key retrieval, implemented in Crypt::OpenPGP.
+
+[Changes for 1.02 - 2002-10-12]
+
+* Fixed the default cipher from MD5 back to SHA1.
+
+[Changes for 0.10 - 2002-10-12]
+
+* Fixed a problem that prevents earlier versions of GnuPG from fetching
+  public keys via --keyserver-option=auto-key-retrieve.
+
+[Changes for 0.09 - 2002-10-12]
+
+* Documented the package variables so they become part of APIs.
+
+* Alternative (non-SHA1) ciphers in SIGNATUREs are now recognized.
+
+* Added a new return value, CIPHER_UNKNOWN.
+
+* Mention Test::Signature.
+
+* Ditch Test::More from the sample script.
+
+* Label tests.
+
+[Changes for 0.09 - 2002-10-11]
+
+* We're no longer alpha status; reflect in README.
+
+* Incoporated a suggestion from Tels: undefining the $KeyServer
+  package variable should disable automatic key-fetching.
+
+* Include the tests from Iain.
+
+* Tels: disable KeyServer fetching if it's undef'ed.
+
+[Changes for 0.07 - 2002-10-11]
+
+* Fixed our own signatures.
+
+[Changes for 0.06 - 2002-10-10]
+
+* Use many-arg system() instead of the one-arg form to prevent security breach.
+
+* Iain Truskett: fixed export bug so SIGNATURE_OK is properly exported.
+
+* Introduced global $KeyServer variable, default at 'pgp.mit.edu'.
+
+* Suggestion from Aurthur Bergman: cpansign without arg should DWIM.
+
+* Set a default keyserver for cpansign -v.
+
+* Use by-name params for functions. sign(override => $bool).
+
+[Changes for 0.05 - 2002-08-14]
+
+* Typo correction and safety checking.
+
+[Changes for 0.04 - 2002-08-14]
+
+* Added boilerplate text before SIGNATURE to explain what's it about.
+
+* Crypt::OpenPGP signature didn't work.
+
+* Add keyword expansion tags.

Added: packages/libmodule-signature-perl/branches/upstream/current/MANIFEST
===================================================================
--- packages/libmodule-signature-perl/branches/upstream/current/MANIFEST	2006-03-15 14:10:18 UTC (rev 2352)
+++ packages/libmodule-signature-perl/branches/upstream/current/MANIFEST	2006-03-15 16:14:26 UTC (rev 2353)
@@ -0,0 +1,28 @@
+AUTHORS
+AUTRIJUS.pub
+Changes
+inc/ExtUtils/AutoInstall.pm
+inc/Module/Install.pm
+inc/Module/Install/AutoInstall.pm
+inc/Module/Install/Base.pm
+inc/Module/Install/Can.pm
+inc/Module/Install/Fetch.pm
+inc/Module/Install/Include.pm
+inc/Module/Install/Makefile.pm
+inc/Module/Install/Metadata.pm
+inc/Module/Install/Scripts.pm
+inc/Module/Install/Win32.pm
+inc/Module/Install/WriteAll.pm
+inc/Test/Builder.pm
+inc/Test/More.pm
+lib/Module/Signature.pm
+Makefile.PL
+MANIFEST			This list of files
+META.yml
+PAUSE2003.pub
+README
+script/cpansign
+SIGNATURE
+t/0-signature.t
+t/1-basic.t
+TODO

Added: packages/libmodule-signature-perl/branches/upstream/current/META.yml
===================================================================
--- packages/libmodule-signature-perl/branches/upstream/current/META.yml	2006-03-15 14:10:18 UTC (rev 2352)
+++ packages/libmodule-signature-perl/branches/upstream/current/META.yml	2006-03-15 16:14:26 UTC (rev 2353)
@@ -0,0 +1,16 @@
+name: Module-Signature
+version: 0.44
+abstract: Module signature file manipulation
+author: Autrijus Tang (autrijus at autrijus.org)
+license: perl
+distribution_type: module
+build_requires:
+  Test::More: 0
+requires:
+  perl: 5.005
+recommends:
+  PAR::Dist: 0
+no_index:
+  directory:
+    - inc
+generated_by: Module::Install version 0.36

Added: packages/libmodule-signature-perl/branches/upstream/current/Makefile.PL
===================================================================
--- packages/libmodule-signature-perl/branches/upstream/current/Makefile.PL	2006-03-15 14:10:18 UTC (rev 2352)
+++ packages/libmodule-signature-perl/branches/upstream/current/Makefile.PL	2006-03-15 16:14:26 UTC (rev 2353)
@@ -0,0 +1,134 @@
+#!/usr/bin/perl
+
+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');
+
+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,
+    ],
+) if want_openpgp();
+
+features(
+    'Display checksum differences' => [
+	recommends( 'Algorithm::Diff' => 0 ),
+	recommends( 'Text::Diff'      => 0 ),
+    ],
+) unless (can_run('diff'));
+
+features(
+    'Sign and verify PAR (Perl Archive) files' => [
+	-default => 0,
+	recommends( 'PAR::Dist'	=> 0 ),
+    ],
+);
+
+include('ExtUtils/AutoInstall.pm');
+build_requires('Test::More');
+auto_include_deps();
+auto_install( -default => 0 );
+
+&WriteAll( sign => 1 );
+
+my $make = eval { require Config; $Config{make} } || 'make';
+print "\nNow, please enter '$make test' to test, and '$make install' to install.\n";
+
+sub locate_openpgp {
+    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;
+    }
+}
+
+sub locate_gpg {
+    print "*** Looking for GnuPG (GNU Privacy Guard, a cryptographic signature tool)...\n";
+
+    my $gpg = can_run('gpg');
+    my $has_gpg = (
+	$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 "GnugPG not found anywhere in your PATH, eek.\n";
+    return;
+}
+
+sub want_openpgp {
+    return if (locate_gpg() or locate_openpgp());
+
+    print << '.';
+
+What do you want me to do?
+1) Let you install GnuPG manually while I'm waiting for your answer;
+   it is available at http://www.gnupg.org/download/.
+.
+
+    my $punt = 2;
+    if (can_cc()) {
+	$punt++;
+	print << '.';
+2) Automatically install Crypt::OpenPGP and the 20 modules it requires
+   from CPAN, which will give the same functionality as GnuPG.
+.
+    }
+
+    print << ".";
+$punt) Forget this cryptographic signature stuff for now. 
+.
+
+    my $choice;
+    while (1) {
+	$choice = prompt("Your choice:", 3) || 3;
+	last if $choice =~ /^[123]$/;
+	print "Sorry, I cannot understand '$choice'.\n"
+    }
+
+    goto &want_openpgp if $choice == 1;
+    return if $choice == $punt;
+    return 1;
+}

Added: packages/libmodule-signature-perl/branches/upstream/current/PAUSE2003.pub
===================================================================
--- packages/libmodule-signature-perl/branches/upstream/current/PAUSE2003.pub	2006-03-15 14:10:18 UTC (rev 2352)
+++ packages/libmodule-signature-perl/branches/upstream/current/PAUSE2003.pub	2006-03-15 16:14:26 UTC (rev 2353)
@@ -0,0 +1,31 @@
+-----BEGIN PGP PUBLIC KEY BLOCK-----
+Version: OpenKeyServer v1.2
+Comment: Extracted from belgium.keyserver.net
+
+mQGiBD4+cJARBACxOByY0SJBBuJoFrH2hoqRFny423gY6V3jq1uTgGY/PPaxP+Sq
+r3RzxPct4vJcsoo48pwBsMHLrWfORq26zb6eKgmMq/CQo2gzaRbeRxCi3ke4KBmu
+aREi6RjaZSU94yABtDmspUBrpYV8zfZMv5ZIQlg9W1Tu66BFOUrrNeDpKwCgosCp
+9dtNAMhHkzxs8UJH5i3Uzb0D/0VLoAE8sOfUXqjc38rxiHuGBFSNC70Ih4mzGUCJ
+MGT4z1X3K6uUawnXMoc8XqPaYnEgOzztMymydtr+urjUwcGnuXDSpV6nulE5irxh
+zlikSTJy/42QzTMcrdRynffmJo9PRgymMI8GgWaYG5g3zzGAhi5BA6G8JKfC93IV
+xiRPBACXJpLBYQljqJY9UDNJuq8nHhKiWHBXdZzrC3LM0FSF3PKuP/ugc+KBIKXm
+clNPNFKla/SRbH6dMHsGIy8wnGPI5AtTS0roNQrttv3/ghRT7+OKXrGmBxZ/KHVr
+v3PVgiRA5MDr1mIsovfuc9WQnFu2TkgnN/F3pDcrVVSi5b+rZLQzUEFVU0UgQmF0
+Y2ggU2lnbmluZyBLZXkgMjAwMyA8cGF1c2VAcGF1c2UucGVybC5vcmc+iF8EExEC
+AB8FAj4+cJAFCQPCZwAECwcDAgMVAgMDFgIBAh4BAheAAAoJEDKNqGdFD4nsd4sA
+n3gYvr37VkUycx61wm5t4BoSO904AJ9dkl/zU5BbDnXEPKk0FNWFSnwnxbkCDQQ+
+PnCyEAgAjAKDcvpogvJvSrg3rkstDhxP4O+JZvfxzrdL9Qk0FPBlb31ECxPMBf2z
+KObrwGKwxgD3+lSb/y9SgOYnAsuwztn6BqjQ8AVKiI0MFDTa+tLrtY5860X7TxJD
+9bzMx/A4gEsYoFZYR4s/alGAzcqFcdQ2IiFnKE4KPtNXEMQ67lCEw5zdYSoJta9J
+UKsCX3KI/DOne1NnjNZL2dQadqjsEc8mjvUOTXSG1sCawzTP5tNoPHg13GeyJ0XG
+HbHY35BbF33yr9kP76+zQFaiMyLDUnyQAU/0P+rm/I6Ts6q4OZwKK/tC5LD0SPDe
+08uAzkb4krRqxheo6seHdT7HjdDbKwADBgf/RGpQhhZc+F9o79S9aLV4XnY5CFev
+4EJvUqq6TF9V0rvZg148mbO/b8EtOfcBSdvAfo3H8w6wcC7X8Kt/6Pl69UZKuQOt
+354092gTrjJyg1uZBK9Ey/LSh0k+BNCfIw04+6W8ijARkpdoBrU3CwDKTyroWYkS
+FDkkzLvJRTkMpVpqyI0xIEExPXZTf67Abv1dzceTDciblLJfQcsfDyWYv8D12ELE
+zLYQnFM1s6yD6Q51Xk/XQ6MJ59bB3uuFO8VpkCMEvqIxZXsLjgqyQgo73y1qFizs
+KnFG+TTvooBdG3yqSt9OsLSoRrJkZbMX3PKpbT0ceWL8dULc1v2ol4fJGohMBBgR
+AgAMBQI+PnCyBQkDwmcAAAoJEDKNqGdFD4nsS44An14sFX5E2jJc87HFJeqPmeas
+hdayAKCCmOqjo0CW5uepN19pXdP7BujUOw==
+=ocE3
+-----END PGP PUBLIC KEY BLOCK-----

Added: packages/libmodule-signature-perl/branches/upstream/current/README
===================================================================
--- packages/libmodule-signature-perl/branches/upstream/current/README	2006-03-15 14:10:18 UTC (rev 2352)
+++ packages/libmodule-signature-perl/branches/upstream/current/README	2006-03-15 16:14:26 UTC (rev 2353)
@@ -0,0 +1,21 @@
+This is the README file for Module::Signature, a module to
+check and create SIGNATURE files for CPAN distributions.
+
+* Installation
+
+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
+
+* Copyright
+
+Copyright 2002, 2003, 2004 by Autrijus Tang <autrijus at autrijus.org>.
+
+All rights reserved.  You can redistribute and/or modify
+this bundle under the same terms as Perl itself.
+
+See <http://www.perl.com/perl/misc/Artistic.html>.

Added: packages/libmodule-signature-perl/branches/upstream/current/SIGNATURE
===================================================================
--- packages/libmodule-signature-perl/branches/upstream/current/SIGNATURE	2006-03-15 14:10:18 UTC (rev 2352)
+++ packages/libmodule-signature-perl/branches/upstream/current/SIGNATURE	2006-03-15 16:14:26 UTC (rev 2353)
@@ -0,0 +1,50 @@
+This file contains message digests of all files listed in MANIFEST,
+signed via the Module::Signature module, version 0.42.
+
+To verify the content in this distribution, first make sure you have
+Module::Signature installed, then type:
+
+    % cpansign -v
+
+It will check each file's integrity, as well as the signature's
+validity.  If "==> Signature verified OK! <==" is not displayed,
+the distribution may already have been compromised, and you should
+not run its Makefile.PL or Build.PL.
+
+-----BEGIN PGP SIGNED MESSAGE-----
+Hash: SHA1
+
+SHA1 6b29cb3b011d6dd95e512361c6b4ce2f5a8cdb17 AUTHORS
+SHA1 e3d33ad00ef3d1a151a20f2ca0259370198ed837 AUTRIJUS.pub
+SHA1 6a0fbc62cd2d6be73f90a8ba2fecd2f32724c9dd Changes
+SHA1 106e3d36e8ef72c765753635cd006df64d07a1fd MANIFEST
+SHA1 ad594608e587bf9c3c6a5c7fce7ad9901d7c7b8c META.yml
+SHA1 f75067726286d7d8d7f936f5d9747020ef8eccfe 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 ad7d30f2b8e7f62006bd64a64759049af0cd97bb t/0-signature.t
+SHA1 307a744384e704d94031df73233f24174b843bc8 t/1-basic.t
+-----BEGIN PGP SIGNATURE-----
+Version: GnuPG v1.2.6 (FreeBSD)
+
+iD8DBQFBwTWMtLPdNzw1AaARAuN0AKCBz2vZwBGTOUADRYIiYHhLv7ZrNwCgjNJL
+O2odqvSr2ODE/plPnTjG4YM=
+=J63o
+-----END PGP SIGNATURE-----

Added: packages/libmodule-signature-perl/branches/upstream/current/TODO
===================================================================
--- packages/libmodule-signature-perl/branches/upstream/current/TODO	2006-03-15 14:10:18 UTC (rev 2352)
+++ packages/libmodule-signature-perl/branches/upstream/current/TODO	2006-03-15 16:14:26 UTC (rev 2353)
@@ -0,0 +1,3 @@
+
+- PKI.
+

Added: packages/libmodule-signature-perl/branches/upstream/current/inc/ExtUtils/AutoInstall.pm
===================================================================
--- packages/libmodule-signature-perl/branches/upstream/current/inc/ExtUtils/AutoInstall.pm	2006-03-15 14:10:18 UTC (rev 2352)
+++ packages/libmodule-signature-perl/branches/upstream/current/inc/ExtUtils/AutoInstall.pm	2006-03-15 16:14:26 UTC (rev 2353)
@@ -0,0 +1,646 @@
+#line 1 "inc/ExtUtils/AutoInstall.pm - /usr/local/lib/perl5/site_perl/5.8.5/ExtUtils/AutoInstall.pm"
+package ExtUtils::AutoInstall;
+$ExtUtils::AutoInstall::VERSION = '0.61';
+
+use strict;
+use Cwd ();
+use ExtUtils::MakeMaker ();
+
+#line 305
+
+# special map on pre-defined feature sets
+my %FeatureMap = (
+    ''      => 'Core Features', # XXX: deprecated
+    '-core' => 'Core Features',
+);
+
+# various lexical flags
+my (@Missing, @Existing, %DisabledTests, $UnderCPAN, $HasCPANPLUS);
+my ($Config, $CheckOnly, $SkipInstall, $AcceptDefault, $TestOnly);
+my ($PostambleActions, $PostambleUsed);
+
+_accept_default(!-t STDIN); # see if it's a non-interactive session
+_init();
+
+sub _accept_default {
+    $AcceptDefault = shift;
+}
+
+sub missing_modules {
+    return @Missing;
+}
+
+sub do_install {
+    __PACKAGE__->install(
+        [ UNIVERSAL::isa($Config, 'HASH') ? %{$Config} : @{$Config}],
+        @Missing,
+    );
+}
+
+# initialize various flags, and/or perform install
+sub _init {
+    foreach my $arg (@ARGV, split(/[\s\t]+/, $ENV{PERL_EXTUTILS_AUTOINSTALL} || '')) {
+        if ($arg =~ /^--config=(.*)$/) {
+            $Config = [ split(',', $1) ];
+        }
+        elsif ($arg =~ /^--installdeps=(.*)$/) {
+            __PACKAGE__->install($Config, @Missing = split(/,/, $1));
+            exit 0;
+        }
+        elsif ($arg =~ /^--default(?:deps)?$/) {
+            $AcceptDefault = 1;
+        }
+        elsif ($arg =~ /^--check(?:deps)?$/) {
+            $CheckOnly = 1;
+        }
+        elsif ($arg =~ /^--skip(?:deps)?$/) {
+            $SkipInstall = 1;
+        }
+        elsif ($arg =~ /^--test(?:only)?$/) {
+            $TestOnly = 1;
+        }
+    }
+}
+
+# overrides MakeMaker's prompt() to automatically accept the default choice
+sub _prompt {
+    goto &ExtUtils::MakeMaker::prompt unless $AcceptDefault;
+
+    my ($prompt, $default) = @_;
+    my $y = ($default =~ /^[Yy]/);
+
+    print $prompt, ' [', ($y ? 'Y' : 'y'), '/', ($y ? 'n' : 'N'), '] ';
+    print "$default\n";
+    return $default;
+}
+
+# the workhorse
+sub import {
+    my $class = shift;
+    my @args  = @_ or return;
+    my $core_all;
+
+    print "*** $class version ".$class->VERSION."\n";
+    print "*** Checking for dependencies...\n";
+
+    my $cwd = Cwd::cwd();
+
+    $Config  = [];
+
+    my $maxlen = length((sort { length($b) <=> length($a) }
+        grep { /^[^\-]/ }
+        map { ref($_) ? keys %{ref($_) eq 'HASH' ? $_ : +{@{$_}}} : '' }
+        map { +{@args}->{$_} }
+        grep { /^[^\-]/ or /^-core$/i } keys %{+{@args}})[0]);
+
+    while (my ($feature, $modules) = splice(@args, 0, 2)) {
+        my (@required, @tests, @skiptests);
+        my $default  = 1;
+        my $conflict = 0;
+
+        if ($feature =~ m/^-(\w+)$/) {
+            my $option = lc($1);
+
+            # check for a newer version of myself
+            _update_to($modules, @_) and return if $option eq 'version';
+
+            # sets CPAN configuration options
+            $Config = $modules                  if $option eq 'config';
+
+            # promote every features to core status
+            $core_all = ($modules =~ /^all$/i) and next
+                if $option eq 'core';
+
+            next unless $option eq 'core';
+        }
+
+        print "[".($FeatureMap{lc($feature)} || $feature)."]\n";
+
+        $modules = [ %{$modules} ] if UNIVERSAL::isa($modules, 'HASH');
+
+        unshift @$modules, -default => &{shift(@$modules)}
+            if (ref($modules->[0]) eq 'CODE'); # XXX: bugward combatability
+
+        while (my ($mod, $arg) = splice(@$modules, 0, 2)) {
+            if ($mod =~ m/^-(\w+)$/) {
+                my $option = lc($1);
+
+                $default   = $arg    if ($option eq 'default');
+                $conflict  = $arg    if ($option eq 'conflict');
+                @tests     = @{$arg} if ($option eq 'tests');
+                @skiptests = @{$arg} if ($option eq 'skiptests');
+
+                next;
+            }
+
+            printf("- %-${maxlen}s ...", $mod);
+
+            # XXX: check for conflicts and uninstalls(!) them.
+            if (defined(my $cur = _version_check(_load($mod), $arg ||= 0))) {
+                print "loaded. ($cur".($arg ? " >= $arg" : '').")\n";
+                push @Existing, $mod => $arg;
+                $DisabledTests{$_} = 1 for map { glob($_) } @skiptests;
+            }
+            else {
+                print "missing." . ($arg ? " (would need $arg)" : '') . "\n";
+                push @required, $mod => $arg;
+            }
+        }
+
+        next unless @required;
+
+        my $mandatory = ($feature eq '-core' or $core_all);
+
+        if (!$SkipInstall and ($CheckOnly or _prompt(
+            qq{==> Auto-install the }. (@required / 2).
+            ($mandatory ? ' mandatory' : ' optional').
+            qq{ module(s) from CPAN?}, $default ? 'y' : 'n',
+        ) =~ /^[Yy]/)) {
+            push (@Missing, @required);
+            $DisabledTests{$_} = 1 for map { glob($_) } @skiptests;
+        }
+
+        elsif (!$SkipInstall and $default and $mandatory and _prompt(
+            qq{==> The module(s) are mandatory! Really skip?}, 'n',
+        ) =~ /^[Nn]/) {
+            push (@Missing, @required);
+            $DisabledTests{$_} = 1 for map { glob($_) } @skiptests;
+        }
+
+        else {
+            $DisabledTests{$_} = 1 for map { glob($_) } @tests;
+        }
+    }
+
+    _check_lock(); # check for $UnderCPAN
+
+    if (@Missing and not ($CheckOnly or $UnderCPAN)) {
+        require Config;
+        print "*** Dependencies will be installed the next time you type '$Config::Config{make}'.\n";
+        # make an educated guess of whether we'll need root permission.
+        print "    (You may need to do that as the 'root' user.)\n" if eval '$>';
+    }
+    print "*** $class configuration finished.\n";
+
+    chdir $cwd;
+
+    # import to main::
+    no strict 'refs';
+    *{'main::WriteMakefile'} = \&Write if caller(0) eq 'main';
+}
+
+# CPAN.pm is non-reentrant, so check if we're under it and have no CPANPLUS
+sub _check_lock {
+    return unless @Missing;
+    return if _has_cpanplus();
+
+    require CPAN; CPAN::Config->load;
+    my $lock = MM->catfile($CPAN::Config->{cpan_home}, ".lock");
+
+    if (-f $lock and open(LOCK, $lock)
+        and ($^O eq 'MSWin32' ? _under_cpan() : <LOCK> == getppid())
+        and ($CPAN::Config->{prerequisites_policy} || '') ne 'ignore'
+    ) {
+        print << '.';
+
+*** Since we're running under CPAN, I'll just let it take care
+    of the dependency's installation later.
+.
+        $UnderCPAN = 1;
+    }
+
+    close LOCK;
+}
+
+sub install {
+    my $class  = shift;
+
+    my $i; # used below to strip leading '-' from config keys
+    my @config = (map { s/^-// if ++$i; $_ } @{+shift});
+
+    my (@modules, @installed);
+    while (my ($pkg, $ver) = splice(@_, 0, 2)) {
+        # grep out those already installed
+        if (defined(_version_check(_load($pkg), $ver))) {
+            push @installed, $pkg;
+        }
+        else {
+            push @modules, $pkg, $ver;
+        }
+    }
+
+    return @installed unless @modules; # nothing to do
+
+    print "*** Installing dependencies...\n";
+
+    return unless _connected_to('cpan.org');
+
+    my %args = @config;
+    my %failed;
+    local *FAILED;
+    if ($args{do_once} and open(FAILED, '.#autoinstall.failed')) {
+        while (<FAILED>) { chomp; $failed{$_}++ }
+        close FAILED;
+
+        my @newmod;
+        while (my ($k, $v) = splice(@modules, 0, 2)) {
+            push @newmod, ($k => $v) unless $failed{$k};
+        }
+        @modules = @newmod;
+    }
+
+    if (_has_cpanplus()) {
+        _install_cpanplus(\@modules, \@config);
+    }
+    else {
+        _install_cpan(\@modules, \@config);
+    }
+
+    print "*** $class installation finished.\n";
+
+    # see if we have successfully installed them
+    while (my ($pkg, $ver) = splice(@modules, 0, 2)) {
+        if (defined(_version_check(_load($pkg), $ver))) {
+            push @installed, $pkg;
+        }
+        elsif ($args{do_once} and open(FAILED, '>> .#autoinstall.failed')) {
+            print FAILED "$pkg\n";
+        }
+    }
+
+    close FAILED if $args{do_once};
+
+    return @installed;
+}
+
+sub _install_cpanplus {
+    my @modules = @{+shift};
+    my @config  = @{+shift};
+    my $installed = 0;
+
+    require CPANPLUS::Backend;
+    my $cp   = CPANPLUS::Backend->new;
+    my $conf = $cp->configure_object;
+
+    return unless _can_write(
+        $conf->can('conf')
+            ? $conf->get_conf('base')       # 0.05x+
+            : $conf->_get_build('base')     # 0.04x
+    );
+
+    # if we're root, set UNINST=1 to avoid trouble unless user asked for it.
+    my $makeflags = $conf->get_conf('makeflags') || '';
+    if (UNIVERSAL::isa($makeflags, 'HASH')) {
+        # 0.03+ uses a hashref here
+        $makeflags->{UNINST} = 1 unless exists $makeflags->{UNINST};
+    }
+    else {
+        # 0.02 and below uses a scalar
+        $makeflags = join(' ', split(' ', $makeflags), 'UNINST=1')
+            if ($makeflags !~ /\bUNINST\b/ and eval qq{ $> eq '0' });
+    }
+    $conf->set_conf(makeflags => $makeflags);
+    $conf->set_conf(prereqs => 1);
+
+    while (my ($key, $val) = splice(@config, 0, 2)) {
+        eval { $conf->set_conf($key, $val) };
+    }
+
+    my $modtree = $cp->module_tree;
+    while (my ($pkg, $ver) = splice(@modules, 0, 2)) {
+        print "*** Installing $pkg...\n";
+
+        MY::preinstall($pkg, $ver) or next if defined &MY::preinstall;
+
+        my $success;
+        my $obj = $modtree->{$pkg};
+
+        if ($obj and defined(_version_check($obj->{version}, $ver))) {
+            my $pathname = $pkg; $pathname =~ s/::/\\W/;
+
+            foreach my $inc (grep { m/$pathname.pm/i } keys(%INC)) {
+                delete $INC{$inc};
+            }
+
+            my $rv = $cp->install( modules => [ $obj->{module} ]);
+
+            if ($rv and ($rv->{$obj->{module}} or $rv->{ok})) {
+                print "*** $pkg successfully installed.\n";
+                $success = 1;
+            }
+            else {
+                print "*** $pkg installation cancelled.\n";
+                $success = 0;
+            }
+
+            $installed += $success;
+        }
+        else {
+            print << ".";
+*** Could not find a version $ver or above for $pkg; skipping.
+.
+        }
+
+        MY::postinstall($pkg, $ver, $success) if defined &MY::postinstall;
+    }
+
+    return $installed;
+}
+
+sub _install_cpan {
+    my @modules = @{+shift};
+    my @config  = @{+shift};
+    my $installed = 0;
+    my %args;
+
+    require CPAN; CPAN::Config->load;
+
+    return unless _can_write(MM->catfile($CPAN::Config->{cpan_home}, 'sources'));
+
+    # if we're root, set UNINST=1 to avoid trouble unless user asked for it.
+    my $makeflags = $CPAN::Config->{make_install_arg} || '';
+    $CPAN::Config->{make_install_arg} = join(' ', split(' ', $makeflags), 'UNINST=1')
+        if ($makeflags !~ /\bUNINST\b/ and eval qq{ $> eq '0' });
+
+    # don't show start-up info
+    $CPAN::Config->{inhibit_startup_message} = 1;
+
+    # set additional options
+    while (my ($opt, $arg) = splice(@config, 0, 2)) {
+        ($args{$opt} = $arg, next)
+            if $opt =~ /^force$/; # pseudo-option
+        $CPAN::Config->{$opt} = $arg;
+    }
+
+    local $CPAN::Config->{prerequisites_policy} = 'follow';
+
+    while (my ($pkg, $ver) = splice(@modules, 0, 2)) {
+        MY::preinstall($pkg, $ver) or next if defined &MY::preinstall;
+
+        print "*** Installing $pkg...\n";
+
+        my $obj = CPAN::Shell->expand(Module => $pkg);
+        my $success = 0;
+
+        if ($obj and defined(_version_check($obj->cpan_version, $ver))) {
+            my $pathname = $pkg; $pathname =~ s/::/\\W/;
+
+            foreach my $inc (grep { m/$pathname.pm/i } keys(%INC)) {
+                delete $INC{$inc};
+            }
+
+            $obj->force('install') if $args{force};
+
+            my $rv = $obj->install || eval { 
+                $CPAN::META->instance(
+                    'CPAN::Distribution',
+                    $obj->cpan_file,
+                )->{install} if $CPAN::META
+            };
+
+            if ($rv eq 'YES') {
+                print "*** $pkg successfully installed.\n";
+                $success = 1;
+            }
+            else {
+                print "*** $pkg installation failed.\n";
+                $success = 0;
+            }
+
+            $installed += $success;
+        }
+        else {
+            print << ".";
+*** Could not find a version $ver or above for $pkg; skipping.
+.
+        }
+
+        MY::postinstall($pkg, $ver, $success) if defined &MY::postinstall;
+    }
+
+    return $installed;
+}
+
+sub _has_cpanplus {
+    return (
+        $HasCPANPLUS = (
+            $INC{'CPANPLUS/Config.pm'} or
+            _load('CPANPLUS::Shell::Default')
+        )
+    );
+}
+
+# make guesses on whether we're under the CPAN installation directory
+sub _under_cpan {
+    require Cwd;
+    require File::Spec;
+
+    my $cwd  = File::Spec->canonpath(Cwd::cwd());
+    my $cpan = File::Spec->canonpath($CPAN::Config->{cpan_home});
+
+    return (index($cwd, $cpan) > -1);
+}
+
+sub _update_to {
+    my $class = __PACKAGE__;
+    my $ver   = shift;
+
+    return if defined(_version_check(_load($class), $ver)); # no need to upgrade
+
+    if (_prompt(
+        "==> A newer version of $class ($ver) is required. Install?", 'y'
+    ) =~ /^[Nn]/) {
+        die "*** Please install $class $ver manually.\n";
+    }
+
+    print << ".";
+*** Trying to fetch it from CPAN...
+.
+
+    # install ourselves
+    _load($class) and return $class->import(@_)
+        if $class->install([], $class, $ver);
+
+    print << '.'; exit 1;
+
+*** Cannot bootstrap myself. :-( Installation terminated.
+.
+}
+
+# check if we're connected to some host, using inet_aton
+sub _connected_to {
+    my $site = shift;
+
+    return (
+        ( _load('Socket') and Socket::inet_aton($site) ) or _prompt(qq(
+*** Your host cannot resolve the domain name '$site', which
+    probably means the Internet connections are unavailable.
+==> Should we try to install the required module(s) anyway?), 'n'
+        ) =~ /^[Yy]/
+    );
+}
+
+# check if a directory is writable; may create it on demand
+sub _can_write {
+    my $path = shift;
+    mkdir ($path, 0755) unless -e $path;
+
+    require Config;
+    return 1 if -w $path and -w $Config::Config{sitelib};
+
+    print << ".";
+*** You are not allowed to write to the directory '$path';
+    the installation may fail due to insufficient permissions.
+.
+
+    if (eval '$>' and lc(`sudo -V`) =~ /version/ and _prompt(qq(
+==> Should we try to re-execute the autoinstall process with 'sudo'?), 'y'
+    ) =~ /^[Yy]/) {
+        # try to bootstrap ourselves from sudo
+        print << ".";
+*** Trying to re-execute the autoinstall process with 'sudo'...
+.
+        my $missing = join(',', @Missing);
+        my $config  = join(',',
+            UNIVERSAL::isa($Config, 'HASH') ? %{$Config} : @{$Config}
+        ) if $Config;
+
+        return unless system('sudo', $^X, $0, "--config=$config", "--installdeps=$missing");
+
+        print << ".";
+*** The 'sudo' command exited with error!  Resuming...
+.
+    }
+
+    return _prompt(qq(
+==> Should we try to install the required module(s) anyway?), 'n'
+    ) =~ /^[Yy]/
+}
+
+# load a module and return the version it reports
+sub _load {
+    my $mod = pop; # class/instance doesn't matter
+    my $file = $mod;
+
+    $file =~ s|::|/|g;
+    $file .= '.pm';
+
+    local $@;
+    return eval { require $file; $mod->VERSION } || ($@ ? undef : 0);
+}
+
+# compare two versions, either use Sort::Versions or plain comparison
+sub _version_check {
+    my ($cur, $min) = @_;
+    return unless defined $cur;
+
+    $cur =~ s/\s+$//;
+
+    # check for version numbers that are not in decimal format
+    if (ref($cur) or ref($min) or $cur =~ /v|\..*\./ or $min =~ /v|\..*\./) {
+        if ($version::VERSION or defined(_load('version'))) {
+            # use version.pm if it is installed.
+            return ((version->new($cur) >= version->new($min)) ? $cur : undef);
+        }
+        elsif ($Sort::Versions::VERSION or defined(_load('Sort::Versions'))) {
+            # use Sort::Versions as the sorting algorithm for a.b.c versions
+            return ((Sort::Versions::versioncmp($cur, $min) != -1) ? $cur : undef);
+        }
+
+        warn "Cannot reliably compare non-decimal formatted versions.\n".
+             "Please install version.pm or Sort::Versions.\n";
+    }
+
+    # plain comparison
+    local $^W = 0; # shuts off 'not numeric' bugs
+    return ($cur >= $min ? $cur : undef);
+}
+
+# nothing; this usage is deprecated.
+sub main::PREREQ_PM { return {}; }
+
+sub _make_args {
+    my %args = @_;
+
+    $args{PREREQ_PM} = { %{$args{PREREQ_PM} || {} }, @Existing, @Missing }
+        if $UnderCPAN or $TestOnly;
+
+    if ($args{EXE_FILES}) {
+        require ExtUtils::Manifest;
+        my $manifest = ExtUtils::Manifest::maniread('MANIFEST');
+
+        $args{EXE_FILES} = [
+            grep { exists $manifest->{$_} } @{$args{EXE_FILES}}
+        ];
+    }
+
+    $args{test}{TESTS} ||= 't/*.t';
+    $args{test}{TESTS} = join(' ', grep {
+        !exists($DisabledTests{$_})
+    } map { glob($_) } split(/\s+/, $args{test}{TESTS}));
+
+    my $missing = join(',', @Missing);
+    my $config  = join(',',
+        UNIVERSAL::isa($Config, 'HASH') ? %{$Config} : @{$Config}
+    ) if $Config;
+
+    $PostambleActions = (
+        $missing ? "\$(PERL) $0 --config=$config --installdeps=$missing"
+                 : "\@\$(NOOP)"
+    );
+
+    return %args;
+}
+
+# a wrapper to ExtUtils::MakeMaker::WriteMakefile
+sub Write {
+    require Carp;
+    Carp::croak "WriteMakefile: Need even number of args" if @_ % 2;
+
+    if ($CheckOnly) {
+        print << ".";
+*** Makefile not written in check-only mode.
+.
+        return;
+    }
+
+    my %args = _make_args(@_);
+
+    no strict 'refs';
+
+    $PostambleUsed = 0;
+    local *MY::postamble = \&postamble unless defined &MY::postamble;
+    ExtUtils::MakeMaker::WriteMakefile(%args);
+
+    print << "." unless $PostambleUsed;
+*** WARNING: Makefile written with customized MY::postamble() without
+    including contents from ExtUtils::AutoInstall::postamble() --
+    auto installation features disabled.  Please contact the author.
+.
+
+    return 1;
+}
+
+sub postamble {
+    $PostambleUsed = 1;
+
+    return << ".";
+
+config :: installdeps
+\t\@\$(NOOP)
+
+checkdeps ::
+\t\$(PERL) $0 --checkdeps
+
+installdeps ::
+\t$PostambleActions
+
+.
+
+}
+
+1;
+
+__END__
+
+#line 970

Added: packages/libmodule-signature-perl/branches/upstream/current/inc/Module/Install/AutoInstall.pm
===================================================================
--- packages/libmodule-signature-perl/branches/upstream/current/inc/Module/Install/AutoInstall.pm	2006-03-15 14:10:18 UTC (rev 2352)
+++ packages/libmodule-signature-perl/branches/upstream/current/inc/Module/Install/AutoInstall.pm	2006-03-15 16:14:26 UTC (rev 2353)
@@ -0,0 +1,62 @@
+#line 1 "inc/Module/Install/AutoInstall.pm - /usr/local/lib/perl5/site_perl/5.8.5/Module/Install/AutoInstall.pm"
+package Module::Install::AutoInstall;
+use Module::Install::Base; @ISA = qw(Module::Install::Base);
+
+sub AutoInstall { $_[0] }
+
+sub run {
+    my $self = shift;
+    $self->auto_install_now(@_);
+}
+
+sub write {
+    my $self = shift;
+    $self->auto_install(@_);
+}
+
+sub auto_install {
+    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);
+    }
+
+    ExtUtils::AutoInstall->import(
+        (@core ? (-core => \@core) : ()), @_, $self->features
+    );
+
+    $self->makemaker_args( ExtUtils::AutoInstall::_make_args() );
+
+    my $class = ref($self);
+    $self->postamble(
+        "# --- $class section:\n" .
+        ExtUtils::AutoInstall::postamble()
+    );
+}
+
+sub auto_install_now {
+    my $self = shift;
+    $self->auto_install;
+    ExtUtils::AutoInstall::do_install();
+}
+
+1;

Added: packages/libmodule-signature-perl/branches/upstream/current/inc/Module/Install/Base.pm
===================================================================
--- packages/libmodule-signature-perl/branches/upstream/current/inc/Module/Install/Base.pm	2006-03-15 14:10:18 UTC (rev 2352)
+++ packages/libmodule-signature-perl/branches/upstream/current/inc/Module/Install/Base.pm	2006-03-15 16:14:26 UTC (rev 2353)
@@ -0,0 +1,54 @@
+#line 1 "inc/Module/Install/Base.pm - /usr/local/lib/perl5/site_perl/5.8.5/Module/Install/Base.pm"
+package Module::Install::Base;
+
+#line 28
+
+sub new {
+    my ($class, %args) = @_;
+
+    foreach my $method (qw(call load)) {
+        *{"$class\::$method"} = sub {
+            +shift->_top->$method(@_);
+        } unless defined &{"$class\::$method"};
+    }
+
+    bless(\%args, $class);
+}
+
+#line 46
+
+sub AUTOLOAD {
+    my $self = shift;
+    goto &{$self->_top->autoload};
+}
+
+#line 57
+
+sub _top { $_[0]->{_top} }
+
+#line 68
+
+sub admin {
+    my $self = shift;
+    $self->_top->{admin} or Module::Install::Base::FakeAdmin->new;
+}
+
+sub is_admin {
+    my $self = shift;
+    $self->admin->VERSION;
+}
+
+sub DESTROY {}
+
+package Module::Install::Base::FakeAdmin;
+
+my $Fake;
+sub new { $Fake ||= bless(\@_, $_[0]) }
+sub AUTOLOAD {}
+sub DESTROY {}
+
+1;
+
+__END__
+
+#line 112

Added: packages/libmodule-signature-perl/branches/upstream/current/inc/Module/Install/Can.pm
===================================================================
--- packages/libmodule-signature-perl/branches/upstream/current/inc/Module/Install/Can.pm	2006-03-15 14:10:18 UTC (rev 2352)
+++ packages/libmodule-signature-perl/branches/upstream/current/inc/Module/Install/Can.pm	2006-03-15 16:14:26 UTC (rev 2353)
@@ -0,0 +1,38 @@
+#line 1 "inc/Module/Install/Can.pm - /usr/local/lib/perl5/site_perl/5.8.5/Module/Install/Can.pm"
+package Module::Install::Can;
+use Module::Install::Base; @ISA = qw(Module::Install::Base);
+$VERSION = '0.01';
+
+use strict;
+use Config ();
+use File::Spec ();
+use ExtUtils::MakeMaker ();
+
+# check if we can run some command
+sub can_run {
+    my ($self, $cmd) = @_;
+
+    my $_cmd = $cmd;
+    return $_cmd if (-x $_cmd or $_cmd = MM->maybe_command($_cmd));
+
+    for my $dir ((split /$Config::Config{path_sep}/, $ENV{PATH}), '.') {
+        my $abs = File::Spec->catfile($dir, $_[1]);
+        return $abs if (-x $abs or $abs = MM->maybe_command($abs));
+    }
+
+    return;
+}
+
+sub can_cc {
+    my $self = shift;
+    my @chunks = split(/ /, $Config::Config{cc}) or return;
+
+    # $Config{cc} may contain args; try to find out the program part
+    while (@chunks) {
+        return $self->can_run("@chunks") || (pop(@chunks), next);
+    }
+
+    return;
+}
+
+1;

Added: packages/libmodule-signature-perl/branches/upstream/current/inc/Module/Install/Fetch.pm
===================================================================
--- packages/libmodule-signature-perl/branches/upstream/current/inc/Module/Install/Fetch.pm	2006-03-15 14:10:18 UTC (rev 2352)
+++ packages/libmodule-signature-perl/branches/upstream/current/inc/Module/Install/Fetch.pm	2006-03-15 16:14:26 UTC (rev 2353)
@@ -0,0 +1,86 @@
+#line 1 "inc/Module/Install/Fetch.pm - /usr/local/lib/perl5/site_perl/5.8.5/Module/Install/Fetch.pm"
+package Module::Install::Fetch;
+use Module::Install::Base; @ISA = qw(Module::Install::Base);
+
+$VERSION = '0.01';
+
+sub get_file {
+    my ($self, %args) = @_;
+    my ($scheme, $host, $path, $file) = 
+        $args{url} =~ m|^(\w+)://([^/]+)(.+)/(.+)| or return;
+
+    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) = 
+            $args{url} =~ m|^(\w+)://([^/]+)(.+)/(.+)| or return;
+    }
+
+    $|++;
+    print "Fetching '$file' from $host... ";
+
+    unless (eval { require Socket; Socket::inet_aton($host) }) {
+        warn "'$host' resolve failed!\n";
+        return;
+    }
+
+    return unless $scheme eq 'ftp' or $scheme eq 'http';
+
+    require Cwd;
+    my $dir = Cwd::getcwd();
+    chdir $args{local_dir} or return if exists $args{local_dir};
+
+    if (eval { require LWP::Simple; 1 }) {
+        LWP::Simple::mirror($args{url}, $file);
+    }
+    elsif (eval { require Net::FTP; 1 }) { eval {
+        # use Net::FTP to get past firewall
+        my $ftp = Net::FTP->new($host, Passive => 1, Timeout => 600);
+        $ftp->login("anonymous", 'anonymous at example.com');
+        $ftp->cwd($path);
+        $ftp->binary;
+        $ftp->get($file) or (warn("$!\n"), return);
+        $ftp->quit;
+    } }
+    elsif (my $ftp = $self->can_run('ftp')) { eval {
+        # no Net::FTP, fallback to ftp.exe
+        require FileHandle;
+        my $fh = FileHandle->new;
+
+        local $SIG{CHLD} = 'IGNORE';
+        unless ($fh->open("|$ftp -n")) {
+            warn "Couldn't open ftp: $!\n";
+            chdir $dir; return;
+        }
+
+        my @dialog = split(/\n/, << ".");
+open $host
+user anonymous anonymous\@example.com
+cd $path
+binary
+get $file $file
+quit
+.
+        foreach (@dialog) { $fh->print("$_\n") }
+        $fh->close;
+    } }
+    else {
+        warn "No working 'ftp' program available!\n";
+        chdir $dir; return;
+    }
+
+    unless (-f $file) {
+        warn "Fetching failed: $@\n";
+        chdir $dir; return;
+    }
+
+    return if exists $args{size} and -s $file != $args{size};
+    system($args{run}) if exists $args{run};
+    unlink($file) if $args{remove};
+
+    print(((!exists $args{check_for} or -e $args{check_for})
+        ? "done!" : "failed! ($!)"), "\n");
+    chdir $dir; return !$?;
+}
+
+1;

Added: packages/libmodule-signature-perl/branches/upstream/current/inc/Module/Install/Include.pm
===================================================================
--- packages/libmodule-signature-perl/branches/upstream/current/inc/Module/Install/Include.pm	2006-03-15 14:10:18 UTC (rev 2352)
+++ packages/libmodule-signature-perl/branches/upstream/current/inc/Module/Install/Include.pm	2006-03-15 16:14:26 UTC (rev 2353)
@@ -0,0 +1,10 @@
+#line 1 "inc/Module/Install/Include.pm - /usr/local/lib/perl5/site_perl/5.8.5/Module/Install/Include.pm"
+package Module::Install::Include;
+use Module::Install::Base; @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(@_) };
+
+1;

Added: packages/libmodule-signature-perl/branches/upstream/current/inc/Module/Install/Makefile.pm
===================================================================
--- packages/libmodule-signature-perl/branches/upstream/current/inc/Module/Install/Makefile.pm	2006-03-15 14:10:18 UTC (rev 2352)
+++ packages/libmodule-signature-perl/branches/upstream/current/inc/Module/Install/Makefile.pm	2006-03-15 16:14:26 UTC (rev 2353)
@@ -0,0 +1,143 @@
+#line 1 "inc/Module/Install/Makefile.pm - /usr/local/lib/perl5/site_perl/5.8.5/Module/Install/Makefile.pm"
+package Module::Install::Makefile;
+use Module::Install::Base; @ISA = qw(Module::Install::Base);
+
+$VERSION = '0.01';
+
+use strict 'vars';
+use vars '$VERSION';
+
+use ExtUtils::MakeMaker ();
+
+sub Makefile { $_[0] }
+
+sub prompt { 
+    shift;
+    goto &ExtUtils::MakeMaker::prompt;
+}
+
+sub makemaker_args {
+    my $self = shift;
+    my $args = ($self->{makemaker_args} ||= {});
+    %$args = ( %$args, @_ ) if @_;
+    $args;
+}
+
+sub clean_files {
+    my $self = shift;
+    my $clean = $self->makemaker_args->{clean} ||= {};
+    %$clean = (
+        %$clean, 
+        FILES => join(" ", grep length, $clean->{FILES}, @_),
+    );
+}
+
+sub libs {
+    my $self = shift;
+    my $libs = ref $_[0] ? shift : [shift];
+    $self->makemaker_args( LIBS => $libs );
+}
+
+sub inc {
+    my $self = shift;
+    $self->makemaker_args( INC => shift );
+}
+
+sub write {
+    my $self = shift;
+    die "&Makefile->write() takes no arguments\n" if @_;
+
+    my $args = $self->makemaker_args;
+
+    $args->{DISTNAME} = $self->name;
+    $args->{NAME} = $self->module_name || $self->name || $self->determine_NAME($args);
+    $args->{VERSION} = $self->version || $self->determine_VERSION($args);
+    $args->{NAME} =~ s/-/::/g;
+
+    if ($] >= 5.005) {
+	$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;
+    }
+    delete $args->{SIGN} unless $self->is_admin;
+
+    # merge both kinds of requires into prereq_pm
+    my $prereq = ($args->{PREREQ_PM} ||= {});
+    %$prereq = ( %$prereq, map { @$_ } map { @$_ } grep $_,
+                 ($self->build_requires, $self->requires) );
+
+    # merge both kinds of requires into prereq_pm
+    my $dir = ($args->{DIR} ||= []);
+    if ($self->bundles) {
+        push @$dir, map "$_->[1]", @{$self->bundles};
+        delete $prereq->{$_->[0]} for @{$self->bundles};
+    }
+
+    if (my $perl_version = $self->perl_version) {
+        eval "use $perl_version; 1"
+            or die "ERROR: perl: Version $] is installed, ".
+                   "but we need version >= $perl_version";
+    }
+
+    my %args = map {($_ => $args->{$_})} grep {defined($args->{$_})} keys %$args;
+
+    if ($self->admin->preop) {
+        $args{dist} = $self->admin->preop;
+    }
+
+    ExtUtils::MakeMaker::WriteMakefile(%args);
+
+    $self->fix_up_makefile();
+}
+
+sub fix_up_makefile {
+    my $self = shift;
+    my $top_class = ref($self->_top) || '';
+    my $top_version = $self->_top->VERSION || '';
+
+    my $preamble = $self->preamble 
+       ? "# Preamble by $top_class $top_version\n" . $self->preamble
+       : '';
+    my $postamble = "# Postamble by $top_class $top_version\n" . 
+                    ($self->postamble || '');
+
+    open MAKEFILE, '< Makefile' or die $!;
+    my $makefile = do { local $/; <MAKEFILE> };
+    close MAKEFILE;
+
+    $makefile =~ s/\b(test_harness\(\$\(TEST_VERBOSE\), )/$1'inc', /;
+    $makefile =~ s/( -I\$\(INST_ARCHLIB\))/ -Iinc$1/g;
+    $makefile =~ s/( "-I\$\(INST_LIB\)")/ "-Iinc"$1/g;
+
+    $makefile =~ s/^(FULLPERL = .*)/$1 -Iinc/m;
+    $makefile =~ s/^(PERL = .*)/$1 -Iinc/m;
+
+    open MAKEFILE, '> Makefile' or die $!;
+    print MAKEFILE "$preamble$makefile$postamble";
+    close MAKEFILE;
+}
+
+sub preamble {
+    my ($self, $text) = @_;
+    $self->{preamble} = $text . $self->{preamble} if defined $text;
+    $self->{preamble};
+}
+
+sub postamble {
+    my ($self, $text) = @_;
+
+    $self->{postamble} ||= $self->admin->postamble;
+    $self->{postamble} .= $text if defined $text;
+    $self->{postamble}
+}
+
+1;
+
+__END__
+
+#line 273

Added: packages/libmodule-signature-perl/branches/upstream/current/inc/Module/Install/Metadata.pm
===================================================================
--- packages/libmodule-signature-perl/branches/upstream/current/inc/Module/Install/Metadata.pm	2006-03-15 14:10:18 UTC (rev 2352)
+++ packages/libmodule-signature-perl/branches/upstream/current/inc/Module/Install/Metadata.pm	2006-03-15 16:14:26 UTC (rev 2353)
@@ -0,0 +1,187 @@
+#line 1 "inc/Module/Install/Metadata.pm - /usr/local/lib/perl5/site_perl/5.8.5/Module/Install/Metadata.pm"
+package Module::Install::Metadata;
+use Module::Install::Base; @ISA = qw(Module::Install::Base);
+
+$VERSION = '0.04';
+
+use strict 'vars';
+use vars qw($VERSION);
+
+sub Meta { shift }
+
+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);
+
+foreach my $key (@scalar_keys) {
+    *$key = sub {
+        my $self = shift;
+        return $self->{'values'}{$key} unless @_;
+        $self->{'values'}{$key} = shift;
+        return $self;
+    };
+}
+
+foreach my $key (@tuple_keys) {
+    *$key = sub {
+        my $self = shift;
+        return $self->{'values'}{$key} unless @_;
+        my @rv;
+        while (@_) {
+            my $module  = shift or last;
+            my $version = shift || 0;
+            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;
+            push @rv, $rv;
+        }
+        return @rv;
+    };
+}
+
+sub features {
+    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'}{'features'}};
+}
+
+sub no_index {
+    my $self = shift;
+    my $type = shift;
+    push @{$self->{'values'}{'no_index'}{$type}}, @_ if $type;
+    return $self->{'values'}{'no_index'};
+}
+
+sub _dump {
+    my $self = shift;
+    my $package = ref($self->_top);
+    my $version = $self->_top->VERSION;
+    my %values = %{$self->{'values'}};
+
+    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}||[]},
+        ];
+    }
+
+    warn "No license specified, setting license = 'unknown'\n"
+        unless $values{license};
+
+    $values{license} ||= 'unknown';
+    $values{distribution_type} ||= 'module';
+    $values{name} ||= do {
+        my $name = $values{module_name};
+        $name =~ s/::/-/g;
+        $name;
+    } if $values{module_name};
+
+    if ($values{name} =~ /::/) {
+        my $name = $values{name};
+        $name =~ s/::/-/g;
+        die "Error in name(): '$values{name}' should be '$name'!\n";
+    }
+
+    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";
+        }
+    }
+
+    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});
+    }
+    else {
+        $dump .= << "META";
+no_index:
+  directory:
+    - inc
+META
+    }
+    
+    $dump .= "generated_by: $package version $version\n";
+    return $dump;
+}
+
+sub read {
+    my $self = shift;
+    $self->include_deps( 'YAML', 0 );
+    require YAML;
+    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 );
+            }
+        }
+        else {
+            $self->$key( $value );
+        }
+    }
+    return $self;
+}
+
+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;
+    return $self;
+}
+
+sub version_from {
+    my ($self, $version_from) = @_;
+    require ExtUtils::MM_Unix;
+    $self->version(ExtUtils::MM_Unix->parse_version($version_from));
+}
+
+sub abstract_from {
+    my ($self, $abstract_from) = @_;
+    require ExtUtils::MM_Unix;
+    $self->abstract(
+        bless( { DISTNAME => $self->name }, 'ExtUtils::MM_Unix')
+            ->parse_abstract($abstract_from)
+    );
+}
+
+1;

Added: packages/libmodule-signature-perl/branches/upstream/current/inc/Module/Install/Scripts.pm
===================================================================
--- packages/libmodule-signature-perl/branches/upstream/current/inc/Module/Install/Scripts.pm	2006-03-15 14:10:18 UTC (rev 2352)
+++ packages/libmodule-signature-perl/branches/upstream/current/inc/Module/Install/Scripts.pm	2006-03-15 16:14:26 UTC (rev 2353)
@@ -0,0 +1,43 @@
+#line 1 "inc/Module/Install/Scripts.pm - /usr/local/lib/perl5/site_perl/5.8.5/Module/Install/Scripts.pm"
+package Module::Install::Scripts;
+use Module::Install::Base; @ISA = qw(Module::Install::Base);
+$VERSION = '0.02';
+use strict;
+use File::Basename ();
+
+sub prompt_script {
+    my ($self, $script_file) = @_;
+    my ($prompt, $abstract, $default);
+
+    foreach my $line ( $self->_read_script($script_file) ) {
+        last unless $line =~ /^#/;
+        $prompt = $1   if $line =~ /^#\s*prompt:\s+(.*)/;
+        $default = $1  if $line =~ /^#\s*default:\s+(.*)/;
+        $abstract = $1 if $line =~ /^#\s*abstract:\s+(.*)/;
+    }
+    unless (defined $prompt) {
+        my $script_name = File::Basename::basename($script_file);
+        $prompt = "Do you want to install '$script_name'";
+        $prompt .= " ($abstract)" if defined $abstract;
+        $prompt .= '?';
+    }
+    return unless $self->prompt($prompt, ($default || 'n')) =~ /^[Yy]/;
+    $self->install_script($script_file);
+}
+
+sub install_script {
+    my $self = shift;
+    my $args = $self->makemaker_args;
+    my $exe_files = $args->{EXE_FILES} ||= [];
+    push @$exe_files, @_;
+}
+
+sub _read_script {
+    my ($self, $script_file) = @_;
+    local *SCRIPT;
+    open SCRIPT, $script_file
+      or die "Can't open '$script_file' for input: $!\n";
+    return <SCRIPT>;
+}
+
+1;

Added: packages/libmodule-signature-perl/branches/upstream/current/inc/Module/Install/Win32.pm
===================================================================
--- packages/libmodule-signature-perl/branches/upstream/current/inc/Module/Install/Win32.pm	2006-03-15 14:10:18 UTC (rev 2352)
+++ packages/libmodule-signature-perl/branches/upstream/current/inc/Module/Install/Win32.pm	2006-03-15 16:14:26 UTC (rev 2353)
@@ -0,0 +1,63 @@
+#line 1 "inc/Module/Install/Win32.pm - /usr/local/lib/perl5/site_perl/5.8.5/Module/Install/Win32.pm"
+package Module::Install::Win32;
+use Module::Install::Base; @ISA = qw(Module::Install::Base);
+
+$VERSION = '0.02';
+
+use strict;
+
+# determine if the user needs nmake, and download it if needed
+sub check_nmake {
+    my $self = shift;
+    $self->load('can_run');
+    $self->load('get_file');
+
+    require Config;
+    return unless (
+        $Config::Config{make}                   and
+        $Config::Config{make} =~ /^nmake\b/i    and
+        $^O eq 'MSWin32'                        and
+        !$self->can_run('nmake')
+    );
+
+    print "The required 'nmake' executable not found, fetching it...\n";
+
+    require File::Basename;
+    my $rv = $self->get_file(
+        url         => 'http://download.microsoft.com/download/vc15/Patch/1.52/W95/EN-US/Nmake15.exe',
+        ftp_url     => 'ftp://ftp.microsoft.com/Softlib/MSLFILES/Nmake15.exe',
+        local_dir   => File::Basename::dirname($^X),
+        size        => 51928,
+        run         => 'Nmake15.exe /o > nul',
+        check_for   => 'Nmake.exe',
+        remove      => 1,
+    );
+
+    if (!$rv) {
+        die << '.';
+
+-------------------------------------------------------------------------------
+
+Since you are using Microsoft Windows, you will need the 'nmake' utility
+before installation. It's available at:
+
+  http://download.microsoft.com/download/vc15/Patch/1.52/W95/EN-US/Nmake15.exe
+      or
+  ftp://ftp.microsoft.com/Softlib/MSLFILES/Nmake15.exe
+
+Please download the file manually, save it to a directory in %PATH% (e.g.
+C:\WINDOWS\COMMAND\), then launch the MS-DOS command line shell, "cd" to
+that directory, and run "Nmake15.exe" from there; that will create the
+'nmake.exe' file needed by this module.
+
+You may then resume the installation process described in README.
+
+-------------------------------------------------------------------------------
+.
+    }
+}
+
+1;
+
+__END__
+

Added: packages/libmodule-signature-perl/branches/upstream/current/inc/Module/Install/WriteAll.pm
===================================================================
--- packages/libmodule-signature-perl/branches/upstream/current/inc/Module/Install/WriteAll.pm	2006-03-15 14:10:18 UTC (rev 2352)
+++ packages/libmodule-signature-perl/branches/upstream/current/inc/Module/Install/WriteAll.pm	2006-03-15 16:14:26 UTC (rev 2353)
@@ -0,0 +1,36 @@
+#line 1 "inc/Module/Install/WriteAll.pm - /usr/local/lib/perl5/site_perl/5.8.5/Module/Install/WriteAll.pm"
+package Module::Install::WriteAll;
+use Module::Install::Base; @ISA = qw(Module::Install::Base);
+
+sub WriteAll {
+    my $self = shift;
+    my %args = (
+        meta => 1,
+        sign => 0,
+        inline => 0,
+        check_nmake => 1,
+        @_
+    );
+
+    $self->sign(1) if $args{sign};
+    $self->Meta->write if $args{meta};
+    $self->admin->WriteAll(%args) if $self->is_admin;
+
+    if ($0 =~ /Build.PL$/i) {
+	$self->Build->write;
+    }
+    else {
+	$self->check_nmake if $args{check_nmake};
+        $self->makemaker_args( PL_FILES => {} )
+            unless $self->makemaker_args->{'PL_FILES'};
+
+        if ($args{inline}) {
+            $self->Inline->write;
+        }
+        else {
+            $self->Makefile->write;
+        }
+    }
+}
+
+1;

Added: packages/libmodule-signature-perl/branches/upstream/current/inc/Module/Install.pm
===================================================================
--- packages/libmodule-signature-perl/branches/upstream/current/inc/Module/Install.pm	2006-03-15 14:10:18 UTC (rev 2352)
+++ packages/libmodule-signature-perl/branches/upstream/current/inc/Module/Install.pm	2006-03-15 16:14:26 UTC (rev 2353)
@@ -0,0 +1,169 @@
+#line 1 "inc/Module/Install.pm - /usr/local/lib/perl5/site_perl/5.8.5/Module/Install.pm"
+package Module::Install;
+$VERSION = '0.36';
+
+die << "." unless $INC{join('/', inc => split(/::/, __PACKAGE__)).'.pm'};
+Please invoke ${\__PACKAGE__} with:
+
+    use inc::${\__PACKAGE__};
+
+not:
+
+    use ${\__PACKAGE__};
+
+.
+
+use strict 'vars';
+use Cwd ();
+use File::Find ();
+use File::Path ();
+
+ at inc::Module::Install::ISA = 'Module::Install';
+*inc::Module::Install::VERSION = *VERSION;
+
+#line 129
+
+sub import {
+    my $class = shift;
+    my $self = $class->new(@_);
+
+    if (not -f $self->{file}) {
+        require "$self->{path}/$self->{dispatch}.pm";
+        File::Path::mkpath("$self->{prefix}/$self->{author}");
+        $self->{admin} = 
+          "$self->{name}::$self->{dispatch}"->new(_top => $self);
+        $self->{admin}->init;
+        @_ = ($class, _self => $self);
+        goto &{"$self->{name}::import"};
+    }
+
+    *{caller(0) . "::AUTOLOAD"} = $self->autoload;
+
+    # Unregister loader and worker packages so subdirs can use them again
+    delete $INC{"$self->{file}"};
+    delete $INC{"$self->{path}.pm"};
+}
+
+#line 156
+
+sub autoload {
+    my $self = shift;
+    my $caller = caller;
+
+    my $cwd = Cwd::cwd();
+    my $sym = "$caller\::AUTOLOAD";
+
+    $sym->{$cwd} = sub {
+        my $pwd = Cwd::cwd();
+        if (my $code = $sym->{$pwd}) {
+            goto &$code unless $cwd eq $pwd; # delegate back to parent dirs
+        }
+        $$sym =~ /([^:]+)$/ or die "Cannot autoload $caller";
+        unshift @_, ($self, $1);
+        goto &{$self->can('call')} unless uc($1) eq $1;
+    };
+}
+
+#line 181
+
+sub new {
+    my ($class, %args) = @_;
+
+    return $args{_self} if $args{_self};
+
+    $args{dispatch} ||= 'Admin';
+    $args{prefix}   ||= 'inc';
+    $args{author}   ||= '.author';
+    $args{bundle}   ||= 'inc/BUNDLES';
+
+    $class =~ s/^\Q$args{prefix}\E:://;
+    $args{name}     ||= $class;
+    $args{version}  ||= $class->VERSION;
+
+    unless ($args{path}) {
+        $args{path}  = $args{name};
+        $args{path}  =~ s!::!/!g;
+    }
+    $args{file}     ||= "$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;
+
+    unshift @_, $obj;
+    goto &{$obj->can($method)};
+}
+
+#line 225
+
+sub load {
+    my ($self, $method) = @_;
+
+    $self->load_extensions(
+        "$self->{prefix}/$self->{path}", $self
+    ) unless $self->{extensions};
+
+    foreach my $obj (@{$self->{extensions}}) {
+        return $obj if $obj->can($method);
+    }
+
+    my $admin = $self->{admin} or die << "END";
+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
+
+    my $obj = $admin->load($method, 1);
+    push @{$self->{extensions}}, $obj;
+
+    $obj;
+}
+
+#line 255
+
+sub load_extensions {
+    my ($self, $path, $top_obj) = @_;
+
+    unshift @INC, $self->{prefix}
+        unless grep { $_ eq $self->{prefix} } @INC;
+
+    local @INC = ($path, @INC);
+    foreach my $rv ($self->find_extensions($path)) {
+        my ($file, $pkg) = @{$rv};
+        next if $self->{pathnames}{$pkg};
+
+        eval { require $file; 1 } or (warn($@), next);
+        $self->{pathnames}{$pkg} = delete $INC{$file};
+        push @{$self->{extensions}}, $pkg->new( _top => $top_obj );
+    }
+}
+
+#line 279
+
+sub find_extensions {
+    my ($self, $path) = @_;
+    my @found;
+
+    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;
+
+    @found;
+}
+
+1;
+
+__END__
+
+#line 617

Added: packages/libmodule-signature-perl/branches/upstream/current/inc/Test/Builder.pm
===================================================================
--- packages/libmodule-signature-perl/branches/upstream/current/inc/Test/Builder.pm	2006-03-15 14:10:18 UTC (rev 2352)
+++ packages/libmodule-signature-perl/branches/upstream/current/inc/Test/Builder.pm	2006-03-15 16:14:26 UTC (rev 2353)
@@ -0,0 +1,867 @@
+#line 1 "inc/Test/Builder.pm - /usr/local/lib/perl5/site_perl/5.8.6/Test/Builder.pm"
+package Test::Builder;
+
+use 5.004;
+
+# $^C was only introduced in 5.005-ish.  We do this to prevent
+# use of uninitialized value warnings in older perls.
+$^C ||= 0;
+
+use strict;
+use vars qw($VERSION $CLASS);
+$VERSION = '0.17';
+$CLASS = __PACKAGE__;
+
+my $IsVMS = $^O eq 'VMS';
+
+# Make Test::Builder thread-safe for ithreads.
+BEGIN {
+    use Config;
+    if( $] >= 5.008 && $Config{useithreads} ) {
+        require threads;
+        require threads::shared;
+        threads::shared->import;
+    }
+    else {
+        *share = sub { 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 94
+
+my $Test;
+sub new {
+    my($class) = shift;
+    $Test ||= bless ['Move along, nothing to see here'], $class;
+    return $Test;
+}
+
+#line 120
+
+my $Exported_To;
+sub exported_to {
+    my($self, $pack) = @_;
+
+    if( defined $pack ) {
+        $Exported_To = $pack;
+    }
+    return $Exported_To;
+}
+
+#line 143
+
+sub plan {
+    my($self, $cmd, $arg) = @_;
+
+    return unless $cmd;
+
+    if( $Have_Plan ) {
+        die sprintf "You tried to plan twice!  Second plan at %s line %d\n",
+          ($self->caller)[1,2];
+    }
+
+    if( $cmd eq 'no_plan' ) {
+        $self->no_plan;
+    }
+    elsif( $cmd eq 'skip_all' ) {
+        return $self->skip_all($arg);
+    }
+    elsif( $cmd eq 'tests' ) {
+        if( $arg ) {
+            return $self->expected_tests($arg);
+        }
+        elsif( !defined $arg ) {
+            die "Got an undefined number of tests.  Looks like you tried to ".
+                "say how many tests you plan to run but made a mistake.\n";
+        }
+        elsif( !$arg ) {
+            die "You said to run 0 tests!  You've got to run something.\n";
+        }
+    }
+    else {
+        require Carp;
+        my @args = grep { defined } ($cmd, $arg);
+        Carp::croak("plan() doesn't understand @args");
+    }
+
+    return 1;
+}
+
+#line 190
+
+my $Expected_Tests = 0;
+sub expected_tests {
+    my($self, $max) = @_;
+
+    if( defined $max ) {
+        $Expected_Tests = $max;
+        $Have_Plan      = 1;
+
+        $self->_print("1..$max\n") unless $self->no_header;
+    }
+    return $Expected_Tests;
+}
+
+
+#line 212
+
+my($No_Plan) = 0;
+sub no_plan {
+    $No_Plan    = 1;
+    $Have_Plan  = 1;
+}
+
+#line 226
+
+sub has_plan {
+	return($Expected_Tests) if $Expected_Tests;
+	return('no_plan') if $No_Plan;
+	return(undef);
+};
+
+
+#line 242
+
+my $Skip_All = 0;
+sub skip_all {
+    my($self, $reason) = @_;
+
+    my $out = "1..0";
+    $out .= " # Skip $reason" if $reason;
+    $out .= "\n";
+
+    $Skip_All = 1;
+
+    $self->_print($out) unless $self->no_header;
+    exit(0);
+}
+
+#line 276
+
+sub ok {
+    my($self, $test, $name) = @_;
+
+    # $test might contain an object which we don't want to accidentally
+    # store, so we turn it into a boolean.
+    $test = $test ? 1 : 0;
+
+    unless( $Have_Plan ) {
+        require Carp;
+        Carp::croak("You tried to run a test without a plan!  Gotta have a plan.");
+    }
+
+    lock $Curr_Test;
+    $Curr_Test++;
+
+    $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.
+ERR
+
+    my($pack, $file, $line) = $self->caller;
+
+    my $todo = $self->todo($pack);
+
+    my $out;
+    my $result = {};
+    share($result);
+
+    unless( $test ) {
+        $out .= "not ";
+        @$result{ 'ok', 'actual_ok' } = ( ( $todo ? 1 : 0 ), 0 );
+    }
+    else {
+        @$result{ 'ok', 'actual_ok' } = ( 1, $test );
+    }
+
+    $out .= "ok";
+    $out .= " $Curr_Test" if $self->use_numbers;
+
+    if( defined $name ) {
+        $name =~ s|#|\\#|g;     # # in a name can confuse Test::Harness.
+        $out   .= " - $name";
+        $result->{name} = $name;
+    }
+    else {
+        $result->{name} = '';
+    }
+
+    if( $todo ) {
+        my $what_todo = $todo;
+        $out   .= " # TODO $what_todo";
+        $result->{reason} = $what_todo;
+        $result->{type}   = 'todo';
+    }
+    else {
+        $result->{reason} = '';
+        $result->{type}   = '';
+    }
+
+    $Test_Results[$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");
+    } 
+
+    return $test ? 1 : 0;
+}
+
+#line 364
+
+sub is_eq {
+    my($self, $got, $expect, $name) = @_;
+    local $Level = $Level + 1;
+
+    if( !defined $got || !defined $expect ) {
+        # undef only matches undef and nothing else
+        my $test = !defined $got && !defined $expect;
+
+        $self->ok($test, $name);
+        $self->_is_diag($got, 'eq', $expect) unless $test;
+        return $test;
+    }
+
+    return $self->cmp_ok($got, 'eq', $expect, $name);
+}
+
+sub is_num {
+    my($self, $got, $expect, $name) = @_;
+    local $Level = $Level + 1;
+
+    if( !defined $got || !defined $expect ) {
+        # undef only matches undef and nothing else
+        my $test = !defined $got && !defined $expect;
+
+        $self->ok($test, $name);
+        $self->_is_diag($got, '==', $expect) unless $test;
+        return $test;
+    }
+
+    return $self->cmp_ok($got, '==', $expect, $name);
+}
+
+sub _is_diag {
+    my($self, $got, $type, $expect) = @_;
+
+    foreach my $val (\$got, \$expect) {
+        if( defined $$val ) {
+            if( $type eq 'eq' ) {
+                # quote and force string context
+                $$val = "'$$val'"
+            }
+            else {
+                # force numeric context
+                $$val = $$val+0;
+            }
+        }
+        else {
+            $$val = 'undef';
+        }
+    }
+
+    return $self->diag(sprintf <<DIAGNOSTIC, $got, $expect);
+         got: %s
+    expected: %s
+DIAGNOSTIC
+
+}    
+
+#line 438
+
+sub isnt_eq {
+    my($self, $got, $dont_expect, $name) = @_;
+    local $Level = $Level + 1;
+
+    if( !defined $got || !defined $dont_expect ) {
+        # undef only matches undef and nothing else
+        my $test = defined $got || defined $dont_expect;
+
+        $self->ok($test, $name);
+        $self->_cmp_diag('ne', $got, $dont_expect) unless $test;
+        return $test;
+    }
+
+    return $self->cmp_ok($got, 'ne', $dont_expect, $name);
+}
+
+sub isnt_num {
+    my($self, $got, $dont_expect, $name) = @_;
+    local $Level = $Level + 1;
+
+    if( !defined $got || !defined $dont_expect ) {
+        # undef only matches undef and nothing else
+        my $test = defined $got || defined $dont_expect;
+
+        $self->ok($test, $name);
+        $self->_cmp_diag('!=', $got, $dont_expect) unless $test;
+        return $test;
+    }
+
+    return $self->cmp_ok($got, '!=', $dont_expect, $name);
+}
+
+
+#line 490
+
+sub like {
+    my($self, $this, $regex, $name) = @_;
+
+    local $Level = $Level + 1;
+    $self->_regex_ok($this, $regex, '=~', $name);
+}
+
+sub unlike {
+    my($self, $this, $regex, $name) = @_;
+
+    local $Level = $Level + 1;
+    $self->_regex_ok($this, $regex, '!~', $name);
+}
+
+#line 531
+
+
+sub maybe_regex {
+	my ($self, $regex) = @_;
+    my $usable_regex = undef;
+    if( ref $regex eq 'Regexp' ) {
+        $usable_regex = $regex;
+    }
+    # Check if it looks like '/foo/'
+    elsif( my($re, $opts) = $regex =~ m{^ /(.*)/ (\w*) $ }sx ) {
+        $usable_regex = length $opts ? "(?$opts)$re" : $re;
+    };
+    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) {
+        $ok = $self->ok( 0, $name );
+        $self->diag("    '$regex' doesn't look much like a regex to me.");
+        return $ok;
+    }
+
+    {
+        local $^W = 0;
+        my $test = $this =~ /$usable_regex/ ? 1 : 0;
+        $test = !$test if $cmp eq '!~';
+        $ok = $self->ok( $test, $name );
+    }
+
+    unless( $ok ) {
+        $this = defined $this ? "'$this'" : 'undef';
+        my $match = $cmp eq '=~' ? "doesn't match" : "matches";
+        $self->diag(sprintf <<DIAGNOSTIC, $this, $match, $regex);
+                  %s
+    %13s '%s'
+DIAGNOSTIC
+
+    }
+
+    return $ok;
+}
+
+#line 588
+
+sub cmp_ok {
+    my($self, $got, $type, $expect, $name) = @_;
+
+    my $test;
+    {
+        local $^W = 0;
+        local($@,$!);   # don't interfere with $@
+                        # eval() sometimes resets $!
+        $test = eval "\$got $type \$expect";
+    }
+    local $Level = $Level + 1;
+    my $ok = $self->ok($test, $name);
+
+    unless( $ok ) {
+        if( $type =~ /^(eq|==)$/ ) {
+            $self->_is_diag($got, $type, $expect);
+        }
+        else {
+            $self->_cmp_diag($got, $type, $expect);
+        }
+    }
+    return $ok;
+}
+
+sub _cmp_diag {
+    my($self, $got, $type, $expect) = @_;
+    
+    $got    = defined $got    ? "'$got'"    : 'undef';
+    $expect = defined $expect ? "'$expect'" : 'undef';
+    return $self->diag(sprintf <<DIAGNOSTIC, $got, $type, $expect);
+    %s
+        %s
+    %s
+DIAGNOSTIC
+}
+
+#line 636
+
+sub BAILOUT {
+    my($self, $reason) = @_;
+
+    $self->_print("Bail out!  $reason");
+    exit 255;
+}
+
+#line 652
+
+sub skip {
+    my($self, $why) = @_;
+    $why ||= '';
+
+    unless( $Have_Plan ) {
+        require Carp;
+        Carp::croak("You tried to run tests without a plan!  Gotta have a plan.");
+    }
+
+    lock($Curr_Test);
+    $Curr_Test++;
+
+    my %result;
+    share(%result);
+    %result = (
+        '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";
+
+    $Test->_print($out);
+
+    return 1;
+}
+
+
+#line 697
+
+sub todo_skip {
+    my($self, $why) = @_;
+    $why ||= '';
+
+    unless( $Have_Plan ) {
+        require Carp;
+        Carp::croak("You tried to run tests without a plan!  Gotta have a plan.");
+    }
+
+    lock($Curr_Test);
+    $Curr_Test++;
+
+    my %result;
+    share(%result);
+    %result = (
+        '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   .= " # TODO & SKIP $why\n";
+
+    $Test->_print($out);
+
+    return 1;
+}
+
+
+#line 772
+
+sub level {
+    my($self, $level) = @_;
+
+    if( defined $level ) {
+        $Level = $level;
+    }
+    return $Level;
+}
+
+$CLASS->level(1);
+
+
+#line 809
+
+my $Use_Nums = 1;
+sub use_numbers {
+    my($self, $use_nums) = @_;
+
+    if( defined $use_nums ) {
+        $Use_Nums = $use_nums;
+    }
+    return $Use_Nums;
+}
+
+#line 836
+
+my($No_Header, $No_Ending) = (0,0);
+sub no_header {
+    my($self, $no_header) = @_;
+
+    if( defined $no_header ) {
+        $No_Header = $no_header;
+    }
+    return $No_Header;
+}
+
+sub no_ending {
+    my($self, $no_ending) = @_;
+
+    if( defined $no_ending ) {
+        $No_Ending = $no_ending;
+    }
+    return $No_Ending;
+}
+
+
+#line 891
+
+sub diag {
+    my($self, @msgs) = @_;
+    return unless @msgs;
+
+    # Prevent printing headers when compiling (i.e. -c)
+    return if $^C;
+
+    # Escape each line with a #.
+    foreach (@msgs) {
+        $_ = 'undef' unless defined;
+        s/^/# /gms;
+    }
+
+    push @msgs, "\n" unless $msgs[-1] =~ /\n\Z/;
+
+    local $Level = $Level + 1;
+    my $fh = $self->todo ? $self->todo_output : $self->failure_output;
+    local($\, $", $,) = (undef, ' ', '');
+    print $fh @msgs;
+
+    return 0;
+}
+
+#line 926
+
+sub _print {
+    my($self, @msgs) = @_;
+
+    # Prevent printing headers when only compiling.  Mostly for when
+    # tests are deparsed with B::Deparse
+    return if $^C;
+
+    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;
+    }
+
+    push @msgs, "\n" unless $msgs[-1] =~ /\n\Z/;
+
+    print $fh @msgs;
+}
+
+
+#line 977
+
+my($Out_FH, $Fail_FH, $Todo_FH);
+sub output {
+    my($self, $fh) = @_;
+
+    if( defined $fh ) {
+        $Out_FH = _new_fh($fh);
+    }
+    return $Out_FH;
+}
+
+sub failure_output {
+    my($self, $fh) = @_;
+
+    if( defined $fh ) {
+        $Fail_FH = _new_fh($fh);
+    }
+    return $Fail_FH;
+}
+
+sub todo_output {
+    my($self, $fh) = @_;
+
+    if( defined $fh ) {
+        $Todo_FH = _new_fh($fh);
+    }
+    return $Todo_FH;
+}
+
+sub _new_fh {
+    my($file_or_fh) = shift;
+
+    my $fh;
+    unless( UNIVERSAL::isa($file_or_fh, 'GLOB') ) {
+        $fh = do { local *FH };
+        open $fh, ">$file_or_fh" or 
+            die "Can't open test output log $file_or_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:  $!";
+
+    # Set everything to unbuffered else plain prints to STDOUT will
+    # come out in the wrong order from our own prints.
+    _autoflush(\*TESTOUT);
+    _autoflush(\*STDOUT);
+    _autoflush(\*TESTERR);
+    _autoflush(\*STDERR);
+
+    $CLASS->output(\*TESTOUT);
+    $CLASS->failure_output(\*TESTERR);
+    $CLASS->todo_output(\*TESTOUT);
+}
+
+sub _autoflush {
+    my($fh) = shift;
+    my $old_fh = select $fh;
+    $| = 1;
+    select $old_fh;
+}
+
+
+#line 1065
+
+sub current_test {
+    my($self, $num) = @_;
+
+    lock($Curr_Test);
+    if( defined $num ) {
+        unless( $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;
+            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;
+            }
+        }
+    }
+    return $Curr_Test;
+}
+
+
+#line 1106
+
+sub summary {
+    my($self) = shift;
+
+    return map { $_->{'ok'} } @Test_Results;
+}
+
+#line 1161
+
+sub details {
+    return @Test_Results;
+}
+
+#line 1185
+
+sub todo {
+    my($self, $pack) = @_;
+
+    $pack = $pack || $self->exported_to || $self->caller(1);
+
+    no strict 'refs';
+    return defined ${$pack.'::TODO'} ? ${$pack.'::TODO'}
+                                     : 0;
+}
+
+#line 1205
+
+sub caller {
+    my($self, $height) = @_;
+    $height ||= 0;
+
+    my @caller = CORE::caller($self->level + $height + 1);
+    return wantarray ? @caller : $caller[0];
+}
+
+#line 1217
+
+#line 1231
+
+#'#
+sub _sanity_check {
+    _whoa($Curr_Test < 0,  'Says here you ran a negative number of tests!');
+    _whoa(!$Have_Plan and $Curr_Test, 
+          'Somehow your tests ran without a plan!');
+    _whoa($Curr_Test != @Test_Results,
+          'Somehow you got a different number of results than tests ran!');
+}
+
+#line 1250
+
+sub _whoa {
+    my($check, $desc) = @_;
+    if( $check ) {
+        die <<WHOA;
+WHOA!  $desc
+This should never happen!  Please contact the author immediately!
+WHOA
+    }
+}
+
+#line 1271
+
+sub _my_exit {
+    $? = $_[0];
+
+    return 1;
+}
+
+
+#line 1284
+
+$SIG{__DIE__} = sub {
+    # We don't want to muck with death in an eval, but $^S isn't
+    # totally reliable.  5.005_03 and 5.6.1 both do the wrong thing
+    # with it.  Instead, we use caller.  This also means it runs under
+    # 5.004!
+    my $in_eval = 0;
+    for( my $stack = 1;  my $sub = (CORE::caller($stack))[3];  $stack++ ) {
+        $in_eval = 1 if $sub =~ /^\(eval\)/;
+    }
+    $Test_Died = 1 unless $in_eval;
+};
+
+sub _ending {
+    my $self = shift;
+
+    _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 != $$;
+
+    # 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 ) {
+        # The plan?  We have no plan.
+        if( $No_Plan ) {
+            $self->_print("1..$Curr_Test\n") unless $self->no_header;
+            $Expected_Tests = $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];
+        }
+
+        my $num_failed = grep !$_->{'ok'}, @Test_Results[0..$Expected_Tests-1];
+        $num_failed += abs($Expected_Tests - @Test_Results);
+
+        if( $Curr_Test < $Expected_Tests ) {
+            $self->diag(<<"FAIL");
+Looks like you planned $Expected_Tests tests but only ran $Curr_Test.
+FAIL
+        }
+        elsif( $Curr_Test > $Expected_Tests ) {
+            my $num_extra = $Curr_Test - $Expected_Tests;
+            $self->diag(<<"FAIL");
+Looks like you planned $Expected_Tests tests but ran $num_extra extra.
+FAIL
+        }
+        elsif ( $num_failed ) {
+            $self->diag(<<"FAIL");
+Looks like you failed $num_failed tests of $Expected_Tests.
+FAIL
+        }
+
+        if( $Test_Died ) {
+            $self->diag(<<"FAIL");
+Looks like your test died just after $Curr_Test.
+FAIL
+
+            _my_exit( 255 ) && return;
+        }
+
+        _my_exit( $num_failed <= 254 ? $num_failed : 254  ) && return;
+    }
+    elsif ( $Skip_All ) {
+        _my_exit( 0 ) && return;
+    }
+    elsif ( $Test_Died ) {
+        $self->diag(<<'FAIL');
+Looks like your test died before it could output anything.
+FAIL
+    }
+    else {
+        $self->diag("No tests run!\n");
+        _my_exit( 255 ) && return;
+    }
+}
+
+END {
+    $Test->_ending if defined $Test and !$Test->no_ending;
+}
+
+#line 1407
+
+1;

Added: packages/libmodule-signature-perl/branches/upstream/current/inc/Test/More.pm
===================================================================
--- packages/libmodule-signature-perl/branches/upstream/current/inc/Test/More.pm	2006-03-15 14:10:18 UTC (rev 2352)
+++ packages/libmodule-signature-perl/branches/upstream/current/inc/Test/More.pm	2006-03-15 16:14:26 UTC (rev 2353)
@@ -0,0 +1,500 @@
+#line 1 "inc/Test/More.pm - /usr/local/lib/perl5/site_perl/5.8.6/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
+# even though the module being used forgot to use Carp.  Yes, this
+# actually happened.
+sub _carp {
+    my($file, $line) = (caller(1))[1,2];
+    warn @_, " at $file line $line\n";
+}
+
+
+
+require Exporter;
+use vars qw($VERSION @ISA @EXPORT %EXPORT_TAGS $TODO);
+$VERSION = '0.47';
+ at ISA    = qw(Exporter);
+ at EXPORT = qw(ok use_ok require_ok
+             is isnt like unlike is_deeply
+             cmp_ok
+             skip todo todo_skip
+             pass fail
+             eq_array eq_hash eq_set
+             $TODO
+             plan
+             can_ok  isa_ok
+             diag
+            );
+
+my $Test = Test::Builder->new;
+
+
+# 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, @_);
+}
+
+
+#line 172
+
+sub plan {
+    my(@plan) = @_;
+
+    my $caller = caller;
+
+    $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;
+        }
+    }
+
+    $Test->plan(@plan);
+
+    __PACKAGE__->_export_to_level(1, __PACKAGE__, @imports);
+}
+
+sub import {
+    my($class) = shift;
+    goto &plan;
+}
+
+
+#line 266
+
+sub ok ($;$) {
+    my($test, $name) = @_;
+    $Test->ok($test, $name);
+}
+
+#line 330
+
+sub is ($$;$) {
+    $Test->is_eq(@_);
+}
+
+sub isnt ($$;$) {
+    $Test->isnt_eq(@_);
+}
+
+*isn't = \&isnt;
+
+
+#line 371
+
+sub like ($$;$) {
+    $Test->like(@_);
+}
+
+
+#line 385
+
+sub unlike {
+    $Test->unlike(@_);
+}
+
+
+#line 423
+
+sub cmp_ok($$$;$) {
+    $Test->cmp_ok(@_);
+}
+
+
+#line 457
+
+sub can_ok ($@) {
+    my($proto, @methods) = @_;
+    my $class = ref $proto || $proto;
+
+    unless( @methods ) {
+        my $ok = $Test->ok( 0, "$class->can(...)" );
+        $Test->diag('    can_ok() called with no methods');
+        return $ok;
+    }
+
+    my @nok = ();
+    foreach my $method (@methods) {
+        local($!, $@);  # don't interfere with caller's $@
+                        # eval sometimes resets $!
+        eval { $proto->can($method) } || push @nok, $method;
+    }
+
+    my $name;
+    $name = @methods == 1 ? "$class->can('$methods[0]')" 
+                          : "$class->can(...)";
+    
+    my $ok = $Test->ok( !@nok, $name );
+
+    $Test->diag(map "    $class->can('$_') failed\n", @nok);
+
+    return $ok;
+}
+
+#line 514
+
+sub isa_ok ($$;$) {
+    my($object, $class, $obj_name) = @_;
+
+    my $diag;
+    $obj_name = 'The object' unless defined $obj_name;
+    my $name = "$obj_name isa $class";
+    if( !defined $object ) {
+        $diag = "$obj_name isn't defined";
+    }
+    elsif( !ref $object ) {
+        $diag = "$obj_name isn't a reference";
+    }
+    else {
+        # We can't use UNIVERSAL::isa because we want to honor isa() overrides
+        local($@, $!);  # eval sometimes resets $!
+        my $rslt = eval { $object->isa($class) };
+        if( $@ ) {
+            if( $@ =~ /^Can't call method "isa" on unblessed reference/ ) {
+                if( !UNIVERSAL::isa($object, $class) ) {
+                    my $ref = ref $object;
+                    $diag = "$obj_name isn't a '$class' it's a '$ref'";
+                }
+            } else {
+                die <<WHOA;
+WHOA! I tried to call ->isa on your object and got some weird error.
+This should never happen.  Please contact the author immediately.
+Here's the error.
+$@
+WHOA
+            }
+        }
+        elsif( !$rslt ) {
+            my $ref = ref $object;
+            $diag = "$obj_name isn't a '$class' it's a '$ref'";
+        }
+    }
+            
+      
+
+    my $ok;
+    if( $diag ) {
+        $ok = $Test->ok( 0, $name );
+        $Test->diag("    $diag\n");
+    }
+    else {
+        $ok = $Test->ok( 1, $name );
+    }
+
+    return $ok;
+}
+
+
+#line 583
+
+sub pass (;$) {
+    $Test->ok(1, @_);
+}
+
+sub fail (;$) {
+    $Test->ok(0, @_);
+}
+
+#line 627
+
+sub diag {
+    $Test->diag(@_);
+}
+
+
+#line 677
+
+sub use_ok ($;@) {
+    my($module, @imports) = @_;
+    @imports = () unless @imports;
+
+    my $pack = caller;
+
+    local($@,$!);   # eval sometimes interferes with $!
+    eval <<USE;
+package $pack;
+require $module;
+'$module'->import(\@imports);
+USE
+
+    my $ok = $Test->ok( !$@, "use $module;" );
+
+    unless( $ok ) {
+        chomp $@;
+        $Test->diag(<<DIAGNOSTIC);
+    Tried to use '$module'.
+    Error:  $@
+DIAGNOSTIC
+
+    }
+
+    return $ok;
+}
+
+#line 712
+
+sub require_ok ($) {
+    my($module) = shift;
+
+    my $pack = caller;
+
+    local($!, $@); # eval sometimes interferes with $!
+    eval <<REQUIRE;
+package $pack;
+require $module;
+REQUIRE
+
+    my $ok = $Test->ok( !$@, "require $module;" );
+
+    unless( $ok ) {
+        chomp $@;
+        $Test->diag(<<DIAGNOSTIC);
+    Tried to require '$module'.
+    Error:  $@
+DIAGNOSTIC
+
+    }
+
+    return $ok;
+}
+
+#line 796
+
+#'#
+sub skip {
+    my($why, $how_many) = @_;
+
+    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;
+}
+
+
+#line 874
+
+sub todo_skip {
+    my($why, $how_many) = @_;
+
+    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;
+    }
+
+    for( 1..$how_many ) {
+        $Test->todo_skip($why);
+    }
+
+    local $^W = 0;
+    last TODO;
+}
+
+#line 933
+
+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);
+    }
+    else {
+        local @Data_Stack = ();
+        if( _deep_check($this, $that) ) {
+            $ok = $Test->ok(1, $name);
+        }
+        else {
+            $ok = $Test->ok(0, $name);
+            $ok = $Test->diag(_format_stack(@Data_Stack));
+        }
+    }
+
+    return $ok;
+}
+
+sub _format_stack {
+    my(@Stack) = @_;
+
+    my $var = '$FOO';
+    my $did_arrow = 0;
+    foreach my $entry (@Stack) {
+        my $type = $entry->{type} || '';
+        my $idx  = $entry->{'idx'};
+        if( $type eq 'HASH' ) {
+            $var .= "->" unless $did_arrow++;
+            $var .= "{$idx}";
+        }
+        elsif( $type eq 'ARRAY' ) {
+            $var .= "->" unless $did_arrow++;
+            $var .= "[$idx]";
+        }
+        elsif( $type eq 'REF' ) {
+            $var = "\${$var}";
+        }
+    }
+
+    my @vals = @{$Stack[-1]{vals}}[0,1];
+    my @vars = ();
+    ($vars[0] = $var) =~ s/\$FOO/     \$got/;
+    ($vars[1] = $var) =~ s/\$FOO/\$expected/;
+
+    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'";
+    }
+
+    $out .= "$vars[0] = $vals[0]\n";
+    $out .= "$vars[1] = $vals[1]\n";
+
+    $out =~ s/^/    /msg;
+    return $out;
+}
+
+
+#line 1007
+
+#'#
+sub eq_array  {
+    my($a1, $a2) = @_;
+    return 1 if $a1 eq $a2;
+
+    my $ok = 1;
+    my $max = $#$a1 > $#$a2 ? $#$a1 : $#$a2;
+    for (0..$max) {
+        my $e1 = $_ > $#$a1 ? $DNE : $a1->[$_];
+        my $e2 = $_ > $#$a2 ? $DNE : $a2->[$_];
+
+        push @Data_Stack, { type => 'ARRAY', idx => $_, vals => [$e1, $e2] };
+        $ok = _deep_check($e1,$e2);
+        pop @Data_Stack if $ok;
+
+        last unless $ok;
+    }
+    return $ok;
+}
+
+sub _deep_check {
+    my($e1, $e2) = @_;
+    my $ok = 0;
+
+    my $eq;
+    {
+        # Quiet uninitialized value warnings when comparing undefs.
+        local $^W = 0; 
+
+        if( $e1 eq $e2 ) {
+            $ok = 1;
+        }
+        else {
+            if( UNIVERSAL::isa($e1, 'ARRAY') and
+                UNIVERSAL::isa($e2, 'ARRAY') )
+            {
+                $ok = eq_array($e1, $e2);
+            }
+            elsif( UNIVERSAL::isa($e1, 'HASH') and
+                   UNIVERSAL::isa($e2, 'HASH') )
+            {
+                $ok = eq_hash($e1, $e2);
+            }
+            elsif( UNIVERSAL::isa($e1, 'REF') and
+                   UNIVERSAL::isa($e2, 'REF') )
+            {
+                push @Data_Stack, { type => 'REF', vals => [$e1, $e2] };
+                $ok = _deep_check($$e1, $$e2);
+                pop @Data_Stack if $ok;
+            }
+            elsif( UNIVERSAL::isa($e1, 'SCALAR') and
+                   UNIVERSAL::isa($e2, 'SCALAR') )
+            {
+                push @Data_Stack, { type => 'REF', vals => [$e1, $e2] };
+                $ok = _deep_check($$e1, $$e2);
+            }
+            else {
+                push @Data_Stack, { vals => [$e1, $e2] };
+                $ok = 0;
+            }
+        }
+    }
+
+    return $ok;
+}
+
+
+#line 1083
+
+sub eq_hash {
+    my($a1, $a2) = @_;
+    return 1 if $a1 eq $a2;
+
+    my $ok = 1;
+    my $bigger = keys %$a1 > keys %$a2 ? $a1 : $a2;
+    foreach my $k (keys %$bigger) {
+        my $e1 = exists $a1->{$k} ? $a1->{$k} : $DNE;
+        my $e2 = exists $a2->{$k} ? $a2->{$k} : $DNE;
+
+        push @Data_Stack, { type => 'HASH', idx => $k, vals => [$e1, $e2] };
+        $ok = _deep_check($e1, $e2);
+        pop @Data_Stack if $ok;
+
+        last unless $ok;
+    }
+
+    return $ok;
+}
+
+#line 1116
+
+# 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] );
+}
+
+#line 1154
+
+sub builder {
+    return Test::Builder->new;
+}
+
+#line 1247
+
+1;

Added: packages/libmodule-signature-perl/branches/upstream/current/lib/Module/Signature.pm
===================================================================
--- packages/libmodule-signature-perl/branches/upstream/current/lib/Module/Signature.pm	2006-03-15 14:10:18 UTC (rev 2352)
+++ packages/libmodule-signature-perl/branches/upstream/current/lib/Module/Signature.pm	2006-03-15 16:14:26 UTC (rev 2353)
@@ -0,0 +1,828 @@
+package Module::Signature;
+$Module::Signature::VERSION = '0.44';
+
+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 SIGNATURE_OK        => 0;
+use constant SIGNATURE_MISSING   => -1;
+use constant SIGNATURE_MALFORMED => -2;
+use constant SIGNATURE_BAD       => -3;
+use constant SIGNATURE_MISMATCH  => -4;
+use constant MANIFEST_MISMATCH   => -5;
+use constant CIPHER_UNKNOWN      => -6;
+
+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';
+
+$SIGNATURE	= 'SIGNATURE';
+$Timeout        = $ENV{MODULE_SIGNATURE_TIMEOUT} || 3;
+$Verbose        = $ENV{MODULE_SIGNATURE_VERBOSE} || 0;
+$KeyServer	= $ENV{MODULE_SIGNATURE_KEYSERVER} || 'pgp.mit.edu';
+$KeyServerPort	= $ENV{MODULE_SIGNATURE_KEYSERVERPORT} || '11371';
+$Cipher		= 'SHA1';
+$Preamble	= << ".";
+This file contains message digests of all files listed in MANIFEST,
+signed via the Module::Signature module, version $VERSION.
+
+To verify the content in this distribution, first make sure you have
+Module::Signature installed, then type:
+
+    % cpansign -v
+
+It will check each file's integrity, as well as the signature's
+validity.  If "==> Signature verified OK! <==" is not displayed,
+the distribution may already have been compromised, and you should
+not run its Makefile.PL or Build.PL.
+
+.
+
+$AutoKeyRetrieve    = 1;
+$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('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";
+    }
+
+    __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;
+    };
+
+    (my $sigtext = _read_sigfile($SIGNATURE)) or do {
+	warn "==> MALFORMED Signature file! <==\n";
+	return SIGNATURE_MALFORMED;
+    };
+
+    (my ($cipher) = ($sigtext =~ /^(\w+) /)) or do {
+	warn "==> MALFORMED Signature file! <==\n";
+	return SIGNATURE_MALFORMED;
+    };
+
+    (defined(my $plaintext = _mkdigest($cipher))) or do {
+	warn "==> UNKNOWN Cipher format! <==\n";
+	return CIPHER_UNKNOWN;
+    };
+
+    $rv = _verify($SIGNATURE, $sigtext, $plaintext);
+
+    if ($rv == SIGNATURE_OK) {
+	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;
+	}
+    }
+    elsif ($rv == SIGNATURE_BAD) {
+	warn "==> BAD/TAMPERED signature detected! <==\n";
+    }
+    elsif ($rv == SIGNATURE_MISMATCH) {
+	warn "==> MISMATCHED content between SIGNATURE and distribution files! <==\n";
+    }
+
+    return $rv;
+}
+
+sub _verify {
+    my $signature = shift || $SIGNATURE;
+    my $sigtext   = shift || '';
+    my $plaintext = shift || '';
+
+    local $SIGNATURE = $signature if $signature ne $SIGNATURE;
+
+    if ($AutoKeyRetrieve and !$CanKeyRetrieve) {
+	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;
+    }
+
+    if (my $version = _has_gpg()) {
+	return _verify_gpg($sigtext, $plaintext, $version);
+    }
+    elsif (eval {require Crypt::OpenPGP; 1}) {
+	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);
+    }
+}
+
+sub _has_gpg {
+    `gpg --version` =~ /GnuPG.*?(\S+)$/m or return;
+    return $1;
+}
+
+sub _fullcheck {
+    my $skip = shift;
+    my @extra;
+
+    local $^W;
+    local $ExtUtils::Manifest::Quiet = 1;
+
+    my($mani, $file);
+    if( _legacy_extutils() ) {
+        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;
+        } };
+
+        ($mani, $file) = ExtUtils::Manifest::fullcheck();
+    }
+    else {
+        ($mani, $file) = ExtUtils::Manifest::fullcheck();
+    }
+
+    foreach my $makefile ('Makefile', 'Build') {
+	warn "==> SKIPPED CHECKING '$_'!" .
+		(-e "$_.PL" && " (run $_.PL to ensure its integrity)") .
+		" <===\n" for grep $_ eq $makefile, @extra;
+    }
+
+    @{$mani} = grep {$_ ne 'SIGNATURE'} @{$mani};
+
+    warn "Not in MANIFEST: $_\n" for @{$file};
+    warn "No such file: $_\n" for @{$mani};
+
+    return ($mani, $file);
+}
+
+sub _legacy_extutils {
+    # ExtUtils::Manifest older than 1.41 does not handle default skips well.
+    return (ExtUtils::Manifest->VERSION < 1.41);
+}
+
+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 /^\.#/;
+}
+
+sub _verify_gpg {
+    my ($sigtext, $plaintext, $version) = @_;
+
+    local $SIGNATURE = Win32::GetShortPathName($SIGNATURE)
+	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
+    );
+
+    my $output = '';
+    if( $Verbose ) {
+        warn "Executing @cmd\n";
+        system @cmd;
+    }
+    else {
+        my $cmd = join ' ', @cmd;
+        $output = `$cmd`;
+    }
+
+    if( $? ) {
+        print STDERR $output;
+    }
+    elsif ($output =~ /((?: +[\dA-F]{4}){10,})/) {
+	warn "WARNING: This key is not certified with a trusted signature!\n";
+        warn "Primary key fingerprint:$1\n";
+    }
+
+    return SIGNATURE_BAD if ($? and $AutoKeyRetrieve);
+    return _compare($sigtext, $plaintext, (!$?) ? SIGNATURE_OK : CANNOT_VERIFY);
+}
+
+sub _keyserver {
+    my $version = shift;
+    my $scheme = "x-hkp";
+    $scheme = "hkp" if $version ge "1.2.0";
+
+    return "$scheme://$KeyServer:$KeyServerPort";
+}
+
+sub _verify_crypt_openpgp {
+    my ($sigtext, $plaintext) = @_;
+
+    require Crypt::OpenPGP;
+    my $pgp = Crypt::OpenPGP->new(
+	($KeyServer) ? ( KeyServer => $KeyServer, AutoKeyRetrieve => $AutoKeyRetrieve ) : (),
+    );
+    my $rv = $pgp->handle( Filename => $SIGNATURE )
+	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;
+    }
+    else {
+	warn "Cannot verify signature; public key not found\n";
+    }
+
+    return _compare($sigtext, $plaintext, $rv->{Validity} ? SIGNATURE_OK : CANNOT_VERIFY);
+}
+
+sub _read_sigfile {
+    my $sigfile = shift;
+    my $signature = '';
+    my $well_formed;
+
+    local *D;
+    open D, $sigfile or die "Could not open $sigfile: $!";
+    while (<D>) {
+	next if (1 .. /^-----BEGIN PGP SIGNED MESSAGE-----/);
+	last if /^-----BEGIN PGP SIGNATURE/;
+
+	$signature .= $_;
+    }
+
+    return ((split(/\n+/, $signature, 2))[1]);
+}
+
+sub _compare {
+    my ($str1, $str2, $ok) = @_;
+
+    # normalize all linebreaks
+    $str1 =~ s/[^\S ]+/\n/; $str2 =~ s/[^\S ]+/\n/;
+
+    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" } );
+    }
+    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;
+    }
+
+    return SIGNATURE_MISMATCH;
+}
+
+sub sign {
+    my %args = ( skip => 1, @_ );
+    my $overwrite = $args{overwrite};
+    my $plaintext = _mkdigest();
+
+    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";
+    }
+
+    if (!$overwrite and -e $SIGNATURE and -t STDIN) {
+	local $/ = "\n";
+	print "$SIGNATURE already exists; overwrite [y/N]? ";
+	return unless <STDIN> =~ /[Yy]/;
+    }
+
+    if (my $version = _has_gpg()) {
+	_sign_gpg($SIGNATURE, $plaintext, $version);
+    }
+    elsif (eval {require Crypt::OpenPGP; 1}) {
+	_sign_crypt_openpgp($SIGNATURE, $plaintext);
+    }
+    else {
+	die "Cannot use GnuPG or Crypt::OpenPGP, please install either one first!";
+    }
+
+    warn "==> SIGNATURE file created successfully. <==\n";
+    return SIGNATURE_OK;
+}
+
+sub _sign_gpg {
+    my ($sigfile, $plaintext, $version) = @_;
+
+    die "Could not write to $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: $!";
+    print D $plaintext;
+    close D;
+
+    (-e "$sigfile.tmp" and -s "$sigfile.tmp") or do {
+	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: $!";
+    };
+
+    print S $Preamble;
+    print S <D>;
+
+    close S;
+    close D;
+
+    unlink("$sigfile.tmp");
+
+    my $key_id;
+    my $key_name;
+    # This doesn't work because the output from verify goes to STDERR.
+    # If I try to redirect it using "--logger-fd 1" it just hangs.
+    # WTF?
+    my @verify = `gpg --batch --verify $SIGNATURE`;
+    while (@verify) {
+        if (/key ID ([0-9A-F]+)$/) {
+            $key_id = $1;
+        } elsif (/signature from "(.+)"$/) {
+            $key_name = $1;
+        }
+    }
+
+    my $found_name;
+    my $found_key;
+    if (defined $key_id && defined $key_name) {
+        my $keyserver = _keyserver($version);
+        while (`gpg --batch --keyserver=$keyserver --search-keys '$key_name'`) {
+            if (/^\(\d+\)/) {
+                $found_name = 0;
+            } elsif ($found_name) {
+                if (/key \Q$key_id\E/) {
+                    $found_key = 1;
+                    last;
+                }
+            }
+
+            if (/\Q$key_name\E/) {
+                $found_name = 1;
+                next;
+            }
+        }
+
+        unless ($found_key) {
+            _warn_non_public_signature($key_name);
+        }
+    }
+
+    return 1;
+}
+
+sub _sign_crypt_openpgp {
+    my ($sigfile, $plaintext) = @_;
+
+    require Crypt::OpenPGP;
+    my $pgp = Crypt::OpenPGP->new;
+    my $ring = Crypt::OpenPGP::KeyRing->new(
+	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);
+
+    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,
+    ) or die $pgp->errstr;
+
+
+    local *D;
+    open D, ">$sigfile" or die "Could not write to $sigfile: $!";
+    print D $Preamble;
+    print D $signature;
+    close D;
+
+    require Crypt::OpenPGP::KeyServer;
+    my $server = Crypt::OpenPGP::KeyServer->new(Server => $KeyServer);
+
+    unless ($server->find_keyblock_by_keyid($cert->key_id)) {
+        _warn_non_public_signature($uid);
+    }
+
+    return 1;
+}
+
+sub _warn_non_public_signature {
+    my $uid = shift;
+
+    warn <<"EOF"
+You have signed this distribution with a key ($uid) that cannot be
+found on the public key server at $KeyServer.
+
+This will probably cause signature verification to fail if your module
+is distributed on CPAN.
+EOF
+}
+
+sub _mkdigest {
+    my $digest = _mkdigest_files(undef, @_) or return;
+    my $plaintext = '';
+
+    foreach my $file (sort keys %$digest) {
+	next if $file eq $SIGNATURE;
+	$plaintext .= "@{$digest->{$file}} $file\n";
+    }
+
+    return $plaintext;
+}
+
+sub _mkdigest_files {
+    my $p = shift;
+    my $algorithm = shift || $Cipher;
+    my $dosnames = (defined(&Dos::UseLFN) && Dos::UseLFN()==0);
+    my $read = ExtUtils::Manifest::maniread() || {};
+    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)
+    } || eval {
+	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)
+    } || eval {
+	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");
+    } and return } or do {
+	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;
+        }
+        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;
+	}
+    }
+
+    return \%digest;
+}
+
+1;
+
+__END__
+
+=head1 SEE ALSO
+
+L<Digest>, L<Digest::SHA>, L<Digest::SHA1>, L<Digest::SHA::PurePerl>
+
+L<ExtUtils::Manifest>, L<Crypt::OpenPGP>, L<Test::Signature>
+
+=head1 AUTHORS
+
+Autrijus Tang E<lt>autrijus at autrijus.orgE<gt>
+
+=head1 COPYRIGHT
+
+Copyright 2002, 2003, 2004 by Autrijus Tang E<lt>autrijus at autrijus.orgE<gt>.
+
+Parts of the documentation are copyrighted by Iain Truskett, 2002.
+
+This program is free software; you can redistribute it and/or 
+modify it under the same terms as Perl itself.
+
+See L<http://www.perl.com/perl/misc/Artistic.html>
+
+=cut

Added: packages/libmodule-signature-perl/branches/upstream/current/script/cpansign
===================================================================
--- packages/libmodule-signature-perl/branches/upstream/current/script/cpansign	2006-03-15 14:10:18 UTC (rev 2352)
+++ packages/libmodule-signature-perl/branches/upstream/current/script/cpansign	2006-03-15 16:14:26 UTC (rev 2353)
@@ -0,0 +1,95 @@
+#!/usr/bin/perl
+
+$VERSION = '0.06';
+
+=head1 NAME
+
+cpansign - CPAN signature management utility
+
+=head1 SYNOPSIS
+
+    % cpansign		    # verify an existing SIGNATURE, or
+			    # make a new one if none exists 
+
+    % cpansign file.par	    # verify or sign a PAR file
+
+    % 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
+
+=head1 DESCRIPTION
+
+This utility lets you create and verify SIGNATURE files. 
+
+=cut
+
+use strict;
+use Module::Signature;
+
+$Module::Signature::Verbose = 1;
+
+my %cmd = (
+    s => 'sign',
+    v => 'verify',
+    h => 'help',
+);
+
+my $op = $ARGV[0]; $op =~ s/^--?// if defined $op;
+my $dwim;
+if (!$op or $op eq 'skip' or -e $op) {
+    $op = (-e 'SIGNATURE' ? 'verify' : 'sign');
+    $dwim = 1;
+}
+
+my $cmd = $cmd{substr($op, 0, 1)};
+(system("perldoc $0"), exit) if $cmd eq 'help';
+my @args;
+push @args, (overwrite => '1')	if $cmd eq 'sign';
+push @args, (skip => '0')	unless grep /^-?-?skip/, @ARGV;
+
+if (my $sub = Module::Signature->can($cmd)) {
+    if (@ARGV and -e $ARGV[-1]) {
+	require PAR::Dist;
+	PAR::Dist::_verify_or_sign(
+	    dist => $ARGV[-1],
+	    $dwim ? () : (action => $cmd, @args)
+	);
+    }
+    else {
+	#if ($cmd eq 'sign') {
+	#    exit unless Module::Signature::verify();
+	#}
+	exit($sub->(@args));
+    }
+}
+else {
+    die "Unknown command: '$op'.\n".
+	"Available actions: " . (join(', ', sort values %cmd)) .  ".\n";
+}
+
+exit;
+
+=head1 SEE ALSO
+
+L<Module::Signature>
+
+=head1 AUTHORS
+
+Autrijus Tang E<lt>autrijus at autrijus.orgE<gt>
+
+=head1 COPYRIGHT
+
+Copyright 2002, 2003 by Autrijus Tang E<lt>autrijus at autrijus.orgE<gt>.
+
+This program is free software; you can redistribute it and/or 
+modify it under the same terms as Perl itself.
+
+See L<http://www.perl.com/perl/misc/Artistic.html>
+
+=cut

Added: packages/libmodule-signature-perl/branches/upstream/current/t/0-signature.t
===================================================================
--- packages/libmodule-signature-perl/branches/upstream/current/t/0-signature.t	2006-03-15 14:10:18 UTC (rev 2352)
+++ packages/libmodule-signature-perl/branches/upstream/current/t/0-signature.t	2006-03-15 16:14:26 UTC (rev 2353)
@@ -0,0 +1,31 @@
+#!/usr/bin/perl
+
+use strict;
+use Test::More;
+
+if (!eval { require Module::Signature; 1 }) {
+    plan skip_all => 
+      "Next time around, consider installing Module::Signature, ".
+      "so you can verify the integrity of this distribution.";
+}
+elsif ( !-e 'SIGNATURE' ) {
+    plan skip_all => "SIGNATURE not found";
+}
+elsif ( -s 'SIGNATURE' == 0 ) {
+    plan skip_all => "SIGNATURE file empty";
+}
+elsif (!eval { require Socket; Socket::inet_aton('pgp.mit.edu') }) {
+    plan skip_all => "Cannot connect to the keyserver to check module ".
+                     "signature";
+}
+else {
+    plan tests => 1;
+}
+
+my $ret = Module::Signature::verify();
+SKIP: {
+    skip "Module::Signature cannot verify", 1 
+      if $ret eq Module::Signature::CANNOT_VERIFY();
+
+    cmp_ok $ret, '==', Module::Signature::SIGNATURE_OK(), "Valid signature";
+}

Added: packages/libmodule-signature-perl/branches/upstream/current/t/1-basic.t
===================================================================
--- packages/libmodule-signature-perl/branches/upstream/current/t/1-basic.t	2006-03-15 14:10:18 UTC (rev 2352)
+++ packages/libmodule-signature-perl/branches/upstream/current/t/1-basic.t	2006-03-15 16:14:26 UTC (rev 2353)
@@ -0,0 +1,10 @@
+#!/usr/bin/perl
+
+use strict;
+use Test::More tests => 2;
+
+use_ok('Module::Signature');
+Module::Signature->import('SIGNATURE_OK');
+ok(defined(&SIGNATURE_OK), 'constant exported');
+
+__END__




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