#!/usr/bin/perl use strict; use warnings; use Cwd qw(abs_path); use lib abs_path('lib'); use IO::All; use XXX; # Get a list of all dists in system. XXX my @dists = map { $_->name; } grep { -e "$_/lib"; } io('src')->All_Dirs; # For each dist, find all modules in dist # For each module: # Extract doc into src/docs # Extract files into src/ # Extract a template version of the module into src/lib # Create a src/Makefile to rebuild modules # Link all src files into the base/ tree # Report all collisions __END__ @ARGV == 1 or die usage(); my $dist_path = shift; $dist_path =~ s/\/*$//; my $lib = io("$dist_path/lib"); $lib->is_dir or die usage(); my @modules = grep {$_->name =~ /\.pm$/} $lib->All_Files; my $dist = io->dir("$dist_path/src")->assert->chdir; for my $module (@modules) { my $module_name = $module->name; $module_name =~ s/.*\/lib\/(.*)\.pm$/$1/ or die $module_name; $module_name =~ s/\//::/g; print ">> $module_name\n"; eval "require $module_name"; die $@ if $@ and $@ !~ /HTTP\/BrowserDetect/; next unless $module_name->can('get_packed_files_from_classes'); my $instance = $module_name->new; $instance->extract_files; } sub usage { <<'...'; usage: k2-make-src module-path examples: k2-make-src src/plugins/ingy/Kwiki-BreadCrumbs ... }