r35023 - /trunk/dh-make-perl/lib/DhMakePerl.pm
dmn at users.alioth.debian.org
dmn at users.alioth.debian.org
Fri May 8 13:58:25 UTC 2009
Author: dmn
Date: Fri May 8 13:58:19 2009
New Revision: 35023
URL: http://svn.debian.org/wsvn/pkg-perl/?sc=1&rev=35023
Log:
DhMakePerl: add add_quilt and drop_quilt methods
these are used to add/remove quilt from debian/rules and debian/control
the debhelper build-dependency is adjusted to refrect reality: if
overrides are used (as when quilt is in action), at least debhelper
7.0.50 is needed; if not (no quilt or other) -- 7 is just fine
README.source is also updated (added/removed if needed)
Modified:
trunk/dh-make-perl/lib/DhMakePerl.pm
Modified: trunk/dh-make-perl/lib/DhMakePerl.pm
URL: http://svn.debian.org/wsvn/pkg-perl/trunk/dh-make-perl/lib/DhMakePerl.pm?rev=35023&op=diff
==============================================================================
--- trunk/dh-make-perl/lib/DhMakePerl.pm (original)
+++ trunk/dh-make-perl/lib/DhMakePerl.pm Fri May 8 13:58:19 2009
@@ -56,6 +56,7 @@
use Module::Depends::Intrusive ();
use Module::Depends ();
use Text::Wrap qw( fill wrap );
+use Tie::File;
use User::pwent qw(:FIELDS);
use WWW::Mechanize ();
use YAML ();
@@ -1166,6 +1167,177 @@
};
}
+=item add_quilt( $maindir, $control )
+
+Plugs quilt into F<debian/rules> and F<debian/control>. Depends on
+F<debian/rules> being in DH7 three-liner format. Also bumps the debhelper
+build-dependency to 7.0.50 (the first version to support overrides) and adds
+debian/README.source documenting quilt usage.
+
+=cut
+
+sub add_quilt {
+ my( $self, $maindir, $control ) = @_;
+
+ my @rules;
+ tie @rules, 'Tie::File', catfile( $maindir, 'debian', 'rules' )
+ or die "Unable to read rules: $!";
+
+ splice @rules, 1, 0, ( '', 'include /usr/share/quilt/quilt.make' )
+ unless grep /quilt\.make/, @rules;
+
+ push @rules,
+ '',
+ 'override_dh_auto_configure: $(QUILT_STAMPFN)',
+ "\tdh_auto_configure"
+ unless grep /QUILT_STAMPFN/, @rules;
+
+ push @rules,
+ '',
+ 'override_dh_auto_clean: unpatch',
+ "\tdh_auto_clean"
+ unless grep /override_dh_auto_clean:.*unpatch/, @rules;
+
+ # add build-dependency on quilt
+ $control->source->Build_Depends->add('quilt');
+
+ # bump build-dependency of DH to 7.0.50
+ $control->source->Build_Depends->add('debhelper (>= 7.0.50)');
+ # a later prune() will remove redundant >= 7
+
+ # README.source
+ my $quilt_mini_doc = <<EOF;
+This package uses quilt for managing all modifications to the upstream
+source. Changes are stored in the source package as diffs in
+debian/patches and applied during the build.
+
+See /usr/share/doc/quilt/README.source for a detailed explaination.
+EOF
+
+ my $readme = catfile( $maindir, 'debian', 'README.source' );
+ my $quilt_already_documented = 0;
+ my $readme_source_exists = -e $readme;
+ if($readme_source_exists) {
+ my @readme;
+ tie @readme, 'Tie::File', $readme
+ or die "Unable to tie '$readme': $!";
+
+ for( @readme ) {
+ if( m{quilt/README.source} ) {
+ $quilt_already_documented = 1;
+ last;
+ }
+ }
+ }
+
+ print "README.source already documents quilt\n"
+ if $quilt_already_documented and $self->cfg->verbose;
+
+ unless($quilt_already_documented) {
+ my $fh;
+ open( $fh, '>>', $readme )
+ or die "Unable to open '$readme' for writing: $!";
+
+ print $fh "\n\n" if $readme_source_exists;
+ print $fh $quilt_mini_doc;
+ close $fh;
+ }
+}
+
+=item drop_quilt( $maindir, $control )
+
+removes quilt from F<debian/rules> and F<deian/control>. Expects that
+L<|add_quilt> was used to add quilt to F<debian/rules>.
+
+If F<debian/README.source> exists, references to quilt are removed from it (and
+the file removed if empty after that).
+
+=cut
+
+sub drop_quilt {
+ my( $self, $maindir, $control ) = @_;
+
+ my @rules;
+ tie @rules, 'Tie::File', catfile( $maindir, 'debian', 'rules' )
+ or die "Unable to read rules: $!";
+
+ # look for the quilt include line and remove it and the previous empty one
+ for( my $i = 1; $i < @rules; $i++ ) {
+ if ( $rules[$i] eq ''
+ and $rules[$i+1] eq 'include /usr/share/quilt/quilt.make' ) {
+ splice @rules, $i, 2;
+ last;
+ }
+ }
+
+ # remove the QUILT_STAMPFN dependency override
+ for( my $i = 1; $i < @rules; $i++ ) {
+ if ( $rules[$i] eq ''
+ and $rules[$i+1] eq 'override_dh_auto_configure: $(QUILT_STAMPFN)'
+ and $rules[$i+2] eq "\tdh_auto_configure"
+ and $rules[$i+3] eq '' ) {
+ splice @rules, $i, 3;
+ last;
+ }
+ }
+
+ # remove unpatch dependency in clean
+ for( my $i = 1; $i < @rules; $i++ ) {
+ if ( $rules[$i] eq ''
+ and $rules[$i+1] eq 'override_dh_auto_clean: unpatch'
+ and $rules[$i+2] eq "\tdh_auto_clean"
+ and $rules[$i+3] eq '' ) {
+ splice @rules, $i, 3;
+ last;
+ }
+ }
+
+ # remove build-dependency on quilt
+ $control->source->Build_Depends->remove('quilt');
+
+ # if no overrides are used, lower dh dependency from 7.0.50 to 7
+ if( not grep /^override_dh_/, @rules ) {
+ $control->source->Build_Depends->remove('debhelper (>= 7.0.50)');
+ $control->source->Build_Depends->add('debhelper (>= 7)');
+ }
+
+ # README.source
+ my $readme = catfile( $maindir, 'debian', 'README.source' );
+
+ if( -e $readme ) {
+ my @readme;
+ tie @readme, 'Tie::File', $readme
+ or die "Unable to tie '$readme': $!";
+
+ my( $start, $end );
+ for( my $i = 0; defined( $_ = $readme[$i] ); $i++ ) {
+ if( m{^This package uses quilt } ) {
+ $start = $i;
+ next;
+ }
+
+ if( defined($start)
+ and m{^See /usr/share/doc/quilt/README.source} ) {
+ $end = $i;
+ last;
+ }
+ }
+
+ if( defined($start) and defined($end) ) {
+ print "Removing refences to quilt from README.source\n"
+ if $self->cfg->verbose;
+
+ splice @readme, $start, $end-$start+1;
+
+ # file is now empty?
+ if( join( '', @readme ) =~ /^\s*$/ ) {
+ unlink $readme
+ or die "unlink($readme): $!";
+ }
+ }
+ }
+}
+
sub fix_rules {
my ( $self, $rules_file, $changelog_file, $docs, $examples ) = @_;
@@ -1212,6 +1384,7 @@
close F;
}
}
+
$fh->close;
}
More information about the Pkg-perl-cvs-commits
mailing list