У меня есть модуль расширения C для Python, и я хочу сделать его доступным для рубистов.
В исходном коде есть несколько модулей C, и только один из них зависит от Python. Остальные зависят только друг от друга и стандартной библиотеки. Я могу построить его с помощью python setup.py build
обычным способом.
Я экспериментировал с добавлением поддержки Ruby с помощью newgem
, и я могу создать версию расширения с помощью rake gem
. Однако комбинированный исходный код имеет уродливую структуру каталогов (смешение структур в стиле Gem и Setuptools), а процесс сборки — тупик.
Я не могу просто хранить все исходники в одном каталоге, потому что mkmf
автоматически выбирает модуль, зависящий от Python, и пытается его собрать, и пользователям не нужно устанавливать Python для компиляции модуля, который не будет использоваться. Мой текущий хак для extconf.rb
состоит в том, чтобы скопировать независимые от Python исходные файлы в тот же каталог, что и модуль расширения, зависящий от Ruby.
Есть ли более разумный способ сделать код доступным для обоих языков? Должен ли я просто дублировать независимый от Python код в отдельном Gem? Должен ли я выпускать независимый код как отдельную библиотеку, созданную с помощью автоинструментов? Есть ли версия mkmf
, которая может пропустить ненужный модуль?