我有一个用于Python的C扩展模块,我希望把它提供给Ruby开发者.
源有许多C模块,只有一个是依赖于Python的.其余的只依赖于彼此和标准库.我可以用python setup.py build
通常的方式构建它.
我一直在尝试使用添加Ruby支持newgem
,我可以建立一个版本的延伸rake gem
.然而,组合的源具有难看的目录结构(混合宝石风格和setuptools的风格的结构)和构建过程是一个组装机.
我不能把所有的资源在同一个目录中,因为mkmf
自动拾取Python的相关模块,并试图建立一个和用户不应该安装Python编译将不使用的模块.我现在的黑客是extconf.rb
对Python的独立的源文件复制到同一目录中的Ruby相关的扩展模块.
是否有更健全的方法使代码可用于这两种语言?我应该在一个单独的Gem中复制与Python无关的代码吗?我应该将独立代码作为使用autotools构建的单独lib发布吗?是否有一个版本mkmf
可以跳过不需要的模块?
解决它的一种方法是创建三个不同的项目:
库本身,独立于python和ruby
Python绑定
Ruby绑定
这可能是最干净的解决方案,虽然它在执行发布时需要更多的工作,但它的优势在于您可以发布新版本的Ruby绑定,而无需发布新的库/ python绑定版本.