Autoconf dan Automake dibuat untuk menyelesaikan masalah evolusi Unix.
Saat Unix berkembang ke arah yang berbeda, pengembang yang menginginkan kode portabel cenderung menulis kode seperti ini:
#if RUNNING_ON_BSD
Set things up in the BSD way
#if RUNNING_ON_SYSTEMV
Set things up in the SystemV way
#endif
Karena Unix dipecah menjadi implementasi yang berbeda (BSD, SystemV, banyak fork vendor, dan kemudian Linux dan sistem mirip Unix lainnya) menjadi penting bagi pengembang yang ingin menulis kode portabel untuk menulis kode yang tidak bergantung pada merek sistem operasi tertentu , tetapi pada fitur yang diekspos oleh sistem operasi. Ini penting karena versi Unix akan memperkenalkan fitur baru, misalnya panggilan sistem "kirim", dan kemudian sistem operasi lain akan mengadopsinya. Alih-alih memiliki spageti kode yang memeriksa merek dan versi, pengembang mulai memeriksa fitur, sehingga kode menjadi:
#if HAVE_SEND
Use Send here
#else
Use something else
#endif
Sebagian besar file README untuk mengkompilasi kode sumber kembali pada pengembang berujung tahun 90-an untuk mengedit file config.h dan berkomentar bahwa fitur yang tepat tersedia pada sistem, atau akan mengirimkan file config.h standar untuk setiap konfigurasi sistem operasi yang telah diuji.
Proses ini rumit dan rawan kesalahan dan inilah bagaimana Autoconf muncul. Anda harus menganggap Autoconf sebagai bahasa yang terdiri dari perintah shell dengan makro khusus yang dapat menggantikan proses pengeditan manusia dari config.h dengan alat yang menyelidiki sistem operasi untuk fungsionalitasnya.
Anda biasanya akan menulis kode probing Anda di file configure.ac dan kemudian jalankan perintah autoconf yang akan mengkompilasi file ini ke perintah configure yang dapat dieksekusi yang telah Anda lihat digunakan.
Jadi, ketika Anda menjalankan ./configure && make
Anda sedang mencari fitur yang tersedia di sistem Anda dan kemudian membangun executable dengan konfigurasi yang terdeteksi.
Ketika proyek open source mulai menggunakan sistem kontrol kode sumber, masuk akal untuk memeriksa file configure.ac, tetapi bukan hasil kompilasi (configure). Autogen.sh hanyalah skrip kecil yang memanggil kompiler autoconf dengan argumen perintah yang tepat untuk Anda.
-
Automake juga tumbuh dari praktik yang ada di komunitas. Proyek GNU menstandarisasi serangkaian target reguler untuk Makefiles:
make all
akan membangun proyek
make clean
akan menghapus semua file yang dikompilasi dari proyek
make install
akan menginstal perangkat lunak
- hal-hal seperti
make dist
dan make distcheck
akan menyiapkan sumber untuk distribusi dan memverifikasi bahwa hasilnya adalah paket kode sumber lengkap
- dan seterusnya...
Membangun makefile yang memenuhi persyaratan menjadi memberatkan karena ada banyak pelat ketel yang berulang-ulang. Jadi Automake adalah kompiler baru yang terintegrasi dengan autoconf dan memproses "source" Makefile's (bernama Makefile.am) menjadi Makefile yang kemudian dapat dimasukkan ke Autoconf.
Automchain / autoconf toolchain sebenarnya menggunakan sejumlah alat bantu lain dan mereka ditambah oleh komponen lain untuk tugas spesifik lainnya. Seiring dengan semakin rumitnya menjalankan perintah-perintah ini, kebutuhan untuk skrip siap-pakai lahir, dan dari sinilah autogen.sh berasal.
Sejauh yang saya tahu, Gnome adalah proyek yang memperkenalkan penggunaan skrip pembantu ini autogen.sh