| @@ -1,16 +1,16 @@ | | | @@ -1,16 +1,16 @@ |
1 | #!@PERL5@ | | 1 | #!@PERL5@ |
2 | | | 2 | |
3 | # $NetBSD: lintpkgsrc.pl,v 1.25 2022/07/30 06:25:51 rillig Exp $ | | 3 | # $NetBSD: lintpkgsrc.pl,v 1.26 2022/07/30 06:56:40 rillig Exp $ |
4 | | | 4 | |
5 | # Written by David Brownlee <abs@netbsd.org>. | | 5 | # Written by David Brownlee <abs@netbsd.org>. |
6 | # | | 6 | # |
7 | # Caveats: | | 7 | # Caveats: |
8 | # The 'Makefile parsing' algorithm used to obtain package versions and | | 8 | # The 'Makefile parsing' algorithm used to obtain package versions and |
9 | # DEPENDS information is geared towards speed rather than perfection, | | 9 | # DEPENDS information is geared towards speed rather than perfection, |
10 | # though it has gotten somewhat better over time, it only parses the | | 10 | # though it has gotten somewhat better over time, it only parses the |
11 | # simpler Makefile conditionals. | | 11 | # simpler Makefile conditionals. |
12 | # | | 12 | # |
13 | # TODO: Handle fun DEPENDS like avifile-devel with | | 13 | # TODO: Handle fun DEPENDS like avifile-devel with |
14 | # {qt2-designer>=2.2.4,qt2-designer-kde>=2.3.1nb1} | | 14 | # {qt2-designer>=2.2.4,qt2-designer-kde>=2.3.1nb1} |
15 | | | 15 | |
16 | use locale; | | 16 | use locale; |
| @@ -35,27 +35,27 @@ my ( | | | @@ -35,27 +35,27 @@ my ( |
35 | %opt, # Command line options | | 35 | %opt, # Command line options |
36 | @matched_prebuiltpackages, # List of obsolete prebuilt package paths | | 36 | @matched_prebuiltpackages, # List of obsolete prebuilt package paths |
37 | @prebuilt_pkgdirs, # Use to follow symlinks in prebuilt pkgdirs | | 37 | @prebuilt_pkgdirs, # Use to follow symlinks in prebuilt pkgdirs |
38 | %prebuilt_pkgdir_cache, # To avoid symlink loops in prebuilt_pkgdirs | | 38 | %prebuilt_pkgdir_cache, # To avoid symlink loops in prebuilt_pkgdirs |
39 | ); | | 39 | ); |
40 | | | 40 | |
41 | sub usage_and_exit(); | | 41 | sub usage_and_exit(); |
42 | sub listdir($$); | | 42 | sub listdir($$); |
43 | sub get_default_makefile_vars(); | | 43 | sub get_default_makefile_vars(); |
44 | sub fail($); | | 44 | sub fail($); |
45 | sub parse_makefile_pkgsrc($); | | 45 | sub parse_makefile_pkgsrc($); |
46 | | | 46 | |
47 | $ENV{PATH} .= | | 47 | $ENV{PATH} .= |
48 | ":/bin:/usr/bin:/sbin:/usr/sbin:${conf_prefix}/sbin:${conf_prefix}/bin"; | | 48 | ":/bin:/usr/bin:/sbin:/usr/sbin:$conf_prefix/sbin:$conf_prefix/bin"; |
49 | | | 49 | |
50 | if ( | | 50 | if ( |
51 | !getopts('BDE:I:K:LM:OP:RSVdg:himopruyz', \%opt) | | 51 | !getopts('BDE:I:K:LM:OP:RSVdg:himopruyz', \%opt) |
52 | || $opt{h} | | 52 | || $opt{h} |
53 | || !(defined $opt{d} | | 53 | || !(defined $opt{d} |
54 | || defined $opt{g} | | 54 | || defined $opt{g} |
55 | || defined $opt{i} | | 55 | || defined $opt{i} |
56 | || defined $opt{m} | | 56 | || defined $opt{m} |
57 | || defined $opt{o} | | 57 | || defined $opt{o} |
58 | || defined $opt{p} | | 58 | || defined $opt{p} |
59 | || defined $opt{r} | | 59 | || defined $opt{r} |
60 | || defined $opt{u} | | 60 | || defined $opt{u} |
61 | || defined $opt{B} | | 61 | || defined $opt{B} |
| @@ -334,38 +334,38 @@ sub main() { | | | @@ -334,38 +334,38 @@ sub main() { |
334 | if (/Required by:/) { | | 334 | if (/Required by:/) { |
335 | $list = 1; | | 335 | $list = 1; |
336 | } elsif ($list) { | | 336 | } elsif ($list) { |
337 | chomp; | | 337 | chomp; |
338 | s/-\d.*//; | | 338 | s/-\d.*//; |
339 | print " $_"; | | 339 | print " $_"; |
340 | } | | 340 | } |
341 | } | | 341 | } |
342 | close(PKGINFO); | | 342 | close(PKGINFO); |
343 | } | | 343 | } |
344 | print "\n"; | | 344 | print "\n"; |
345 | } | | 345 | } |
346 | | | 346 | |
347 | print "\nRunning '${conf_make} fetch-list | sh' for each package:\n"; | | 347 | print "\nRunning '$conf_make fetch-list | sh' for each package:\n"; |
348 | foreach my $pkgver (@update) { | | 348 | foreach my $pkgver (@update) { |
349 | my ($pkgdir); | | 349 | my ($pkgdir); |
350 | | | 350 | |
351 | $pkgdir = $pkgver->var('dir'); | | 351 | $pkgdir = $pkgver->var('dir'); |
352 | if (!defined($pkgdir)) { | | 352 | if (!defined($pkgdir)) { |
353 | fail('Unable to determine ' . $pkgver->pkg . ' directory'); | | 353 | fail('Unable to determine ' . $pkgver->pkg . ' directory'); |
354 | } | | 354 | } |
355 | | | 355 | |
356 | print "$pkgsrcdir/$pkgdir\n"; | | 356 | print "$pkgsrcdir/$pkgdir\n"; |
357 | safe_chdir("$pkgsrcdir/$pkgdir"); | | 357 | safe_chdir("$pkgsrcdir/$pkgdir"); |
358 | system("${conf_make} fetch-list | sh"); | | 358 | system("$conf_make fetch-list | sh"); |
359 | } | | 359 | } |
360 | } | | 360 | } |
361 | } | | 361 | } |
362 | | | 362 | |
363 | if ($opt{E}) { | | 363 | if ($opt{E}) { |
364 | scan_pkgsrc_makefiles($pkgsrcdir); | | 364 | scan_pkgsrc_makefiles($pkgsrcdir); |
365 | store_pkgsrc_makefiles($opt{E}); | | 365 | store_pkgsrc_makefiles($opt{E}); |
366 | } | | 366 | } |
367 | } | | 367 | } |
368 | | | 368 | |
369 | sub canonicalize_pkgname($) { | | 369 | sub canonicalize_pkgname($) { |
370 | my ($pkgname) = @_; | | 370 | my ($pkgname) = @_; |
371 | | | 371 | |
| @@ -561,28 +561,28 @@ sub get_default_makefile_vars() { | | | @@ -561,28 +561,28 @@ sub get_default_makefile_vars() { |
561 | } else { | | 561 | } else { |
562 | $default_vars->{PKGSRCDIR} = $conf_pkgsrcdir; | | 562 | $default_vars->{PKGSRCDIR} = $conf_pkgsrcdir; |
563 | } | | 563 | } |
564 | | | 564 | |
565 | $default_vars->{DESTDIR} = ''; | | 565 | $default_vars->{DESTDIR} = ''; |
566 | $default_vars->{LOCALBASE} = '/usr/pkg'; | | 566 | $default_vars->{LOCALBASE} = '/usr/pkg'; |
567 | $default_vars->{X11BASE} = '/usr/X11R6'; | | 567 | $default_vars->{X11BASE} = '/usr/X11R6'; |
568 | | | 568 | |
569 | my ($vars); | | 569 | my ($vars); |
570 | if (-f '/etc/mk.conf' && ($vars = parse_makefile_vars('/etc/mk.conf'))) { | | 570 | if (-f '/etc/mk.conf' && ($vars = parse_makefile_vars('/etc/mk.conf'))) { |
571 | foreach my $var (keys %{$vars}) { | | 571 | foreach my $var (keys %{$vars}) { |
572 | $default_vars->{$var} = $vars->{$var}; | | 572 | $default_vars->{$var} = $vars->{$var}; |
573 | } | | 573 | } |
574 | } elsif (-f ${conf_sysconfdir} . '/mk.conf' && | | 574 | } elsif (-f "$conf_sysconfdir/mk.conf" && |
575 | ($vars = parse_makefile_vars(${conf_sysconfdir} . '/mk.conf'))) { | | 575 | ($vars = parse_makefile_vars("$conf_sysconfdir/mk.conf"))) { |
576 | foreach my $var (keys %{$vars}) { | | 576 | foreach my $var (keys %{$vars}) { |
577 | $default_vars->{$var} = $vars->{$var}; | | 577 | $default_vars->{$var} = $vars->{$var}; |
578 | } | | 578 | } |
579 | } | | 579 | } |
580 | | | 580 | |
581 | if ($opt{P}) { | | 581 | if ($opt{P}) { |
582 | $default_vars->{PKGSRCDIR} = realpath($opt{P}); | | 582 | $default_vars->{PKGSRCDIR} = realpath($opt{P}); |
583 | } | | 583 | } |
584 | | | 584 | |
585 | if ($opt{M}) { | | 585 | if ($opt{M}) { |
586 | $default_vars->{DISTDIR} = realpath($opt{M}); | | 586 | $default_vars->{DISTDIR} = realpath($opt{M}); |
587 | } else { | | 587 | } else { |
588 | $default_vars->{DISTDIR} ||= $default_vars->{PKGSRCDIR} . '/distfiles'; | | 588 | $default_vars->{DISTDIR} ||= $default_vars->{PKGSRCDIR} . '/distfiles'; |
| @@ -892,27 +892,27 @@ sub parse_makefile_pkgsrc($) { | | | @@ -892,27 +892,27 @@ sub parse_makefile_pkgsrc($) { |
892 | if (defined $vars->{PKGNAME}) { | | 892 | if (defined $vars->{PKGNAME}) { |
893 | debug("$file: PKGNAME=$vars->{PKGNAME}\n"); | | 893 | debug("$file: PKGNAME=$vars->{PKGNAME}\n"); |
894 | } | | 894 | } |
895 | if (defined $vars->{DISTNAME}) { | | 895 | if (defined $vars->{DISTNAME}) { |
896 | debug("$file: DISTNAME=$vars->{DISTNAME}\n"); | | 896 | debug("$file: DISTNAME=$vars->{DISTNAME}\n"); |
897 | } | | 897 | } |
898 | | | 898 | |
899 | if (!defined $pkgname || $pkgname =~ /\$/ || $pkgname !~ /(.*)-(\d.*)/) { | | 899 | if (!defined $pkgname || $pkgname =~ /\$/ || $pkgname !~ /(.*)-(\d.*)/) { |
900 | | | 900 | |
901 | # invoke make here as a last resort | | 901 | # invoke make here as a last resort |
902 | my ($pkgsrcdir) = ($file =~ m:(/.*)/:); | | 902 | my ($pkgsrcdir) = ($file =~ m:(/.*)/:); |
903 | debug("Running '$conf_make' in '$pkgsrcdir'\n"); | | 903 | debug("Running '$conf_make' in '$pkgsrcdir'\n"); |
904 | my $pid = open3(\*WTR, \*RDR, \*ERR, | | 904 | my $pid = open3(\*WTR, \*RDR, \*ERR, |
905 | "cd $pkgsrcdir || exit 1; ${conf_make} show-vars VARNAMES=PKGNAME"); | | 905 | "cd $pkgsrcdir || exit 1; $conf_make show-vars VARNAMES=PKGNAME"); |
906 | if (!$pid) { | | 906 | if (!$pid) { |
907 | warn "$file: Unable to run make: $!"; | | 907 | warn "$file: Unable to run make: $!"; |
908 | } else { | | 908 | } else { |
909 | close(WTR); | | 909 | close(WTR); |
910 | my @errors = <ERR>; | | 910 | my @errors = <ERR>; |
911 | close(ERR); | | 911 | close(ERR); |
912 | my ($makepkgname) = <RDR>; | | 912 | my ($makepkgname) = <RDR>; |
913 | close(RDR); | | 913 | close(RDR); |
914 | wait; | | 914 | wait; |
915 | chomp @errors; | | 915 | chomp @errors; |
916 | if (@errors) { warn "\n$file: @errors\n"; } | | 916 | if (@errors) { warn "\n$file: @errors\n"; } |
917 | | | 917 | |
918 | if ($makepkgname =~ /(.*)-(\d.*)/) { | | 918 | if ($makepkgname =~ /(.*)-(\d.*)/) { |