summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTomaSajt <62384384+TomaSajt@users.noreply.github.com>2023-09-26 22:36:39 +0200
committerTomaSajt <62384384+TomaSajt@users.noreply.github.com>2023-09-26 22:36:39 +0200
commit4483eb2949e7e16a9a416ff243e02bd2181f3e82 (patch)
tree8cd2af378f17aa49a4b73d65b308de6e6a6a165f
parentMerge pull request #256921 from r-ryantm/auto-update/flow (diff)
downloadnixpkgs-4483eb2949e7e16a9a416ff243e02bd2181f3e82.tar.gz
dyalog: init at 18.2.45405
-rw-r--r--pkgs/by-name/dy/dyalog/dyalogscript.patch8
-rw-r--r--pkgs/by-name/dy/dyalog/mapl.patch31
-rw-r--r--pkgs/by-name/dy/dyalog/package.nix225
3 files changed, 264 insertions, 0 deletions
diff --git a/pkgs/by-name/dy/dyalog/dyalogscript.patch b/pkgs/by-name/dy/dyalog/dyalogscript.patch
new file mode 100644
index 000000000000..a65878b7adec
--- /dev/null
+++ b/pkgs/by-name/dy/dyalog/dyalogscript.patch
@@ -0,0 +1,8 @@
+--- a/scriptbin/dyalogscript
++++ b/scriptbin/dyalogscript
+@@ -5,1 +5,1 @@
+-INSTALLDIR="/opt/mdyalog/18.2/64/unicode"
++INSTALLDIR="@installdir@"
+@@ -40,1 +40,1 @@
+-: ${SCRIPTDIR:=$INSTALLDIR}
++SCRIPTDIR="@scriptdir@"
diff --git a/pkgs/by-name/dy/dyalog/mapl.patch b/pkgs/by-name/dy/dyalog/mapl.patch
new file mode 100644
index 000000000000..32424bea124e
--- /dev/null
+++ b/pkgs/by-name/dy/dyalog/mapl.patch
@@ -0,0 +1,31 @@
+diff --git a/mapl b/mapl
+index c9d3727..de24c77 100755
+--- a/mapl
++++ b/mapl
+@@ -20,26 +20,8 @@ SHORTVERSION=182U64
+ LONGVERSION="18.2 64-bit Unicode"
+ REL="`echo "${LONGVERSION}" | sed 's/ .*$//'`"
+
+-# Find the Dyalog installation directory
+-if [ "$(uname)" = Linux ]; then
+- # this script location, canonical.
+- THIS="$(readlink -f $0)"
+-else
+- # this script location.
+- THIS="$0"
+-fi
+-export DYALOG=$(cd $(dirname $THIS) && pwd)
+-
+ export APL_LANGUAGE_BAR_FILE=${DYALOG}/languagebar.json
+
+-if [ "$(uname)" = Linux ]; then
+- if [ "x" = "x${LD_LIBRARY_PATH}" ]; then
+- export LD_LIBRARY_PATH="${DYALOG}"
+- else
+- export LD_LIBRARY_PATH="${DYALOG}:${LD_LIBRARY_PATH}"
+- fi
+-fi
+-
+ # Setup the configuration directory
+ MYCONFIGDIR=${HOME}/.dyalog
+ if [ ! -d "${MYCONFIGDIR}" ] ; then
diff --git a/pkgs/by-name/dy/dyalog/package.nix b/pkgs/by-name/dy/dyalog/package.nix
new file mode 100644
index 000000000000..c8786d5d6baa
--- /dev/null
+++ b/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 ];
+ };
+})