Как упаковать библиотеку и ffi-интерфейс как гем? Возможный?

Я создал библиотеку для проекта, над которым я работал. По сути, он упаковывает imgSeek в качестве альтернативы pHash/phashion. Смотрите эту ссылку для фона:

http://hackerlabs.org/blog/2012/07/30/organizing-photos-with-duplicate-and-similarity-checking/

Библиотека состоит из разделяемой библиотеки C/C++ (с makefile & shit) и привязками ruby-ffi. Я хотел упаковать это, чтобы другие люди могли использовать это, но я действительно не знаю как.

Сайт rubygems документирует упаковку драгоценного камня с расширениями C, но не тем, что я хочу.

Я не уверен, возможно ли это. Возможно, я должен опубликовать библиотеку, скажем, как обычный пакет операционной системы (например,.deb), а затем опубликовать привязки ffi в виде гема и попросить пользователя установить их отдельно. Это звучит как большая работа.

Можно ли упаковать привязки ffi и библиотеку вместе, чтобы установка гема вызывала сборку библиотеки? Лично для меня намного проще передать этот код любому, кто захочет его использовать.

Код здесь:

https://bitbucket.org/dradetsky/ruby-seeklib

https://bitbucket.org/dradetsky/seeklib

https://github.com/dradetsky/ruby-seeklib

https://github.com/dradetsky/seeklib

1 ответ

Это то, что делает гем ffi-compiler.

Вы пишете Rakefile, который использует mkmf-подобный синтаксис, чтобы определить, как построить ваш проект, а затем используете предоставленные помощники для загрузки вашей библиотеки (поскольку встроенная библиотека не будет ни в одном из стандартных путей поиска).

Я не верю, что вы можете собрать прямо из вашего Makefile, однако он кажется достаточно простым, чтобы его было легко перевести - единственное, что, кажется, не документировано, это как изменить флаги, передаваемые компилятору, но выглядит лайк

FFI::Compiler::CompileTask.new('example') do |c|
  c.cflags << '-O2'
end

должен сделать это.

Другие вопросы по тегам