X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=Debian%2FDebhelper%2FDh_Lib.pm;h=7b550b0ea5752820d98d1a84d49b5255c3aeeedc;hb=a3494762925e5a42a42ce82c688f62f163ffad1b;hp=a86688a2d6a3a80bf4075da8647a3c9817526fe6;hpb=83a233af6f938bcd50745b35fabb15788293452e;p=debhelper.git diff --git a/Debian/Debhelper/Dh_Lib.pm b/Debian/Debhelper/Dh_Lib.pm index a86688a..7b550b0 100644 --- a/Debian/Debhelper/Dh_Lib.pm +++ b/Debian/Debhelper/Dh_Lib.pm @@ -20,7 +20,7 @@ use vars qw(@ISA @EXPORT %dh); &is_make_jobserver_unavailable &clean_jobserver_makeflags &cross_command &set_buildflags &get_buildoption); -my $max_compat=9; +my $max_compat=10; sub init { my %params=@_; @@ -332,26 +332,31 @@ sub dirname { if (! defined $c) { $c=1; - if (defined $ENV{DH_COMPAT}) { - $c=$ENV{DH_COMPAT}; - } - elsif (-e 'debian/compat') { - # Try the file.. + if (-e 'debian/compat') { open (COMPAT_IN, "debian/compat") || error "debian/compat: $!"; my $l=; close COMPAT_IN; if (! defined $l || ! length $l) { - warning("debian/compat is empty, assuming level $c"); + warning("debian/compat is empty, assuming level $c") + unless defined $ENV{DH_COMPAT}; } else { chomp $l; $c=$l; } } + else { + warning("No compatibility level specified in debian/compat"); + warning("This package will soon FTBFS; time to fix it!"); + } + + if (defined $ENV{DH_COMPAT}) { + $c=$ENV{DH_COMPAT}; + } } if ($c <= 4 && ! $warned_compat && ! $nowarn) { - warning("Compatibility levels before 5 are deprecated."); + warning("Compatibility levels before 5 are deprecated (level $c in use)"); $warned_compat=1; } @@ -499,7 +504,8 @@ sub pkgfilename { # 1: package # 2: script to add to # 3: filename of snippet -# 4: sed to run on the snippet. Ie, s/#PACKAGE#/$PACKAGE/ +# 4: either text: shell-quoted sed to run on the snippet. Ie, 's/#PACKAGE#/$PACKAGE/' +# or a sub to run on each line of the snippet. Ie sub { s/#PACKAGE#/$PACKAGE/ } sub autoscript { my $package=shift; my $script=shift; @@ -528,18 +534,34 @@ sub autoscript { && !compat(5)) { # Add fragments to top so they run in reverse order when removing. complex_doit("echo \"# Automatically added by ".basename($0)."\"> $outfile.new"); - complex_doit("sed \"$sed\" $infile >> $outfile.new"); + autoscript_sed($sed, $infile, "$outfile.new"); complex_doit("echo '# End automatically added section' >> $outfile.new"); complex_doit("cat $outfile >> $outfile.new"); complex_doit("mv $outfile.new $outfile"); } else { complex_doit("echo \"# Automatically added by ".basename($0)."\">> $outfile"); - complex_doit("sed \"$sed\" $infile >> $outfile"); + autoscript_sed($sed, $infile, $outfile); complex_doit("echo '# End automatically added section' >> $outfile"); } } +sub autoscript_sed { + my $sed = shift; + my $infile = shift; + my $outfile = shift; + if (ref($sed) eq 'CODE') { + open(IN, $infile) or die "$infile: $!"; + open(OUT, ">>$outfile") or die "$outfile: $!"; + while () { $sed->(); print OUT } + close(OUT) or die "$outfile: $!"; + close(IN) or die "$infile: $!"; + } + else { + complex_doit("sed \"$sed\" $infile >> $outfile"); + } +} + # Removes a whole substvar line. sub delsubstvar { my $package=shift; @@ -613,7 +635,8 @@ sub filedoublearray { my $file=shift; my $globdir=shift; - my $x=-x $file; + # executable config files are a v9 thing. + my $x=! compat(8) && -x $file; if ($x) { require Cwd; my $cmd=Cwd::abs_path($file);