# yt - A fully featured command line YouTube client # # Copyright (C) 2024 Benedikt Peetz # SPDX-License-Identifier: GPL-3.0-or-later # # This file is part of Yt. # # You should have received a copy of the License along with this program. # If not, see . { 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 ''; }