¡Saludos damas y caballeros! Vuelvo después de mis merecidas vacaciones con el frikismo recargado. Digo esto porque estuve de visita en casa de un amigo que compiló Emacs 25 desde fuente delante de mí y ha provocado que tenga envidia y quiera compilar yo también. Y eso os vengo a contar, mi experiencia creando Emacs desde sus piezas más elementales desde mi punto de vista de ignorante de la informática.
¿Compilar?
No es mi primera vez compilando, es concretamente la segunda. La primera fue con pdfpc que compilé tanto en Windows como en GNU/Linux invocando a cmake
para que crease las instrucciones, luego a make
para que compilase y finalmente a make install
para que me instalase el programa en las carpetas correctas.
Compilar Emacs es similar solo que en lugar de llamar a cmake
usamos el script configure
, un script estándar para los programas de GNU que verifica que el sistema cumple las condiciones para compilar el programa en cuestión y crea las instrucciones para make
.
Que los programas de GNU se compilen siempre de la misma manera es debido al conjunto de herramientas GNU Build System o Autotools, que ayudan a crear paquetes de código portables para que los programadores se centren en la funcionalidad de sus programas y que los usuarios solo tengan que aprender el método para compilar una única vez.
He resumido lo que he entendido de este proceso en un dibujillo, para que luego sepamos más o menos dónde estamos:
¡A compilar Emacs!
Después de esta pequeña introducción vamos a ensuciarnos las manoplas. Los pasos que seguiremos son:
- Descargaremos el código fuente
- Si hemos clonado de un repo ejecutaremos
autogen.sh
para obtener el scriptconfigure
- Ejecutaremos
configure
con las opciones que queramos - Llamaremos a
make
que nos fabricará Emacs - Si queremos instalar Emacs en las carpetas de instalación haremos
make install
Veamos cuál ha sido mi experiencia con sus problemas y soluciones.
Descargar el código fuente
Evidentemente, lo primero que necesitamos para compilar desde fuente es el código fuente. Para conseguirlo tenemos dos opciones:
- Descargar la release desde la web a mano, con
wget
o como nos parezca. En este caso empezamos directamente con el scriptconfigure
, siguiendo las instrucciones del archivo INSTALL. - Clonar desde el repositorio de GitHub o Savannah. Obedeceremos a INSTALL.REPO que nos manda ejecutar
autogen.sh
para que aparezca el famosoconfigure
.
El script autogen.sh
Como yo siempre sigo el camino más difícil, cloné el repo de GitHub y por lo tanto tuve que invocar primero a autogen.sh
. Para ello necesité primero instalar Autoconf, una de las herramientas que conforman el GNU Build System y que se encarga de crear el script configure
a partir del archivo configure.ac
. Como suele ser habitual, hice:
sudo apt-get install autoconf
En el caso de que descarguemos la release no tenemos que fabricar el script configure
sino que ya viene incluido.
El script configure
Ahora nos toca ejecutar configure
para que nos verifique si tenemos todas las librerías necesarias instaladas y genere finalmente el Makefile si es así. También podemos pasarle diferentes opciones para controlar el proceso, con --help
vemos cuáles hay.
Por ejemplo, yo utilicé --prefix
para elegir el destino en el que quería que se instalase Emacs. No quería que lo instalase en el directorio por defecto /usr/local/
porque solo estaba haciendo unas pruebas:
ondiz@slimbook:~/Testing/emacs$ ./configure --prefix=/home/ondiz/Testing/
Nos irá diciendo qué dependencias tenemos que resolver y la opciones que debemos darle si no queremos usarlas con un mensaje de este estilo:
configure: error: The following required libraries were not found: libXpm libjpeg libgif/libungif libtiff gnutls Maybe some development libraries/packages are missing? If you don't want to link with them give --with-xpm=no --with-jpeg=no --with-gif=no --with-tiff=no --with-gnutls=no as options to configure
Para resolver el problema buscamos los paquetes correspondientes y los instalamos. Por ejemplo, para la primera de ellas haríamos:
ondiz@slimbook:~/Testing/emacs$ apt-cache search libXpm libxpm-dev - X11 pixmap library (development headers) libxpm4 - X11 pixmap library libxpm4-dbg - X11 pixmap library (debug package) xpmutils - Utilidades de mapas de píxeles para X11 jwm - very small lightweight pure X11 window manager with tray and menus
Como nos pide las librerías de desarrollo elegimos el primer paquete, libxpm-dev
. Haciendo lo mismo para el resto de librerías, vemos que para este caso concreto necesitamos instalar los siguientes paquetes si queremos tener soporte para imágenes de diferentes tipos en Emacs:
sudo apt-get install libxpm-dev libjpeg-dev libgif-dev libtiff-dev gnutls-dev
Cuando tengamos las librerías preparadas volvemos a ejecutar el script y vemos si nos salta algún otro error.
En mi caso, aparte de las librerías de imágenes también necesité las de Gtk+ (libgtk-3-dev
) para tener GUI. También se puede compilar sin GUI (--with-x=no
) o con otra librería de X windows.
Lo último que me dijo fue que POP3 es inseguro y que lo desactivase y que instalase GNU Mailutils para gestionar el email1, cosas que hice para ver qué pasaba. Mi línea final para ejecutar configure
fue por tanto:
./configure --prefix=/home/ondiz/Testing/ --without-pop
Como veis no es difícil, solo hay que ir siguiendo las instrucciones que nos da. Cuando tengamos todo como debe estar nos dirá que ya podemos continuar con la compilación.
Por cierto, después de pasar un rato resolviendo errores, descubrí que el truco del almendruco es instalar las dependencias de una versión anterior, por ejemplo, nosotros que estamos compilando Emacs 25, ya que Emacs 24 está en los repositorios, haríamos:
sudo apt-get build-dep emacs24
¡Pero para ello hay que tener las fuentes en sources.list
! Si os ocurrirá lo mismo que a mí:
ondiz@slimbook:~/Testing/emacs$ sudo apt-get build-dep emacs24 Leyendo lista de paquetes... Hecho E: No se pudo encontrar el paquete de fuentes para emacs24
Invocar a make
Ahora que ya tenemos todas las dependencias resueltas y el Makefile generado nos toca llamar a make
que nos generará el ejecutable en la carpeta src
. Podemos usarlo desde ahí o instalarlo en las carpetas de instalación con make install
. Con esto quiero decir que se instalará con la típica estructura con el ejecutable en PREFIX/bin
, diferentes movidas en PREFIX/share/emacs/VERSION
, etc. donde PREFIX
es la ruta que le hemos pasado anteriormente a configure
o, por defecto, /usr/local/
.
Por último, podemos borrar las sobras generadas en la compilación con make clean
o directamente todas las fuentes si no queremos compilarlo de nuevo. Si queremos compilarlo otra vez con diferente configuración, en cambio, necesitamos hacer make distclean
.
¡Y ya está! Ya podemos usar nuestro recién generado Emacs. Aquí lo de siempre, si no tenemos la carpeta donde vive Emacs en el PATH tendremos que proporcionar toda la ruta o podemos crear un lanzador o lo que nos apetezca. ¡Los que uséis elementaryOS como yo recordad el bug! Habrá que llamar a Emacs con algo parecido a esto:
XLIB_SKIP_ARGB_VISUALS=1 emacs
Ale pues, hermanos, hemos acabado por hoy. Le mando desde aquí un beso al señor que me mostró el proceso y le dedico la canción del final, ¡he aprendido mucho compilando Emacs! 😘
Referencias
7.1 How do I install Emacs? en el manual de Emacs
How to Build Emacs on Linux en Ergo Emacs
Script compile-emacs.sh en GitHub
GNU Build System en la Wikipedia
The GNU configure and build system
configure; make; make install en TLDP
What’s New in Emacs 25.1 en Mastering Emacs
E.2 Running Configure and Make en el manual de Octave
Compiling Linux Software from Source Code
- Y me salió una ventana raruna para configurar el email y tardé como 15 minutos en descubrir que para seleccionar los botones de Aceptar y Cancelar tenía que darle a las flechas. ↩
¡Que alegría de entrada!
Puedo asegurarte que esta queda enmarcada porque esto es algo que tengo unas ganas locas de hacer.
Un abrazo y mil gracias
No es difícil y es divertido, ya nos contarás qué tal te ha ido compilando.
Gracias a ti por leerme 😀
Un saludo
Pingback: En qué ando: agosto | Onda Hostil
Otro que quiere aprender a compilar. En cuanto tenga un rato, a compilar emacs25. Luego, a complilar otra aplicación…
Gracias por el aporte!
Muy bien. ¡Espero que te vaya bien!
Gracias por pasarte por aquí 😀
Pingback: Lo que he aprendido: ver pdfs en Emacs | Onda Hostil
Pingback: Compilando Emacs en Debian Stretch. - Quijote Libre 2.0