Hi!
Test the attached patch, please. I don't use opera, so I don't know what to
test. I've tested `ldd $executable | grep not` and tested that it starts.
P.S.: It would be nice if someone using opera will add himself to
meta.maintainers (currently empty).
--
Yury G. Kudryashov,
mailto: [email protected]
From: Yury G. Kudryashov <[email protected]>
Subject: [PATCH] Update opera to the latest version
Also add missing dependencies (KDE, cups, gstreamer)
---
.../networking/browsers/opera/builder.sh | 39 ---------
.../networking/browsers/opera/default.nix | 89 ++++++++++++++------
pkgs/top-level/all-packages.nix | 4 +-
3 files changed, 65 insertions(+), 67 deletions(-)
diff --git a/pkgs/applications/networking/browsers/opera/builder.sh b/pkgs/applications/networking/browsers/opera/builder.sh
deleted file mode 100644
index de4a413..0000000
--- a/pkgs/applications/networking/browsers/opera/builder.sh
+++ /dev/null
@@ -1,39 +0,0 @@
-source $stdenv/setup
-
-buildPhase() {
- true
-}
-
-installPhase() {
- substituteInPlace install --replace /bin/pwd pwd
- substituteInPlace install --replace /usr/local "$out"
-
- # Note: the "no" is because the install scripts asks whether we
- # want to install icons in some system-wide directories.
-
- ensureDir "$out"
-
- ./install --text --system
-
- [ -z ${system##*64*} ] && suf=64
-
- find $out -type f | while read f; do
- echo testing "$f"
- # patch all executables
- if readelf -h "$f" | grep 'EXEC (Executable file)' &> /dev/null; then
- echo "patching $f <<"
- patchelf \
- --set-interpreter "$(cat $NIX_GCC/nix-support/dynamic-linker)" \
- --set-rpath "$libPath" \
- "$f"
- fi
- done
-
- # Substitute pwd as late as possible so that the md5 checksum check of opera passes.
- substituteInPlace $out/bin/opera --replace /bin/pwd pwd
-
- ensureDir $out/share/applications
- cp $desktopItem/share/applications/* $out/share/applications
-}
-
-genericBuild
diff --git a/pkgs/applications/networking/browsers/opera/default.nix b/pkgs/applications/networking/browsers/opera/default.nix
index 8b7ef62..3dddc85 100644
--- a/pkgs/applications/networking/browsers/opera/default.nix
+++ b/pkgs/applications/networking/browsers/opera/default.nix
@@ -1,46 +1,81 @@
-{ stdenv, fetchurl, qt, zlib, libX11, libXext, libSM, libICE, libXt, glibc
-, makeDesktopItem, freetype, fontconfig, libXft, libXrender
+{ stdenv, fetchurl, zlib, libX11, libXext, libSM, libICE, libXt
+, freetype, fontconfig, libXft, libXrender, libxcb, expat, libXau, libXdmcp
+, libuuid, cups, xz
+, gstreamer, gstPluginsBase, libxml2
+, gtkSupport ? true, glib, gtk, pango, gdk_pixbuf, cairo, atk
+, kdeSupport ? false, qt4, kdelibs
}:
-assert stdenv.isLinux && stdenv.gcc.gcc != null;
+assert stdenv.isLinux && stdenv.gcc.gcc != null && stdenv.gcc.libc != null;
+
+let
+ mirror = ftp://ftp.ussg.iu.edu/pub/opera;
+in
stdenv.mkDerivation rec {
- name = "opera-10.63";
+ name = "opera-11.51-1087";
- builder = ./builder.sh;
+ buildNativeInputs = [ xz ];
src =
if stdenv.system == "i686-linux" then
fetchurl {
- url = "http://mirror.liteserver.nl/pub/opera/linux/1063/opera-10.63-6450.i386.linux.tar.bz2";
- sha256 = "dd105d602a4b8897749a4cb9610f8bfe2d07d4f4cc9bf3905930c65592737259";
+ url = "${mirror}/linux/1151/${name}.i386.linux.tar.bz2";
+ sha256 = "1baaim404g8nwd7knbl1p1ardpx36ib5159nkvqfnnavfyhkinp2";
}
else if stdenv.system == "x86_64-linux" then
fetchurl {
- url = "http://mirror.liteserver.nl/pub/opera/linux/1063/opera-10.63-6450.x86_64.linux.tar.bz2";
- sha256 = "da8ae14cf317364ab0295102220246b205bf30c59c00cadb571395c90dda7c74";
+ url = "${mirror}/linux/1151/${name}.x86_64.linux.tar.xz";
+ sha256 = "1bciqyfhhdywaasj717by1a975ywf672r3pv9cw9bn0b90pgp933";
}
else throw "Opera is not supported on ${stdenv.system} (only i686-linux and x86_64 linux are supported)";
dontStrip = 1;
-
- # `operapluginwrapper' requires libXt. Adding it makes startup faster
- # and omits error messages (on x86).
- libPath =
- let list = [ stdenv.gcc.gcc glibc qt zlib libX11 libXt libXext libSM libICE libXft freetype fontconfig
- libXrender];
- in stdenv.lib.makeLibraryPath list
- + ":" + (if stdenv.system == "x86_64-linux" then stdenv.lib.makeSearchPath "lib64" list else "");
-
- desktopItem = makeDesktopItem {
- name = "Opera";
- exec = "opera";
- icon = "opera";
- comment = "Opera Web Browser";
- desktopName = "Opera";
- genericName = "Web Browser";
- categories = "Application;Network;";
- };
+
+ phases = "unpackPhase installPhase fixupPhase";
+
+ installPhase = ''
+ ./install --unattended --prefix $out
+ '';
+
+ buildInputs =
+ [ stdenv.gcc.gcc stdenv.gcc.libc zlib libX11 libXt libXext libSM libICE
+ libXft freetype fontconfig libXrender libuuid expat
+ gstreamer libxml2 gstPluginsBase
+ ]
+ ++ stdenv.lib.optionals gtkSupport [ glib gtk pango gdk_pixbuf cairo atk ]
+ ++ stdenv.lib.optionals kdeSupport [ kdelibs qt4 ];
+
+ libPath = stdenv.lib.makeLibraryPath buildInputs
+ + stdenv.lib.optionalString (stdenv.system == "x86_64-linux")
+ (":" + stdenv.lib.makeSearchPath "lib64" buildInputs);
+
+ preFixup =
+ ''
+ find $out/lib/opera -type f | while read f; do
+ type=$(readelf -h "$f" 2>/dev/null | grep 'Type:' | sed -e 's/ *Type: *\([A-Z]*\) (.*/\1/')
+ if [ -z "$type" ]; then
+ :
+ elif [ $type == "EXEC" ]; then
+ echo "patching $f executable <<"
+ patchelf \
+ --set-interpreter "$(cat $NIX_GCC/nix-support/dynamic-linker)" \
+ --set-rpath "${libPath}" \
+ "$f"
+ elif [ $type == "DYN" ]; then
+ echo "patching $f library <<"
+ patchelf --set-rpath "${libPath}" "$f"
+ else
+ echo "Unknown type $type"
+ exit 1
+ fi
+ done
+ '';
+
+ postFixup = ''
+ oldRPATH=`patchelf --print-rpath $out/lib/opera/opera`
+ patchelf --set-rpath $oldRPATH:${cups}/lib $out/lib/opera/opera
+ '';
meta = {
homepage = http://www.opera.com;
diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix
index 98d38c8..f8b98a2 100644
--- a/pkgs/top-level/all-packages.nix
+++ b/pkgs/top-level/all-packages.nix
@@ -7055,7 +7055,9 @@ let
};
opera = callPackage ../applications/networking/browsers/opera {
- qt = qt3;
+ inherit (pkgs.gtkLibs) gdk_pixbuf atk;
+ inherit (pkgs.kde4) kdelibs;
+ inherit (pkgs.gst_all) gstreamer gstPluginsBase;
};
pan = callPackage ../applications/networking/newsreaders/pan {
--
tg: (1feccef..) t/opera-update (depends on: master)
_______________________________________________
nix-dev mailing list
[email protected]
http://lists.science.uu.nl/mailman/listinfo/nix-dev