[Nix-dev] [PATCH] t/opera

Marc Weber marco-oweber at gmx.de
Tue Aug 31 00:07:08 CEST 2010


Opera update

Major change: Opera is based on X nowo ptionally using GTK, QT, KDE
toolkits for GUI.

GTK seems to work. QT starts (the open dialog does not
show icons). KDE does not start.
See comments to learn about how to choose one of those toolkits.
I can browse github again.
---
 .../networking/browsers/opera/builder.sh           |   15 +++----
 .../networking/browsers/opera/default.nix          |   45 ++++++++++++++++---
 pkgs/top-level/all-packages.nix                    |    4 +-
 3 files changed, 46 insertions(+), 18 deletions(-)

diff --git a/pkgs/applications/networking/browsers/opera/builder.sh b/pkgs/applications/networking/browsers/opera/builder.sh
index 66a3388..dddcb5e 100644
--- a/pkgs/applications/networking/browsers/opera/builder.sh
+++ b/pkgs/applications/networking/browsers/opera/builder.sh
@@ -5,11 +5,9 @@ buildPhase() {
 }
 
 installPhase() {
-    substituteInPlace install.sh --replace /bin/pwd pwd
-    
-    # Note: the "no" is because the install scripts asks whether we
-    # want to install icons in some system-wide directories.
-    echo no | ./install.sh --prefix=$out
+    ensureDir $out
+    sed -i "s@/usr/local@$out at g" install
+    ./install --unattended --system
 
     [ -z ${system##*64*} ] && suf=64
 
@@ -24,10 +22,11 @@ installPhase() {
             "$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
 
+    # patchelf is not enough? Opera only finds libXcursor when usign
+    # LD_LIBRARY_PATH (seems to be optional though)
+    sed -i "2s@^@\\nexport LD_LIBRARY_PATH=$libPath@" $out/bin/opera 
+    
     ensureDir $out/share/applications
     cp $desktopItem/share/applications/* $out/share/applications
 }
diff --git a/pkgs/applications/networking/browsers/opera/default.nix b/pkgs/applications/networking/browsers/opera/default.nix
index 8e81005..d3cdc0b 100644
--- a/pkgs/applications/networking/browsers/opera/default.nix
+++ b/pkgs/applications/networking/browsers/opera/default.nix
@@ -1,24 +1,53 @@
-{ stdenv, fetchurl, qt, zlib, libX11, libXext, libSM, libICE, libXt, glibc
+{ stdenv, fetchurl, zlib, libX11, libXext, libXft, freetype, libSM, libICE,
+  libXt, libXrender, libXcursor, fontconfig, libuuid, glibc, libXi
+# qt gui:
+, qt46, kde4
+# gtk gui
+, gtkLibs, cairo
+
 , makeDesktopItem
+, # set of "gtk" "qt" "kde"
+  # kde does not work yet
+  # qt starts but icons are missing (?)
+  # so use gtk for now!
+  guiSupport ? [ "gtk" "qt"  /* "kde" */ ]
 }:
 
 assert stdenv.isLinux && stdenv.gcc.gcc != null;
 
+
+let
+
+  libsForGuis = {
+      # Debug Dialog Toolkits with opera --full-version (see last line)
+      # See: http://www.opera.com/support/usingopera/operaini/
+      qt  = [qt46 kde4.kdelibs];                      # "Dialog Toolkit" = 1
+      gtk = with gtkLibs; [gtk glib atk pango cairo]; # "Dialog Toolkit" = 2
+      kde = [];                         # "Dialog Toolkit" = 3
+  }; in
+
+
+/* TIp: enable unix like editing shortcuts:
+ Settings > Preferences > Advanced > Shortcuts
+*/
+
+
 stdenv.mkDerivation rec {
-  name = "opera-10.10";
+
+  name = "opera-10.61";
 
   builder = ./builder.sh;
   
   src =
     if stdenv.system == "i686-linux" then
       fetchurl {
-        url = "http://mirror.liteserver.nl/pub/opera/linux/1010/final/en/i386/shared/opera-10.10.gcc4-shared-qt3.i386.tar.bz2";
-        sha256 = "0y8xahwgx5jw83ky4zkw8ixyfgnd2xg9k0zq15yivhimi60fsppc";
+        url = "http://mirror.liteserver.nl/pub/opera/linux/1061/opera-10.61-6430.i386.linux.tar.bz2";
+        sha256 = "004h0v80lr307fk2l81y0r4kp50sij7nzqvr6blhqaq4m6jahlhc";
       }
     else if stdenv.system == "x86_64-linux" then
       fetchurl {
-        url = "http://mirror.liteserver.nl/pub/opera/linux/1010/final/en/x86_64/opera-10.10.gcc4-shared-qt3.x86_64.tar.bz2";
-        sha256 = "1z0zgalqv9lnf1jsg3zg9diqfyszh75r7m1dbkifkdawn4zv4q3s";
+        url = "http://mirror.liteserver.nl/pub/opera/linux/1061/opera-10.61-6430.x86_64.linux.tar.bz2";
+        sha256 = "0l9vd2ak7aqrr3gr7l3b45fngk7kilsd3h6xf855x1qxrfygky3a";
       }
     else throw "Opera is not supported on ${stdenv.system} (only i686-linux and x86_64 linux are supported)";
 
@@ -27,7 +56,9 @@ stdenv.mkDerivation rec {
   # `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];
+    let list = [ stdenv.gcc.gcc glibc zlib libX11 libXt libXext libSM libICE
+                libXft freetype fontconfig libXrender libXcursor libXi libuuid]
+              ++ (stdenv.lib.concatMap (x: builtins.getAttr x libsForGuis) guiSupport);
     in stdenv.lib.makeLibraryPath list
         + ":" + (if stdenv.system == "x86_64-linux" then stdenv.lib.makeSearchPath "lib64" list else "");
 
diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix
index acb9e21..877e3ad 100644
--- a/pkgs/top-level/all-packages.nix
+++ b/pkgs/top-level/all-packages.nix
@@ -5913,9 +5913,7 @@ let
     stdenv = stdenv2;
   };
 
-  opera = callPackage ../applications/networking/browsers/opera {
-    qt = qt3;
-  };
+  opera = callPackage ../applications/networking/browsers/opera { };
 
   pan = callPackage ../applications/networking/newsreaders/pan {
     inherit (gtkLibs) gtk;
-- 
1.7.2.1




More information about the nix-dev mailing list