{ 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 ]; }; })