| @@ -1,15 +1,15 @@ | | | @@ -1,15 +1,15 @@ |
1 | #!@PERL5@ | | 1 | #!@PERL5@ |
2 | # $NetBSD: lintpkgsrc.pl,v 1.108 2022/08/17 17:26:35 rillig Exp $ | | 2 | # $NetBSD: lintpkgsrc.pl,v 1.109 2022/08/17 17:40:09 rillig Exp $ |
3 | | | 3 | |
4 | # Written by David Brownlee <abs@netbsd.org>. | | 4 | # Written by David Brownlee <abs@netbsd.org>. |
5 | # | | 5 | # |
6 | # Caveats: | | 6 | # Caveats: |
7 | # The 'Makefile parsing' algorithm used to obtain package versions and | | 7 | # The 'Makefile parsing' algorithm used to obtain package versions and |
8 | # DEPENDS information is geared towards speed rather than perfection, | | 8 | # DEPENDS information is geared towards speed rather than perfection, |
9 | # though it has gotten somewhat better over time, it only parses the | | 9 | # though it has gotten somewhat better over time, it only parses the |
10 | # simpler Makefile conditionals. | | 10 | # simpler Makefile conditionals. |
11 | # | | 11 | # |
12 | # TODO: Handle fun DEPENDS like avifile-devel with | | 12 | # TODO: Handle fun DEPENDS like avifile-devel with |
13 | # {qt2-designer>=2.2.4,qt2-designer-kde>=2.3.1nb1} | | 13 | # {qt2-designer>=2.2.4,qt2-designer-kde>=2.3.1nb1} |
14 | | | 14 | |
15 | use v5.36; | | 15 | use v5.36; |
| @@ -143,26 +143,27 @@ sub load($class, $fname) { | | | @@ -143,26 +143,27 @@ sub load($class, $fname) { |
143 | while (defined(my $line = <STORE>)) { | | 143 | while (defined(my $line = <STORE>)) { |
144 | chomp($line); | | 144 | chomp($line); |
145 | if ($line =~ m"^ package \t ([^\t]+) \t ([^\t]+) $"x) { | | 145 | if ($line =~ m"^ package \t ([^\t]+) \t ([^\t]+) $"x) { |
146 | $pkgver = $self->add($1, $2); | | 146 | $pkgver = $self->add($1, $2); |
147 | } elsif ($line =~ m"^ var \t ([^\t]+) \t (.*) $"x) { | | 147 | } elsif ($line =~ m"^ var \t ([^\t]+) \t (.*) $"x) { |
148 | $pkgver->var($1, $2); | | 148 | $pkgver->var($1, $2); |
149 | } elsif ($line =~ m"^ sub ") { | | 149 | } elsif ($line =~ m"^ sub ") { |
150 | die "Outdated cache format in '$fname'\n"; | | 150 | die "Outdated cache format in '$fname'\n"; |
151 | } else { | | 151 | } else { |
152 | die "Invalid line '$line' in cache '$fname'\n"; | | 152 | die "Invalid line '$line' in cache '$fname'\n"; |
153 | } | | 153 | } |
154 | } | | 154 | } |
155 | close(STORE) or die; | | 155 | close(STORE) or die; |
| | | 156 | $self; |
156 | } | | 157 | } |
157 | | | 158 | |
158 | sub store($self, $fname) { | | 159 | sub store($self, $fname) { |
159 | open(STORE, '>', $fname) | | 160 | open(STORE, '>', $fname) |
160 | or die("Cannot save package data to $fname: $!\n"); | | 161 | or die("Cannot save package data to $fname: $!\n"); |
161 | foreach my $pkgver ($self->pkgvers_all) { | | 162 | foreach my $pkgver ($self->pkgvers_all) { |
162 | my $pkgbase = $pkgver->pkgbase; | | 163 | my $pkgbase = $pkgver->pkgbase; |
163 | my $pkgversion = $pkgver->pkgversion; | | 164 | my $pkgversion = $pkgver->pkgversion; |
164 | | | 165 | |
165 | $pkgbase =~ /^\S+$/ | | 166 | $pkgbase =~ /^\S+$/ |
166 | or die "cannot store package name '$pkgbase'\n"; | | 167 | or die "cannot store package name '$pkgbase'\n"; |
167 | $pkgversion =~ /^\S+$/ | | 168 | $pkgversion =~ /^\S+$/ |
168 | or die "cannot store package version '$pkgversion'\n"; | | 169 | or die "cannot store package version '$pkgversion'\n"; |
| @@ -787,31 +788,28 @@ sub list_installed_packages() { | | | @@ -787,31 +788,28 @@ sub list_installed_packages() { |
787 | open(PKG_INFO, "$conf_pkg_info -e '*' |") | | 788 | open(PKG_INFO, "$conf_pkg_info -e '*' |") |
788 | or fail("Unable to run $conf_pkg_info: $!"); | | 789 | or fail("Unable to run $conf_pkg_info: $!"); |
789 | chomp(my @pkgs = <PKG_INFO>); | | 790 | chomp(my @pkgs = <PKG_INFO>); |
790 | close(PKG_INFO); | | 791 | close(PKG_INFO); |
791 | map { $_ = canonicalize_pkgname($_) } @pkgs; | | 792 | map { $_ = canonicalize_pkgname($_) } @pkgs; |
792 | } | | 793 | } |
793 | | | 794 | |
794 | # List top level pkgsrc categories | | 795 | # List top level pkgsrc categories |
795 | # | | 796 | # |
796 | sub list_pkgsrc_categories($pkgsrcdir) { | | 797 | sub list_pkgsrc_categories($pkgsrcdir) { |
797 | my (@categories); | | 798 | my (@categories); |
798 | | | 799 | |
799 | opendir(BASE, $pkgsrcdir) || die("Unable to opendir($pkgsrcdir): $!"); | | 800 | opendir(BASE, $pkgsrcdir) || die("Unable to opendir($pkgsrcdir): $!"); |
800 | @categories = | | 801 | @categories = grep { !/^\./ && -f "$pkgsrcdir/$_/Makefile" } |
801 | grep(substr($_, 0, 1) ne '.' | | 802 | readdir(BASE); |
802 | && $_ ne 'CVS' | | | |
803 | && -f "$pkgsrcdir/$_/Makefile", | | | |
804 | readdir(BASE)); | | | |
805 | closedir(BASE); | | 803 | closedir(BASE); |
806 | @categories; | | 804 | @categories; |
807 | } | | 805 | } |
808 | | | 806 | |
809 | # For a given category, list potentially valid pkgdirs | | 807 | # For a given category, list potentially valid pkgdirs |
810 | # | | 808 | # |
811 | sub list_pkgsrc_pkgdirs($pkgsrcdir, $cat) { | | 809 | sub list_pkgsrc_pkgdirs($pkgsrcdir, $cat) { |
812 | opendir(CAT, "$pkgsrcdir/$cat") | | 810 | opendir(CAT, "$pkgsrcdir/$cat") |
813 | or die("Unable to opendir($pkgsrcdir/$cat): $!"); | | 811 | or die("Unable to opendir($pkgsrcdir/$cat): $!"); |
814 | my @pkgdirs = sort grep { | | 812 | my @pkgdirs = sort grep { |
815 | $_ ne 'Makefile' | | 813 | $_ ne 'Makefile' |
816 | && $_ ne 'pkg' | | 814 | && $_ ne 'pkg' |
817 | && $_ ne 'CVS' | | 815 | && $_ ne 'CVS' |