mod_perl/mod_perl.spec
2023-08-07 16:59:03 +08:00

323 lines
12 KiB
RPMSpec

# Unbundle Apache-Reload
%{bcond_with mod_perl_enables_bundled_Apache_Reload}
# Run optional test
%{bcond_without mod_perl_enables_optional_test}
%{!?_httpd_apxs: %{expand: %%global _httpd_apxs %%{_sbindir}/apxs}}
%{!?_httpd_mmn: %{expand: %%global _httpd_mmn %%(cat %{_includedir}/httpd/.mmn 2>/dev/null || echo 0-0)}}
%{!?_httpd_confdir: %{expand: %%global _httpd_confdir %%{_sysconfdir}/httpd/conf.d}}
# /etc/httpd/conf.d with httpd < 2.4 and defined as /etc/httpd/conf.modules.d with httpd >= 2.4
%{!?_httpd_modconfdir: %{expand: %%global _httpd_modconfdir %%{_sysconfdir}/httpd/conf.d}}
%{!?_httpd_moddir: %{expand: %%global _httpd_moddir %%{_libdir}/httpd/modules}}
%global regenerate_xs 0
Name: mod_perl
Version: 2.0.12
Release: 2
Summary: An embedded Perl interpreter for the Apache HTTP Server
# other files: ASL 2.0
## Not in binary packages
# docs/os/win32/distinstall: GPL+ or Artistic
# docs/os/win32/mpinstall: GPL+ or Artistic
License: ASL 2.0
URL: https://perl.apache.org/
Source0: https://www.apache.org/dist/perl/mod_perl-%{version}.tar.gz
Source1: https://www.apache.org/dist/perl/mod_perl-%{version}.tar.gz.asc
Source2: https://www.apache.org/dist/perl/KEYS
Source3: perl.conf
Source4: perl.module.conf
# Normalize documentation encoding
Patch0: mod_perl-2.0.12-Convert-documentation-to-UTF-8.patch
Patch1: mod_perl-2.0.4-inline.patch
# Do not use deprecated ap_get_server_version(), CPAN RT#124972
Patch2: mod_perl-2.0.11-Do-not-use-deprecated-ap_get_server_version-in-Serve.patch
Patch3: mod_perl-2.0.12-Stop-using-do_open9.patch
BuildRequires: apr-devel >= 1.2.0
BuildRequires: apr-util-devel
BuildRequires: coreutils
BuildRequires: findutils
BuildRequires: gcc
BuildRequires: gdbm-devel
BuildRequires: gnupg2
BuildRequires: httpd
BuildRequires: httpd-devel >= 2.4.0
BuildRequires: make
BuildRequires: perl-interpreter
BuildRequires: perl-devel
BuildRequires: perl-generators
BuildRequires: perl(AutoLoader)
BuildRequires: perl(Carp)
BuildRequires: perl(Config)
BuildRequires: perl(constant)
BuildRequires: perl(Cwd)
BuildRequires: perl(Data::Dumper)
BuildRequires: perl(DirHandle)
BuildRequires: perl(DynaLoader)
BuildRequires: perl(Exporter)
BuildRequires: perl(ExtUtils::Embed)
BuildRequires: perl(ExtUtils::Install)
BuildRequires: perl(ExtUtils::MakeMaker)
BuildRequires: perl(File::Basename)
BuildRequires: perl(File::Copy)
BuildRequires: perl(File::Find)
BuildRequires: perl(File::Path)
BuildRequires: perl(File::Spec)
BuildRequires: perl(File::Spec::Functions)
BuildRequires: perl(FindBin)
BuildRequires: perl(lib)
# Module::CoreList not helpful
BuildRequires: perl(strict)
BuildRequires: perl(Symbol)
BuildRequires: perl(Test)
BuildRequires: perl(vars)
BuildRequires: perl(warnings)
# Win32 not used
BuildRequires: sed
%if %{regenerate_xs}0
BuildRequires: perl(Data::Flow) >= 0.05
BuildRequires: perl(Tie::IxHash)
%endif
# Run-time:
BuildRequires: perl(:VERSION) >= 5.6.1
BuildRequires: perl(base)
BuildRequires: perl(BSD::Resource)
BuildRequires: perl(Carp::Heavy)
BuildRequires: perl(Fcntl)
BuildRequires: perl(Getopt::Long)
# IO::Dir not used at tests
BuildRequires: perl(Linux::Pid)
BuildRequires: perl(overload)
BuildRequires: perl(POSIX)
BuildRequires: perl(Socket)
BuildRequires: perl(subs)
# TAP::Formatter::Console not use at tests
# TAP::Harness not used at tests
BuildRequires: perl(Test)
BuildRequires: perl(Test::Harness)
# Tests:
BuildRequires: perl(Compress::Zlib)
BuildRequires: perl(Encode)
BuildRequires: perl(ExtUtils::testlib)
BuildRequires: perl(IO::Select)
BuildRequires: perl(locale)
BuildRequires: perl(Math::BigInt)
BuildRequires: perl(threads)
BuildRequires: perl(Test::More)
%if %{with mod_perl_enables_optional_test}
# Optional tests:
BuildRequires: perl(CGI) >= 2.93
BuildRequires: perl(HTTP::Request::Common)
BuildRequires: perl(LWP::UserAgent)
%endif
Requires: httpd-mmn = %{_httpd_mmn}
Requires: perl(:MODULE_COMPAT_%(eval "`perl -V:version`"; echo $version))
# For Apache::SizeLimit::Core
Requires: perl(Linux::Pid)
%{?perl_default_filter}
%global __provides_exclude %{?__provides_exclude:%__provides_exclude|}perl\\(Apache2::Connection\\)$
%global __provides_exclude %__provides_exclude|perl\\(Apache2::RequestRec\\)$
%global __provides_exclude %__provides_exclude|perl\\(warnings\\)$
%global __provides_exclude %__provides_exclude|perl\\(HTTP::Request::Common\\)$
%global __provides_exclude %__provides_exclude|mod_perl\\.so\\(.*$
%global __provides_exclude %__provides_exclude|mod_perl\\.so$
%global __requires_exclude %{?__requires_exclude:%__requires_exclude|}perl\\(Apache::Test.*\\)
%global __requires_exclude %__requires_exclude|perl\\(Data::Flow\\)
%global __requires_exclude %__requires_exclude|perl\\(Apache2::FunctionTable\\)
%global __requires_exclude %__requires_exclude|perl\\(Apache2::StructureTable\\)
# Hide dependencies on broken provides
%global __requires_exclude %__requires_exclude|^perl\\(Apache2::MPM\\)
%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 run-time 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
Requires: %{name}%{?_isa} = %{version}-%{release}
Requires: httpd-devel%{?_isa}
Requires: perl(:MODULE_COMPAT_%(eval "`perl -V:version`"; echo $version))
Requires: perl(IO::Dir)
%description devel
The mod_perl-devel package contains the files needed for building XS
modules that use mod_perl.
%if %{with mod_perl_enables_bundled_Apache_Reload}
%package -n perl-Apache-Reload
Version: 0.13
Summary: Reload changed Perl modules
License: ASL 2.0
Requires: perl(:MODULE_COMPAT_%(eval "`perl -V:version`"; echo $version))
# The mod_perl2 1.99022 is not used, pick for example ModPerl::Util to
# constrain the version.
Requires: perl(ModPerl::Util) >= 1.99022
Conflicts: mod_perl < 2.0.10-4
Provides: bundled(Apache-Reload) = %{version}
# Fiter-underspecified dependencies
%global __requires_exclude %{?__requires_exclude:%__requires_exclude|}^perl\\(ModPerl::Util\\)$
%description -n perl-Apache-Reload
This mod_perl extension allows to reload Perl modules that changed on the disk.
%endif
%prep
#%{gpgverify} --keyring='%{SOURCE2}' --signature='%{SOURCE1}' --data='%{SOURCE0}'
%setup -q
%patch0 -p1
%patch1 -p1
%patch2 -p1
%patch3 -p1
# Remove docs/os. It's only win32 info with non-ASL-2.0 license. Bug #1199044.
rm -rf docs/os
# Remove bundled Apache-Reload
%if %{without mod_perl_enables_bundled_Apache_Reload}
rm -rf Apache-Reload
sed -i -e '/Apache-Reload/d' Makefile.PL MANIFEST
%endif
# Remove failing tests, CPAN RT#118919, CPAN RT#132919
for F in \
ModPerl-Registry/t/closure.t \
ModPerl-Registry/t/special_blocks.t \
t/filter/in_bbs_inject_header.t \
t/filter/TestFilter/in_bbs_inject_header.pm \
;do
rm "$F"
sed -i -e '\,^'"$F"',d' MANIFEST
done
%build
CFLAGS="$RPM_OPT_FLAGS -fpic" perl Makefile.PL </dev/null \
PREFIX=$RPM_BUILD_ROOT/%{_prefix} \
INSTALLDIRS=vendor \
MP_APXS=%{_httpd_apxs} \
MP_APR_CONFIG=%{_bindir}/apr-1-config
# This is not needed now when we are using httpd24 branch, but I will keep
# it here in case someone will have to regenerate *.xs files again.
%if %{regenerate_xs}0
%{make_build} source_scan
%{make_build} xs_generate
CFLAGS="$RPM_OPT_FLAGS -fpic" perl Makefile.PL </dev/null \
PREFIX=$RPM_BUILD_ROOT/%{_prefix} \
INSTALLDIRS=vendor \
MP_APXS=%{_httpd_apxs} \
MP_APR_CONFIG=%{_bindir}/apr-1-config
%endif
%{make_build} -C src/modules/perl OPTIMIZE="$RPM_OPT_FLAGS -fpic"
%{make_build}
%install
install -d -m 755 $RPM_BUILD_ROOT%{_httpd_moddir}
# Not parallel-safe
make install \
MODPERL_AP_LIBEXECDIR=$RPM_BUILD_ROOT%{_httpd_moddir} \
MODPERL_AP_INCLUDEDIR=$RPM_BUILD_ROOT%{_includedir}/httpd
# Remove files not suitable for distribution.
find $RPM_BUILD_ROOT -type f -name .packlist -delete
find $RPM_BUILD_ROOT -type f -name perllocal.pod -delete
find $RPM_BUILD_ROOT -type f -name '*.bs' -a -size 0 -delete
# Remove empty vendor_perl/auto/mod_perl2 directory.
find $RPM_BUILD_ROOT -depth -type d -empty -delete
# Fix permissions to avoid strip failures on non-root builds.
%{_fixperms} $RPM_BUILD_ROOT/*
# Install the config file
install -d -m 755 $RPM_BUILD_ROOT%{_httpd_confdir}
install -d -m 755 $RPM_BUILD_ROOT%{_httpd_modconfdir}
install -p -m 644 %{SOURCE3} $RPM_BUILD_ROOT%{_httpd_confdir}
install -p -m 644 %{SOURCE4} $RPM_BUILD_ROOT%{_httpd_modconfdir}/02-perl.conf
# Move set of modules to -devel
devmods="ModPerl::Code ModPerl::BuildMM ModPerl::CScan \
ModPerl::TestRun ModPerl::Config ModPerl::WrapXS \
ModPerl::BuildOptions ModPerl::Manifest \
ModPerl::MapUtil ModPerl::StructureMap \
ModPerl::TypeMap ModPerl::FunctionMap \
ModPerl::ParseSource ModPerl::MM \
Apache2::Build Apache2::ParseSource Apache2::BuildConfig \
Bundle::ApacheTest"
for m in $devmods; do
test -f $RPM_BUILD_ROOT%{_mandir}/man3/${m}.3pm &&
echo "%{_mandir}/man3/${m}.3pm*"
fn=${m//::/\/}
test -f $RPM_BUILD_ROOT%{perl_vendorarch}/${fn}.pm &&
echo %{perl_vendorarch}/${fn}.pm
test -d $RPM_BUILD_ROOT%{perl_vendorarch}/${fn} &&
echo %{perl_vendorarch}/${fn}
test -d $RPM_BUILD_ROOT%{perl_vendorarch}/auto/${fn} &&
echo %{perl_vendorarch}/auto/${fn}
done | tee devel.files | sed 's/^/%%exclude /' > exclude.files
echo "%%exclude %{_mandir}/man3/Apache::Test*.3pm*" >> exclude.files
# perl build script generates *.orig files, they get installed and later they
# break provides so mod_perl requires mod_perl-devel. We remove them here.
find "$RPM_BUILD_ROOT" -type f -name *.orig -delete
%check
make test TEST_VERBOSE=1 && RETVAL=$?
if test "$RETVAL" != 0; then
cat t/logs/error_log
exit 1
fi
%files -f exclude.files
%license LICENSE
%doc Changes CONTRIBUTING.md NOTICE README* STATUS SVN-MOVE docs/
%config(noreplace) %{_httpd_confdir}/perl.conf
%config(noreplace) %{_httpd_modconfdir}/02-perl.conf
%{_bindir}/*
%{_httpd_moddir}/mod_perl.so
%{perl_vendorarch}/auto/*
%dir %{perl_vendorarch}/Apache/
%{perl_vendorarch}/Apache/SizeLimit*
%{perl_vendorarch}/Apache2/
%exclude %{perl_vendorarch}/Apache2/Reload.pm
%{perl_vendorarch}/Bundle/
%{perl_vendorarch}/APR/
%{perl_vendorarch}/ModPerl/
%{perl_vendorarch}/*.pm
%{_mandir}/man3/*.3*
%exclude %{_mandir}/man3/Apache::Reload.3pm*
%exclude %{_mandir}/man3/Apache2::Reload.3pm*
%files devel -f devel.files
%{_includedir}/httpd/*
%{perl_vendorarch}/Apache/Test*.pm
%{_mandir}/man3/Apache::Test*.3pm*
%if %{with mod_perl_enables_bundled_Apache_Reload}
%files -n perl-Apache-Reload
%dir %{perl_vendorarch}/Apache/
%{perl_vendorarch}/Apache/Reload.pm
%dir %{perl_vendorarch}/Apache2/
%{perl_vendorarch}/Apache2/Reload.pm
%{_mandir}/man3/Apache::Reload.3pm*
%{_mandir}/man3/Apache2::Reload.3pm*
%endif
%changelog
* Mon Aug 07 2023 chenchen <chen_aka_jan@163.com> - 2.0.12-2
- stop using do_open9
* Wed Mar 22 2023 Yikun Jiang <yikunkero@gmail.com> - 2.0.12-1
- 2.0.12 version