Kompilácia GNU Emacs 29/30 na Debian 12
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:
git | ná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 |
texinfo | nástroj na prácu s dokumentáciou a jej konverziu |
gnutls-bin | knižnice na využívanie protokolov SSL/TLS (ak chceme používať Emacs aj ako mailového klienta) |
libgccjit-12-dev | knižnica obsahujúca jazykovo nezávislý JIT (Just-In-Time) kompilátor, potrebný pre onú natívnu kompiláciu |
gcc | há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-dev | knižnice pre kompiláciu pre gnutls-bin |
libxpm-dev | knižnice pre podporu xpm grafických súborov |
libgif-dev | … a detto pre gif |
libtinfo-dev | prechodový 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)
Pre pridávanie komentárov sa musíte prihlásiť.
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ž.
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é…
FTP tu síce nie je, ale upload súborov je multisúborový, takže sa dá vybrať a uploadnúť naraz viac súborov.
Ak sa nemýlim, týmto sa súbory pridajú na koniec príspevku.
Ako ale vložiť obrázky do textu?
Ja ich normále uploadnem a potom v kóde nastavím src="..."
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.
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. ☺