about summary refs log tree commit diff
path: root/pkgs/development/interpreters
diff options
context:
space:
mode:
authorMatthew Bauer <mjbauer95@gmail.com>2019-02-09 12:14:06 -0500
committerMatthew Bauer <mjbauer95@gmail.com>2019-02-09 12:14:06 -0500
commit5c09d977c794d9243ddac17f6c429b5432431f8f (patch)
tree1acbd7e7f0c01546d955d47c6a8fddfec8e632b6 /pkgs/development/interpreters
parent21d991b1fd78214023551a0dada17b129cbd5cd5 (diff)
parent18d059a4ac001fbaa9c2abc750a2830a52e1dae5 (diff)
downloadnixlib-5c09d977c794d9243ddac17f6c429b5432431f8f.tar
nixlib-5c09d977c794d9243ddac17f6c429b5432431f8f.tar.gz
nixlib-5c09d977c794d9243ddac17f6c429b5432431f8f.tar.bz2
nixlib-5c09d977c794d9243ddac17f6c429b5432431f8f.tar.lz
nixlib-5c09d977c794d9243ddac17f6c429b5432431f8f.tar.xz
nixlib-5c09d977c794d9243ddac17f6c429b5432431f8f.tar.zst
nixlib-5c09d977c794d9243ddac17f6c429b5432431f8f.zip
Merge remote-tracking branch 'origin/master' into staging
Diffstat (limited to 'pkgs/development/interpreters')
-rw-r--r--pkgs/development/interpreters/groovy/default.nix4
-rw-r--r--pkgs/development/interpreters/lua-5/build-lua-package.nix182
-rw-r--r--pkgs/development/interpreters/lua-5/setup-hook.sh6
-rw-r--r--pkgs/development/interpreters/lua-5/wrap-lua.nix19
-rw-r--r--pkgs/development/interpreters/lua-5/wrap.sh99
-rw-r--r--pkgs/development/interpreters/lua-5/wrapper.nix2
-rw-r--r--pkgs/development/interpreters/php/default.nix8
-rw-r--r--pkgs/development/interpreters/racket/default.nix3
-rw-r--r--pkgs/development/interpreters/racket/minimal.nix1
9 files changed, 313 insertions, 11 deletions
diff --git a/pkgs/development/interpreters/groovy/default.nix b/pkgs/development/interpreters/groovy/default.nix
index 6b55f006cd2a..dc04e72c7411 100644
--- a/pkgs/development/interpreters/groovy/default.nix
+++ b/pkgs/development/interpreters/groovy/default.nix
@@ -4,11 +4,11 @@
 
 stdenv.mkDerivation rec {
   name = "groovy-${version}";
-  version = "2.5.5";
+  version = "2.5.6";
 
   src = fetchurl {
     url = "http://dl.bintray.com/groovy/maven/apache-groovy-binary-${version}.zip";
-    sha256 = "16hj2v6r89s3qrgbnkinwwzv16mphb6jjw8ijgmmd9y2063nchc2";
+    sha256 = "14lfxnc03hmakwagvl3sb6c0b298v3awcdr1gafwnmsqv03hhkdn";
   };
 
   buildInputs = [ unzip makeWrapper ];
diff --git a/pkgs/development/interpreters/lua-5/build-lua-package.nix b/pkgs/development/interpreters/lua-5/build-lua-package.nix
new file mode 100644
index 000000000000..0bed5efe4f79
--- /dev/null
+++ b/pkgs/development/interpreters/lua-5/build-lua-package.nix
@@ -0,0 +1,182 @@
+# Generic builder for lua packages
+{ lib
+, lua
+, stdenv
+, wrapLua
+, unzip
+, writeText
+# Whether the derivation provides a lua module or not.
+, toLuaModule
+}:
+
+{
+name ? "${attrs.pname}-${attrs.version}"
+
+, version
+
+# by default prefix `name` e.g. "lua5.2-${name}"
+, namePrefix ? "lua" + lua.luaversion + "-"
+
+# Dependencies for building the package
+, buildInputs ? []
+
+# Dependencies needed for running the checkPhase.
+# These are added to buildInputs when doCheck = true.
+, checkInputs ? []
+
+# propagate build dependencies so in case we have A -> B -> C,
+# C can import package A propagated by B
+, propagatedBuildInputs ? []
+, propagatedNativeBuildInputs ? []
+
+# used to disable derivation, useful for specific lua versions
+, disabled ? false
+
+# Additional arguments to pass to the makeWrapper function, which wraps
+# generated binaries.
+, makeWrapperArgs ? []
+, external_deps ? propagatedBuildInputs ++ buildInputs
+
+# Skip wrapping of lua programs altogether
+, dontWrapLuaPrograms ? false
+
+, meta ? {}
+
+, passthru ? {}
+, doCheck ? false
+
+# appended to the luarocks generated config
+# in peculiar variables like { EVENT_INCDIR } can be useful to work around
+# luarocks limitations, ie, luarocks consider include/lib folders to be subfolders of the same package in external_deps_dirs
+# as explained in https://github.com/luarocks/luarocks/issues/766
+, extraConfig ? ""
+
+# relative to srcRoot, path to the rockspec to use when using rocks
+, rockspecFilename ?  "../*.rockspec"
+
+# must be set for packages that don't have a rock
+, knownRockspec ? null
+
+, ... } @ attrs:
+
+
+# Keep extra attributes from `attrs`, e.g., `patchPhase', etc.
+if disabled
+then throw "${name} not supported for interpreter ${lua}"
+else
+
+let
+
+  deps_dirs= lib.concatStringsSep ", " (
+    map (x: "\"${builtins.toString x}\"") external_deps
+  );
+
+  # TODO
+  # - add rocktrees (look at torch-distro.nix/https://github.com/luarocks/luarocks/wiki/Config-file-format)
+  # - silence warnings
+  luarocks_config = "luarocksConfig";
+  luarocks_content = ''
+    local_cache = ""
+    -- array of strings
+    external_deps_dirs = {
+    ${deps_dirs}
+    }
+    rocks_trees = {
+    }
+    ${extraConfig}
+  '';
+in
+toLuaModule ( lua.stdenv.mkDerivation (
+builtins.removeAttrs attrs ["disabled" "checkInputs"] // {
+
+  name = namePrefix + name;
+
+  buildInputs = [ wrapLua lua.pkgs.luarocks ]
+    ++ buildInputs
+    ++ lib.optionals doCheck checkInputs
+    ;
+
+  # propagate lua to active setup-hook in nix-shell
+  propagatedBuildInputs = propagatedBuildInputs ++ [ lua ];
+  doCheck = false;
+
+  # enabled only for src.rock
+  setSourceRoot= let
+    name_only=(builtins.parseDrvName name).name;
+  in
+    lib.optionalString (knownRockspec == null) ''
+    # format is rockspec_basename/source_basename
+    # rockspec can set it via spec.source.dir
+    folder=$(find . -mindepth 2 -maxdepth 2 -type d -path '*${name_only}*/*'|head -n1)
+    sourceRoot="$folder"
+  '';
+
+  configurePhase = ''
+    runHook preConfigure
+
+    cat > ${luarocks_config} <<EOF
+    ${luarocks_content}
+    EOF
+    export LUAROCKS_CONFIG=$PWD/${luarocks_config};
+  ''
+  + lib.optionalString (knownRockspec != null) ''
+
+    # prevents the following type of error:
+    # Inconsistency between rockspec filename (42fm1b3d7iv6fcbhgm9674as3jh6y2sh-luv-1.22.0-1.rockspec) and its contents (luv-1.22.0-1.rockspec)
+    rockspecFilename="$TMP/$(stripHash ''${knownRockspec})"
+    cp ''${knownRockspec} $rockspecFilename
+    runHook postConfigure
+  '';
+
+  buildPhase = ''
+    runHook preBuild
+
+    nix_debug "Using LUAROCKS_CONFIG=$LUAROCKS_CONFIG"
+
+    LUAROCKS=luarocks
+    if (( ''${NIX_DEBUG:-0} >= 1 )); then
+        LUAROCKS="$LUAROCKS --verbose"
+    fi
+
+    patchShebangs .
+
+    runHook postBuild
+  '';
+
+  postFixup = lib.optionalString (!dontWrapLuaPrograms) ''
+    wrapLuaPrograms
+  '' + attrs.postFixup or '''';
+
+  installPhase = attrs.installPhase or ''
+    runHook preInstall
+
+    # luarocks make assumes sources are available in cwd
+    # After the build is complete, it also installs the rock.
+    # If no argument is given, it looks for a rockspec in the current directory
+    # but some packages have several rockspecs in their source directory so
+    # we force the use of the upper level since it is
+    # the sole rockspec in that folder
+    # maybe we could reestablish dependency checking via passing --rock-trees
+
+    nix_debug "ROCKSPEC $rockspecFilename"
+    nix_debug "cwd: $PWD"
+    $LUAROCKS make --deps-mode=none --tree $out ''${rockspecFilename}
+
+    # to prevent collisions when creating environments
+    # also added -f as it doesn't always exist
+    # don't remove the whole directory as
+    rm -rf $out/lib/luarocks/rocks/manifest
+
+    runHook postInstall
+  '';
+
+  passthru = {
+    inherit lua; # The lua interpreter
+  } // passthru;
+
+  meta = with lib.maintainers; {
+    platforms = lua.meta.platforms;
+    # add extra maintainer(s) to every package
+    maintainers = (meta.maintainers or []) ++ [ ];
+  } // meta;
+}))
diff --git a/pkgs/development/interpreters/lua-5/setup-hook.sh b/pkgs/development/interpreters/lua-5/setup-hook.sh
index 5e37bd27f617..3989bedffdb1 100644
--- a/pkgs/development/interpreters/lua-5/setup-hook.sh
+++ b/pkgs/development/interpreters/lua-5/setup-hook.sh
@@ -1,7 +1,7 @@
 # set -e
 
 nix_print() {
-    if (( "${NIX_DEBUG:-0}" >= $1 )); then
+    if [ ${NIX_DEBUG:-0} -ge $1 ]; then
         echo "$2"
     fi
 }
@@ -32,13 +32,13 @@ addToLuaPath() {
     cd "$dir"
     for pattern in @luapathsearchpaths@;
     do
-        addToLuaSearchPathWithCustomDelimiter LUA_PATH "$PWD/$pattern"
+        addToLuaSearchPathWithCustomDelimiter NIX_LUA_PATH "$PWD/$pattern"
     done
 
     # LUA_CPATH
     for pattern in @luacpathsearchpaths@;
     do
-        addToLuaSearchPathWithCustomDelimiter LUA_CPATH "$PWD/$pattern"
+        addToLuaSearchPathWithCustomDelimiter NIX_LUA_CPATH "$PWD/$pattern"
     done
     cd - >/dev/null
 }
diff --git a/pkgs/development/interpreters/lua-5/wrap-lua.nix b/pkgs/development/interpreters/lua-5/wrap-lua.nix
new file mode 100644
index 000000000000..f00e0d5ac336
--- /dev/null
+++ b/pkgs/development/interpreters/lua-5/wrap-lua.nix
@@ -0,0 +1,19 @@
+{ lib
+, lua
+, makeSetupHook
+, makeWrapper
+}:
+
+with lib;
+
+# defined in trivial-builders.nix
+# imported as wrapLua in lua-packages.nix and passed to build-lua-derivation to be used as buildInput
+makeSetupHook {
+      deps = makeWrapper;
+      substitutions.executable = lua.interpreter;
+      substitutions.lua = lua;
+      substitutions.LuaPathSearchPaths = lib.escapeShellArgs lua.LuaPathSearchPaths;
+      substitutions.LuaCPathSearchPaths = lib.escapeShellArgs lua.LuaPathSearchPaths;
+
+} ./wrap.sh
+
diff --git a/pkgs/development/interpreters/lua-5/wrap.sh b/pkgs/development/interpreters/lua-5/wrap.sh
new file mode 100644
index 000000000000..545a0ae271c4
--- /dev/null
+++ b/pkgs/development/interpreters/lua-5/wrap.sh
@@ -0,0 +1,99 @@
+# Inspired by python/wrapper.nix
+# Wrapper around wrapLuaProgramsIn, below. The $luaPath
+# variable is passed in from the buildLuarocksPackage function.
+set -e
+
+wrapLuaPrograms() {
+    wrapLuaProgramsIn "$out/bin" "$out $luaPath"
+}
+
+# Builds environment variables like LUA_PATH and PATH walking through closure
+# of dependencies.
+buildLuaPath() {
+    local luaPath="$1"
+    local path
+
+    # Create an empty table of paths (see doc on loadFromPropagatedInputs
+    # for how this is used). Build up the program_PATH and program_LUA_PATH
+    # variables.
+    declare -A luaPathsSeen=()
+    program_PATH=
+    luaPathsSeen["@lua@"]=1
+    addToSearchPath program_PATH @lua@/bin
+    for path in $luaPath; do
+        addToLuaPath "$path"
+    done
+}
+
+
+# with an executable shell script which will set some environment variables
+# and then call into the original binary (which has been given a .wrapped suffix).
+# luaPath is a list of directories
+wrapLuaProgramsIn() {
+    local dir="$1"
+    local luaPath="$2"
+    local f
+
+    buildLuaPath "$luaPath"
+
+    if [ ! -d "$dir" ]; then
+        nix_debug "$dir not a directory"
+        return
+    fi
+
+    nix_debug "wrapping programs in [$dir]"
+
+    # Find all regular files in the output directory that are executable.
+    find "$dir" -type f -perm -0100 -print0 | while read -d "" f; do
+        # Rewrite "#! .../env lua" to "#! /nix/store/.../lua".
+        # Strip suffix, like "3" or "2.7m" -- we don't have any choice on which
+        # Lua to use besides one with this hook anyway.
+        if head -n1 "$f" | grep -q '#!.*/env.*\(lua\)'; then
+            sed -i "$f" -e "1 s^.*/env[ ]*\(lua\)[^ ]*^#! @executable@^"
+        fi
+
+        # wrapProgram creates the executable shell script described
+        # above. The script will set LUA_(C)PATH and PATH variables!
+        # (see pkgs/build-support/setup-hooks/make-wrapper.sh)
+        local -a wrap_args=("$f"
+            --prefix PATH ':' "$program_PATH"
+            --prefix LUA_PATH ';' "$NIX_LUA_PATH"
+            --prefix LUA_CPATH ';' "$NIX_LUA_CPATH"
+        )
+
+        # Add any additional arguments provided by makeWrapperArgs
+        # argument to buildLuaPackage.
+        # makeWrapperArgs
+        local -a user_args="($makeWrapperArgs)"
+        local -a wrapProgramArgs=("${wrap_args[@]}" "${user_args[@]}")
+
+        # see setup-hooks/make-wrapper.sh
+        wrapProgram "${wrapProgramArgs[@]}"
+
+    done
+}
+
+# Adds the lib and bin directories to the LUA_PATH and PATH variables,
+# respectively. Recurses on any paths declared in
+# `propagated-native-build-inputs`, while avoiding duplicating paths by
+# flagging the directories it has visited in `luaPathsSeen`.
+loadFromPropagatedInputs() {
+    local dir="$1"
+    # Stop if we've already visited here.
+    if [ -n "${luaPathsSeen[$dir]}" ]; then
+        return;
+    fi
+    luaPathsSeen[$dir]=1
+
+    addToLuaPath "$dir"
+    addToSearchPath program_PATH $dir/bin
+
+    # Inspect the propagated inputs (if they exist) and recur on them.
+    local prop="$dir/nix-support/propagated-native-build-inputs"
+    if [ -e "$prop" ]; then
+        local new_path
+        for new_path in $(cat $prop); do
+            loadFromPropagatedInputs "$new_path"
+        done
+    fi
+}
diff --git a/pkgs/development/interpreters/lua-5/wrapper.nix b/pkgs/development/interpreters/lua-5/wrapper.nix
index 9abbd77d575e..7f584c0f0aff 100644
--- a/pkgs/development/interpreters/lua-5/wrapper.nix
+++ b/pkgs/development/interpreters/lua-5/wrapper.nix
@@ -44,7 +44,7 @@ let
               rm -f "$out/bin/$prg"
               if [ -x "$prg" ]; then
                 nix_debug "Making wrapper $prg"
-                makeWrapper "$path/bin/$prg" "$out/bin/$prg" --suffix LUA_PATH ';' "$LUA_PATH"   --suffix LUA_CPATH ';' "$LUA_CPATH" ${stdenv.lib.concatStringsSep " " makeWrapperArgs}
+                makeWrapper "$path/bin/$prg" "$out/bin/$prg" --suffix LUA_PATH ';' "$NIX_LUA_PATH"   --suffix LUA_CPATH ';' "$NIX_LUA_CPATH" ${stdenv.lib.concatStringsSep " " makeWrapperArgs}
               fi
             fi
           done
diff --git a/pkgs/development/interpreters/php/default.nix b/pkgs/development/interpreters/php/default.nix
index 3d9235757c6e..39f8d2514108 100644
--- a/pkgs/development/interpreters/php/default.nix
+++ b/pkgs/development/interpreters/php/default.nix
@@ -253,16 +253,16 @@ in {
   };
 
   php72 = generic {
-    version = "7.2.14";
-    sha256 = "15v5gbdxi6jkgdflpj5rqqzzfvwdb55hls4azh71xgy793934qgm";
+    version = "7.2.15";
+    sha256 = "0m05dmad138qfxcb2z4czf9pfv1746g9yzlch48kjikajhb7cgn9";
 
     # https://bugs.php.net/bug.php?id=76826
     extraPatches = optional stdenv.isDarwin ./php72-darwin-isfinite.patch;
   };
 
   php73 = generic {
-    version = "7.3.1";
-    sha256 = "13iqfkz9rmx9vy106lvw1nbk88qgwdkvxam0l5s14r7jsw62pvxg";
+    version = "7.3.2";
+    sha256 = "1p8amf91i6lrrphd6ypfh3kic64bpqf04dxp7dj1xxnjrgd50vwl";
 
     # https://bugs.php.net/bug.php?id=76826
     extraPatches = optional stdenv.isDarwin ./php73-darwin-isfinite.patch;
diff --git a/pkgs/development/interpreters/racket/default.nix b/pkgs/development/interpreters/racket/default.nix
index b834de7356f7..2d4008d69b98 100644
--- a/pkgs/development/interpreters/racket/default.nix
+++ b/pkgs/development/interpreters/racket/default.nix
@@ -67,7 +67,7 @@ stdenv.mkDerivation rec {
 
   preConfigure = ''
     unset AR
-    for f in src/configure src/racket/src/string.c; do
+    for f in src/lt/configure src/cs/c/configure src/racket/src/string.c; do
       substituteInPlace "$f" --replace /usr/bin/uname ${coreutils}/bin/uname
     done
     mkdir src/build
@@ -101,5 +101,6 @@ stdenv.mkDerivation rec {
     license = licenses.lgpl3;
     maintainers = with maintainers; [ kkallio henrytill vrthra ];
     platforms = [ "x86_64-darwin" "x86_64-linux" ];
+    broken = stdenv.isDarwin; # No support yet for setting FFI lookup path
   };
 }
diff --git a/pkgs/development/interpreters/racket/minimal.nix b/pkgs/development/interpreters/racket/minimal.nix
index c7e2056b7ca3..0710c4e2d2a6 100644
--- a/pkgs/development/interpreters/racket/minimal.nix
+++ b/pkgs/development/interpreters/racket/minimal.nix
@@ -15,5 +15,6 @@ racket.overrideAttrs (oldAttrs: rec {
       and the pkg library are still bundled.
     '';
     platforms = [ "x86_64-linux" "aarch64-linux" "x86_64-darwin" ];
+    broken = false; # Minimal build does not require working FFI
   };
 })