diff --git a/pkgs/applications/networking/browsers/chromium/browser.nix b/pkgs/applications/networking/browsers/chromium/browser.nix index e41c3b777f8..29fdb117733 100644 --- a/pkgs/applications/networking/browsers/chromium/browser.nix +++ b/pkgs/applications/networking/browsers/chromium/browser.nix @@ -1,47 +1,8 @@ -{ stdenv, mkChromiumDerivation, channel, upstream-info, gcc, glib, nspr, nss, patchelfUnstable, enableWideVine }: +{ stdenv, mkChromiumDerivation, channel }: with stdenv.lib; -let - mkrpath = p: "${makeSearchPathOutput "lib" "lib64" p}:${makeLibraryPath p}"; - widevine = stdenv.mkDerivation { - name = "chromium-binary-plugin-widevine"; - - src = upstream-info.binary; - - nativeBuildInputs = [ patchelfUnstable ]; - - phases = [ "unpackPhase" "patchPhase" "installPhase" "checkPhase" ]; - - unpackCmd = let - chan = if upstream-info.channel == "dev" then "chrome-unstable" - else if upstream-info.channel == "stable" then "chrome" - else "chrome-${upstream-info.channel}"; - in '' - mkdir -p plugins - ar p "$src" data.tar.xz | tar xJ -C plugins --strip-components=4 \ - ./opt/google/${chan}/libwidevinecdm.so - ''; - - doCheck = true; - checkPhase = '' - ! find -iname '*.so' -exec ldd {} + | grep 'not found' - ''; - - PATCH_RPATH = mkrpath [ gcc.cc glib nspr nss ]; - - patchPhase = '' - patchelf --set-rpath "$PATCH_RPATH" libwidevinecdm.so - ''; - - installPhase = '' - install -vD libwidevinecdm.so \ - "$out/lib/libwidevinecdm.so" - ''; - - meta.platforms = platforms.x86_64; - }; -in mkChromiumDerivation (base: rec { +mkChromiumDerivation (base: rec { name = "chromium-browser"; packageName = "chromium"; buildTargets = [ "mksnapshot" "chrome_sandbox" "chrome" ]; @@ -91,8 +52,6 @@ in mkChromiumDerivation (base: rec { -e '/\[Desktop Entry\]/a\' \ -e 'StartupWMClass=chromium-browser' \ $out/share/applications/chromium-browser.desktop - - ${optionalString enableWideVine "ln -s ${widevine}/lib/libwidevinecdm.so \"$libExecPath/libwidevinecdm.so\""} ''; passthru = { inherit sandboxExecutableName; }; diff --git a/pkgs/applications/networking/browsers/chromium/common.nix b/pkgs/applications/networking/browsers/chromium/common.nix index 45c12598512..552d3fa65f4 100644 --- a/pkgs/applications/networking/browsers/chromium/common.nix +++ b/pkgs/applications/networking/browsers/chromium/common.nix @@ -24,7 +24,6 @@ # package customization , enableNaCl ? false -, enableWideVine ? false , useVaapi ? false , gnomeSupport ? false, gnome ? null , gnomeKeyringSupport ? false, libgnome-keyring3 ? null @@ -133,11 +132,12 @@ let ++ optional pulseSupport libpulseaudio ++ optional (versionAtLeast version "72") jdk.jre; - patches = optional enableWideVine ./patches/widevine.patch ++ [ + patches = [ ./patches/nix_plugin_paths_68.patch ./patches/remove-webp-include-69.patch ./patches/jumbo-sorted.patch ./patches/no-build-timestamps.patch + ./patches/widevine.patch # Unfortunately, chromium regularly breaks on major updates and # then needs various patches backported in order to be compiled with GCC. @@ -245,7 +245,7 @@ let use_gnome_keyring = gnomeKeyringSupport; use_gio = gnomeSupport; enable_nacl = enableNaCl; - enable_widevine = enableWideVine; + enable_widevine = true; use_cups = cupsSupport; treat_warnings_as_errors = false; diff --git a/pkgs/applications/networking/browsers/chromium/default.nix b/pkgs/applications/networking/browsers/chromium/default.nix index b88772bbd31..0296021f74c 100644 --- a/pkgs/applications/networking/browsers/chromium/default.nix +++ b/pkgs/applications/networking/browsers/chromium/default.nix @@ -2,6 +2,8 @@ , makeWrapper, ed , glib, gtk3, gnome3, gsettings-desktop-schemas , libva ? null +, gcc, nspr, nss, patchelfUnstable, runCommand +, lib # package customization , channel ? "stable" @@ -34,23 +36,71 @@ in let mkChromiumDerivation = callPackage ./common.nix { inherit enableNaCl gnomeSupport gnome gnomeKeyringSupport proprietaryCodecs cupsSupport pulseSupport - useVaapi - enableWideVine; + useVaapi; }; - browser = callPackage ./browser.nix { inherit channel enableWideVine; }; + browser = callPackage ./browser.nix { inherit channel; }; plugins = callPackage ./plugins.nix { inherit enablePepperFlash; }; }; + mkrpath = p: "${lib.makeSearchPathOutput "lib" "lib64" p}:${lib.makeLibraryPath p}"; + widevine = let upstream-info = chromium.upstream-info; in stdenv.mkDerivation { + name = "chromium-binary-plugin-widevine"; + + src = upstream-info.binary; + + nativeBuildInputs = [ patchelfUnstable ]; + + phases = [ "unpackPhase" "patchPhase" "installPhase" "checkPhase" ]; + + unpackCmd = let + chan = if upstream-info.channel == "dev" then "chrome-unstable" + else if upstream-info.channel == "stable" then "chrome" + else "chrome-${upstream-info.channel}"; + in '' + mkdir -p plugins + ar p "$src" data.tar.xz | tar xJ -C plugins --strip-components=4 \ + ./opt/google/${chan}/libwidevinecdm.so + ''; + + doCheck = true; + checkPhase = '' + ! find -iname '*.so' -exec ldd {} + | grep 'not found' + ''; + + PATCH_RPATH = mkrpath [ gcc.cc glib nspr nss ]; + + patchPhase = '' + patchelf --set-rpath "$PATCH_RPATH" libwidevinecdm.so + ''; + + installPhase = '' + install -vD libwidevinecdm.so \ + "$out/lib/libwidevinecdm.so" + ''; + + meta.platforms = lib.platforms.x86_64; + }; + suffix = if channel != "stable" then "-" + channel else ""; sandboxExecutableName = chromium.browser.passthru.sandboxExecutableName; version = chromium.browser.version; + chromiumWV = let browser = chromium.browser; in if enableWideVine then + runCommand (browser.name + "-wv") { version = browser.version; } + '' + mkdir -p $out + cp -R ${browser}/* $out/ + chmod u+w $out/libexec/chromium* + cp ${widevine}/lib/libwidevinecdm.so $out/libexec/chromium/ + # patchelf? + '' + else browser; in stdenv.mkDerivation { name = "chromium${suffix}-${version}"; inherit version; @@ -68,7 +118,7 @@ in stdenv.mkDerivation { outputs = ["out" "sandbox"]; buildCommand = let - browserBinary = "${chromium.browser}/libexec/chromium/chromium"; + browserBinary = "${chromiumWV}/libexec/chromium/chromium"; getWrapperFlags = plugin: "$(< \"${plugin}/nix-support/wrapper-flags\")"; libPath = stdenv.lib.makeLibraryPath ([] ++ stdenv.lib.optional useVaapi libva