Here is a suggested patch to add rpm building bits to our build process.

Basically, this patch achieves 2 things.

1. It makes sure that distribution tarballs contains a mod_perl.spec file
   so anybody can just do:
 $> wget http://perl.apache.org/dist/mod_perl.2.x.tar.gz
 $> rpmbuild -ta mod_perl.2.x.tar.gz

And they'll have nice RPMs for whatever RPM-based distro they run

2. It adds the 'rpm' make target, so that developers can quickly publish RPMs
   if they want (basically does make dist && rpmbuild -ta like above) :

 $> perl Makefile.PL
 [...]
 $> make rpm
 perl build/make_rpm_spec
 perl -Ilib "-MModPerl::Manifest=mkmanifest" -e mkmanifest
 [...]
 rm -rf mod_perl-2.0.2-dev
 gzip -9f mod_perl-2.0.2-dev.tar
 rpmbuild -ta [...] mod_perl-2.0.2-dev.tar.gz
 [...]
 $> ls rpm/
 mod_perl-2.0.2-192962.i386.rpm
 mod_perl-2.0.2-192962.src.rpm
 mod_perl-debuginfo-2.0.2-192962.i386.rpm
 mod_perl-devel-2.0.2-192962.i386.rpm

The bulk of the RPM spec file was grabbed from Fedora's

--------------------------------------------------------------------------------
Philippe M. Chiasson m/gozer\@(apache|cpan|ectoplasm)\.org/ GPG KeyID : 88C3A5A5
http://gozer.ectoplasm.org/     F9BF E0C2 480E 7680 1AE5 3631 CB32 A107 88C3A5A5
Property changes on: .
___________________________________________________________________
Name: svn:ignore
   - WrapXS
Makefile
Makefile.old
blib
blibdirs
blibdirs.ts
pm_to_blib
pm_to_blib.ts
scraps
diff.txt
smoke-report-*.txt
MANIFEST
glue_pods
.mypacklist

   + WrapXS
Makefile
Makefile.old
blib
blibdirs
blibdirs.ts
mod_perl.spec
pm_to_blib
pm_to_blib.ts
rpm
scraps
diff.txt
smoke-report-*.txt
MANIFEST
glue_pods
.mypacklist


Index: Makefile.PL
===================================================================
--- Makefile.PL	(revision 192962)
+++ Makefile.PL	(working copy)
@@ -789,8 +789,19 @@
     my $string = $self->ModPerl::BuildMM::MY::postamble;
 
     $string .= <<'EOF';
-mydist : Apache-Test/META.yml manifest tardist
+mydist : Apache-Test/META.yml mod_perl.spec manifest tardist
 
+rpm: dist
+	@[ -d $(PWD)/rpm ] || mkdir $(PWD)/rpm
+	rpmbuild -ta --define "_rpmdir $(PWD)/rpm" \
+                 --define "_srcrpmdir $(PWD)/rpm" \
+                 $(DISTVNAME).tar.gz
+	@mv $(PWD)/rpm/*/*.rpm $(PWD)/rpm/
+	@rm -rf $(PWD)/rpm/*/
+    
+mod_perl.spec: build/make_rpm_spec
+	$(PERL) build/make_rpm_spec
+
 Apache-Test/META.yml:
 	cd Apache-Test && make metafile
 
Index: build/make_rpm_spec
===================================================================
--- build/make_rpm_spec	(revision 0)
+++ build/make_rpm_spec	(revision 0)
@@ -0,0 +1,146 @@
+#!perl
+use strict;
+
+require "lib/mod_perl2.pm";
+
+my $dev_build = is_dev_build();
+my $release   = $dev_build ? svn_release() : 1;
+my $version   = $mod_perl2::VERSION_TRIPLET;
+my $path      = $dev_build ? "mod_perl-$version-dev" : "mod_perl-$version";
+my $tarname   = "$path.tar.gz";
+
+my $httpd_ver = min_httpd_ver();
+
+open(my $spec, ">mod_perl.spec") || die "Can't open mod_perl.spec $!";
+
+print $spec <<"EOF";
+%define         _version $mod_perl2::VERSION_TRIPLET
+%define         _release $release
+%define         _source http://perl.apache.org/dist/$tarname
+%define         _dirname $path
+%define         _httpd_min_ver $httpd_ver
+%define         _perl_min_ver 5.6.1
+EOF
+
+print $spec <<'EOF';
+Name:           mod_perl
+Version:        %{_version}
+Release:        %{_release}
+Summary:        An embedded Perl interpreter for the Apache Web server
+Group:          System Environment/Daemons
+License:        Apache License, Version 2.0
+Packager:       Philippe M. Chiasson <[EMAIL PROTECTED]>
+URL:            http://perl.apache.org/
+Source:         %{_source}
+BuildRoot:      %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n)
+Requires:       httpd >= %{_httpd_min_ver}
+BuildRequires:  perl >= %{_perl_min_ver}
+BuildRequires:  httpd-devel >= %{_httpd_min_ver}
+BuildRequires:  apr-devel, apr-util-devel
+
+%description
+Mod_perl incorporates a Perl interpreter into the Apache web server,
+so that the Apache web server can directly execute Perl code.
+Mod_perl links the Perl runtime library into the Apache web server and
+provides an object-oriented Perl interface for Apache's C language
+API.  The end result is a quicker CGI script turnaround process, since
+no external Perl interpreter has to be started.
+
+Install mod_perl if you're installing the Apache web server and you'd
+like for it to directly incorporate a Perl interpreter.
+
+%package devel
+Summary:        Files needed for building XS modules that use mod_perl
+Group:          Development/Libraries
+Requires:       mod_perl = %{version}-%{release}, httpd-devel
+
+%description devel 
+The mod_perl-devel package contains the files needed for building XS
+modules that use mod_perl.
+
+%prep
+%setup -q -n %{_dirname}
+
+%build
+CFLAGS="$RPM_OPT_FLAGS" %{__perl} Makefile.PL </dev/null \
+	PREFIX=$RPM_BUILD_ROOT/usr \
+	INSTALLDIRS=vendor \
+	MP_APXS=%{_sbindir}/apxs
+make %{?_smp_mflags} OPTIMIZE="$RPM_OPT_FLAGS"
+
+%install
+rm -rf $RPM_BUILD_ROOT
+install -d -m 755 $RPM_BUILD_ROOT%{_libdir}/httpd/modules
+make install \
+    MODPERL_AP_LIBEXECDIR=$RPM_BUILD_ROOT%{_libdir}/httpd/modules \
+    MODPERL_AP_INCLUDEDIR=$RPM_BUILD_ROOT%{_includedir}/httpd
+
+# Remove the temporary files.
+find $RPM_BUILD_ROOT -type f -name .packlist -exec rm -f {} ';'
+find $RPM_BUILD_ROOT -type f -name perllocal.pod -exec rm -f {} ';'
+find $RPM_BUILD_ROOT -type f -name '*.bs' -a -size 0 -exec rm -f {} ';'
+find $RPM_BUILD_ROOT -type d -depth -exec rmdir {} 2>/dev/null ';'
+
+%clean
+rm -rf $RPM_BUILD_ROOT
+
+%files
+%defattr(-,root,root,-)
+%doc Changes LICENSE README* STATUS SVN-MOVE docs/
+%{_bindir}/*
+%{_libdir}/httpd/modules/mod_perl.so
+%{perl_vendorarch}/auto/*
+%{perl_vendorarch}/Apache/
+%{perl_vendorarch}/Apache2/
+%{perl_vendorarch}/Bundle/
+%{perl_vendorarch}/APR/
+%{perl_vendorarch}/ModPerl/
+%{perl_vendorarch}/*.pm
+%{_mandir}/man?/*
+
+%files devel
+%defattr(-,root,root,-)
+%{_includedir}/httpd/*
+
+%changelog
+EOF
+
+sub min_httpd_ver {
+    my $min_httpd_ver;
+    open my $mk, 'Makefile.PL';
+    while (<$mk>) {
+        if (/MIN_HTTPD_VERSION_DYNAMIC\s*=>\s*'(.*)'/) {
+          $min_httpd_ver = $1;
+          last;
+        }
+    }
+    close $mk;
+    $min_httpd_ver;
+}
+
+sub svn_release {
+  open my $svn, "<.svn/entries";
+  my $revision;
+  while (<$svn>) {
+    if (/revision="(\d+)"/) {
+      $revision = $1;
+      last;
+    }
+  }
+  close $svn;
+  $revision;
+}
+
+sub is_dev_build {
+    my $dev;
+    open my $fh, 'Changes';
+    while (<$fh>) {
+        if (/^=item.*-dev/) {
+            $dev = 1;
+            last;
+        }
+        last if /^=item/;
+    }
+    close $fh;
+    $dev;
+}

Property changes on: build/make_rpm_spec
___________________________________________________________________
Name: svn:executable
   + *

Index: lib/ModPerl/Manifest.pm
===================================================================
--- lib/ModPerl/Manifest.pm	(revision 192962)
+++ lib/ModPerl/Manifest.pm	(working copy)
@@ -31,6 +31,7 @@
 #anything else to be added should go here:
 my @add_files = qw{
     MANIFEST
+    mod_perl.spec
     Apache-Test/META.yml
 };
 

Attachment: signature.asc
Description: OpenPGP digital signature

Reply via email to