File apache-trafficserver.spec of Package apache-trafficserver

#
# spec file for package apache-trafficserver
#
# Copyright (c) 2019 SUSE LINUX GmbH, Nuernberg, Germany.
#
# 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/
#

%bcond_with docs

%ifarch aarch64 x86_64
%bcond_without lua
%else
%bcond_with lua
%endif

Name:           apache-trafficserver
Version:        9.2.11
Release:        0
Summary:        A fast, scalable and extensible HTTP/1.1 compliant caching proxy server
License:        Apache-2.0
Group:          Productivity/Networking/Web/Proxy
URL:            https://trafficserver.apache.org
Source:         https://www.apache.org/dist/trafficserver/trafficserver-%{version}.tar.bz2
Source1:        https://www.apache.org/dist/trafficserver/trafficserver-%{version}.tar.bz2.asc
Source2:        apache-trafficserver.keyring
Source10:       apache-trafficserver-tmpfiles.conf
Source11:       apache-trafficserver.service.override
Source100:      %{name}-rpmlintrc
Patch0:         apache-trafficserver-perl-vendor-install.patch
Patch1:         apache-trafficserver8-remove-bundled-yamlcpp.patch
Patch2:         apache-trafficserver9-docs-sys-plantuml.patch
Patch3:         apache-trafficserver8-fix-build-machine.patch
Patch4:         apache-trafficserver9-docs-split-manpages.patch
Patch5:         apache-trafficserver9-docs-remove-git.patch
Patch6:         https://github.com/apache/trafficserver/pull/8586.patch#/apache-trafficserver9-ignore-cycle-check-on-tr-conn.patch
Patch7:         apache-trafficserver-harden.service.patch
Patch8:         apache-trafficserver-harden-245.service.patch
Patch9:         apache-trafficserver9-localhost-is-always-self.patch

%if 0%{?sle_version} && 0%{?sle_version} < 150700
BuildRequires:  gcc14-c++
%else
BuildRequires:  gcc-c++ >= 8.1
%endif

%if 0%{?fedora} || 0%{?rhel}
BuildRequires:  python3
%else
BuildRequires:  python3-base
%endif

%if %{with docs}
BuildRequires:  doxygen
BuildRequires:  graphviz
BuildRequires:  plantuml
BuildRequires:  java-headless
BuildRequires:  noto-sans-fonts
BuildRequires:  python3-Sphinx >= 2.0.1
BuildRequires:  python3-sphinxcontrib-plantuml
%endif

BuildRequires:  autoconf
BuildRequires:  automake
BuildRequires:  bison
BuildRequires:  flex
BuildRequires:  libtool
BuildRequires:  make
BuildRequires:  memory-constraints
BuildRequires:  pkgconfig
BuildRequires:  pkgconfig(hwloc)
BuildRequires:  pkgconfig(Magick++)
BuildRequires:  pkgconfig(libbrotlienc)
BuildRequires:  pkgconfig(libcap)
BuildRequires:  pkgconfig(libcurl) >= 7.19
BuildRequires:  pkgconfig(libcrypto) >= 1.0.2
BuildRequires:  pkgconfig(libunwind)
BuildRequires:  pkgconfig(ncursesw)
BuildRequires:  pkgconfig(libpcre)
BuildRequires:  perl-ExtUtils-MakeMaker
BuildRequires:  pkgconfig(liblzma)
BuildRequires:  pkgconfig(yaml-cpp)
BuildRequires:  pkgconfig(libmaxminddb)
BuildRequires:  pkgconfig(cjose)
BuildRequires:  pkgconfig(jansson)
%{?systemd_requires}

%if %{with lua}
BuildRequires:  pkgconfig(luajit) >= 2.0.4
%endif

Recommends:     %{name}-plugins

# No 32-bit.
ExcludeArch:    %ix86 s390 %arm %mips32
# No big endian
ExcludeArch:    ppc64 s390x

%description
Apache Traffic Server software is a fast, scalable and extensible HTTP/1.1 compliant caching proxy server.
Formerly a commercial product, Yahoo! donated it to the Apache Foundation, and it is now an Apache TLP.

%package -n perl-Apache-TS
Summary:        A collection of Perl interfaces to manage Apache Traffic Server
Group:          Development/Libraries/Perl
Requires:       perl-URI
Requires:       perl-base = %{perl_version}
%if 0%{?suse_version}
%{perl_requires}
%endif

%description -n perl-Apache-TS
A collection of Perl interfaces to manage Apache Traffic Server and push contents.

%if %{with docs}
%package docs
Summary:        Documentations and man pages for %{name}
Group:          Productivity/Networking/Web/Proxy
BuildArch:      noarch

%description docs
Apache Traffic Server software is a fast, scalable and extensible HTTP/1.1 compliant caching proxy server.
This package contains man pages from the package. They're separated as the namings are prone to collisions.
%endif

%package libs9
Summary:        Library files for %{name}
Group:          Productivity/Networking/Web/Proxy

%description libs9
Apache Traffic Server software is a fast, scalable and extensible HTTP/1.1 compliant caching proxy server.
This package contains libraries needed for running and building plugins with it.

%package devel
Summary:        Development files for %{name}
Group:          Development/Libraries/C and C++
Requires:       %{name}-libs9 = %{version}
Requires:       hwloc-devel
Requires:       libbrotli-devel
Requires:       libcap-devel
Requires:       libopenssl-devel
Requires:       pcre-devel
Requires:       tcl-devel
Requires:       yaml-cpp-devel
Requires:       zlib-devel

%description devel
Apache Traffic Server software is a fast, scalable and extensible HTTP/1.1 compliant caching proxy server.
This package contains headers, libtool library files and pkgconfig files needed for building programs and plugins with it.

%prep
%autosetup -n trafficserver-%{version} -p1
rm -rf lib/yamlcpp

# ATS utilities embeds compilation timestamp, causing unnecessary rebuild. This will fix them to source time.
date_string=$(date -r %{SOURCE0} -u '+"%%Y-%%m-%%d"')
time_string=$(date -r %{SOURCE0} -u '+"%%T"')
for file in $(grep -rl -e __DATE__ -e __TIME__ .); do
  sed -i -e "s#__DATE__#$date_string#g" -e "s#__TIME__#$time_string#g" $file
done
autoreconf -fiv

%build
%if 0%{?sle_version} && 0%{?sle_version} < 150700
export CXX=g++-14
export CC=gcc-14
%endif
%configure \
  --enable-layout=Arch \
  --sysconfdir=%{_sysconfdir}/%{name} \
  --libexecdir=%{_libexecdir}/%{name} \
  --with-yaml-cpp=/usr \
  --with-jansson=/usr \
  --with-cjose=/usr \
  --enable-experimental-plugins \
%if %{with docs}
  --enable-docs \
%endif

make %{?_smp_mflags}

%check
%limit_build -m 1600
make %{?_smp_mflags} check

%install
%make_install
mkdir -p %{buildroot}%{_sbindir}
rm -f %{buildroot}%{_bindir}/trafficserver
sed -i "s#%{_bindir}/env bash#$(which bash)#" %{buildroot}%{_bindir}/tsxs
sed -i "s#%{_bindir}/env perl#$(which perl)#" %{buildroot}%{_bindir}/tspush
%if 0%{?suse_version}
%perl_process_packlist
%else
if test -d %{buildroot}%{perl_vendorarch}/auto; then
  find %{buildroot}%{perl_vendorarch}/auto -name .packlist -print0 | xargs -0 -r rm
fi
rm -f %{buildroot}/%{perl_archlib}/perllocal.pod
%endif
install -D -m 644 %{SOURCE11} %{buildroot}%{_sysconfdir}/systemd/system/apache-trafficserver.service.d/00-relax-hardening.conf
install -D -m 644 rc/trafficserver.service %{buildroot}%{_unitdir}/apache-trafficserver.service
ln -s %{_sbindir}/service %{buildroot}%{_sbindir}/rcapache-trafficserver

# Unit test plugins
rm -f %{buildroot}%{_libdir}/plugin_v{1,2}.{so,la}
rm -f %{buildroot}%{_libdir}/plugin_{init,instinit}_fail.{so,la}
rm -f %{buildroot}%{_libdir}/plugin_missing_{deleteinstance,doremap,init,newinstance}.{so,la}
rm -f %{buildroot}%{_libdir}/plugin_{required_cb,testing_calls}.{so,la}

# Delete libtool stuff
find %{buildroot}%{_libexecdir}/%{name}/ -name '*.la' -print -delete

# Managed by systemd through Logs/State/RuntimeDirectory
rmdir %{buildroot}%{_localstatedir}/lib/trafficserver
rmdir %{buildroot}%{_localstatedir}/log/trafficserver

%pre
%if 0%{?suse_version}
%service_add_pre apache-trafficserver.service
%endif

%post
%if 0%{?suse_version}
%service_add_post apache-trafficserver.service
%endif

%preun
%if 0%{?suse_version}
%service_del_preun apache-trafficserver.service
%endif

%postun
%if 0%{?suse_version}
%service_del_postun apache-trafficserver.service
%endif

%post libs9 -p /sbin/ldconfig
%postun libs9 -p /sbin/ldconfig

%files
%license LICENSE
%config(noreplace) %attr(-,daemon,daemon) %{_sysconfdir}/%{name}
%config(noreplace) %attr(-,root,root) %{_sysconfdir}/systemd
%dir %{_libexecdir}/%{name}
%{_bindir}/traffic_*
%{_sbindir}/rcapache-trafficserver
%{_unitdir}/apache-trafficserver.service

# Managed by systemd through Logs/State/RuntimeDirectory
%files libs9
%{_libdir}/libts*.so.*

%files -n perl-Apache-TS
%{_bindir}/tspush
%{perl_vendorlib}/Apache
%{perl_vendorarch}/auto/Apache
%{_mandir}/man3/Apache::TS*.3pm%{ext_man}

%files devel
%{_bindir}/tsxs
%{_includedir}/tscpp
%{_includedir}/ts
%{_libdir}/libts*.so
%{_libdir}/libts*.la
%{_libdir}/pkgconfig/trafficserver.pc

%if %{with docs}
%files docs
%{_mandir}/man1/*
%{_mandir}/man3/*
%{_mandir}/man5/*
%{_mandir}/man8/*
%exclude %{_mandir}/man3/Apache::TS*.3pm%{ext_man}
%endif

%package plugins
Summary:        Plugins for %{name}
Group:          Productivity/Networking/Web/Proxy
Requires:       %{name} = %{version}

%description plugins
Apache Traffic Server software is a fast, scalable and extensible HTTP/1.1 compliant caching proxy server.
This package contains plugins for use with it.

%files plugins
%{_libexecdir}/%{name}/authproxy.so
%{_libexecdir}/%{name}/background_fetch.so
%{_libexecdir}/%{name}/cache_promote.so
%{_libexecdir}/%{name}/cache_range_requests.so
%{_libexecdir}/%{name}/cachekey.so
%{_libexecdir}/%{name}/certifier.so
%{_libexecdir}/%{name}/combo_handler.so
%{_libexecdir}/%{name}/compress.so
%{_libexecdir}/%{name}/conf_remap.so
%{_libexecdir}/%{name}/escalate.so
%{_libexecdir}/%{name}/esi.so
%{_libexecdir}/%{name}/generator.so
%{_libexecdir}/%{name}/healthchecks.so
%{_libexecdir}/%{name}/libloader.so
%{_libexecdir}/%{name}/multiplexer.so
%{_libexecdir}/%{name}/prefetch.so
%{_libexecdir}/%{name}/regex_remap.so
%{_libexecdir}/%{name}/regex_revalidate.so
%{_libexecdir}/%{name}/remap_purge.so
%{_libexecdir}/%{name}/s3_auth.so
%{_libexecdir}/%{name}/server_push_preload.so
%{_libexecdir}/%{name}/stats_over_http.so
%{_libexecdir}/%{name}/tcpinfo.so
%{_libexecdir}/%{name}/xdebug.so

%package plugins-experimental
Summary:        Experimental plugins for %{name}
Group:          Productivity/Networking/Web/Proxy
Requires:       %{name} = %{version}
Provides:       %{name}-plugin-geoip_acl = %{version}

%description plugins-experimental
This package contains experimental plugins for Apache Traffic Server.

%files plugins-experimental
%{_libexecdir}/%{name}/access_control.so
%{_libexecdir}/%{name}/acme.so
%{_libexecdir}/%{name}/block_errors.so
%{_libexecdir}/%{name}/cache_fill.so
%{_libexecdir}/%{name}/cert_reporting_tool.so
%{_libexecdir}/%{name}/collapsed_forwarding.so
%{_libexecdir}/%{name}/cookie_remap.so
%{_libexecdir}/%{name}/custom_redirect.so
%{_libexecdir}/%{name}/fq_pacing.so
%{_libexecdir}/%{name}/geoip_acl.so
%{_libexecdir}/%{name}/header_freq.so
%{_libexecdir}/%{name}/hook-trace.so
%{_libexecdir}/%{name}/http_stats.so
%{_libexecdir}/%{name}/icap.so
%{_libexecdir}/%{name}/inliner.so
%{_libexecdir}/%{name}/ja3_fingerprint.so
%{_libexecdir}/%{name}/memory_profile.so
%{_libexecdir}/%{name}/metalink.so
%{_libexecdir}/%{name}/money_trace.so
%{_libexecdir}/%{name}/mp4.so
%{_libexecdir}/%{name}/parent_select.so
%{_libexecdir}/%{name}/rate_limit.so
%{_libexecdir}/%{name}/redo_cache_lookup.so
%{_libexecdir}/%{name}/remap_stats.so
%{_libexecdir}/%{name}/slice.so
%{_libexecdir}/%{name}/sslheaders.so
%{_libexecdir}/%{name}/statichit.so
%{_libexecdir}/%{name}/stream_editor.so
%{_libexecdir}/%{name}/system_stats.so
%{_libexecdir}/%{name}/tls_bridge.so
%{_libexecdir}/%{name}/traffic_dump.so
%{_libexecdir}/%{name}/tsmemcache.so
%{_libexecdir}/%{name}/url_sig.so

%package plugin-header_rewrite
Summary:        Plugin header_rewrite for %{name}
Group:          Productivity/Networking/Web/Proxy
Requires:       %{name} = %{version}

%description plugin-header_rewrite
This package contains the header_rewrite plugin for Apache Traffic Server.

%files plugin-header_rewrite
%{_libexecdir}/%{name}/header_rewrite.so

%package plugin-uri_signing
Summary:        Experimental Plugin uri_signing for %{name}
Group:          Productivity/Networking/Web/Proxy
Requires:       %{name} = %{version}

%description plugin-uri_signing
This package contains the experimental uri_signing plugin for Apache Traffic Server.

%files plugin-uri_signing
%{_libexecdir}/%{name}/uri_signing.so

%if %{with lua}
%package plugin-tslua
Summary:        Plugin tslua for %{name}
Group:          Productivity/Networking/Web/Proxy
Requires:       %{name} = %{version}

%description plugin-tslua
This package contains the Lua plugin for Apache Traffic Server.

%files plugin-tslua
%{_libexecdir}/%{name}/tslua.so
%endif

%package plugin-webp_transform
Summary:        Experimental Plugin magick/webp_transform for %{name}
Group:          Productivity/Networking/Web/Proxy
Requires:       %{name} = %{version}

%description plugin-webp_transform
This package contains the experimental magick and webp_transform plugin for Apache Traffic Server.

%files plugin-webp_transform
%{_libexecdir}/%{name}/webp_transform.so
%{_libexecdir}/%{name}/magick.so

%package plugin-maxmind_acl
Summary:        Experimental Plugin maxmind_acl for %{name}
Group:          Productivity/Networking/Web/Proxy
Requires:       %{name} = %{version}

%description plugin-maxmind_acl
This package contains the experimental maxmind_acl plugin for Apache Traffic Server.

%files plugin-maxmind_acl
%{_libexecdir}/%{name}/maxmind_acl.so

%changelog
openSUSE Build Service is sponsored by