File coova-chilli.spec of Package coova-chilli

%define realname coova-chilli
%define srcext   tar.bz2

%define xtlibdir %(pkg-config --variable=xtlibdir xtables)

# Common info
Name:          %{realname}
Version:       0
Release:       %{?extraver:0.}1%{?dist}
License:       GPL-2.0
Group:         Productivity/Networking/Security
URL:           http://coova.github.io/
Summary:       Software access controller for captive portal hotspots

# Install-time parameters
Requires:      haserl
%if 0%{?suse_version}
PreReq: permissions
%endif

# Build-time parameters
BuildRequires: autoconf automake libtool
BuildRequires: gcc-c++
BuildRequires: pkg-config
BuildRequires: gengetopt
BuildRequires: openssl-devel
BuildRequires: libnetfilter_queue-devel
BuildRequires: libnfnetlink-devel
BuildRequires: libmnl-devel
BuildRequires: libpcap-devel
BuildRequires: curl-devel
%if 0%{?suse_version}
BuildRequires: libjson-c-devel
BuildRequires: libxtables-devel
BuildRequires: kernel-devel kernel-syms modutils
%else
BuildRequires: json-c-devel
BuildRequires: iptables-devel
BuildRequires: kernel-headers
%endif
BuildRequires: %kernel_module_package_buildreqs
BuildRoot:     %{_tmppath}/%{name}-root
Source0:       http://ap.coova.org/chilli/%{realname}-%{version}%{?extraver}.%{srcext}
Source99:      preamble
Source199:     compiler-gcc5.h
Patch:         chilli.init.patch

%description
CoovaChilli is a feature rich software access controller that provides a captive
portal / walled-garden environment and uses RADIUS or a HTTP protocol for access
provisioning and accounting.

%package devel
Group:         Development/Languages/C and C++
Summary:       Development files for %{name}
Requires:      %{name} = %{version}

%description devel
Development files for %{name}

# Don't build kernel module for RHEL/CentOS < 7
%if 0%{?suse_version} || 0%{?rhel} >= 7

%kernel_module_package %{?suse_version:-p %_sourcedir/preamble} -x kdump -x um -x ec2 -x debug -x xen

%package KMP
Group:         System/Kernel
Summary:       Netfilter module for use with CoovaChilli

%description KMP
Netfilter kernel module for use with CoovaChilli.

%package dkms
Group:         System/Kernel
Summary:       Netfilter module for use with CoovaChilli
Requires:      dkms
BuildArch:     noarch

%description dkms
Netfilter kernel module for use with CoovaChilli.

%endif

# Preparation step (unpackung and patching if necessary)
%prep
%setup -q -n %{realname}-%{version}%{?extraver}
%patch -p1
%{__sed} -i '/^obj-m/ a\EXTRA_CFLAGS := -I$(src)' src/linux/Makefile
# Use system library json-c
%{__sed} -i '/json\/Makefile/ d' configure.ac
%{__sed} -i '/^if WITH_JSONLIB/, /^endif/ d' Makefile.am src/Makefile.am
# Why requirement for c-ares is hardcoded to curl support?
%{__sed} -ri 's/ -lcares//' configure.ac
# Create configure script
if [ ! -x configure ]; then
  for script in autogen.sh bootstrap; do
    if [ -x ${script} ]; then
      ./${script}
      exit $?
    fi
  done
  autoreconf --force --install
fi

%build
%configure \
 --disable-static \
 --disable-debug \
 \
 --enable-wpad \
 --enable-gardenaccounting \
 --enable-gardenext \
 --enable-inspect\
 --enable-dhcpopt \
 --enable-sessgarden \
 --enable-sessproxy \
 --enable-sessdhcp \
 --enable-sessdns \
 --enable-chillixml \
 --enable-proxyvsa \
 --enable-dnslog \
 --enable-ipwhitelist \
 --enable-uamdomainfile \
 --enable-redirdnsreq \
 --enable-largelimits \
 --enable-authedallowed \
 --enable-binstatusfile \
 --enable-statusfile \
 --enable-chilliproxy \
 --enable-multiroute \
 --enable-multilan \
 --enable-chilliradsec \
 --enable-chilliredir \
 --enable-chilliscript \
 --disable-cluster \
 --enable-sessionstate \
 --enable-sessionid \
 --enable-apsessionid \
 --enable-mdns \
 --enable-netbios \
 --enable-ieee8023 \
 --enable-pppoe \
 --enable-l2tpppp \
 --enable-eapol \
 --enable-miniportal \
 --enable-miniconfig \
 --enable-ewtapi \
 --enable-libjson \
 --enable-ssdp \
 --enable-layer3 \
 --enable-modules \
 --enable-extadmvsa \
 --enable-redirinject \
 --disable-netnat \
 --enable-useragent \
 --enable-acceptlanguage \
 --enable-location \
 --enable-forcedns \
 \
 --with-openssl \
 --with-nfqueue \
 --with-pcap \
 --with-curl \
 \
 CFLAGS="%{optflags} %{?gcc_lto} -I%{_includedir}/json-c -I%{_includedir}/libnfnetlink -DENABLE_JSON -fPIC -DPIC" \
 CXXFLAGS="%{optflags} %{?gcc_lto} -I%{_includedir}/json-c -I%{_includedir}/libnfnetlink -DENABLE_JSON -fPIC -DPIC" \
 LDFLAGS="-Wl,--as-needed -Wl,--strip-all -Wl,--no-undefined -Wl,-z,noexecstack -Wl,-z,now -Wl,-z,relro %{?gcc_lto}" \
 LIBS="-ljson-c"
%{__sed} -i 's/ -Werror//' src/Makefile
%{__make} %{?_smp_mflags}
%{__mkdir} obj
for flavor in %flavors_to_build; do
  %{__rm} -rf obj/$flavor
  %{__cp} -r src/linux obj/$flavor
  %{__make} -C %{kernel_source $flavor} %{?_smp_mflags} modules \
    M=$PWD/obj/$flavor V=1
done
# Build iptables extension
%{__make} -C src/linux libxt_coova.so CFLAGS="%{optflags} $(pkg-config --cflags xtables)"

%install
%{__make} install DESTDIR=%{buildroot}
%if "%{expand:%_vendor}" == "suse"
%{__ln_s} %{_initrddir}/chilli %{buildroot}%{_sbindir}/rcchilli
%{__install} -d -m 755 %{buildroot}%{_sysconfdir}/permissions.d
echo "%{_sbindir}/chilli_script root:root 4755" > %{buildroot}%{_sysconfdir}/permissions.d/chilli
%else
%{__mkdir} -p %{buildroot}%{_initrddir}
%{__mv} -f %{buildroot}%{_sysconfdir}/init.d/chilli %{buildroot}%{_initrddir}/
%endif
%if 0%{?suse_version} || 0%{?rhel} >= 7
# Install Coova netfilter module
export INSTALL_MOD_PATH=$RPM_BUILD_ROOT
export INSTALL_MOD_DIR=updates
for flavor in %flavors_to_build; do
  %{__make} -C %{kernel_source $flavor} modules_install \
  M=$PWD/obj/$flavor
done
%{__install} -D -m755 src/linux/libxt_coova.so %{buildroot}%{xtlibdir}/libxt_coova.so
# Prepare DKMS package
%{__install} -d -m755 %{buildroot}/usr/src/%{realname}-%{version}%{?extraver}/linux
%{__install} -m644 src/linux/xt_coova.c %{buildroot}/usr/src/%{realname}-%{version}%{?extraver}/xt_coova.c
%{__install} -m644 src/linux/xt_coova.h %{buildroot}/usr/src/%{realname}-%{version}%{?extraver}/xt_coova.h
test -f src/linux/linux/compiler-gcc5.h && %{__install} -m644 src/linux/linux/compiler-gcc5.h %{buildroot}/usr/src/%{realname}-%{version}%{?extraver}/linux/compiler-gcc5.h
# Makefile
cat > %{buildroot}/usr/src/%{realname}-%{version}%{?extraver}/Makefile <<EOMakefile
obj-m += xt_coova.o
ccflags-y := -I\$(KBUILD_EXTMOD)
EOMakefile
# dkms.conf
cat > %{buildroot}/usr/src/%{realname}-%{version}%{?extraver}/dkms.conf <<EOdkmsconf
PACKAGE_NAME="%{realname}"
PACKAGE_VERSION="%{version}%{?extraver}"
AUTOINSTALL=yes

BUILT_MODULE_NAME="xt_coova"
DEST_MODULE_LOCATION="/updates"
EOdkmsconf
%endif

%clean
[ "%{buildroot}" != "/" ] && rm -rf %{buildroot}

%files
%defattr(-,root,root)
%doc AUTHORS COPYING CREDITS LICENSE README.md
%doc doc/attributes doc/dictionary.coovachilli doc/freeradius.users
%doc doc/firewall.iptables
%doc doc/hotspotlogin.* doc/http-aaa-example.php
%config(noreplace) %{_sysconfdir}/chilli.conf
%dir %{_sysconfdir}/chilli
%config(noreplace) %{_sysconfdir}/chilli/*
%{_initrddir}/chilli
%{_sbindir}/*
%verify(not mode) %attr(4755, root, root) %{_sbindir}/chilli_script
%{_libdir}/*.so.*
%dir %{_libdir}/coova-chilli
%{_libdir}/coova-chilli/*.so
%exclude %{_libdir}/coova-chilli/*.la
%exclude %{_libdir}/python/CoovaChilliLib.py*
%if 0%{?suse_version} || 0%{?rhel} >= 7
%dir %{xtlibdir}
%{xtlibdir}/libxt_coova.so
%endif
%if 0%{?suse_version}
%{_sysconfdir}/permissions.d/chilli
%endif
%doc %{_mandir}/man1/*
%doc %{_mandir}/man5/*
%doc %{_mandir}/man8/*

# Development stuff
%files devel
%defattr(-,root,root)
%dir %{_includedir}/chilli
%{_includedir}/chilli/*.h
%{_libdir}/*.so
%exclude %{_libdir}/*.la

%if 0%{?suse_version} || 0%{?rhel} >= 7

%files dkms
%defattr(-,root,root)
/usr/src/%{realname}-%{version}%{?extraver}

%post dkms
/usr/sbin/dkms add -q -m %{realname} -v %{version}%{?extraver} --rpm_safe_upgrade || :

%preun dkms
/usr/sbin/dkms remove -q --all -m %{realname} -v %{version}%{?extraver} --rpm_safe_upgrade || :

%endif

%if 0%{?suse_version}

%verifyscript
%verify_permissions -e %{_sbindir}/chilli_script

%post
/sbin/ldconfig
%set_permissions %{_sbindir}/chilli_script
%{fillup_and_insserv chilli}

%preun
%{stop_on_removal chilli}

%postun
/sbin/ldconfig
%{restart_on_update chilli}
%{insserv_cleanup}

%else

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


%endif

%changelog
openSUSE Build Service is sponsored by