#!/usr/bin/perl

use strict;
use warnings;
use Cwd qw(abs_path);
use lib abs_path('lib');
use IO::All;

# Get a list of all dists in system.
# 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

@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
...
}
