Icon  Name                                               Last modified      Size  Description
[PARENTDIR] 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 [TXT] 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);
}
# }}}