* Eclipse: don't use an ugly "version" argument. Instead there now is

a function "buildEclipse" that takes a binary Eclipse distribution
  plus metadata as arguments.  The package name now distinguishes
  between Eclipse distributions (e.g. "eclipse-sdk" for Classic,
  "eclipse-cpp" for the C/C++ IDE).

svn path=/nixpkgs/trunk/; revision=26787
This commit is contained in:
Eelco Dolstra 2011-04-11 20:29:47 +00:00
parent 4f3f7bd4ad
commit e91e1cfe76
2 changed files with 96 additions and 143 deletions

View File

@ -1,153 +1,114 @@
{ stdenv, fetchurl, patchelf, makeDesktopItem, makeWrapper
, freetype, fontconfig, libX11, libXext, libXrender, zlib
, glib, gtk, libXtst, jre
# defaulting to this version because not all installable plugins work with 3.5.2 yet
# can also be set to "latest"
, version ? "3.5.1"
}:
/*
Note: Eclipse stores various Eclipse instance specific data in ~/.eclipse/*-instance/...
The '*' depends on the executable location of Eclipse.
So if an Eclipse dependency such as gtk changes a different Eclipse setup directory will be used and
the plugins and update site list and more global settings seem to be gone.
Staring Eclipse from ~/.nix-profile/bin/eclipse doesn't help.
So I suggest copying the store path to ~/eclipse and run ~/eclipse/bin/eclipse instead.
However this still has some drawbacks: If you run nix-collect-garbage the gtk
libs the wrapper refers to might be gone. It should be easy for you to
replace the imortant lines in the wrapper.
You can also put this eclipse wrapper script (which was removed from
all-packages.nix -r 18458)
to your packageOverrides section and use that to run eclipse/eclipse.
Its parameterized by system because you may want to run both: i686 and x86_64 systems.
eclipseRunner =
pkgs.stdenv.mkDerivation {
name = "nix-eclipse-runner-script-${stdenv.system}";
phases = "installPhase";
installPhase = ''
ensureDir $out/bin
target=$out/bin/nix-run-eclipse-${stdenv.system}
cat > $target << EOF
#!/bin/sh
export PATH=${pkgs.jre}/bin:\$PATH
export LD_LIBRARY_PATH=${pkgs.gtkLibs216.glib}/lib:${pkgs.gtkLibs216.gtk}/lib:${pkgs.xlibs.libXtst}/lib
# If you run out of XX space try these? -vmargs -Xms512m -Xmx2048m -XX:MaxPermSize=256m
eclipse="\$1"; shift
exec \$eclipse -vmargs -Xms512m -Xmx2048m -XX:MaxPermSize=256m "\$@"
EOF
chmod +x $target
'';
meta = {
description = "provide environment to run Eclipse";
longDescription = ''
Is there one distribution providing support for up to date Eclipse installations?
There are various reasons why not.
Installing binaries just works. Get Eclipse binaries form eclipse.org/downloads
install this wrapper then run Eclipse like this:
nix-run-eclipse $PATH_TO_ECLIPSE/eclipse/eclipse
and be happy. Everything works including update sites.
'';
maintainers = [pkgs.lib.maintainers.marcweber];
platforms = pkgs.lib.platforms.linux;
};
};
*/
let
v = if version == "latest" then "3.5.2" else version;
in
assert stdenv ? glibc;
stdenv.mkDerivation rec {
name = "eclipse-${v}";
src =
if v == "3.5.2" then
let
buildEclipse =
{ name, src, description }:
stdenv.mkDerivation rec {
inherit name src;
desktopItem = makeDesktopItem {
name = "Eclipse";
exec = "eclipse";
icon = "eclipse";
comment = "Integrated Development Environment";
desktopName = "Eclipse IDE";
genericName = "Integrated Development Environment";
categories = "Application;Development;";
};
buildInputs = [ makeWrapper patchelf ];
buildCommand = ''
# Unpack tarball.
ensureDir $out
tar xfvz $src -C $out
# Patch binaries.
interpreter=$(echo ${stdenv.glibc}/lib/ld-linux*.so.2)
patchelf --set-interpreter $interpreter $out/eclipse/eclipse
patchelf --set-rpath ${freetype}/lib:${fontconfig}/lib:${libX11}/lib:${libXrender}/lib:${zlib}/lib $out/eclipse/libcairo-swt.so
# Create wrapper script. Pass -configuration to store
# settings in ~/.eclipse/org.eclipse.platform_<version> rather
# than ~/.eclipse/org.eclipse.platform_<version>_<number>.
productId=$(sed 's/id=//; t; d' $out/eclipse/.eclipseproduct)
productVersion=$(sed 's/version=//; t; d' $out/eclipse/.eclipseproduct)
makeWrapper $out/eclipse/eclipse $out/bin/eclipse \
--prefix PATH : ${jre}/bin \
--prefix LD_LIBRARY_PATH : ${glib}/lib:${gtk}/lib:${libXtst}/lib \
--add-flags "-configuration \$HOME/.eclipse/''${productId}_$productVersion/configuration"
# Create desktop item.
ensureDir $out/share/applications
cp ${desktopItem}/share/applications/* $out/share/applications
''; # */
meta = {
homepage = http://www.eclipse.org/;
inherit description;
};
};
in {
eclipse_sdk_35 = buildEclipse {
name = "eclipse-sdk-3.5.2";
description = "Eclipse Classic";
src =
if stdenv.system == "x86_64-linux" then
fetchurl {
url = http://ftp-stud.fht-esslingen.de/pub/Mirrors/eclipse/eclipse/downloads/drops/R-3.5.2-201002111343/eclipse-SDK-3.5.2-linux-gtk-x86_64.tar.gz;
url = http://archive.eclipse.org/eclipse/downloads/drops/R-3.5.2-201002111343/eclipse-SDK-3.5.2-linux-gtk-x86_64.tar.gz;
md5 = "54e2ce0660b2b1b0eb4267acf70ea66d";
}
else
fetchurl {
url = http://mirror.selfnet.de/eclipse/eclipse/downloads/drops/R-3.5.2-201002111343/eclipse-SDK-3.5.2-linux-gtk.tar.gz;
url = http://archive.eclipse.org/eclipse/downloads/drops/R-3.5.2-201002111343/eclipse-SDK-3.5.2-linux-gtk.tar.gz;
md5 = "bde55a2354dc224cf5f26e5320e72dac";
};
};
# !!! Use mirror://eclipse/.
eclipse_sdk_36 = buildEclipse {
name = "eclipse-sdk-3.6.2";
description = "Eclipse Classic";
src =
if stdenv.system == "x86_64-linux" then
fetchurl {
url = http://ftp.ing.umu.se/mirror/eclipse/eclipse/downloads/drops/R-3.6.2-201102101200/eclipse-SDK-3.6.2-linux-gtk-x86_64.tar.gz;
sha256 = "0dfcfadcd6337c897fbfd5b292de481931dfce12d43289ecb93691fd27dd47f4";
}
else if v == "3.5.1" then
if stdenv.system == "x86_64-linux" then
fetchurl {
url = http://ftp.ing.umu.se/mirror/eclipse/eclipse/downloads/drops/R-3.5.1-200909170800/eclipse-SDK-3.5.1-linux-gtk-x86_64.tar.gz;
sha256 = "132zd7q9q29h978wnlsfbrlszc85r1wj30yqs2aqbv3l5xgny1kk";
}
else
fetchurl {
url = http://mirrors.linux-bg.org/eclipse/eclipse/downloads/drops/R-3.5.1-200909170800/eclipse-SDK-3.5.1-linux-gtk.tar.gz;
sha256 = "0a0lpa7gxg91zswpahi6fvg3csl4csvlym4z2ad5cc1d4yvicp56";
}
else if v == "3.6.2" then
if stdenv.system == "x86_64-linux" then
fetchurl {
url = http://ftp.ing.umu.se/mirror/eclipse/eclipse/downloads/drops/R-3.6.2-201102101200/eclipse-SDK-3.6.2-linux-gtk-x86_64.tar.gz;
sha256 = "0dfcfadcd6337c897fbfd5b292de481931dfce12d43289ecb93691fd27dd47f4";
}
else
fetchurl {
url = http://ftp.ing.umu.se/mirror/eclipse/eclipse/downloads/drops/R-3.6.2-201102101200/eclipse-SDK-3.6.2-linux-gtk.tar.gz;
sha256 = "1bh8ykliqr8wbciv13vpiy50rvm7yszk7y8dslr796dbwhi5b1cj";
}
else throw "no source for eclipse version ${v} known";
desktopItem = makeDesktopItem {
name = "Eclipse";
exec = "eclipse";
icon = "eclipse";
comment = "Integrated Development Environment";
desktopName = "Eclipse IDE";
genericName = "Integrated Development Environment";
categories = "Application;Development;";
else
fetchurl {
url = http://ftp.ing.umu.se/mirror/eclipse/eclipse/downloads/drops/R-3.6.2-201102101200/eclipse-SDK-3.6.2-linux-gtk.tar.gz;
sha256 = "1bh8ykliqr8wbciv13vpiy50rvm7yszk7y8dslr796dbwhi5b1cj";
};
};
buildInputs = [ makeWrapper patchelf ];
buildCommand = ''
# Unpack tarball
ensureDir $out
tar xfvz $src -C $out
# Patch binaries
interpreter=$(echo ${stdenv.glibc}/lib/ld-linux*.so.2)
patchelf --set-interpreter $interpreter $out/eclipse/eclipse
patchelf --set-rpath ${freetype}/lib:${fontconfig}/lib:${libX11}/lib:${libXrender}/lib:${zlib}/lib $out/eclipse/libcairo-swt.so
# Create wrapper script
makeWrapper $out/eclipse/eclipse $out/bin/eclipse \
--prefix PATH : ${jre}/bin \
--prefix LD_LIBRARY_PATH : ${glib}/lib:${gtk}/lib:${libXtst}/lib
# Create desktop item
ensureDir $out/share/applications
cp ${desktopItem}/share/applications/* $out/share/applications
'';
meta = {
homepage = http://www.eclipse.org/;
description = "A extensible multi-language software development environment";
longDescription = ''
'';
eclipse_cpp_36 = buildEclipse {
name = "eclipse-cpp-3.6.2";
description = "Eclipse IDE for C/C++ Developers";
src =
if stdenv.system == "x86_64-linux" then
fetchurl {
url = http://ftp-stud.fht-esslingen.de/pub/Mirrors/eclipse/technology/epp/downloads/release/helios/SR2/eclipse-cpp-helios-SR2-linux-gtk-x86_64.tar.gz;
sha1 = "6f914e11fa15a900c46825e4aa8299afd76e7e65";
}
else
fetchurl {
url = http://ftp-stud.fht-esslingen.de/pub/Mirrors/eclipse/technology/epp/downloads/release/helios/SR2/eclipse-cpp-helios-SR2-linux-gtk.tar.gz;
sha1 = "1156e4bc0253ae3a3a4e54839e4944dc64d3108f";
};
};
}

View File

@ -5920,15 +5920,7 @@ let
eaglemode = callPackage ../applications/misc/eaglemode { };
eclipse = callPackage ../applications/editors/eclipse {
# GTK 2.18 gives glitches such as mouse clicks on buttons not
# working correctly.
inherit (gtkLibs216) glib gtk;
};
eclipseLatest = eclipse.override { version = "latest"; };
eclipse36 = callPackage ../applications/editors/eclipse {
version = "3.6.2";
};
eclipses = recurseIntoAttrs (callPackage ../applications/editors/eclipse { });
ed = callPackage ../applications/editors/ed { };