Portierung von Funktionen



  • Wir müssen einige Funktionen auf ein alternatives Betriebssystem portieren.

    In diesem Betriebssystem gibt es schon einige Standard-Header und eine Standard-Bibliothek. Diese werden kontinuierlich erweitert.

    Nun benötigen wir für eine Portierung unter anderem die Datei pwd.h und die Funktion getpwnam_r.

    Bisher haben wir in zu portierenden Programmen die Funktionsname durch Makros ersetzt. Z.B statt getpwnam_r haben wir XGETPWNAM_R eingefügt und eine Headerdatei mit #define XGETPWNAM_R our_ported_getpwnam_r verwendet.

    Das ganze wird nun aber sehr umständlich, da die zu portierenden Programme immer größer werden und immer mehr Funktionen nötig sind.

    Nun würde ich gerne wissen, wie wir das besser machen könnten.

    Eine Sache wollen wir dabei unbedingt beachten:

    Wir möchten keine System-Header verändern. Wir möchten es vermeiden, dass falls die entsprechenden Funktionen wie getpwnam_r doch noch ins OS integriert werden, Nameskonflikte beim Linken auftreten. Wir möchten also nicht, dass wir eine getpwnam_r schreiben, die später in Konflikt mit einer System-getpwnam_r steht.

    Sprache: C/C++


  • Mod

    Kann man das nicht recht einfach mit den autotools (oder moderneren Buildsystemen) erschlagen? Genau dafür sind die doch gemacht. Ihr schreibt eure Software ganz normal. Vor dem Bauen lasst ihr ein configure-Script laufen, dass checkt, welche der benötigten Funktionen im System vorhanden sind, und daraus dann entsprechende Makros (oder was auch immer ihr wollt) generiert, die ggf. eure Funktionen anstatt der Systemfunktionen einsetzen.

    Effektiv passiert das gleiche, wie ihr derzeit von Hand macht, aber eben automatisiert, direkt vor dem Bauen der Software. Daher kann's euch egal sein, wenn die Liste der Makros lang und unübersichtlich wird, die bekommt nur der Compiler zu sehen.



  • Wie wärs mit ner Zwischenschicht? Die enthält dann die von euch benötigtigte Funktionalität und ruft intern plattformabhängig auf,was zur Implementierung nötig ist.


Anmelden zum Antworten