Kompilácia GNU Emacs 29/30 na Debian 12

09.08.2023 | 14:54 | Richard | Richard

GNU Emacs dospel do stabilnej verzie 29 (a testovacej číslo 30). "Dospel" ale nemá nič so slovotvorným základom výrazu "dospievanie". Prvá verzia bola už v roku 1984, takže teraz má cca 38 rokov. Čo z neho robí jeden z najstarších, aktívne vyvíjaných a používaných programov.

 

Hádam starší je iba Fortran, ktorý započal svoju cestu v 1957.

 

V tomto blogu si ukážeme, ako Emacs skompilovať na GNU/Linux-e Debian 12. Ale postup je samozrejme ľahko adaptovateľný na ľubovoľný GNU/linuxový OS, nakoľko len niekoľko balíčkov budeme inštalovať pomocou ich správcu.

Aby bolo všetko tutti, tak mu pridáme i natívnu kompiláciu a tree-sitter. Čo sú akiste výborné a zaujímavé veci.

 

Natívna kompilácia

…v Emacse je proces prekladu a konverzie zdrojového kódu Emacs Lisp-u na strojový kód, ktorý umožňuje efektívnejšie a rýchlejšie spúšťanie Emacs Lisp-u pri každom spustení.

Natívna kompilácia v Emacse nie je nová funkcia; bola zavedená už vo verzii 28.1.

Výsledkom natívnej kompilácie je binárny blob, ktorý (môže) byť následne načítaný pri štarte Emacsu.

 

Tree-sitter

Tree-sitter je knižnica na analýzu syntaktických stromov používaná na analýzu kódu pri jeho manipulácii. Je to nástroj, ktorý umožňuje analyzovať štruktúru syntaxe programovacieho jazyka a poskytuje rozhranie na vykonávanie rôznych operácií, ako je napríklad refaktorovanie kódu, vizualizácia závislostí alebo generovanie dokumentácie.

Tree-sitter podporuje rôzne programovacie jazyky a umožňuje používateľom definovať si vlastné "recepty".

Bežne sa pri práci s kódom (myslené jeho zvýrazňovanie, "folding", presuny na definície,…) používal nejaký parser, pracujúci s regulárnymi výrazmi.

Tree-sitter (údajne) poskytuje lepšiu analýzu ako parser regulárnych výrazov. Regulárne výrazy pracujú so znakmi alebo skupinou znakov a tieto sa musia vyskytovať v zobrazenom texte v definovanom poradí. Tree-sitter je však schopný analyzovať a rozpoznať zložitejšie vzory štruktúrovaneho jazyka vrátane syntaxe.

Parser regulárnych výrazov vyžaduje, aby sa celý vstupný text načítal a spracoval naraz, čo je náročné na pamäť a výpočtový výkon pri práci s veľkými súbormi. Tree-sitter pracuje inkrementálne a analýzu vykonáva bez potreby načítania celého textu naraz.

Parser regulárnych výrazov pracuje len s lineárnou štruktúrou textu a nedokáže zachytiť jeho hierarchiu. Tree-sitter je schopný pochopiť hierarchickú štruktúru textu a poskytnúť informácie o rôznych úrovniach štruktúry - ako sú vnorené bloky kódu a podobne.

 

Priebeh inštalácie

Inštalácia potrebných nástrojov a knižníc

Pre úspešné skompilovanie Emacs-u budeme potrebovať niektoré dodatočné nástroje a knižnice, ktoré sa v bežnej inštalácii OS nemusia vyskytovať.

 

Jedná sa o:

gitnástroj na uchovávanie, správu a sledovanie zmien v zdrojových kódoch projektov
autoconf(zjednodušene) slúži na generovanie Makefile súboru pre kompiláciu
texinfonástroj na prácu s dokumentáciou a jej konverziu
gnutls-binknižnice na využívanie protokolov SSL/TLS (ak chceme používať Emacs aj ako mailového klienta)
libgccjit-12-devknižnica obsahujúca jazykovo nezávislý JIT (Just-In-Time) kompilátor, potrebný pre onú natívnu kompiláciu
gcchádam netreba predstavovať kompilátor pre jazyk C
libgtk2.0-dev(alebo 3) - GTK knižnice, ak má Emacs bežať vo vlastnom renderovanom okne a nie v termináli
libgnutls28-devknižnice pre kompiláciu pre gnutls-bin
libxpm-devknižnice pre podporu xpm grafických súborov
libgif-dev… a detto pre gif
libtinfo-devprechodový balík pre libncurses

 

Bez váhania a rozmýšľania prekopírujeme príkaz:

sudo apt install git autoconf make texinfo gnutls-bin libgccjit-12-dev gcc libgtk2.0-dev libgnutls28-dev lib libxpm-dev libgif-dev

 

Tree-sitter

Stiahneme si poslednú verziu tree-sitter-a:

git clone https://github.com/tree-sitter/tree-sitter.git

A pomocou známej trojriadkovej mágie program skompilujeme:

cd tree-sitter/

make

sudo make install

A (ak zatiaľ nemáme), ak si zadefinujeme ešte jednu premennú, aby Emacs nefrfľal počas kompilácie.
export LD_LIBRARY_PATH=/usr/local/lib/

 

Emacs 29/30

Z repozitárov savannah-u si stiahneme zdrojové kódy Emacsu:

git clone -b master git://git.sv.gnu.org/emacs.git

 

Ďalej nasleduje:

cd emacs

 

Spustíme autogen.sh, ktorý slúži na vygenerovanie konfiguračných súborov a skriptov pre kompiláciu a inštaláciu

./autogen.sh

 

A potom si spustíme configure, s parametrami pre podporu tree-sitter a natívnu kompiláciu. Súčasne, kvôli testovaniu, si zadefinujeme, kam sa majú nakopírovať súbory pri samotnej inštalácii.

./configure --with-tree-sitter --with-native-compilation --with-mailutils --with-pop --prefix=<nejaká_cesta, napr. ~/emacs29>

(--with-pop - ak vyžadujeme i POP3 protokol pri sťahovaní emailov)

 

A nasleduje klasické:

make

sudo make install

 

Nastavenie Tree-sitter

Niekde v inicializačnom súbore vložíme zoznam s adresami, odkiaľ je možné stiahnuť pravidlá pre ten-ktorý jazyk:

(setq treesit-language-source-alist
   '((bash "https://github.com/tree-sitter/tree-sitter-bash")
     (cmake "https://github.com/uyha/tree-sitter-cmake")
     (c "https://github.com/tree-sitter/tree-sitter-c")
     (css "https://github.com/tree-sitter/tree-sitter-css")
     (elisp "https://github.com/Wilfred/tree-sitter-elisp")
     (go "https://github.com/tree-sitter/tree-sitter-go")
     (html "https://github.com/tree-sitter/tree-sitter-html")
     (javascript "https://github.com/tree-sitter/tree-sitter-javascript" "master" "src")
     (json "https://github.com/tree-sitter/tree-sitter-json")
     (make "https://github.com/alemuller/tree-sitter-make")
     (markdown "https://github.com/ikatyang/tree-sitter-markdown")
     (python "https://github.com/tree-sitter/tree-sitter-python")
     (toml "https://github.com/tree-sitter/tree-sitter-toml")
     (tsx "https://github.com/tree-sitter/tree-sitter-typescript" "master" "tsx/src")
     (typescript "https://github.com/tree-sitter/tree-sitter-typescript" "master" "typescript/src")
     (yaml "https://github.com/ikatyang/tree-sitter-yaml")))

A spustíme príkaz M-x treesit-install-language-grammar

 

No a máme skompilovaný Emacs vo verzii… no poslednej, u mňa to bola testovania 30.
Zatiaľ som ju ale do plnej prevádzky nenasadil.


Pár obrázkov na záver:

Obr. 0: A máme Emacs vo verzii č. 30




Obr. 1: A aj funkčný tree-sitter (c-ts-mode)

    • RE: Kompilácia GNU Emacs 29/30 na Debian 12 09.08.2023 | 17:25
      Avatar mark   Používateľ

      Ahoj Richard, dali by sa Ti ukladať obrázky v blogu na linuxos server? Pred časom som si chcel prečítať tvoj starý príspevok Výroba DPS pomocou CNC, časť #1: Návrh DPS a zrejme bol server s obrázkami mimo dosah, takže nenačítalo obrázky, ako je napríklad tento: http://www.famme.sk/blog-obr/dps-cnc/eeschema.jpg. Teraz famme.sk je dostupné, takže obrázky idú tiež.

      • RE: Kompilácia GNU Emacs 29/30 na Debian 12 10.08.2023 | 08:43
        Avatar Richard Antix  Používateľ

        Hm, to jest otázka na adminov linuxos.sk.  Ja príspevky píšem v org-móde pre Emacs, potom ich vyexportujem do html a toto pastnem tu. A teda už pri písaní obrázky nahrávam na famme.sk, čo je doména, ktorú si platím (a zvyčajne ale spoľahlivá, no 😏).


        Ale mohol by som ich nahrávať i na linuxos.sk, čo-ja-viem-ako, cez FTP a pod., ak mi to bude umožnené…

        • RE: Kompilácia GNU Emacs 29/30 na Debian 12 10.08.2023 | 10:00
          Avatar Miroslav Bendík Gentoo  Administrátor

          FTP tu síce nie je, ale upload súborov je multisúborový, takže sa dá vybrať a uploadnúť naraz viac súborov.

          • RE: Kompilácia GNU Emacs 29/30 na Debian 12 10.08.2023 | 10:27
            Avatar Richard Antix  Používateľ

            Ak sa nemýlim, týmto sa súbory pridajú na koniec príspevku.

             

            Ako ale vložiť obrázky do textu?

            • RE: Kompilácia GNU Emacs 29/30 na Debian 12 10.08.2023 | 13:37
              Avatar Miroslav Bendík Gentoo  Administrátor

              Ja ich normále uploadnem a potom v kóde nastavím src="..."

            • RE: Kompilácia GNU Emacs 29/30 na Debian 12 10.08.2023 | 15:10
              Avatar Pavel Q4OS KDE  Administrátor

              Nahraj obrázky ako prílohu blogu a potom si ich nalinkuj cez "Obrázok", linky na ne zistíš keď ich pootváraš. Vieš aj zvoliť, či chceš aby sa na konci blogu zobrazili alebo nie.

    • RE: Kompilácia GNU Emacs 29/30 na Debian 12 10.08.2023 | 08:46
      Avatar Richard Antix  Používateľ

      Len na okraj - na obrázku č. 1 je zobrazný súbor cm.c, ktorý je jedným z tých, ktoré sa prekladajú a linkujú pri kompilácii Emacsu (slúži na obsluhu posunu kurzora).

       

      Až teraz som si všimol, že je to tam samé goto. To vždy bolo, ak nerátam Basic, veľké no-no. ☺