Sign Up
Log In
Log In
or
Sign Up
Places
All Projects
Status Monitor
Collapse sidebar
home:jnweiger
jw-env
cpanspec_obs
Overview
Repositories
Revisions
Requests
Users
Attributes
Meta
File cpanspec_obs of Package jw-env
#! /usr/bin/perl -w # # this integrates cpanspec with obs # and works around the following bugs in cpanspec: # - We prefer the full URL for sources, so that update_pkg may work. # - We prefer the full URL for sources, the filename is more likely to be correct. # e.g. here the little 'v' is missing in the short name: # Source: http://www.cpan.org/authors/id/K/KC/KCLARK/Text-RecordParser-v%{version}.tar.gz # Source: %{cpan_name}-%{version}.tar.gz # # 2010-11-12, jw -- 0.2 nuke: BuildRequires: perl(perl) >= 5.006001 # 2011-03-14, jw -- 0.3 pull in unzip for zip files. # 2011-04-29, jw -- 0.4 added usage message and own specfile. # 2011-05-03, jw -- 0.5 Summary should not ned in a dot. # 2011-05-13, jw -- 0.6 AUTOMATED_TESTING, thanks to Thomas Fahle. # 2011-05-14, jw -- 0.7 Summary should be capitalized. # 2011-05-15, jw -- 0.8 removing empty .bs files before %perl_process_packlist # 2011-06-22, jw -- 0.9 no more calls to bznew. It will fool adrians new source services # 2011-09-08, jw -- 1.0 accept either bz2 or gz compressed files. my $version = '1.0'; my $pkg = shift; my $cpan_name; my $obs_name; $ENV{AUTOMATED_TESTING} = 1; die qq{cpanspec_obs (V$version) Usage: cd YOUR_OBS_PROJECT; $0 CPAN::NAME $0 perl-CPAN-NAME cpanspec_obs creates a perl package in the openSUSE BuildService. It downloads the sources from cpan, runs cpanspec to create a suitable specfile, and also test-builds the new package. It leaves a ready package directory for your review. Ideally, you just need to say osc commit perl-CPAN-NAME afterwards. } unless $pkg; if ($pkg =~ m{^perl-}) { $obs_name = $pkg; $pkg =~ s{^perl-}{}; $pkg =~ s{-}{::}g; $cpan_name = $pkg; } else { $cpan_name = $pkg; $pkg =~ s{::}{-}g; $obs_name = "perl-$pkg"; } die "Not in a osc project checkout directory\n" unless -f '.osc/_project'; die "Won't create a package in a packace. Please do cd .. first.\n" if -f '.osc/_package'; run("osc search -V --package $obs_name"); run("osc mkpac $obs_name"); chdir $obs_name or die "osc mkpac did not create ./$obs_name\n"; ## FIXME: can we use --follow here? run("cpanspec -v $cpan_name"); # for my $gz (<*.gz>) # { # run("bznew $gz"); # } rename "$obs_name.spec", "$obs_name.spec.orig"; open I, "<", "$obs_name.spec.orig" or die "cannot read my $obs_name.spec.orig: $!\n"; open O, ">", "$obs_name.spec" or die "cannot write $obs_name.spec: $!\n"; my $http_source; my $need_unzip = 0; my $suggest_pod_coverage = 1; while (defined (my $line = <I>)) { chomp $line; if ($line =~ m{^#?\s*Source(\d*):\s*https?://}) { $http_source = $1; $line =~ s{^#\s*}{}; # $line =~ s{\.gz$}{.bz2}; # $line =~ s{\.tgz$}{.tar.bz2}; $line =~ s{\.tar\.zip$}{.zip}; # FIXME : cpanspec bug? } elsif ($line =~ m{^#?\s*Source(\d*):\s*}) { my $src_nr = $1; # $line =~ s{\.gz$}{.bz2}; # $line =~ s{\.tgz$}{.tar.bz2}; $line =~ s{\.tar\.zip$}{.zip}; # FIXME : cpanspec bug? if ($src_nr eq $http_source) { $http_source = ''; $line =~ s{^S}{# S}; } } elsif ($line =~ m{^%(build|check)\b}) { $line .= "\nexport AUTOMATED_TESTING=1" } elsif ($line =~ m{^%perl_process_packlist\b}) { # W: zero-length /usr/lib/perl5/vendor_perl/5.12.3/i586-linux-thread-multi/auto/**.bs $line = "find %buildroot/%_prefix -name \*.bs -a -size 0 | xargs rm -f\n$line"; } elsif ($line =~ m{^(Build)?Requires:\s*perl\(perl\)}) { # nuke # BuildRequires: perl(perl) >= 5.006001 # Requires: perl(perl) >= 5.006001 next; } elsif ($line =~ m{^Summary:\s+(.*)$}) { # W: summary-ended-with-dot (Badness: 89) # W: summary-not-capitalized (Badness: 63) # # FIXME: this should be done inside cpanspec. my $summary = $1; $summary =~ s{\.+\s*$}{}; $summary = ucfirst $summary; $line = "Summary: $summary"; } if ($line =~ m{^BuildRequires:}) { # FIXME: this should be done inside cpanspec. if ($need_unzip) { print O "BuildRequires: unzip\n"; $need_unzip = 0; } if ($suggest_pod_coverage) { print O "# BuildRequires: perl(Test::Pod) perl(Test::Pod::Coverage)\n"; $suggest_pod_coverage = 0; } } print O "$line\n"; } close O or die "failed to write $obs_name.spec"; run("osc build --local-package"); run("osc vc -m 'initial pull from CPAN with cpanspec_obs-$version'"); run("osc add *.spec *.changes"); run("osc add *.bz2") if <*.bz2>; run("osc add *.gz") if <*.gz>; print qq{ ### suggested next commands: cd $obs_name; osc ci osc submitpac devel:languages:perl -m 'builds, works. Needed by myself' }; exit 0; ###################### sub run { my ($cmd) = @_; print STDERR "$cmd\n"; system $cmd and warn "ERROR: $!\n"; }
Locations
Projects
Search
Status Monitor
Help
OpenBuildService.org
Documentation
API Documentation
Code of Conduct
Contact
Support
@OBShq
Terms
openSUSE Build Service is sponsored by
The Open Build Service is an
openSUSE project
.
Sign Up
Log In
Places
Places
All Projects
Status Monitor