Precedente: Nuovi sistemi, Su: Aggiunte [Contenuti][Indice]
Se si esaminano i sorgenti di gawk
nel deposito Git
si noterà che sono inclusi file generati automaticamente dagli strumenti
dell’infrastruttura GNU, come Makefile.in generato da Automake e
anche configure proveniente da Autoconf.
Questo comportamento è differente da quello di molti progetti di Libero Software che non memorizzano i file derivati, per mantenere più sgombro il deposito Git, rendendo così più facile comprendere quali sono le modifiche sostanziali confrontando differenti versioni, nel tentativo di capire cosa è cambiato tra una modifica e la precedente.
Tuttavia, ci sono parecchie ragioni per le quali il manutentore di
gawk
preferisce mantenere ogni cosa nel deposito Git.
Innanzitutto, perché in questo modo è facile generare completamente ogni data versione, senza doversi preoccupare di avere a disposizione altri strumenti (più vecchi, probabilmente obsoleti, e in qualche caso perfino impossibili da trovare).
Come esempio estremo, se solo si pensa di tentare di compilare, diciamo, la
versione Unix V7 di awk
, ci si accorge che non solo è necessario
scaricare e ricompilare la versione V7 del comando yacc
per farlo, ma
anche che serve la versione V7 del comando lex
. E quest’ultima è
praticamente impossibile farla funzionare in un sistema GNU/Linux dei giorni
nostri.122
(Oppure, diciamo che la versione 1.2 di gawk
richiede il comando
bison
come funzionava nel 1989, e non è presente il file
awkgram.c [generato tramite bison
] nel deposito Git. Che cosa
ci garantisce di riuscire a trovare quella versione di bison
? O che
quella riesca a generarlo?)
Se il deposito Git comprende tutti i file derivati, è facile, dopo averli scaricati, ricostruire il programma. (Oppure è più facile, a seconda di quanto si vuole risalire indietro nel tempo).
E qui arriviamo alla seconda (e più valida) ragione per cui tutti i file
devono essere proprio nel deposito Git. Domandiamoci a chi ci si rivolge:
agli sviluppatori di gawk
, oppure a un utilizzatore che intende
solo scaricare una data versione e provarla?
Il manutentore di gawk
desidera che per tutti gli utenti
awk
interessati sia possibile limitarsi a clonare il deposito sul
proprio computer, selezionare la variante che lo interessa e costruirla. Senza
doversi preoccupare di avere a disposizione le versioni corrette degli Autotool
GNU.123.
A questo serve il file bootstrap.sh. Va a "toccare"
[tramite il comando touch
] vari altri file nell’ordine richiesto
in modo che
# La formula canonica per compilare il software GNU: ./bootstrap.sh && ./configure && make
tutto funzioni senza problemi.
Questo è estremamente importante per i rami
master
e gawk-X.Y-stable
.
Inoltre, il manutentore di gawk
potrebbe sostenere che
ciò è importante anche per gli sviluppatori di gawk
. Tentando di
scaricare il ramo xgawk
124 per
compilarlo, non ci riuscì. (Mancava il file ltmain.sh, ed egli non
aveva idea di come crearlo, e c’erano anche ulteriori problemi.)
La cosa lo lasciò in uno stato di frustrazione estrema. Riguardo a quel
ramo, il manutentore è in una posizione non differente da quella di un utente
generico che voglia tentare di compilare gawk-4.1-stable
o master
dal deposito Git.
Quindi, il manutentore ritiene che sia non solo importante, ma cruciale, che per ogni dato ramo la formula canonica evocata prima funzioni senza problemi.
Una terza ragione per avere tutti i file è che senza di essi, usare ‘git
bisect’ per tentare di trovare quale modifica ha introdotto un errore diventa
estremamente difficile. Il manutentore ha tentato di farlo su un altro
progetto che richiede di eseguire script di inizializzazione allo scopo
di creare lo script configure
e così via; è stata un’esperienza
veramente dolorosa. Se invece il deposito Git contiene tutto il necessario,
usare git bisect
al suo interno è molto facile.
Quali sono, quindi, alcune delle conseguenze e/o delle cose da fare?
bison
,
GNU gettext
e
Libtool.
Installare a partire dal sorgente è abbastanza facile. È il modo con cui il
manutentore ha lavorato per anni (e ancora lavora).
Egli aveva /usr/local/bin all’inizio del suo PATH
e dava i
seguenti comandi:
wget https://ftp.gnu.org/gnu/package/package-x.y.z.tar.gz tar -xpzvf package-x.y.z.tar.gz cd package-x.y.z ./configure && make && make check make install # come utente root
NOTA: A causa degli URL di tipo ‘https://’, può essere necessario specificare l’opzione --no-check-certificate a
wget
per poter scaricare il file.
La maggior parte del testo precedente fa parte di messaggi scritti
originalmente dal manutentore agli altri sviluppatori gawk
.
Da uno degli sviluppatori è stata avanzata l’obiezione
“… che chi scarica il sorgente da Git
non è un utente finale”.
Tuttavia, questo non è esatto. Ci sono “utenti avanzati di awk
”
che possono installare gawk
(usando la formula canonica vista sopra)
ma che non conoscono il linguaggio C. Quindi, i rami più rilevanti
dovrebbero essere sempre compilabili.
È stato proposto poi di lanciare ogni notte uno script tramite il
programma di utilità cron
per creare archivi in formato tar
contenenti tutto “il codice sorgente.” Il problema in questo caso è che
ci sono differenti alberi di sorgenti, che corrispondono ai vari rami!
Quindi gli archivi notturni in questione non sono una risposta valida, anche
per il fatto che il deposito Git può rimanere senza alcuna modifica
significativa per settimane intere.
Fortunatamente, il server Git può rispondere a questa esigenza. Per ogni dato ramo chiamato nome-ramo, basta usare:
wget https://git.savannah.gnu.org/cgit/gawk.git/snapshot/gawk-nome-ramo.tar.gz
per ottenere una copia utilizzabile del ramo in questione.
Ci abbiamo provato. È stata un’esperienza dolorosa.
Ecco un programma GNU che (secondo noi) è estremamente difficile da estrarre dal deposito Git e compilare. Per esempio, in un vecchio (ma ancora funzionante) PowerPC Macintosh, con il sistema operativo Mac Os X 10.5, è stato necessario scaricare e compilare una tonnellata di software, incominciando dallo stesso programma Git, per riuscire a lavorare con l’ultima versione del codice. Non è un’esperienza piacevole e, specie sui vecchi sistemi, è una notevole perdita di tempo.
Neppure partire dall’ultimo archivio tar
compresso è stata una
passeggiata: i manutentori avevano eliminato i file compressi in formato
.gz e .bz2 sostituendoli con file di tipo .tar.xz.
Bisognava quindi per prima cosa scaricare e compilare xz
Un ramo (non più presente) creato da uno degli altri sviluppatori, e che non includeva i file generati.
Precedente: Nuovi sistemi, Su: Aggiunte [Contenuti][Indice]