File haproxy.spec of Package HAProxy

%define haproxy_user    haproxy
%define haproxy_group   %{haproxy_user}
%define haproxy_homedir %{_localstatedir}/lib/haproxy
%define haproxy_confdir %{_sysconfdir}/haproxy
%define haproxy_datadir %{_datadir}/haproxy

%global _hardened_build 1

Name:           haproxy
Version:        2.6.23
Release:        <CI_CNT>%{?dist}
Summary:        HAProxy reverse proxy for high availability environments

License:        GPLv2+

URL:            http://www.haproxy.org/
Source0:        %{url}/download/2.6/src/haproxy-%{version}.tar.gz
Source1:        %{name}.service
Source2:        %{name}.cfg
Source3:        %{name}.logrotate
Source4:        %{name}.sysconfig
Source5:        halog.1

%if 0%{?centos_version} > 700 || 0%{?rhel_version} > 700
BuildRequires:  lua-devel
%endif

BuildRequires:  gcc
%if 0%{?centos_version} >= 700 || 0%{?rhel_version} > 700
BuildRequires:  pcre2-devel
%else
BuildRequires:  pcre-devel
%endif
BuildRequires:  util-linux
BuildRequires:  zlib-devel
BuildRequires:  openssl-devel
BuildRequires:  systemd-devel
BuildRequires:  systemd

Requires(pre):      shadow-utils
%{?systemd_requires}

%description
HAProxy is a TCP/HTTP reverse proxy which is particularly suited for high
availability environments. Indeed, it can:
 - route HTTP requests depending on statically assigned cookies
 - spread load among several servers while assuring server persistence
   through the use of HTTP cookies
 - switch to backup servers in the event a main one fails
 - accept connections to special ports dedicated to service monitoring
 - stop accepting connections without breaking existing ones
 - add, modify, and delete HTTP headers in both directions
 - block requests matching particular patterns
 - report detailed status to authenticated users from a URI
   intercepted from the application

%prep
%setup -q -n %{name}-%{version}

%build
regparm_opts=
%ifarch %ix86 x86_64
regparm_opts="USE_REGPARM=1"
%endif

%{__make} %{?_smp_mflags} CPU="generic" TARGET="linux-glibc" USE_OPENSSL=1 USE_SYSTEMD=1 USE_ZLIB=1 USE_PROMEX=1 \
%if 0%{?centos_version} >= 700 || 0%{?rhel_version} > 700
USE_PCRE2=1 \
%else
USE_PCRE=1 \
%endif
%if 0%{?centos_version} > 700 || 0%{?rhel_version} > 700
USE_LUA=1 \
%endif
USE_CRYPT_H=1 USE_SYSTEMD=1 USE_LINUX_TPROXY=1 USE_GETADDRINFO=1 ${regparm_opts} ADDINC="%{optflags}" ADDLIB="%{__global_ldflags}"



#pushd contrib/halog
#%{__make} ${halog} \
#%if 0%{?centos_version} > 700 || 0%{?rhel_version} > 700
#OPTIMIZE="%{optflags} %{build_ldflags}"
#%else
#OPTIMIZE="%{optflags}"
#%endif
#popd

#pushd contrib/iprange
#%{__make} iprange \
#%if 0%{?centos_version} > 700 || 0%{?rhel_version} > 700
#OPTIMIZE="%{optflags} %{build_ldflags}"
#%else
#OPTIMIZE="%{optflags}"
#%endif
#popd

%install
%{__make} install-bin DESTDIR=%{buildroot} PREFIX=%{_prefix} TARGET="linux-glibc"
%{__make} install-man DESTDIR=%{buildroot} PREFIX=%{_prefix}

%{__install} -p -D -m 0644 %{SOURCE1} %{buildroot}%{_unitdir}/%{name}.service
%{__install} -p -D -m 0644 %{SOURCE2} %{buildroot}%{haproxy_confdir}/%{name}.cfg
%{__install} -p -D -m 0644 %{SOURCE3} %{buildroot}%{_sysconfdir}/logrotate.d/%{name}
%{__install} -p -D -m 0644 %{SOURCE4} %{buildroot}%{_sysconfdir}/sysconfig/%{name}
#%{__install} -p -D -m 0644 %{SOURCE5} %{buildroot}%{_mandir}/man1/halog.1
%{__install} -d -m 0755 %{buildroot}%{haproxy_homedir}
%{__install} -d -m 0755 %{buildroot}%{haproxy_datadir}
%{__install} -d -m 0755 %{buildroot}%{_bindir}
#%{__install} -p -m 0755 ./contrib/halog/halog %{buildroot}%{_bindir}/halog
#%{__install} -p -m 0755 ./contrib/iprange/iprange %{buildroot}%{_bindir}/iprange
%{__install} -p -m 0644 ./examples/errorfiles/* %{buildroot}%{haproxy_datadir}

for httpfile in $(find ./examples/errorfiles/ -type f) 
do
    %{__install} -p -m 0644 $httpfile %{buildroot}%{haproxy_datadir}
done

%{__rm} -rf ./examples/errorfiles/

find ./examples/* -type f ! -name "*.cfg" -exec %{__rm} -f "{}" \;

for textfile in $(find ./ -type f -name '*.txt')
do
    %{__mv} $textfile $textfile.old
    iconv --from-code ISO8859-1 --to-code UTF-8 --output $textfile $textfile.old
    %{__rm} -f $textfile.old
done

%pre
getent group %{haproxy_group} >/dev/null || \
    groupadd -r %{haproxy_group}
getent passwd %{haproxy_user} >/dev/null || \
    useradd -r -g %{haproxy_user} -d %{haproxy_homedir} \
    -s /sbin/nologin -c "haproxy" %{haproxy_user}
exit 0

%post
%systemd_post %{name}.service

%preun
%systemd_preun %{name}.service

%postun
%systemd_postun_with_restart %{name}.service

%files
%doc doc/* examples/*
%doc CHANGELOG README VERSION
%license LICENSE
%dir %{haproxy_homedir}
%dir %{haproxy_confdir}
%dir %{haproxy_datadir}
%{haproxy_datadir}/*
%config(noreplace) %{haproxy_confdir}/%{name}.cfg
%config(noreplace) %{_sysconfdir}/logrotate.d/%{name}
%config(noreplace) %{_sysconfdir}/sysconfig/%{name}
%{_unitdir}/%{name}.service
%{_sbindir}/%{name}
#%{_bindir}/halog
#%{_bindir}/iprange
%{_mandir}/man1/*

%changelog
* Fri Oct 03 2025 Joram Knaack <joramk@gmail.com> - 2.6.23
- Updated to version 2.6.23

* Tue Apr 22 2025 Joram Knaack <joramk@gmail.com> - 2.6.22
- Updated to version 2.6.22

* Wed Jan 29 2025 Joram Knaack <joramk@gmail.com> - 2.6.21
- Updated to version 2.6.21

* Fri Nov 08 2024 Joram Knaack <joramk@gmail.com> - 2.6.20
- Updated to version 2.6.20

* Thu Sep 19 2024 Joram Knaack <joramk@gmail.com> - 2.6.19
- Updated to version 2.6.19

* Tue Jun 18 2024 Joram Knaack <joramk@gmail.com> - 2.6.18
- Updated to version 2.6.18

* Fri Apr 05 2024 Joram Knaack <joramk@gmail.com> - 2.6.17
- Updated to version 2.6.17

* Wed Dec 13 2023 Joram Knaack <joramk@gmail.com> - 2.6.16
- Updated to version 2.6.16

* Wed Aug 09 2023 Joram Knaack <joramk@gmail.com> - 2.6.15
- Updated to version 2.6.15

* Fri Jun 09 2023 Joram Knaack <joramk@gmail.com> - 2.6.14
- Updated to version 2.6.14

* Tue May 02 2023 Joram Knaack <joramk@gmail.com> - 2.6.13
- Updated to version 2.6.13

* Tue Mar 28 2023 Joram Knaack <joramk@gmail.com> - 2.6.12
- Updated to version 2.6.12

* Fri Mar 17 2023 Joram Knaack <joramk@gmail.com> - 2.6.11
- Updated to version 2.6.11

* Fri Mar 10 2023 Joram Knaack <joramk@gmail.com> - 2.6.10
- Updated to version 2.6.10

* Tue Feb 14 2023 Joram Knaack <joramk@gmail.com> - 2.6.9
- Updated to version 2.6.9

* Tue Jan 24 2023 Joram Knaack <joramk@gmail.com> - 2.6.8
- Updated to version 2.6.8

* Fri Dec 02 2022 Joram Knaack <joramk@gmail.com> - 2.6.7
- Updated to version 2.6.7

* Thu Sep 22 2022 Joram Knaack <joramk@gmail.com> - 2.6.6
- Updated to version 2.6.6

* Mon Aug 22 2022 Joram Knaack <joramk@gmail.com> - 2.6.4
- Updated to version 2.6.4

* Fri Aug 19 2022 Joram Knaack <joramk@gmail.com> - 2.6.3
- Updated to version 2.6.3

* Fri Jul 22 2022 Joram Knaack <joramk@gmail.com> - 2.6.2
- Updated to version 2.6.2

* Fri Jul 22 2022 Joram Knaack <joramk@gmail.com> - 2.6.1
- Updated to version 2.6.1

* Fri May 27 2022 Joram Knaack <joramk@gmail.com> - 2.6-dev12
- Updated to version 2.6-dev12

* Sat May 21 2022 Joram Knaack <joramk@gmail.com> - 2.6-dev11
- Updated to version 2.6-dev11

* Sat May 14 2022 Joram Knaack <joramk@gmail.com> - 2.6-dev10
- Updated to version 2.6-dev10

* Sun May 08 2022 Joram Knaack <joramk@gmail.com> - 2.6-dev9
- Updated to version 2.6-dev9

* Sat Apr 30 2022 Joram Knaack <joramk@gmail.com> - 2.6-dev8
- Updated to version 2.6-dev8

* Sat Apr 23 2022 Joram Knaack <joramk@gmail.com> - 2.6-dev7
- Updated to version 2.6-dev7

* Sat Apr 16 2022 Joram Knaack <joramk@gmail.com> - 2.6-dev6
- Updated to version 2.6-dev6

* Sat Apr 09 2022 Joram Knaack <joramk@gmail.com> - 2.6-dev5
- Updated to version 2.6-dev5

* Sat Mar 26 2022 Joram Knaack <joramk@gmail.com> - 2.6-dev4
- Updated to version 2.6-dev4

* Sat Mar 12 2022 Joram Knaack <joramk@gmail.com> - 2.6-dev3
- Updated to version 2.6-dev3

* Fri Feb 25 2022 Joram Knaack <joramk@gmail.com> - 2.6-dev2
- Updated to version 2.6-dev2

* Thu Feb 03 2022 Joram Knaack <joramk@gmail.com> - 2.6-dev1
- Updated to version 2.6-dev1

* Thu Feb 03 2022 Joram Knaack <joramk@gmail.com> - 2.6-dev1
- Updated to version 2.6-dev1

* Sun Dec 19 2021 Joram Knaack <joramk@gmail.com> - 2.6-dev0
- Initial release of to version 2.6-dev0

openSUSE Build Service is sponsored by