anchor.diff:      # 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
  
positive.code: 
    # For fixing up execution of /bin/ls, which is necessary for
    # product unlocking.
  , coreutils
  
  , pname, version, edition, suiteName, src, archive
  
  
negative.code:     runHook postUnpack
    '';
  
    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
  