From mboxrd@z Thu Jan 1 00:00:00 1970 Path: news.gmane.io!.POSTED.blaine.gmane.org!not-for-mail From: Alan Mackenzie Newsgroups: gmane.emacs.devel Subject: Difficulty building tree-sitter grammars [was: Help sought from C++ expert: ....] Date: Thu, 19 Jan 2023 17:14:43 +0000 Message-ID: References: <83y1pyo9hs.fsf@gnu.org> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Injection-Info: ciao.gmane.io; posting-host="blaine.gmane.org:116.202.254.214"; logging-data="23651"; mail-complaints-to="usenet@ciao.gmane.io" Cc: emacs-devel@gnu.org To: Eli Zaretskii Original-X-From: emacs-devel-bounces+ged-emacs-devel=m.gmane-mx.org@gnu.org Thu Jan 19 18:15:45 2023 Return-path: Envelope-to: ged-emacs-devel@m.gmane-mx.org Original-Received: from lists.gnu.org ([209.51.188.17]) by ciao.gmane.io with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1pIYVs-0005zY-WC for ged-emacs-devel@m.gmane-mx.org; Thu, 19 Jan 2023 18:15:45 +0100 Original-Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1pIYV3-0001zz-23; Thu, 19 Jan 2023 12:14:53 -0500 Original-Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1pIYV0-0001zo-8s for emacs-devel@gnu.org; Thu, 19 Jan 2023 12:14:50 -0500 Original-Received: from mx3.muc.de ([193.149.48.5]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1pIYUw-0004gE-MO for emacs-devel@gnu.org; Thu, 19 Jan 2023 12:14:50 -0500 Original-Received: (qmail 53111 invoked by uid 3782); 19 Jan 2023 18:14:44 +0100 Original-Received: from acm.muc.de (p4fe15cd6.dip0.t-ipconnect.de [79.225.92.214]) (using STARTTLS) by colin.muc.de (tmda-ofmipd) with ESMTP; Thu, 19 Jan 2023 18:14:43 +0100 Original-Received: (qmail 9045 invoked by uid 1000); 19 Jan 2023 17:14:43 -0000 Content-Disposition: inline In-Reply-To: <83y1pyo9hs.fsf@gnu.org> X-Submission-Agent: TMDA/1.3.x (Ph3nix) X-Primary-Address: acm@muc.de Received-SPF: pass client-ip=193.149.48.5; envelope-from=acm@muc.de; helo=mx3.muc.de X-Spam_score_int: -18 X-Spam_score: -1.9 X-Spam_bar: - X-Spam_report: (-1.9 / 5.0 requ) BAYES_00=-1.9, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=unavailable autolearn_force=no X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: emacs-devel-bounces+ged-emacs-devel=m.gmane-mx.org@gnu.org Original-Sender: emacs-devel-bounces+ged-emacs-devel=m.gmane-mx.org@gnu.org Xref: news.gmane.io gmane.emacs.devel:302554 Archived-At: Hello, Eli. On Thu, Jan 19, 2023 at 16:59:59 +0200, Eli Zaretskii wrote: > > Date: Thu, 19 Jan 2023 14:53:22 +0000 > > From: Alan Mackenzie > > Just as a matter of interest, in c++-ts-mode a treesit-query-error gets > > thrown. > I don't see any such error. Maybe this is again your outdated grammar > library? Heh! Maybe you're right. So time to get around to installing one from github. So I look at the Emacs-29 NEWS for instructions on how to do this. These instructions are glib and insufficiently helpful. (i) The smallest problem is actually downloading the source of, e.g., tree-sitter-cpp. github doesn't make it obvious how to download stuff, and it took me over 10 minutes to find the GUI thing to activate the download. Then this download was a file.zip. The instructions don't mention that, on GNU, a package called zip is required to unzip this. (ii) The instructions glibly say "To compile such a library, compile the files "scanner.c" and "parser.c" (sometimes named "scanner.cc" and "parser.cc") in the "src" subdirectory of the library's source tree using the C or C++ compiler,...". A Python hacker may well not even know that the C/C++ compiler is called "gcc", far less that the necessary command line option -c is needed to compile the two source files. Personally, this bit didn't present me any great difficulty. (iii) The instructions continue with "..., then link these two files into a shared library named "libtree-sitter-LANG.so, ...". How, exactly? I've guessed that I can also do this with gcc, and need the option -o libtree-sitter-cpp.so, but I also need some flags meaning "link" and "build a .so" and some standard run-time library besides the two object files. I still haven't worked out what these are. The Python hacker pictured above will be totally lost here. (iv) Then we have precise instructions on where to put the newly built ..so file. This is good! This process has so far taken me over an hour, which is too long for something which should be purely routine. It is likely to take a typical Emacs user even longer. I suggest that these instructions in NEWS should be enhanced with (i) Tips on downloading stuff from github; (ii) A sample command line for compiling the C/C++ source files; (iii) A sample command line for linking these to the needed .so file. Possibly two or three versions of these would be needed for the different environments Emacs runs in. And now, on with the tedious drudgery of working out how to link tree-sitter-cpp.so using gcc. :-( -- Alan Mackenzie (Nuremberg, Germany).