about summary refs log tree commit diff stats
path: root/sys/nixpkgs/pkgs/tree-sitter-yts/package.nix
diff options
context:
space:
mode:
Diffstat (limited to 'sys/nixpkgs/pkgs/tree-sitter-yts/package.nix')
-rw-r--r--sys/nixpkgs/pkgs/tree-sitter-yts/package.nix63
1 files changed, 63 insertions, 0 deletions
diff --git a/sys/nixpkgs/pkgs/tree-sitter-yts/package.nix b/sys/nixpkgs/pkgs/tree-sitter-yts/package.nix
new file mode 100644
index 00000000..fe9a7326
--- /dev/null
+++ b/sys/nixpkgs/pkgs/tree-sitter-yts/package.nix
@@ -0,0 +1,63 @@
+# 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,
+  version,
+  src,
+  location ? null,
+  generate ? false,
+  ...
+} @ args:
+stdenv.mkDerivation ({
+    pname = "${language}-grammar";
+
+    inherit src version;
+
+    nativeBuildInputs = lib.optionals generate [nodejs tree-sitter];
+
+    CFLAGS = ["-Isrc" "-O2"];
+    CXXFLAGS = ["-Isrc" "-O2"];
+
+    stripDebugList = ["parser"];
+
+    configurePhase =
+      lib.optionalString (location != null) ''
+        cd ${location}
+      ''
+      + lib.optionalString generate ''
+        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
+    '';
+  }
+  // removeAttrs args ["language" "location" "generate"])