summary refs log tree commit diff
path: root/pkgs
diff options
context:
space:
mode:
authorJoachim Fasting <joachifm@fastmail.fm>2017-02-15 02:13:22 +0100
committerJoachim Fasting <joachifm@fastmail.fm>2017-02-16 14:51:08 +0100
commit2d643613f3f56bc23060cc3bedbff231dd9e9e1e (patch)
tree752befe21a259d4ccced24585d7edf10ecc8f4af /pkgs
parenta46258ed0adae68ee46380a7f5eeef810a884c11 (diff)
downloadnixlib-2d643613f3f56bc23060cc3bedbff231dd9e9e1e.tar
nixlib-2d643613f3f56bc23060cc3bedbff231dd9e9e1e.tar.gz
nixlib-2d643613f3f56bc23060cc3bedbff231dd9e9e1e.tar.bz2
nixlib-2d643613f3f56bc23060cc3bedbff231dd9e9e1e.tar.lz
nixlib-2d643613f3f56bc23060cc3bedbff231dd9e9e1e.tar.xz
nixlib-2d643613f3f56bc23060cc3bedbff231dd9e9e1e.tar.zst
nixlib-2d643613f3f56bc23060cc3bedbff231dd9e9e1e.zip
mozart: refactoring
- Append emacs to the oz wrapper's command search path rather than the
  rpath.  Previously, emacs would end up in the closure but the oz
  shell script would not be helped by it. Now a user without emacs in
  their PATH can still get the complete Oz experience (which depends
  crucially on emacs).  To build a variant without emacs, do
  mozart.override { emacs = null; }
- Patch full path to oz executable into the oz desktop item to make the
  output less reliant on the runtime PATH
- Compress .elc files to save a little bit of space
- Make it easier to extend platform support
- Inline builder.sh
- Be more specific about patching.  oz and ozc are capable of inferring
  OZHOME themselves; thus we generate wrappers only for the binary
  executable components.

Note that gmp and boost would be removed by patchelf --shrink-path; I've
no idea whether they are used somehow, so we leave them in and forego
rpath shrinking for now.
Diffstat (limited to 'pkgs')
-rw-r--r--pkgs/development/compilers/mozart/binary.nix54
-rw-r--r--pkgs/development/compilers/mozart/builder.sh26
2 files changed, 43 insertions, 37 deletions
diff --git a/pkgs/development/compilers/mozart/binary.nix b/pkgs/development/compilers/mozart/binary.nix
index 1c3a21e2e449..d802aa4fe2e7 100644
--- a/pkgs/development/compilers/mozart/binary.nix
+++ b/pkgs/development/compilers/mozart/binary.nix
@@ -1,25 +1,30 @@
-{ stdenv, fetchurl, boost, emacs, gmp, makeWrapper
+{ stdenv, fetchurl, makeWrapper
+, boost, gmp
 , tcl-8_5, tk-8_5
+, emacs
 }:
 
 let
-
   version = "2.0.0";
 
-in stdenv.mkDerivation {
+  binaries = {
+    "x86_64-linux" = fetchurl {
+      url = "mirror://sourceforge/project/mozart-oz/v${version}-alpha.0/mozart2-${version}-alpha.0+build.4105.5c06ced-x86_64-linux.tar.gz";
+      sha256 = "0rsfrjimjxqbwprpzzlmydl3z3aiwg5qkb052jixdxjyad7gyh5z";
+    };
+  };
+in
+
+stdenv.mkDerivation {
   name = "mozart-binary-${version}";
 
   preferLocalBuild = true;
 
-  src = fetchurl {
-    url = "mirror://sourceforge/project/mozart-oz/v${version}-alpha.0/mozart2-${version}-alpha.0+build.4105.5c06ced-x86_64-linux.tar.gz";
-    sha256 = "0rsfrjimjxqbwprpzzlmydl3z3aiwg5qkb052jixdxjyad7gyh5z";
-  };
+  src = binaries."${stdenv.system}" or (throw "unsupported system: ${stdenv.system}");
 
   libPath = stdenv.lib.makeLibraryPath
     [ stdenv.cc.cc
       boost
-      emacs
       gmp
       tcl-8_5
       tk-8_5
@@ -27,10 +32,36 @@ in stdenv.mkDerivation {
 
   TK_LIBRARY = "${tk-8_5}/lib/tk8.5";
 
-  builder = ./builder.sh;
-
   buildInputs = [ makeWrapper ];
 
+  buildCommand = ''
+    mkdir $out
+    tar xvf $src -C $out --strip-components=1
+
+    for exe in $out/bin/{ozemulator,ozwish} ; do
+      patchelf --set-interpreter $(< $NIX_CC/nix-support/dynamic-linker) \
+               --set-rpath $libPath \
+               $exe
+    done
+
+    wrapProgram $out/bin/ozwish \
+      --set OZHOME $out \
+      --set TK_LIBRARY $TK_LIBRARY
+
+    wrapProgram $out/bin/ozemulator --set OZHOME $out
+
+    ${stdenv.lib.optionalString (emacs != null) ''
+      wrapProgram $out/bin/oz --suffix PATH ":" ${stdenv.lib.makeBinPath [ emacs ]}
+    ''}
+
+    sed -i $out/share/applications/oz.desktop \
+        -e "s,Exec=oz %u,Exec=$out/bin/oz %u,"
+
+    gzip -9n $out/share/mozart/elisp"/"*.elc
+
+    patchShebangs $out
+  '';
+
   meta = with stdenv.lib; {
     homepage = "http://www.mozart-oz.org/";
     description = "Multiplatform implementation of the Oz programming language";
@@ -42,6 +73,7 @@ in stdenv.mkDerivation {
       expressive power and advanced functionality.
     '';
     license = licenses.mit;
-    platforms = [ "x86_64-linux" ];
+    platforms = attrNames binaries;
+    hydraPlatforms = [];
   };
 }
diff --git a/pkgs/development/compilers/mozart/builder.sh b/pkgs/development/compilers/mozart/builder.sh
deleted file mode 100644
index b606d4c1bde9..000000000000
--- a/pkgs/development/compilers/mozart/builder.sh
+++ /dev/null
@@ -1,26 +0,0 @@
-source $stdenv/setup
-
-echo "unpacking $src..."
-tar xvfz $src
-
-mkdir -p $out/bin
-mkdir -p $out/share
-
-mv mozart*linux/bin/* $out/bin
-mv mozart*linux/share/* $out/share
-
-patchShebangs $out
-
-for f in $out/bin/*; do
-    b=$(basename $f)
-
-    if [ $b == "ozemulator" ] || [ $b == "ozwish" ]; then
-        patchelf --interpreter "$(cat $NIX_CC/nix-support/dynamic-linker)" \
-                 --set-rpath $libPath \
-                 $f
-        continue;
-    fi
-
-    wrapProgram $f --set OZHOME $out \
-                   --set TK_LIBRARY $TK_LIBRARY
-done