Configure

Portable code

Het schrijven van systeem onafhankelijke code is moeilijk. Niet alleen heb je nu al te maken met 4 belangrijke linux distributies die ieder hun programma's en libries op een andere plaats hebben staan maar ook met de diverse unix varianten zoals hp-ux, solaris, aix, true unix en bsd.

Daarbij is het verschil tussen de diverse unix varianten nog veel groter als tussen de diverse linux varianten. Hierbij moet zelfs gedacht worden aan het al dan niet bestaan of anders heten van functies. Hierbij gaat het vaak over zaken die te maken hebben met system calls. Een berucht voorbeeld hiervan is file locking waarvan 2 varianten bestaan.

Natuurlijk zijn er ook nog een aantal manieren waarop het systeem ingericht is die van belang kunnen zijn. Hierbij moet je denken aan werken met een shadow passwoordfile of juis met nis als alternatief voor een gewoon passwoordfile.

Een methode

Om al deze code op te vangen zijn er diverse manieren waarop de code portable te houden. Vaak wordt daar gebruik gemaakt van diverse #ifdef constructies en macro's. Voor de rest moeten in de makefiles alle paden en libries aangepast worden.

Om dit te vergemakelijke is er gnu configure. Dit is een packet dat allerlie testen uit voert om te kijken hoe het systeem zich gedraagt. Hierna genereerd hij de makefiles en een config.h.

Het gebruik van configure

Je kunt configure gebruiken door in de source directory "./configure" te draaien. Hierna krijg je te zien wat er getest wordt en hoe configure er over denkt.

Een paar voorbeelden van de output van ./configure op de gnu hello source.

creating cache ./config.cache
checking for a BSD compatible install... /usr/bin/install -c
...
checking for opendir in -ldir... no
...
checking for sys/param.h... yes
checking for getcwd... yes
...
creating po/Makefile.in
creating Makefile
creating config.h
We zien dat hij begint met het creeeren van een file waar hij de resultaten in op slaat. Daarna test hij een aantal zaken betreffende programma's, libaries, header files en functies. Daarna genereerd hij de makefiles en het config.h file.

Opties van configure

Vaak kun je nog een hoop opties mee geven aan configure. Hiermee kun je vertellen waar de uiteindelijk programma's en/of liberies geinstalleerd moeten worden. Dit gaat via -- opties. Een voorbeeld hiervan is --bindir=/usr/local/bin. Hiermee worden de programma's geinstaleerd in "/usr/local/bin". Vaak kun je ook opties aan of uitzetten met --enable-OPTIE en --disable-OPTIE.

Uiteraard is dit voor ieder programma dus gelukig is er ook een optie --help die de opties toont.

Imake

Voor X programatuur wordt vaak een afwijkende manier gebruikt van het genereren van makefiles. Daar wordt gebruik gemaakt van imake. Dit systeem werkt via een Imakefile waaruit met behulp van locale templates de makefiles gegenereerd worden.

In plaats van het runnen van ./configure gebruik je in dat geval xmkmf -a. Die genereerd dan de makefiles in deze directorie en de subdirectories. Daarna draait hij overal make depend zodat de dependicies ook goed staan.

Het resultaat

Als het goed is kun je naar beide acties gewoon make install aanroepen waarna het systeem alles compileerd en daarna instaleerd.