git/git.spec
2019-12-09 15:35:58 +08:00

288 lines
8.1 KiB
RPMSpec

%global gitexecdir %{_libexecdir}/git-core
Name: git
Version: 2.23.0
Release: 6
Summary: A popular and widely used Version Control System
License: GPLv2+ or LGPLv2.1
URL: https://git-scm.com/
Source0: https://www.kernel.org/pub/software/scm/git/%{name}-%{version}.tar.xz
Source1: https://www.kernel.org/pub/software/scm/git/%{name}-%{version}.tar.sign
Source100: git-gui.desktop
Source101: gitweb-httpd.conf
Source102: gitweb.conf.in
Source103: git@.service.in
Source104: git.socket
BuildRequires: openssl-devel libcurl-devel expat-devel systemd asciidoc xmlto glib2-devel libsecret-devel pcre-devel desktop-file-utils
BuildRequires: python3-devel perl-generators perl-interpreter perl-Error perl(Test::More) perl-MailTools perl(Test)
Requires: less zlib openssh-clients
Obsoletes: %{name}-core %{name}-core-doc %{name}-subtree %{name}-p4
Provides: %{name} <= %{version}-%{release} %{name}-core %{name}-subtree %{name}-p4
%description
Git is a free and open source distributed version control system
designed to handle everything from small to very large projects
with speed and efficiency.
Git is easy to learn and has a tiny footprint with lightning fast
performance. It outclasses SCM tools like Subversion, CVS, Perforce,
and ClearCase with features like cheap local branching, convenient
staging areas, and multiple workflows.
%package daemon
Summary: Git server daemon
Requires: %{name} = %{version}-%{release} systemd
%description daemon
%{summary}.
%package gui
Summary: Graphical user interface to Git
BuildArch: noarch
Requires: %{name} = %{version}-%{release} tk
%description gui
%{summary}.
%package -n gitk
Summary: TK based graphical tool for visualization of Git
BuildArch: noarch
Requires: %{name} = %{version}-%{release} tk
%description -n gitk
%{summary}.
%package web
Summary: Git web interfaces
BuildArch: noarch
Requires: %{name} = %{version}-%{release}
Obsoletes: gitweb %{name}-instaweb
Provides: gitweb %{name}-instaweb
%description web
Git web interface allows user browsing git repositories via web service.
%package cvs
Summary: Git tools for importing CVS repositories
BuildArch: noarch
Requires: %{name} = %{version}-%{release} cvs cvsps perl-DBD-SQLite
%description cvs
%{summary}.
%package svn
Summary: Git tools for importing Subversion repositories
BuildArch: noarch
Requires: %{name} = %{version}-%{release} subversion perl-TermReadKey perl-Digest-MD5
%description svn
%{summary}.
%package email
Summary: Git tools for sending patches via email
BuildArch: noarch
Requires: git = %{version}-%{release}
Requires: perl-Authen-SASL perl-Net-SMTP-SSL
%description email
%{summary}.
%package -n perl-Git
Summary: Perl interface to Git
BuildArch: noarch
Requires: git = %{version}-%{release} perl(:MODULE_COMPAT_%(perl -V:version | cut -d"'" -f 2))
%description -n perl-Git
%{summary}.
%package -n perl-Git-SVN
Summary: Perl interface to Git::SVN
BuildArch: noarch
Requires: git = %{version}-%{release} perl(:MODULE_COMPAT_%(perl -V:version | cut -d"'" -f 2))
%description -n perl-Git-SVN
%{summary}.
%package help
Summary: Man pages and documents for Git system
BuildArch: noarch
Obsoletes: %{name}-core-doc
Provides: %{name}-core-doc
%description help
%{summary}.
%prep
%autosetup -n %{name}-%{version}
rm -rf perl/Git/LoadCPAN{.pm,/}
grep -rlZ '^use Git::LoadCPAN::' | xargs -r0 sed -i 's/Git::LoadCPAN:://g'
%build
%configure
# Some options can not configure in configure script, so give options here (config.mak included in Makefile)
cat > config.mak << EOF
CFLAGS = %{optflags}
LDFLAGS = %{__global_ldflags}
NEEDS_CRYPTO_WITH_SSL = 1
USE_LIBPCRE = 1
INSTALL_SYMLINKS = 1
GNU_ROFF = 1
GITWEB_PROJECTROOT = %{_localstatedir}/lib/git
PYTHON_PATH = %{__python3}
htmldir = %{?_pkgdocdir}
perllibdir = %{perl_vendorlib}
gitwebdir = %{_localstatedir}/www/git
NO_PERL_CPAN_FALLBACKS = 1
EOF
# Default using python3
sed -i '1s@#![ ]*/usr/bin/env python@#!%{__python3}@' \
contrib/hooks/multimail/git_multimail.py \
contrib/hooks/multimail/migrate-mailhook-config \
contrib/hooks/multimail/post-receive.example
%make_build
%make_build -C contrib/subtree/
%make_build -C contrib/contacts/
%make_build -C contrib/credential/libsecret/
%make_build -C contrib/diff-highlight/
%install
%make_install install-doc
%make_install -C contrib/subtree/ install-doc
%make_install -C contrib/contacts/ install-doc
install -p -m 644 README.md %{buildroot}%{_pkgdocdir}
install -p -m 644 gitweb/INSTALL %{buildroot}%{_pkgdocdir}/INSTALL.gitweb
install -p -m 644 gitweb/README %{buildroot}%{_pkgdocdir}/README.gitweb
# install contrib to git-core
mkdir -p %{buildroot}%{_datadir}/git-core/contrib/completion
mv contrib/hooks/multimail/git_multimail{.py,}
mv contrib/hooks %{buildroot}%{_datadir}/git-core/contrib
install -p -m 644 contrib/completion/git-completion.tcsh %{buildroot}%{_datadir}/git-core/contrib/completion/
install -p -m 644 contrib/completion/git-prompt.sh %{buildroot}%{_datadir}/git-core/contrib/completion/
install -D -p -m 0755 contrib/diff-highlight/diff-highlight %{buildroot}%{_datadir}/git-core/contrib/diff-highlight
# install root path for gitweb
mkdir -p %{buildroot}%{_localstatedir}/lib/git
# install config files
desktop-file-install --dir=%{buildroot}%{_datadir}/applications %{SOURCE100}
install -D -p -m 644 %{SOURCE101} %{buildroot}%{_sysconfdir}/httpd/conf.d/gitweb-httpd.conf
install -D -p -m 644 %{SOURCE102} %{buildroot}%{_sysconfdir}/gitweb.conf
install -D -p -m 644 %{SOURCE103} %{buildroot}%{_unitdir}/git@.service
install -D -p -m 644 %{SOURCE104} %{buildroot}%{_unitdir}/git.socket
%find_lang %{name}
cat %{name}.lang >> git-bin-files
# split out bin for primary package
(find %{buildroot}{%{_bindir},%{gitexecdir}} -type f -o -type l | grep -vE "git-(gui|daemon|cvs|svn|instaweb|citool|send-email)" | \
sed -e s@^%{buildroot}@@) >> git-bin-files
(find %{buildroot}%{perl_vendorlib} -type f | sed -e s@^%{buildroot}@@) > perl-git-files
(find %{buildroot}%{perl_vendorlib} -mindepth 1 -type d | sed -e 's@^%{buildroot}@%dir @') >> perl-git-files
# split out perl files for Git and Git::SVN
grep Git/SVN perl-git-files > perl-git-svn-files
sed -i "/Git\/SVN/ d" perl-git-files
%check
make test
%preun daemon
%systemd_preun git@.service
%post daemon
%systemd_post git@.service
%postun daemon
%systemd_postun_with_restart git@.service
%files -f git-bin-files
%defattr(-,root,root)
%{_datadir}/git-core/
%doc README.md
%license LGPL-2.1 COPYING
%files daemon
%defattr(-,root,root)
%{_unitdir}/git.socket
%{_unitdir}/git@.service
%{gitexecdir}/git-daemon
%{_localstatedir}/lib/git
%files gui
%defattr(-,root,root)
%{_datadir}/applications/git-gui.desktop
%{gitexecdir}/git-gui*
%{gitexecdir}/git-citool
%{_datadir}/git-gui/
%files -n gitk
%defattr(-,root,root)
%{_bindir}/gitk
%{_datadir}/gitk/
%files web
%defattr(-,root,root)
%{_pkgdocdir}/*.gitweb
%config(noreplace) %{_sysconfdir}/gitweb.conf
%config(noreplace) %{_sysconfdir}/httpd/conf.d/gitweb-httpd.conf
%{_localstatedir}/www/git/
%{gitexecdir}/git-instaweb
%files cvs
%defattr(-,root,root)
%{_bindir}/git-cvsserver
%{gitexecdir}/git-cvs*
%files svn
%defattr(-,root,root)
%{gitexecdir}/git-svn
%files email
%defattr(-,root,root)
%{gitexecdir}/*email*
%files -n perl-Git -f perl-git-files
%files -n perl-Git-SVN -f perl-git-svn-files
%files help
%defattr(-,root,root)
%exclude %{_pkgdocdir}/{README.md,*.gitweb}
%{_pkgdocdir}/*
%{_mandir}/man1/git*.1.*
%{_mandir}/man3/Git.*
%{_mandir}/man5/git*.5.*
%{_mandir}/man7/git*.7.*
%changelog
* Thu Dec 5 2019 shenyangyang <shenyangyang4@huawei.com> - 2.23.0-6
- Delete the perl(Error*) module that provided by perl-Git
* Thu Oct 31 2019 openEuler Buildteam <buildteam@openeuler.org> - 2.23.0-5
- Modify installation of contrib and templates
* Wed Sep 25 2019 openEuler Buildteam <buildteam@openeuler.org> - 2.23.0-4
- Modify license
* Wed Sep 4 2019 openEuler Buildteam <buildteam@openeuler.org> - 2.23.0-3
- Split out perl-Git-SVN
* Wed Sep 4 2019 openEuler Buildteam <buildteam@openeuler.org> - 2.23.0-2
- Split Package
* Sat Aug 31 2019 openEuler Buildteam <buildteam@openeuler.org> - 2.23.0-1
- Package init