Emacs: Compilar Emacs en Linux Mint Vanessa
- Building Emacs 28 on Ubuntu Linux by Practicalli, la guia más completa que me he encontrado con diferencia.
- The update-alternatives Command in Linux by Baeldung (también nos hará falta)
- Installing Emacs 29.1 on Ubuntu 22.04 LTS
Normalmente no me suelo complicar la vida compilando programas a menos que tenga unas ganas locas de probar algo y no haya más remedio, pero esta vez me dejé llevar.
Trás actualizar a Linux Mint 21 (Vanessa) decidí que ya era hora de probar Emacs con native compilation así que instale Emacs 28.1 desde el ppa de Kelleyk. La instalación no dió ningún problema pero al intentar configurar Emacs una de las primeras cosas que hice fué poner straight.el en lugar de Package y me dió el error:
Symbol's function definition is void: gv-setter
Y con este error falla totalmente la carga de mi fichero init.el
.
El error puede comprobarse fácilmente con el comando: emacs -q --eval "(require 'gv)"
A la hora de ponerme a compilar estaba convencido de haber leido en internet que era un fallo del código en Emacs y que se corregía con la siguiente versión, pero a la hora de escribir esto ya no estoy tan seguro por que soy incapaz de encontrar la referencia.
En cualquier caso, decidí compilar Emacs 28.2 y estos son los pasos que seguí:
Preparando el terreno
Ajustamos nuestras preferencias de paquetes en Linux Mint (por ejemplo abriendo Synaptic) de forma que estén activados los orígenes de las fuentes del software (Source Code). Si lo haces con Synaptic se encargará de actualizar, de lo contrario asegurate de hacer un sudo apt update
desde el terminal.
Instalamos las dependencias para la compilación con sudo apt build-dep
pero también instalamos algunos programas a mayores:
|
|
Los paquetes adicionales son para aprovechar todas las características del nuevo Emacs con native compilation, son necesarias para aprovechar todas las mejoras del rendimiento de Emacs.
También tenemos que descargar el código fuente de Emacs
Compilando el código fuente
Establecemos las variables para el compilador:
|
|
Si tienes dudas de cual es tu gcc, ejecuta:
|
|
error: ELisp native compiler was requested, but libgccjit was not found.
Ejecutamos el script autogen.sh
, que creará un script configure
específico para nuestro sistema.
Y procedemos con la configuración ejecutando:
|
|
La opción prefix
no es necesaria, pero yo quiero tener controlado donde se instala esta versión compilada de Emacs, no quiero que se mezcle con los ficheros del sistema.
Como de momento no uso Emacs para gestionar mi correo puedo ignorar los warnings de movemail
en cualquier caso ejecutando ./configure --help
podemos ver todas las opciones disponibles. En general configure
ve disponibles en el sistema las bibliotecas necesarias, se habilitan las opciones correspondientes, aunque --with-native-compilation
es obligatorio especificarla.
Ahora lanzamos el proceso de compilación con
|
|
Este comando asigna todos los nucleos del sistema a la compilación, podemos asignar un número fijo si queremos (por ejemplo make -j2
)
Una vez completada la compilación del programa sin errores, podemos probar nuestro Emacs recién compilado con ./src/emacs -q
También podemos comprobar que ya no tenemos el error de gv con el comando emacs -q —eval "(require 'gv)"
update-alternatives
Suponiendo que hemos instalado nuestra nueva versión de Emacs en /opt/emacs-28.2/
. Tendremos que usar la utilidad de sistema update-alternatives
para dejar nuestro nuevo Emacs accesible.
Si echamos un vistazo /opt/emacs-28.2/bin
:
|
|
Veremos todos los programas ejecutables que hemos instalado al ejecutar el make install
.
Tomemos como ejemplo el comando emacs
, vamos a ver como funciona la llamada a emacs
en nuestro sistema.
|
|
El Emacs de nuestro sistema /usr/bin/emacs
apunta en realidad a /etc/alternatives/emacs
. A su vez /etc/alternatives/emacs
apunta a /usr/bin/emacs28
(el que he instalado desde el PPA)
Podemos inspeccionar la configuración de update-alternatives
con dos comandos: update-alternatives --config emacs
y update-alternatives --display emacs
. El primero no da mucha información por que sólo tenemos una alternativa definida para emacs (de momento). El segundo es más interesante:
|
|
Vamos a añadir nuestra nueva alternativa con prioridad 28:
|
|
Ahora tendremos:
|
|
Si vemos todo los programas que tenemos disponibles en /opt/emacs-28.2
veremos que tenemos que actualizar las alternativas para emacsclient
, tags,
etagsy
ebrowse`.
|
|
Ficheros desktop
Ya casi hemos terminado, para finalizar solo tenemos que actualizar (o crear) ficheros .desktop
que apunten a nuestro nuevo Emacs.
Podemos comprobar los ficheros .desktop
existentes con:
|
|
Tendremos que crear nuevas versiones de esos ficheros que apunten al Emacs recién instalado (o editar los existentes), por poner un ejemplo este es el fichero emacs-28.2.desktop
resultado de modificar el emacs28.desktop
:
|
|
Hay que ver el resto de ficheros desktop y comprobar si necesitan modificaciones para funcionar sin problemas.
ACTUALIZACIÓN: Compilando emacs 29
Unas notas rápidas de los pasos seguidos para compilar Emacs 29.
|
|
Podemos hacer git tag --list
para ver todas las versiones disponibles, y con git checkout
nos cambiamos a la versión que nos interese para compilarla.
Tanto si hemos clonado una rama específica como todo el repo para actualizar las fuentes basta con git pull