* Removed a lot of old Eclipse versions.

* Cleaned up the Eclipse classic expression a bit (e.g. use
  makeWrapper).  Also fall back to GTK 2.16 to fix some GUI glitches.

svn path=/nixpkgs/trunk/; revision=18485
This commit is contained in:
Eelco Dolstra 2009-11-20 15:19:00 +00:00
parent 853bfbd0b6
commit e0491358eb
15 changed files with 29 additions and 477 deletions

View File

@ -1,24 +1,24 @@
{ stdenv, fetchurl, patchelf, makeDesktopItem
, freetype, fontconfig, libX11, libXext, libXrender
, glib, gtk, libXtst
, jre
{ stdenv, fetchurl, patchelf, makeDesktopItem, makeWrapper
, freetype, fontconfig, libX11, libXext, libXrender, zlib
, glib, gtk, libXtst, jre
}:
assert stdenv ? glibc;
stdenv.mkDerivation rec {
name = "eclipse-3.5.1";
src = 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";
}
src =
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";
}
;
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";
};
desktopItem = makeDesktopItem {
name = "Eclipse";
@ -30,39 +30,24 @@ stdenv.mkDerivation rec {
categories = "Application;Development;";
};
buildInputs = [ patchelf ];
buildInputs = [ makeWrapper patchelf ];
buildCommand = ''
# Unpack tarball
tar xfvz $src
ensureDir $out
tar xfvz $src -C $out
# Patch binaries
cd eclipse
${if stdenv.system == "x86_64-linux" then
"patchelf --set-interpreter ${stdenv.glibc}/lib/ld-linux-x86-64.so.2 ./eclipse"
else
"patchelf --set-interpreter ${stdenv.glibc}/lib/ld-linux.so.2 ./eclipse"
}
patchelf --set-rpath ${freetype}/lib:${fontconfig}/lib:${libX11}/lib:${libXext}/lib:${libXrender}/lib ./libcairo-swt.so
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
cd ..
ensureDir $out/bin
cp -av eclipse $out
cat > $out/bin/eclipse <<EOF
#!/bin/sh
export PATH=${jre}/bin
export LD_LIBRARY_PATH=${glib}/lib:${gtk}/lib:${libXtst}/lib
$out/eclipse/eclipse "\$@"
EOF
chmod 755 $out/bin/eclipse
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
'';

View File

@ -1,96 +0,0 @@
args: with args; let
# hint: eclipse -data <dir to save global eclipse settings>
eclipsePlugin = name : src : stdenv.mkDerivation {
inherit src;
name = "${name}-eclipse-plugin";
phases = "unpackPhase";
buildInputs = [ args.unzip ];
unpackPhase = ''
mkdir tmp; cd tmp
unpackFile "$src"
[ -d ./eclipse ] || { # if plugin doesn't contain the eclipse directory itself create it (eg viPlugin)
mkdir "$TMP/eclipse"
mv * "$TMP/eclipse"
cd "$TMP"
}
ensureDir $out;
mv eclipse "$out"
'';
};
eclipseEnv = {name, eclipse, links}: runCommand name { inherit links eclipse; } ''
ensureDir $out/eclipse/links;
cp -r "$eclipse/bin" "$out/bin"
for f in $eclipse/eclipse/*; do
# using ln eclipse doesn't take the correct link folder :-( (TODO)
# ln -s "$f" "$out/eclipse/$(basename "$f")"
cp -r "$f" "$out/eclipse/$(basename "$f")"
done
# create links
for link in $links; do
echo "path=$link" >> "$out/eclipse/links/$(basename "$link").link"
done
'';
# mmh, this derivation is superfluous. We could also create them directly
# instead of symlinking them into the final env build by buildEnv
linkFile = deriv : writeTextFile {
name = "${deriv.name}-eclipse-feature-link";
destination = "/eclipse/links/${deriv.name}.link";
};
attr = rec {
eclipse = import ( ../eclipse-new + "/${version}/eclipse.nix") args; # without any additional plugins, why can't I use ./ instead of ../eclipse-new ?
plugins = rec {
viPlugin = { # see its license!
plugin = eclipsePlugin "viPlugin_1.15.6" (fetchurl {
url = http://www.satokar.com/viplugin/files/viPlugin_1.15.6.zip;
sha256 = "0p53q45a754j143pnnp51rjwj7lzawcxfy9xzpjasdic4a2l0f96";
# license = "Other/Proprietary License with Free Trial";
});
};
# PHP developement
emfSdoXsdSDK232 = {
plugin = eclipsePlugin "emf-sdo-xsd-SDK-2.3.2" (fetchurl {
url = http://eclipsemirror.yoxos.com/eclipse.org/modeling/emf/emf/downloads/drops/2.3.2/R200802051830/emf-sdo-xsd-SDK-2.3.2.zip;
sha256 = "1k20fn47x1giwhc80rzkqaw3mn0p3861sjp7aw39842lv2hjwn1c";
});
};
gefSDK332 = {
plugin = eclipsePlugin "GEF-SDK-3.3.2" (fetchurl {
url = http://ftp-stud.fht-esslingen.de/pub/Mirrors/eclipse/tools/gef/downloads/drops/3.3.2/R200802211602/GEF-SDK-3.3.2.zip;
sha256 = "1pk5qlwk0iyvs85s966y96ks8vq1g81fivvbf4lh43155rg0z037";
});
};
wtpSdkR202X = {
plugin = eclipsePlugin "wtp-sdk-R-2.0.2-20080223205547" (fetchurl {
url = http://ftp.wh2.tu-dresden.de/pub/mirrors/eclipse/webtools/downloads/drops/R2.0/R-2.0.2-20080223205547/wtp-sdk-R-2.0.2-20080223205547.zip;
sha256 = "0hmmmqzcd67jir2gmjd0xri5w2434xb2dk21hpgcv2qp0h9hhx0f";
});
};
pdt = {
deps = [ wtpSdkR202X gefSDK332 emfSdoXsdSDK232 ];
plugin = eclipsePlugin "pdt-runtime-1.0.3" (fetchurl {
url = http://sunsite.informatik.rwth-aachen.de:3080/eclipse/tools/pdt/downloads/drops/1.0.3/R200806030000/pdt-runtime-1.0.3.zip;
sha256 = "0wd2vc9bqrk5mqj5al2ichm8lxlf7gwifsb9lzv1d896j04ilm96";
});
};
};
};
pluginToList = a : [ a.plugin ] ++ lib.optionals (a ? deps ) (lib.concatMap pluginToList a.deps);
in
eclipseEnv {
name = "eclipse-${version}-with-plugins";
inherit (attr) eclipse;
links =
# example custom config: eclipse = { plugins = {eclipse, version, plugins } : let p = plugins; in [p.pdt]; };
let userChosenPlugins = (getConfig [ "eclipse" "plugins" ] ( {eclipse, version, plugins} : [] ))
{ inherit (attr) eclipse plugins; inherit version; };
in # concatenate plugins and plugin dependencies
(lib.uniqList { inputList = lib.concatMap pluginToList userChosenPlugins; });
}

View File

@ -1,22 +0,0 @@
--- a/build.xml 2008-03-02 14:34:05.000000000 +0100
+++ b/build.xml 2008-03-02 14:34:57.000000000 +0100
@@ -291,19 +291,6 @@
</condition>
<property name="bootclasspath" refid="default.bootclasspath" />
- <!--set the compiler and compiler arguments-->
- <!--the default compiler is set to the one used by eclipse rel. eng. -->
- <condition property="build.compiler" value="org.eclipse.jdt.core.JDTCompilerAdapter">
- <available file="${basedir}/ecj.jar" />
- </condition>
- <fail message="The Eclipse compiler (ecj.jar) cannot be found.">
- <condition>
- <not>
- <equals arg1="${build.compiler}" arg2="org.eclipse.jdt.core.JDTCompilerAdapter" />
- </not>
- </condition>
- </fail>
-
<property name="compilerArg" value="-enableJavadoc -encoding ISO-8859-1" />
<property name="javacSource" value="1.6" />
<property name="javacTarget" value="1.6" />

View File

@ -1,53 +0,0 @@
# Note, if you want to install plugins using the update manager you should
# copy the store path to a local directory and chown -R $USER yourcopy
# Then start your local copy
args: with args;
let arch = if stdenv.system == "x86_64-linux" then "x86_64"
else if stdenv.system == "i686-linux" then "x86"
else throw "not supported system";
in
args.stdenv.mkDerivation rec {
name = "eclipse-classic-3.3.1.1";
unpackPhase = "unzip \$src; set -x ";
buildInputs = [ unzip jdk gtk glib libXtst ant makeWrapper];
patches=./build-with-jdk-compiler.patch;
buildPhase = "./build -os linux -ws gtk -arch ${arch}";
libraries = [gtk glib libXtst];
installPhase = "
t=\$out/share/${name}
ensureDir \$t \$out/bin
cd result
tar xfz linux-gtk-*.tar.gz
mv eclipse \$out
"
#copied from other eclipse expressions
+" rpath=
for i in \$libraries; do
rpath=\$rpath\${rpath:+:}\$i/lib
done
find \$out \\( -type f -a -perm +0100 \\) \\
-print \\
-exec patchelf --interpreter \"$(cat \$NIX_GCC/nix-support/dynamic-linker)\" \\
--set-rpath \"\$rpath\" {} \\;
# Make a wrapper script so that the proper JDK is found.
makeWrapper \$out/eclipse/eclipse \$out/bin/eclipse \\
--prefix PATH \":\" \"\$jdk/bin\" \\
--prefix LD_LIBRARY_PATH \":\" \"\$rpath\"
sed -e 's=exec.*=exec \$(dirname $0)/../eclipse/eclipse $@=' -i \$out/bin/eclipse
";
# using dirname so that eclipse still runs after copying the whole store
# directory somewhere else (so that you can use the update manager
src = args.fetchurl {
url = http://mawercer.de/~nix/iyyx4hs1mgh1b1wa78j07pgq9k882m2k-eclipse-sourceBuild-srcIncluded-3.3.1.1.zip;
sha256 = "0n56i7ml816f839704qlkgs5ahl0iqgwc80kjq7n7g5rl9a4vhp4";
};
}

View File

@ -1,22 +0,0 @@
--- a/build.xml 2008-03-02 14:34:05.000000000 +0100
+++ b/build.xml 2008-03-02 14:34:57.000000000 +0100
@@ -291,19 +291,6 @@
</condition>
<property name="bootclasspath" refid="default.bootclasspath" />
- <!--set the compiler and compiler arguments-->
- <!--the default compiler is set to the one used by eclipse rel. eng. -->
- <condition property="build.compiler" value="org.eclipse.jdt.core.JDTCompilerAdapter">
- <available file="${basedir}/ecj.jar" />
- </condition>
- <fail message="The Eclipse compiler (ecj.jar) cannot be found.">
- <condition>
- <not>
- <equals arg1="${build.compiler}" arg2="org.eclipse.jdt.core.JDTCompilerAdapter" />
- </not>
- </condition>
- </fail>
-
<property name="compilerArg" value="-enableJavadoc -encoding ISO-8859-1" />
<property name="javacSource" value="1.6" />
<property name="javacTarget" value="1.6" />

View File

@ -1,40 +0,0 @@
source $stdenv/setup
unpackFile $src
ensureDir $out
mv eclipse $out/
# Set the dynamic linker and RPATH.
rpath=
for i in $libraries; do
rpath=$rpath${rpath:+:}$i/lib
done
find $out \( -type f -a -perm +0100 \) \
-print \
-exec patchelf --interpreter "$(cat $NIX_GCC/nix-support/dynamic-linker)" \
--set-rpath "$rpath" {} \;
# Make a wrapper script so that the proper JDK is found.
# don't use makeWrapper in order to change the last line.
ensureDir $out/bin
cat >> $out/bin/eclipse << EOF
#! /bin/sh -e
export PATH=${jdk}/bin\${PATH:+:}\$PATH
export LD_LIBRARY_PATH=$rpath\${LD_LIBRARY_PATH:+:}\$LD_LIBRARY_PATH
exec \$(dirname \$0)/../eclipse/eclipse $@
EOF
chmod +x $out/bin/eclipse
ensureDir plugin-working-dir
workingdir="$(pwd)/plugin-working-dir"
for plugin in $plugins; do
if test -e $plugin/install; then
cd $workingdir
$plugin/install "$out/eclipse"
rm -rf $workingdir/*
else
# assume that it is a file
cp $plugin $out/eclipse/plugins
fi
done

View File

@ -1,37 +0,0 @@
# recommended installation:
# nix-build -A eclipsesdk
# then cp -r $store-path ~/my-eclipse; chmod -R 777 ~/my-eclipse # ugh! I'm to lazy to assign permissions properly
# maybe also using a wrapper such as this (lower values should suffice for most needs)
# eclipseWrapper () {
# "$@" -vmargs -Xms2048m -Xmx2048m -XX:MaxPermSize=2048m
# }
#
# Why use a local copy? This way it's easier to use the update manager to get plugins :-)
{fetchurl, stdenv, jdk, gtk, glib, libXtst, makeOverridable, plugins ? [], unzip}:
let eclipseFun =
makeOverridable ({name, bindist} :
stdenv.mkDerivation {
inherit name;
builder = ./builder.sh;
src = bindist;
buildInputs = [ unzip /* unzip required by eclipseCDT */ ];
inherit jdk plugins;
libraries = [gtk glib libXtst];
}); in
eclipseFun {
# you can override these settings usnig .override {...}
name = "eclipse-sdk-3.5M6";
bindist =
if (stdenv.system == "x86_64-linux") then fetchurl {
url = ftp://sunsite.informatik.rwth-aachen.de/pub/mirror/eclipse/S-3.5M6-200903130100/eclipse-SDK-3.5M6-linux-gtk-x86_64.tar.gz;
sha256 = "10p4idp5rcdf7xqwfk3kvmjxhi8x1v835m0y4pn9q4nhfb5643pi";
} else fetchurl {
url = ftp://mirror.micromata.de/eclipse/eclipse/downloads/drops/S-3.5M6-200903130100/eclipse-SDK-3.5M6-linux-gtk.tar.gz;
sha256 = "1z8j26b632ydhqrmwgbcqgiq7f1a542jam06z2h62mcbqazrcyah";
};
}

View File

@ -1,18 +0,0 @@
{fetchurl, stdenv, makeWrapper, jdk, gtk, glib, libXtst, plugins ? []}:
let {
body =
stdenv.mkDerivation {
name = "eclipse-sdk-3.1.2";
builder = ./builder.sh;
src = bindist;
inherit makeWrapper jdk plugins;
libraries = [gtk glib libXtst];
};
bindist =
fetchurl {
url = http://archive.eclipse.org/eclipse/downloads/drops/R-3.1.2-200601181600/eclipse-SDK-3.1.2-linux-gtk.tar.gz;
md5 = "ece50ed4d6d48dac839bfe8fa719fcff";
};
}

View File

@ -1,18 +0,0 @@
{fetchurl, stdenv, makeWrapper, jdk, gtk, glib, libXtst}:
let {
body =
stdenv.mkDerivation {
name = "eclipse-sdk-3.1";
builder = ./builder.sh;
src = bindist;
inherit makeWrapper jdk;
libraries = [gtk glib libXtst];
};
bindist =
fetchurl {
url = http://sunsite.informatik.rwth-aachen.de/eclipse/downloads/drops/R-3.1-200506271435/eclipse-SDK-3.1-linux-gtk.tar.gz;
md5 = "0441c11cc5af1e84ed3be322929899e8";
};
}

View File

@ -1,21 +0,0 @@
source $stdenv/setup
ensureDir $out
cat >> $out/install <<EOF
#! /bin/sh
PLUGIN=$plugin
UNZIP=$unzip/bin/unzip
ECLIPSE=\$1
\$UNZIP \$PLUGIN
if test -e plugins; then
cp -prd * \$ECLIPSE
else
cd *
cp -prd * \$ECLIPSE
fi
EOF
chmod u+x $out/install

View File

@ -1,10 +0,0 @@
{stdenv, unzip, plugin}:
let {
body =
stdenv.mkDerivation {
name = "eclipse-zip-plugin-installer";
builder = ./builder.sh;
inherit plugin unzip;
};
}

View File

@ -1,6 +0,0 @@
{stdenv, fetchurl}:
fetchurl {
url = http://www.ii.uib.no/~karltk/spoofax/plugins/org.spoofax.editor_0.3.0.jar;
md5 = "ff66d229c774f840ec8285f64c0f95bc";
}

View File

@ -1,6 +0,0 @@
{stdenv, fetchurl}:
fetchurl {
url = http://nixos.org/tarballs/org.spoofax.editor_0.3.10.jar;
md5 = "ff77853e750e19a9b8d380c17ea27f3d";
}

View File

@ -1,32 +0,0 @@
args: with args;
stdenv.mkDerivation {
name = "nix-eclipse-runner-script";
phases = "installPhase";
installPhase = ''
ensureDir $out/bin
target=$out/bin/nix-run-eclipse
cat > $target << EOF
#!/bin/sh
export PATH=${jre}/bin:$PATH
export LD_LIBRARY_PATH=${glib}/lib:${gtk}/lib:${libXtst}/lib
# If you run out of XX space try these? -vmargs -Xms512m -Xmx2048m -XX:MaxPermSize=256m
exec "\$@"
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 = [args.lib.maintainers.marcweber];
platforms = args.lib.platforms.linux;
};
}

View File

@ -6466,66 +6466,14 @@ let
inherit (xlibs) libX11;
};
eclipseRunner = import ../applications/editors/eclipse/runner.nix {
inherit stdenv lib jre;
inherit (gtkLibs) gtk glib;
inherit (xlibs) libXtst;
};
eclipseNewer = import ../applications/editors/eclipse-classic {
inherit stdenv fetchurl patchelf makeDesktopItem freetype fontconfig jre;
inherit (gtkLibs) glib gtk;
eclipse = import ../applications/editors/eclipse-classic {
inherit stdenv fetchurl patchelf makeDesktopItem makeWrapper freetype fontconfig jre zlib;
# GTK 2.18 gives glitches such as mouse clicks on buttons not
# working correctly.
inherit (gtkLibs216) glib gtk;
inherit (xlibs) libX11 libXext libXrender libXtst;
};
/* commenting out eclipse - Have a look at eclipseRunner - Marc Weber
Reason: You can get Eclipse in many prepacked variations on eclipse.org
No need to duplicate efforts.
To make Equinox p2 work you have to create a local copy of Eclipse anyway (AFAIK).
Maybe there is a solution. I don't have time to investigate. I want to prevent
people from using old crappy Eclipse versions.
# put something like this into your ~/.nixpkgs/config.nix file
#eclipse = {
# plugins = {eclipse, version, plugins } : let p = plugins; in
# [ p.pdt # PHP developement
# p.viPlugin # vim keybindings (see license)
# ];
#};
eclipseNew = import ../applications/editors/eclipse-new/3.3.1.1.nix {
# outdated, but 3.3.1.1 does already compile on nix, feel free to work 3.4
inherit fetchurl stdenv makeWrapper jdk unzip ant buildEnv
getConfig lib zip writeTextFile runCommand;
inherit (gtkLibs) gtk glib;
inherit (xlibs) libXtst;
};
eclipse = plugins:
import ../applications/editors/eclipse {
inherit fetchurl stdenv jdk;
inherit (gtkLibs) gtk glib;
inherit (xlibs) libXtst;
inherit plugins makeOverridable unzip;
};
eclipsesdk = eclipse [];
# eclipseSpoofax = lowPrio (appendToName "with-spoofax" (eclipse [eclipsePlugins.spoofax]));
# eclipseCDT = import ../applications/editors/eclipse/eclipse-cdt.nix {
# inherit fetchurl stdenv eclipse;
# };
# # quinox p2 installer
# eclipseMinimal = import ../applications/editors/eclipse/eclipse-p2-installer.nix {
# inherit fetchurl stdenv eclipse;
# };
#
# eclipsePlugins = import ../applications/editors/eclipse/plugins.nix {
# inherit fetchurl stdenv;
# };
*/
ed = import ../applications/editors/ed {
inherit fetchurl stdenv;
};