3
0
Fork 0
forked from mirrors/nixpkgs
nixpkgs/pkgs/applications/networking/browsers/opera/default.nix
John Wiegley 28b6fb61e6 Change occurrences of gcc to the more general cc
This is done for the sake of Yosemite, which does not have gcc, and yet
this change is also compatible with Linux.
2014-12-26 11:06:21 -06:00

88 lines
2.7 KiB
Nix

{ stdenv, fetchurl, zlib, libX11, libXext, libSM, libICE, libXt
, freetype, fontconfig, libXft, libXrender, libxcb, expat, libXau, libXdmcp
, libuuid, cups, xz
, gstreamer, gst_plugins_base, libxml2
, gtkSupport ? true, glib, gtk, pango, gdk_pixbuf, cairo, atk
, kdeSupport ? false, qt4, kdelibs
}:
assert stdenv.isLinux && stdenv.cc.gcc != null && stdenv.cc.libc != null;
let
mirror = http://get.geo.opera.com/pub/opera;
in
stdenv.mkDerivation rec {
name = "opera-12.12-1707";
src =
if stdenv.system == "i686-linux" then
fetchurl {
url = "${mirror}/linux/1212/${name}.i386.linux.tar.xz";
sha256 = "1jkrhxjxa5kz4bhyma0zlnsszdn84sq4pks3x8bfcayn12m6yxkz";
}
else if stdenv.system == "x86_64-linux" then
fetchurl {
url = "${mirror}/linux/1212/${name}.x86_64.linux.tar.xz";
sha256 = "0acizxgyqblcvl91dwmvi937fi1kw6whz5qgxyl1fkygbayji90v";
}
else throw "Opera is not supported on ${stdenv.system} (only i686-linux and x86_64 linux are supported)";
dontStrip = 1;
phases = "unpackPhase installPhase fixupPhase";
installPhase = ''
./install --unattended --prefix $out
'';
buildInputs =
[ stdenv.cc.gcc stdenv.cc.libc zlib libX11 libXt libXext libSM libICE
libXft freetype fontconfig libXrender libuuid expat
gstreamer libxml2 gst_plugins_base
]
++ 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_CC/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
# This file should normally require a gtk-update-icon-cache -q /usr/share/icons/hicolor command
# It have no reasons to exist in a redistribuable package
rm $out/share/icons/hicolor/icon-theme.cache
'';
meta = {
homepage = http://www.opera.com;
description = "Web browser";
license = stdenv.lib.licenses.unfree;
};
}