diff options
Diffstat (limited to 'pkgtools')
-rw-r--r-- | pkgtools/pkglint/Makefile | 4 | ||||
-rw-r--r-- | pkgtools/pkglint/files/pkglint.pl | 72 |
2 files changed, 44 insertions, 32 deletions
diff --git a/pkgtools/pkglint/Makefile b/pkgtools/pkglint/Makefile index 06e4d436ef5..38873876090 100644 --- a/pkgtools/pkglint/Makefile +++ b/pkgtools/pkglint/Makefile @@ -1,7 +1,7 @@ -# $NetBSD: Makefile,v 1.311 2005/11/27 20:25:49 rillig Exp $ +# $NetBSD: Makefile,v 1.312 2005/11/27 23:48:01 rillig Exp $ # -DISTNAME= pkglint-4.46.2 +DISTNAME= pkglint-4.46.3 CATEGORIES= pkgtools MASTER_SITES= # empty DISTFILES= # empty diff --git a/pkgtools/pkglint/files/pkglint.pl b/pkgtools/pkglint/files/pkglint.pl index ad172d8253d..8ea3bedea70 100644 --- a/pkgtools/pkglint/files/pkglint.pl +++ b/pkgtools/pkglint/files/pkglint.pl @@ -11,7 +11,7 @@ # Freely redistributable. Absolutely no warranty. # # From Id: portlint.pl,v 1.64 1998/02/28 02:34:05 itojun Exp -# $NetBSD: pkglint.pl,v 1.389 2005/11/27 21:18:43 rillig Exp $ +# $NetBSD: pkglint.pl,v 1.390 2005/11/27 23:48:01 rillig Exp $ # # This version contains lots of changes necessary for NetBSD packages # done by: @@ -392,6 +392,15 @@ sub delete($) { $self->[PHYSLINES] = []; $self->[CHANGED] = true; } +sub replace($$$) { + my ($self, $from, $to) = @_; + my $phys = $self->[PHYSLINES]; + foreach my $i (0..$#{$phys}) { + if ($phys->[$i]->[0] != 0 && $phys->[$i]->[1] =~ s/\Q$from\E/$to/g) { + $self->[CHANGED] = true; + } + } +} #== End of PkgLint::FileUtil::Line ======================================== @@ -401,8 +410,9 @@ package PkgLint::FileUtil; # files. The load_file() subroutine loads a file completely into memory, # optionally handling continuation line folding. The load_lines() subrou- # tine is an abbreviation for the common case of loading files without -# continuation lines. The save_autofix_lines() subroutine examines an array -# of lines if some of them have changed. It then saves the modified files. +# continuation lines. The save_autofix_changes() subroutine examines an +# array of lines if some of them have changed. It then saves the modified +# files. #========================================================================== use strict; use warnings; @@ -536,8 +546,7 @@ sub save_autofix_changes($) { } foreach my $fname (sort(keys(%changed))) { - my $old = "${fname}.pkglint.old"; - my $new = "${fname}.pkglint.new"; + my $new = "${fname}.pkglint.tmp"; if (!open(F, ">", $new)) { log_error($new, NO_LINE_NUMBER, "$!"); @@ -551,16 +560,11 @@ sub save_autofix_changes($) { next; } - unlink($old); # without error checking - if (!link($fname, $old)) { - log_error($fname, NO_LINE_NUMBER, "$!"); - next; - } if (!rename($new, $fname)) { log_error($fname, NO_LINE_NUMBER, "$!"); next; } - log_note($fname, NO_LINE_NUMBER, "Has been autofixed."); + log_note($fname, NO_LINE_NUMBER, "Has been autofixed. Please re-run pkglint."); } } @@ -1001,6 +1005,14 @@ sub get_dist_sites_names() { # Miscellaneous functions # +sub autofix($) { + my ($lines) = @_; + + if ($opt_autofix) { + save_autofix_changes($lines); + } +} + sub is_committed($) { my ($fname) = @_; my ($basename, $entries); @@ -1953,12 +1965,15 @@ sub checkline_basic_vartype($$$$$) { my ($vexpr, undef, $vname) = ($1, $2, $3); my $mod = ($vname =~ regex_gnu_configure_volatile_vars) ? ":M*:Q" : ":Q"; $line->log_warning("Please use \${${vname}${mod}} instead of ${vexpr}."); + $line->replace($vexpr, "\${${vname}${mod}}"); } elsif ($value =~ qr"^[\w_]+=(\$\{([\w_]+):Q\})$") { my ($vexpr, $vname) = ($1, $2); if ($vname =~ regex_gnu_configure_volatile_vars) { $line->log_warning("Please use \${${vname}:M*:Q} instead of ${vexpr}."); + $line->replace($vexpr, "\${${vname}:M*:Q}"); } + } elsif ($value ne "" && $value !~ qr"^${regex_shellword}$") { $line->log_warning("Invalid shell word \"${value}\"."); } @@ -2630,14 +2645,14 @@ sub set_default_value($$) { # Loading data from package-specific files, part 2. # -sub load_package_Makefile($$$$) { +sub load_package_Makefile($$$) { my ($subr) = "load_package_Makefile"; - my ($fname, $ref_whole, $ref_main_lines, $ref_all_lines) = @_; - my ($whole, $main_lines, $all_lines); + my ($fname, $ref_whole, $ref_lines) = @_; + my ($whole, $lines, $all_lines); log_info($fname, NO_LINE_NUMBER, "Checking package Makefile."); - $whole = readmakefile($fname, $main_lines = [], $all_lines = [], {}); + $whole = readmakefile($fname, $lines = [], $all_lines = [], {}); if (!$whole) { log_error($fname, NO_LINE_NUMBER, "Cannot be read."); return false; @@ -2677,8 +2692,7 @@ sub load_package_Makefile($$$$) { log_info(NO_FILE, NO_LINE_NUMBER, "[${subr}] PKGDIR=$pkgdir"); ${$ref_whole} = $whole; - ${$ref_main_lines} = $main_lines; - ${$ref_all_lines} = $all_lines; + ${$ref_lines} = $lines; return true; } @@ -2730,8 +2744,8 @@ sub checkfile_mk($) { checklines_Makefile_varuse($lines); } -sub checkfile_package_Makefile($$$$) { - my ($fname, $whole, $main_lines, $lines) = @_; +sub checkfile_package_Makefile($$$) { + my ($fname, $whole, $lines) = @_; my ($distname, $distfiles); log_info($fname, NO_LINE_NUMBER, "[checkfile_package_Makefile]"); @@ -2740,7 +2754,7 @@ sub checkfile_package_Makefile($$$$) { # TODO: "Please use \${VARIABLE} instead of \$(VARIABLE)." - checklines_deprecated_variables($main_lines); + checklines_deprecated_variables($lines); if (!exists($makevar->{"PLIST_SRC"}) && !exists($makevar->{"NO_PKG_REGISTER"}) @@ -2759,7 +2773,7 @@ sub checkfile_package_Makefile($$$$) { } } - checklines_direct_tools($main_lines); + checklines_direct_tools($lines); if ($whole =~ /etc\/rc\.d/) { log_warning($fname, NO_LINE_NUMBER, "Please use the RCD_SCRIPTS mechanism to install rc.d scripts automatically to \${RCD_SCRIPTS_EXAMPLEDIR}."); @@ -2802,10 +2816,11 @@ sub checkfile_package_Makefile($$$$) { $makevar->{"USE_X11"}->log_note("... USE_X11 superfluous."); } - checklines_package_Makefile($main_lines); + checklines_package_Makefile($lines); # Disabled, as I don't like the current ordering scheme. #checklines_package_Makefile_varorder($lines); - checklines_Makefile_varuse($main_lines); + checklines_Makefile_varuse($lines); + autofix($lines); } sub checkfile($) { @@ -3111,10 +3126,7 @@ sub checkdir_category() { $lines->[$lineno]->log_error("The file should end here."); } - # If the user has requested automatic fixing and we can do it, we do it. - if ($opt_autofix) { - save_autofix_changes($lines); - } + autofix($lines); if ($opt_recursive) { unshift(@todo_items, @subdirs); @@ -3122,13 +3134,13 @@ sub checkdir_category() { } sub checkdir_package() { - my ($whole, $main_lines, $lines, $have_distinfo, $have_patches); + my ($whole, $lines, $have_distinfo, $have_patches); # Initialize global variables $makevar = {}; # we need to handle the Makefile first to get some variables - if (!load_package_Makefile("${current_dir}/Makefile", \$whole, \$main_lines, $lines)) { + if (!load_package_Makefile("${current_dir}/Makefile", \$whole, \$lines)) { log_error("${current_dir}/Makefile", NO_LINE_NUMBER, "Cannot be read."); return; } @@ -3148,7 +3160,7 @@ sub checkdir_package() { $have_patches = false; foreach my $fname (@files) { if ($fname eq "${current_dir}/Makefile") { - $opt_check_Makefile and checkfile_package_Makefile($fname, $whole, $main_lines, $lines); + $opt_check_Makefile and checkfile_package_Makefile($fname, $whole, $lines); } else { checkfile($fname); } |