nixpkgs/pkgs/applications/networking/sniffers/wireshark/default.nix
Jonathan Ringer 9bb3fccb5b treewide: pkgs.pkgconfig -> pkgs.pkg-config, move pkgconfig to alias.nix
continuation of #109595

pkgconfig was aliased in 2018, however, it remained in
all-packages.nix due to its wide usage. This cleans
up the remaining references to pkgs.pkgsconfig and
moves the entry to aliases.nix.

python3Packages.pkgconfig remained unchanged because
it's the canonical name of the upstream package
on pypi.
2021-01-19 01:16:25 -08:00

117 lines
4.0 KiB
Nix

{ lib, stdenv, fetchurl, pkg-config, pcre, perl, flex, bison, gettext, libpcap, libnl, c-ares
, gnutls, libgcrypt, libgpgerror, geoip, openssl, lua5, python3, libcap, glib
, libssh, nghttp2, zlib, cmake, fetchpatch, makeWrapper
, withQt ? true, qt5 ? null
, ApplicationServices, SystemConfiguration, gmp
}:
assert withQt -> qt5 != null;
with lib;
let
version = "3.4.2";
variant = if withQt then "qt" else "cli";
in stdenv.mkDerivation {
pname = "wireshark-${variant}";
inherit version;
outputs = [ "out" "dev" ];
src = fetchurl {
url = "https://www.wireshark.org/download/src/all-versions/wireshark-${version}.tar.xz";
sha256 = "1i548w6zv6ni5n22rs90a12aakyq811493dxmadlcsj2krr6i66y";
};
cmakeFlags = [
"-DBUILD_wireshark=${if withQt then "ON" else "OFF"}"
"-DENABLE_APPLICATION_BUNDLE=${if withQt && stdenv.isDarwin then "ON" else "OFF"}"
# Fix `extcap` and `plugins` paths. See https://bugs.wireshark.org/bugzilla/show_bug.cgi?id=16444
"-DCMAKE_INSTALL_LIBDIR=lib"
];
# Avoid referencing -dev paths because of debug assertions.
NIX_CFLAGS_COMPILE = [ "-DQT_NO_DEBUG" ];
nativeBuildInputs = [
bison cmake flex pkg-config
] ++ optional withQt qt5.wrapQtAppsHook;
buildInputs = [
gettext pcre perl libpcap lua5 libssh nghttp2 openssl libgcrypt
libgpgerror gnutls geoip c-ares python3 glib zlib makeWrapper
] ++ optionals withQt (with qt5; [ qtbase qtmultimedia qtsvg qttools ])
++ optionals stdenv.isLinux [ libcap libnl ]
++ optionals stdenv.isDarwin [ SystemConfiguration ApplicationServices gmp ]
++ optionals (withQt && stdenv.isDarwin) (with qt5; [ qtmacextras ]);
patches = [ ./wireshark-lookup-dumpcap-in-path.patch ]
# https://code.wireshark.org/review/#/c/23728/
++ lib.optional stdenv.hostPlatform.isMusl (fetchpatch {
name = "fix-timeout.patch";
url = "https://code.wireshark.org/review/gitweb?p=wireshark.git;a=commitdiff_plain;h=8b5b843fcbc3e03e0fc45f3caf8cf5fc477e8613;hp=94af9724d140fd132896b650d10c4d060788e4f0";
sha256 = "1g2dm7lwsnanwp68b9xr9swspx7hfj4v3z44sz3yrfmynygk8zlv";
});
postPatch = ''
sed -i -e '1i cmake_policy(SET CMP0025 NEW)' CMakeLists.txt
'';
preBuild = ''
export LD_LIBRARY_PATH="$PWD/run"
'';
postInstall = ''
# to remove "cycle detected in the references"
mkdir -p $dev/lib/wireshark
mv $out/lib/wireshark/cmake $dev/lib/wireshark
'' + (if stdenv.isDarwin && withQt then ''
mkdir -p $out/Applications
mv $out/bin/Wireshark.app $out/Applications/Wireshark.app
for f in $(find $out/Applications/Wireshark.app/Contents/PlugIns -name "*.so"); do
for dylib in $(otool -L $f | awk '/^\t*lib/ {print $1}'); do
install_name_tool -change "$dylib" "$out/lib/$dylib" "$f"
done
done
wrapQtApp $out/Applications/Wireshark.app/Contents/MacOS/Wireshark
'' else optionalString withQt ''
install -Dm644 -t $out/share/applications ../wireshark.desktop
install -Dm644 ../image/wsicon.svg $out/share/icons/wireshark.svg
mkdir $dev/include/{epan/{wmem,ftypes,dfilter},wsutil,wiretap} -pv
cp config.h $dev/include/
cp ../ws_*.h $dev/include
cp ../epan/*.h $dev/include/epan/
cp ../epan/wmem/*.h $dev/include/epan/wmem/
cp ../epan/ftypes/*.h $dev/include/epan/ftypes/
cp ../epan/dfilter/*.h $dev/include/epan/dfilter/
cp ../wsutil/*.h $dev/include/wsutil/
cp ../wiretap/*.h $dev/include/wiretap
'');
dontFixCmake = true;
shellHook = ''
# to be able to run the resulting binary
export WIRESHARK_RUN_FROM_BUILD_DIRECTORY=1
'';
meta = with lib; {
homepage = "https://www.wireshark.org/";
description = "Powerful network protocol analyzer";
license = licenses.gpl2;
longDescription = ''
Wireshark (formerly known as "Ethereal") is a powerful network
protocol analyzer developed by an international team of networking
experts. It runs on UNIX, macOS and Windows.
'';
platforms = platforms.linux ++ platforms.darwin;
maintainers = with maintainers; [ bjornfor fpletz ];
};
}