Christian Kruse: Modul-System

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

--
Sich erinnern bedeutet, aus einer Erfahrung nicht ausreichend gelernt zu haben.
  1. 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

    1. 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

      --
      Microsoft: Where do you want to go today?
      Linux: Where do you want to go tomorrow?
      FreeBSD: Are you guys coming, or what?
      1. 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

        1. 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

          --
          Beware Evildoers for my deed is done and every little damsel in distress will be shelted!