diff options
author | Matthieu Coudron <mcoudron@hotmail.com> | 2021-09-12 00:01:49 +0200 |
---|---|---|
committer | Matthieu Coudron <mcoudron@hotmail.com> | 2021-09-12 03:03:56 +0200 |
commit | 88842910b52c146bc5ef9c78eed34e5e570ef76c (patch) | |
tree | 209d81c2060e5ae5f211b9a473e42fab9be57888 /pkgs/development | |
parent | 0b6d33c2ed177be6d937e3043ac77252007a77b1 (diff) |
lua: introduced a lua lib
Goal is to improve separation between packages and utilities.
Can help with autocompletion/navigate nixpkgs faster.
Also it will help standardize how LUA_PATH is exported across packages,
so that one can more easily make lua changes across nixpkgs (for
instance changing where lua modules are installed).
Diffstat (limited to 'pkgs/development')
-rw-r--r-- | pkgs/development/interpreters/lua-5/build-lua-package.nix | 2 | ||||
-rw-r--r-- | pkgs/development/interpreters/lua-5/interpreter.nix | 26 | ||||
-rw-r--r-- | pkgs/development/interpreters/lua-5/wrap-lua.nix | 13 | ||||
-rw-r--r-- | pkgs/development/interpreters/lua-5/wrapper.nix | 19 | ||||
-rw-r--r-- | pkgs/development/interpreters/luajit/default.nix | 24 | ||||
-rw-r--r-- | pkgs/development/lua-modules/default.nix | 7 | ||||
-rw-r--r-- | pkgs/development/lua-modules/lib.nix | 63 | ||||
-rw-r--r-- | pkgs/development/lua-modules/overrides.nix | 6 |
8 files changed, 125 insertions, 35 deletions
diff --git a/pkgs/development/interpreters/lua-5/build-lua-package.nix b/pkgs/development/interpreters/lua-5/build-lua-package.nix index 5639b2a4bb90..64e872ad5f63 100644 --- a/pkgs/development/interpreters/lua-5/build-lua-package.nix +++ b/pkgs/development/interpreters/lua-5/build-lua-package.nix @@ -238,7 +238,7 @@ builtins.removeAttrs attrs ["disabled" "checkInputs" "externalDeps" "extraVariab inherit externalDeps; } // passthru; - meta = with lib.maintainers; { + meta = { platforms = lua.meta.platforms; # add extra maintainer(s) to every package maintainers = (meta.maintainers or []) ++ [ ]; diff --git a/pkgs/development/interpreters/lua-5/interpreter.nix b/pkgs/development/interpreters/lua-5/interpreter.nix index 3476b2b648b6..c6b4f478f633 100644 --- a/pkgs/development/interpreters/lua-5/interpreter.nix +++ b/pkgs/development/interpreters/lua-5/interpreter.nix @@ -1,7 +1,8 @@ { lib, stdenv, fetchurl, readline , compat ? false , callPackage -, packageOverrides ? (self: super: {}) +, makeWrapper +, packageOverrides ? (final: prev: {}) , sourceVersion , hash , patches ? [] @@ -10,7 +11,9 @@ , staticOnly ? stdenv.hostPlatform.isStatic }: let -luaPackages = callPackage ../../lua-modules {lua=self; overrides=packageOverrides;}; + luaPackages = callPackage ../../lua-modules { + lua=self; overrides=packageOverrides; + }; plat = if stdenv.isLinux then "linux" else if stdenv.isDarwin then "macosx" @@ -31,21 +34,32 @@ self = stdenv.mkDerivation rec { sha256 = hash; }; - LuaPathSearchPaths = luaPackages.getLuaPathList luaversion; - LuaCPathSearchPaths = luaPackages.getLuaCPathList luaversion; + LuaPathSearchPaths = luaPackages.lib.luaPathList; + LuaCPathSearchPaths = luaPackages.lib.luaCPathList; setupHook = luaPackages.lua-setup-hook LuaPathSearchPaths LuaCPathSearchPaths; + nativeBuildInputs = [ makeWrapper ]; buildInputs = [ readline ]; inherit patches; - postPatch = lib.optionalString (!stdenv.isDarwin && !staticOnly) '' + # we can't pass flags to the lua makefile because for portability, everything is hardcoded + postPatch = '' + { + echo -e ' + #undef LUA_PATH_DEFAULT + #define LUA_PATH_DEFAULT "./share/lua/${luaversion}/?.lua;./?.lua;./?/init.lua" + #undef LUA_CPATH_DEFAULT + #define LUA_CPATH_DEFAULT "./lib/lua/${luaversion}/?.so;./?.so;./lib/lua/${luaversion}/loadall.so" + ' + } >> src/luaconf.h + '' + lib.optionalString (!stdenv.isDarwin && !staticOnly) '' # Add a target for a shared library to the Makefile. sed -e '1s/^/LUA_SO = liblua.so/' \ -e 's/ALL_T *= */&$(LUA_SO) /' \ -i src/Makefile cat ${./lua-dso.make} >> src/Makefile - ''; + '' ; # see configurePhase for additional flags (with space) makeFlags = [ diff --git a/pkgs/development/interpreters/lua-5/wrap-lua.nix b/pkgs/development/interpreters/lua-5/wrap-lua.nix index f00e0d5ac336..049afcd6116d 100644 --- a/pkgs/development/interpreters/lua-5/wrap-lua.nix +++ b/pkgs/development/interpreters/lua-5/wrap-lua.nix @@ -4,16 +4,13 @@ , 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; - + 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/wrapper.nix b/pkgs/development/interpreters/lua-5/wrapper.nix index 0459b67534d4..b9ac255d2432 100644 --- a/pkgs/development/interpreters/lua-5/wrapper.nix +++ b/pkgs/development/interpreters/lua-5/wrapper.nix @@ -11,13 +11,18 @@ let env = let paths = requiredLuaModules (extraLibs ++ [ lua ] ); - in (buildEnv { + in buildEnv { name = "${lua.name}-env"; inherit paths; inherit ignoreCollisions; extraOutputsToInstall = [ "out" ] ++ extraOutputsToInstall; + nativeBuildInputs = [ + makeWrapper + (lua.pkgs.lua-setup-hook lua.LuaPathSearchPaths lua.LuaCPathSearchPaths) + ]; + # we create wrapper for the binaries in the different packages postBuild = '' if [ -L "$out/bin" ]; then @@ -37,7 +42,12 @@ 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" ${lib.concatStringsSep " " makeWrapperArgs} + makeWrapper "$path/bin/$prg" "$out/bin/$prg" \ + --set-default LUA_PATH ";;" \ + --suffix LUA_PATH ';' "$LUA_PATH" \ + --set-default LUA_CPATH ";;" \ + --suffix LUA_CPATH ';' "$LUA_CPATH" \ + ${lib.concatStringsSep " " makeWrapperArgs} fi fi done @@ -62,8 +72,5 @@ let ''; }; }; - }).overrideAttrs (_: { - # Add extra deps needed for postBuild hook. - nativeBuildInputs = [ makeWrapper lua ]; - }); + }; in env diff --git a/pkgs/development/interpreters/luajit/default.nix b/pkgs/development/interpreters/luajit/default.nix index 6a163c4b562f..ac74610bcce9 100644 --- a/pkgs/development/interpreters/luajit/default.nix +++ b/pkgs/development/interpreters/luajit/default.nix @@ -10,7 +10,7 @@ , extraMeta ? { } , callPackage , self -, packageOverrides ? (self: super: { }) +, packageOverrides ? (final: prev: {}) , enableFFI ? true , enableJIT ? true , enableJITDebugModule ? enableJIT @@ -62,6 +62,15 @@ stdenv.mkDerivation rec { # passed by nixpkgs CC wrapper is insufficient on its own substituteInPlace src/Makefile --replace "#CCDEBUG= -g" "CCDEBUG= -g" fi + + { + echo -e ' + #undef LUA_PATH_DEFAULT + #define LUA_PATH_DEFAULT "./share/lua/${luaversion}/?.lua;./?.lua;./?/init.lua" + #undef LUA_CPATH_DEFAULT + #define LUA_CPATH_DEFAULT "./lib/lua/${luaversion}/?.so;./?.so;./lib/lua/${luaversion}/loadall.so" + ' + } >> src/luaconf.h ''; configurePhase = false; @@ -88,15 +97,10 @@ stdenv.mkDerivation rec { ln -s "$out"/bin/luajit-* "$out"/bin/luajit ''; - LuaPathSearchPaths = [ - "lib/lua/${luaversion}/?.lua" - "share/lua/${luaversion}/?.lua" - "share/lua/${luaversion}/?/init.lua" - "lib/lua/${luaversion}/?/init.lua" - "share/${name}/?.lua" - ]; - LuaCPathSearchPaths = [ "lib/lua/${luaversion}/?.so" "share/lua/${luaversion}/?.so" ]; - setupHook = luaPackages.lua-setup-hook LuaPathSearchPaths LuaCPathSearchPaths; + LuaPathSearchPaths = luaPackages.lib.luaPathList; + LuaCPathSearchPaths = luaPackages.lib.luaCPathList; + + setupHook = luaPackages.lua-setup-hook luaPackages.lib.luaPathList luaPackages.lib.luaCPathList; passthru = rec { buildEnv = callPackage ../lua-5/wrapper.nix { diff --git a/pkgs/development/lua-modules/default.nix b/pkgs/development/lua-modules/default.nix index 091b94f58f51..e4927ee30464 100644 --- a/pkgs/development/lua-modules/default.nix +++ b/pkgs/development/lua-modules/default.nix @@ -1,7 +1,7 @@ # inspired by pkgs/development/haskell-modules/default.nix { pkgs, lib , lua -, overrides ? (self: super: {}) +, overrides ? (final: prev: {}) }: let @@ -15,7 +15,7 @@ let overridenPackages = import ./overrides.nix { inherit pkgs; }; generatedPackages = if (builtins.pathExists ./generated-packages.nix) then - pkgs.callPackage ./generated-packages.nix { } else (self: super: {}); + pkgs.callPackage ./generated-packages.nix { } else (final: prev: {}); extensible-self = lib.makeExtensible (extends overrides @@ -24,7 +24,6 @@ let initialPackages ) ) - ) - ; + ); in extensible-self diff --git a/pkgs/development/lua-modules/lib.nix b/pkgs/development/lua-modules/lib.nix new file mode 100644 index 000000000000..0180897f77a6 --- /dev/null +++ b/pkgs/development/lua-modules/lib.nix @@ -0,0 +1,63 @@ +{ pkgs, lib, lua }: +let + requiredLuaModules = drvs: with lib; let + modules = filter hasLuaModule drvs; + in unique ([lua] ++ modules ++ concatLists (catAttrs "requiredLuaModules" modules)); + # Check whether a derivation provides a lua module. + hasLuaModule = drv: drv ? luaModule; +in +rec { + inherit hasLuaModule requiredLuaModules; + + luaPathList = [ + "share/lua/${lua.luaversion}/?.lua" + "share/lua/${lua.luaversion}/?/init.lua" + ]; + luaCPathList = [ + "lib/lua/${lua.luaversion}/?.so" + ]; + + /* generate paths without a prefix + */ + luaPathRelStr = lib.concatStringsSep ";" luaPathList; + luaCPathRelStr = lib.concatStringsSep ";" luaCPathList; + + /* generate LUA_(C)PATH value for a specific derivation, i.e., with absolute paths + */ + genLuaPathAbsStr = drv: lib.concatMapStringsSep ";" (x: "${drv}/${x}") luaPathList; + genLuaCPathAbsStr = drv: lib.concatMapStringsSep ";" (x: "${drv}/${x}") luaCPathList; + + /* Generate a LUA_PATH with absolute paths + */ + # genLuaPathAbs = drv: + # lib.concatStringsSep ";" (map (x: "${drv}/x") luaPathList); + + luaAtLeast = lib.versionAtLeast lua.luaversion; + luaOlder = lib.versionOlder lua.luaversion; + isLua51 = (lib.versions.majorMinor lua.version) == "5.1"; + isLua52 = (lib.versions.majorMinor lua.version) == "5.2"; + isLua53 = lua.luaversion == "5.3"; + isLuaJIT = lib.getName lua == "luajit"; + + /* generates the relative path towards the folder where + seems stable even when using lua_modules_path = "" + + Example: + getDataFolder luaPackages.stdlib + => stdlib-41.2.2-1-rocks/stdlib/41.2.2-1/doc + */ + getDataFolder = drv: + "${drv.pname}-${drv.version}-rocks/${drv.pname}/${drv.version}"; + + /* Convert derivation to a lua module. + so that luaRequireModules can be run later + */ + toLuaModule = drv: + drv.overrideAttrs( oldAttrs: { + # Use passthru in order to prevent rebuilds when possible. + passthru = (oldAttrs.passthru or {})// { + luaModule = lua; + requiredLuaModules = requiredLuaModules drv.propagatedBuildInputs; + }; + }); +} diff --git a/pkgs/development/lua-modules/overrides.nix b/pkgs/development/lua-modules/overrides.nix index a15bd6e53663..247cf89f3945 100644 --- a/pkgs/development/lua-modules/overrides.nix +++ b/pkgs/development/lua-modules/overrides.nix @@ -363,6 +363,12 @@ with super; ''; }); + # TODO just while testing, remove afterwards + # toVimPlugin should do it instead + gitsigns-nvim = super.gitsigns-nvim.overrideAttrs(oa: { + nativeBuildInputs = oa.nativeBuildInputs or [] ++ [ pkgs.vimUtils.vimGenDocHook ]; + }); + # aliases cjson = super.lua-cjson; } |