Ich habe ein C-Erweiterungsmodul für Python und möchte es den Rubyisten zur Verfügung stellen.
Der Quelltext enthält eine Reihe von C-Modulen, von denen nur eines von Python abhängig ist. Der Rest hängt nur voneinander und von der Standardbibliothek ab. Ich kann es bauen mit python setup.py build
auf die übliche Weise.
Ich habe mit dem Hinzufügen von Ruby-Unterstützung experimentiert, indem ich newgem
und ich kann eine Version der Erweiterung erstellen mit rake gem
. Der kombinierte Quellcode hat jedoch ein hässliches Verzeichnis-Layout (eine Mischung aus Gem- und Setuptools-Strukturen), und der Build-Prozess ist ein Klotz am Bein.
Ich kann nicht einfach alle Quellen im selben Verzeichnis aufbewahren, weil mkmf
erkennt automatisch das von Python abhängige Modul und versucht, es zu kompilieren, und die Benutzer sollten Python nicht installieren müssen, um ein Modul zu kompilieren, das nicht verwendet wird. Mein aktueller Hack ist für extconf.rb
um die Python-unabhängigen Quelldateien in dasselbe Verzeichnis wie das Ruby-abhängige Erweiterungsmodul zu kopieren.
Gibt es einen vernünftigeren Weg, den Code für beide Sprachen verfügbar zu machen? Sollte ich einfach den Python-unabhängigen Code in einem separaten Gem duplizieren? Sollte ich den unabhängigen Code als separate, mit Autotools erstellte Bibliothek veröffentlichen? Gibt es eine Version von mkmf
die das unerwünschte Modul auslassen kann?