1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
|
{
lib,
stdenv,
fetchFromGitHub,
# nativeBuildInputs
ninja,
makeWrapper,
# buildInputs
fmt,
rsync,
versionCheckHook,
nix-update-script,
}:
stdenv.mkDerivation (finalAttrs: {
pname = "lua-language-server";
version = "3.13.9";
src = fetchFromGitHub {
owner = "luals";
repo = "lua-language-server";
tag = finalAttrs.version;
hash = "sha256-zttTtMAeBsHBqgDm3CAvp54Tp2bfQUhk5/lKgKWUeJY=";
fetchSubmodules = true;
};
nativeBuildInputs = [
ninja
makeWrapper
];
buildInputs =
[
fmt
]
++ lib.optionals stdenv.hostPlatform.isDarwin [
rsync
];
env.NIX_LDFLAGS = "-lfmt";
postPatch =
''
# filewatch tests are failing on darwin
# this feature is not used in lua-language-server
substituteInPlace 3rd/bee.lua/test/test.lua \
--replace-fail 'require "test_filewatch"' ""
# use nixpkgs fmt library
for d in 3rd/bee.lua 3rd/luamake/bee.lua
do
rm -r $d/3rd/fmt/*
touch $d/3rd/fmt/format.cc
substituteInPlace $d/bee/nonstd/format.h $d/bee/nonstd/print.h \
--replace-fail "include <3rd/fmt/fmt" "include <fmt"
done
# flaky tests on linux
# https://github.com/LuaLS/lua-language-server/issues/2926
substituteInPlace test/tclient/init.lua \
--replace-fail "require 'tclient.tests.load-relative-library'" ""
pushd 3rd/luamake
''
+ lib.optionalString stdenv.hostPlatform.isDarwin (
# This package uses the program clang for C and C++ files. The language
# is selected via the command line argument -std, but this do not work
# in combination with the nixpkgs clang wrapper. Therefor we have to
# find all c++ compiler statements and replace $cc (which expands to
# clang) with clang++.
''
sed -i compile/ninja/macos.ninja \
-e '/c++/s,$cc,clang++,' \
-e '/test.lua/s,= .*,= true,' \
-e '/ldl/s,$cc,clang++,'
sed -i scripts/compiler/gcc.lua \
-e '/cxx_/s,$cc,clang++,'
''
# Avoid relying on ditto (impure)
+ ''
substituteInPlace compile/ninja/macos.ninja \
--replace-fail "ditto" "rsync -a"
substituteInPlace scripts/writer.lua \
--replace-fail "ditto" "rsync -a"
''
);
ninjaFlags = [
"-fcompile/ninja/${if stdenv.hostPlatform.isDarwin then "macos" else "linux"}.ninja"
];
postBuild = ''
popd
./3rd/luamake/luamake rebuild
'';
installPhase = ''
runHook preInstall
install -Dt "$out"/share/lua-language-server/bin bin/lua-language-server
install -m644 -t "$out"/share/lua-language-server/bin bin/*.*
install -m644 -t "$out"/share/lua-language-server {debugger,main}.lua
cp -r locale meta script "$out"/share/lua-language-server
# necessary for --version to work:
install -m644 -t "$out"/share/lua-language-server changelog.md
makeWrapper "$out"/share/lua-language-server/bin/lua-language-server \
$out/bin/lua-language-server \
--add-flags "-E $out/share/lua-language-server/main.lua \
--logpath=\''${XDG_CACHE_HOME:-\$HOME/.cache}/lua-language-server/log \
--metapath=\''${XDG_CACHE_HOME:-\$HOME/.cache}/lua-language-server/meta"
runHook postInstall
'';
# some tests require local networking
__darwinAllowLocalNetworking = true;
nativeInstallCheckInputs = [
versionCheckHook
];
versionCheckProgramArg = [ "--version" ];
doInstallCheck = true;
passthru.updateScript = nix-update-script { };
meta = {
description = "Language server that offers Lua language support";
homepage = "https://github.com/luals/lua-language-server";
changelog = "https://github.com/LuaLS/lua-language-server/blob/${finalAttrs.version}/changelog.md";
license = lib.licenses.mit;
maintainers = with lib.maintainers; [
figsoda
gepbird
sei40kr
];
mainProgram = "lua-language-server";
platforms = lib.platforms.linux ++ lib.platforms.darwin;
};
})
|