Проблема установки драгоценного камня онигурума на Snow Leopard - PullRequest
1 голос
/ 05 ноября 2010

Я на Snow Leopard 10.6.4, архитектура Intel.

У меня установлены rvm и ruby ​​1.9.2:

$ rvm list
rvm rubies

=> ruby-1.9.2-p0 [ x86_64 ]

Я установил oniguruma5 так:

port install oniguruma5

Затем, в соответствии с обычной мудростью, я попытался установить камень онигурума так:

sudo gem install oniguruma -- --with-opt-dir=/opt/local

Но я получаю ошибку компиляции:

Julie:lender bhaupt$ sudo gem install oniguruma -- --with-opt-dir=/opt/local
Building native extensions.  This could take a while...
ERROR:  Error installing oniguruma:
 ERROR: Failed to build gem native extension.

/Users/bhaupt/.rvm/rubies/ruby-1.9.2-p0/bin/ruby extconf.rb --with-opt-dir=/opt/local
checking for main() in -lonig... yes
creating Makefile

make
gcc -I. -I/Users/bhaupt/.rvm/rubies/ruby-1.9.2-p0/include/ruby-1.9.1/x86_64-darwin10.4.0 -I/Users/bhaupt/.rvm/rubies/ruby-1.9.2-p0/include/ruby-1.9.1/ruby/backward -I/Users/bhaupt/.rvm/rubies/ruby-1.9.2-p0/include/ruby-1.9.1 -I. -I/opt/local/include -D_XOPEN_SOURCE -D_DARWIN_C_SOURCE   -fno-common -Wall  -o oregexp.o -c oregexp.c
oregexp.c: In function ‘name_callback’:
oregexp.c:111: warning: pointer targets in passing argument 1 of ‘strlen’ differ in signedness
oregexp.c:111: warning: pointer targets in passing argument 1 of ‘rb_intern2’ differ in signedness
oregexp.c:111: warning: pointer targets in passing argument 1 of ‘rb_intern’ differ in signedness
oregexp.c: In function ‘oregexp_initialize’:
oregexp.c:123: error: ‘struct RString’ has no member named ‘ptr’
oregexp.c:124: error: ‘struct RString’ has no member named ‘len’
oregexp.c:138: warning: pointer targets in passing argument 1 of ‘onig_error_code_to_str’ differ in signedness
oregexp.c: In function ‘oregexp_make_match_data’:
oregexp.c:176: warning: passing argument 2 of ‘onig_foreach_name’ from incompatible pointer type
oregexp.c: In function ‘oregexp_match’:
oregexp.c:211: warning: statement with no effect
oregexp.c:215: error: ‘struct RString’ has no member named ‘ptr’
oregexp.c:216: error: ‘struct RString’ has no member named ‘len’
oregexp.c:244: warning: pointer targets in passing argument 1 of ‘onig_error_code_to_str’ differ in signedness
oregexp.c: In function ‘oregexp_append_replacement’:
oregexp.c:267: error: ‘struct RString’ has no member named ‘len’
oregexp.c:268: error: ‘struct RString’ has no member named ‘ptr’
oregexp.c:277: error: ‘struct RString’ has no member named ‘ptr’
oregexp.c:278: error: ‘struct RString’ has no member named ‘len’
oregexp.c:286: warning: format ‘%d’ expects type ‘int’, but argument 2 has type ‘OnigCodePoint’
oregexp.c:293: warning: pointer targets in passing argument 2 of ‘rb_str_buf_cat’ differ in signedness
oregexp.c:297: warning: pointer targets in passing argument 2 of ‘rb_str_buf_cat’ differ in signedness
oregexp.c:328: warning: pointer targets in passing argument 2 of ‘rb_str_buf_cat’ differ in signedness
oregexp.c:332: warning: pointer targets in passing argument 2 of ‘rb_str_buf_cat’ differ in signedness
oregexp.c:336: warning: pointer targets in passing argument 2 of ‘rb_str_buf_cat’ differ in signedness
oregexp.c:341: warning: pointer targets in passing argument 2 of ‘rb_str_buf_cat’ differ in signedness
oregexp.c:350: warning: pointer targets in passing argument 2 of ‘rb_str_buf_cat’ differ in signedness
oregexp.c:371: warning: pointer targets in passing argument 2 of ‘rb_str_buf_cat’ differ in signedness
oregexp.c:379: warning: pointer targets in passing argument 2 of ‘rb_str_buf_cat’ differ in signedness
oregexp.c:385: warning: pointer targets in passing argument 2 of ‘rb_str_buf_cat’ differ in signedness
oregexp.c:392: warning: pointer targets in passing argument 2 of ‘rb_str_buf_cat’ differ in signedness
oregexp.c: In function ‘str_mod_check’:
oregexp.c:405: error: ‘struct RString’ has no member named ‘ptr’
oregexp.c:405: error: ‘struct RString’ has no member named ‘len’
oregexp.c: In function ‘oregexp_gsub’:
oregexp.c:444: error: ‘struct RString’ has no member named ‘ptr’
oregexp.c:445: error: ‘struct RString’ has no member named ‘len’
oregexp.c:462: warning: pointer targets in passing argument 2 of ‘rb_str_buf_cat’ differ in signedness
oregexp.c:484: warning: pointer targets in passing argument 2 of ‘rb_str_buf_cat’ differ in signedness
oregexp.c:491: warning: pointer targets in passing argument 2 of ‘rb_str_buf_cat’ differ in signedness
oregexp.c: In function ‘oregexp_safe_gsub’:
oregexp.c:527: warning: passing argument 3 of ‘rb_ensure’ from incompatible pointer type
oregexp.c: In function ‘oregexp_scan’:
oregexp.c:614: error: ‘struct RString’ has no member named ‘ptr’
oregexp.c:615: error: ‘struct RString’ has no member named ‘len’
oregexp.c: In function ‘oregexp_m_scan’:
oregexp.c:671: warning: passing argument 3 of ‘rb_ensure’ from incompatible pointer type
make: *** [oregexp.o] Error 1


Gem files will remain installed in /Users/bhaupt/.rvm/gems/ruby-1.9.2-p0/gems/oniguruma-1.1.0 for inspection.
Results logged to /Users/bhaupt/.rvm/gems/ruby-1.9.2-p0/gems/oniguruma-1.1.0/ext/gem_make.out

Идеи?

Я подтвердил, что /opt/local/include содержит oniggnu.h, onigposix.h и oniguruma.h

Ответы [ 5 ]

4 голосов
/ 26 октября 2011

Мое решение самое простое (если вы пользователь Mac):

brew install oniguruma
2 голосов
/ 07 января 2011

Я - главный разработчик ультрафиолета Дизан, онигурума и простите, что так долго не отвечал!

Как комментирует Джо Лисс, цель связывания oniguruma состояла в том, чтобы предоставить доступ к некоторым расширенным функциям регулярных выражений, которые теперь являются стандартными в Ruby 1.9.Так что в принципе нет необходимости в этом на 1.9.

Скомпилируя привязки онигурума для 1.9, он полностью не проверен, так что вы более или менее самостоятельны, но, в принципе, было бы легко залатать как ультрафиолет, так и текстовое поле, используя стандартные регулярные выражения в 1.9.Конечно, это в моем списке задач, но, к сожалению, сейчас у меня едва хватает времени для этого.С другой стороны, некоторые люди проявили интерес к разветвлению или принятию проектов, которые могли бы ускорить процесс.Я буду держать вас в курсе этого.

Последней альтернативой было бы сделать патч самостоятельно, что не так страшно, как кажется: насколько я помню, все, что вам нужно сделать, это заменить все вызовы на ORegexp#new стандартными * 1008.*, если вы решите пойти по этому пути, я с радостью предоставлю вам возможность включить ваш патч в следующую версию ультрафиолета / текстового поля.

1 голос
/ 31 декабря 2010

(У меня такая же проблема, когда я пытаюсь установить oniguruma-ruby с Ruby 1.9 в Debian.)

Итак, http://oniguruma.rubyforge.org/ говорит:

Эта библиотека предоставляет привязки к Oniguruma, библиотеке регулярных выражений, которая является стандартной для Ruby 1.9. Он позволяет пользователям Ruby 1.8 получать доступ к расширенным функциям без необходимости перекомпиляции или обновления Ruby.

Не похоже, что oniguruma-ruby может быть установлен на 1.9 вообще.

Вопрос к Дизану (которому я отправил указатель на этот вопрос): Но даже если Oniguruma является стандартным в Ruby 1.9, если я хочу запустить модуль с require 'origuruma', мне все равно понадобится origuruma- Рубин, верно? Поэтому совместимость с Ruby 1.9 все равно имеет смысл, так как нет другого способа заставить, скажем, Textpow или Ultraviolet работать на Ruby 1.9 - или я что-то упустил?

0 голосов
/ 10 марта 2011

У меня была такая же ошибка, но я попытался

sudo port install oniguruma

и получил

Error: Target org.macports.fetch returned: 

        Please use either 
            oniguruma4 (for ruby support) 
        or 
            oniguruma5 (for unicode support)

, так как пытался собрать рубиновый камень, я установилонигурума4 вместо онигурума5 .Сделав это, гем установился чисто, за исключением предупреждения при создании документации (нет определения для oregexp_initialize)

0 голосов
/ 05 ноября 2010

Онигурума использует ультрафиолет, использует ультрафиолет , Textpow , и вы будете использовать Tylenol для выравнивания всех этих зависимостей.

Как только вы выстроите все зависимости, убедитесь, что вы включили библиотеку для ультрафиолета с config.gem 'oniguruma', :lib => 'ultraviolet'

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

...