![]() | Name | Last modified | Size | Description |
---|---|---|---|---|
![]() | Parent Directory | - | ||
![]() | 0000_instructions_at_bottom | 2008-05-29 15:43 | 8.1K | |
![]() | 02packages.details.txt.gz | 2008-09-25 10:52 | 677K | |
![]() | ANSIColor.ppd | 2008-05-26 09:54 | 384 | |
![]() | ANSIColor.tar.gz | 2008-05-26 09:54 | 9.4K | |
![]() | Algorithm-Diff.ppd | 2008-05-26 11:06 | 330 | |
![]() | Algorithm-Diff.tar.gz | 2008-05-26 11:06 | 41K | |
![]() | Archive-Tar.old | 2008-05-26 11:07 | 615 | |
![]() | Archive-Tar.ppd | 2008-09-25 10:52 | 613 | |
![]() | Archive-Tar.tar.gz | 2008-05-26 11:07 | 39K | |
![]() | Archive-Zip.old | 2008-05-26 11:08 | 1.2K | |
![]() | Archive-Zip.ppd | 2008-09-25 10:52 | 783 | |
![]() | Archive-Zip.tar.gz | 2008-05-26 11:08 | 66K | |
![]() | CGI-RSS.ppd | 2008-05-24 18:27 | 306 | |
![]() | CGI-RSS.tar.gz | 2008-05-24 18:27 | 3.3K | |
![]() | CPAN-CachingProxy.old | 2008-05-24 18:37 | 581 | |
![]() | CPAN-CachingProxy.ppd | 2008-09-25 10:52 | 571 | |
![]() | CPAN-CachingProxy.tar.gz | 2008-05-24 18:37 | 4.7K | |
![]() | CPAN.old | 2008-05-26 10:06 | 713 | |
![]() | CPAN.ppd | 2008-09-25 10:52 | 716 | |
![]() | CPAN.tar.gz | 2008-05-26 10:06 | 196K | |
![]() | Cache.old | 2008-05-24 18:34 | 1.2K | |
![]() | Cache.ppd | 2008-09-25 10:52 | 916 | |
![]() | Cache.tar.gz | 2008-05-24 18:34 | 35K | |
![]() | Cairo.ppd | 2008-06-13 10:07 | 535 | |
![]() | Cairo.tar.gz | 2008-06-13 10:07 | 161K | |
![]() | Compress-Raw-Bzip2.ppd | 2008-05-26 11:01 | 424 | |
![]() | Compress-Raw-Bzip2.tar.gz | 2008-05-26 11:01 | 83K | |
![]() | Compress-Raw-Zlib.ppd | 2008-05-26 10:57 | 420 | |
![]() | Compress-Raw-Zlib.tar.gz | 2008-05-26 10:57 | 124K | |
![]() | Compress-Zlib.old | 2008-05-26 11:03 | 951 | |
![]() | Compress-Zlib.ppd | 2008-09-25 10:52 | 662 | |
![]() | Compress-Zlib.tar.gz | 2008-05-26 11:03 | 22K | |
![]() | Crypt-Blowfish.ppd | 2008-05-26 09:59 | 328 | |
![]() | Crypt-Blowfish.tar.gz | 2008-05-26 09:59 | 38K | |
![]() | Crypt-CBC.ppd | 2008-05-26 09:59 | 373 | |
![]() | Crypt-CBC.tar.gz | 2008-05-26 09:59 | 19K | |
![]() | Crypt-DES.ppd | 2008-05-26 09:59 | 313 | |
![]() | Crypt-DES.tar.gz | 2008-05-26 09:59 | 35K | |
![]() | Data-Dumper.ppd | 2008-05-26 10:52 | 320 | |
![]() | Data-Dumper.tar.gz | 2008-05-26 10:52 | 66K | |
![]() | Date-Lima.ppd | 2008-05-24 18:12 | 312 | |
![]() | Date-Lima.tar.gz | 2008-05-24 18:12 | 3.2K | |
![]() | Devel-FindBlessedRefs.ppd | 2008-05-24 18:26 | 384 | |
![]() | Devel-FindBlessedRefs.tar.gz | 2008-05-24 18:26 | 28K | |
![]() | Digest-HMAC.ppd | 2008-05-24 19:00 | 438 | |
![]() | Digest-HMAC.tar.gz | 2008-05-24 19:00 | 3.1K | |
![]() | Digest-MD5.old | 2008-05-26 09:55 | 435 | |
![]() | Digest-MD5.ppd | 2008-09-25 10:52 | 428 | |
![]() | Digest-MD5.tar.gz | 2008-05-26 09:55 | 41K | |
![]() | Digest-SHA.ppd | 2008-05-26 09:58 | 316 | |
![]() | Digest-SHA.tar.gz | 2008-05-26 09:58 | 66K | |
![]() | Digest-SHA1.old | 2008-05-26 09:57 | 380 | |
![]() | Digest-SHA1.ppd | 2008-09-25 10:52 | 374 | |
![]() | Digest-SHA1.tar.gz | 2008-05-26 09:57 | 40K | |
![]() | Event.ppd | 2008-05-24 19:19 | 354 | |
![]() | Event.tar.gz | 2008-05-24 19:19 | 134K | |
![]() | ExtUtils-CBuilder.old | 2008-05-26 08:47 | 682 | |
![]() | ExtUtils-CBuilder.ppd | 2008-09-25 10:52 | 446 | |
![]() | ExtUtils-CBuilder.tar.gz | 2008-05-26 08:47 | 17K | |
![]() | ExtUtils-Depends.ppd | 2008-06-13 08:03 | 335 | |
![]() | ExtUtils-Depends.tar.gz | 2008-06-13 08:03 | 7.7K | |
![]() | ExtUtils-MakeMaker.old | 2008-05-26 08:48 | 641 | |
![]() | ExtUtils-MakeMaker.ppd | 2008-09-25 10:52 | 521 | |
![]() | ExtUtils-MakeMaker.tar.gz | 2008-05-26 08:48 | 181K | |
![]() | ExtUtils-PkgConfig.ppd | 2008-06-13 08:03 | 340 | |
![]() | ExtUtils-PkgConfig.tar.gz | 2008-06-13 08:03 | 5.1K | |
![]() | File-HomeDir.old | 2008-05-26 10:56 | 888 | |
![]() | File-HomeDir.ppd | 2008-09-25 10:52 | 778 | |
![]() | File-HomeDir.tar.gz | 2008-05-26 10:56 | 16K | |
![]() | File-NFSLock.ppd | 2008-05-24 18:29 | 372 | |
![]() | File-NFSLock.tar.gz | 2008-05-24 18:29 | 10K | |
![]() | File-Path.old | 2008-05-26 10:16 | 584 | |
![]() | File-Path.ppd | 2008-09-25 10:52 | 416 | |
![]() | File-Path.tar.gz | 2008-05-26 10:16 | 18K | |
![]() | File-Slurp.ppd | 2008-05-26 11:28 | 401 | |
![]() | File-Slurp.tar.gz | 2008-05-26 11:28 | 10K | |
![]() | File-Temp.old | 2008-05-26 09:45 | 628 | |
![]() | File-Temp.ppd | 2008-09-25 10:52 | 572 | |
![]() | File-Temp.tar.gz | 2008-05-26 09:45 | 34K | |
![]() | File-Type.old | 2008-05-24 07:23 | 431 | |
![]() | File-Type.ppd | 2008-09-25 10:52 | 373 | |
![]() | File-Type.tar.gz | 2008-05-23 15:03 | 10K | |
![]() | File-Which.old | 2008-05-26 11:25 | 471 | |
![]() | File-Which.ppd | 2008-09-25 10:52 | 470 | |
![]() | File-Which.tar.gz | 2008-05-26 11:25 | 6.6K | |
![]() | Games-RolePlay-MapGen.old | 2008-05-26 11:41 | 834 | |
![]() | Games-RolePlay-MapGen.ppd | 2008-09-25 10:52 | 817 | |
![]() | Games-RolePlay-MapGen.tar.gz | 2008-05-26 11:41 | 54K | |
![]() | Getopt-ArgvFile.old | 2008-05-26 10:37 | 516 | |
![]() | Getopt-ArgvFile.ppd | 2008-09-25 10:52 | 452 | |
![]() | Getopt-ArgvFile.tar.gz | 2008-05-26 10:37 | 19K | |
![]() | Glib.ppd | 2008-06-13 09:49 | 489 | |
![]() | Glib.tar.gz | 2008-06-13 09:49 | 332K | |
![]() | Gtk2-Ex-Dialogs.ppd | 2008-05-24 07:23 | 605 | |
![]() | Gtk2-Ex-Dialogs.tar.gz | 2008-05-23 15:04 | 13K | |
![]() | Gtk2-Ex-PodViewer.old | 2008-05-24 07:36 | 635 | |
![]() | Gtk2-Ex-PodViewer.ppd | 2008-09-25 10:52 | 563 | |
![]() | Gtk2-Ex-PodViewer.tar.gz | 2008-05-24 07:36 | 23K | |
![]() | Gtk2-Ex-Simple-Menu.ppd | 2008-05-24 07:23 | 395 | |
![]() | Gtk2-Ex-Simple-Menu.tar.gz | 2008-05-23 15:05 | 5.4K | |
![]() | Gtk2-Ex-Utils.ppd | 2008-05-24 07:23 | 490 | |
![]() | Gtk2-Ex-Utils.tar.gz | 2008-05-23 15:04 | 6.3K | |
![]() | Gtk2.ppd | 2008-06-13 10:12 | 606 | |
![]() | Gtk2.tar.gz | 2008-06-13 10:12 | 1.7M | |
![]() | HTML-Parser.old | 2008-05-24 18:54 | 437 | |
![]() | HTML-Parser.ppd | 2008-09-25 10:52 | 437 | |
![]() | HTML-Parser.tar.gz | 2008-05-24 18:54 | 113K | |
![]() | HTTP-Server-Simple.old | 2008-05-24 19:03 | 564 | |
![]() | HTTP-Server-Simple.ppd | 2008-09-25 10:52 | 504 | |
![]() | HTTP-Server-Simple.tar.gz | 2008-05-24 19:03 | 12K | |
![]() | Heap.ppd | 2008-05-24 18:30 | 359 | |
![]() | Heap.tar.gz | 2008-05-24 18:30 | 16K | |
![]() | IO-Compress-Base.old | 2008-05-26 10:58 | 466 | |
![]() | IO-Compress-Base.ppd | 2008-09-25 10:52 | 471 | |
![]() | IO-Compress-Base.tar.gz | 2008-05-26 10:58 | 41K | |
![]() | IO-Compress-Zlib.old | 2008-05-26 11:00 | 596 | |
![]() | IO-Compress-Zlib.ppd | 2008-09-25 10:52 | 525 | |
![]() | IO-Compress-Zlib.tar.gz | 2008-05-26 11:00 | 119K | |
![]() | IO-Zlib.ppd | 2008-05-26 11:04 | 369 | |
![]() | IO-Zlib.tar.gz | 2008-05-26 11:04 | 8.0K | |
![]() | IO-stringy.ppd | 2008-05-24 07:23 | 317 | |
![]() | IO-stringy.tar.gz | 2008-05-23 15:38 | 41K | |
![]() | MIME-Base64.ppd | 2008-05-26 09:56 | 319 | |
![]() | MIME-Base64.tar.gz | 2008-05-26 09:56 | 38K | |
![]() | Makefile | 2008-05-29 15:43 | 1.8K | |
![]() | Math-Algebra-Symbols.old | 2008-05-26 10:04 | 629 | |
![]() | Math-Algebra-Symbols.ppd | 2008-09-25 10:52 | 522 | |
![]() | Math-Algebra-Symbols.tar.gz | 2008-05-26 10:04 | 93K | |
![]() | Math-BigInt-FastCalc.old | 2008-05-26 10:01 | 619 | |
![]() | Math-BigInt-FastCalc.ppd | 2008-09-25 10:52 | 618 | |
![]() | Math-BigInt-FastCalc.tar.gz | 2008-05-26 10:01 | 37K | |
![]() | Math-BigInt.old | 2008-05-26 10:01 | 526 | |
![]() | Math-BigInt.ppd | 2008-09-25 10:52 | 526 | |
![]() | Math-BigInt.tar.gz | 2008-05-26 10:01 | 136K | |
![]() | Math-BigRat.old | 2008-05-26 10:02 | 576 | |
![]() | Math-BigRat.ppd | 2008-09-25 10:52 | 575 | |
![]() | Math-BigRat.tar.gz | 2008-05-26 10:02 | 19K | |
![]() | Math-Units-PhysicalValue.old | 2008-05-24 18:25 | 610 | |
![]() | Math-Units-PhysicalValue.ppd | 2008-09-25 10:52 | 604 | |
![]() | Math-Units-PhysicalValue.tar.gz | 2008-05-24 18:25 | 7.4K | |
![]() | Math-Units.ppd | 2008-05-26 10:04 | 315 | |
![]() | Math-Units.tar.gz | 2008-05-26 10:04 | 9.1K | |
![]() | Module-Build.old | 2008-05-26 08:49 | 1.4K | |
![]() | Module-Build.ppd | 2008-09-25 10:52 | 953 | |
![]() | Module-Build.tar.gz | 2008-05-26 08:49 | 255K | |
![]() | Module-ScanDeps.old | 2008-05-26 10:35 | 780 | |
![]() | Module-ScanDeps.ppd | 2008-09-25 10:52 | 765 | |
![]() | Module-ScanDeps.tar.gz | 2008-05-26 10:35 | 20K | |
![]() | Net-Daemon.ppd | 2008-05-24 19:04 | 383 | |
![]() | Net-Daemon.tar.gz | 2008-05-24 19:04 | 28K | |
![]() | Net-SMTP-OneLiner.ppd | 2008-09-25 10:50 | 428 | |
![]() | Net-SMTP-OneLiner.tar.gz | 2008-09-25 10:50 | 3.6K | |
![]() | Net-Server.old | 2008-05-24 19:04 | 581 | |
![]() | Net-Server.ppd | 2008-09-25 10:52 | 415 | |
![]() | Net-Server.tar.gz | 2008-05-24 19:04 | 89K | |
![]() | Number-Format.ppd | 2008-05-24 18:14 | 325 | |
![]() | Number-Format.tar.gz | 2008-05-24 18:14 | 14K | |
![]() | PAR-Dist.old | 2008-05-26 10:18 | 617 | |
![]() | PAR-Dist.ppd | 2008-09-25 10:52 | 556 | |
![]() | PAR-Dist.tar.gz | 2008-05-26 10:18 | 14K | |
![]() | PAR-Packer.ppd | 2008-07-31 13:21 | 1.0K | |
![]() | PAR-Packer.tar.gz | 2008-07-31 13:21 | 1.6M | |
![]() | PAR.ppd | 2008-07-31 13:07 | 719 | |
![]() | PAR.tar.gz | 2008-07-31 13:07 | 65K | |
![]() | POE.old | 2008-05-24 20:30 | 1.0K | |
![]() | POE.ppd | 2008-09-25 10:52 | 794 | |
![]() | POE.tar.gz | 2008-05-24 20:30 | 364K | |
![]() | Parse-Binary.ppd | 2008-05-26 10:26 | 386 | |
![]() | Parse-Binary.tar.gz | 2008-05-26 10:26 | 14K | |
![]() | PathTools.old | 2008-05-26 08:49 | 601 | |
![]() | PathTools.ppd | 2008-09-25 10:52 | 489 | |
![]() | PathTools.tar.gz | 2008-05-26 08:49 | 74K | |
![]() | Pod-Escapes.ppd | 2008-05-24 07:23 | 319 | |
![]() | Pod-Escapes.tar.gz | 2008-05-23 15:29 | 8.2K | |
![]() | Pod-Parser.old | 2008-05-26 10:06 | 468 | |
![]() | Pod-Parser.ppd | 2008-09-25 10:52 | 469 | |
![]() | Pod-Parser.tar.gz | 2008-05-26 10:06 | 102K | |
![]() | Pod-Simple.old | 2008-05-26 10:30 | 1.1K | |
![]() | Pod-Simple.ppd | 2008-09-25 10:52 | 526 | |
![]() | Pod-Simple.tar.gz | 2008-05-26 10:30 | 186K | |
![]() | README.txt | 2008-05-29 15:43 | 8.1K | |
![]() | Scalar-List-Utils.ppd | 2008-05-26 10:09 | 413 | |
![]() | Scalar-List-Utils.tar.gz | 2008-05-26 10:09 | 50K | |
![]() | Software-License.ppd | 2008-05-26 11:34 | 515 | |
![]() | Software-License.tar.gz | 2008-05-26 11:34 | 68K | |
![]() | Storable.ppd | 2008-05-26 10:05 | 310 | |
![]() | Storable.tar.gz | 2008-05-26 10:05 | 105K | |
![]() | Sub-Install.old | 2008-05-26 11:31 | 514 | |
![]() | Sub-Install.ppd | 2008-09-25 10:52 | 520 | |
![]() | Sub-Install.tar.gz | 2008-05-26 11:31 | 5.5K | |
![]() | Term-GentooFunctions.old | 2008-05-24 07:23 | 536 | |
![]() | Term-GentooFunctions.ppd | 2008-09-25 10:52 | 528 | |
![]() | Term-GentooFunctions.tar.gz | 2008-05-23 14:08 | 3.2K | |
![]() | Term-ReadLine-Perl.ppd | 2008-05-26 11:19 | 342 | |
![]() | Term-ReadLine-Perl.tar.gz | 2008-05-26 11:19 | 41K | |
![]() | TermReadKey.ppd | 2008-05-26 11:10 | 319 | |
![]() | TermReadKey.tar.gz | 2008-05-26 11:10 | 45K | |
![]() | Test-Harness.old | 2008-05-26 08:47 | 380 | |
![]() | Test-Harness.ppd | 2008-09-25 10:52 | 379 | |
![]() | Test-Harness.tar.gz | 2008-05-26 08:47 | 101K | |
![]() | Test-Number-Delta.old | 2008-06-13 10:07 | 527 | |
![]() | Test-Number-Delta.ppd | 2008-09-25 10:52 | 397 | |
![]() | Test-Number-Delta.tar.gz | 2008-06-13 10:07 | 7.1K | |
![]() | Test-Pod.old | 2008-05-26 10:31 | 556 | |
![]() | Test-Pod.ppd | 2008-09-25 10:52 | 486 | |
![]() | Test-Pod.tar.gz | 2008-05-26 10:31 | 4.6K | |
![]() | Test-Simple.ppd | 2008-05-26 12:21 | 458 | |
![]() | Test-Simple.tar.gz | 2008-05-26 12:21 | 75K | |
![]() | Test.old | 2008-05-26 09:31 | 472 | |
![]() | Test.ppd | 2008-09-25 10:52 | 470 | |
![]() | Test.tar.gz | 2008-05-26 09:31 | 19K | |
![]() | Text-Diff.ppd | 2008-05-26 11:07 | 376 | |
![]() | Text-Diff.tar.gz | 2008-05-26 11:07 | 15K | |
![]() | Text-Glob.old | 2008-05-26 11:24 | 371 | |
![]() | Text-Glob.ppd | 2008-09-25 10:52 | 372 | |
![]() | Text-Glob.tar.gz | 2008-05-26 11:24 | 3.5K | |
![]() | Text-Tabs+Wrap.ppd | 2008-05-26 10:07 | 414 | |
![]() | Text-Tabs+Wrap.tar.gz | 2008-05-26 10:07 | 6.1K | |
![]() | Text-Template.ppd | 2008-05-26 11:30 | 325 | |
![]() | Text-Template.tar.gz | 2008-05-26 11:30 | 46K | |
![]() | Tie-IxHash.ppd | 2008-05-26 11:29 | 316 | |
![]() | Tie-IxHash.tar.gz | 2008-05-26 11:29 | 7.0K | |
![]() | URI.ppd | 2008-05-24 18:53 | 355 | |
![]() | URI.tar.gz | 2008-05-24 18:53 | 56K | |
![]() | Win32-Exe.old | 2008-05-26 10:26 | 502 | |
![]() | Win32-Exe.ppd | 2008-09-25 10:52 | 502 | |
![]() | Win32-Exe.tar.gz | 2008-05-26 10:26 | 16K | |
![]() | Win32API-Registry.ppd | 2008-05-26 10:55 | 429 | |
![]() | Win32API-Registry.tar.gz | 2008-05-26 10:55 | 128K | |
![]() | XML-NamespaceSupport.ppd | 2008-05-26 12:19 | 346 | |
![]() | XML-NamespaceSupport.tar.gz | 2008-05-26 12:19 | 7.5K | |
![]() | XML-Parser.old | 2008-05-26 07:40 | 444 | |
![]() | XML-Parser.ppd | 2008-09-25 10:52 | 451 | |
![]() | XML-Parser.tar.gz | 2008-05-26 07:40 | 300K | |
![]() | XML-SAX-Expat.ppd | 2008-05-26 12:19 | 606 | |
![]() | XML-SAX-Expat.tar.gz | 2008-05-26 12:19 | 5.1K | |
![]() | XML-SAX.ppd | 2008-05-26 12:22 | 435 | |
![]() | XML-SAX.tar.gz | 2008-05-26 12:22 | 53K | |
![]() | XML-Simple.ppd | 2008-05-26 12:24 | 582 | |
![]() | XML-Simple.tar.gz | 2008-05-26 12:24 | 62K | |
![]() | XML-XPath.ppd | 2008-05-26 11:27 | 461 | |
![]() | XML-XPath.tar.gz | 2008-05-26 11:27 | 45K | |
![]() | YAML.ppd | 2008-05-26 11:22 | 364 | |
![]() | YAML.tar.gz | 2008-05-26 11:22 | 45K | |
![]() | bignum.old | 2008-05-26 10:03 | 630 | |
![]() | bignum.ppd | 2008-09-25 10:52 | 628 | |
![]() | bignum.tar.gz | 2008-05-26 10:03 | 19K | |
![]() | check_versions | 2008-05-29 15:41 | 3.4K | |
![]() | fix_ppds | 2008-09-25 10:51 | 7.1K | |
![]() | html.xsl | 2008-05-24 12:23 | 1.3K | |
![]() | libnet.old | 2008-05-26 09:49 | 491 | |
![]() | libnet.ppd | 2008-09-25 10:52 | 378 | |
![]() | libnet.tar.gz | 2008-05-26 09:49 | 78K | |
![]() | libwww-perl.old | 2008-05-26 09:50 | 733 | |
![]() | libwww-perl.ppd | 2008-09-25 10:52 | 725 | |
![]() | libwww-perl.tar.gz | 2008-05-26 09:50 | 249K | |
![]() | package.xml | 2008-09-25 10:52 | 48K | |
![]() | stockmonkey.old | 2008-07-22 11:25 | 377 | |
![]() | stockmonkey.ppd | 2008-09-25 10:52 | 320 | |
![]() | stockmonkey.tar.gz | 2008-07-22 11:25 | 27K | |
![]() | version.old | 2008-05-26 10:33 | 429 | |
![]() | version.ppd | 2008-09-25 10:52 | 430 | |
![]() | version.tar.gz | 2008-05-26 10:33 | 60K | |
This is Paul's ActiveState Repo. ppm rep add "Paul's Repo" https://voltar.org/active/5.8/ I have a Makefile that builds the packlist.xml: https://voltar.org/active/5.8/Makefile -=-------------=-----------------=-------------------------------- -= These scripts are for building your own repos: #!/bin/bash # NOTE: this is the ppdp or ppd push pgram I use to publish my active packages. set -e [ ! -f Makefile ] && perl Makefile.PL if [ -f notest ]; then nmake else nmake test fi nmake ppd perl -MActivePerl::DocTools -e 'UpdateHTML_blib(installdirs => "site")' if [ ! -f META.yml ]; then make metafile cp */META.yml . fi x=`grep ^name: META.yml | head -n 1 | sed s/name:[\ ]*//` mv $x.ppd $x.ppd_pre sed "s/CODEBASE HREF=\"\"/CODEBASE HREF=\"$x.tar.gz\"/" $x.ppd_pre > $x.ppd tar -cvvf $x.tar blib/ gzip --best $x.tar chmod 644 $x.tar.gz $x.ppd ssh webhost.tld rm -f dirname/$x.old scp -p $x.{tar.gz,ppd} webhost.tld:dirname #!/usr/bin/perl # NOTE: This fixes the brain-dead ActiveState dependency problems. # # What's brain-dead? They use the dist-name of modules instead of the module # name and they do it very poorly. Example: build a Test-Harness ppd and it # requires File::Spec. Try to install Test-Harness and PPM tries to pull in # File::Spec 0.82 (with a warning) without the ability to realize it really # wants PathTools. QED. (This program is a partial fix.) our $CPAN_MIRROR = 'http://www.perl.com/CPAN/bug'; # select a mirror please use strict; use Compress::Zlib; use WWW::Mechanize; use Term::GentooFunctions qw(:all); use Module::CoreList; use Data::Dump qw(dump); my $pauls_skiplist = {Config=>1}; # modules that aren't distributed (but come with perl, like Config.pm) my $pauls_corelist = # corelist modules that shouldn't be upgraded to separate dist versions {constant=>1, IO=>1}; my ($mod_db, $pro_db, $f_db); &fetch; &parse; &scan; &smarten; &write; # write {{{ sub write { for my $dist_name (grep {exists $f_db->{$_}{a}} keys %$f_db) { my @e = @{ $f_db->{$dist_name}{e} }; $e[1] =~ s/\.ppd$/.fix/ or die "couldn't rename output file"; $e[0] =~ s/<DEPENDENCY[^>]+>/MYDEPS/g; $e[0] =~ s/MYDEPS.*MYDEPS/MYDEPS/s; $e[0] =~ s/^\s+MYDEPS/MYDEPS/m; my $deps = ""; my %did = (); for (@{ $f_db->{$dist_name}{a}{d} }) { next if exists $did{$_->[0]}; $deps .= " <DEPENDENCY NAME=\"$_->[0]\" VERSION=\"$_->[1]\"\/>\n"; $did{$_->[0]} = undef; } chomp $deps; $e[0] =~ s/MYDEPS/$deps/; ebegin "writing $e[1]"; open my $out, ">$e[1]" or die "coudln't open output file: $!"; print $out $e[0]; close $out; eend 1; } } # }}} # smarten {{{ sub smarten { for my $dist_name (keys %$f_db) { my @deps = @{ $f_db->{$dist_name}{d} }; my @ndep = @deps; my $altered = 0; my $overall_result = 1; for my $dep (@deps) { my $mname = $dep->[0]; $mname =~ s/-/::/g; my $difn = $mod_db->{$mname}{d}; if( $pauls_skiplist->{$mname} ) { einfo "$dist_name depends on $dep->[0] ($mname), which is on Paul's special skiplist."; @ndep = grep {$_ != $dep} @ndep; $altered = 1; next; } my $adep = $dep; if( $difn ne "perl" and $difn ne $dep->[0] ) { einfo "$dist_name depends on $dep->[0], which doesn't equal $difn, renaming"; edie "difn='' on $dist_name, $dep->[0]" unless $difn; $adep = [$difn, $dep->[1]]; @ndep = map {$_ == $dep ? $adep : $_} @ndep; $altered = 1; } if( my $core = Module::CoreList->first_release($mname) ) { if( $difn eq "perl" ) { einfo "$dist_name depends on $dep->[0] ($mname), which is CORE in perl $core and is only shipped there. Removing."; @ndep = grep {$_ != $adep} @ndep; $altered = 1; } if( $pauls_corelist->{$difn} ) { einfo "$dist_name depends on $dep->[0] ($mname), which is CORE and is shipped elsewhere, but is ruled by Paul's Core List."; @ndep = grep {$_ != $adep} @ndep; $altered = 1; } } } if( $altered ) { einfo "tagging $dist_name with renamed and removed dependencies"; $f_db->{$dist_name}{a} = { d => \@ndep, }; } } } # }}} # fetch {{{ sub fetch { my $mech; if( not -f "02packages.details.txt.gz" or (stat _)[9]<(time-86400) ) { ebegin "fetching 02packages.details.txt.gz"; $mech ||= new WWW::Mechanize; $mech->get($CPAN_MIRROR . "modules/02packages.details.txt.gz", ":content_file" => "02packages.details.txt.gz"); eend (my $s = -s "02packages.details.txt.gz"); edie "not enough file" unless $s; } } # }}} # parse {{{ sub parse { my $gz = Compress::Zlib::gzopen("02packages.details.txt.gz", "rb") or die "couldn't open 02packages.details.txt.gz file: $!"; my $line; my $status_line_count = undef; my $my_line_count = 0; my %mod_db; my %pro_db; $mod_db = \%mod_db; $pro_db = \%pro_db; ebegin "parsing modules.txt.gz"; while( my $bytes = $gz->gzreadline($line) ) { chomp $line; if( my ($package, $version, $author_plus_dir, $dist_fname) = $line =~ m/^(\S+)\s+(\S+)\s+(\w\/\w{2}\/[\w\-]+)\/(\S+)/ ) { $version = undef if $version =~ m/undef/; my $dist; if( $dist_fname =~ m/^(.+?)-v?[\d\.]+(?:[a-z]|E\d+)?\.(?:tar\.gz|tgz|zip|pm\.gz)$/) { $dist = $1; } else { # seriously not worth mentioning when this doesn't work... wow # edie "ERROR PARSING package=\"$package\" dist_fname=\"$dist_fname\" (line $.)"; # zcat modules.txt.gz | grep -v tar.gz$ | grep -v tgz$ | grep -v zip$ | grep -v pm.gz } $mod_db{$package} = { v=>$version, p=>$author_plus_dir, f=>$dist_fname, d=>$dist, }; if( (my @s = split m/\//, $dist) == 2 ) { # NOTE: not worth mentioning, ... surprisingly common # ewarn "$dist_fname seems to have a subdir, adding {s} and shortening {d}"; $mod_db{$package}{s} = $s[0]; $mod_db{$package}{d} = $s[1]; } $my_line_count ++; } elsif ( $line =~ m/[A-Z][\w\-]+:\s*\S/ and not $line =~ m/::/ ) { # prolly a status line $status_line_count = $1 if $line =~ /^Line-Count:\s+(\d+)/; } elsif ( $line =~ m/^\s*$/ ) { # yawn } else { edie "ERROR PARSING LINE $.: $line"; } } ewarn "my_line_count: $my_line_count; status_line_count: $status_line_count" if $my_line_count != $status_line_count; eend( $my_line_count == $status_line_count ); ebegin "building dist db"; for my $mod (keys %mod_db) { if( my $dis = $mod_db{$mod}{d} ) { $pro_db{$dis} = [] unless exists $pro_db{$dis}; push @{$pro_db{$dis}}, $mod; } } eend 1; } # }}} # scan {{{ sub scan { local $/ = undef; my %f_db; $f_db = \%f_db; ebegin "parsing ppd files"; for my $file (glob "*.ppd") { open my $fh, $file or die "error opening $file: $!"; my $entire_file = <$fh>; close $fh; my ($dist_name) = $entire_file =~ m/SOFTPKG NAME="([^"]+)"/; my @dep; # depenedencies while( $entire_file =~ m/DEPENDENCY NAME="([^"]+)" VERSION="([^"]+)"/g ) { push @dep, [$1, $2]; } my @dis_pro = @{$pro_db->{$dist_name}} if exists $pro_db->{$dist_name}; ewarn "couldn't find that $dist_name provides anything..." unless @dis_pro; $f_db{$dist_name} = { p=>\@dis_pro, d=>\@dep, e=>[$entire_file, $file], }; } eend (keys %f_db); } # }}}