diff --git a/pkgs/applications/office/zotero/default.nix b/pkgs/applications/office/zotero/default.nix index 1b4bec3c24b..6cd8697cd7d 100644 --- a/pkgs/applications/office/zotero/default.nix +++ b/pkgs/applications/office/zotero/default.nix @@ -1,8 +1,19 @@ -{ stdenv, fetchurl, bash, xulrunner }: +{ stdenv, fetchurl, bash, callPackage, libIDL, pysqlite }: assert (stdenv.system == "x86_64-linux" || stdenv.system == "i686-linux"); + let + /* Zotero always has a hard upper bound on its firefox/xulrunner dependency. + * Use private versions of firefox and xulrunner to prevent breakage when the + * system packages are updated. Please update these dependencies whenever + * zotero is updated; it should be as simple as copying the system firefox + * and xulrunner Nix expressions into place. + */ + firefox = callPackage ./firefox.nix { inherit libIDL pysqlite; }; + xulrunner = callPackage ./xulrunner.nix { inherit libIDL pysqlite firefox; }; + + # Please update the firefox and xulrunner dependencies when zotero is updated! version = "4.0.23"; arch = if stdenv.system == "x86_64-linux" then "linux-x86_64" diff --git a/pkgs/applications/office/zotero/firefox.nix b/pkgs/applications/office/zotero/firefox.nix new file mode 100644 index 00000000000..60befdbaad5 --- /dev/null +++ b/pkgs/applications/office/zotero/firefox.nix @@ -0,0 +1,108 @@ +{ lib, stdenv, fetchurl, pkgconfig, gtk, pango, perl, python, zip, libIDL +, libjpeg, zlib, dbus, dbus_glib, bzip2, xlibs +, freetype, fontconfig, file, alsaLib, nspr, nss, libnotify +, yasm, mesa, sqlite, unzip, makeWrapper, pysqlite +, hunspell, libevent, libstartup_notification, libvpx +, cairo, gstreamer, gst_plugins_base, icu +, debugBuild ? false +, # If you want the resulting program to call itself "Firefox" instead + # of "Shiretoko" or whatever, enable this option. However, those + # binaries may not be distributed without permission from the + # Mozilla Foundation, see + # http://www.mozilla.org/foundation/trademarks/. + enableOfficialBranding ? false +}: + +assert stdenv.gcc ? libc && stdenv.gcc.libc != null; + +let version = "33.1.1"; in + +stdenv.mkDerivation rec { + name = "firefox-${version}"; + + src = fetchurl { + url = "http://ftp.mozilla.org/pub/mozilla.org/firefox/releases/${version}/source/firefox-${version}.source.tar.bz2"; + sha1 = "1e9e3176e7d221c4f2ce479f37ee7c432236a0ec"; + }; + + buildInputs = + [ pkgconfig gtk perl zip libIDL libjpeg zlib bzip2 + python dbus dbus_glib pango freetype fontconfig xlibs.libXi + xlibs.libX11 xlibs.libXrender xlibs.libXft xlibs.libXt file + alsaLib nspr nss libnotify xlibs.pixman yasm mesa + xlibs.libXScrnSaver xlibs.scrnsaverproto pysqlite + xlibs.libXext xlibs.xextproto sqlite unzip makeWrapper + hunspell libevent libstartup_notification libvpx cairo + gstreamer gst_plugins_base icu + ]; + + configureFlags = + [ "--enable-application=browser" + "--disable-javaxpcom" + "--with-system-jpeg" + "--with-system-zlib" + "--with-system-bz2" + "--with-system-nspr" + "--with-system-nss" + "--with-system-libevent" + "--with-system-libvpx" + # "--with-system-png" # needs APNG support + # "--with-system-icu" # causes ‘ar: invalid option -- 'L'’ in Firefox 28.0 + "--enable-system-ffi" + "--enable-system-hunspell" + "--enable-system-pixman" + "--enable-system-sqlite" + "--enable-system-cairo" + "--enable-gstreamer" + "--enable-startup-notification" + # "--enable-content-sandbox" # available since 26.0, but not much info available + # "--enable-content-sandbox-reporter" # keeping disabled for now + "--disable-crashreporter" + "--disable-tests" + "--disable-necko-wifi" # maybe we want to enable this at some point + "--disable-installer" + "--disable-updater" + "--disable-pulseaudio" + ] + ++ (if debugBuild then [ "--enable-debug" "--enable-profiling"] + else [ "--disable-debug" "--enable-release" + "--enable-optimize${lib.optionalString (stdenv.system == "i686-linux") "=-O1"}" + "--enable-strip" ]) + ++ lib.optional enableOfficialBranding "--enable-official-branding"; + + enableParallelBuilding = true; + + preConfigure = + '' + mkdir ../objdir + cd ../objdir + configureScript=../mozilla-release/configure + ''; + + preInstall = + '' + # The following is needed for startup cache creation on grsecurity kernels. + paxmark m ../objdir/dist/bin/xpcshell + ''; + + postInstall = + '' + # For grsecurity kernels + paxmark m $out/lib/${name}/{firefox,firefox-bin,plugin-container} + + # Remove SDK cruft. FIXME: move to a separate output? + rm -rf $out/share/idl $out/include $out/lib/firefox-devel-* + ''; + + meta = { + description = "Web browser"; + homepage = http://www.mozilla.com/en-US/firefox/; + maintainers = with lib.maintainers; [ eelco ]; + platforms = lib.platforms.linux; + }; + + passthru = { + inherit gtk nspr version; + isFirefox3Like = true; + }; +} diff --git a/pkgs/applications/office/zotero/xulrunner.nix b/pkgs/applications/office/zotero/xulrunner.nix new file mode 100644 index 00000000000..4dd1095c0ce --- /dev/null +++ b/pkgs/applications/office/zotero/xulrunner.nix @@ -0,0 +1,80 @@ +{ lib, stdenv, fetchurl, pkgconfig, gtk, pango, perl, python, zip, libIDL +, libjpeg, zlib, dbus, dbus_glib, bzip2, xlibs +, freetype, fontconfig, file, alsaLib, nspr, nss, libnotify +, yasm, mesa, sqlite, unzip, makeWrapper, pysqlite +, hunspell, libevent, libstartup_notification, libvpx +, cairo, gstreamer, gst_plugins_base, icu, firefox +, debugBuild ? false +}: + +assert stdenv.gcc ? libc && stdenv.gcc.libc != null; + +let version = firefox.version; in + +stdenv.mkDerivation rec { + name = "xulrunner-${version}"; + + src = firefox.src; + + buildInputs = + [ pkgconfig gtk perl zip libIDL libjpeg zlib bzip2 + python dbus dbus_glib pango freetype fontconfig xlibs.libXi + xlibs.libX11 xlibs.libXrender xlibs.libXft xlibs.libXt file + alsaLib nspr nss libnotify xlibs.pixman yasm mesa + xlibs.libXScrnSaver xlibs.scrnsaverproto pysqlite + xlibs.libXext xlibs.xextproto sqlite unzip makeWrapper + hunspell libevent libstartup_notification libvpx cairo + gstreamer gst_plugins_base icu + ]; + + configureFlags = + [ "--enable-application=xulrunner" + "--disable-javaxpcom" + "--with-system-jpeg" + "--with-system-zlib" + "--with-system-bz2" + "--with-system-nspr" + "--with-system-nss" + "--with-system-libevent" + "--with-system-libvpx" + # "--with-system-png" # needs APNG support + # "--with-system-icu" # causes ‘ar: invalid option -- 'L'’ in Firefox 28.0 + "--enable-system-ffi" + "--enable-system-hunspell" + "--enable-system-pixman" + "--enable-system-sqlite" + "--enable-system-cairo" + "--enable-gstreamer" + "--enable-startup-notification" + # "--enable-content-sandbox" # available since 26.0, but not much info available + # "--enable-content-sandbox-reporter" # keeping disabled for now + "--disable-crashreporter" + "--disable-tests" + "--disable-necko-wifi" # maybe we want to enable this at some point + "--disable-installer" + "--disable-updater" + "--disable-pulseaudio" + ] + ++ (if debugBuild + then [ "--enable-debug" "--enable-profiling"] + else [ "--disable-debug" "--enable-release" "--enable-strip" + "--enable-optimize${lib.optionalString (stdenv.system == "i686-linux") "=-O1"}" ]); + + enableParallelBuilding = true; + + preConfigure = + '' + mkdir ../objdir + cd ../objdir + configureScript=../mozilla-release/configure + ''; + + meta = { + description = "Mozilla Firefox XUL runner"; + homepage = http://www.mozilla.com/en-US/firefox/; + maintainers = [ lib.maintainers.eelco ]; + platforms = lib.platforms.linux; + }; + + passthru = { inherit gtk version; }; +} diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix index 28f61d12f83..aedafb97ac6 100644 --- a/pkgs/top-level/all-packages.nix +++ b/pkgs/top-level/all-packages.nix @@ -11407,7 +11407,10 @@ let pygtk = pyGtkGlade; }; - zotero = callPackage ../applications/office/zotero { }; + zotero = callPackage ../applications/office/zotero { + inherit (gnome) libIDL; + inherit (pythonPackages) pysqlite; + }; zynaddsubfx = callPackage ../applications/audio/zynaddsubfx { };