Bölüm 4. Autoconf

İçindekiler
4.1. Autoconf'a Giriş
4.2. autoconf Makroları

4.1. Autoconf'a Giriş

autoconf'u daha iyi anlayabilmek için automake aşamasını atlayacağız.

autoconf, configure.in dosyası inceleyerek, orada tanımlanan işleri yapabilecek configure scriptini yaratır. configure scripti ise configure.inde belirlediğiniz, uzantısı .in olan giriş dosyalarını inceleyerek @degisken@ biçimde olan ifadeleri eğer tanımlanmışsa değerleri ile değiştirir. Çıkış dosyasından .in uzantısı kaldırılır.

      -- configure.in --
      ...
      ...
      program_klasoru="/usr/local/deneme"
      AC_SUBST(program_klasoru)
      AC_OUTPUT[deneme.h]
      ------------------
      -- deneme.h.in --
      #define KLASOR @program_klasoru@
      -----------------
      # autoconf 
      # ./configure
      ...
      ...
      ...
      --- deneme.h ---
      #define KLASOR "/usr/local/deneme"
      ----------------

Yukarıda autoconf ve configure'ün çalışma prensibine basit bir örneğe yer verdik. Burada AC_ ile başlayan makrolardan Kısım 4.2 de bahsedilecektir.

Daha geniş kapsamlı bir örnek;

      --- deneme.c ---
      #include <stdio.h>
      #include "config.h"
      int main(int argc, char **argv) {
        printf("Bu programin sürümü %s\n", SURUM);
        return 0;
      }
      ----------------
      --- config.h.in ---
      #define SURUM @surum@
      -------------------
      --- configure.in ---
      AC_INIT(deneme.c)
      dnl C derleyicisini bul ve test et
      AC_PROG_CC
      AC_LANG_C
      dnl surum degiskenini tanimla ve giris dosyalarinda incelenmek uzere gerekenleri yap
      surum="0.1"
      AC_SUBST(surum)
      dnl Makefile.in dosyasını oku ve Makefile'i yarat
      dnl config.h.in dosyasını oku ve config.h'i yarat
      AC_OUTPUT([
      Makefile
      config.h
      ])
      --------------------
      --- Makefile.in ---
      CC = @CC@
      CFLAGS = @CFLAGS@
      all: deneme-bin
      deneme-bin: deneme.c
        $(CC) $(CFLAGS) deneme.c -o deneme
      clean:
        rm -f deneme
      distclean:
        rm -f config.h Makefile
      -------------------

Yukarıdaki mini projeyi aşama aşama uygulayalım:

      # ls
      Makefile.in config.h.in configure.in deneme.c
      # autoconf
      # ./configure
      ...
      ...
      # ls
      Makefile Makefile.in config.h config.h.in configure.in deneme.c
      # make
      ...
      ...
      # ls
      Makefile Makefile.in config.h config.h.in configure.in deneme deneme.c

İlk başlangıçta autoconf çalıştırılarak, configure.in dosyasından configure scripti oluşturuluyor. configure scripti ile Makefile.in ve config.h.in dosyalarının içerisinde @...@ biçiminde yeralan ifadelerin değerleri yerine konuluyor ve Makefile ve config.h oluşturuluyor. make komutu ile derleme işlemi gerçekleştiriliyor.