From e9c921a301f76e4708d6361e5278651244791e35 Mon Sep 17 00:00:00 2001 From: Matthieu Coudron Date: Sat, 11 Sep 2021 23:56:43 +0200 Subject: [PATCH 1/7] mudlet: remove unneeded LUA_CPATH --- pkgs/games/mudlet/default.nix | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/pkgs/games/mudlet/default.nix b/pkgs/games/mudlet/default.nix index 139baece4a6f..9d8898b119e1 100644 --- a/pkgs/games/mudlet/default.nix +++ b/pkgs/games/mudlet/default.nix @@ -2,7 +2,9 @@ , boost, libGLU, lua, cmake, which, pkg-config, }: let - luaEnv = lua.withPackages(ps: with ps; [ luazip luafilesystem lrexlib-pcre luasql-sqlite3 lua-yajl luautf8 ]); + luaEnv = lua.withPackages(ps: with ps; [ + luazip luafilesystem lrexlib-pcre luasql-sqlite3 lua-yajl luautf8 + ]); in stdenv.mkDerivation rec { pname = "mudlet"; @@ -39,8 +41,6 @@ stdenv.mkDerivation rec { cp -r ../mudlet.png $out/share/pixmaps/ makeQtWrapper $out/mudlet $out/bin/mudlet \ - --set LUA_CPATH "${luaEnv}/lib/lua/${lua.luaversion}/?.so" \ - --prefix LUA_PATH : "$NIX_LUA_PATH" \ --prefix LD_LIBRARY_PATH : "${libsForQt5.qtkeychain}/lib/" \ --run "cd $out"; ''; From 823d0d835ce789726d8df681c6ba286f04d8998c Mon Sep 17 00:00:00 2001 From: Matthieu Coudron Date: Sat, 11 Sep 2021 23:58:18 +0200 Subject: [PATCH 2/7] vis: simplify thanks to lua update --- pkgs/applications/editors/vis/default.nix | 15 +++++++-------- pkgs/top-level/all-packages.nix | 4 +--- 2 files changed, 8 insertions(+), 11 deletions(-) diff --git a/pkgs/applications/editors/vis/default.nix b/pkgs/applications/editors/vis/default.nix index 9a020233f3b0..2bafbce8be5f 100644 --- a/pkgs/applications/editors/vis/default.nix +++ b/pkgs/applications/editors/vis/default.nix @@ -1,8 +1,11 @@ { lib, stdenv, fetchFromGitHub, pkg-config, makeWrapper, makeDesktopItem -, ncurses, libtermkey, lpeg, lua +, ncurses, libtermkey, lua , acl ? null, libselinux ? null }: +let + luaEnv = lua.withPackages(ps: [ps.lpeg]); +in stdenv.mkDerivation rec { pname = "vis"; version = "0.7"; @@ -19,8 +22,7 @@ stdenv.mkDerivation rec { buildInputs = [ ncurses libtermkey - lua - lpeg + luaEnv ] ++ lib.optionals stdenv.isLinux [ acl libselinux @@ -30,16 +32,13 @@ stdenv.mkDerivation rec { patchShebangs ./configure ''; - LUA_CPATH="${lpeg}/lib/lua/${lua.luaversion}/?.so;"; - LUA_PATH="${lpeg}/share/lua/${lua.luaversion}/?.lua"; - postInstall = '' mkdir -p "$out/share/applications" cp $desktopItem/share/applications/* $out/share/applications echo wrapping $out/bin/vis with runtime environment wrapProgram $out/bin/vis \ - --prefix LUA_CPATH ';' "${lpeg}/lib/lua/${lua.luaversion}/?.so" \ - --prefix LUA_PATH ';' "${lpeg}/share/lua/${lua.luaversion}/?.lua" \ + --prefix LUA_CPATH ';' "${luaEnv}/lib/lua/${lua.luaversion}/?.so" \ + --prefix LUA_PATH ';' "${luaEnv}/share/lua/${lua.luaversion}/?.lua" \ --prefix VIS_PATH : "\$HOME/.config:$out/share/vis" ''; diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix index f63059be15b2..20f649d85532 100644 --- a/pkgs/top-level/all-packages.nix +++ b/pkgs/top-level/all-packages.nix @@ -28187,9 +28187,7 @@ with pkgs; neovim-remote = callPackage ../applications/editors/neovim/neovim-remote.nix { }; - vis = callPackage ../applications/editors/vis { - inherit (lua52Packages) lpeg; - }; + vis = callPackage ../applications/editors/vis { }; viw = callPackage ../applications/editors/viw { }; From 03806dfee73c18ce4d55542af46e7af8816a673b Mon Sep 17 00:00:00 2001 From: Matthieu Coudron Date: Sun, 12 Sep 2021 00:00:03 +0200 Subject: [PATCH 3/7] awesome: use a luaEnv --- .../window-managers/awesome/default.nix | 22 +++++++++---------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/pkgs/applications/window-managers/awesome/default.nix b/pkgs/applications/window-managers/awesome/default.nix index a526636063e9..90b559e7d44c 100644 --- a/pkgs/applications/window-managers/awesome/default.nix +++ b/pkgs/applications/window-managers/awesome/default.nix @@ -1,4 +1,4 @@ -{ lib, stdenv, fetchFromGitHub, luaPackages, cairo, librsvg, cmake, imagemagick, pkg-config, gdk-pixbuf +{ lib, stdenv, fetchFromGitHub, lua, cairo, librsvg, cmake, imagemagick, pkg-config, gdk-pixbuf , xorg, libstartup_notification, libxdg_basedir, libpthreadstubs , xcb-util-cursor, makeWrapper, pango, gobject-introspection , which, dbus, nettools, git, doxygen @@ -12,10 +12,11 @@ # needed for beautiful.gtk to work assert gtk3Support -> gtk3 != null; +let + luaEnv = lua.withPackages(ps: [ ps.lgi ps.ldoc ]); +in + stdenv.mkDerivation rec { - lgi = luaPackages.lgi; - lua = luaPackages.lua; - ldoc = luaPackages.ldoc; pname = "awesome"; version = "4.3"; @@ -35,7 +36,6 @@ stdenv.mkDerivation rec { xmlto docbook_xml_dtd_45 docbook_xsl findXMLCatalogs asciidoctor - ldoc ]; outputs = [ "out" "doc" ]; @@ -44,7 +44,7 @@ stdenv.mkDerivation rec { propagatedUserEnvPkgs = [ hicolor-icon-theme ]; buildInputs = [ cairo librsvg dbus gdk-pixbuf gobject-introspection - git lgi libpthreadstubs libstartup_notification + git luaEnv libpthreadstubs libstartup_notification libxdg_basedir lua nettools pango xcb-util-cursor xorg.libXau xorg.libXdmcp xorg.libxcb xorg.libxshmfence xorg.xcbutil xorg.xcbutilimage xorg.xcbutilkeysyms @@ -55,14 +55,14 @@ stdenv.mkDerivation rec { cmakeFlags = [ #"-DGENERATE_MANPAGES=ON" "-DOVERRIDE_VERSION=${version}" - ] ++ lib.optional luaPackages.isLuaJIT "-DLUA_LIBRARY=${lua}/lib/libluajit-5.1.so" + ] ++ lib.optional lua.pkgs.isLuaJIT "-DLUA_LIBRARY=${lua}/lib/libluajit-5.1.so" ; GI_TYPELIB_PATH = "${pango.out}/lib/girepository-1.0"; # LUA_CPATH and LUA_PATH are used only for *building*, see the --search flags # below for how awesome finds the libraries it needs at runtime. - LUA_CPATH = "${lgi}/lib/lua/${lua.luaversion}/?.so"; - LUA_PATH = "${lgi}/share/lua/${lua.luaversion}/?.lua;;"; + LUA_CPATH = "${luaEnv}/lib/lua/${lua.luaversion}/?.so"; + LUA_PATH = "${luaEnv}/share/lua/${lua.luaversion}/?.lua;;"; postInstall = '' # Don't use wrapProgram or the wrapper will duplicate the --search @@ -70,8 +70,8 @@ stdenv.mkDerivation rec { mv "$out/bin/awesome" "$out/bin/.awesome-wrapped" makeWrapper "$out/bin/.awesome-wrapped" "$out/bin/awesome" \ --set GDK_PIXBUF_MODULE_FILE "$GDK_PIXBUF_MODULE_FILE" \ - --add-flags '--search ${lgi}/lib/lua/${lua.luaversion}' \ - --add-flags '--search ${lgi}/share/lua/${lua.luaversion}' \ + --add-flags '--search ${luaEnv}/lib/lua/${lua.luaversion}' \ + --add-flags '--search ${luaEnv}/share/lua/${lua.luaversion}' \ --prefix GI_TYPELIB_PATH : "$GI_TYPELIB_PATH" wrapProgram $out/bin/awesome-client \ From 0b6d33c2ed177be6d937e3043ac77252007a77b1 Mon Sep 17 00:00:00 2001 From: Matthieu Coudron Date: Sun, 12 Sep 2021 00:00:26 +0200 Subject: [PATCH 4/7] prosody: simplify lua aspects --- pkgs/servers/xmpp/prosody/default.nix | 29 ++++++++++++++------------- pkgs/top-level/all-packages.nix | 5 ++--- 2 files changed, 17 insertions(+), 17 deletions(-) diff --git a/pkgs/servers/xmpp/prosody/default.nix b/pkgs/servers/xmpp/prosody/default.nix index 43e77d918e1c..ac4939c14990 100644 --- a/pkgs/servers/xmpp/prosody/default.nix +++ b/pkgs/servers/xmpp/prosody/default.nix @@ -1,19 +1,24 @@ { stdenv, fetchurl, lib, libidn, openssl, makeWrapper, fetchhg -, lua5, luasocket, luasec, luaexpat, luafilesystem, luabitop +, lua , nixosTests -, withLibevent ? true, luaevent ? null +, withLibevent ? true , withDBI ? true, luadbi ? null # use withExtraLibs to add additional dependencies of community modules , withExtraLibs ? [ ] , withOnlyInstalledCommunityModules ? [ ] , withCommunityModules ? [ ] }: -assert withLibevent -> luaevent != null; -assert withDBI -> luadbi != null; - with lib; +let + luaEnv = lua.withPackages(p: with p;[ + luasocket luasec luaexpat luafilesystem luabitop luadbi-sqlite3 + ] + ++ lib.optional withLibevent p.luaevent + ++ lib.optional withDBI p.luadbi + ); +in stdenv.mkDerivation rec { version = "0.11.10"; # also update communityModules pname = "prosody"; @@ -41,28 +46,24 @@ stdenv.mkDerivation rec { sha256 = "02gj1b8sdmdvymsdmjpq47zrl7sg578jcdxbbq18s44f3njmc9q1"; }; + nativeBuildInputs = [ makeWrapper ]; buildInputs = [ - lua5 makeWrapper libidn openssl + luaEnv libidn openssl ] - # Lua libraries - ++ [ - luasocket luasec luaexpat luafilesystem luabitop - ] - ++ optional withLibevent luaevent - ++ optional withDBI luadbi ++ withExtraLibs; configureFlags = [ "--ostype=linux" - "--with-lua-include=${lua5}/include" - "--with-lua=${lua5}" + "--with-lua-include=${luaEnv}/include" + "--with-lua=${luaEnv}" ]; postBuild = '' make -C tools/migration ''; + # the wrapping should go away once lua hook is fixed postInstall = '' ${concatMapStringsSep "\n" (module: '' cp -r $communityModules/mod_${module} $out/lib/prosody/modules/ diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix index 20f649d85532..aadb3a123ce1 100644 --- a/pkgs/top-level/all-packages.nix +++ b/pkgs/top-level/all-packages.nix @@ -19876,9 +19876,8 @@ with pkgs; prosody = callPackage ../servers/xmpp/prosody { # _compat can probably be removed on next minor version after 0.10.0 - lua5 = lua5_2_compat; - withExtraLibs = [ luaPackages.luadbi-sqlite3 ]; - inherit (lua52Packages) luasocket luasec luaexpat luafilesystem luabitop luaevent luadbi; + lua = lua5_2_compat; + withExtraLibs = []; }; biboumi = callPackage ../servers/xmpp/biboumi { }; From 88842910b52c146bc5ef9c78eed34e5e570ef76c Mon Sep 17 00:00:00 2001 From: Matthieu Coudron Date: Sun, 12 Sep 2021 00:01:49 +0200 Subject: [PATCH 5/7] 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). --- pkgs/applications/editors/neovim/tests.nix | 3 +- pkgs/applications/editors/neovim/utils.nix | 7 +- .../interpreters/lua-5/build-lua-package.nix | 2 +- .../interpreters/lua-5/interpreter.nix | 26 ++++-- .../interpreters/lua-5/wrap-lua.nix | 13 ++- .../interpreters/lua-5/wrapper.nix | 19 ++-- .../interpreters/luajit/default.nix | 24 ++--- pkgs/development/lua-modules/default.nix | 7 +- pkgs/development/lua-modules/lib.nix | 63 +++++++++++++ pkgs/development/lua-modules/overrides.nix | 6 ++ pkgs/top-level/lua-packages.nix | 89 +++++++------------ 11 files changed, 162 insertions(+), 97 deletions(-) create mode 100644 pkgs/development/lua-modules/lib.nix diff --git a/pkgs/applications/editors/neovim/tests.nix b/pkgs/applications/editors/neovim/tests.nix index 5f4cda714a67..08342a1543d5 100644 --- a/pkgs/applications/editors/neovim/tests.nix +++ b/pkgs/applications/editors/neovim/tests.nix @@ -133,7 +133,7 @@ rec { configure.pathogen.pluginNames = [ "vim-nix" ]; }; - nvimWithLuaPackages = wrapNeovim2 "with-lua-packages" (makeNeovimConfig { + nvimWithLuaPackages = wrapNeovim2 "-with-lua-packages" (makeNeovimConfig { extraLuaPackages = ps: [ps.mpack]; customRC = '' lua require("mpack") @@ -141,6 +141,7 @@ rec { }); nvim_with_lua_packages = runTest nvimWithLuaPackages '' + export HOME=$TMPDIR ${nvimWithLuaPackages}/bin/nvim -i NONE --noplugin -es ''; }) diff --git a/pkgs/applications/editors/neovim/utils.nix b/pkgs/applications/editors/neovim/utils.nix index 837c9a79ffe8..bf0d80d1f07d 100644 --- a/pkgs/applications/editors/neovim/utils.nix +++ b/pkgs/applications/editors/neovim/utils.nix @@ -78,8 +78,7 @@ let ++ (extraPython3Packages ps) ++ (lib.concatMap (f: f ps) pluginPython3Packages)); - lua = neovim-unwrapped.lua; - luaEnv = lua.withPackages(ps: extraLuaPackages ps); + luaEnv = neovim-unwrapped.lua.withPackages(extraLuaPackages); # Mapping a boolean argument to a key that tells us whether to add or not to # add to nvim's 'embedded rc' this: @@ -115,8 +114,8 @@ let ] ++ lib.optionals (binPath != "") [ "--suffix" "PATH" ":" binPath ] ++ lib.optionals (luaEnv != null) [ - "--prefix" "LUA_PATH" ";" "${luaEnv}/share/lua/${lua.luaversion}/?.lua" - "--prefix" "LUA_CPATH" ";" "${luaEnv}/lib/lua/${lua.luaversion}/?.so" + "--prefix" "LUA_PATH" ";" (neovim-unwrapped.lua.pkgs.lib.genLuaPathAbsStr luaEnv) + "--prefix" "LUA_CPATH" ";" (neovim-unwrapped.lua.pkgs.lib.genLuaCPathAbsStr luaEnv) ]; 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; } diff --git a/pkgs/top-level/lua-packages.nix b/pkgs/top-level/lua-packages.nix index 246d62b903b3..359c8980e73b 100644 --- a/pkgs/top-level/lua-packages.nix +++ b/pkgs/top-level/lua-packages.nix @@ -18,85 +18,60 @@ let packages = ( self: let - 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"; - lua-setup-hook = callPackage ../development/interpreters/lua-5/setup-hook.nix { }; - - # Check whether a derivation provides a lua module. - hasLuaModule = drv: drv ? luaModule ; + # a function of lua_path / lua_cpath + lua-setup-hook = callPackage ../development/interpreters/lua-5/setup-hook.nix { + inherit lib; + }; callPackage = pkgs.newScope self; - requiredLuaModules = drvs: with lib; let - modules = filter hasLuaModule drvs; - in unique ([lua] ++ modules ++ concatLists (catAttrs "requiredLuaModules" modules)); - - # Convert derivation to a lua module. - toLuaModule = drv: - drv.overrideAttrs( oldAttrs: { - # Use passthru in order to prevent rebuilds when possible. - passthru = (oldAttrs.passthru or {})// { - luaModule = lua; - requiredLuaModules = requiredLuaModules drv.propagatedBuildInputs; - }; - }); - - - platformString = - if stdenv.isDarwin then "macosx" - else if stdenv.isFreeBSD then "freebsd" - else if stdenv.isLinux then "linux" - else if stdenv.isSunOS then "solaris" - else throw "unsupported platform"; - buildLuaApplication = args: buildLuarocksPackage ({namePrefix="";} // args ); - buildLuarocksPackage = with pkgs.lib; makeOverridable(callPackage ../development/interpreters/lua-5/build-lua-package.nix { - inherit toLuaModule; + buildLuarocksPackage = lib.makeOverridable(callPackage ../development/interpreters/lua-5/build-lua-package.nix { inherit lua; + inherit (pkgs) lib; + inherit (luaLib) toLuaModule; }); -in -with self; { - getLuaPathList = majorVersion: [ - "share/lua/${majorVersion}/?.lua" - "share/lua/${majorVersion}/?/init.lua" - ]; - getLuaCPathList = majorVersion: [ - "lib/lua/${majorVersion}/?.so" - ]; - - # helper functions for dealing with LUA_PATH and LUA_CPATH - getPath = drv: pathListForVersion: - lib.concatMapStringsSep ";" (path: "${drv}/${path}") (pathListForVersion lua.luaversion); - getLuaPath = drv: getPath drv getLuaPathList; - getLuaCPath = drv: getPath drv getLuaCPathList; + luaLib = import ../development/lua-modules/lib.nix { + inherit (pkgs) lib; + inherit pkgs lua; + }; #define build lua package function buildLuaPackage = callPackage ../development/lua-modules/generic { - inherit lua writeText; + inherit writeText; }; + getPath = drv: pathListForVersion: + lib.concatMapStringsSep ";" (path: "${drv}/${path}") pathListForVersion; - inherit toLuaModule hasLuaModule lua-setup-hook; - inherit buildLuarocksPackage buildLuaApplication; - inherit requiredLuaModules luaOlder luaAtLeast - isLua51 isLua52 isLua53 isLuaJIT lua callPackage; +in +{ + # helper functions for dealing with LUA_PATH and LUA_CPATH + lib = luaLib; + + getLuaPath = drv: luaLib.getPath drv (luaLib.luaPathList lua.luaversion) ; + getLuaCPath = drv: luaLib.getPath drv (luaLib.luaCPathList lua.luaversion) ; + + + inherit lua lua-setup-hook callPackage; + inherit buildLuaPackage buildLuarocksPackage buildLuaApplication; + inherit (luaLib) luaOlder luaAtLeast isLua51 isLua52 isLua53 isLuaJIT + requiredLuaModules toLuaModule hasLuaModule; # wraps programs in $out/bin with valid LUA_PATH/LUA_CPATH wrapLua = callPackage ../development/interpreters/lua-5/wrap-lua.nix { - inherit lua; inherit (pkgs) makeSetupHook makeWrapper; + inherit lua lib; + inherit (pkgs) makeSetupHook makeWrapper; }; luarocks = callPackage ../development/tools/misc/luarocks { - inherit lua; + inherit lua lib; }; + # a fork of luarocks used to generate nix lua derivations from rockspecs luarocks-nix = callPackage ../development/tools/misc/luarocks/luarocks-nix.nix { }; luxio = buildLuaPackage { @@ -132,7 +107,7 @@ with self; { }; }; - vicious = toLuaModule(stdenv.mkDerivation rec { + vicious = toLuaModule( stdenv.mkDerivation rec { pname = "vicious"; version = "2.5.0"; From 496b8abf789b891f5355ea2265416e5121855308 Mon Sep 17 00:00:00 2001 From: Matthieu Coudron Date: Sun, 12 Sep 2021 01:20:30 +0200 Subject: [PATCH 6/7] Apply suggestions from code review Co-authored-by: Sandro --- pkgs/applications/editors/vis/default.nix | 2 +- pkgs/development/interpreters/lua-5/interpreter.nix | 3 ++- pkgs/development/lua-modules/lib.nix | 2 +- pkgs/servers/xmpp/prosody/default.nix | 4 ++-- pkgs/top-level/lua-packages.nix | 2 +- 5 files changed, 7 insertions(+), 6 deletions(-) diff --git a/pkgs/applications/editors/vis/default.nix b/pkgs/applications/editors/vis/default.nix index 2bafbce8be5f..a658f95ac014 100644 --- a/pkgs/applications/editors/vis/default.nix +++ b/pkgs/applications/editors/vis/default.nix @@ -4,7 +4,7 @@ }: let - luaEnv = lua.withPackages(ps: [ps.lpeg]); + luaEnv = lua.withPackages(ps: [ ps.lpeg ]); in stdenv.mkDerivation rec { pname = "vis"; diff --git a/pkgs/development/interpreters/lua-5/interpreter.nix b/pkgs/development/interpreters/lua-5/interpreter.nix index c6b4f478f633..a780e6ba49f1 100644 --- a/pkgs/development/interpreters/lua-5/interpreter.nix +++ b/pkgs/development/interpreters/lua-5/interpreter.nix @@ -12,7 +12,8 @@ }: let luaPackages = callPackage ../../lua-modules { - lua=self; overrides=packageOverrides; + lua = self; + overrides = packageOverrides; }; plat = if stdenv.isLinux then "linux" diff --git a/pkgs/development/lua-modules/lib.nix b/pkgs/development/lua-modules/lib.nix index 0180897f77a6..9c31f9a5c53c 100644 --- a/pkgs/development/lua-modules/lib.nix +++ b/pkgs/development/lua-modules/lib.nix @@ -55,7 +55,7 @@ rec { toLuaModule = drv: drv.overrideAttrs( oldAttrs: { # Use passthru in order to prevent rebuilds when possible. - passthru = (oldAttrs.passthru or {})// { + passthru = (oldAttrs.passthru or {}) // { luaModule = lua; requiredLuaModules = requiredLuaModules drv.propagatedBuildInputs; }; diff --git a/pkgs/servers/xmpp/prosody/default.nix b/pkgs/servers/xmpp/prosody/default.nix index ac4939c14990..773632328a05 100644 --- a/pkgs/servers/xmpp/prosody/default.nix +++ b/pkgs/servers/xmpp/prosody/default.nix @@ -2,7 +2,7 @@ , lua , nixosTests , withLibevent ? true -, withDBI ? true, luadbi ? null +, withDBI ? true # use withExtraLibs to add additional dependencies of community modules , withExtraLibs ? [ ] , withOnlyInstalledCommunityModules ? [ ] @@ -12,7 +12,7 @@ with lib; let - luaEnv = lua.withPackages(p: with p;[ + luaEnv = lua.withPackages(p: with p; [ luasocket luasec luaexpat luafilesystem luabitop luadbi-sqlite3 ] ++ lib.optional withLibevent p.luaevent diff --git a/pkgs/top-level/lua-packages.nix b/pkgs/top-level/lua-packages.nix index 359c8980e73b..80f71dc1942e 100644 --- a/pkgs/top-level/lua-packages.nix +++ b/pkgs/top-level/lua-packages.nix @@ -107,7 +107,7 @@ in }; }; - vicious = toLuaModule( stdenv.mkDerivation rec { + vicious = luaLib.toLuaModule( stdenv.mkDerivation rec { pname = "vicious"; version = "2.5.0"; From b97977681eec4233bcc0428ccdd93a038f810ebf Mon Sep 17 00:00:00 2001 From: Matthieu Coudron Date: Sun, 12 Sep 2021 02:07:19 +0200 Subject: [PATCH 7/7] lua: add LUA_PATH changes to release notes lua interpreters have been patched not to look into FHS folders anymore. --- nixos/doc/manual/from_md/release-notes/rl-2111.section.xml | 7 +++++++ nixos/doc/manual/release-notes/rl-2111.section.md | 3 +++ 2 files changed, 10 insertions(+) diff --git a/nixos/doc/manual/from_md/release-notes/rl-2111.section.xml b/nixos/doc/manual/from_md/release-notes/rl-2111.section.xml index 5554927b8b2a..e8ba9ddd1e95 100644 --- a/nixos/doc/manual/from_md/release-notes/rl-2111.section.xml +++ b/nixos/doc/manual/from_md/release-notes/rl-2111.section.xml @@ -1143,6 +1143,13 @@ Superuser created successfully. other and share data. + + + lua and luajit + interpreters have been patched to avoid looking into /usr/lib + directories, thus increasing the purity of the build. + + diff --git a/nixos/doc/manual/release-notes/rl-2111.section.md b/nixos/doc/manual/release-notes/rl-2111.section.md index 00844d529b77..3900bbcaa252 100644 --- a/nixos/doc/manual/release-notes/rl-2111.section.md +++ b/nixos/doc/manual/release-notes/rl-2111.section.md @@ -326,3 +326,6 @@ To be able to access the web UI this port needs to be opened in the firewall. - `rofi` has been updated from '1.6.1' to '1.7.0', one important thing is the removal of the old xresources based configuration setup. Read more [in rofi's changelog](https://github.com/davatorium/rofi/blob/cb12e6fc058f4a0f4f/Changelog#L1). - ipfs now defaults to not listening on you local network. This setting was change as server providers won't accept port scanning on their private network. If you have several ipfs instances running on a network you own, feel free to change the setting `ipfs.localDiscovery = true;`. localDiscovery enables different instances to discover each other and share data. + +- `lua` and `luajit` interpreters have been patched to avoid looking into /usr/lib + directories, thus increasing the purity of the build.