about summary refs log tree commit diff stats
path: root/tree-sitter-yts/package.nix
diff options
context:
space:
mode:
authorBenedikt Peetz <benedikt.peetz@b-peetz.de>2024-11-04 20:45:29 +0100
committerBenedikt Peetz <benedikt.peetz@b-peetz.de>2024-11-04 20:45:29 +0100
commit676cc2b5619ecd517df42b07dbc2c22449a47179 (patch)
tree622546b5b6df3cc05171a1b016365ffd612abcd6 /tree-sitter-yts/package.nix
parentstyle(yt/main): Use consistent use qualifications (diff)
downloadyt-676cc2b5619ecd517df42b07dbc2c22449a47179.tar.gz
yt-676cc2b5619ecd517df42b07dbc2c22449a47179.zip
refactor(tree-sitter-yts): Move in tree
Diffstat (limited to '')
-rw-r--r--tree-sitter-yts/package.nix59
1 files changed, 59 insertions, 0 deletions
diff --git a/tree-sitter-yts/package.nix b/tree-sitter-yts/package.nix
new file mode 100644
index 0000000..11ab5a8
--- /dev/null
+++ b/tree-sitter-yts/package.nix
@@ -0,0 +1,59 @@
+# taken from nixpgks: pkgs/development/tools/parsing/tree-sitter/grammar.nix
+{
+  stdenv,
+  nodejs,
+  tree-sitter,
+  lib,
+}:
+# # Build a parser grammar and put the resulting shared object in `$out/parser`
+# {
+#   # language name
+#   language ? "yts",
+#   version ? "1.0.0",
+#   src ? ./.,
+#   location ? null,
+#   generate ? false,
+#   ...
+# } @ args:
+stdenv.mkDerivation {
+  pname = "yts-grammar";
+  version = "1.0.0";
+
+  src = ./.;
+
+  nativeBuildInputs = [nodejs tree-sitter];
+
+  CFLAGS = ["-Isrc" "-O2"];
+  CXXFLAGS = ["-Isrc" "-O2"];
+
+  stripDebugList = ["parser"];
+
+  configurePhase = ''
+    tree-sitter generate
+  '';
+
+  # When both scanner.{c,cc} exist, we should not link both since they may be the same but in
+  # different languages. Just randomly prefer C++ if that happens.
+  buildPhase = ''
+    runHook preBuild
+    if [[ -e src/scanner.cc ]]; then
+      $CXX -fPIC -c src/scanner.cc -o scanner.o $CXXFLAGS
+    elif [[ -e src/scanner.c ]]; then
+      $CC -fPIC -c src/scanner.c -o scanner.o $CFLAGS
+    fi
+    $CC -fPIC -c src/parser.c -o parser.o $CFLAGS
+    rm -rf parser
+    $CXX -shared -o parser *.o
+    runHook postBuild
+  '';
+
+  installPhase = ''
+    runHook preInstall
+    mkdir $out
+    mv parser $out/
+    if [[ -d queries ]]; then
+      cp -r queries $out
+    fi
+    runHook postInstall
+  '';
+}