[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[bug#49946] [PATCH 00/31] Tree-sitter, node-gyp addon support and emacs-
From: |
Pierre Langlois |
Subject: |
[bug#49946] [PATCH 00/31] Tree-sitter, node-gyp addon support and emacs-tree-sitter |
Date: |
Fri, 10 Feb 2023 16:14:38 +0000 |
User-agent: |
mu4e 1.8.13; emacs 28.2 |
Hi!
zimoun <zimon.toutoune@gmail.com> writes:
> Hi,
>
> Sorry, I have totally overlooked this tree-sitter story. :-) And I have
> not read all the patch versions and thread yet.
>
>
> On Fri, 25 Nov 2022 at 01:57, Pierre Langlois <pierre.langlois@gmx.com> wrote:
>
>> +(define* (install #:key target grammar-directories outputs
>> #:allow-other-keys)
>> + (let ((lib (string-append (assoc-ref outputs "out")
>> + "/lib/tree-sitter")))
>> + (mkdir-p lib)
>> + (define (compile-language dir)
>> + (with-directory-excursion dir
>> + (let ((lang (assoc-ref (call-with-input-file "src/grammar.json"
>> + read-json)
>> + "name"))
>> + (source-file (lambda (path)
>> + (if (file-exists? path)
>> + path
>> + #f))))
>> + (apply invoke
>> + `(,(if target
>> + (string-append target "-g++")
>> + "g++")
>
> Why is g++ required? Is gcc not enough? I thought from Tree-sitter
> documentation that it was only using C files and not C++; but…
>
>> + "-shared"
>> + "-fPIC"
>> + "-fno-exceptions"
>> + "-O2"
>> + "-g"
>> + "-o" ,(string-append lib "/" lang ".so")
>> + ;; An additional `scanner.{c,cc}' file is sometimes
>> + ;; provided.
>> + ,@(cond
>> + ((source-file "src/scanner.c")
>> + => (lambda (file) (list "-xc" "-std=c99" file)))
>> + ((source-file "src/scanner.cc")
>
> …apparently not.
Yeah this is a little strange. IIUC, the final code generated from the
grammar.js->grammar.json->grammar.c process is plain C, but grammar
packages may also provide some custom hand-written code in terms of a
scanner.{c,cc} file.
Thanks,
Pierre
signature.asc
Description: PGP signature