lunedì 20 settembre 2010

Compilare gnuplot 4.4 con il supporto per il terminale Lua/TikZ

Da qualche tempo è uscita la versione 4.4 gnuplot. Gli utenti di Debian Sid/Squeeze possono installarla normalmente con il gestore pacchetti, gli utenti di Ubuntu Lucid Lynx possono scaricare i pacchetti deb dagli archivi di Debian: http://packages.debian.org/sid/gnuplot. Questa versione di gnuplot introduce inoltre il supporto nativo al terminale Lua/TikZ, utile per l'inserimento di grafici in documenti LaTeX (ricordo che comunque è presente anche il terminale epslatex per fare ciò). Il pacchetto presente in Debian Sid, però, al momento non supporta questo terminale quindi la compilazione del programma a partire dal sorgente è una delle strade possibili per poterlo utilizzare.

Ovviamente per compilare il programma la prima cosa da fare è procurarsi il codice sorgente. Questo può essere trovato qui. Come secondo passo bisogna installare le dipendenze per la compilazione. Un elenco delle librerie da installare può essere trovata qui (nelle altre distribuzioni i nomi potrebbero differire leggermente): http://packages.debian.org/source/sid/gnuplot. Nei sistemi che utilizzano APT (come Debian e Ubuntu) e in cui il sorgente di gnuplot è presente nei repository è possibile installare tutte queste dipendenze con il comando
sudo apt-get build-dep gnuplot
Per poter utilizzare il terminale Lua/TikZ è però necessario installare inoltre l'interprete Lua e le librerie necessarie per la compilazione. In Debian e Ubuntu è sufficiente installare il pacchetto liblua5.1-0-dev. Prima di continuare bisogna creare un link simbolico:
sudo ln -s /usr/lib/pkgconfig/lua5.1.pc /usr/lib/pkgconfig/lua.pc
Senza questa operazione non verrebbe individuata la presenza di Lua in fase di compilazione di gnuplot.

A questo punto bisogna scompattare l'archivio compresso appena scaricato e spostarsi con il terminale nella cartella in cui ora si trova il sorgente. Per compilare il programma, con il supporto al terminale Lua/TikZ bisogna dare i comandi
./configure --with-lua
make
sudo make install

Dopo l'esecuzione dello script configure controllate che lo script Lua sia presente fra quelli che verranno compilati. Al posto del comando sudo make install potete usare
sudo checkinstall
dopo aver installato il pacchetto checkinstall, che creerà un pacchetto deb per una più semplice rimozione e installazione del programma.

Creare un metapacchetto deb con equivs

Seguite queste istruzioni a vostro rischio e pericolo, non assicuro che non possano creare qualche dipendenza rotta.

In APT (il sistema che gestisce i pacchetti di Debian, Ubuntu e compagnia) i metapacchetti (o dummy packages, pacchetti silenziosi) sono dei pacchetti che non forniscono un vero e proprio software ma che permettono di installare come dipendenze altri programmi. È, per esempio, un metapacchetto ubuntu-desktop: in sé non installa nessun programma, ma fa installare come dipendenze tutti i programmi presenti di default nella versione desktop di Ubuntu.

È possibile creare (in Debian e Ubuntu) dei metapacchetti con il programma equivs. Si installa normalmente da repository. Come al solito si può scegliere la via grafica installando con Synaptic il pacchetto equivs, oppure da terminale con il comando
sudo apt-get install equivs
equivs, che funziona da terminale, fornisce due comandi: equivs-control ed equivs-build. Il primo genera il file di configurazione del metapacchetto che si vorrà creare:
equivs-control nomepacchetto
creerà un file chiamato nomepacchetto (ovviamente sostituirete a nomepacchetto il nome del metapacchetto che vi interessa creare). Il file deve essere modificato con un qualsiasi editor di testo affinché contenga le impostazioni desiderate. Le opzioni che devono essere necessariamente presenti sono Package, Description e Depends. Ricordarsi di rimuovere il cancelletto (decommentare) davanti a tutte le opzioni modificate.

Con
equivs-build nomepacchetto
(nomepacchetto deve essere il nome del file creato con il comando precedente) si costruisce nella stesa cartella il pacchetto deb sulla base delle informazioni contenute nel file appena impostato che potrà essere installato facendoci doppio clic sopra oppure ancora da terminale con il comando
sudo dpkg -i nomepacchetto.deb
(il nome però non sarà semplicemente nomepacchetto.deb ma conterrà il numero della versione e l'architettura impostate, usate l'autocompletamento con il tasto TAB per sapere qual è il nome, oppure semplicemente controllatelo aprendo la cartella).

Un dei possibili usi dei metapacchetti è quello di poter installare con un solo doppio clic numerosi programmi (inserendoli come dipendenze del metapacchetto creato), oppure far credere al sistema APT che sia installato un determinato programma quando lo si è installato in maniera diversa (per esempio attraverso la compilazione del codice sorgente).

In questi giorni ho installato la distribuzione TeX Live 2010 dal sito e voglio che APT veda tutti i pacchetti relativi a TeX Live siano installati (perché la distribuzione è installata all'esterno del gestore pacchetti APT, ma lui non è a conoscenza di ciò ovviamente), in modo da poter installare altri programmi dipendenti da questi pacchetti. Per fare ciò ho creato il file texlive con il seguente contenuto:
Section: tex
Package: texlive-dummy
Version: 2011
Homepage: http://tug.org/texlive/
Standards-Version: 3.9.2
Provides: asymptote, asymptote-doc, biblatex, biblatex-dw, cm-super, context, dblatex, dvipdfmx, dvipng, feynmf, fragmaster, guile-1.8, jadetex, lacheck, latex2html, latex-beamer, latex-cjk-all, latexmk, latex-xcolor, lcdf-typetools, libsigsegv0, lilypond, lilypond-data, lilypond-doc, lmodern, luatex, passivetex, pgf, preview-latex-style, prosper, ps2eps, psutils, t1utils, tex4ht, tex4ht-common, tex-common, texlive, texlive-base, texlive-base-bin, texlive-base-bin-doc, texlive-bibtex-extra, texlive-binaries, texlive-common, texlive-doc-base, texlive-doc-bg, texlive-doc-cs+sk, texlive-doc-de, texlive-doc-en, texlive-doc-es, texlive-doc-fi, texlive-doc-fr, texlive-doc-it, texlive-doc-ja, texlive-doc-ko, texlive-doc-mn, texlive-doc-nl, texlive-doc-pl, texlive-doc-pt, texlive-doc-ru, texlive-doc-si, texlive-doc-th, texlive-doc-tr, texlive-doc-uk, texlive-doc-vi, texlive-doc-zh, texlive-extra-utils, texlive-fonts-extra, texlive-fonts-extra-doc, texlive-fonts-recommended, texlive-fonts-recommended-doc, texlive-font-utils, texlive-formats-extra, texlive-games, texlive-generic-extra, texlive-generic-recommended, texlive-humanities, texlive-humanities-doc, texlive-lang-african, texlive-lang-arabic, texlive-lang-armenian, texlive-lang-croatian, texlive-lang-cyrillic, texlive-lang-czechslovak, texlive-lang-danish, texlive-lang-dutch, texlive-lang-finnish, texlive-lang-french, texlive-lang-german, texlive-lang-greek, texlive-lang-hebrew, texlive-lang-hungarian, texlive-lang-indic, texlive-lang-italian, texlive-lang-latin, texlive-lang-latvian, texlive-lang-lithuanian, texlive-lang-mongolian, texlive-lang-norwegian, texlive-lang-other, texlive-lang-polish, texlive-lang-portuguese, texlive-lang-spanish, texlive-lang-swedish, texlive-lang-tibetan, texlive-lang-ukenglish, texlive-lang-vietnamese, texlive-latex3, texlive-latex-base, texlive-latex-base-doc, texlive-latex-extra, texlive-latex-extra-doc, texlive-latex-recommended, texlive-latex-recommended-doc, texlive-luatex, texlive-math-extra, texlive-metapost, texlive-metapost-doc, texlive-music, texlive-omega, texlive-pictures, texlive-pictures-doc, texlive-plain-extra, texlive-pstricks, texlive-pstricks-doc, texlive-publishers, texlive-publishers-doc, texlive-science, texlive-science-doc, texlive-xetex, tipa, xmltex
Architecture: all
Description: texlive dummy package
Quelli elencati in Provides sono i pacchetti della distribuzione TeX Live che ho trovato o che comunque avevo bisogno di far finta che fossero installati, ne esistono molti altri non presenti in questo elenco. Con il comando
equivs-build texlive
ho generato il pacchetto deb che ho potuto installare con un doppio clic.

Come suggerito nella documentazione (in particolare nel manuale di equivs-build), se riscontrate qualche caso in cui il sistema delle dipendenze dei pacchetti dovrebbe essere migliorato, non usate equivs ma piuttosto segnalate agli sviluppatori il problema.

Qui trovate altre informazioni sulla gestione dei metapacchetti: http://guide.debianizzati.org/index.php/Gestione_dei_metapacchetti.