nixpkgs/pkgs/development/libraries/webkitgtk/default.nix
Adam Joseph 43f8a58df8 webkitgtk: honor systemdSupport
This commit exposes support for compilation without systemd,
controlled by the global systemdSupport argument.  This argument is
understood by many other nixpkgs expressions and can be set globally
in ~/.config/nixpkgs/config.nix.
2022-02-26 15:48:02 -08:00

224 lines
4.7 KiB
Nix

{ lib
, stdenv
, runCommand
, fetchurl
, perl
, python3
, ruby
, bison
, gperf
, cmake
, ninja
, pkg-config
, gettext
, gobject-introspection
, libnotify
, gnutls
, libgcrypt
, libgpg-error
, gtk3
, wayland
, libwebp
, enchant2
, xorg
, libxkbcommon
, libepoxy
, at-spi2-core
, libxml2
, libsoup
, libsecret
, libxslt
, harfbuzz
, libpthreadstubs
, pcre
, nettle
, libtasn1
, p11-kit
, libidn
, libedit
, readline
, apple_sdk
, libGL
, libGLU
, mesa
, libintl
, lcms2
, libmanette
, openjpeg
, geoclue2
, sqlite
, enableGLES ? true
, gst-plugins-base
, gst-plugins-bad
, woff2
, bubblewrap
, libseccomp
, systemd
, xdg-dbus-proxy
, substituteAll
, glib
, addOpenGLRunpath
, enableGeoLocation ? true
, withLibsecret ? true
, systemdSupport ? stdenv.isLinux
}:
stdenv.mkDerivation rec {
pname = "webkitgtk";
version = "2.34.6";
outputs = [ "out" "dev" ];
separateDebugInfo = stdenv.isLinux;
src = fetchurl {
url = "https://webkitgtk.org/releases/${pname}-${version}.tar.xz";
sha256 = "sha256-a8j9A0qtBDKiRZzk/H7iWtZaSSTGGL+Nk7UrDBqEwfY=";
};
patches = lib.optionals stdenv.isLinux [
(substituteAll {
src = ./fix-bubblewrap-paths.patch;
inherit (builtins) storeDir;
inherit (addOpenGLRunpath) driverLink;
})
./libglvnd-headers.patch
];
preConfigure = lib.optionalString (stdenv.hostPlatform != stdenv.buildPlatform) ''
# Ignore gettext in cmake_prefix_path so that find_program doesn't
# pick up the wrong gettext. TODO: Find a better solution for
# this, maybe make cmake not look up executables in
# CMAKE_PREFIX_PATH.
cmakeFlags+=" -DCMAKE_IGNORE_PATH=${lib.getBin gettext}/bin"
'';
nativeBuildInputs = [
bison
cmake
gettext
gobject-introspection
gperf
ninja
perl
perl.pkgs.FileCopyRecursive # used by copy-user-interface-resources.pl
pkg-config
python3
ruby
glib # for gdbus-codegen
] ++ lib.optionals stdenv.isLinux [
wayland # for wayland-scanner
];
buildInputs = [
at-spi2-core
enchant2
libepoxy
gnutls
gst-plugins-bad
gst-plugins-base
harfbuzz
libGL
libGLU
mesa # for libEGL headers
libgcrypt
libgpg-error
libidn
libintl
lcms2
libnotify
libpthreadstubs
libtasn1
libwebp
libxkbcommon
libxml2
libxslt
nettle
openjpeg
p11-kit
pcre
sqlite
woff2
] ++ (with xorg; [
libXdamage
libXdmcp
libXt
libXtst
]) ++ lib.optionals stdenv.isDarwin [
libedit
readline
] ++ lib.optional (stdenv.isDarwin && !stdenv.isAarch64) (
# Pull a header that contains a definition of proc_pid_rusage().
# (We pick just that one because using the other headers from `sdk` is not
# compatible with our C++ standard library. This header is already in
# the standard library on aarch64)
runCommand "${pname}_headers" { } ''
install -Dm444 "${lib.getDev apple_sdk.sdk}"/include/libproc.h "$out"/include/libproc.h
''
) ++ lib.optionals stdenv.isLinux [
bubblewrap
libseccomp
libmanette
wayland
xdg-dbus-proxy
] ++ lib.optionals systemdSupport [
systemd
] ++ lib.optionals enableGeoLocation [
geoclue2
] ++ lib.optionals withLibsecret [
libsecret
];
propagatedBuildInputs = [
gtk3
libsoup
];
cmakeFlags = let
cmakeBool = x: if x then "ON" else "OFF";
in [
"-DENABLE_INTROSPECTION=ON"
"-DPORT=GTK"
"-DUSE_LIBHYPHEN=OFF"
"-DUSE_WPE_RENDERER=OFF"
"-DUSE_SOUP2=${cmakeBool (lib.versions.major libsoup.version == "2")}"
"-DUSE_LIBSECRET=${cmakeBool withLibsecret}"
] ++ lib.optionals stdenv.isDarwin [
"-DENABLE_GAMEPAD=OFF"
"-DENABLE_GTKDOC=OFF"
"-DENABLE_MINIBROWSER=OFF"
"-DENABLE_QUARTZ_TARGET=ON"
"-DENABLE_VIDEO=ON"
"-DENABLE_WEBGL=OFF"
"-DENABLE_WEB_AUDIO=OFF"
"-DENABLE_X11_TARGET=OFF"
"-DUSE_APPLE_ICU=OFF"
"-DUSE_OPENGL_OR_ES=OFF"
"-DUSE_SYSTEM_MALLOC=ON"
] ++ lib.optionals (!systemdSupport) [
"-DUSE_SYSTEMD=OFF"
] ++ lib.optionals (stdenv.isLinux && enableGLES) [
"-DENABLE_GLES2=ON"
];
postPatch = ''
patchShebangs .
'' + lib.optionalString stdenv.isDarwin ''
# It needs malloc_good_size.
sed 22i'#include <malloc/malloc.h>' -i Source/WTF/wtf/FastMalloc.h
# <CommonCrypto/CommonRandom.h> needs CCCryptorStatus.
sed 43i'#include <CommonCrypto/CommonCryptor.h>' -i Source/WTF/wtf/RandomDevice.cpp
'';
requiredSystemFeatures = [ "big-parallel" ];
meta = with lib; {
description = "Web content rendering engine, GTK port";
homepage = "https://webkitgtk.org/";
license = licenses.bsd2;
platforms = platforms.linux ++ platforms.darwin;
maintainers = teams.gnome.members;
broken = stdenv.isDarwin;
};
}