chromium: Decouple browser from default.nix.
This currently only passes through the arguments and is nothing more than the foundation of the new structure. In essence, I want to have a really small default.nix which is then going down into the respective subparts that are isolated from each other. Signed-off-by: aszlig <aszlig@redmoonstudios.org>
This commit is contained in:
parent
c2abe4da6c
commit
88a939c2d1
361
pkgs/applications/networking/browsers/chromium/browser.nix
Normal file
361
pkgs/applications/networking/browsers/chromium/browser.nix
Normal file
@ -0,0 +1,361 @@
|
|||||||
|
{ stdenv, fetchurl, makeWrapper, ninja, which
|
||||||
|
|
||||||
|
# default dependencies
|
||||||
|
, bzip2, flac, speex, icu, libopus
|
||||||
|
, libevent, expat, libjpeg, snappy
|
||||||
|
, libpng, libxml2, libxslt, v8
|
||||||
|
, xdg_utils, yasm, minizip, libwebp
|
||||||
|
, libusb1, libexif, pciutils
|
||||||
|
|
||||||
|
, python, pythonPackages, perl, pkgconfig
|
||||||
|
, nspr, udev, krb5
|
||||||
|
, utillinux, alsaLib
|
||||||
|
, gcc, bison, gperf
|
||||||
|
, glib, gtk, dbus_glib
|
||||||
|
, libXScrnSaver, libXcursor, libXtst, mesa
|
||||||
|
, protobuf, speechd, libXdamage
|
||||||
|
|
||||||
|
# optional dependencies
|
||||||
|
, libgcrypt ? null # gnomeSupport || cupsSupport
|
||||||
|
|
||||||
|
# package customization
|
||||||
|
, channel ? "stable"
|
||||||
|
, enableSELinux ? false, libselinux ? null
|
||||||
|
, enableNaCl ? false
|
||||||
|
, useOpenSSL ? false, nss ? null, openssl ? null
|
||||||
|
, gnomeSupport ? false, gnome ? null
|
||||||
|
, gnomeKeyringSupport ? false, libgnome_keyring3 ? null
|
||||||
|
, proprietaryCodecs ? true
|
||||||
|
, enablePepperFlash ? false
|
||||||
|
, enablePepperPDF ? false
|
||||||
|
, cupsSupport ? false
|
||||||
|
, pulseSupport ? false, pulseaudio ? null
|
||||||
|
}:
|
||||||
|
|
||||||
|
with stdenv.lib;
|
||||||
|
|
||||||
|
let
|
||||||
|
src = with getAttr channel (import ./sources.nix); stdenv.mkDerivation {
|
||||||
|
name = "chromium-source-${version}";
|
||||||
|
|
||||||
|
src = fetchurl {
|
||||||
|
inherit url sha256;
|
||||||
|
};
|
||||||
|
|
||||||
|
buildInputs = [ python ]; # cannot patch shebangs otherwise
|
||||||
|
|
||||||
|
phases = [ "unpackPhase" "patchPhase" "installPhase" ];
|
||||||
|
|
||||||
|
opensslPatches = optional useOpenSSL openssl.patches;
|
||||||
|
|
||||||
|
prePatch = "patchShebangs .";
|
||||||
|
|
||||||
|
patches = singleton ./sandbox_userns_31.patch;
|
||||||
|
|
||||||
|
postPatch = ''
|
||||||
|
sed -i -r \
|
||||||
|
-e 's/-f(stack-protector)(-all)?/-fno-\1/' \
|
||||||
|
-e 's|/bin/echo|echo|' \
|
||||||
|
-e "/python_arch/s/: *'[^']*'/: '""'/" \
|
||||||
|
build/common.gypi chrome/chrome_tests.gypi
|
||||||
|
sed -i '/not RunGN/,+1d' build/gyp_chromium
|
||||||
|
sed -i -e 's|/usr/bin/gcc|gcc|' \
|
||||||
|
third_party/WebKit/Source/build/scripts/scripts.gypi \
|
||||||
|
third_party/WebKit/Source/build/scripts/preprocessor.pm
|
||||||
|
'' + optionalString useOpenSSL ''
|
||||||
|
cat $opensslPatches | patch -p1 -d third_party/openssl/openssl
|
||||||
|
'' + optionalString (!versionOlder version "34.0.0.0") ''
|
||||||
|
sed -i '/import.*depot/d' build/gyp_chromium
|
||||||
|
'';
|
||||||
|
|
||||||
|
outputs = [ "out" "sandbox" "bundled" "main" ];
|
||||||
|
installPhase = ''
|
||||||
|
ensureDir "$out" "$sandbox" "$bundled" "$main"
|
||||||
|
|
||||||
|
header "copying browser main sources to $main"
|
||||||
|
find . -mindepth 1 -maxdepth 1 \
|
||||||
|
\! -path ./sandbox \
|
||||||
|
\! -path ./third_party \
|
||||||
|
\! -path ./build \
|
||||||
|
\! -path ./tools \
|
||||||
|
\! -name '.*' \
|
||||||
|
-print | xargs cp -rt "$main"
|
||||||
|
stopNest
|
||||||
|
|
||||||
|
header "copying sandbox components to $sandbox"
|
||||||
|
cp -rt "$sandbox" sandbox/*
|
||||||
|
stopNest
|
||||||
|
|
||||||
|
header "copying third party sources to $bundled"
|
||||||
|
cp -rt "$bundled" third_party/*
|
||||||
|
stopNest
|
||||||
|
|
||||||
|
header "copying build requisites to $out"
|
||||||
|
cp -rt "$out" build tools
|
||||||
|
stopNest
|
||||||
|
|
||||||
|
rm -rf "$out/tools/gyp" # XXX: Don't even copy it in the first place.
|
||||||
|
'';
|
||||||
|
|
||||||
|
passthru = {
|
||||||
|
inherit version;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
mkGypFlags =
|
||||||
|
let
|
||||||
|
sanitize = value:
|
||||||
|
if value == true then "1"
|
||||||
|
else if value == false then "0"
|
||||||
|
else "${value}";
|
||||||
|
toFlag = key: value: "-D${key}=${sanitize value}";
|
||||||
|
in attrs: concatStringsSep " " (attrValues (mapAttrs toFlag attrs));
|
||||||
|
|
||||||
|
gypFlagsUseSystemLibs = {
|
||||||
|
use_system_bzip2 = true;
|
||||||
|
use_system_flac = true;
|
||||||
|
use_system_libevent = true;
|
||||||
|
use_system_libexpat = true;
|
||||||
|
use_system_libexif = true;
|
||||||
|
use_system_libjpeg = true;
|
||||||
|
use_system_libpng = true;
|
||||||
|
use_system_libwebp = true;
|
||||||
|
use_system_libxml = true;
|
||||||
|
use_system_opus = true;
|
||||||
|
use_system_snappy = true;
|
||||||
|
use_system_speex = true;
|
||||||
|
use_system_ssl = useOpenSSL;
|
||||||
|
use_system_stlport = true;
|
||||||
|
use_system_xdg_utils = true;
|
||||||
|
use_system_yasm = true;
|
||||||
|
use_system_zlib = true;
|
||||||
|
use_system_protobuf = true;
|
||||||
|
|
||||||
|
use_system_harfbuzz = false;
|
||||||
|
use_system_icu = false; # Doesn't support ICU 52 yet.
|
||||||
|
use_system_libusb = false; # http://crbug.com/266149
|
||||||
|
use_system_skia = false;
|
||||||
|
use_system_sqlite = false; # http://crbug.com/22208
|
||||||
|
use_system_v8 = !versionOlder src.version "34.0.0.0";
|
||||||
|
};
|
||||||
|
|
||||||
|
defaultDependencies = [
|
||||||
|
bzip2 flac speex icu libopus
|
||||||
|
libevent expat libjpeg snappy
|
||||||
|
libpng libxml2 libxslt v8
|
||||||
|
xdg_utils yasm minizip libwebp
|
||||||
|
libusb1 libexif
|
||||||
|
];
|
||||||
|
|
||||||
|
sandbox = import ./sandbox.nix {
|
||||||
|
inherit stdenv;
|
||||||
|
src = src.sandbox;
|
||||||
|
binary = "${packageName}_sandbox";
|
||||||
|
};
|
||||||
|
|
||||||
|
binaryPlugins = stdenv.mkDerivation {
|
||||||
|
name = "chromium-binary-plugins";
|
||||||
|
|
||||||
|
# XXX: Only temporary and has to be version-specific
|
||||||
|
src = fetchurl {
|
||||||
|
url = "https://dl.google.com/linux/chrome/deb/pool/main/g/"
|
||||||
|
+ "google-chrome-unstable/google-chrome-unstable_"
|
||||||
|
+ "35.0.1897.2-1_amd64.deb";
|
||||||
|
sha1 = "b68683fc5321d10536e4135c266b14894b7668ed";
|
||||||
|
};
|
||||||
|
|
||||||
|
phases = [ "unpackPhase" "patchPhase" "checkPhase" "installPhase" ];
|
||||||
|
outputs = [ "pdf" "flash" ];
|
||||||
|
|
||||||
|
unpackCmd = ''
|
||||||
|
ensureDir plugins
|
||||||
|
ar p "$src" data.tar.lzma | tar xJ -C plugins --strip-components=4 \
|
||||||
|
./opt/google/chrome-unstable/PepperFlash \
|
||||||
|
./opt/google/chrome-unstable/libpdf.so
|
||||||
|
'';
|
||||||
|
|
||||||
|
doCheck = true;
|
||||||
|
checkPhase = ''
|
||||||
|
! find -iname '*.so' -exec ldd {} + | grep 'not found'
|
||||||
|
'';
|
||||||
|
|
||||||
|
patchPhase = let
|
||||||
|
rpaths = [ stdenv.gcc.gcc ];
|
||||||
|
mkrpath = p: "${makeSearchPath "lib64" p}:${makeSearchPath "lib" p}";
|
||||||
|
in ''
|
||||||
|
for sofile in PepperFlash/libpepflashplayer.so libpdf.so; do
|
||||||
|
chmod +x "$sofile"
|
||||||
|
patchelf --set-rpath "${mkrpath rpaths}" "$sofile"
|
||||||
|
done
|
||||||
|
'';
|
||||||
|
|
||||||
|
installPhase = let
|
||||||
|
pdfName = "Chrome PDF Viewer";
|
||||||
|
pdfDescription = "Portable Document Format";
|
||||||
|
pdfMimeTypes = concatStringsSep ";" [
|
||||||
|
"application/pdf"
|
||||||
|
"application/x-google-chrome-print-preview-pdf"
|
||||||
|
];
|
||||||
|
pdfInfo = "#${pdfName}#${pdfDescription};${pdfMimeTypes}";
|
||||||
|
in ''
|
||||||
|
install -vD libpdf.so "$pdf/lib/libpdf.so"
|
||||||
|
ensureDir "$pdf/nix-support"
|
||||||
|
echo "--register-pepper-plugins='$pdf/lib/libpdf.so${pdfInfo}'" \
|
||||||
|
> "$pdf/nix-support/chromium-flags"
|
||||||
|
|
||||||
|
flashVersion="$(
|
||||||
|
sed -n -r 's/.*"version": "([^"]+)",.*/\1/p' PepperFlash/manifest.json
|
||||||
|
)"
|
||||||
|
|
||||||
|
install -vD libpepflashplayer.so "$flash/lib/libpepflashplayer.so"
|
||||||
|
ensureDir "$flash/nix-support"
|
||||||
|
echo "--ppapi-flash-path='$flash/lib/libpepflashplayer.so'" \
|
||||||
|
"--ppapi-flash-version=$flashVersion" \
|
||||||
|
> "$flash/nix-support/chromium-flags"
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
|
||||||
|
# build paths and release info
|
||||||
|
packageName = "chromium";
|
||||||
|
buildType = "Release";
|
||||||
|
buildPath = "out/${buildType}";
|
||||||
|
libExecPath = "$out/libexec/${packageName}";
|
||||||
|
sandboxPath = "${sandbox}/bin/${packageName}_sandbox";
|
||||||
|
|
||||||
|
in stdenv.mkDerivation rec {
|
||||||
|
name = "${packageName}-${src.version}";
|
||||||
|
inherit packageName src;
|
||||||
|
|
||||||
|
buildInputs = defaultDependencies ++ [
|
||||||
|
which makeWrapper
|
||||||
|
python perl pkgconfig
|
||||||
|
nspr udev
|
||||||
|
(if useOpenSSL then openssl else nss)
|
||||||
|
utillinux alsaLib
|
||||||
|
gcc bison gperf
|
||||||
|
gcc bison gperf krb5
|
||||||
|
glib gtk dbus_glib
|
||||||
|
libXScrnSaver libXcursor libXtst mesa
|
||||||
|
pciutils protobuf speechd libXdamage
|
||||||
|
pythonPackages.gyp
|
||||||
|
] ++ optional gnomeKeyringSupport libgnome_keyring3
|
||||||
|
++ optionals gnomeSupport [ gnome.GConf libgcrypt ]
|
||||||
|
++ optional enableSELinux libselinux
|
||||||
|
++ optional cupsSupport libgcrypt
|
||||||
|
++ optional pulseSupport pulseaudio;
|
||||||
|
|
||||||
|
prePatch = ''
|
||||||
|
# XXX: Figure out a way how to split these properly.
|
||||||
|
#cpflags="-dsr --no-preserve=mode"
|
||||||
|
cpflags="-dr"
|
||||||
|
cp $cpflags "${src.main}"/* .
|
||||||
|
cp $cpflags "${src.bundled}" third_party
|
||||||
|
cp $cpflags "${src.sandbox}" sandbox
|
||||||
|
chmod -R u+w . # XXX!
|
||||||
|
'';
|
||||||
|
|
||||||
|
postPatch = ''
|
||||||
|
sed -i -e '/base::FilePath exe_dir/,/^ *} *$/c \
|
||||||
|
sandbox_binary = \
|
||||||
|
base::FilePath("'"${sandboxPath}"'");
|
||||||
|
' content/browser/browser_main_loop.cc
|
||||||
|
'';
|
||||||
|
|
||||||
|
gypFlags = mkGypFlags (gypFlagsUseSystemLibs // {
|
||||||
|
linux_use_gold_binary = false;
|
||||||
|
linux_use_gold_flags = false;
|
||||||
|
proprietary_codecs = false;
|
||||||
|
use_gnome_keyring = gnomeKeyringSupport;
|
||||||
|
use_gconf = gnomeSupport;
|
||||||
|
use_gio = gnomeSupport;
|
||||||
|
use_pulseaudio = pulseSupport;
|
||||||
|
disable_nacl = !enableNaCl;
|
||||||
|
use_openssl = useOpenSSL;
|
||||||
|
selinux = enableSELinux;
|
||||||
|
use_cups = cupsSupport;
|
||||||
|
linux_sandbox_path="${sandboxPath}";
|
||||||
|
linux_sandbox_chrome_path="${libExecPath}/${packageName}";
|
||||||
|
werror = "";
|
||||||
|
|
||||||
|
# Google API keys, see http://www.chromium.org/developers/how-tos/api-keys.
|
||||||
|
# Note: These are for NixOS/nixpkgs use ONLY. For your own distribution,
|
||||||
|
# please get your own set of keys.
|
||||||
|
google_api_key = "AIzaSyDGi15Zwl11UNe6Y-5XW_upsfyw31qwZPI";
|
||||||
|
google_default_client_id = "404761575300.apps.googleusercontent.com";
|
||||||
|
google_default_client_secret = "9rIFQjfnkykEmqb6FfjJQD1D";
|
||||||
|
|
||||||
|
} // optionalAttrs proprietaryCodecs {
|
||||||
|
# enable support for the H.264 codec
|
||||||
|
proprietary_codecs = true;
|
||||||
|
ffmpeg_branding = "Chrome";
|
||||||
|
} // optionalAttrs (stdenv.system == "x86_64-linux") {
|
||||||
|
target_arch = "x64";
|
||||||
|
python_arch = "x86-64";
|
||||||
|
} // optionalAttrs (stdenv.system == "i686-linux") {
|
||||||
|
target_arch = "ia32";
|
||||||
|
python_arch = "ia32";
|
||||||
|
});
|
||||||
|
|
||||||
|
configurePhase = ''
|
||||||
|
python build/linux/unbundle/replace_gyp_files.py ${gypFlags}
|
||||||
|
python build/gyp_chromium -f ninja --depth "$(pwd)" ${gypFlags}
|
||||||
|
'';
|
||||||
|
|
||||||
|
buildPhase = let
|
||||||
|
CC = "${gcc}/bin/gcc";
|
||||||
|
CXX = "${gcc}/bin/g++";
|
||||||
|
in ''
|
||||||
|
CC="${CC}" CC_host="${CC}" \
|
||||||
|
CXX="${CXX}" CXX_host="${CXX}" \
|
||||||
|
LINK_host="${CXX}" \
|
||||||
|
"${ninja}/bin/ninja" -C "${buildPath}" \
|
||||||
|
-j$NIX_BUILD_CORES -l$NIX_BUILD_CORES \
|
||||||
|
chrome ${optionalString (!enableSELinux) "chrome_sandbox"}
|
||||||
|
'';
|
||||||
|
|
||||||
|
installPhase = let
|
||||||
|
enabledPlugins = optional enablePepperFlash binaryPlugins.flash
|
||||||
|
++ optional enablePepperPDF binaryPlugins.pdf;
|
||||||
|
getFlags = plugin: "$(< ${plugin}/nix-support/chromium-flags)";
|
||||||
|
pluginArgs = concatStringsSep " " (map getFlags enabledPlugins);
|
||||||
|
in ''
|
||||||
|
ensureDir "${libExecPath}"
|
||||||
|
cp -v "${buildPath}/"*.pak "${libExecPath}/"
|
||||||
|
${optionalString (!versionOlder src.version "34.0.0.0") ''
|
||||||
|
cp -v "${buildPath}/icudtl.dat" "${libExecPath}/"
|
||||||
|
''}
|
||||||
|
cp -vR "${buildPath}/locales" "${buildPath}/resources" "${libExecPath}/"
|
||||||
|
cp -v ${buildPath}/libffmpegsumo.so "${libExecPath}/"
|
||||||
|
|
||||||
|
cp -v "${buildPath}/chrome" "${libExecPath}/${packageName}"
|
||||||
|
|
||||||
|
mkdir -vp "$out/bin"
|
||||||
|
makeWrapper "${libExecPath}/${packageName}" "$out/bin/${packageName}" \
|
||||||
|
--add-flags "${pluginArgs}"
|
||||||
|
|
||||||
|
mkdir -vp "$out/share/man/man1"
|
||||||
|
cp -v "${buildPath}/chrome.1" "$out/share/man/man1/${packageName}.1"
|
||||||
|
|
||||||
|
for icon_file in chrome/app/theme/chromium/product_logo_*[0-9].png; do
|
||||||
|
num_and_suffix="''${icon_file##*logo_}"
|
||||||
|
icon_size="''${num_and_suffix%.*}"
|
||||||
|
expr "$icon_size" : "^[0-9][0-9]*$" || continue
|
||||||
|
logo_output_prefix="$out/share/icons/hicolor"
|
||||||
|
logo_output_path="$logo_output_prefix/''${icon_size}x''${icon_size}/apps"
|
||||||
|
mkdir -vp "$logo_output_path"
|
||||||
|
cp -v "$icon_file" "$logo_output_path/${packageName}.png"
|
||||||
|
done
|
||||||
|
'';
|
||||||
|
|
||||||
|
passthru = {
|
||||||
|
inherit sandbox;
|
||||||
|
};
|
||||||
|
|
||||||
|
meta = {
|
||||||
|
description = "An open source web browser from Google";
|
||||||
|
homepage = http://www.chromium.org/;
|
||||||
|
maintainers = with maintainers; [ goibhniu chaoflow aszlig wizeman ];
|
||||||
|
license = licenses.bsd3;
|
||||||
|
platforms = platforms.linux;
|
||||||
|
};
|
||||||
|
}
|
@ -1,360 +1,28 @@
|
|||||||
{ stdenv, fetchurl, makeWrapper, ninja, which
|
{ newScope
|
||||||
|
|
||||||
# default dependencies
|
|
||||||
, bzip2, flac, speex, icu, libopus
|
|
||||||
, libevent, expat, libjpeg, snappy
|
|
||||||
, libpng, libxml2, libxslt, v8
|
|
||||||
, xdg_utils, yasm, minizip, libwebp
|
|
||||||
, libusb1, libexif, pciutils
|
|
||||||
|
|
||||||
, python, pythonPackages, perl, pkgconfig
|
|
||||||
, nspr, udev, krb5
|
|
||||||
, utillinux, alsaLib
|
|
||||||
, gcc, bison, gperf
|
|
||||||
, glib, gtk, dbus_glib
|
|
||||||
, libXScrnSaver, libXcursor, libXtst, mesa
|
|
||||||
, protobuf, speechd, libXdamage
|
|
||||||
|
|
||||||
# optional dependencies
|
|
||||||
, libgcrypt ? null # gnomeSupport || cupsSupport
|
|
||||||
|
|
||||||
# package customization
|
# package customization
|
||||||
, channel ? "stable"
|
, channel ? "stable"
|
||||||
, enableSELinux ? false, libselinux ? null
|
, enableSELinux ? false
|
||||||
, enableNaCl ? false
|
, enableNaCl ? false
|
||||||
, useOpenSSL ? false, nss ? null, openssl ? null
|
, useOpenSSL ? false
|
||||||
, gnomeSupport ? false, gconf ? null
|
, gnomeSupport ? false
|
||||||
, gnomeKeyringSupport ? false, libgnome_keyring3 ? null
|
, gnomeKeyringSupport ? false
|
||||||
, proprietaryCodecs ? true
|
, proprietaryCodecs ? true
|
||||||
, enablePepperFlash ? false
|
, enablePepperFlash ? false
|
||||||
, enablePepperPDF ? false
|
, enablePepperPDF ? false
|
||||||
, cupsSupport ? false
|
, cupsSupport ? false
|
||||||
, pulseSupport ? false, pulseaudio ? null
|
, pulseSupport ? false
|
||||||
}:
|
}:
|
||||||
|
|
||||||
with stdenv.lib;
|
|
||||||
|
|
||||||
let
|
let
|
||||||
src = with getAttr channel (import ./sources.nix); stdenv.mkDerivation {
|
callPackage = newScope chromium;
|
||||||
name = "chromium-source-${version}";
|
|
||||||
|
|
||||||
src = fetchurl {
|
chromium = {
|
||||||
inherit url sha256;
|
browser = callPackage ./browser.nix {
|
||||||
};
|
inherit channel enableSELinux enableNaCl useOpenSSL gnomeSupport
|
||||||
|
gnomeKeyringSupport proprietaryCodecs enablePepperFlash
|
||||||
buildInputs = [ python ]; # cannot patch shebangs otherwise
|
enablePepperPDF cupsSupport pulseSupport;
|
||||||
|
|
||||||
phases = [ "unpackPhase" "patchPhase" "installPhase" ];
|
|
||||||
|
|
||||||
opensslPatches = optional useOpenSSL openssl.patches;
|
|
||||||
|
|
||||||
prePatch = "patchShebangs .";
|
|
||||||
|
|
||||||
patches = singleton ./sandbox_userns_31.patch;
|
|
||||||
|
|
||||||
postPatch = ''
|
|
||||||
sed -i -r \
|
|
||||||
-e 's/-f(stack-protector)(-all)?/-fno-\1/' \
|
|
||||||
-e 's|/bin/echo|echo|' \
|
|
||||||
-e "/python_arch/s/: *'[^']*'/: '""'/" \
|
|
||||||
build/common.gypi chrome/chrome_tests.gypi
|
|
||||||
sed -i '/not RunGN/,+1d' build/gyp_chromium
|
|
||||||
sed -i -e 's|/usr/bin/gcc|gcc|' \
|
|
||||||
third_party/WebKit/Source/build/scripts/scripts.gypi \
|
|
||||||
third_party/WebKit/Source/build/scripts/preprocessor.pm
|
|
||||||
'' + optionalString useOpenSSL ''
|
|
||||||
cat $opensslPatches | patch -p1 -d third_party/openssl/openssl
|
|
||||||
'' + optionalString (!versionOlder version "34.0.0.0") ''
|
|
||||||
sed -i '/import.*depot/d' build/gyp_chromium
|
|
||||||
'';
|
|
||||||
|
|
||||||
outputs = [ "out" "sandbox" "bundled" "main" ];
|
|
||||||
installPhase = ''
|
|
||||||
ensureDir "$out" "$sandbox" "$bundled" "$main"
|
|
||||||
|
|
||||||
header "copying browser main sources to $main"
|
|
||||||
find . -mindepth 1 -maxdepth 1 \
|
|
||||||
\! -path ./sandbox \
|
|
||||||
\! -path ./third_party \
|
|
||||||
\! -path ./build \
|
|
||||||
\! -path ./tools \
|
|
||||||
\! -name '.*' \
|
|
||||||
-print | xargs cp -rt "$main"
|
|
||||||
stopNest
|
|
||||||
|
|
||||||
header "copying sandbox components to $sandbox"
|
|
||||||
cp -rt "$sandbox" sandbox/*
|
|
||||||
stopNest
|
|
||||||
|
|
||||||
header "copying third party sources to $bundled"
|
|
||||||
cp -rt "$bundled" third_party/*
|
|
||||||
stopNest
|
|
||||||
|
|
||||||
header "copying build requisites to $out"
|
|
||||||
cp -rt "$out" build tools
|
|
||||||
stopNest
|
|
||||||
|
|
||||||
rm -rf "$out/tools/gyp" # XXX: Don't even copy it in the first place.
|
|
||||||
'';
|
|
||||||
|
|
||||||
passthru = {
|
|
||||||
inherit version;
|
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
mkGypFlags =
|
in chromium.browser
|
||||||
let
|
|
||||||
sanitize = value:
|
|
||||||
if value == true then "1"
|
|
||||||
else if value == false then "0"
|
|
||||||
else "${value}";
|
|
||||||
toFlag = key: value: "-D${key}=${sanitize value}";
|
|
||||||
in attrs: concatStringsSep " " (attrValues (mapAttrs toFlag attrs));
|
|
||||||
|
|
||||||
gypFlagsUseSystemLibs = {
|
|
||||||
use_system_bzip2 = true;
|
|
||||||
use_system_flac = true;
|
|
||||||
use_system_libevent = true;
|
|
||||||
use_system_libexpat = true;
|
|
||||||
use_system_libexif = true;
|
|
||||||
use_system_libjpeg = true;
|
|
||||||
use_system_libpng = true;
|
|
||||||
use_system_libwebp = true;
|
|
||||||
use_system_libxml = true;
|
|
||||||
use_system_opus = true;
|
|
||||||
use_system_snappy = true;
|
|
||||||
use_system_speex = true;
|
|
||||||
use_system_ssl = useOpenSSL;
|
|
||||||
use_system_stlport = true;
|
|
||||||
use_system_xdg_utils = true;
|
|
||||||
use_system_yasm = true;
|
|
||||||
use_system_zlib = true;
|
|
||||||
use_system_protobuf = true;
|
|
||||||
|
|
||||||
use_system_harfbuzz = false;
|
|
||||||
use_system_icu = false; # Doesn't support ICU 52 yet.
|
|
||||||
use_system_libusb = false; # http://crbug.com/266149
|
|
||||||
use_system_skia = false;
|
|
||||||
use_system_sqlite = false; # http://crbug.com/22208
|
|
||||||
use_system_v8 = !versionOlder src.version "34.0.0.0";
|
|
||||||
};
|
|
||||||
|
|
||||||
defaultDependencies = [
|
|
||||||
bzip2 flac speex icu libopus
|
|
||||||
libevent expat libjpeg snappy
|
|
||||||
libpng libxml2 libxslt v8
|
|
||||||
xdg_utils yasm minizip libwebp
|
|
||||||
libusb1 libexif
|
|
||||||
];
|
|
||||||
|
|
||||||
sandbox = import ./sandbox.nix {
|
|
||||||
inherit stdenv;
|
|
||||||
src = src.sandbox;
|
|
||||||
binary = "${packageName}_sandbox";
|
|
||||||
};
|
|
||||||
|
|
||||||
binaryPlugins = stdenv.mkDerivation {
|
|
||||||
name = "chromium-binary-plugins";
|
|
||||||
|
|
||||||
# XXX: Only temporary and has to be version-specific
|
|
||||||
src = fetchurl {
|
|
||||||
url = "https://dl.google.com/linux/chrome/deb/pool/main/g/"
|
|
||||||
+ "google-chrome-unstable/google-chrome-unstable_"
|
|
||||||
+ "35.0.1897.2-1_amd64.deb";
|
|
||||||
sha1 = "b68683fc5321d10536e4135c266b14894b7668ed";
|
|
||||||
};
|
|
||||||
|
|
||||||
phases = [ "unpackPhase" "patchPhase" "checkPhase" "installPhase" ];
|
|
||||||
outputs = [ "pdf" "flash" ];
|
|
||||||
|
|
||||||
unpackCmd = ''
|
|
||||||
ensureDir plugins
|
|
||||||
ar p "$src" data.tar.lzma | tar xJ -C plugins --strip-components=4 \
|
|
||||||
./opt/google/chrome-unstable/PepperFlash \
|
|
||||||
./opt/google/chrome-unstable/libpdf.so
|
|
||||||
'';
|
|
||||||
|
|
||||||
doCheck = true;
|
|
||||||
checkPhase = ''
|
|
||||||
! find -iname '*.so' -exec ldd {} + | grep 'not found'
|
|
||||||
'';
|
|
||||||
|
|
||||||
patchPhase = let
|
|
||||||
rpaths = [ stdenv.gcc.gcc ];
|
|
||||||
mkrpath = p: "${makeSearchPath "lib64" p}:${makeSearchPath "lib" p}";
|
|
||||||
in ''
|
|
||||||
for sofile in PepperFlash/libpepflashplayer.so libpdf.so; do
|
|
||||||
chmod +x "$sofile"
|
|
||||||
patchelf --set-rpath "${mkrpath rpaths}" "$sofile"
|
|
||||||
done
|
|
||||||
'';
|
|
||||||
|
|
||||||
installPhase = let
|
|
||||||
pdfName = "Chrome PDF Viewer";
|
|
||||||
pdfDescription = "Portable Document Format";
|
|
||||||
pdfMimeTypes = concatStringsSep ";" [
|
|
||||||
"application/pdf"
|
|
||||||
"application/x-google-chrome-print-preview-pdf"
|
|
||||||
];
|
|
||||||
pdfInfo = "#${pdfName}#${pdfDescription};${pdfMimeTypes}";
|
|
||||||
in ''
|
|
||||||
install -vD libpdf.so "$pdf/lib/libpdf.so"
|
|
||||||
ensureDir "$pdf/nix-support"
|
|
||||||
echo "--register-pepper-plugins='$pdf/lib/libpdf.so${pdfInfo}'" \
|
|
||||||
> "$pdf/nix-support/chromium-flags"
|
|
||||||
|
|
||||||
flashVersion="$(
|
|
||||||
sed -n -r 's/.*"version": "([^"]+)",.*/\1/p' PepperFlash/manifest.json
|
|
||||||
)"
|
|
||||||
|
|
||||||
install -vD libpepflashplayer.so "$flash/lib/libpepflashplayer.so"
|
|
||||||
ensureDir "$flash/nix-support"
|
|
||||||
echo "--ppapi-flash-path='$flash/lib/libpepflashplayer.so'" \
|
|
||||||
"--ppapi-flash-version=$flashVersion" \
|
|
||||||
> "$flash/nix-support/chromium-flags"
|
|
||||||
'';
|
|
||||||
};
|
|
||||||
|
|
||||||
# build paths and release info
|
|
||||||
packageName = "chromium";
|
|
||||||
buildType = "Release";
|
|
||||||
buildPath = "out/${buildType}";
|
|
||||||
libExecPath = "$out/libexec/${packageName}";
|
|
||||||
sandboxPath = "${sandbox}/bin/${packageName}_sandbox";
|
|
||||||
|
|
||||||
in stdenv.mkDerivation rec {
|
|
||||||
name = "${packageName}-${src.version}";
|
|
||||||
inherit packageName src;
|
|
||||||
|
|
||||||
buildInputs = defaultDependencies ++ [
|
|
||||||
which makeWrapper
|
|
||||||
python perl pkgconfig
|
|
||||||
nspr udev
|
|
||||||
(if useOpenSSL then openssl else nss)
|
|
||||||
utillinux alsaLib
|
|
||||||
gcc bison gperf krb5
|
|
||||||
glib gtk dbus_glib
|
|
||||||
libXScrnSaver libXcursor libXtst mesa
|
|
||||||
pciutils protobuf speechd libXdamage
|
|
||||||
pythonPackages.gyp
|
|
||||||
] ++ optional gnomeKeyringSupport libgnome_keyring3
|
|
||||||
++ optionals gnomeSupport [ gconf libgcrypt ]
|
|
||||||
++ optional enableSELinux libselinux
|
|
||||||
++ optional cupsSupport libgcrypt
|
|
||||||
++ optional pulseSupport pulseaudio;
|
|
||||||
|
|
||||||
prePatch = ''
|
|
||||||
# XXX: Figure out a way how to split these properly.
|
|
||||||
#cpflags="-dsr --no-preserve=mode"
|
|
||||||
cpflags="-dr"
|
|
||||||
cp $cpflags "${src.main}"/* .
|
|
||||||
cp $cpflags "${src.bundled}" third_party
|
|
||||||
cp $cpflags "${src.sandbox}" sandbox
|
|
||||||
chmod -R u+w . # XXX!
|
|
||||||
'';
|
|
||||||
|
|
||||||
postPatch = ''
|
|
||||||
sed -i -e '/base::FilePath exe_dir/,/^ *} *$/c \
|
|
||||||
sandbox_binary = \
|
|
||||||
base::FilePath("'"${sandboxPath}"'");
|
|
||||||
' content/browser/browser_main_loop.cc
|
|
||||||
'';
|
|
||||||
|
|
||||||
gypFlags = mkGypFlags (gypFlagsUseSystemLibs // {
|
|
||||||
linux_use_gold_binary = false;
|
|
||||||
linux_use_gold_flags = false;
|
|
||||||
proprietary_codecs = false;
|
|
||||||
use_gnome_keyring = gnomeKeyringSupport;
|
|
||||||
use_gconf = gnomeSupport;
|
|
||||||
use_gio = gnomeSupport;
|
|
||||||
use_pulseaudio = pulseSupport;
|
|
||||||
disable_nacl = !enableNaCl;
|
|
||||||
use_openssl = useOpenSSL;
|
|
||||||
selinux = enableSELinux;
|
|
||||||
use_cups = cupsSupport;
|
|
||||||
linux_sandbox_path="${sandboxPath}";
|
|
||||||
linux_sandbox_chrome_path="${libExecPath}/${packageName}";
|
|
||||||
werror = "";
|
|
||||||
|
|
||||||
# Google API keys, see http://www.chromium.org/developers/how-tos/api-keys.
|
|
||||||
# Note: These are for NixOS/nixpkgs use ONLY. For your own distribution,
|
|
||||||
# please get your own set of keys.
|
|
||||||
google_api_key = "AIzaSyDGi15Zwl11UNe6Y-5XW_upsfyw31qwZPI";
|
|
||||||
google_default_client_id = "404761575300.apps.googleusercontent.com";
|
|
||||||
google_default_client_secret = "9rIFQjfnkykEmqb6FfjJQD1D";
|
|
||||||
|
|
||||||
} // optionalAttrs proprietaryCodecs {
|
|
||||||
# enable support for the H.264 codec
|
|
||||||
proprietary_codecs = true;
|
|
||||||
ffmpeg_branding = "Chrome";
|
|
||||||
} // optionalAttrs (stdenv.system == "x86_64-linux") {
|
|
||||||
target_arch = "x64";
|
|
||||||
python_arch = "x86-64";
|
|
||||||
} // optionalAttrs (stdenv.system == "i686-linux") {
|
|
||||||
target_arch = "ia32";
|
|
||||||
python_arch = "ia32";
|
|
||||||
});
|
|
||||||
|
|
||||||
configurePhase = ''
|
|
||||||
python build/linux/unbundle/replace_gyp_files.py ${gypFlags}
|
|
||||||
python build/gyp_chromium -f ninja --depth "$(pwd)" ${gypFlags}
|
|
||||||
'';
|
|
||||||
|
|
||||||
buildPhase = let
|
|
||||||
CC = "${gcc}/bin/gcc";
|
|
||||||
CXX = "${gcc}/bin/g++";
|
|
||||||
in ''
|
|
||||||
CC="${CC}" CC_host="${CC}" \
|
|
||||||
CXX="${CXX}" CXX_host="${CXX}" \
|
|
||||||
LINK_host="${CXX}" \
|
|
||||||
"${ninja}/bin/ninja" -C "${buildPath}" \
|
|
||||||
-j$NIX_BUILD_CORES -l$NIX_BUILD_CORES \
|
|
||||||
chrome ${optionalString (!enableSELinux) "chrome_sandbox"}
|
|
||||||
'';
|
|
||||||
|
|
||||||
installPhase = let
|
|
||||||
enabledPlugins = optional enablePepperFlash binaryPlugins.flash
|
|
||||||
++ optional enablePepperPDF binaryPlugins.pdf;
|
|
||||||
getFlags = plugin: "$(< ${plugin}/nix-support/chromium-flags)";
|
|
||||||
pluginArgs = concatStringsSep " " (map getFlags enabledPlugins);
|
|
||||||
in ''
|
|
||||||
ensureDir "${libExecPath}"
|
|
||||||
cp -v "${buildPath}/"*.pak "${libExecPath}/"
|
|
||||||
${optionalString (!versionOlder src.version "34.0.0.0") ''
|
|
||||||
cp -v "${buildPath}/icudtl.dat" "${libExecPath}/"
|
|
||||||
''}
|
|
||||||
cp -vR "${buildPath}/locales" "${buildPath}/resources" "${libExecPath}/"
|
|
||||||
cp -v ${buildPath}/libffmpegsumo.so "${libExecPath}/"
|
|
||||||
|
|
||||||
cp -v "${buildPath}/chrome" "${libExecPath}/${packageName}"
|
|
||||||
|
|
||||||
mkdir -vp "$out/bin"
|
|
||||||
makeWrapper "${libExecPath}/${packageName}" "$out/bin/${packageName}" \
|
|
||||||
--add-flags "${pluginArgs}"
|
|
||||||
|
|
||||||
mkdir -vp "$out/share/man/man1"
|
|
||||||
cp -v "${buildPath}/chrome.1" "$out/share/man/man1/${packageName}.1"
|
|
||||||
|
|
||||||
for icon_file in chrome/app/theme/chromium/product_logo_*[0-9].png; do
|
|
||||||
num_and_suffix="''${icon_file##*logo_}"
|
|
||||||
icon_size="''${num_and_suffix%.*}"
|
|
||||||
expr "$icon_size" : "^[0-9][0-9]*$" || continue
|
|
||||||
logo_output_prefix="$out/share/icons/hicolor"
|
|
||||||
logo_output_path="$logo_output_prefix/''${icon_size}x''${icon_size}/apps"
|
|
||||||
mkdir -vp "$logo_output_path"
|
|
||||||
cp -v "$icon_file" "$logo_output_path/${packageName}.png"
|
|
||||||
done
|
|
||||||
'';
|
|
||||||
|
|
||||||
passthru = {
|
|
||||||
inherit sandbox;
|
|
||||||
};
|
|
||||||
|
|
||||||
meta = {
|
|
||||||
description = "An open source web browser from Google";
|
|
||||||
homepage = http://www.chromium.org/;
|
|
||||||
maintainers = with maintainers; [ goibhniu chaoflow aszlig wizeman ];
|
|
||||||
license = licenses.bsd3;
|
|
||||||
platforms = platforms.linux;
|
|
||||||
};
|
|
||||||
}
|
|
||||||
|
@ -7739,7 +7739,6 @@ let
|
|||||||
|
|
||||||
chromium = lowPrio (callPackage ../applications/networking/browsers/chromium {
|
chromium = lowPrio (callPackage ../applications/networking/browsers/chromium {
|
||||||
channel = "stable";
|
channel = "stable";
|
||||||
gconf = gnome.GConf;
|
|
||||||
pulseSupport = config.pulseaudio or true;
|
pulseSupport = config.pulseaudio or true;
|
||||||
});
|
});
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user