Created
November 2, 2017 00:33
-
-
Save bencoman/e5020f29d5f3221221c33f5787074d75 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
{ stdenv, ninja, which, nodejs, fetchurl, gnutar | |
# default dependencies | |
, bzip2, flac, speex, libopus | |
, libevent, expat, libjpeg, snappy | |
, libpng, libcap | |
, xdg_utils, yasm, minizip, libwebp | |
, libusb1, pciutils, nss, re2, zlib, libvpx | |
, python2Packages, perl, pkgconfig | |
, nspr, systemd, kerberos | |
, utillinux, alsaLib | |
, bison, gperf | |
, glib, gtk2, gtk3, dbus_glib | |
, libXScrnSaver, libXcursor, libXtst, mesa | |
, protobuf, speechd, libXdamage, cups | |
, ffmpeg, harfbuzz, harfbuzz-icu, libxslt, libxml2 | |
# optional dependencies | |
, libgcrypt ? null # gnomeSupport || cupsSupport | |
, libexif ? null # only needed for Chromium before version 51 | |
# package customization | |
, enableNaCl ? false | |
, enableHotwording ? false | |
, enableWideVine ? false | |
, gnomeSupport ? false, gnome ? null | |
, gnomeKeyringSupport ? false, libgnome_keyring3 ? null | |
, proprietaryCodecs ? true | |
, cupsSupport ? true | |
, pulseSupport ? false, libpulseaudio ? null | |
, upstream-info | |
}: | |
buildFun: | |
with stdenv.lib; | |
# see http://www.linuxfromscratch.org/blfs/view/cvs/xsoft/chromium.html | |
let | |
# The additional attributes for creating derivations based on the chromium | |
# source tree. | |
extraAttrs = buildFun base; | |
mkGnFlags = | |
let | |
# Serialize Nix types into GN types according to this document: | |
# https://chromium.googlesource.com/chromium/src/+/master/tools/gn/docs/language.md | |
mkGnString = value: "\"${escape ["\"" "$" "\\"] value}\""; | |
sanitize = value: | |
if value == true then "true" | |
else if value == false then "false" | |
else if isList value then "[${concatMapStringsSep ", " sanitize value}]" | |
else if isInt value then toString value | |
else if isString value then mkGnString value | |
else throw "Unsupported type for GN value `${value}'."; | |
toFlag = key: value: "${key}=${sanitize value}"; | |
in attrs: concatStringsSep " " (attrValues (mapAttrs toFlag attrs)); | |
gnSystemLibraries = [ | |
"flac" "harfbuzz-ng" "libwebp" "libxslt" "yasm" "opus" "snappy" "libpng" "zlib" | |
# "libjpeg" # fails with multiple undefined references to chromium_jpeg_* | |
# "re2" # fails with linker errors | |
# "ffmpeg" # https://crbug.com/731766 | |
]; | |
opusWithCustomModes = libopus.override { | |
withCustomModes = true; | |
}; | |
defaultDependencies = [ | |
bzip2 flac speex opusWithCustomModes | |
libevent expat libjpeg snappy | |
libpng libcap | |
xdg_utils yasm minizip libwebp | |
libusb1 re2 zlib | |
ffmpeg harfbuzz-icu libxslt libxml2 | |
]; | |
# build paths and release info | |
packageName = extraAttrs.packageName or extraAttrs.name; | |
buildType = "Release"; | |
buildPath = "out/${buildType}"; | |
libExecPath = "$out/libexec/${packageName}"; | |
freetype_source = fetchurl { | |
url = http://anduin.linuxfromscratch.org/BLFS/other/chromium-freetype.tar.xz; | |
sha256 = "1vhslc4xg0d6wzlsi99zpah2xzjziglccrxn55k7qna634wyxg77"; | |
}; | |
versionRange = min-version: upto-version: | |
let inherit (upstream-info) version; | |
result = versionAtLeast version min-version && versionOlder version upto-version; | |
stable-version = (import ./upstream-info.nix).stable.version; | |
in if versionAtLeast stable-version upto-version | |
then warn "chromium: stable version ${stable-version} is newer than a patchset bounded at ${upto-version}. You can safely delete it." | |
result | |
else result; | |
base = rec { | |
name = "${packageName}-${version}"; | |
inherit (upstream-info) version; | |
inherit packageName buildType buildPath; | |
src = upstream-info.main; | |
nativeBuildInputs = [ | |
ninja which python2Packages.python perl pkgconfig | |
python2Packages.ply python2Packages.jinja2 nodejs | |
gnutar | |
]; | |
buildInputs = defaultDependencies ++ [ | |
nspr nss systemd | |
utillinux alsaLib | |
bison gperf kerberos | |
glib gtk2 gtk3 dbus_glib | |
libXScrnSaver libXcursor libXtst mesa | |
pciutils protobuf speechd libXdamage | |
] ++ optional gnomeKeyringSupport libgnome_keyring3 | |
++ optionals gnomeSupport [ gnome.GConf libgcrypt ] | |
++ optionals cupsSupport [ libgcrypt cups ] | |
++ optional pulseSupport libpulseaudio; | |
patches = [ | |
./patches/nix_plugin_paths_52.patch | |
# To enable ChromeCast, go to chrome://flags and set "Load Media Router Component Extension" to Enabled | |
# Fixes Chromecast: https://bugs.chromium.org/p/chromium/issues/detail?id=734325 | |
./patches/fix_network_api_crash.patch | |
] # As major versions are added, you can trawl the gentoo and arch repos at | |
# https://gitweb.gentoo.org/repo/gentoo.git/plain/www-client/chromium/ | |
# https://git.archlinux.org/svntogit/packages.git/tree/trunk?h=packages/chromium | |
# for updated patches and hints about build flags | |
++ optionals (versionRange "61" "62") [ | |
./patches/chromium-gn-bootstrap-r14.patch | |
./patches/chromium-gcc-r1.patch | |
./patches/chromium-atk-r1.patch | |
./patches/chromium-gcc5-r1.patch | |
] | |
++ optionals (versionRange "62" "63") [ | |
./patches/chromium-gn-bootstrap-r17.patch | |
./patches/chromium-gcc5-r2.patch | |
./patches/chromium-glibc2.26-r1.patch | |
] | |
++ optionals (versionAtLeast version "63") [ | |
./patches/chromium-gn-bootstrap-r19.patch | |
./patches/chromium-gcc5-r2.patch | |
./patches/chromium-glibc2.26-r1.patch | |
./patches/chromium-sysroot-r1.patch | |
] | |
++ optional enableWideVine ./patches/widevine.patch; | |
postPatch = '' | |
# We want to be able to specify where the sandbox is via CHROME_DEVEL_SANDBOX | |
substituteInPlace sandbox/linux/suid/client/setuid_sandbox_host.cc \ | |
--replace \ | |
'return sandbox_binary;' \ | |
'return base::FilePath(GetDevelSandboxPath());' | |
sed -i -e '/lib_loader.*Load/s!"\(libudev\.so\)!"${systemd.lib}/lib/\1!' \ | |
device/udev_linux/udev?_loader.cc | |
sed -i -e '/libpci_loader.*Load/s!"\(libpci\.so\)!"${pciutils}/lib/\1!' \ | |
gpu/config/gpu_info_collector_linux.cc | |
sed -i -re 's/([^:])\<(isnan *\()/\1std::\2/g' \ | |
chrome/browser/ui/webui/engagement/site_engagement_ui.cc | |
sed -i -e '/#include/ { | |
i #include <algorithm> | |
:l; n; bl | |
}' gpu/config/gpu_control_list.cc | |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Halfway through trying to get pdfium to build under NixOS.