App-Chart
view release on metacpan or search on metacpan
devel/makefile-to-debs.pl view on Meta::CPAN
my $control_filename = File::Spec->catfile ($toplevel_dir,'debian','control');
print "control file: $control_filename\n";
my $control = $parser->parse_file ($control_filename, {stripComments=>1});
print "Parse::DebControl gives ", Dumper ($control);
my $source = $control->[0];
my $binary = $control->[1];
my $control_depends = $binary->{'Depends'};
if (! defined $control_depends) {
die "Oops, no Depends line\n";
}
print "Got Depends: $control_depends\n";
$control_depends = depends_to_hash ($control_depends);
{ ## no critic (RequireInterpolationOfMetachars)
delete $control_depends->{'${misc:Depends}'};
}
my $build_depends = $source->{'Build-Depends'};
if (! defined $build_depends) {
die "Oops, no Depends line\n";
}
print "Got Build-Depends: $build_depends\n";
$build_depends = depends_to_hash ($build_depends);
sub file_to_deb {
my ($filename) = @_;
### file_to_deb(): $filename
foreach my $prog (# 'dlocate',
# 'dloc',
'dpkg') {
my $matches = `$prog -S $filename`;
if ($matches =~ m{(.*): /usr/(share|lib)/perl/5.*/$filename}) {
return 'perl';
} elsif ($matches =~ m{(.*): /usr/(share|lib)/perl5/$filename}) {
return $1;
} else {
print "Oops, $filename not found\n$prog gave:\n";
print $matches;
}
}
return undef;
}
memoize('file_to_deb');
sub module_to_deb {
my ($module, $module_version) = @_;
### module_to_deb(): $module, $module_version
my $perl_version = Module::CoreList->first_release($module, $module_version);
### $perl_version
if (defined $perl_version) {
$perl_version = version->new($perl_version);
if ($perl_version > $minimum_perl_version) {
# my $filename = Module::Util::module_path ($module);
# ### $filename
my $file = $module;
$file =~ s{::}{/}g;
$file .= '.pm';
my $deb = file_to_deb ($file);
print "$module $module_version builtin since $perl_version, drop to guess $deb\n";
return $deb;
}
print "$module $module_version builtin since $perl_version\n";
}
my $file = $module;
$file =~ s{::}{/}g;
$file .= '.pm';
return file_to_deb ($file);
}
sub max_version {
return List::Util::reduce {$a > $b ? $a : $b}
map {version->new($_)}
@_;
}
$AptPkg::Config::_config->init;
my $apt_versioning = $AptPkg::Config::_config->system->versioning;
print "AptPkg::Version is '",$apt_versioning->label,"'\n";
sub deb_version_max {
my @versions = @_;
@versions = grep {defined} @versions;
if (@versions <= 1) { return $versions[0]; }
return List::Util::reduce
{ $apt_versioning->rel_compare ($a, $b) >= 0 ? $a : $b } @versions;
# return List::Util::reduce
# { (system ('dpkg', '--compare-versions', $a, '>>', $b) == 0)
# ? $a : $b } @versions;
}
my %deb_version_epoch = ('libglib-perl' => '1:',
'libgtk2-perl' => '1:');
sub cpan_version_to_deb_version {
my ($version, $deb) = @_;
if (my $epoch = $deb_version_epoch{$deb}) {
$version = "$epoch$version";
}
return $version;
}
my %makefile_depends;
foreach my $module (sort keys %$requires) {
my $version = $requires->{$module};
my $deb = module_to_deb ($module, $version);
$version = cpan_version_to_deb_version ($version, $deb);
print "$module $deb $version\n";
$makefile_depends{$deb}
= deb_version_max ($makefile_depends{$deb}, $version);
}
{ my $perl_version = $minimum_perl_version;
if ($makefile_contents =~ /^use ([0-9.]+)/) {
$perl_version = max_version ($perl_version, $1);
}
# 5.010 becomes 5.10.0
$perl_version = version->new($perl_version)->normal;
$perl_version =~ s/^v//;
$makefile_depends{'perl'} = $perl_version;
( run in 2.128 seconds using v1.01-cache-2.11-cpan-5a3173703d6 )