2010-11-05 5 views
1

Je suis sur Snow Leopard 10.6.4, architecture Intel.Problème d'installation oniguruma gem sur Snow Leopard

J'ai RVM et Ruby 1.9.2 installé:

$ rvm list 
rvm rubies 

=> ruby-1.9.2-p0 [ x86_64 ] 

J'ai installé oniguruma5 comme ceci:

port install oniguruma5 

Puis, selon la sagesse conventionnelle, j'ai essayé d'installer le petit bijou de oniguruma comme ceci:

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

Mais je reçois une erreur de compilation:

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 

Idées?

Je confirme que /opt/local/include contient oniggnu.h, onigposix.h et oniguruma.h

+0

Hé Bob, les soins mettre en retrait le message d'erreur afin qu'il soit rendu en tant que texte préformaté? –

+1

"' sudo gem install oniguruma' ". Vous utilisez RVM: Voir [NE PAS utiliser sudo ...] (http://rvm.beginrescueend.com/rubies/rubygems/). –

Répondre

0

Oniguruma utilisation ultraviolet, Ultraviolet utilisations, Textpow, et que vous allez utiliser Tylenol pour obtenir toutes ces dépendances alignés.

Une fois que vous obtenez toutes les dépendances Alignés assurez-vous d'inclure la bibliothèque pour les rayons ultraviolets avec config.gem 'oniguruma', :lib => 'ultraviolet'

Je vais vérifier cette bibliothèque plus tard, je suis sur un autre ordinateur, mais ne pas l'inclure était un problème pour moi .

+0

Si je retourne à ruby ​​1.8.7 en faisant ceci: –

+0

système RVM puis installez la gemme oniguruma: sudo gem installer oniguruma - --with-opt-dir =/opt/local la compilation réussit . Donc ça doit être quelque chose à propos de rvm et ruby ​​1.9.2. –

+0

Il pourrait également être lié à l'utilisation de sudo avec un rubis RVM installé. Par défaut, RVM s'installe dans le sandbox ~/.rvm et nous avertit de ne pas utiliser sudo. Voir [RVM ne peut pas utiliser ruby ​​avec sudo] (http://stackoverflow.com/questions/3644897/rvm-cannot-use-ruby-with-sudo) et [installer des gems en utilisant rvm] (http://stackoverflow.com/ questions/3853489/installing-gems-using-rvm) –

1

(Je vais avoir le même problème lorsque je tente d'installer oniguruma-ruby avec Ruby 1.9 sur Debian.)

Ainsi, http://oniguruma.rubyforge.org/ dit:

This library provides bindings to Oniguruma, a regular expression library which is standard with Ruby 1.9. It allows users of Ruby 1.8 to access the extended functionality without the need to recompile or to upgrade Ruby.

Il ne ressemble pas à oniguruma- ruby peut être installé sur 1.9 du tout.

Question à Dizan (à qui j'ai envoyé un pointeur à cette question): Mais même si Oniguruma est standard dans Ruby 1.9, si je veux exécuter un module qui a require 'origuruma', il me faudra encore origuruma-ruby , droite? Donc, le rendre compatible avec Ruby 1.9 serait tout de même logique, car il n'y a pas d'autre moyen d'obtenir, par exemple, Textpow ou Ultraviolet fonctionnant sur Ruby 1.9 - ou est-ce qu'il me manque quelque chose?

+1

Ceci est correct: OP tente d'installer Oniguruma qui est déjà contenu dans Ruby 1.9. Vous n'avez pas besoin de le réinstaller. –

+0

Merci pour la clarification! Par "contenu", je suppose que vous voulez dire que Ruby 1.9 correspond à des regex en utilisant la bibliothèque Oniguruma, n'est-ce pas? Mais, que sont supposés faire les modules qui «nécessitent» oniguruma? Je suppose que Ruby 1.9 peut rendre l'utilisation des bindings oniguruma inutile (parce qu'il possède toutes les fonctionnalités d'Oniguruma [comme les groupes nommés?]), Mais si vous avez du code qui doit fonctionner contre 1.8 et 1.9, vous êtes dans un peu d'ennuis, non? –

2

Je suis Dizan, le développeur principal d'oniguruma et d'ultraviolet, désolé d'avoir pris si longtemps pour répondre à cette question! Comme le remarque Jo Liss, le but des liaisons oniguruma était de fournir un accès à certaines fonctionnalités avancées d'expression régulière, désormais standard avec Ruby 1.9. Donc, en principe, il n'y a pas besoin de cela sur 1.9.

En compilant les bindings oniguruma pour 1.9, il est complètement non testé donc vous êtes plus ou moins dans le votre, mais, en principe, il serait facile de patcher à la fois ultraviolet et textpow pour utiliser des expressions régulières dans 1.9. Bien sûr, c'est dans ma liste de choses à faire, mais, malheureusement, à l'heure actuelle, j'ai à peine le temps de le faire. D'un autre côté, certaines personnes ont exprimé leur intérêt à forger ou à prendre en charge le (s) projet (s), ce qui accélérerait les choses. Je vous tiendrai au courant à ce sujet.Une dernière alternative serait de faire le patch vous-même, ce qui n'est pas aussi déconcertant que ça en a l'air: pour autant que je me souvienne, tout ce que vous avez à faire est de remplacer tous les appels par le standard Regexp#new, si vous décidez de De cette façon, je serais heureux de fournir une assistance pour inclure votre patch dans la prochaine version de ultraviolet/textpow.

0

je avais eu la même erreur, mais j'ai essayé

sudo port install oniguruma 

et on m'a dit de

Error: Target org.macports.fetch returned: 

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

depuis que je suis en train de construire un bijou rubis, J'ai installé oniguruma4 au lieu de oniguruma5 . Après avoir fait cela, le petit bijou installé proprement à l'exception d'un avertissement tout en générant la documentation (Aucune définition pour oregexp_initialize)

4

Ma solution est la plus simple (si vous êtes un utilisateur mac):

brew install oniguruma