Bu bölümde autoconf ta kullanabileceğiniz öntanımlı makrolara yer vereceğiz
AC_INIT(sourcefile)
autoconf'u hazırlar, configure.in dosyasında çağrılan ilk makro olmalıdır. sourcefile ifadesi yerine main fonksiyonunu içeren kaynak kod dosyasının adını yazın.
Örnek:
AC_INIT(deneme.c)
AC_PROG_CC
Kullanılacak olan C derleyicisini bulur ve CC değişkenine atar. Eğer CFLAGS değişkeni daha önceden tanımlanmamışsa bu değişkeni de tanımlar.
AC_PROG_CXX
Kullanılacak olan C++ derleyicisini bulur ve CXX değişkenine atar. Eğer CXXFLAGS değişkeni daha önceden tanımlanmamışsa bu değişkeni de tanımlar.
AC_LANG_C
C derleyicisini test eder.
AC_LANG_CPLUSPLUS
C++ derleyicisini test eder.
AC_PROG_INSTALL
INSTALL değişkenine BSD uyumlu install yazılımının tam yolunu atar.
AC_PATH_X
X Window sisteminin başlık dosyalarını ve kütüphanelerini bulmaya çalışır. x_includes ve x_libraries değişkenlerine ilgili klasörleri atar.
AC_PATH_PROG(a, b [,c [,d]])
a=değişken adı
b=aranılan program adı
c=program bulunamazsa değişkenin alacağı değer
d=programı aramak istediğiniz klasor
Örnek:
AC_PATH_PROG(ifconfig_path, ifconfig, FALSE, $PATH:/usr/obj)
AC_OUTPUT(dosyalar)
Hangi dosyaların giriş olacağı burada belirlenir. Giriş dosyaları buraya yazılan dosya isimlerinin sonuna .in uzantısı getirilerek belirlenir. Dosyalar üzerinde gerekli değiştirme işlemleri uygulandıktan sonra çıkış dosyaları yaratılır.
Örnek:
AC_OUTPUT(Makefile spec)
Yukarıdaki kullanımda Makefile.in dosyası
incelenir ve Makefile yaratılır. Aynı
şekilde spec.in dosyası incelenip, spec dosyası yaratılır. AC_CONFIG_HEADER(header_dosyalari)
Burada belirlenen header dosyaları AC_OUTPUT tarafından otomatik olarak işleme alınır. Genellikle dosya adı config.h olarak seçilir. Burada belirlenen dosya AC_OUTPUT tarafından işlem göreceği için config.h.in dosyasına ihtiyaç vardır. Bu dosyayı Bölüm 5 de anlatılan autoheader sizin için otomatik olarak oluşturur.
AC_CHECK_FUNCS(a, [,b [,c]])
a=Aradığınız fonksiyonların listesi (boşluklarla ayırın)
b=Fonksiyon bulunduğu zaman yapılacak işlem
c=Fonksiyon bulunamadığı zaman yapılacak işlem
Örnek:
AC_CHECK_FUNCS(dup2 inet_ntoa memset realpath strchr, [], \
[AC_MSG_ERROR(temel fonksiyonlar bulunamadi)])
AC_CHECK_LIB(a, b, [,c [,d]])
a=Fonksiyonun aranacağı kütüphane adı
b=Aranan fonksiyon adı
c=Fonksiyon bulunursa yapılacak işlem
d=Fonksiyon bulunamazsa yapılacak işlem
Örnek:
AC_CHECK_LIB(crypt,crypt, [], \
[AC_MSG_ERROR(crypt kütüphanesi bulunamadı)])
AC_CHECK_HEADERS(a, [,b [,c]])
a=Aranılan başlık(header) dosyaları (boşlukla ayrılmış)
b=Başlık dosyası bulunduğu zaman yapılacak işlem
c=Başlık dosyası bulunamadığı zaman yapılacak işlem
Örnek:
AC_CHECK_HEADERS(arpa/inet.h sys/socket.h sys/time.h, [], \
[AC_MSG_ERROR(Başlık dosyaları bulunamadı)])
AC_HEADER_STDC
stdlib.h, stdarg.h, string.h ve float.h başlıklarının olup olmadığını kontrol eder. Eğer bulabilirse STDC_HEADERS değişkenini tanımlar.
AC_DEFINE(a, b, [,c])
a=Tanımlanacak sabit'in adı
b=Sabit'in alacağı değer. (değişken kullanmayın çünkü bu makro Full Quoted'dir. Sabit'e değişken bir değer atayacaksanız AC_DEFINE_UNQUOTED makrona bakınız.)
c=Bu parametre, başlık dosyanızda bu sabit'in açıklaması olarak kullanılacaktır.
Örnek:
AC_CONFIG_HEADER(config.h)
AC_CHECK_LIB(crypt, crypt, AC_DEFINE(CRYPT_VARMI, 1, [Crypt fonkiyonu varmi]), \
AC_DEFINE(CRYPT_VARMI, 0, [Crypt fonksiyonu varmi]))
--- config.h.in ---
/*Crypt fonksiyonu var mi*/
#undef CRYPT_VARMI
----------------
# ./configure
...
...
--- config.h ---
/*Crypt fonksiyonu var mi*/
#define CRYPT_VARMI 1
----------------
Yukarıdaki örnekte crypt
fonksiyonunun bulunduğu kabul ettik. AC_DEFINE_UNQUOTED(a, b, [,c])
a=Tanımlanacak sabit'in adı
b=Sabit'in alacağı değer. (Değişken kullanabilirsiniz. Bu makro unquoted'dir.
c=Bu parametre, başlık dosyanızda bu sabit'in açıklaması olarak kullanılacaktır.
Örnek:
AC_CHECK_HEADER(config.h)
organizasyon="EnderUNIX"
AC_DEFINE(ORGANIZATION, "$organizasyon", [Organizasyon Adi])
# ./configure
...
...
--- config.h ---
/*Organizasyon Adi*/
#define ORGANIZASYON "$organizasyon"
----------------
Yukarıdaki örnekte görüdüğü gibi ifade olduğu gibi
alınmıştır (Full Quoted). Şimdi de AC_DEFINE_UNQUOTED
örneğini inceleyelim.
Örnek:
AC_CHECK_HEADER(config.h)
organizasyon="EnderUNIX"
AC_DEFINE_UNQUOTED(ORGANIZATION, "$organizasyon", [Organizasyon Adi])
# ./configure
...
...
--- config.h ---
/*Organizasyon Adi*/
#define ORGANIZASYON "EnderUNIX"
----------------
Son örnekte ise alıntı yapılmamış (unQoted) değişkenin
değeri yerine konulmuştur. AC_SUBST(degisken_adi)
Önceden tanımlanmış olan degisken_adi isimli degiskeni AC_OUTPUT ta tanımlanan dosyaların içerisinde arar. Orada tanimlanan dosyalarda @degisken_adi@ seklinde gecen ifadelerin yerine değerlerini yazar.
surum="0.1"
AC_SUBST(surum)
AC_OUTPUT(Makefile)
--- Makefile.in ---
VERSION=@surum@
...
...
-------------------
# ./configure
...
...
--- Makefile ---
VERSION=0.1
...
...
----------------
AC_MSG_ERROR(mesaj)
Kullanıyıcıyı tanımladığınız mesaj ile uyarır ve configure scriptinden çıkış değeri (exit code) 0(sıfır) olmayan bir şekilde çıkar. Genelde bir kütüphane veya başlık dosyasını bulamadığınızda bu fonksiyona ihtiyaç duyulur.
AC_CHECK_HEADERS(stdio.h sys/socket.h, [], \
AC_MSG_ERROR(Basliklar bulunamadi))
AC_MSG_WARNING(mesaj)
Kullanıcıyı tanımladığınız mesaj ile uyarır, ancak configure'den çıkmaz. Genelde opsiyonel bir kütüphane bulunamadığında kullanıcıyı bilgilendirmek için kullanılır.
AC_ARG_ENABLE(a, b, [,c [,d]])
a=Opsiyon adı (--enable-opsiyon)
b=./configure --help çalıştırıldığına bu opsiyon için gösterilecek açıklama
c=Bu opsiyon varsa yapılacak işlem
d=Bu opsiyon yoksa yapılacak işlem
Örnek:
AC_ARG_ENABLE(ssl, [SSL'i destekle], SSL_KULLAN="EVET", SSL_KULLAN="HAYIR")
AC_CANICAL_HOST
İşletim sistemini tespit eder ve bu değeri host_os değişkenine atar.
Örnek:
AC_CANONICAL_HOST
case "$host_os" in
linux*)
AC_DEFINE(LINUX, 1, [Linux kullaniliyor])
;;
freebsd*)
AC_DEFINE(FREEBSD, 1, [FreeBSD Kullaniliyor])
;;
*)
AC_MSG_ERROR([Desteklenmeyen işletim sistemi: $host_os.])
;;
esac