Modul-System
Christian Kruse
- projektverwaltung
Tag zusammen,
ich habe ein kleines Problem mit den GNU Autotools. Folgendes Scenario:
Ich habe ein C-Projekt, in dem es ein Verzeichnis 'modules' gibt. In diesem Verzeichnis
sind n Module enthalten: einige mit der Distribution mitgelieferte Module und ansonsten
beliebige Module, die der User dort hineinkopieren kann. Das Problem, dass ich nun habe,
ist folgendes: anscheinend muss Automake zur Ausführungszeit wissen, welche Module
vorhanden sind. Heisst, es muss anscheinend vor configure wissen, welche Module vorhanden
sind, sprich sie müssen von Hand dort eingetragen werden. Das ist nur leider ein Problem,
da, wie gesagt, der User prinzipiell Module da von Hand hineinkopieren kann und/oder Module
und per --enable-modules aktivieren bzw. per --disable-modules deaktivieren können soll.
Das wiederum bedeutet, dass ich die Module nicht von Hand dort eintragen kann.
Hat jemand eine Idee, wie man das Problem mit Autotools-Boardmitteln lösen kann?
Grüße,
CK
Hallo Christian,
Hat jemand eine Idee, wie man das Problem mit Autotools-Boardmitteln lösen kann?
Was ich anzubieten habe, hat nicht wirklich viel mit "Boardmitteln" zu tun und ist auch nicht wirklich eine elegante Lösung - aber funktioniert:
AC_INIT()
for i in $srcdir/modules/*.c
do if [[ -f $i ]] ; then my_cur_module=${i##*/}
my_cur_module=${my_cur_module%%.c}
echo 'AC_ARG_ENABLE(!!my_cur_module!!,[ --enable-MODUL Ein Modul aus dem Verzeichnis modules/ aktivieren], MODULES="$MODULES !!my_cur_module!!")' | sed s/!!my_cur_module!!/$my_cur_module/g > $srcdir/.mod_temp
source $srcdir/.mod_temp
rm -f $srcdir/.mod_temp
fi
done
AC_SUBST(MODULES)
AC_OUTPUT(Makefile)
Viele Grüße,
Christian
Hallo Christian,
[...]
Das Problem, dass ich habe, ist nicht, zu erkennen, welche Module da sind,
sondern Automake davon zu überzeugen, dass nicht alle Module zur Laufzeit
bekannt sind ;)
Ich habe das jetzt so gemacht, dass es ein Perl-Script 'add_module.pl' gibt,
dass eine Makefile.am erzeugt. Danach muss dann ./autogen.sh aufgerufen werden,
was dann eine vernünftige Makefile.in erzeugen kann.
Grüße,
CK
Hallo Christian,
Das Problem, dass ich habe, ist nicht, zu erkennen, welche Module da sind,
sondern Automake davon zu überzeugen, dass nicht alle Module zur Laufzeit
bekannt sind ;)
Warum schließt Du dann das modules-Verzeichnis nicht einfach von automake aus?
Viele Grüße,
Christian
Hallo Christian,
Warum schließt Du dann das modules-Verzeichnis nicht einfach von automake aus?
Weil ich dann den Sinn, warum ich Automake einführen möchte (höhere
Portierbarkeit) ad absurdum führe.
Grüße,
CK