summary refs log tree commit diff
path: root/pkgs/applications/networking/browsers/chromium/browser.nix
diff options
context:
space:
mode:
authoraszlig <aszlig@redmoonstudios.org>2014-04-01 07:36:26 +0200
committeraszlig <aszlig@redmoonstudios.org>2014-04-19 03:58:46 +0200
commit111caaad539b738c54ecd60378de0f2a53249ad3 (patch)
tree022882ced2693fb97496c9f9fda2735eae647d6f /pkgs/applications/networking/browsers/chromium/browser.nix
parenta87208de5896e01e51933f2eede44bfc3b02a3c3 (diff)
downloadnixpkgs-111caaad539b738c54ecd60378de0f2a53249ad3.tar
nixpkgs-111caaad539b738c54ecd60378de0f2a53249ad3.tar.gz
nixpkgs-111caaad539b738c54ecd60378de0f2a53249ad3.tar.bz2
nixpkgs-111caaad539b738c54ecd60378de0f2a53249ad3.tar.lz
nixpkgs-111caaad539b738c54ecd60378de0f2a53249ad3.tar.xz
nixpkgs-111caaad539b738c54ecd60378de0f2a53249ad3.tar.zst
nixpkgs-111caaad539b738c54ecd60378de0f2a53249ad3.zip
chromium: Factor out common build attributes.
This results in a new function called mkChromiumDerivation, which can be
used to easily build packages that are based on the Chromium source
tree.

We pass through this function as mkDerivation in the chromium wrappre,
so in the end if you want to create such a package, something like:

chromium.mkDerivation (base: {
  name = "your-shiny-package-based-on-chromium";
  ...
})

will suffice.

Of course, this is only the first step towards this functionality,
because right now I'm not even sure the Chromium browser itself will
build.

Signed-off-by: aszlig <aszlig@redmoonstudios.org>
Diffstat (limited to 'pkgs/applications/networking/browsers/chromium/browser.nix')
-rw-r--r--pkgs/applications/networking/browsers/chromium/browser.nix205
1 files changed, 14 insertions, 191 deletions
diff --git a/pkgs/applications/networking/browsers/chromium/browser.nix b/pkgs/applications/networking/browsers/chromium/browser.nix
index 3b45ff78206..8c83dbb853a 100644
--- a/pkgs/applications/networking/browsers/chromium/browser.nix
+++ b/pkgs/applications/networking/browsers/chromium/browser.nix
@@ -1,201 +1,24 @@
-{ stdenv, fetchurl, 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
-, enableSELinux ? false, libselinux ? null
-, enableNaCl ? false
-, useOpenSSL ? false, nss ? null, openssl ? null
-, gnomeSupport ? false, gnome ? null
-, gnomeKeyringSupport ? false, libgnome_keyring3 ? null
-, proprietaryCodecs ? true
-, cupsSupport ? false
-, pulseSupport ? false, pulseaudio ? null
-
-, source
-, plugins
-}:
+{ stdenv, mkChromiumDerivation }:
 
 with stdenv.lib;
 
-let
-
-  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 source.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
-  ];
-
-  # build paths and release info
-  packageName = "chromium";
-  buildType = "Release";
-  buildPath = "out/${buildType}";
-  libExecPath = "$out/libexec/${packageName}";
-
-in stdenv.mkDerivation rec {
-  name = "${packageName}-browser-${version}";
-  inherit (source) version;
-  inherit packageName;
-  src = source;
-
-  buildInputs = defaultDependencies ++ [
-    which
-    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;
-
-  # XXX: Wait for https://crbug.com/239107 and https://crbug.com/239181 to
-  #      be fixed, then try again to unbundle everything into separate
-  #      derivations.
-  prePatch = ''
-    cp -dsr --no-preserve=mode "${source.main}"/* .
-    cp -dsr --no-preserve=mode "${source.sandbox}" sandbox
-    cp -dr "${source.bundled}" third_party
-    chmod -R u+w third_party
-
-    # Hardcode source tree root in all gyp files
-    find -iname '*.gyp*' \( -type f -o -type l \) \
-      -exec sed -i -e 's|<(DEPTH)|'"$(pwd)"'|g' {} + \
-      -exec chmod u+w {} +
-  '';
-
-  postPatch = ''
-    sed -i -e '/base::FilePath exe_dir/,/^ *} *$/c \
-      sandbox_binary = base::FilePath(getenv("CHROMIUM_SANDBOX_BINARY_PATH"));
-    ' 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_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
-  '';
+mkChromiumDerivation (base: rec {
+  name = "chromium-browser";
+  buildTargets = [ "chrome" ];
 
   installPhase = ''
-    ensureDir "${libExecPath}"
-    cp -v "${buildPath}/"*.pak "${libExecPath}/"
-    ${optionalString (!versionOlder version "34.0.0.0") ''
-    cp -v "${buildPath}/icudtl.dat" "${libExecPath}/"
+    ensureDir "$libExecPath"
+    cp -v "$buildPath/"*.pak "$libExecPath/"
+    ${optionalString (!versionOlder base.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 -vR "$buildPath/locales" "$buildPath/resources" "$libExecPath/"
+    cp -v $buildPath/libffmpegsumo.so "$libExecPath/"
 
-    cp -v "${buildPath}/chrome" "${libExecPath}/${packageName}"
+    cp -v "$buildPath/chrome" "$libExecPath/$packageName"
 
     mkdir -vp "$out/share/man/man1"
-    cp -v "${buildPath}/chrome.1" "$out/share/man/man1/${packageName}.1"
+    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_}"
@@ -204,7 +27,7 @@ in stdenv.mkDerivation rec {
       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"
+      cp -v "$icon_file" "$logo_output_path/$packageName.png"
     done
   '';
 
@@ -215,4 +38,4 @@ in stdenv.mkDerivation rec {
     license = licenses.bsd3;
     platforms = platforms.linux;
   };
-}
+})