about summary refs log tree commit diff
path: root/nixpkgs/pkgs/applications/office/softmaker/generic.nix
diff options
context:
space:
mode:
Diffstat (limited to 'nixpkgs/pkgs/applications/office/softmaker/generic.nix')
-rw-r--r--nixpkgs/pkgs/applications/office/softmaker/generic.nix34
1 files changed, 30 insertions, 4 deletions
diff --git a/nixpkgs/pkgs/applications/office/softmaker/generic.nix b/nixpkgs/pkgs/applications/office/softmaker/generic.nix
index 9505271db14c..82ac2b58f68a 100644
--- a/nixpkgs/pkgs/applications/office/softmaker/generic.nix
+++ b/nixpkgs/pkgs/applications/office/softmaker/generic.nix
@@ -3,6 +3,10 @@
   # Dynamic Libraries
 , curl, libGL, libX11, libXext, libXmu, libXrandr, libXrender
 
+  # For fixing up execution of /bin/ls, which is necessary for
+  # product unlocking.
+, coreutils, libredirect
+
 , pname, version, edition, suiteName, src, archive
 
 , ...
@@ -45,7 +49,22 @@ in stdenv.mkDerivation rec {
     runHook postUnpack
   '';
 
-  installPhase = ''
+  installPhase = let
+    # SoftMaker/FreeOffice collects some system information upon
+    # unlocking the product. But in doing so, it attempts to execute
+    # /bin/ls. If the execve syscall fails, the whole unlock
+    # procedure fails. This works around that by rewriting /bin/ls
+    # to the proper path.
+    #
+    # SoftMaker Office restarts itself upon some operations, such
+    # changing the theme and unlocking. Unfortunately, we do not
+    # have control over its environment then and it will fail
+    # with an error.
+    lsIntercept = ''
+      --set LD_PRELOAD "${libredirect}/lib/libredirect.so" \
+      --set NIX_REDIRECTS "/bin/ls=${coreutils}/bin/ls"
+    '';
+  in ''
     runHook preInstall
 
     mkdir -p $out/share
@@ -54,9 +73,12 @@ in stdenv.mkDerivation rec {
     # Wrap rather than symlinking, so that the programs can determine
     # their resource path.
     mkdir -p $out/bin
-    makeWrapper $out/share/${pname}${edition}/planmaker $out/bin/${pname}-planmaker
-    makeWrapper $out/share/${pname}${edition}/presentations $out/bin/${pname}-presentations
-    makeWrapper $out/share/${pname}${edition}/textmaker $out/bin/${pname}-textmaker
+    makeWrapper $out/share/${pname}${edition}/planmaker $out/bin/${pname}-planmaker \
+      ${lsIntercept}
+    makeWrapper $out/share/${pname}${edition}/presentations $out/bin/${pname}-presentations \
+      ${lsIntercept}
+    makeWrapper $out/share/${pname}${edition}/textmaker $out/bin/${pname}-textmaker \
+      ${lsIntercept}
 
     for size in 16 32 48 64 96 128 256 512 1024; do
       mkdir -p $out/share/icons/hicolor/''${size}x''${size}/apps
@@ -74,6 +96,10 @@ in stdenv.mkDerivation rec {
       done
     done
 
+    # freeoffice 973 misses the 96x96 application icons, giving broken symbolic links
+    # remove broken symbolic links
+    find $out -xtype l -ls -exec rm {} \;
+
     # Add desktop items
     ${desktopItems.planmaker.buildCommand}
     ${desktopItems.presentations.buildCommand}