subversion/subversion.spec
Andreas Stieger 46f5cf17d0 - make the subversion package conflict with KWallet and Gnome
Keyring packages with do not require matching subversion versions 
  in SLE 12 and openSUSE Leap 42.1 and thus break the main package
  upon partial upgrade. Fix/workaround for boo#969159

OBS-URL: https://build.opensuse.org/package/show/devel:tools:scm:svn/subversion?expand=0&rev=228
2016-03-02 19:46:39 +00:00

572 lines
19 KiB
RPMSpec

#
# spec file for package subversion
#
# Copyright (c) 2016 SUSE LINUX GmbH, Nuernberg, Germany.
# Copyright (c) 2013 Andreas Stieger <andreas.stieger@gmx.de>
# Copyright (c) 2009-2010 Pascal Bleser <pascal.bleser@opensuse.org>
#
# All modifications and additions to the file contributed by third parties
# remain the property of their copyright owners, unless otherwise agreed
# upon. The license for this file, and modifications and additions to the
# file, is the same license as for the pristine package itself (unless the
# license for the pristine package is not an Open Source License, in which
# case the license is the MIT License). An "Open Source License" is a
# license that conforms to the Open Source Definition (Version 1.9)
# published by the Open Source Initiative.
# Please submit bugfixes or comments via http://bugs.opensuse.org/
#
%define svngroup svn
%define svnuser svn
%global _tmpfilesdir %{_libexecdir}/tmpfiles.d
%define _fwdefdir %{_sysconfdir}/sysconfig/SuSEfirewall2.d/services
%define apxs %{_sbindir}/apxs2
%define apache_libexecdir %(%{apxs} -q LIBEXECDIR)
%define apache_sysconfdir %(%{apxs} -q SYSCONFDIR)
%define apache_mmn %(MMN="$(%{apxs} -q LIBEXECDIR)_MMN"; test -x "$MMN" && "$MMN")
%define sqlite_minimum_version 3.7.12
# SLE 12 does not ship KDE
%if 0%{?suse_version} == 1315 && 0%{?is_opensuse} != 1
%define with_kde 0
%else
%define with_kde 1
%endif
%bcond_without python_ctypes
%bcond_with all_regression_tests
Name: subversion
Version: 1.9.3
Release: 0
Summary: Subversion version control system
License: Apache-2.0
Group: Development/Tools/Version Control
Url: https://subversion.apache.org
Source0: https://www.apache.org/dist/subversion/%{name}-%{version}.tar.bz2
Source1: subversion.conf
Source2: subversion.README.SUSE
Source4: contrib-1485350.tar.bz2
Source10: subversion.sysconfig.svnserve
Source12: subversion.sysconfig.svnserve.remoteaccess
Source13: subversion.xinetd.svnserve
Source14: svnserve.service
Source15: svnserve.tmpfiles
Source42: subversion.svngrep.sh
Source43: subversion.svndiff.sh
Source50: https://people.apache.org/keys/group/subversion-pmc.asc#/subversion.keyring
Source51: https://www.apache.org/dist/subversion/%{name}-%{version}.tar.bz2.asc
Source92: %{name}.rpmlintrc
Patch11: subversion.libtool-verbose.patch
Patch20: subversion-swig-perl-install_vendor.patch
Patch23: subversion-swig-perl-Wall.patch
Patch30: subversion-1.8.0-rpath.patch
Patch37: subversion-no-build-date.patch
Patch39: subversion-fix-parallel-build-support-for-perl-bindings.patch
Patch40: subversion-perl-underlinking.patch
Patch44: subversion-1.8.11-swig-py-comment-3.patch
Patch45: subversion-1.8.11-autocheck-time.patch
Patch48: subversion-1.9.0-allow-httpd-2.4.6.patch
BuildRequires: apache2-devel >= 2.2.0
BuildRequires: apache2-prefork
BuildRequires: bash-completion
BuildRequires: cyrus-sasl-devel
BuildRequires: db-devel
BuildRequires: dbus-1-devel
BuildRequires: doxygen
BuildRequires: file-devel
BuildRequires: gcc-c++
BuildRequires: glib2-devel
BuildRequires: java-devel >= 1.6.0
BuildRequires: junit
BuildRequires: krb5-devel
BuildRequires: libgnome-keyring-devel
BuildRequires: libstdc++-devel
BuildRequires: libtool
BuildRequires: pkg-config
# Python 2.7 or later is required to run autogen.sh
BuildRequires: python-devel >= 2.7
# Test dependency
BuildRequires: python-pysqlite
BuildRequires: python-xml
BuildRequires: ruby-devel >= 1.8.2
BuildRequires: sqlite3-devel >= %{sqlite_minimum_version}
BuildRequires: swig
BuildRequires: update-alternatives
BuildRequires: zlib-devel
BuildRequires: pkgconfig(apr-1) >= 1.3.0
BuildRequires: pkgconfig(apr-util-1) >= 1.3.0
BuildRequires: pkgconfig(serf-1) >= 1.3.4
BuildRequires: pkgconfig(systemd)
Requires: libsqlite3-0 >= %{sqlite_minimum_version}
Requires(post): %fillup_prereq
Requires(pre): pwdutils
Recommends: %{name}-bash-completion
Provides: subversion-javahl = %{version}-%{release}
BuildRoot: %{_tmppath}/%{name}-%{version}-build
%{?systemd_requires}
# blacklisted versions of httpd, see build/ac-macros/apache.m4
BuildConflicts: apache2-devel = 2.2.25
BuildConflicts: apache2-devel = 2.4.5
%if %{with all_regression_tests}
# tools required for network based tests
BuildRequires: net-tools
BuildRequires: time
BuildRequires: wget
%endif
%if %{with python_ctypes}
BuildRequires: ctypesgen
%endif
%if %{with_kde}
BuildRequires: kdelibs4-core
BuildRequires: libkde4-devel
BuildRequires: libqt4-devel
%endif
# workaround for boo#969159
Conflicts: libsvn_auth_kwallet-1-0 < %{version}
Conflicts: libsvn_auth_kwallet-1-0 > %{version}
Conflicts: libsvn_gnome_keyring-1-0 < %{version}
Conflicts: libsvn_gnome_keyring-1-0 > %{version}
#
%description
Subversion exists to be universally recognized and adopted as an open-source,
centralized version control system characterized by its reliability as a safe
haven for valuable data; the simplicity of its model and usage; and its ability
to support the needs of a wide variety of users and projects, from individuals
to large-scale enterprise operations.
%package devel
Summary: Development package for Subversion developers
Group: Development/Libraries/C and C++
# this pulls in libapr1-devel and libexpat-devel
Requires: libapr-util1-devel
Requires: subversion = %{version}
%description devel
The subversion-devel package includes the static libraries and include
files for developers interacting with the subversion package.
%package tools
Summary: Tools for Subversion
Group: Development/Tools/Version Control
%description tools
This package contains some tools for subversion server and
repository admins.
%package perl
Summary: Allows Perl scripts to directly use Subversion repositories
Group: Development/Tools/Version Control
Requires: perl = %{perl_version}
Requires: perl >= 5.8
Requires: subversion = %{version}
%description perl
Provides Perl (SWIG) support for Subversion version control system.
%package python
Summary: Allows Python scripts to directly use Subversion repositories
Group: Development/Tools/Version Control
Requires: subversion = %{version}
%description python
Provides Python (SWIG) support for Subversion version control system.
%if %{with python_ctypes}
%package python-ctypes
Summary: High-Level Python Bindings for Subversion
Group: Development/Tools/Version Control
Requires: subversion = %{version}
%description python-ctypes
Provides high-level Python support for Subversion, based on ctypes.
%endif
%package ruby
Summary: Allows Ruby scripts to directly use Subversion repositories
Group: Development/Tools/Version Control
Requires: subversion = %{version}
%description ruby
Provides Ruby (SWIG) support for Subversion version control system.
%package server
Summary: Apache server module for Subversion server
Group: Development/Tools/Version Control
Requires: %{apache_mmn}
Requires: apache2
Requires: subversion = %{version}
%description server
The subversion-server package adds the Subversion server Apache module
to the Apache directories and configuration.
%if %{with_kde}
%package -n libsvn_auth_kwallet-1-0
Summary: KWallet support for Subversion
Group: Development/Tools/Version Control
Requires: %{name} = %{version}
Supplements: packageand(subversion:kdebase4-workspace)
Supplements: packageand(subversion:plasma5-workspace)
%description -n libsvn_auth_kwallet-1-0
Provides KWallet integration for Subversion
%endif
%package -n libsvn_auth_gnome_keyring-1-0
Summary: GNOME keyring sypport for Subversion
Group: Development/Tools/Version Control
Requires: %{name} = %{version}
Supplements: packageand(subversion:gnome-session)
%description -n libsvn_auth_gnome_keyring-1-0
Provides GNOME keyring support for Subversion
%package bash-completion
Summary: Bash Completion for %{name}
Group: Development/Tools/Version Control
Requires: %{name} = %{version}
Requires: bash-completion
BuildArch: noarch
%description bash-completion
Bash command line completion support for %{name} - completion of subcommands,
parameters and keywords for the svn command and other tools.
%prep
%setup -q -a 4
%patch11 -p1
%patch20 -p1
%patch23 -p1
%patch30 -p1
%patch37 -p1
%patch39
%patch40 -p1
%patch44 -p1
%patch45 -p1
%patch48 -p1
%build
# Re-boot strap, needed for patch37
PATH=%{_prefix}/bin:$PATH ./autogen.sh --release
# Fix timestamp in doxygen
echo "HTML_TIMESTAMP = NO" >> doc/doxygen.conf
cat > with_jdk.files <<EOF-JAVA
%{_libdir}/libsvnjavahl*.so.*
%{_libdir}/libsvnjavahl*.so
%dir %{_libdir}/svn-javahl
%{_libdir}/svn-javahl/svn-javahl.jar
%{_datadir}/java/svn-javahl.jar
EOF-JAVA
# ### these possibly need further discussion
# swig_pydir = @libdir@/svn-python/libsvn
# swig_pydir_extra = @libdir@/svn-python/svn
sed --in-place=~ "
s@^swig_pydir = .*@swig_pydir = %{python_sitearch}/libsvn@
s@^swig_pydir_extra = .*@swig_pydir_extra = %{python_sitearch}/svn@
" Makefile.in
diff -u Makefile.in~ Makefile.in || true
sh -x autogen.sh
for i in subversion/bindings/javahl/native/*.cpp
do
d=$(sed -n '/^#include "..\/include/{s@^[^/]\+\([^"]\+\).*@subversion/bindings/javahl\1@;H};${x;s@\n@ @gp}' $i)
echo
echo "# $i"
if ! test -z "$d"
then
echo ${i%.cpp}.lo: $d
fi
echo
done >> build-outputs.mK
export CFLAGS="$(%{apxs} -q CFLAGS) %{optflags} -fstack-protector -fpie"
export CXXFLAGS="$CFLAGS"
export APACHE_LDFLAGS="-Wl,-z,relro,-z,now"
export LDFLAGS="-pie"
%configure \
--enable-local-library-preloading \
--with-editor="vim -c 'set tw=72 et' " \
--with-serf=%{_prefix} \
--with-apr=%{_prefix} \
--with-apr-util=%{_prefix} \
--with-apxs=%{apxs} \
--with-zlib=%{_prefix} \
--with-berkeley-db=db.h:db.h:%{_prefix}:db \
--with-apache-libexecdir=%{apache_libexecdir} \
--with-jdk=%{_libdir}/jvm/java --enable-javahl \
--with-junit="%{_datadir}/java/junit.jar" \
--with-jikes=no \
--with-sqlite="%{_prefix}" \
--enable-sqlite-compatibility-version=%{sqlite_minimum_version} \
--with-gnome-keyring \
%if %{with_kde}
--with-kwallet \
%endif
--disable-mod-activation \
--with-libmagic \
--disable-static \
--enable-broken-httpd-auth
make %{?_smp_mflags}
make doc-api %{?_smp_mflags}
# Bindings
make extraclean-bindings %{?_smp_mflags}
make %{?_smp_mflags} swig-py swig-rb swig-pl
%if %{with python_ctypes}
make %{?_smp_mflags} ctypes-python
%endif
# Java is not thread safe
make -j1 JAVAC_FLAGS=" -encoding iso8859-1" javahl doc-javahl
%install
make DESTDIR=%{buildroot} install -j1
make DESTDIR=%{buildroot} install-swig-py install-swig-pl install-javahl install-swig-rb
%if %{with python_ctypes}
make DESTDIR=%{buildroot} install-ctypes-python
# remove csvn .pyc files and recompile them because they contain the $RPM_BUILD_ROOT path:
find "%{buildroot}%{python_sitelib}/csvn/" -name "*.pyc" | xargs rm -f
python "%{py_libdir}/compileall.py" -f -d "%{python_sitelib}/csvn" "%{buildroot}/%{python_sitelib}/csvn"
%endif
%perl_process_packlist
%find_lang %{name}
cp -Lav %{SOURCE42} %{buildroot}%{_bindir}/svngrep
cp -Lav %{SOURCE43} %{buildroot}%{_bindir}/svndiff
mkdir -p %{buildroot}%{_datadir}/emacs/site-lisp/
cp -avL contrib/client-side/emacs/*.el %{buildroot}%{_datadir}/emacs/site-lisp/
rm -f %{buildroot}%{_datadir}/emacs/site-lisp/vc-svn.el
cp -avL contrib/client-side/svn_apply_autoprops.py %{buildroot}%{_prefix}/bin
mkdir -p %{buildroot}/%{apache_sysconfdir}/conf.d
cp -av %{SOURCE1} %{buildroot}/%{apache_sysconfdir}/conf.d/subversion.conf
cp -avL %{SOURCE2} README.SUSE
cp -avL subversion/mod_authz_svn/INSTALL README.mod_authz_svn
cat %{name}.lang > files.subversion
cat with_jdk.files >> files.subversion
# tools
make DESTDIR=%{buildroot} install-tools
mv -v %{buildroot}%{_bindir}/svn-tools/{fsfs-access-map,svnauthz,svnauthz-validate,svn-populate-node-origins-index,svnraisetreeconflict} %{buildroot}%{_bindir}
# discard all other tools
rm -rf %{buildroot}%{_bindir}/svn-tools
# replicate svn-bench compatibility link
ln -sf svnbench %{buildroot}%{_bindir}/svn-bench
mkdir -p %{buildroot}%{_prefix}/sbin
mkdir -p %{buildroot}%{_localstatedir}/adm/fillup-templates
install -m 644 -D %{SOURCE13} %{buildroot}%{_sysconfdir}/xinetd.d/svnserve
install -m 644 -D %{SOURCE10} %{buildroot}%{_localstatedir}/adm/fillup-templates/sysconfig.svnserve
install -m 644 -D %{SOURCE12} %{buildroot}/%{_fwdefdir}/svnserve
install -d -m 0755 %{buildroot}/srv/svn
install -m 644 -D %{SOURCE14} %{buildroot}/%{_unitdir}/svnserve.service
ln -sv service %{buildroot}%{_sbindir}/rcsvnserve
install -d -m 0755 %{buildroot}/%{_tmpfilesdir}
install -m 0644 %{SOURCE15} %{buildroot}/%{_tmpfilesdir}/svnserve.conf
#useless libtool stuff
rm -rf %{buildroot}%{python_sitearch}/*/*.{a,la}
rm -rf %{buildroot}%{_libdir}/libsvn_swig_*.{so,la,a}
rm -rf %{buildroot}%{rb_sitelib}/svn/ext/*.*a
find %{buildroot} -type f -name "*.la" -delete -print
# remove stuff produced with Perl modules
find %{buildroot} -type f \
-a \( -name .packlist -o \( -name '*.bs' -a -empty \) \) \
-print0 | xargs -0 rm -f
# make Perl modules writable so they get stripped
find %{buildroot}%{_libexecdir}/perl5 -type f -perm 555 -print0 |
xargs -0 chmod 755
install -d -m 0755 %{buildroot}/%{_datadir}/java
ln -sv %{_libdir}/svn-javahl/svn-javahl.jar %{buildroot}/%{_datadir}/java/svn-javahl.jar
rm -f %{buildroot}%{_localstatedir}/adm/perl-modules/subversion
install -D -m0644 tools/client-side/bash_completion "%{buildroot}%{_sysconfdir}/bash_completion.d/%{name}"
# examples
mkdir -p %{buildroot}%{_docdir}/%{name}
cp -r tools/hook-scripts tools/backup tools/bdb tools/examples tools/xslt %{buildroot}%{_docdir}/%{name}
find %{buildroot}%{_docdir}/%{name} -type f -print0 | xargs -0 chmod 644
# clean tools for doc
rm -rf tools/*/*.in
rm -rf doc/doxygen/html/installdox
%check
export LANG=C LC_ALL=C
make %{?_smp_mflags} check CLEANUP=true || (cat fails.log; exit 1)
make %{?_smp_mflags} check-javahl || (cat fails.log; exit 1)
make %{?_smp_mflags} check-swig-pl || (cat fails.log; exit 1)
%if 0%{?suse_version} <= 1320
# swig bindings check failing from swig 3.0.3 and later
make %{?_smp_mflags} check-swig-py || (cat fails.log; exit 1)
# same for ruby bindings
make %{?_smp_mflags} check-swig-rb || (cat fails.log; exit 1)
%endif
%if %{with all_regression_tests}
make %{?_smp_mflags} svnserveautocheck CLEANUP=true FS_TYPE=fsfs || (cat fails.log; exit 1)
make %{?_smp_mflags} svnserveautocheck CLEANUP=true FS_TYPE=bdb || (cat fails.log; exit 1)
make %{?_smp_mflags} davautocheck CLEANUP=true FS_TYPE=fsfs || (cat fails.log; exit 1)
make %{?_smp_mflags} davautocheck CLEANUP=true FS_TYPE=bdb || (cat fails.log; exit 1)
%endif
%pre
getent group %{svngroup} >/dev/null || groupadd -r %{svngroup}
getent passwd %{svnuser} >/dev/null || useradd -r -g %{svngroup} -d /srv/svn -s /sbin/nologin -c "user for Apache Subversion svnserve" %{svnuser}
%service_add_pre svnserve.service
%preun
%service_del_preun svnserve.service
%post
%{fillup_only -n svnserve svnserve}
%service_add_post svnserve.service
systemd-tmpfiles --create %{_tmpfilesdir}/svnserve.conf
/sbin/ldconfig
%postun
%service_del_postun svnserve.service
/sbin/ldconfig
%post -n subversion-python -p /sbin/ldconfig
%postun -n subversion-python -p /sbin/ldconfig
%post -n subversion-perl -p /sbin/ldconfig
%postun -n subversion-perl -p /sbin/ldconfig
%post -n subversion-ruby -p /sbin/ldconfig
%postun -n subversion-ruby -p /sbin/ldconfig
%post -n libsvn_auth_gnome_keyring-1-0 -p /sbin/ldconfig
%postun -n libsvn_auth_gnome_keyring-1-0 -p /sbin/ldconfig
%if %{with_kde}
%post -n libsvn_auth_kwallet-1-0 -p /sbin/ldconfig
%postun -n libsvn_auth_kwallet-1-0 -p /sbin/ldconfig
%endif
%files -f files.subversion
%defattr(-,root,root)
%doc README.SUSE BUGS CHANGES LICENSE README.mod_authz_svn
%dir %{_docdir}/%{name}/*
%config(noreplace) %{_sysconfdir}/xinetd.d/svnserve
%{_sbindir}/rcsvnserve
%{_localstatedir}/adm/fillup-templates/sysconfig.svnserve
%dir %attr(755,%{svnuser},%{svngroup}) /srv/svn
%config %{_fwdefdir}/*
%{_unitdir}/svnserve.service
%{_tmpfilesdir}/svnserve.conf
%attr(755,root,root) %{_bindir}/svn
%attr(755,root,root) %{_bindir}/svnadmin
%attr(755,root,root) %{_bindir}/svndiff
%attr(755,root,root) %{_bindir}/svndumpfilter
%attr(755,root,root) %{_bindir}/svnfsfs
%attr(755,root,root) %{_bindir}/svngrep
%attr(755,root,root) %{_bindir}/svnlook
%attr(755,root,root) %{_bindir}/svnmucc
%attr(755,root,root) %{_bindir}/svnrdump
%attr(755,root,root) %{_bindir}/svnserve
%attr(755,root,root) %{_bindir}/svnsync
%attr(755,root,root) %{_bindir}/svnversion
%{_libdir}/libsvn_client*.so.*
%{_libdir}/libsvn_delta*.so.*
%{_libdir}/libsvn_diff*.so.*
%{_libdir}/libsvn_fs*.so.*
%{_libdir}/libsvn_ra*.so.*
%{_libdir}/libsvn_repos*.so.*
%{_libdir}/libsvn_subr*.so.*
%{_libdir}/libsvn_wc*.so.*
%{_mandir}/man?/svn*
%{_datadir}/emacs
%files perl
%defattr(-,root,root)
%{_mandir}/man?/SVN::*
%{_libdir}/libsvn_swig_perl-1.so.*
%{perl_vendorarch}/SVN
%{perl_vendorarch}/auto/SVN
%files python
%defattr(-,root,root)
%dir %{python_sitearch}
%dir %{python_sitearch}/svn
%dir %{python_sitearch}/libsvn
%{_libdir}/libsvn_swig_py-1.so.*
%{python_sitearch}/libsvn/*
%{python_sitearch}/svn/*
%if %{with python_ctypes}
%files python-ctypes
%defattr(-,root,root)
%doc subversion/bindings/ctypes-python/examples
%dir %{python_sitelib}
%{python_sitelib}/csvn
%{python_sitelib}/svn_ctypes_python_bindings-*-py%{py_ver}.egg-info
%endif
%files ruby
%defattr(-,root,root)
%dir %{rb_sitelib}
%{rb_sitelib}/svn
%{rb_sitelib}/*/svn
%{_libdir}/libsvn_swig_ruby-1.so.*
%files devel
%defattr(-,root,root)
%dir %{_includedir}/subversion-1
%{_libdir}/libsvn_*.so
%{_datadir}/pkgconfig/*.pc
%{_includedir}/subversion-1/*
%doc doc/doxygen/html
%files tools
%defattr(-,root,root)
%{_bindir}/fsfs-access-map
%attr(755,root,root) %{_bindir}/svn_apply_autoprops.py
%{_bindir}/svnauthz
%{_bindir}/svnauthz-validate
%{_bindir}/svnbench
%{_bindir}/svn-bench
%{_bindir}/svn-populate-node-origins-index
%{_bindir}/svnraisetreeconflict
%files server
%defattr(-,root,root)
%dir %{apache_sysconfdir}/conf.d
%config (noreplace) %{apache_sysconfdir}/conf.d/subversion.conf
%dir %{apache_libexecdir}
%{apache_libexecdir}/mod_dav_svn.*
%{apache_libexecdir}/mod_authz_svn.*
%{apache_libexecdir}/mod_dontdothat.*
%files -n libsvn_auth_gnome_keyring-1-0
%defattr(-,root,root)
%{_libdir}/libsvn_auth_gnome_keyring-1.so.0
%{_libdir}/libsvn_auth_gnome_keyring-1.so.0.*
%if %{with_kde}
%files -n libsvn_auth_kwallet-1-0
%defattr(-,root,root)
%{_libdir}/libsvn_auth_kwallet-1.so.0
%{_libdir}/libsvn_auth_kwallet-1.so.0.*
%endif
%files bash-completion
%defattr(-,root,root)
%config %{_sysconfdir}/bash_completion.d/%{name}
%changelog