diff options
-rwxr-xr-x | bin/genpkg | 23 | ||||
-rwxr-xr-x | bin/makepkgmeta | 22 | ||||
-rwxr-xr-x | lib/metas/perl | 12 | ||||
-rwxr-xr-x | lib/metas/perl.d/perl-dist | 59 | ||||
-rwxr-xr-x | lib/metas/perl.d/scrapecore | 8 |
5 files changed, 77 insertions, 47 deletions
@@ -10,29 +10,28 @@ vard=~/var if [ $# -lt 1 ] then echo "usage: $prog [package name]" 1>&2 - exit 1 + exit 2 fi if ! [ -d "$tweakd" ] then echo "$prog: bad package tweaks dir: $tweakd" 1>&2 - exit 2 + exit 1 fi if ! [ -d "$pkgd" ] then echo "$prog: bad package dest dir: $pkgd" 1>&2 - exit 2 + exit 1 fi if ! [ -d "$vard" ] then echo "$prog: bad package var dir: $vard" 1>&2 - exit 2 + exit 1 fi cwd=$(pwd) -set -e for pkg do @@ -40,15 +39,19 @@ do cd "$pkgd/$pkg" METABIN=$libd/metas PKGVAR=$vard makepkgmeta "$pkg" >PKGMETA - case $? in - 0) echo "Generated $pkgd/$pkg/PKGMETA" ;; - *) exit $? - esac + case $? in + 0) echo "Generated $pkgd/$pkg/PKGMETA" ;; + *) exit $? + esac twk=$tweakd/$pkg if [ -f "$twk" -a -r "$twk" ] then - tweakmeta >PKGMETA.new <$twk + if ! tweakmeta >PKGMETA.new <$twk + then + rm PKGMETA.new + exit 1 + fi mv PKGMETA.new PKGMETA echo "Tweaked PKGMETA with $tweakd/$pkg." fi diff --git a/bin/makepkgmeta b/bin/makepkgmeta index 476d576..82a7b1f 100755 --- a/bin/makepkgmeta +++ b/bin/makepkgmeta @@ -17,13 +17,9 @@ $1 == "source" { END { # remember that metas emit no output when they cant match # a package. - if (NR == 0) exit 0 + if (NR == 0 || !ver) exit 2 ORS="\n" - if (!ver) { - print prog ": wtf? pkgver is empty!" | "cat 1>&2" - exit 1 - } # Replace any version strings in the source file with ${pkgver}. gsub(/[.]/, "\\\\&", ver) @@ -63,18 +59,20 @@ esac for flav in "$METABIN"/* do [ -f "$flav" -a -x "$flav" ] || continue - PATH="$PATH:$flav.d" "$flav" $1 | lazysource + PATH="$PATH:$flav.d" "$flav" $1 >PKGMETA.tmp metaret=$? case $metaret in 0) basicmeta $1 + lazysource <PKGMETA.tmp + rm PKGMETA.tmp exit 0 ;; - 1) ;; # loop - 2) echo "error: $flav encountered an error" 1>&2 - exit 2 ;; - *) echo "error: $flav returned error code $metaret" 1>&2 - exit 2 ;; + 1) echo "makepkgmeta: $flav encountered an error" 1>&2 + exit 1 ;; + 2) ;; # loop + *) echo "makepkgmeta: $flav returned error code $metaret" 1>&2 + exit 1 ;; esac done -echo "error: no matching meta generator found for '$1'" 1>&2 +echo "makepkgmeta: no matching meta generator found for '$1'" 1>&2 exit 1 diff --git a/lib/metas/perl b/lib/metas/perl index adb3b08..961084d 100755 --- a/lib/metas/perl +++ b/lib/metas/perl @@ -25,7 +25,7 @@ sub matchdist or err("$PROG: PKGVAR env variable is unset\n"); if(!-f "$var/cpandists" || -M "$var/cpandists" > 1) { - print STDERR "Refreshing local CPAN distribution list..."; + print STDERR "$PROG: Refreshing local CPAN data..."; my $cwd = getcwd(); chdir($var) or die "chdir: $!"; system('fetchcpan'); @@ -37,7 +37,8 @@ sub matchdist open(DISTS, '<', "$var/cpandists") or err("$PROG: open: $!"); while(<DISTS>) { my @f = split; - next unless(lc($f[0]) eq lc($dist)); + my $d = lc $f[0]; $d =~ tr/-_/--/s; + next unless($d eq lc($dist)); close(DISTS); return ($f[0], $f[2]); } @@ -76,8 +77,11 @@ sub main STDERR->autoflush(1); my ($realname, $cpath) = matchdist($dist); unless($realname){ - print STDERR "$PROG: failed to find perl dist similar to $dist\n"; - exit 1; + unless($forcechk){ + ## Don't print errors unless perl- package was requested. + print STDERR qq{$PROG: failed to find perl dist similar to '$dist'\n}; + } + return 2; } fetchdist($cpath); diff --git a/lib/metas/perl.d/perl-dist b/lib/metas/perl.d/perl-dist index cefcaf9..3259fd8 100755 --- a/lib/metas/perl.d/perl-dist +++ b/lib/metas/perl.d/perl-dist @@ -273,42 +273,63 @@ sub _distsofmods my (@mods) = @_; return () if(@mods == 0); + @mods = _nocore(@mods); - my $var = $ENV{'PKGVAR'} - or die "$PROG: PKGVAR env variable is unset\n"; + my $var = _vardir(); open(my $fh, '<', "$var/cpanmods") or die "$PROG: failed to open $var/cpanmods: $!"; - my (@hunted, %dists) = @mods; + my %mods = map { ($_ => 1) } @mods; + my %dists; local $/ = ''; RECLOOP: while(my $rec = <$fh>) { - my ($dist, @modvers) = split(/\n/, $rec); - for (@modvers) { - my ($m) = split; - - CMPLOOP: - for my $i (0 .. $#hunted) { - next CMPLOOP unless($hunted[$i] eq $m); - $dists{$m} = $dist; - splice @hunted, $i, 1; - last RECLOOP if(@hunted == 0); - last CMPLOOP; - } + last RECLOOP unless(keys %mods > 0); + + my($dist, @mvs) = split(/\n/, $rec); + MODLOOP: + for(@mvs){ + my($m) = split; + my $fnd = delete($mods{$m}) or next; + $dists{$m} = $dist; } } - if (@hunted) { - for my $lost (@hunted) { - print STDERR "$PROG: failed to find module $lost\n"; + my @lost = keys %mods; + if(@lost){ + for my $m (@lost){ + print STDERR "$PROG: failed to find module $m\n"; } - exit 2; + exit 1; } return %dists; } +sub _nocore +{ + my (@mods) = @_; + + my $path = _vardir() . '/coremods'; + open(my $if, '<', $path) or die "$PROG: open $path: $!"; + + my %mods = map { ($_ => 1) } @mods; + while(<$if>){ + my ($m) = split; + delete $mods{$m}; + } + + close($if); + return keys %mods; +} + +sub _vardir +{ + return $ENV{'PKGVAR'} + or die "$PROG: PKGVAR env variable is unset\n"; +} + #----------------------------------------------------------------------------- package main; diff --git a/lib/metas/perl.d/scrapecore b/lib/metas/perl.d/scrapecore index eae1b21..2e1aba3 100755 --- a/lib/metas/perl.d/scrapecore +++ b/lib/metas/perl.d/scrapecore @@ -205,8 +205,9 @@ sub _delmatch sub coreonly { - my (%mods) = map { @$_ } @_; - my $path = "$ENV{'PKGVAR'}/cpanmods"; + my %mods = map { @$_ } @_; + my $var = $ENV{'PKGVAR'} || "$ENV{'HOME'}/var"; + my $path = "$var/cpanmods"; open(my $if, '<', $path) or die("open $path: $!"); my @dists; @@ -233,5 +234,8 @@ my @mods = (CoreDist::findmods($perldir), CoreLib::findmods($perldir)); +## Embedded modules without any files... +push @mods, [qw/ Config 1/]; + @mods = coreonly(@mods); for my $mv (@mods){ print "@$mv\n"; } |