From 2d8d6f8f399872114138cfe237f45bd0b62df898 Mon Sep 17 00:00:00 2001 From: stevenpritchard Date: Thu, 9 Mar 2006 14:52:15 +0000 Subject: [PATCH] Add some command-line options: --filter-requires Specify Requires to remove --filter-provides Specify Provides to remove --add-requires Add Requires for this item --add-provides Add Provides for this item --add-buildrequires Add BuildRequires for this item --- Changes | 11 +++++ MANIFEST | 1 + TODO | 1 + cpanspec | 140 ++++++++++++++++++++++++++++++++++++++++++++++++++++++- 4 files changed, 151 insertions(+), 2 deletions(-) create mode 100644 Changes diff --git a/Changes b/Changes new file mode 100644 index 0000000..c601811 --- /dev/null +++ b/Changes @@ -0,0 +1,11 @@ +0.61 2006-03-08 + +* Add some command-line options: + + --filter-requires Specify Requires to remove + --filter-provides Specify Provides to remove + --add-requires Add Requires for this item + --add-provides Add Provides for this item + --add-buildrequires Add BuildRequires for this item + +# vi: set ai et: diff --git a/MANIFEST b/MANIFEST index 0161804..5bf91fa 100644 --- a/MANIFEST +++ b/MANIFEST @@ -7,3 +7,4 @@ COPYING Artistic BUGS TODO +Changes diff --git a/TODO b/TODO index 3721999..534babd 100644 --- a/TODO +++ b/TODO @@ -14,3 +14,4 @@ * It would be useful to be able to write the spec to stdout. * Add options to filter out Provides/Requires. + - Done, but the documentation needs work. diff --git a/cpanspec b/cpanspec index e46d7c0..e330f48 100755 --- a/cpanspec +++ b/cpanspec @@ -10,7 +10,7 @@ # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. # -# $Id: cpanspec,v 1.7 2006/03/08 02:01:13 stevenpritchard Exp $ +# $Id: cpanspec,v 1.8 2006/03/09 14:52:15 stevenpritchard Exp $ =head1 NAME @@ -34,6 +34,13 @@ cpanspec [options] [file [...]] --cpan -c CPAN mirror URL --verbose -v Be more verbose + Long options: + --filter-requires Specify Requires to remove + --filter-provides Specify Provides to remove + --add-requires Add Requires for this item + --add-provides Add Provides for this item + --add-buildrequires Add BuildRequires for this item + =head1 DESCRIPTION B will generate a spec file to build a rpm from a CPAN-style @@ -124,6 +131,26 @@ B environment variable, defaults to L. Be more verbose. +=item B<--filter-requires> + +Specify Requires to remove. + +=item B<--filter-provides> + +Specify Provides to remove. + +=item B<--add-requires> + +Add Requires for this item. + +=item B<--add-provides> + +Add Provides for this item. + +=item B<--add-buildrequires> + +Add BuildRequires for this item. + =back =head1 AUTHOR @@ -179,6 +206,12 @@ our $updated=0; our $packages; +our @filter_requires; +our @filter_provides; +our @add_requires; +our @add_provides; +our @add_buildrequires; + sub verbose(@) { print STDERR @_, "\n" if ($verbose); } @@ -313,6 +346,11 @@ GetOptions( 'build|b' => \$buildrpm, 'cpan|c=s' => \$cpan, 'verbose|v' => \$verbose, + 'filter-requires=s' => \@filter_requires, + 'filter-provides=s' => \@filter_provides, + 'add-requires=s' => \@add_requires, + 'add-provides=s' => \@add_provides, + 'add-buildrequires=s' => \@add_buildrequires, ) or pod2usage({ -exitval => 1, -verbose => 0 }); pod2usage({ -exitval => 0, -verbose => 1 }) if ($help); @@ -459,6 +497,50 @@ for my $file (@ARGV) { my $vendorlib=($noarch ? "vendorlib" : "vendorarch"); my $lib="\%{perl_$vendorlib}"; + if (@filter_requires) { + my $script="$name-filter-requires.sh"; + verbose "Writing $script..."; + my $sh; + if ($force) { + rename($script, "$script~") if (-e $script); + $sh=new FileHandle ">$script"; + } else { + $sh=new FileHandle $script, O_WRONLY|O_CREAT|O_EXCL; + } + die "Failed to create $script: $!\n" if (!$sh); + + print $sh "#!/bin/sh\n\n" + . "\@\@PERL_REQ\@\@ \"\$\@\" | sed -e '/^$filter_requires[0]\$/d'"; + if (@filter_requires > 1) { + for my $dep (@filter_requires[1..$#filter_requires]) { + print $sh " \\\n -e '/^$dep\$/d'"; + } + } + print $sh "\n"; + } + + if (@filter_provides) { + my $script="$name-filter-provides.sh"; + verbose "Writing $script..."; + my $sh; + if ($force) { + rename($script, "$script~") if (-e $script); + $sh=new FileHandle ">$script"; + } else { + $sh=new FileHandle $script, O_WRONLY|O_CREAT|O_EXCL; + } + die "Failed to create $script: $!\n" if (!$sh); + + print $sh "#!/bin/sh\n\n" + . "\@\@PERL_PROV\@\@ \"\$\@\" | sed -e '/^$filter_provides[0]\$/d'"; + if (@filter_provides > 1) { + for my $dep (@filter_provides[1..$#filter_provides]) { + print $sh " \\\n -e '/^$dep\$/d'"; + } + } + print $sh "\n"; + } + my $specfile="$prefix$name.spec"; verbose "Writing $specfile..."; @@ -637,6 +719,10 @@ END print $spec "\n"; } + for my $dep (@add_buildrequires) { + printf $spec "%-16s%s\n", "BuildRequires:", $dep; + } + for my $module (sort(keys(%requires))) { next if (!$compat and exists($Module::CoreList::version{$]}{$module})); printf $spec "%-16s%s", "Requires:", "perl($module)"; @@ -644,14 +730,62 @@ END print $spec "\n"; } + for my $dep (@add_requires) { + printf $spec "%-16s%s\n", "Requires:", $dep; + } + print $spec < %{__perl_requires} +chmod +x %{__perl_requires} +END + } + + if (@filter_provides) { + print $spec <<'END'; + +sed -e 's,@@PERL_PROV@@,%{real_perl_provides},' %{SOURCE99} > %{__perl_provides} +chmod +x %{__perl_provides} +END + } + + print $spec <