add mathematica 10 (slightly borked but runs)

This commit is contained in:
Aristid Breitkreuz 2014-09-17 23:25:10 +02:00
parent 55909ad36b
commit 6fc7efa7b3
3 changed files with 145 additions and 8 deletions

View File

@ -0,0 +1,124 @@
{ stdenv
, coreutils
, patchelf
, requireFile
, alsaLib
, fontconfig
, freetype
, gcc
, glib
, libpng
, ncurses
, opencv
, openssl
, unixODBC
, xlibs
, zlib
}:
let
platform =
if stdenv.system == "i686-linux" || stdenv.system == "x86_64-linux" then
"Linux"
else
throw "Mathematica requires i686-linux or x86_64 linux";
in
stdenv.mkDerivation rec {
name = "mathematica-9.0.0";
src = requireFile rec {
name = "Mathematica_9.0.0_LINUX.sh";
message = ''
This nix expression requires that Mathematica_9.0.0_LINUX.sh is
already part of the store. Find the file on your Mathematica CD
and add it to the nix store with nix-store --add-fixed sha256 <FILE>.
'';
sha256 = "106zfaplhwcfdl9rdgs25x83xra9zcny94gb22wncbfxvrsk3a4q";
};
buildInputs = [
coreutils
patchelf
alsaLib
coreutils
fontconfig
freetype
gcc.gcc
gcc.libc
glib
ncurses
opencv
openssl
unixODBC
] ++ (with xlibs; [
libX11
libXext
libXtst
libXi
libXmu
libXrender
libxcb
]);
ldpath = stdenv.lib.makeLibraryPath buildInputs
+ stdenv.lib.optionalString (stdenv.system == "x86_64-linux")
(":" + stdenv.lib.makeSearchPath "lib64" buildInputs);
phases = "unpackPhase installPhase fixupPhase";
unpackPhase = ''
echo "=== Extracting makeself archive ==="
# find offset from file
offset=$(${stdenv.shell} -c "$(grep -axm1 -e 'offset=.*' $src); echo \$offset" $src)
dd if="$src" ibs=$offset skip=1 | tar -xf -
cd Unix
'';
installPhase = ''
cd Installer
# don't restrict PATH, that has already been done
sed -i -e 's/^PATH=/# PATH=/' MathInstaller
echo "=== Running MathInstaller ==="
./MathInstaller -auto -createdir=y -execdir=$out/bin -targetdir=$out/libexec/Mathematica -platforms=${platform} -silent
'';
preFixup = ''
echo "=== PatchElfing away ==="
find $out/libexec/Mathematica/SystemFiles -type f -perm +100 | 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 "${ldpath}" \
"$f"
patchelf --shrink-rpath "$f"
elif [ "$type" == "DYN" ]; then
echo "patching $f library <<"
patchelf \
--set-rpath "$(patchelf --print-rpath "$f"):${ldpath}" \
"$f" \
&& patchelf --shrink-rpath "$f" \
|| echo unable to patch ... ignoring 1>&2
else
echo "not patching $f <<: unknown elf type"
fi
done
'';
# all binaries are already stripped
dontStrip = true;
# we did this in prefixup already
dontPatchELF = true;
meta = {
description = "Wolfram Mathematica computational software system";
homepage = "http://www.wolfram.com/mathematica/";
license = stdenv.lib.licenses.unfree;
};
}

View File

@ -14,6 +14,8 @@
, unixODBC , unixODBC
, xlibs , xlibs
, zlib , zlib
, libxml2
, libuuid
}: }:
let let
@ -24,17 +26,18 @@ let
throw "Mathematica requires i686-linux or x86_64 linux"; throw "Mathematica requires i686-linux or x86_64 linux";
in in
stdenv.mkDerivation rec { stdenv.mkDerivation rec {
version = "10.0.1";
name = "mathematica-9.0.0"; name = "mathematica-${version}";
src = requireFile rec { src = requireFile rec {
name = "Mathematica_9.0.0_LINUX.sh"; name = "Mathematica_${version}_LINUX.sh";
message = '' message = ''
This nix expression requires that Mathematica_9.0.0_LINUX.sh is This nix expression requires that ${name} is
already part of the store. Find the file on your Mathematica CD already part of the store. Find the file on your Mathematica CD
and add it to the nix store with nix-store --add-fixed sha256 <FILE>. and add it to the nix store with nix-store --add-fixed sha256 <FILE>.
''; '';
sha256 = "106zfaplhwcfdl9rdgs25x83xra9zcny94gb22wncbfxvrsk3a4q"; sha256 = "1514qy5kbyislv8j7ryw8021k26y0z6dndliwy8hfi7w7kgb3ynq";
}; };
buildInputs = [ buildInputs = [
@ -51,6 +54,8 @@ stdenv.mkDerivation rec {
opencv opencv
openssl openssl
unixODBC unixODBC
libxml2
libuuid
] ++ (with xlibs; [ ] ++ (with xlibs; [
libX11 libX11
libXext libXext
@ -59,6 +64,11 @@ stdenv.mkDerivation rec {
libXmu libXmu
libXrender libXrender
libxcb libxcb
libXcursor
libXfixes
libXrandr
libICE
libSM
]); ]);
ldpath = stdenv.lib.makeLibraryPath buildInputs ldpath = stdenv.lib.makeLibraryPath buildInputs
@ -92,11 +102,13 @@ stdenv.mkDerivation rec {
: :
elif [ "$type" == "EXEC" ]; then elif [ "$type" == "EXEC" ]; then
echo "patching $f executable <<" echo "patching $f executable <<"
patchelf --shrink-rpath "$f"
patchelf \ patchelf \
--set-interpreter "$(cat $NIX_GCC/nix-support/dynamic-linker)" \ --set-interpreter "$(cat $NIX_GCC/nix-support/dynamic-linker)" \
--set-rpath "${ldpath}" \ --set-rpath "$(patchelf --print-rpath "$f"):${ldpath}" \
"$f" "$f" \
patchelf --shrink-rpath "$f" && patchelf --shrink-rpath "$f" \
|| echo unable to patch ... ignoring 1>&2
elif [ "$type" == "DYN" ]; then elif [ "$type" == "DYN" ]; then
echo "patching $f library <<" echo "patching $f library <<"
patchelf \ patchelf \

View File

@ -11204,6 +11204,7 @@ let
openblas_0_2_2 = callPackage ../development/libraries/science/math/openblas/0.2.2.nix { }; openblas_0_2_2 = callPackage ../development/libraries/science/math/openblas/0.2.2.nix { };
mathematica = callPackage ../applications/science/math/mathematica { }; mathematica = callPackage ../applications/science/math/mathematica { };
mathematica9 = callPackage ../applications/science/math/mathematica/9.nix { };
sage = callPackage ../applications/science/math/sage { }; sage = callPackage ../applications/science/math/sage { };