File wireshark.spec of Package wireshark

# Note that this is NOT a relocatable package
# XXX is this still true? https://fedoraproject.org/wiki/Packaging:Cmake
# says that recent CMake versions take care of rpathification.

# To do:
# - Set version in version.h
# - Add bcond_with clang

%bcond_with	ninja
%bcond_with	ccache
%bcond_without	qt5
%bcond_with	lua
%bcond_with	mmdbresolve
%bcond_with	lz4_and_snappy
%bcond_with	c_ares
%bcond_with	spandsp
%bcond_with	bcg729
%bcond_with	libxml2
%bcond_with	nghttp2
%bcond_with	sdjournal
%bcond_with	guides
%bcond_with	brotli
%bcond_with	zstd

# Set at most one of these two:
# Note that setcap requires rpmbuild 4.7.0 or later.
%global setuid_dumpcap 0
%global setcap_dumpcap 1
%global _prefix /opt/nio

# Set to 1 if you want a group called 'wireshark' which users must be a member
# of in order to run dumpcap.  Only used if setuid_dumpcap or setcap_dumpcap
# are set.
%global use_wireshark_group 1

%global package_version 3.2.0

AutoReqProv: no
Summary:	Wireshark is the world's foremost protocol analyzer
Name:		wireshark
Version:	3.2.0
Release:	1
License:	GPLv2+
Group:		Applications/Internet
#Source:		https://www.wireshark.org/download/src/%{name}-%{package_version}.tar.xz
# Or this URL for automated builds:
#Source:		https://www.wireshark.org/download/automated/src/%%{name}-%%{package_version}.tar.xz
Source:		https://1.na.dl.wireshark.org/src/%{name}-%{package_version}.tar.xz
#Source:		wireshark-3.2.0.tar.gz
URL:		https://www.wireshark.org/
Packager:	Gerald Combs <gerald[AT]wireshark.org>

BuildRoot:	/tmp/%{name}-%{version}-%{release}-root-%(%{__id_u} -n)

%if 0%{?rhel}
BuildRequires:	cmake3 >= 3.5
%else
BuildRequires:	cmake >= 3.5
%endif
BuildRequires:  python3
BuildRequires:	gcc
BuildRequires:	perl
BuildRequires:	flex
BuildRequires:	bison
%if %{with guides}
BuildRequires:	asciidoctor
%endif

BuildRequires:	glib2-devel >= 2.32.0
Requires:	glib2
BuildRequires:	libpcap-devel
%if 0%{?suse_version}
Requires:	libpcap1
%else
Requires:	libpcap
%endif
BuildRequires:	zlib-devel
Requires:	zlib
BuildRequires:	libgcrypt-devel
%if 0%{?suse_version}
Requires:	libgcrypt20
%else
Requires:	libgcrypt
%endif

%if %{with lz4_and_snappy}
%if 0%{?suse_version}
BuildRequires:	liblz4-devel
%if 0%{?sle_version} >= 150000
Requires:	liblz4-1
%else
Requires:	liblz4-1_4
%endif
BuildRequires:	snappy-devel
Requires:	libsnappy1
%else
BuildRequires:	lz4-devel
Requires:	lz4
BuildRequires:	snappy-devel
Requires:	snappy
%endif
%endif

%if %{with c_ares}
%if 0%{?suse_version}
# SUSE uses these package names (yes 2!):
BuildRequires:	libcares-devel
Requires:	libcares2
%else
# ... while Red Hat uses this one:
# (What other RPM-based distros do will have to be determined...)
BuildRequires:	c-ares-devel
Requires:	c-ares
%endif
%endif

%if %{with lua}
%if 0%{?fedora}
BuildRequires:	compat-lua-devel < 5.3
Requires:	compat-lua < 5.3
%else
%if 0%{?suse_version}
BuildRequires:	lua51-devel
Requires:	lua51
%else
BuildRequires:	lua-devel < 5.3
Requires:	lua < 5.3
%endif
%endif
%endif

%if %{with nghttp2}
BuildRequires:	libnghttp2-devel
%if 0%{?suse_version}
Requires:	libnghttp2-14
%else
Requires:	libnghttp2
%endif
%endif

%if %{with sdjournal}
BuildRequires:	systemd-devel
%if 0%{?suse_version}
Requires:	libsystemd0
%else
Requires:	systemd-libs
%endif
%endif

%if %{with brotli}
%if 0%{?suse_version}
BuildRequires:	libbrotli-devel
# On SUSE libbrotli-devel installs the libbrotlidec.so, libbrotlienc.so
# and libbrotlicommon.so symlinks, but only installs the libbrotlicommon1 and libbrotlienc1
# packages, leaving the libbrotlidec.so symlink broken, so we have to include libbrotlidec1
# as a build-time dependency...
BuildRequires:	libbrotlidec1
Requires:	libbrotlidec1
%else
BuildRequires:	brotli-devel
Requires:	brotli
%endif
%endif

%if %{with zstd}
BuildRequires:	libzstd-devel
%if 0%{?suse_version}
Requires:	libzstd1
%else
Requires:	libzstd
%endif
%endif

# Uncomment these if you want to be sure you get them...
#BuildRequires:	krb5-devel
#BuildRequires:	libsmi-devel
#BuildRequires:	pcre-devel
#BuildRequires:	libselinux
#BuildRequires:	gnutls-devel
#BuildRequires:	libcap-devel

%if %{with mmdbresolve}
BuildRequires:	libmaxminddb-devel
%if 0%{?suse_version}
Requires:	libmaxminddb0
%else
Requires:	libmaxminddb
%endif
%endif

%if %{use_wireshark_group}
%if 0%{?suse_version}
# SUSE's groupadd is in this package:
Requires(pre):	pwdutils
%else
# ... while Red Hat's is in this one:
Requires(pre):	shadow-utils
%endif
%endif

%if %{setcap_dumpcap}
# Actually we require rpmbuild (the program) >= 4.7.0 but the package name
# where we can find it varies.  So we check the 'rpm' version because either
# rpmbuild is in that package (e.g., in older distros) or it's in the
# 'rpm-build' package which generally requires a matching version of 'rpm'.
#
# All of this is to save users the trouble of getting through an full compile
# only to have rpmbuild barf because it doesn't understand capabilities.
BuildRequires:	rpm >= 4.7.0
%endif

# NOTE: the below description has been copied to wireshark.appdata.xml (in the
# top-level directory).
%description
Wireshark allows you to examine protocol data stored in files or as it is
captured from wired or wireless (WiFi or Bluetooth) networks, USB devices,
and many other sources.  It supports dozens of protocol capture file formats
and understands more than a thousand protocols.

It has many powerful features including a rich display filter language
and the ability to reassemble multiple protocol packets in order to, for
example, view a complete TCP stream, save the contents of a file which was
transferred over HTTP or CIFS, or play back an RTP audio stream.

This package contains command-line utilities, plugins, and documentation for
Wireshark. A Qt graphical user interface is packaged separately.

%if %{with qt5}
%package	qt
Summary:	Wireshark's Qt-based GUI
Group:		Applications/Internet
Obsoletes:	wireshark-gnome wireshark-gtk
%description qt
This package contains the Qt Wireshark GUI and desktop integration files.

Requires:	%{name} = %{version}-%{release}
BuildRequires:	gcc-c++
%if 0%{?suse_version}
BuildRequires:	libQt5Core-devel
Requires:	libQt5Core5
BuildRequires:	libQt5Gui-devel
Requires:	libQt5Gui5
BuildRequires:	libQt5Widgets-devel
Requires:	libQt5Widgets5
BuildRequires:	libQt5PrintSupport-devel
Requires:	libQt5PrintSupport5
BuildRequires:	libqt5-qtmultimedia-devel
Requires:	libQt5Multimedia5
# Need this for SUSE's suse_update_desktop_file macro
BuildRequires:	update-desktop-files
%else
BuildRequires:	qt5-qtbase-devel
Requires:	qt5-qtbase
Requires:	qt5-qtbase-gui
BuildRequires:	qt5-qtmultimedia-devel
Requires:	qt5-qtmultimedia
%endif
Requires:	xdg-utils
Requires:	hicolor-icon-theme
BuildRequires:	desktop-file-utils
Requires(post):	desktop-file-utils
# Add this for more readable fonts on some distributions/versions
#Requires:	dejavu-sans-mono-fonts
%endif

%package	devel
Summary:	Development headers for Wireshark
Group:		Applications/Internet
Requires:	%{name} = %{version}-%{release}
%description devel
The wireshark-devel package contains the header and other files required for
development of Wireshark scripts and plugins.


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

%if 0%{?rhel}
cmake3 \
%else
%cmake \
%endif
%if %{with ccache}
  -DENABLE_CCACHE=OFF \
%endif
  -DCMAKE_INSTALL_PREFIX=/opt/nio \
  -DBUILD_wireshark=OFF \
  -DBUILD_tshark=ON \
  -DENABLE_LUA=OFF \
  -DBUILD_mmdbresolve=OFF \
  -DENABLE_LZ4=ON \
  -DENABLE_SNAPPY=ON \
%if %{with c_ares}
  -DENABLE_CARES=ON \
%else
  -DENABLE_CARES=OFF \
%endif
%if %{with spandsp}
  -DENABLE_SPANDSP=ON \
%else
  -DENABLE_SPANDSP=OFF \
%endif
%if %{with bcg729}
  -DENABLE_BCG729=ON \
%else
  -DENABLE_BCG729=OFF \
%endif
%if %{with libxml2}
  -DENABLE_LIBXML2=ON \
%else
  -DENABLE_LIBXML2=OFF \
%endif
  -DENABLE_NGHTTP2=OFF \
%if %{with sdjournal}
  -DBUILD_sdjournal=ON \
%else
  -DBUILD_sdjournal=OFF \
%endif
%if %{with brotli}
  -DENABLE_BROTLI=ON \
%else
  -DENABLE_BROTLI=OFF \
%endif
  -DDISABLE_WERROR=ON \
%if %{with ninja}
  -G Ninja \
%endif

%if %{with ninja}
# Older RPM-based distributions used ninja-build in order to prevent a collision with
# the Ninja IRC client: https://bugzilla.redhat.com/show_bug.cgi?id=1166135
NINJA=$(type ninja >/dev/null 2>&1 && echo ninja || echo ninja-build)
$NINJA
%else
# Suggestion: put this in your ~/.rpmmacros (without the hash sign, of course):
# %_smp_mflags -j %(grep -c processor /proc/cpuinfo)
make %{?_smp_mflags}
%endif

%install
rm -rf $RPM_BUILD_ROOT
%if 0%{?suse_version}
cd build
%endif
%if %{with ninja}
NINJA=$(type ninja >/dev/null 2>&1 && echo ninja || echo ninja-build)
DESTDIR=$RPM_BUILD_ROOT $NINJA install
%if %{with guides}
DESTDIR=$RPM_BUILD_ROOT $NINJA install_guides
%endif
%else
make DESTDIR=$RPM_BUILD_ROOT install
%if %{with guides}
make DESTDIR=$RPM_BUILD_ROOT install_guides
%endif
%endif
%if 0%{?suse_version}
cd -
%endif

# If we're being installed in an unusual prefix tell the loader where
# to find our libraries.
%if "%{_prefix}" != "/usr"
	%define install_ld_so_conf 1
	mkdir -p $RPM_BUILD_ROOT/etc/ld.so.conf.d
	echo %{_libdir} > $RPM_BUILD_ROOT/etc/ld.so.conf.d/wireshark.conf
%endif

%clean
rm -rf $RPM_BUILD_ROOT

%if %{use_wireshark_group}
%pre
getent group wireshark >/dev/null || groupadd -r wireshark
%endif

%post -p /sbin/ldconfig

%postun -p /sbin/ldconfig


%files

%defattr(-,root,root)
%doc AUTHORS COPYING ChangeLog INSTALL NEWS README*

# Include the User Guide:
%docdir %{_datadir}/doc/wireshark/
%{_datadir}/doc/wireshark/

# Don't pick up any of the wireshark (GUI) binaries here
%{_bindir}/*
#%exclude %{_bindir}/wireshark*

# This generates a warning because dumpcap is listed twice. That's
# probably preferable to listing each program (and keeping the list up to
# date)...
%if %{use_wireshark_group} && %{setuid_dumpcap}
# Setuid but only executable by members of the 'wireshark' group
%attr(4750, root, wireshark) %{_bindir}/dumpcap
%else
%if %{use_wireshark_group} && %{setcap_dumpcap}
# Setcap but only executable by members of the 'wireshark' group
%attr(0750, root, wireshark) %caps(cap_net_raw,cap_net_admin=ep) %{_bindir}/dumpcap
%else
%if %{setuid_dumpcap}
# Setuid and executable by all
%attr(4755, root, root) %{_bindir}/dumpcap
%else
%if %{setcap_dumpcap}
# Setcap and executable by all
%attr(0755, root, root) %caps(cap_net_raw,cap_net_admin=ep) %{_bindir}/dumpcap
%else
# Executable by all but with no special permissions
%attr(0755, root, root) %{_bindir}/dumpcap
%endif
%endif
%endif
%endif

####################################%{_libdir}/lib*.so*
%exclude %{_prefix}/lib64/lib*.so
%{_prefix}/lib64/lib*.so.*
# Don't pick up the cmake files here
#%exclude %{_libdir}/wireshark/cmake
#%{_libdir}/wireshark
%exclude %{_prefix}/lib64/wireshark/cmake
%{_prefix}/lib64/wireshark
# Don't pick up the wireshark (GUI) man page here
%exclude %{_mandir}/man1/wireshark.*
%{_mandir}/man1/*
%{_mandir}/man4/*
%{_datadir}/wireshark

%if 0%{?install_ld_so_conf}
/etc/ld.so.conf.d/wireshark.conf
%endif

#%{_datadir}/appdata/wireshark.appdata.xml
#%{_datadir}/icons/hicolor/*/apps/*
#%{_datadir}/icons/hicolor/*/mimetypes/*
#%{_datadir}/mime/packages/wireshark.xml
%{_bindir}/tshark
%{_mandir}/man1/wireshark.*

#Devel files
%{_includedir}/wireshark
#%{_libdir}/wireshark/cmake
#%{_libdir}/pkgconfig/wireshark.pc
%{_prefix}/lib64/pkgconfig/wireshark.pc
%{_prefix}/lib64/wireshark/cmake

%changelog
* Thu Aug 15 2019 Gerald Combs
- Add zstd