diff options
Diffstat (limited to 'nixpkgs/pkgs/by-name/dy/dyalog/package.nix')
-rw-r--r-- | nixpkgs/pkgs/by-name/dy/dyalog/package.nix | 225 |
1 files changed, 225 insertions, 0 deletions
diff --git a/nixpkgs/pkgs/by-name/dy/dyalog/package.nix b/nixpkgs/pkgs/by-name/dy/dyalog/package.nix new file mode 100644 index 000000000000..c8786d5d6baa --- /dev/null +++ b/nixpkgs/pkgs/by-name/dy/dyalog/package.nix @@ -0,0 +1,225 @@ +{ lib +, stdenv +, fetchFromGitHub +, fetchurl + +, config +, acceptLicense ? config.dyalog.acceptLicense or false + +, autoPatchelfHook +, dpkg +, makeWrapper + +, copyDesktopItems +, makeDesktopItem + +, glib +, ncurses5 + +, dotnet-sdk_6 +, dotnetSupport ? false + +, alsa-lib +, gtk2 +, libXdamage +, libXtst +, libXScrnSaver +, nss +, htmlRendererSupport ? false + +, R +, rPackages +, rSupport ? false + +, unixODBC +, sqaplSupport ? false + +, zeroFootprintRideSupport ? false + +, enableDocs ? false +}: + +let + dyalogHome = "$out/lib/dyalog"; + + rscproxy = rPackages.buildRPackage { + name = "rscproxy"; + src = fetchFromGitHub { + owner = "Dyalog"; + repo = "rscproxy"; + rev = "31de3323fb8596ff5ecbf4bacd030e542cfd8133"; + hash = "sha256-SVoBoAWUmQ+jWaTG7hdmyRq6By4RnmmgWZXoua19/Kg="; + }; + }; + + makeWrapperArgs = [ + "--set DYALOG ${dyalogHome}" + # also needs to be set when the `-script` flag is used + "--add-flags DYALOG=${dyalogHome}" + # needed for default user commands to work + "--add-flags SESSION_FILE=${dyalogHome}/default.dse" + ] + ++ lib.optionals dotnetSupport [ + # needs to be set to run .NET Bridge + "--set DOTNET_ROOT ${dotnet-sdk_6}" + # .NET Bridge files are runtime dependencies, but cannot be patchelf'd + "--prefix LD_LIBRARY_PATH : ${dyalogHome}" + ] + ++ lib.optionals rSupport [ + # RConnect resolves R from PATH + "--prefix PATH : ${R}/bin" + # RConnect uses `ldd` to find `libR.so` + "--prefix LD_LIBRARY_PATH : ${R}/lib/R/lib" + # RConnect uses `rscproxy` to communicate with R + "--prefix R_LIBS_SITE : ${rscproxy}/library" + ]; + + licenseUrl = "https://www.dyalog.com/uploads/documents/Developer_Software_Licence.pdf"; + + licenseDisclaimer = '' + Dyalog is a licenced software. Dyalog licences do not include a licence to distribute Dyalog with your work. + For non-commercial purposes, a Basic Licence is granted when you accept the conditions and download a free copy of Dyalog. + + More details about the license can be found here: ${licenseUrl} + + If you agree to these terms, you can either override this package: + `dyalog.override { acceptLicense = true; }` + + or you can set the following nixpkgs config option: + `config.dyalog.acceptLicense = true;` + ''; +in +stdenv.mkDerivation (finalAttrs: { + pname = "dyalog"; + version = "18.2.45405"; + shortVersion = lib.versions.majorMinor finalAttrs.version; + + src = + assert !acceptLicense -> throw licenseDisclaimer; + fetchurl { + url = "https://download.dyalog.com/download.php?file=${finalAttrs.shortVersion}/linux_64_${finalAttrs.version}_unicode.x86_64.deb"; + sha256 = "sha256-pA/WGTA6YvwG4MgqbiPBLKSKPtLGQM7BzK6Bmyz5pmM="; + }; + + outputs = [ "out" ] ++ lib.optional enableDocs "doc"; + + postUnpack = '' + sourceRoot=$sourceRoot/opt/mdyalog/${finalAttrs.shortVersion}/64/unicode + ''; + + patches = [ ./dyalogscript.patch ./mapl.patch ]; + + postPatch = lib.optionalString dotnetSupport '' + # Patch to use .NET 6.0 instead of .NET Core 3.1 (can be removed when Dyalog 19.0 releases) + substituteInPlace Dyalog.Net.Bridge.*.json --replace "3.1" "6.0" + ''; + + nativeBuildInputs = [ + autoPatchelfHook + copyDesktopItems + dpkg + makeWrapper + ]; + + buildInputs = [ + glib # Used by Conga and .NET Bridge + ncurses5 # Used by the dyalog binary + ] + ++ lib.optionals htmlRendererSupport [ + alsa-lib + gtk2 + libXdamage + libXtst + libXScrnSaver + nss + ] + ++ lib.optionals sqaplSupport [ + unixODBC + ]; + + # See which files are not really important: `https://github.com/Dyalog/DyalogDocker/blob/master/rmfiles.sh` + installPhase = '' + runHook preInstall + + mkdir -p ${dyalogHome} + cp -r aplfmt aplkeys apltrans fonts Library PublicCACerts SALT StartupSession ${dyalogHome} + cp aplkeys.sh default.dse dyalog dyalog.rt dyalog.dcfg.template dyalog.ver.dcfg.template languagebar.json mapl startup.dyalog ${dyalogHome} + + mkdir ${dyalogHome}/lib + cp lib/{conga34_64.so,dyalog64.so,libconga34ssl64.so} ${dyalogHome}/lib + + # Only keep the most useful workspaces + mkdir ${dyalogHome}/ws + cp ws/{conga,dfns,isolate,loaddata,salt,sharpplot,util}.dws ${dyalogHome}/ws + '' + + lib.optionalString dotnetSupport '' + cp libnethost.so Dyalog.Net.Bridge.* ${dyalogHome} + '' + + lib.optionalString htmlRendererSupport '' + cp -r locales swiftshader ${dyalogHome} + cp libcef.so libEGL.so libGLESv2.so chrome-sandbox natives_blob.bin snapshot_blob.bin icudtl.dat v8_context_snapshot.bin *.pak ${dyalogHome} + cp lib/htmlrenderer.so ${dyalogHome}/lib + '' + + lib.optionalString rSupport '' + cp ws/rconnect.dws ${dyalogHome}/ws + '' + + lib.optionalString sqaplSupport '' + cp lib/cxdya64u64u.so ${dyalogHome}/lib + cp ws/sqapl.dws ${dyalogHome}/ws + cp odbc.ini.sample sqapl.err sqapl.ini ${dyalogHome} + '' + + lib.optionalString zeroFootprintRideSupport '' + cp -r RIDEapp ${dyalogHome} + '' + + lib.optionalString enableDocs '' + mkdir -p $doc/share/doc/dyalog + cp -r help/* $doc/share/doc/dyalog + ln -s $doc/share/doc/dyalog ${dyalogHome}/help + '' + + '' + install -Dm644 dyalog.svg $out/share/icons/hicolor/scalable/apps/dyalog.svg + + makeWrapper ${dyalogHome}/dyalog $out/bin/dyalog ${lib.concatStringsSep " " makeWrapperArgs} + makeWrapper ${dyalogHome}/mapl $out/bin/mapl ${lib.concatStringsSep " " makeWrapperArgs} + + install -Dm755 scriptbin/dyalogscript $out/bin/dyalogscript + substituteInPlace $out/bin/dyalogscript \ + --subst-var-by installdir ${dyalogHome} \ + --subst-var-by scriptdir $out/bin + + runHook postInstall + ''; + + preFixup = lib.optionalString htmlRendererSupport '' + # `libudev.so` is a runtime dependency of CEF + patchelf ${dyalogHome}/libcef.so --add-needed libudev.so + ''; + + desktopItems = [ + (makeDesktopItem { + name = "dyalog"; + desktopName = "Dyalog"; + exec = finalAttrs.meta.mainProgram; + comment = finalAttrs.meta.description; + icon = "dyalog"; + categories = [ "Development" ]; + genericName = "APL interpreter"; + terminal = true; + }) + ]; + + meta = { + changelog = "https://dyalog.com/dyalog/dyalog-versions/${lib.replaceStrings [ "." ] [ "" ] finalAttrs.shortVersion}.htm"; + description = "The Dyalog APL interpreter"; + homepage = "https://www.dyalog.com"; + license = { + fullName = "Dyalog License"; + url = licenseUrl; + free = false; + }; + mainProgram = "dyalog"; + maintainers = with lib.maintainers; [ tomasajt markus1189 ]; + platforms = [ "x86_64-linux" ]; + sourceProvenance = with lib.sourceTypes; [ binaryNativeCode ]; + }; +}) |