|
|
@ -1,176 +0,0 @@ |
|
|
|
#!/bin/sh |
|
|
|
# |
|
|
|
# Generate perl base modules package definitions |
|
|
|
# |
|
|
|
# Copyright (C) 2007 Peter Colberg <peter@petercolberg.org> |
|
|
|
# Licensed under the terms of the GNU General Public License. |
|
|
|
# |
|
|
|
|
|
|
|
if [ $# -lt 1 ]; then |
|
|
|
echo >&2 "Usage: $(basename $0) STAGING-DIR [OUTFILE]" |
|
|
|
exit 1 |
|
|
|
fi |
|
|
|
|
|
|
|
STAGING_DIR="$1" |
|
|
|
PERL_BIN="$STAGING_DIR/usr/bin/perl" |
|
|
|
PERL_LIB="$STAGING_DIR/usr/lib/perl5/5.10" |
|
|
|
INC_DIR="$(dirname $0)" |
|
|
|
shift |
|
|
|
|
|
|
|
"$PERL_BIN" -I"$INC_DIR" -I"$PERL_LIB" - "$PERL_LIB" "$@" <<'PERL_SCRIPT' |
|
|
|
use strict; |
|
|
|
use warnings; |
|
|
|
|
|
|
|
use Module::ScanDeps; |
|
|
|
use File::Find; |
|
|
|
use File::Basename; |
|
|
|
|
|
|
|
our $skipfiles = 'CORE vmsish.pm auto/sdbm'; |
|
|
|
|
|
|
|
our %defmodules = ( |
|
|
|
'essential' => 'lib.pm vars.pm strict.pm warnings.pm warnings Carp Carp.pm Exporter Exporter.pm locale.pm subs.pm overload.pm constant.pm', |
|
|
|
'getoptpl' => 'getopt.pl getopts.pl', |
|
|
|
'utf8' => 'utf8_heavy.pl', |
|
|
|
'Getopt' => 'newgetopt.pl', |
|
|
|
'open' => 'open2.pl open3.pl', |
|
|
|
'Config' => 'Config_heavy.pl', |
|
|
|
'bytes' => 'bytes_heavy.pl', |
|
|
|
); |
|
|
|
|
|
|
|
our %defdepends = ( |
|
|
|
'DB_File' => 'libdb1-compat', |
|
|
|
'GDBM_File' => 'libgdbm', |
|
|
|
); |
|
|
|
|
|
|
|
our $prefix = 'perlbase-'; |
|
|
|
|
|
|
|
sub template ($) { |
|
|
|
$_ = $_[0]; |
|
|
|
return <<TEMPLATE; |
|
|
|
define Package/$$_{package} |
|
|
|
SECTION:=lang |
|
|
|
CATEGORY:=Languages |
|
|
|
URL:=http://www.cpan.org/ |
|
|
|
TITLE:=$$_{module} perl module |
|
|
|
DEPENDS:=$$_{depends} |
|
|
|
endef |
|
|
|
|
|
|
|
define Package/$$_{package}/install |
|
|
|
\$(call perlmod/Install,\$(1),$$_{files},$$_{exclude}) |
|
|
|
endef |
|
|
|
|
|
|
|
\$(eval \$(call BuildPackage,$$_{package})) |
|
|
|
|
|
|
|
|
|
|
|
TEMPLATE |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
sub scandeps ($) { |
|
|
|
my $sitedir = shift; |
|
|
|
my @result; |
|
|
|
|
|
|
|
my ($mod, $file, @deps, $dep, %depends, $parent, $pkg); |
|
|
|
our (%files, %modules); |
|
|
|
my (%packages, %excludes); |
|
|
|
|
|
|
|
for $mod (keys %defmodules) { |
|
|
|
($pkg = $prefix . $mod) =~ tr/A-Z_/a-z-/; |
|
|
|
$modules{$pkg} = $mod; |
|
|
|
for $file (split / /, $defmodules{$mod}) { |
|
|
|
$files{$file} = $pkg; |
|
|
|
} |
|
|
|
} |
|
|
|
for $file ('pod', 'Pod', split(/ /, $skipfiles)) { |
|
|
|
$files{$file} = undef; |
|
|
|
} |
|
|
|
|
|
|
|
sub wanted { |
|
|
|
s/^\.\///; |
|
|
|
return if (/^(\.|auto)$/ or exists $files{$_}); |
|
|
|
if (/\.pod$/) { |
|
|
|
$files{$_} = undef; |
|
|
|
} |
|
|
|
elsif (exists $files{dirname($_)}) { |
|
|
|
$files{$_} = $files{dirname($_)}; |
|
|
|
} |
|
|
|
elsif (m!^(?:auto/)?([^./]+)(?:\.(?:pl|pm)|/|$)!) { |
|
|
|
(my $pkg = $prefix . $1) =~ tr/A-Z_/a-z-/; |
|
|
|
$modules{$pkg} = $1; |
|
|
|
$files{$_} = $pkg; |
|
|
|
} |
|
|
|
else { |
|
|
|
$files{$_} = undef; |
|
|
|
} |
|
|
|
} |
|
|
|
chdir($sitedir); |
|
|
|
find({ wanted => \&wanted, no_chdir => 1}, '.'); |
|
|
|
|
|
|
|
for $pkg (keys %modules) { |
|
|
|
$packages{$pkg} = []; |
|
|
|
$excludes{$pkg} = []; |
|
|
|
$depends{$pkg} = {}; |
|
|
|
} |
|
|
|
|
|
|
|
for $file (keys %files) { |
|
|
|
$mod = $files{$file}; |
|
|
|
$parent = $files{dirname($file)}; |
|
|
|
|
|
|
|
if (defined ($mod)) { |
|
|
|
if (defined ($parent) and not ($parent eq $mod)) { |
|
|
|
push @{$packages{$mod}}, $file; |
|
|
|
push @{$excludes{$parent}}, $file; |
|
|
|
} |
|
|
|
elsif (not defined ($parent)) { |
|
|
|
push @{$packages{$mod}}, $file; |
|
|
|
} |
|
|
|
} |
|
|
|
elsif (defined ($parent)) { |
|
|
|
push @{$excludes{$parent}}, $file; |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
for $mod (keys %defdepends) { |
|
|
|
($pkg = $prefix . $mod) =~ tr/A-Z_/a-z-/; |
|
|
|
for $dep (split / /, $defdepends{$mod}) { |
|
|
|
${$depends{$pkg}}{$dep} = 1; |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
@INC = ('.'); |
|
|
|
for $file (grep { -f $_ and defined $files{$_} } keys %files) { |
|
|
|
@deps = keys %{scan_deps(files => [ $file ], recurse => 0)}; |
|
|
|
$pkg = $files{$file}; |
|
|
|
|
|
|
|
for $dep (grep { not defined $files{$_} } @deps) { |
|
|
|
warn "$file: could not resolve dependency: $dep\n"; |
|
|
|
} |
|
|
|
for $dep (grep { defined $files{$_} } @deps) { |
|
|
|
next if ($files{$dep} eq $pkg); |
|
|
|
${$depends{$pkg}}{$files{$dep}} = 1; |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
for $pkg (sort keys %packages) { |
|
|
|
push @result, template({ |
|
|
|
package => $pkg, |
|
|
|
module => $modules{$pkg}, |
|
|
|
depends => join(' ', 'perl', sort keys %{$depends{$pkg}}), |
|
|
|
files => join(' ', sort @{$packages{$pkg}}), |
|
|
|
exclude => join(' ', sort @{$excludes{$pkg}}), |
|
|
|
}); |
|
|
|
} |
|
|
|
|
|
|
|
return join('', @result); |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
if (@ARGV > 1) { |
|
|
|
open FILE, ">$ARGV[1]" or die "$ARGV[1]: $!\n"; |
|
|
|
print FILE scandeps($ARGV[0]); |
|
|
|
close FILE; |
|
|
|
} |
|
|
|
else { |
|
|
|
print scandeps($ARGV[0] or '.'); |
|
|
|
} |
|
|
|
PERL_SCRIPT |