Skip to content

Commit a9d97fa

Browse files
committed
cpan2ab.pl: automatically tracks dependencies
1 parent b510eb7 commit a9d97fa

File tree

1 file changed

+46
-9
lines changed

1 file changed

+46
-9
lines changed

cpan2ab.pl

Lines changed: 46 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -54,31 +54,42 @@ ($)
5454
sub infer_deps($) {
5555
my $deps = shift;
5656
my @deps = @$deps;
57+
my @modules = ();
5758
my @rt_deps = ();
5859
my @build_deps = ();
5960
my @core_imports = ();
60-
foreach my $inc(@INC) {
61+
my @ignore_deps = ('perl', 'libwww-perl');
62+
foreach my $inc (@INC) {
6163
push @core_imports, "\'$inc\'" if $inc =~ m/core_perl$/;
6264
}
63-
my $imports = join(", ", @core_imports);
65+
my $imports = join( ", ", @core_imports );
6466

6567
foreach my $dep (@deps) {
6668
my %d = %$dep;
6769
next if $d{'relationship'} ne 'requires';
68-
next if system('perl', '-e', "\@INC=($imports);require $d{'module'};") == 0;
70+
next
71+
if system( 'perl', '-e', "\@INC=($imports);require $d{'module'};" )
72+
== 0;
6973
my $dist_name = query_on_cpan( $d{'module'}, 1 );
70-
next if $dist_name eq 'perl';
71-
my $name = normalize_name($dist_name);
74+
next if ($dist_name ~~ @ignore_deps);
75+
my $name = normalize_name($dist_name);
76+
my %dep_info = ( 'name' => $d{'module'}, 'dist' => $name );
77+
7278
if ( $d{'phase'} eq 'runtime' ) {
7379
push @rt_deps, "perl-$name" unless ( "perl-$name" ~~ @rt_deps );
80+
push @modules, \%dep_info unless ( \%dep_info ~~ @modules );
7481
}
7582
else {
7683
push @build_deps, "perl-$name"
7784
unless ( "perl-$name" ~~ @build_deps );
7885
}
7986
}
8087

81-
my %args = ( 'deps' => \@rt_deps, 'build_deps' => \@build_deps );
88+
my %args = (
89+
'deps' => \@rt_deps,
90+
'build_deps' => \@build_deps,
91+
'modules', \@modules
92+
);
8293
return \%args;
8394
}
8495

@@ -102,14 +113,40 @@ ($)
102113
or die "Could not create directory $ab_name/autobuild";
103114
die "Could not write to $ab_name/spec"
104115
unless open( FH, ">$ab_name/autobuild/defines" );
116+
my $description = "'$data{'description'}'";
117+
118+
if ( $data{'description'} =~ m/'/ ) {
119+
$description = "\"$data{'description'}\"";
120+
}
105121
print FH
106-
"PKGNAME=$ab_name\nPKGSEC=perl\nPKGDES='$data{'description'}'\nPKGDEP=\"perl $rt_deps\"\nBUILDDEP=\"$build_deps\"\n";
122+
"PKGNAME=$ab_name\nPKGSEC=perl\nPKGDES=$description\nPKGDEP=\"perl $rt_deps\"\n";
107123
close(FH);
108124
print STDERR "-- Writing abbs build files: $ab_name - OK\n";
109125
return \%deps;
110126
}
111127

112-
foreach my $module (@ARGV) {
128+
my @mods = @ARGV;
129+
my $full_auto = 1;
130+
my $count = 0;
131+
open( my $fh, '>>/tmp/list.lst' ) or die "Could not open /tmp/list.lst";
132+
foreach my $module (@mods) {
133+
my $length = scalar @mods;
134+
$count++;
135+
print STDERR "-- [$count/$length] Processing $module\n";
113136
my $data = query_on_cpan( $module, 0 );
114-
ab3_writer($data);
137+
my $deps = ab3_writer($data);
138+
next unless $full_auto;
139+
my %deps = %$deps;
140+
my @more_deps = @{ $deps{'modules'} };
141+
my $module_name = normalize_name($module);
142+
print $fh "perl-$module_name\n";
143+
foreach my $dep (@more_deps) {
144+
my %dep_info = %$dep;
145+
next if -d "perl-$dep_info{'dist'}";
146+
print "!! Missing: $dep_info{'name'}\n";
147+
push @mods, $dep_info{'name'} unless ($dep_info{'name'} ~~ @mods);
148+
}
115149
}
150+
close $fh;
151+
print STDERR "================================================================\n";
152+
print STDERR "Done. Total modules: $count, run `commit-o-matic /tmp/list.lst update` to auto commit.\n"

0 commit comments

Comments
 (0)