Blame SPECS/git.spec

3de368
%{?scl:%scl_package git}
3de368
%{!?scl:%global pkg_name %{name}}
3de368
# Pass --without docs to rpmbuild if you don't want the documentation
3de368
3de368
%if 0%{?scl:1}
3de368
%global httpdconfdir /opt/rh/httpd24/root/etc/httpd/conf.d
3de368
%global appdesktopdir %{_root_datadir}/applications
3de368
%global cpath_dir     /opt/rh/%{scl_httpd}/root%{_root_includedir}
3de368
%else
3de368
%global appdesktopdir %{_datadir}/applications
3de368
%global httpdconfdir %{_sysconfdir}/httpd/conf.d
3de368
%endif
3de368
3de368
# Settings for EL-5
3de368
# - Leave git-* binaries in %{_bindir}
3de368
# - Don't use noarch subpackages
3de368
# - Use proper libcurl devel package
3de368
# - Patch emacs and tweak docbook spaces
3de368
# - Explicitly enable ipv6 for git-daemon
3de368
# - Use prebuilt documentation, asciidoc is too old
3de368
# - Define missing python macro
3de368
%if 0%{?rhel} && 0%{?rhel} <= 5
3de368
%global gitcoredir          %{_bindir}
3de368
%global noarch_sub          0
3de368
%global libcurl_devel       curl-devel
3de368
%global emacs_old           1
3de368
%global docbook_suppress_sp 1
3de368
%global enable_ipv6         1
3de368
%global use_prebuilt_docs   1
3de368
%global filter_yaml_any     1
3de368
%{!?python_sitelib: %global python_sitelib %(%{__python} -c "from distutils.sysconfig import get_python_lib; print(get_python_lib())")}
3de368
%else
3de368
%global gitcoredir          %{_libexecdir}/git-core
3de368
%global noarch_sub          1
3de368
%global libcurl_devel       %{?scl_prefix_httpd}libcurl-devel
3de368
%global emacs_old           0
3de368
%global docbook_suppress_sp 0
3de368
%global enable_ipv6         0
3de368
%global use_prebuilt_docs   0
3de368
%global filter_yaml_any     0
3de368
%endif
3de368
3de368
# Settings for F-19+ and EL-7+
3de368
%if 0%{?fedora} >= 19 || 0%{?rhel} >= 7
3de368
%global bashcomp_pkgconfig  1
3de368
%global bashcompdir         %{_scl_root}%(pkg-config --variable=completionsdir bash-completion 2>/dev/null)
3de368
%global bashcomproot        %(dirname %{bashcompdir} 2>/dev/null)
3de368
%global gnome_keyring       1
3de368
%global use_new_rpm_filters 1
3de368
%global use_systemd         1
3de368
%else
3de368
%global bashcomp_pkgconfig  0
3de368
%global bashcompdir         %{_sysconfdir}/bash_completion.d
3de368
%global bashcomproot        %{bashcompdir}
3de368
%global gnome_keyring       0
3de368
%global use_new_rpm_filters 0
3de368
%global use_systemd         0
3de368
%endif
3de368
3de368
# This one macro is for F19+ and EL-6+
3de368
%if 0%{?fedora} >= 19 || 0%{?rhel} >= 6
3de368
%global desktop_vendor_tag  0
3de368
%else
3de368
%global desktop_vendor_tag  1
3de368
%endif
3de368
3de368
# Settings for EL <= 7
3de368
%if 0%{?rhel} && 0%{?rhel} <= 7
3de368
%{!?__global_ldflags: %global __global_ldflags -Wl,-z,relro}
3de368
%endif
3de368
3de368
Name:           %{?scl_prefix}git
3de368
Version:        2.9.3
3de368
Release:        2%{?dist}
3de368
Summary:        Fast Version Control System
3de368
License:        GPLv2
3de368
Group:          Development/Tools
3de368
URL:            https://git-scm.com/
3de368
Source0:        https://www.kernel.org/pub/software/scm/git/%{pkg_name}-%{version}.tar.xz
3de368
Source1:        https://www.kernel.org/pub/software/scm/git/%{pkg_name}-htmldocs-%{version}.tar.xz
3de368
Source2:        https://www.kernel.org/pub/software/scm/git/%{pkg_name}-manpages-%{version}.tar.xz
3de368
Source3:        https://www.kernel.org/pub/software/scm/git/%{pkg_name}-%{version}.tar.sign
3de368
Source4:        https://www.kernel.org/pub/software/scm/git/%{pkg_name}-htmldocs-%{version}.tar.sign
3de368
Source5:        https://www.kernel.org/pub/software/scm/git/%{pkg_name}-manpages-%{version}.tar.sign
3de368
3de368
# Junio C Hamano's key is used to sign git releases, it can be found in the
3de368
# junio-gpg-pub tag within git.
3de368
#
3de368
# (Note that the tagged blob in git contains a version of the key with an
3de368
# expired signing subkey.  The subkey expiration has been extended on the
3de368
# public keyservers, but the blob in git has not been updated.)
3de368
#
3de368
# https://git.kernel.org/cgit/git/git.git/tag/?h=junio-gpg-pub
3de368
# https://git.kernel.org/cgit/git/git.git/blob/?h=junio-gpg-pub&id=7214aea37915ee2c4f6369eb9dea520aec7d855b
3de368
Source9:        gpgkey-junio.asc
3de368
3de368
# Local sources begin at 10 to allow for additional future upstream sources
3de368
Source10:       git-init.el
3de368
Source11:       git.xinetd.in
3de368
Source12:       git.conf.httpd
3de368
Source13:       git-gui.desktop
3de368
Source14:       gitweb.conf.in
3de368
Source15:       git@.service
3de368
Source16:       git.socket
3de368
Patch0:         git-1.5-gitweb-home-link.patch
3de368
# https://bugzilla.redhat.com/490602
3de368
Patch1:         git-cvsimport-Ignore-cvsps-2.2b1-Branches-output.patch
3de368
# https://bugzilla.redhat.com/600411
3de368
Patch3:         git-1.7-el5-emacs-support.patch
3de368
3de368
# fix HTTP(S)-SSO (#1359176)
3de368
Patch4:         0001-http-control-GSSAPI-credential-delegation.patch
3de368
3de368
# fix infinite loop + test
3de368
Patch5:         0001-Add-test-for-ls-tree-with-broken-symlink-under-refs-.patch
3de368
Patch6:         0002-resolve_ref_unsafe-limit-the-number-of-stat_ref-retr.patch
3de368
3de368
BuildRoot:      %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n)
3de368
3de368
%if ! %{use_prebuilt_docs} && ! 0%{?_without_docs}
3de368
BuildRequires:  asciidoc >= 8.4.1
3de368
BuildRequires:  xmlto
3de368
%endif
3de368
BuildRequires:  desktop-file-utils
3de368
BuildRequires:  emacs
3de368
BuildRequires:  expat-devel
3de368
BuildRequires:  gettext
3de368
BuildRequires:  gnupg2
3de368
BuildRequires:  %{libcurl_devel}
3de368
%if %{gnome_keyring}
3de368
BuildRequires:  libgnome-keyring-devel
3de368
%endif
3de368
BuildRequires:  pcre-devel
3de368
%if 0%{?fedora} && 0%{?fedora} >= 21
3de368
BuildRequires:  perl-generators
3de368
%endif
3de368
BuildRequires:  perl(Test)
3de368
BuildRequires:  openssl-devel
3de368
BuildRequires:  zlib-devel >= 1.2
3de368
%if %{bashcomp_pkgconfig}
3de368
BuildRequires:  pkgconfig(bash-completion)
3de368
%endif
3de368
%if %{use_systemd}
3de368
# For macros
3de368
BuildRequires:  systemd
3de368
%endif
3de368
%{?scl:Requires:%scl_runtime}
3de368
3de368
Requires:       %{?scl_prefix}git-core = %{version}-%{release}
3de368
Requires:       %{?scl_prefix}git-core-doc = %{version}-%{release}
3de368
Requires:       %{?scl_prefix}perl(Git)
3de368
Requires:       perl(Error)
3de368
%if ! %{defined perl_bootstrap}
3de368
Requires:       perl(Term::ReadKey)
3de368
%endif
3de368
Requires:       %{?scl_prefix}perl-Git = %{version}-%{release}
3de368
3de368
%if 0%{?fedora} >= 16 || 0%{?rhel} >= 7
3de368
Requires:       emacs-filesystem >= %{_emacs_version}
3de368
# These can be removed in Fedora 26
3de368
Obsoletes:      %{?scl_prefix}emacs-git <= 2.4.5
3de368
Obsoletes:      %{?scl_prefix}emacs-git-el <= 2.4.5
3de368
Provides:       %{?scl_prefix}emacs-git <= 2.4.5
3de368
Provides:       %{?scl_prefix}emacs-git-el <= 2.4.5
3de368
%endif
3de368
3de368
#Provides:       git-core = %{version}-%{release}
3de368
#%if 0%{?rhel} && 0%{?rhel} <= 5
3de368
#Obsoletes:      git-core <= 1.5.4.3
3de368
#%endif
3de368
3de368
# Obsolete git-arch
3de368
Obsoletes:      %{?scl_prefix}git-arch < %{version}-%{release}
3de368
3de368
%description
3de368
Git is a fast, scalable, distributed revision control system with an
3de368
unusually rich command set that provides both high-level operations
3de368
and full access to internals.
3de368
3de368
The git rpm installs common set of tools which are usually using with
3de368
small amount of dependencies. To install all git packages, including
3de368
tools for integrating with other SCMs, install the git-all meta-package.
3de368
3de368
%package all
3de368
Summary:        Meta-package to pull in all git tools
3de368
Group:          Development/Tools
3de368
%if %{noarch_sub}
3de368
BuildArch:      noarch
3de368
%endif
3de368
%{?scl:Requires:%scl_runtime}
3de368
Requires:       %{?scl_prefix}git = %{version}-%{release}
3de368
Requires:       %{?scl_prefix}git-cvs = %{version}-%{release}
3de368
Requires:       %{?scl_prefix}git-email = %{version}-%{release}
3de368
Requires:       %{?scl_prefix}git-gui = %{version}-%{release}
3de368
Requires:       %{?scl_prefix}git-svn = %{version}-%{release}
3de368
Requires:       %{?scl_prefix}git-p4 = %{version}-%{release}
3de368
Requires:       %{?scl_prefix}gitk = %{version}-%{release}
3de368
Requires:       %{?scl_prefix}perl-Git = %{version}-%{release}
3de368
%if ! %{defined perl_bootstrap}
3de368
Requires:       perl(Term::ReadKey)
3de368
%endif
3de368
%if 0%{?rhel} && 0%{?rhel} <= 6
3de368
Requires:       %{?scl_prefix}emacs-git = %{version}-%{release}
3de368
%endif
3de368
Obsoletes:      %{?scl_prefix}git <= 1.5.4.3
3de368
3de368
%description all
3de368
Git is a fast, scalable, distributed revision control system with an
3de368
unusually rich command set that provides both high-level operations
3de368
and full access to internals.
3de368
3de368
This is a dummy package which brings in all subpackages.
3de368
3de368
%package core
3de368
Summary:        Core package of git with minimal funcionality
3de368
Group:          Development/Tools
3de368
%{?scl:Requires:%scl_runtime}
3de368
Requires:       less
3de368
Requires:       openssh-clients
3de368
Requires:       rsync
3de368
Requires:       zlib >= 1.2
3de368
Requires:       %{?scl_prefix_httpd}libcurl
3de368
3de368
%description core
3de368
Git is a fast, scalable, distributed revision control system with an
3de368
unusually rich command set that provides both high-level operations
3de368
and full access to internals.
3de368
3de368
The git-core rpm installs really the core tools with minimal
3de368
dependencies. Install git package for common set of tools.
3de368
To install all git packages, including tools for integrating with
3de368
other SCMs, install the git-all meta-package.
3de368
3de368
%package core-doc
3de368
Summary:        Documentation files for git-core
3de368
Group:          Development/Tools
3de368
%{?scl:Requires:%scl_runtime}
3de368
Requires:       %{?scl_prefix}git-core = %{version}-%{release}
3de368
3de368
%description core-doc
3de368
Documentation files for git-core package including man pages.
3de368
3de368
%package daemon
3de368
Summary:        Git protocol daemon
3de368
Group:          Development/Tools
3de368
%{?scl:Requires:%scl_runtime}
3de368
Requires:       %{?scl_prefix}git = %{version}-%{release}
3de368
%if %{use_systemd}
3de368
Requires:       systemd
3de368
Requires(post): systemd
3de368
Requires(preun):  systemd
3de368
Requires(postun): systemd
3de368
%else
3de368
Requires:       xinetd
3de368
%endif
3de368
3de368
%description daemon
3de368
The git daemon for supporting git:// access to git repositories
3de368
3de368
%package -n %{?scl_prefix}gitweb
3de368
Summary:        Simple web interface to git repositories
3de368
Group:          Development/Tools
3de368
%{?scl:Requires:%scl_runtime}
3de368
%if %{noarch_sub}
3de368
BuildArch:      noarch
3de368
%endif
3de368
Requires:       %{?scl_prefix}git = %{version}-%{release}
3de368
3de368
%description -n %{?scl_prefix}gitweb
3de368
Simple web interface to track changes in git repositories
3de368
3de368
%package p4
3de368
Summary:        Git tools for working with Perforce depots
3de368
Group:          Development/Tools
3de368
%{?scl:Requires:%scl_runtime}
3de368
%if %{noarch_sub}
3de368
BuildArch:      noarch
3de368
%endif
3de368
BuildRequires:  python
3de368
Requires:       %{?scl_prefix}git = %{version}-%{release}
3de368
3de368
%description p4
3de368
%{summary}.
3de368
3de368
%package svn
3de368
Summary:        Git tools for importing Subversion repositories
3de368
Group:          Development/Tools
3de368
%{?scl:Requires:%scl_runtime}
3de368
Requires:       %{?scl_prefix}git = %{version}-%{release}, subversion
3de368
Requires:       perl(Digest::MD5)
3de368
%if ! %{defined perl_bootstrap}
3de368
Requires:       perl(Term::ReadKey)
3de368
%endif
3de368
3de368
%description svn
3de368
Git tools for importing Subversion repositories.
3de368
3de368
%package cvs
3de368
Summary:        Git tools for importing CVS repositories
3de368
Group:          Development/Tools
3de368
%{?scl:Requires:%scl_runtime}
3de368
%if %{noarch_sub}
3de368
BuildArch:      noarch
3de368
%endif
3de368
Requires:       %{?scl_prefix}git = %{version}-%{release}, cvs
3de368
Requires:       cvsps
3de368
Requires:       perl(DBD::SQLite)
3de368
Requires:       %{scl_prefix}perl(Git)
3de368
3de368
%description cvs
3de368
Git tools for importing CVS repositories.
3de368
3de368
%package email
3de368
Summary:        Git tools for sending email
3de368
Group:          Development/Tools
3de368
%{?scl:Requires:%scl_runtime}
3de368
%if %{noarch_sub}
3de368
BuildArch:      noarch
3de368
%endif
3de368
Requires:       %{?scl_prefix}git = %{version}-%{release}, %{?scl_prefix}perl-Git = %{version}-%{release}
3de368
Requires:       perl(Authen::SASL)
3de368
Requires:       perl(Net::SMTP::SSL)
3de368
Requires:       %{scl_prefix}perl(Git)
3de368
3de368
%description email
3de368
Git tools for sending email.
3de368
3de368
%package gui
3de368
Summary:        Git GUI tool
3de368
Group:          Development/Tools
3de368
%{?scl:Requires:%scl_runtime}
3de368
%if %{noarch_sub}
3de368
BuildArch:      noarch
3de368
%endif
3de368
Requires:       %{?scl_prefix}git = %{version}-%{release}, tk >= 8.4
3de368
Requires:       %{?scl_prefix}gitk = %{version}-%{release}
3de368
3de368
%description gui
3de368
Git GUI tool.
3de368
3de368
%package -n %{?scl_prefix}gitk
3de368
Summary:        Git revision tree visualiser
3de368
Group:          Development/Tools
3de368
%{?scl:Requires:%scl_runtime}
3de368
%if %{noarch_sub}
3de368
BuildArch:      noarch
3de368
%endif
3de368
Requires:       %{?scl_prefix}git = %{version}-%{release}, tk >= 8.4
3de368
3de368
%description -n %{?scl_prefix}gitk
3de368
Git revision tree visualiser.
3de368
3de368
%package -n %{?scl_prefix}perl-Git
3de368
Summary:        Perl interface to Git
3de368
Group:          Development/Libraries
3de368
%{?scl:Requires:%scl_runtime}
3de368
%if %{noarch_sub}
3de368
BuildArch:      noarch
3de368
%endif
3de368
Requires:       %{?scl_prefix}git = %{version}-%{release}
3de368
BuildRequires:  perl(Error), perl(ExtUtils::MakeMaker)
3de368
Requires:       perl(Error)
3de368
Requires:       perl(:MODULE_COMPAT_%(eval "`%{__perl} -V:version`"; echo $version))
3de368
%{?scl:
3de368
Provides:       %{?scl_prefix}perl(Git) = 0.01
3de368
Provides:       %{?scl_prefix}perl(Git::Error::Command)
3de368
Provides:       %{?scl_prefix}perl(Git::I18N)
3de368
Provides:       %{?scl_prefix}perl(Git::IndexInfo)
3de368
Provides:       %{?scl_prefix}perl(Git::activestate_pipe)
3de368
Requires:       %{?scl_prefix}perl(Git)
3de368
}
3de368
3de368
%description -n %{?scl_prefix}perl-Git
3de368
Perl interface to Git.
3de368
3de368
%package -n %{?scl_prefix}perl-Git-SVN
3de368
Summary:        Perl interface to Git::SVN
3de368
Group:          Development/Libraries
3de368
%{?scl:Requires:%scl_runtime}
3de368
%if %{noarch_sub}
3de368
BuildArch:      noarch
3de368
%endif
3de368
Requires:       %{?scl_prefix}git = %{version}-%{release}
3de368
Requires:       perl(:MODULE_COMPAT_%(eval "`%{__perl} -V:version`"; echo $version))
3de368
%{?scl:
3de368
Provides:       %{?scl_prefix}perl(Git::SVN)
3de368
Provides:       %{?scl_prefix}perl(Git::SVN::Editor)
3de368
Provides:       %{?scl_prefix}perl(Git::SVN::Fetcher)
3de368
Provides:       %{?scl_prefix}perl(Git::SVN::GlobSpec)
3de368
Provides:       %{?scl_prefix}perl(Git::SVN::Log)
3de368
Provides:       %{?scl_prefix}perl(Git::SVN::Memoize::YAML)
3de368
Provides:       %{?scl_prefix}perl(Git::SVN::Migration)
3de368
Provides:       %{?scl_prefix}perl(Git::SVN::Prompt)
3de368
Provides:       %{?scl_prefix}perl(Git::SVN::Ra)
3de368
Provides:       %{?scl_prefix}perl(Git::SVN::Utils)
3de368
Requires:       %{?scl_prefix}perl(Git)
3de368
Requires:       %{?scl_prefix}perl(Git::SVN::Utils)
3de368
} # scl
3de368
3de368
%description -n %{?scl_prefix}perl-Git-SVN
3de368
Perl interface to Git.
3de368
3de368
%if 0%{?rhel} && 0%{?rhel} <= 6
3de368
%package -n %{?scl_prefix}emacs-git
3de368
Summary:        Git version control system support for Emacs
3de368
Group:          Applications/Editors
3de368
%{?scl:Requires:%scl_runtime}
3de368
Requires:       %{?scl_prefix}git = %{version}-%{release}
3de368
%if %{noarch_sub}
3de368
BuildArch:      noarch
3de368
Requires:       emacs(bin) >= %{_emacs_version}
3de368
%else
3de368
Requires:       emacs-common
3de368
%endif
3de368
3de368
%description -n %{?scl_prefix}emacs-git
3de368
%{summary}.
3de368
3de368
%package -n %{?scl_prefix}emacs-git-el
3de368
Summary:        Elisp source files for git version control system support for Emacs
3de368
Group:          Applications/Editors
3de368
%{?scl:Requires:%scl_runtime}
3de368
%if %{noarch_sub}
3de368
BuildArch:      noarch
3de368
%endif
3de368
Requires:       %{?scl_prefix}emacs-git = %{version}-%{release}
3de368
3de368
%description -n %{?scl_prefix}emacs-git-el
3de368
%{summary}.
3de368
%endif
3de368
3de368
%prep
3de368
# Verify GPG signatures
3de368
gpghome="$(mktemp -qd)" # Ensure we don't use any existing gpg keyrings
3de368
key="%{SOURCE9}"
3de368
# Ignore noisy output from GnuPG 2.0, used on EL <= 7
3de368
# https://bugs.gnupg.org/gnupg/issue1555
3de368
gpg2 --dearmor --quiet --batch --yes $key >/dev/null
3de368
for src in %{SOURCE0} %{SOURCE1} %{SOURCE2}; do
3de368
    # Upstream signs the uncompressed tarballs
3de368
    tar=${src/%.xz/}
3de368
    xz -dc $src > $tar
3de368
    gpgv2 --homedir "$gpghome" --quiet --keyring $key.gpg $tar.sign $tar
3de368
    rm -f $tar
3de368
done
3de368
rm -rf "$gpghome" # Cleanup tmp gpg home dir
3de368
3de368
%setup -q -n %{pkg_name}-%{version}
3de368
%patch0 -p1
3de368
%patch1 -p1
3de368
%if %{emacs_old}
3de368
%patch3 -p1
3de368
%endif
3de368
%patch4 -p1
3de368
%patch5 -p1
3de368
%patch6 -p1
3de368
3de368
%if %{use_prebuilt_docs}
3de368
mkdir -p prebuilt_docs/{html,man}
3de368
xz -dc %{SOURCE1} | tar xf - -C prebuilt_docs/html
3de368
xz -dc %{SOURCE2} | tar xf - -C prebuilt_docs/man
3de368
# Remove non-html files
3de368
find prebuilt_docs/html -type f ! -name '*.html' | xargs rm
3de368
find prebuilt_docs/html -type d | xargs rmdir --ignore-fail-on-non-empty
3de368
%endif
3de368
3de368
# Use these same options for every invocation of 'make'.
3de368
# Otherwise it will rebuild in %%install due to flags changes.
3de368
cat << \EOF > config.mak
3de368
V = 1
3de368
CFLAGS = %{optflags}
3de368
LDFLAGS = %{__global_ldflags}
3de368
BLK_SHA1 = 1
3de368
NEEDS_CRYPTO_WITH_SSL = 1
3de368
USE_LIBPCRE = 1
3de368
ETC_GITCONFIG = %{_sysconfdir}/gitconfig
3de368
DESTDIR = %{buildroot}
3de368
INSTALL = install -p
3de368
GITWEB_PROJECTROOT = %{_localstatedir}/lib/git
3de368
GNU_ROFF = 1
3de368
htmldir = %{?_pkgdocdir}%{!?_pkgdocdir:%{_docdir}/%{name}-%{version}}
3de368
prefix = %{_prefix}
3de368
gitwebdir = %{_localstatedir}/www/git
3de368
EOF
3de368
3de368
%if "%{gitcoredir}" == "%{_bindir}"
3de368
echo gitexecdir = %{_bindir} >> config.mak
3de368
%endif
3de368
3de368
%if %{docbook_suppress_sp}
3de368
# This is needed for 1.69.1-1.71.0
3de368
echo DOCBOOK_SUPPRESS_SP = 1 >> config.mak
3de368
%endif
3de368
3de368
# Filter bogus perl requires
3de368
# packed-refs comes from a comment in contrib/hooks/update-paranoid
3de368
# YAML::Any is optional and not available on el5
3de368
%if %{use_new_rpm_filters}
3de368
%{?perl_default_filter}
3de368
%global __requires_exclude %{?__requires_exclude:%__requires_exclude|}perl\\(packed-refs\\)
3de368
# Filter bogus perl provides and requires when build SCLs because %%scl_prefix
3de368
# is requied in that case, e.g.: rh-git29-perl(Git)
3de368
%{?scl:
3de368
  %global __provides_exclude %{?__provides_exclude:%__provides_exclude|}^perl\\(
3de368
  %global __requires_exclude %{?__requires_exclude:%__requires_exclude|}^perl\\(Git
3de368
}
3de368
%if ! %{defined perl_bootstrap}
3de368
%global __requires_exclude %{?__requires_exclude:%__requires_exclude|}perl\\(Term::ReadKey\\)
3de368
%endif
3de368
%else # ! use_new_rpm_filters
3de368
3de368
%{?filter_setup:
3de368
%{?filter_yaml_any:%filter_from_provides /perl(YAML::Any)/d}
3de368
%{?scl:%filter_from_provides /^perl(Git.*)/d}
3de368
%{?scl:%filter_from_requires /^perl(Git.*)/d}
3de368
%filter_from_requires /perl(packed-refs)/d
3de368
%filter_setup
3de368
}
3de368
3de368
%endif
3de368
3de368
%build
3de368
%{?scl:scl enable %{scl_httpd} - << "EOF"}
3de368
set -ex
3de368
export CPATH="%{cpath_dir}:${CPATH}"
3de368
make %{?_smp_mflags} all
3de368
%if ! %{use_prebuilt_docs} && ! 0%{?_without_docs}
3de368
make %{?_smp_mflags} doc
3de368
%endif
3de368
3de368
make -C contrib/emacs
3de368
3de368
%if %{gnome_keyring}
3de368
make -C contrib/credential/gnome-keyring/
3de368
%endif
3de368
make -C contrib/credential/netrc/
3de368
3de368
make -C contrib/subtree/
3de368
3de368
# Remove shebang from bash-completion script
3de368
sed -i '/^#!bash/,+1 d' contrib/completion/git-completion.bash
3de368
%{?scl:EOF}
3de368
3de368
3de368
%install
3de368
rm -rf %{buildroot}
3de368
3de368
%{?scl:scl enable %{scl_httpd} - << "EOF"}
3de368
set -ex
3de368
export CPATH="%{cpath_dir}:${CPATH}"
3de368
make %{?_smp_mflags} INSTALLDIRS=vendor install
3de368
%if ! %{use_prebuilt_docs} && ! 0%{?_without_docs}
3de368
make %{?_smp_mflags} INSTALLDIRS=vendor install-doc
3de368
%else
3de368
cp -a prebuilt_docs/man/* %{buildroot}%{_mandir}
3de368
cp -a prebuilt_docs/html/* Documentation/
3de368
%endif
3de368
%{?scl:EOF}
3de368
3de368
3de368
%if %{emacs_old}
3de368
%global _emacs_sitelispdir %{_datadir}/emacs/site-lisp
3de368
%global _emacs_sitestartdir %{_emacs_sitelispdir}/site-start.d
3de368
%else
3de368
# scl is not relevant for rhel <= 5
3de368
%{expand:%global _emacs_sitelispdir %{_scl_root}%{?_emacs_sitelispdir}}
3de368
%{expand:%global _emacs_sitestartdir %{_scl_root}%{?_emacs_sitestartdir}}
3de368
%endif
3de368
%global elispdir %{_emacs_sitelispdir}/git
3de368
3de368
make -C contrib/emacs install \
3de368
    emacsdir=%{buildroot}%{elispdir}
3de368
for elc in %{buildroot}%{elispdir}/*.elc ; do
3de368
    install -pm 644 contrib/emacs/$(basename $elc .elc).el \
3de368
    %{buildroot}%{elispdir}
3de368
done
3de368
install -Dpm 644 %{SOURCE10} \
3de368
    %{buildroot}%{_emacs_sitestartdir}/git-init.el
3de368
3de368
%if %{gnome_keyring}
3de368
install -pm 755 contrib/credential/gnome-keyring/git-credential-gnome-keyring \
3de368
    %{buildroot}%{gitcoredir}
3de368
# Remove built binary files, otherwise they will be installed in doc
3de368
make -C contrib/credential/gnome-keyring/ clean
3de368
%endif
3de368
install -pm 755 contrib/credential/netrc/git-credential-netrc \
3de368
    %{buildroot}%{gitcoredir}
3de368
3de368
make -C contrib/subtree install
3de368
%if ! %{use_prebuilt_docs}
3de368
make -C contrib/subtree install-doc
3de368
%endif
3de368
# it's ugly hack, but this file don't need to be copied to this directory
3de368
# it's already part of git-core-doc and it's alone here
3de368
rm -f %{buildroot}%{?_pkgdocdir}%{!?_pkgdocdir:%{_docdir}/%{name}-%{version}}/git-subtree.html
3de368
3de368
mkdir -p %{buildroot}%{httpdconfdir}
3de368
mkdir -p %{buildroot}%{_sysconfdir}
3de368
install -pm 0644 %{SOURCE12} %{buildroot}%{httpdconfdir}/%{?scl_prefix}git.conf
3de368
sed "s|@PROJECTROOT@|%{_localstatedir}/lib/git|g" \
3de368
    %{SOURCE14} > %{buildroot}%{_sysconfdir}/gitweb.conf
3de368
3de368
find %{buildroot} -type f -name .packlist -exec rm -f {} ';'
3de368
find %{buildroot} -type f -name '*.bs' -empty -exec rm -f {} ';'
3de368
find %{buildroot} -type f -name perllocal.pod -exec rm -f {} ';'
3de368
3de368
#FIXME:
3de368
# Remove remote-helper python libraries and scripts, these are not ready for
3de368
# use yet
3de368
rm -rf %{buildroot}%{_scl_root}%{python_sitelib} %{buildroot}%{gitcoredir}/git-remote-testgit
3de368
3de368
# git-archimport is not supported
3de368
find %{buildroot} Documentation -type f -name 'git-archimport*' -exec rm -f {} ';'
3de368
3de368
#TODO: check this!!!
3de368
exclude_re="archimport|email|git-citool|git-cvs|git-daemon|git-gui|git-remote-bzr|git-remote-hg|gitk|p4|svn"
3de368
(find %{buildroot}{%{_bindir},%{_libexecdir}} -type f | grep -vE "$exclude_re" | sed -e s@^%{buildroot}@@) > bin-man-doc-files
3de368
(find %{buildroot}{%{_bindir},%{_libexecdir}} -mindepth 1 -type d | grep -vE "$exclude_re" | sed -e 's@^%{buildroot}@%dir @') >> bin-man-doc-files
3de368
(find %{buildroot}%{_scl_root}%{perl_vendorlib} -type f | sed -e s@^%{buildroot}@@) > perl-git-files
3de368
(find %{buildroot}%{_scl_root}%{perl_vendorlib} -mindepth 1 -type d | sed -e 's@^%{buildroot}@%dir @') >> perl-git-files
3de368
# Split out Git::SVN files
3de368
grep Git/SVN perl-git-files > perl-git-svn-files
3de368
sed -i "/Git\/SVN/ d" perl-git-files
3de368
%if %{!?_without_docs:1}0
3de368
(find %{buildroot}%{_mandir} -type f | grep -vE "$exclude_re|Git" | sed -e s@^%{buildroot}@@ -e 's/$/*/' ) >> bin-man-doc-files
3de368
%else
3de368
rm -rf %{buildroot}%{_mandir}
3de368
%endif
3de368
3de368
mkdir -p %{buildroot}%{_localstatedir}/lib/git
3de368
%if %{use_systemd}
3de368
mkdir -p %{buildroot}%{_unitdir}
3de368
cp -a %{SOURCE15} %{buildroot}%{_unitdir}/%{scl_prefix}git@.service
3de368
cp -a %{SOURCE16} %{buildroot}%{_unitdir}/%{scl_prefix}git.socket
3de368
%else
3de368
mkdir -p %{buildroot}%{_root_sysconfdir}/xinetd.d
3de368
# On EL <= 5, xinetd does not enable IPv6 by default
3de368
enable_ipv6="        # xinetd does not enable IPv6 by default
3de368
        flags           = IPv6"
3de368
perl -p \
3de368
    -e "s|\@GITCOREDIR\@|%{gitcoredir}|g;" \
3de368
    -e "s|\@BASE_PATH\@|%{_localstatedir}/lib/git|g;" \
3de368
%if %{enable_ipv6}
3de368
    -e "s|^}|$enable_ipv6\n$&|;" \
3de368
%endif
3de368
    %{SOURCE11} > %{buildroot}%{_root_sysconfdir}/xinetd.d/%{scl_prefix}git
3de368
%endif
3de368
3de368
# Setup bash completion
3de368
install -Dpm 644 contrib/completion/git-completion.bash %{buildroot}%{bashcompdir}/git
3de368
ln -s git %{buildroot}%{bashcompdir}/gitk
3de368
3de368
# Install tcsh completion
3de368
mkdir -p %{buildroot}%{_datadir}/git-core/contrib/completion
3de368
install -pm 644 contrib/completion/git-completion.tcsh \
3de368
    %{buildroot}%{_datadir}/git-core/contrib/completion/
3de368
3de368
# Move contrib/hooks out of %%docdir and make them executable
3de368
mkdir -p %{buildroot}%{_datadir}/git-core/contrib
3de368
mv contrib/hooks %{buildroot}%{_datadir}/git-core/contrib
3de368
chmod +x %{buildroot}%{_datadir}/git-core/contrib/hooks/*
3de368
pushd contrib > /dev/null
3de368
ln -s ../../../git-core/contrib/hooks
3de368
popd > /dev/null
3de368
3de368
# Install git-prompt.sh
3de368
mkdir -p %{buildroot}%{_datadir}/git-core/contrib/completion
3de368
install -pm 644 contrib/completion/git-prompt.sh \
3de368
    %{buildroot}%{_datadir}/git-core/contrib/completion/
3de368
3de368
# install git-gui .desktop file
3de368
cp %{SOURCE13} %{?scl_prefix}git-gui.desktop
3de368
desktop-file-install \
3de368
%if %{desktop_vendor_tag}
3de368
  --vendor fedora \
3de368
%endif
3de368
  --delete-original \
3de368
  --dir=%{buildroot}%{appdesktopdir} %{?scl_prefix}git-gui.desktop
3de368
3de368
# find translations
3de368
%find_lang %{pkg_name} %{pkg_name}.lang
3de368
cat %{pkg_name}.lang >> bin-man-doc-files
3de368
3de368
# quiet some rpmlint complaints
3de368
chmod -R g-w %{buildroot}
3de368
find %{buildroot} -name git-mergetool--lib | xargs chmod a-x
3de368
# rm -f {Documentation/technical,contrib/emacs,contrib/credential/gnome-keyring}/.gitignore
3de368
# These files probably are not needed
3de368
find . -name .gitignore -delete
3de368
chmod a-x Documentation/technical/api-index.sh
3de368
find contrib -type f | xargs chmod -x
3de368
3de368
# Split core files
3de368
not_core_re="git-(add--interactive|am|credential-netrc|difftool|instaweb|relink|request-pull|send-mail|submodule)|gitweb|prepare-commit-msg|pre-rebase"
3de368
grep -vE "$not_core_re|\/man\/" bin-man-doc-files > bin-files-core
3de368
grep -vE "$not_core_re" bin-man-doc-files | grep "\/man\/" > man-doc-files-core
3de368
grep -E "$not_core_re" bin-man-doc-files > bin-man-doc-git-files
3de368
3de368
%check
3de368
# check source files with hardcoded content - it's more for reminder
3de368
# when new collection will be added in future
3de368
%if 0%{?scl:1}
3de368
  # scl enable is required to use
3de368
  grep -q "^Exec=/usr/bin/scl enable %{scl}" %{buildroot}%{appdesktopdir}/*git-gui.desktop
3de368
  %if 0%{?use_systemd}
3de368
    grep -q "^ExecStart=-/usr/bin/scl enable %{scl}" %{buildroot}%{_unitdir}/%{scl_prefix}git@.service
3de368
  %endif
3de368
3de368
  # and should be used correct paths - check at least that rh-gitXX is in path
3de368
  grep -q "^Icon.*%{scl}" %{buildroot}%{appdesktopdir}/*git-gui.desktop
3de368
  grep "%{_localstatedir}/www/git" %{buildroot}%{httpdconfdir}/%{?scl_prefix}git.conf
3de368
  %if 0%{?use_systemd}
3de368
    grep -qe "-- .*%{scl}" %{buildroot}%{_unitdir}/%{scl_prefix}git@.service
3de368
  %endif
3de368
3de368
  # check Name/GenericName that contains rh-GitXX (with current XX, e.g. 29)
3de368
  grep -qi "^Name=%{scl}" %{buildroot}%{appdesktopdir}/*git-gui.desktop
3de368
  grep -qi "^GenericName=%{scl}" %{buildroot}%{appdesktopdir}/*git-gui.desktop
3de368
%endif
3de368
3de368
%clean
3de368
rm -rf %{buildroot}
3de368
3de368
%if %{use_systemd}
3de368
%post daemon
3de368
%systemd_post %{scl_prefix}git@.service
3de368
3de368
%preun daemon
3de368
%systemd_preun %{scl_prefix}git@.service
3de368
3de368
%postun daemon
3de368
%systemd_postun_with_restart %{scl_prefix}git@.service
3de368
%endif
3de368
3de368
%files -f bin-man-doc-git-files
3de368
%defattr(-,root,root)
3de368
%if 0%{?fedora} >= 16 || 0%{?rhel} >= 7
3de368
%{elispdir}
3de368
%{_emacs_sitestartdir}/git-init.el
3de368
%endif
3de368
%{_datadir}/git-core/contrib/hooks/update-paranoid
3de368
%{_datadir}/git-core/contrib/hooks/setgitperms.perl
3de368
#%{_datadir}/git-core/*
3de368
#%doc Documentation/*.txt
3de368
#%{!?_without_docs: %doc Documentation/*.html}
3de368
#%{!?_without_docs: %doc Documentation/howto/* Documentation/technical/*}
3de368
3de368
%files core -f bin-files-core
3de368
%defattr(-,root,root)
3de368
%{!?_licensedir:%global license %doc}
3de368
%license COPYING
3de368
# exlude is best way here because of troubles with symlinks inside git-core/
3de368
%exclude %{_datadir}/git-core/contrib/hooks/update-paranoid
3de368
%exclude %{_datadir}/git-core/contrib/hooks/setgitperms.perl
3de368
%{bashcomproot}
3de368
%{_datadir}/git-core/
3de368
3de368
%files core-doc -f man-doc-files-core
3de368
%defattr(-,root,root)
3de368
%doc README.md Documentation/*.txt Documentation/RelNotes contrib/
3de368
%{!?_without_docs: %doc Documentation/*.html Documentation/docbook-xsl.css}
3de368
%{!?_without_docs: %doc Documentation/howto Documentation/technical}
3de368
%if ! %{use_prebuilt_docs}
3de368
%{!?_without_docs: %doc contrib/subtree/git-subtree.html}
3de368
%endif
3de368
3de368
3de368
%files p4
3de368
%defattr(-,root,root)
3de368
%{gitcoredir}/*p4*
3de368
%{gitcoredir}/mergetools/p4merge
3de368
%doc Documentation/*p4*.txt
3de368
%{!?_without_docs: %{_mandir}/man1/*p4*.1*}
3de368
%{!?_without_docs: %doc Documentation/*p4*.html }
3de368
3de368
%files svn
3de368
%defattr(-,root,root)
3de368
%{gitcoredir}/*svn*
3de368
%doc Documentation/*svn*.txt
3de368
%{!?_without_docs: %{_mandir}/man1/*svn*.1*}
3de368
%{!?_without_docs: %doc Documentation/*svn*.html }
3de368
3de368
%files cvs
3de368
%defattr(-,root,root)
3de368
%doc Documentation/*git-cvs*.txt
3de368
%if "%{gitcoredir}" != "%{_bindir}"
3de368
%{_bindir}/git-cvsserver
3de368
%endif
3de368
%{gitcoredir}/*cvs*
3de368
%{!?_without_docs: %{_mandir}/man1/*cvs*.1*}
3de368
%{!?_without_docs: %doc Documentation/*git-cvs*.html }
3de368
3de368
%files email
3de368
%defattr(-,root,root)
3de368
%doc Documentation/*email*.txt
3de368
%{gitcoredir}/*email*
3de368
%{!?_without_docs: %{_mandir}/man1/*email*.1*}
3de368
%{!?_without_docs: %doc Documentation/*email*.html }
3de368
3de368
%files gui
3de368
%defattr(-,root,root)
3de368
%{gitcoredir}/git-gui*
3de368
%{gitcoredir}/git-citool
3de368
%{appdesktopdir}/*git-gui.desktop
3de368
%{_datadir}/git-gui/
3de368
%{!?_without_docs: %{_mandir}/man1/git-gui.1*}
3de368
%{!?_without_docs: %doc Documentation/git-gui.html}
3de368
%{!?_without_docs: %{_mandir}/man1/git-citool.1*}
3de368
%{!?_without_docs: %doc Documentation/git-citool.html}
3de368
3de368
%files -n %{?scl_prefix}gitk
3de368
%defattr(-,root,root)
3de368
%doc Documentation/*gitk*.txt
3de368
%{_bindir}/*gitk*
3de368
%{_datadir}/gitk
3de368
%{!?_without_docs: %{_mandir}/man1/*gitk*.1*}
3de368
%{!?_without_docs: %doc Documentation/*gitk*.html }
3de368
3de368
%files -n %{?scl_prefix}perl-Git -f perl-git-files
3de368
%defattr(-,root,root)
3de368
%exclude %{_mandir}/man3/*Git*SVN*.3pm*
3de368
%{!?_without_docs: %{_mandir}/man3/*Git*.3pm*}
3de368
3de368
%files -n %{?scl_prefix}perl-Git-SVN -f perl-git-svn-files
3de368
%defattr(-,root,root)
3de368
%{!?_without_docs: %{_mandir}/man3/*Git*SVN*.3pm*}
3de368
3de368
%if 0%{?rhel} && 0%{?rhel} <= 6
3de368
%files -n %{?scl_prefix}emacs-git
3de368
%defattr(-,root,root)
3de368
%doc contrib/emacs/README
3de368
%dir %{elispdir}
3de368
%{elispdir}/*.elc
3de368
%{_emacs_sitestartdir}/git-init.el
3de368
3de368
%files -n %{?scl_prefix}emacs-git-el
3de368
%defattr(-,root,root)
3de368
%{elispdir}/*.el
3de368
%endif
3de368
3de368
%files daemon
3de368
%defattr(-,root,root)
3de368
%doc Documentation/*daemon*.txt
3de368
%if %{use_systemd}
3de368
%{_unitdir}/%{scl_prefix}git.socket
3de368
%{_unitdir}/%{scl_prefix}git@.service
3de368
%else
3de368
%config(noreplace)%{_root_sysconfdir}/xinetd.d/%{scl_prefix}git
3de368
%endif
3de368
%{gitcoredir}/git-daemon
3de368
%{_localstatedir}/lib/git
3de368
%{!?_without_docs: %{_mandir}/man1/*daemon*.1*}
3de368
%{!?_without_docs: %doc Documentation/*daemon*.html}
3de368
3de368
%files -n %{?scl_prefix}gitweb
3de368
%defattr(-,root,root)
3de368
%doc gitweb/INSTALL gitweb/README
3de368
%config(noreplace)%{_sysconfdir}/gitweb.conf
3de368
%config(noreplace)%{httpdconfdir}/%{?scl_prefix}git.conf
3de368
%{_localstatedir}/www/git/
3de368
3de368
3de368
%files all
3de368
# No files for you!
3de368
3de368
%changelog
3de368
* Fri Oct 14 2016 Petr Stodulka <pstodulk@redhat.com> - 2.9.3-2
3de368
- fix infinite loop of "git ls-tree" on broken symlink
3de368
  Resolves: #1204191
3de368
3de368
* Mon Oct 10 2016 Petr Stodulka <pstodulk@redhat.com> - 2.9.3-1
3de368
- Rebase to 2.9.3
3de368
- add control of GSSAPI credential delegation to enable HTTP(S)-SSO
3de368
  authentication
3de368
  Resolves: #1359176 #1382708
3de368
3de368
* Mon Aug 08 2016 Petr Stodulka <pstodulk@redhat.com> - 2.9.2-5
3de368
- fix service file to use rh-git29 instead of native git
3de368
- fix desktop file - changed names & paths inside the file,
3de368
    use scl rh-git29 instead of native git, change filename
3de368
    and path of the file to system directory instead of scl
3de368
- *git-daemon: xinetd.d: use system directory and added prefix to the filename
3de368
- *git-gitweb: store git.conf to directory of httpd24 sclm add scl prefix
3de368
    to the filename and correct paths inside the file to correct rh-git29
3de368
    www directory
3de368
- fix doubled path for emacs-sitelisp files
3de368
- build and link files with httpd24-libcurl
3de368
  Resolves: #1345897
3de368
3de368
* Fri Aug 05 2016 Petr Stodulka <pstodulk@redhat.com> - 2.9.2-4
3de368
- fix deprecated "vendor" tag for RHEL-6 (it was used for older
3de368
  RHEL systems)
3de368
3de368
* Fri Jul 22 2016 Petr Stodulka <pstodulk@redhat.com> - 2.9.2-3
3de368
- remove requires on perl(packed-refs) for RHEL-6 builds instead
3de368
  of provides
3de368
3de368
* Wed Jul 20 2016 Petr Stodulka <pstodulk@redhat.com> - 2.9.2-2
3de368
- Fix Requires of %{scl_prefix}git-gui for %{scl_prefix}gitk
3de368
3de368
* Wed Jul 20 2016 Petr Stodulka <pstodulk@redhat.com> - 2.9.2-1
3de368
- Initial commit with git v2.9.2
3de368
- Fixes troubles with infinite loop in "git ls-tree" for broken symlink
3de368
  under refs/heads
3de368
- Rename git.service to git@.service to make it usable
3de368
- Resolves: #1204191 #1251460
3de368