Lo que he aprendido: compilar Emacs desde fuente

¡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:

  1. Descargaremos el código fuente
  2. Si hemos clonado de un repo ejecutaremos autogen.sh para obtener el script configure
  3. Ejecutaremos configure con las opciones que queramos
  4. Llamaremos a make que nos fabricará Emacs
  5. 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 script configure, 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 famoso configure.

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

Emacs 25.1 released

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


  1. 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. 
Anuncios

6 pensamientos en “Lo que he aprendido: compilar Emacs desde fuente

  1. Pingback: En qué ando: agosto | Onda Hostil

  2. Miguel Angel Rubio

    Otro que quiere aprender a compilar. En cuanto tenga un rato, a compilar emacs25. Luego, a complilar otra aplicación…
    Gracias por el aporte!

    Responder
  3. Pingback: Lo que he aprendido: ver pdfs en Emacs | Onda Hostil

¡Opina sin miedo! (Puedes usar Markdown)

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s