Autoconf e Automake sono stati avviati per risolvere un problema evolutivo di Unix.
Man mano che Unix si evolveva in direzioni diverse, gli sviluppatori che volevano il codice portatile tendevano a scrivere codice in questo modo:
#if RUNNING_ON_BSD
Set things up in the BSD way
#if RUNNING_ON_SYSTEMV
Set things up in the SystemV way
#endif
Poiché Unix è stato distribuito in diverse implementazioni (BSD, SystemV, molti fork di fornitori e successivamente Linux e altri sistemi simili a Unix), è diventato importante per gli sviluppatori che volevano scrivere codice portatile per scrivere codice che non dipendesse da una particolare marca di sistema operativo , ma sulle funzionalità esposte dal sistema operativo. Questo è importante perché una versione Unix introdurrebbe una nuova funzionalità, ad esempio la "chiamata" di sistema, e successivamente altri sistemi operativi la adotteranno. Invece di avere uno spaghetto di codice che controllava le marche e le versioni, gli sviluppatori hanno iniziato a sondare le funzionalità, quindi il codice è diventato:
#if HAVE_SEND
Use Send here
#else
Use something else
#endif
La maggior parte dei file README per compilare il codice sorgente negli sviluppatori appuntiti degli anni '90 per modificare un file config.h e commentare che le funzionalità appropriate disponibili sul sistema, o spedirebbero i file config.h standard per ogni configurazione del sistema operativo che era stata testata.
Questo processo è stato sia ingombrante che soggetto a errori ed è così che è nato Autoconf. Dovresti pensare ad Autoconf come un linguaggio composto da comandi shell con macro speciali che sono state in grado di sostituire il processo di modifica umana di config.h con uno strumento che ha sondato il sistema operativo per la funzionalità.
Generalmente scrivere il codice di verifica nel file configure.ac e quindi eseguire il comando autoconf che compila questo file nel comando di configurazione eseguibile che hai visto usato.
Quindi, quando esegui, ./configure && make
stavi sondando le funzionalità disponibili sul tuo sistema e quindi costruendo il file eseguibile con la configurazione rilevata.
Quando i progetti open source hanno iniziato a utilizzare i sistemi di controllo del codice sorgente, era logico controllare il file configure.ac, ma non il risultato della compilazione (configure). Autogen.sh è semplicemente un piccolo script che richiama il compilatore autoconf con gli argomenti di comando giusti per te.
-
Automake è cresciuto anche dalle pratiche esistenti nella comunità. Il progetto GNU ha standardizzato una serie regolare di obiettivi per Makefile:
make all
costruirà il progetto
make clean
rimuoverebbe tutti i file compilati dal progetto
make install
installerebbe il software
- cose come
make dist
e make distcheck
preparerebbero la fonte per la distribuzione e verificherebbero che il risultato fosse un pacchetto completo di codice sorgente
- e così via...
La creazione di makefile conformi è diventata gravosa perché c'era un sacco di scaldabagni che si ripetevano più volte. Quindi Automake era un nuovo compilatore che si integrava con autoconf ed elaborava i Makefile "source" (chiamati Makefile.am) in Makefile che potevano quindi essere inviati ad Autoconf.
La toolchain automake / autoconf in realtà utilizza una serie di altri strumenti di supporto e sono aumentati da altri componenti per altre attività specifiche. Con l'aumentare della complessità dell'esecuzione di questi comandi in ordine, è nata la necessità di uno script pronto per l'esecuzione, ed è qui che è nata autogen.sh.
Per quanto ne so, Gnome è stato un progetto che ha introdotto l'uso di questo script di supporto autogen.sh