ced5afc38c
This brings a new stable version 40.0.2214.91 along with a beta update to version 41.0.2272.16, the dev channel is still stuck at version 41.0.2272.12 and within the next days will jump to version 42. For this reason, I've done some cheating here and brought the beta channel in par with the dev channel, because dev is older than beta on OmahaProxy. Here's an overview of the channel upgrades: stable: 39.0.2171.65 -> 40.0.2214.91 [1] beta: 40.0.2214.10 -> 41.0.2272.16 [1] [2] [3] dev: 41.0.2224.3 -> 41.0.2272.16 [1] [2] [3] [1]: We needed to patch in locations of lib{pci,udev}.so, because Chromium tries to load them at runtime. For version 41 startup will fail if it is unable to load libudev, but it also has the advantage that this fixes GPU detection using libpci in the stable version, which in turn could fix a few bugs on NixOS. [2]: The upstream Debian package for the binary plugins now uses XZ compression for the enclosed data tarball. [3]: Chromium 41 needs {shapshot,natives}_blob.bin in order to start up, so let's cp it among with the .pak files to avoid adding a conditional for version 40. The release annoucement of the stable channel update can be found here: http://googlechromereleases.blogspot.de/2015/01/stable-update.html Note that this release contains 62 security fixes(!) and I'm hereby apologizing for the delay of this update. Signed-off-by: aszlig <aszlig@redmoonstudios.org>
100 lines
3.2 KiB
Nix
100 lines
3.2 KiB
Nix
{ stdenv
|
|
, enablePepperFlash ? false
|
|
, enableWideVine ? false
|
|
|
|
, source
|
|
}:
|
|
|
|
with stdenv.lib;
|
|
|
|
let
|
|
plugins = stdenv.mkDerivation {
|
|
name = "chromium-binary-plugins";
|
|
|
|
# XXX: Only temporary and has to be version-specific
|
|
src = source.plugins;
|
|
|
|
phases = [ "unpackPhase" "patchPhase" "installPhase" "checkPhase" ];
|
|
outputs = [ "flash" "widevine" ];
|
|
|
|
unpackCmd = let
|
|
chan = if source.channel == "dev" then "chrome-unstable"
|
|
else if source.channel == "stable" then "chrome"
|
|
else "chrome-${source.channel}";
|
|
cext = if versionOlder source.version "41.0.0.0" then "lzma" else "xz";
|
|
in ''
|
|
mkdir -p plugins
|
|
ar p "$src" data.tar.${cext} | tar xJ -C plugins --strip-components=4 \
|
|
./opt/google/${chan}/PepperFlash \
|
|
./opt/google/${chan}/libwidevinecdm.so \
|
|
./opt/google/${chan}/libwidevinecdmadapter.so
|
|
'';
|
|
|
|
doCheck = true;
|
|
checkPhase = ''
|
|
! find -iname '*.so' -exec ldd {} + | grep 'not found'
|
|
'';
|
|
|
|
patchPhase = let
|
|
rpaths = [ stdenv.cc.gcc ];
|
|
mkrpath = p: "${makeSearchPath "lib64" p}:${makeSearchPath "lib" p}";
|
|
in ''
|
|
for sofile in PepperFlash/libpepflashplayer.so \
|
|
libwidevinecdm.so libwidevinecdmadapter.so; do
|
|
chmod +x "$sofile"
|
|
patchelf --set-rpath "${mkrpath rpaths}" "$sofile"
|
|
done
|
|
|
|
patchelf --set-rpath "$widevine/lib:${mkrpath rpaths}" \
|
|
libwidevinecdmadapter.so
|
|
'';
|
|
|
|
installPhase = let
|
|
wvName = "Widevine Content Decryption Module";
|
|
wvDescription = "Playback of encrypted HTML audio/video content";
|
|
wvMimeTypes = "application/x-ppapi-widevine-cdm";
|
|
wvModule = "$widevine/lib/libwidevinecdmadapter.so";
|
|
wvInfo = "#${wvName}#${wvDescription}:${wvMimeTypes}";
|
|
in ''
|
|
flashVersion="$(
|
|
sed -n -r 's/.*"version": "([^"]+)",.*/\1/p' PepperFlash/manifest.json
|
|
)"
|
|
|
|
install -vD PepperFlash/libpepflashplayer.so \
|
|
"$flash/lib/libpepflashplayer.so"
|
|
mkdir -p "$flash/nix-support"
|
|
cat > "$flash/nix-support/chromium-plugin.nix" <<NIXOUT
|
|
{ flags = [
|
|
"--ppapi-flash-path='$flash/lib/libpepflashplayer.so'"
|
|
"--ppapi-flash-version=$flashVersion"
|
|
];
|
|
}
|
|
NIXOUT
|
|
|
|
install -vD libwidevinecdm.so \
|
|
"$widevine/lib/libwidevinecdm.so"
|
|
install -vD libwidevinecdmadapter.so \
|
|
"$widevine/lib/libwidevinecdmadapter.so"
|
|
mkdir -p "$widevine/nix-support"
|
|
cat > "$widevine/nix-support/chromium-plugin.nix" <<NIXOUT
|
|
{ flags = [ "--register-pepper-plugins='${wvModule}${wvInfo}'" ];
|
|
envVars.NIX_CHROMIUM_PLUGIN_PATH_WIDEVINE = "$widevine/lib";
|
|
}
|
|
NIXOUT
|
|
'';
|
|
|
|
passthru = let
|
|
enabledPlugins = optional enablePepperFlash plugins.flash
|
|
++ optional enableWideVine plugins.widevine;
|
|
getNix = plugin: import "${plugin}/nix-support/chromium-plugin.nix";
|
|
mergeAttrsets = let
|
|
f = v: if all isAttrs v then mergeAttrsets v
|
|
else if all isList v then concatLists v
|
|
else if tail v == [] then head v
|
|
else head (tail v);
|
|
in fold (l: r: zipAttrsWith (_: f) [ l r ]) {};
|
|
in {
|
|
settings = mergeAttrsets (map getNix enabledPlugins);
|
|
};
|
|
};
|
|
in plugins
|