From 640cdcb814ce7476d002a306816ed9d88baaf4f3 Mon Sep 17 00:00:00 2001 From: Matthieu Coudron <886074+teto@users.noreply.github.com> Date: Wed, 6 Mar 2024 22:01:08 +0100 Subject: [PATCH] lua: smarter/more correct patching In order to have the 'reset' LUA_PATH (aka `;;`) work, and for purity reasons(removing /usr paths) we(I) decided to patch the lua interpreters default LUA_PATH. Turns out the interpreters have different defaults and the patch was too coarse. There is smarter patching that can be done via LUA_ROOT. Also luajit doesn't need patching at all since LUA_ROOT is set via the build system. --- .../interpreters/lua-5/hooks/default.nix | 1 - .../interpreters/lua-5/interpreter.nix | 25 ++++++++----------- .../interpreters/luajit/default.nix | 16 +++--------- 3 files changed, 14 insertions(+), 28 deletions(-) diff --git a/pkgs/development/interpreters/lua-5/hooks/default.nix b/pkgs/development/interpreters/lua-5/hooks/default.nix index 6c303f770dec..ca9c15e8a3b1 100644 --- a/pkgs/development/interpreters/lua-5/hooks/default.nix +++ b/pkgs/development/interpreters/lua-5/hooks/default.nix @@ -8,7 +8,6 @@ let callPackage = lua.pkgs.callPackage; - luaInterpreter = lua.interpreter; in { lua-setup-hook = LuaPathSearchPaths: LuaCPathSearchPaths: diff --git a/pkgs/development/interpreters/lua-5/interpreter.nix b/pkgs/development/interpreters/lua-5/interpreter.nix index 4091fdd49e0e..2856951d9fbd 100644 --- a/pkgs/development/interpreters/lua-5/interpreter.nix +++ b/pkgs/development/interpreters/lua-5/interpreter.nix @@ -22,7 +22,7 @@ stdenv.mkDerivation (finalAttrs: let luaPackages = self.pkgs; - luaversion = lib.versions.majorMinor version; + luaversion = lib.versions.majorMinor finalAttrs.version; plat = if (stdenv.isLinux && lib.versionOlder self.luaversion "5.4") then "linux" else if (stdenv.isLinux && lib.versionAtLeast self.luaversion "5.4") then "linux-readline" @@ -45,7 +45,7 @@ stdenv.mkDerivation (finalAttrs: outputs = [ "out" "doc" ]; src = fetchurl { - url = "https://www.lua.org/ftp/${finalAttrs.pname}-${finalAttrs.version}.tar.gz"; + url = "https://www.lua.org/ftp/lua-${finalAttrs.version}.tar.gz"; sha256 = hash; }; @@ -60,16 +60,11 @@ stdenv.mkDerivation (finalAttrs: inherit patches; - # 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 + sed -i "s@#define LUA_ROOT[[:space:]]*\"/usr/local/\"@#define LUA_ROOT \"$out/\"@g" src/luaconf.h + + # abort if patching didn't work + grep $out 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/' \ @@ -102,8 +97,8 @@ stdenv.mkDerivation (finalAttrs: makeFlagsArray+=(${lib.optionalString stdenv.isDarwin "CC=\"$CC\""}${lib.optionalString (stdenv.buildPlatform != stdenv.hostPlatform) " 'AR=${stdenv.cc.targetPrefix}ar rcu'"}) installFlagsArray=( TO_BIN="lua luac" INSTALL_DATA='cp -d' \ - TO_LIB="${if stdenv.isDarwin then "liblua.${version}.dylib" - else ("liblua.a" + lib.optionalString (!staticOnly) " liblua.so liblua.so.${luaversion} liblua.so.${version}" )}" ) + TO_LIB="${if stdenv.isDarwin then "liblua.${finalAttrs.version}.dylib" + else ("liblua.a" + lib.optionalString (!staticOnly) " liblua.so liblua.so.${luaversion} liblua.so.${finalAttrs.version}" )}" ) runHook postConfigure ''; @@ -128,7 +123,7 @@ stdenv.mkDerivation (finalAttrs: Name: Lua Description: An Extensible Extension Language - Version: ${version} + Version: ${finalAttrs.version} Requires: Libs: -L$out/lib -llua Cflags: -I$out/include @@ -138,7 +133,7 @@ stdenv.mkDerivation (finalAttrs: ln -s "$out/lib/pkgconfig/lua.pc" "$out/lib/pkgconfig/lua${lib.replaceStrings [ "." ] [ "" ] luaversion}.pc" # Make documentation outputs of different versions co-installable. - mv $out/share/doc/lua $out/share/doc/lua-${version} + mv $out/share/doc/lua $out/share/doc/lua-${finalAttrs.version} ''; # copied from python diff --git a/pkgs/development/interpreters/luajit/default.nix b/pkgs/development/interpreters/luajit/default.nix index 211fa56e9119..15bcfee3a44c 100644 --- a/pkgs/development/interpreters/luajit/default.nix +++ b/pkgs/development/interpreters/luajit/default.nix @@ -62,7 +62,7 @@ let else buildPackages.stdenv; in -stdenv.mkDerivation rec { +stdenv.mkDerivation (finalAttrs: { pname = "luajit"; inherit version src; @@ -75,15 +75,6 @@ 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 ''; dontConfigure = true; @@ -122,7 +113,8 @@ stdenv.mkDerivation rec { inputs' = lib.filterAttrs (n: v: ! lib.isDerivation v && n != "passthruFun") inputs; override = attr: let lua = attr.override (inputs' // { self = lua; }); in lua; in passthruFun rec { - inherit self luaversion packageOverrides luaAttr; + inherit self packageOverrides luaAttr; + inherit (finalAttrs) luaversion; executable = "lua"; luaOnBuildForBuild = override pkgsBuildBuild.${luaAttr}; luaOnBuildForHost = override pkgsBuildHost.${luaAttr}; @@ -142,4 +134,4 @@ stdenv.mkDerivation rec { ]; maintainers = with maintainers; [ thoughtpolice smironov vcunat lblasc ]; } // extraMeta; -} +})