Archivo de la etiqueta: make

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

Sigue leyendo

Anuncios

Lo que he aprendido: makefile para pandoc

Hoy es uno de esos días en los que he hecho algo que no sé hacer y ha funcionado. Para colmo de males os voy a contar cómo se hace además, que me gusta hablar sin saber.

Como os dije hace unos días, voy a escribir la tesis en Markdown. Todo son ventajas excepto que el hecho de tener que invocar a pandoc con una pila de argumentos es supercansino, así que he hecho unas investigaciones en Internet y he llegado a la conclusión de que puede hacerse algo llamado Makefile que te genere el pdf solo haciendo make en el terminal.

Qué es un Makefile no os voy a contar porque no lo sé, así que os derivo al blog de mi hermano donde podréis encontrar una explicación y unos links.

La cuestión está en que, aunque no sepamos bien lo que es, podemos usarlo para automatizar la creación de nuestra magnífica tesis. Lo único que tenemos que saber es que el Makefile es como una receta con una estructura concreta:

objetivo: dependencias
[tab] comandos

Si copiamos el ejemplo más simple de aquí y lo adaptamos a nuestro caso nos queda algo así:

Aquí he hecho el truco del almendruco y he bautizado a mis capítulos como 01Título, 02Título y tal para que me componga el pdf usando los capítulos en orden. Cuando entienda mejor como funciona la historia usaré variables.

Ahora solo nos queda abrir el terminal1 en la carpeta donde tengamos los archivos y el Makefile y hacer una cosa tan compleja como:

$ make

Se nos generará nuestro fantástico pdf y no tendremos que escribir el rollo bananero del pandoc.

Hasta aquí hemos llegado, demostrando que podemos usar herramientas complejas sin entenderlas pero consiguiendo que funcionen. La vida del ingeniero es así, amigos 😛


  1. Es así de fácil si estamos en GNU/Linux (en Mac creo que también). Si estáis en Windows Cygwin funciona bastante bien, otro día os cuento algunas cosas sobre él.