Open mynyml opened 14 years ago
Same here on Ubuntu 9.10 running ruby 1.9.1-p378
$ gem install johnson Building native extensions. This could take a while... ERROR: Error installing johnson: ERROR: Failed to build gem native extension.
/home/slava/.rvm/rubies/ruby-1.9.1-p378/bin/ruby extconf.rb checking for jsautocfg.h in /home/slava/.rvm/gems/ruby-1.9.1-p378/gems/johnson-1.2.0/vendor/spidermonkey/Linux_All_DBG.OBJ... yes checking for jsapi.h in /home/slava/.rvm/gems/ruby-1.9.1-p378/gems/johnson-1.2.0/vendor/spidermonkey... yes creating Makefile
make gcc -I. -I/home/slava/.rvm/rubies/ruby-1.9.1-p378/include/ruby-1.9.1/i686-linux -I/home/slava/.rvm/rubies/ruby-1.9.1-p378/include/ruby-1.9.1/ruby/backward -I/home/slava/.rvm/rubies/ruby-1.9.1-p378/include/ruby-1.9.1 -I. -I/home/slava/.rvm/gems/ruby-1.9.1-p378/gems/johnson-1.2.0/vendor/spidermonkey/Linux_All_DBG.OBJ -I/home/slava/.rvm/gems/ruby-1.9.1-p378/gems/johnson-1.2.0/vendor/spidermonkey -D_FILE_OFFSET_BITS=64 -fPIC -O2 -g -Wall -Wno-parentheses -g -Wall -Wextra -Wcast-qual -Wwrite-strings -Wconversion -Wmissing-noreturn -Winline -DXP_UNIX -o idhash.o -c idhash.c gcc -I. -I/home/slava/.rvm/rubies/ruby-1.9.1-p378/include/ruby-1.9.1/i686-linux -I/home/slava/.rvm/rubies/ruby-1.9.1-p378/include/ruby-1.9.1/ruby/backward -I/home/slava/.rvm/rubies/ruby-1.9.1-p378/include/ruby-1.9.1 -I. -I/home/slava/.rvm/gems/ruby-1.9.1-p378/gems/johnson-1.2.0/vendor/spidermonkey/Linux_All_DBG.OBJ -I/home/slava/.rvm/gems/ruby-1.9.1-p378/gems/johnson-1.2.0/vendor/spidermonkey -D_FILE_OFFSET_BITS=64 -fPIC -O2 -g -Wall -Wno-parentheses -g -Wall -Wextra -Wcast-qual -Wwrite-strings -Wconversion -Wmissing-noreturn -Winline -DXP_UNIX -o js_land_proxy.o -c js_land_proxy.c In file included from js_land_proxy.c:1: js_land_proxy.h:11:18: error: node.h: No such file or directory In file included from js_land_proxy.c:1: js_land_proxy.h:17: error: expected specifier-qualifier-list before ‘NODE’ js_land_proxy.c:21: warning: missing initializer js_land_proxy.c:21: warning: (near initialization for ‘JSLandProxyClass.getObjectOps’) js_land_proxy.c:37: warning: missing initializer js_land_proxy.c:37: warning: (near initialization for ‘JSLandClassProxyClass.xdrObject’) js_land_proxy.c:52: warning: missing initializer js_land_proxy.c:52: warning: (near initialization for ‘JSLandCallableProxyClass.construct’) js_land_proxy.c: In function ‘call_ruby_from_js_va’: js_land_proxy.c:63: error: ‘ruby_errinfo’ undeclared (first use in this function) js_land_proxy.c:63: error: (Each undeclared identifier is reported only once js_land_proxy.c:63: error: for each function it appears in.) js_land_proxy.c: In function ‘attribute_p’: js_land_proxy.c:141: warning: implicit declaration of function ‘nd_type’ js_land_proxy.c:141: error: ‘METHOD’ has no member named ‘body’ js_land_proxy.c:141: error: ‘NODE_IVAR’ undeclared (first use in this function) js_land_proxy.c: In function ‘set’: js_land_proxy.c:325: error: ‘ruby_errinfo’ undeclared (first use in this function) js_land_proxy.c: In function ‘construct’: js_land_proxy.c:384: error: ‘ruby_errinfo’ undeclared (first use in this function) js_land_proxy.c: In function ‘method_missing’: js_land_proxy.c:479: error: ‘ruby_errinfo’ undeclared (first use in this function) js_land_proxy.c: In function ‘call’: js_land_proxy.c:506: error: ‘ruby_errinfo’ undeclared (first use in this function) js_land_proxy.c: In function ‘make_js_land_proxy’: js_land_proxy.c:573: warning: passing argument 2 of ‘JSCallFunctionName’ makes pointer from integer without a cast /home/slava/.rvm/gems/ruby-1.9.1-p378/gems/johnson-1.2.0/vendor/spidermonkey/jsapi.h:2118: note: expected ‘struct JSObject ’ but argument is of type ‘jsval’ js_land_proxy.c:611: warning: passing argument 2 of ‘JS_CallFunctionName’ makes pointer from integer without a cast /home/slava/.rvm/gems/ruby-1.9.1-p378/gems/johnson-1.2.0/vendor/spidermonkey/jsapi.h:2118: note: expected ‘struct JSObject ’ but argument is of type ‘jsval’ js_land_proxy.c:616: warning: passing argument 2 of ‘JS_CallFunctionName’ makes pointer from integer without a cast /home/slava/.rvm/gems/ruby-1.9.1-p378/gems/johnson-1.2.0/vendor/spidermonkey/jsapi.h:2118: note: expected ‘struct JSObject ’ but argument is of type ‘jsval’ make: _\ [js_land_proxy.o] Error 1
Gem files will remain installed in /home/slava/.rvm/gems/ruby-1.9.1-p378/gems/johnson-1.2.0 for inspection. Results logged to /home/slava/.rvm/gems/ruby-1.9.1-p378/gems/johnson-1.2.0/ext/spidermonkey/gem_make.out
I got the same problem when installing johnson 2.0.0 pre1 on Snow Leopard and Ruby 1.9.1 p378.
Same here:
%> uname -a Linux dhcppc18 2.6.32-ARCH #1 SMP PREEMPT Tue Feb 9 15:12:10 CET 2010 x86_64 Intel(R) Core(TM)2 Duo CPU P8600 @ 2.40GHz GenuineIntel GNU/Linux
%> ruby -v ruby 1.9.1p378 (2010-01-10 revision 26273) [x86_64-linux]
%> sudo gem install johnson --version "= 2.0.0.pre1" Building native extensions. This could take a while... ERROR: Error installing johnson: ERROR: Failed to build gem native extension. /usr/bin/ruby extconf.rb cat: ../../dist/Linux_All_DBG.OBJ/nspr/Version: No such file or directory cd editline; make -f Makefile.ref all make[1]: Entering directory `/usr/lib/ruby/gems/1.9.1/gems/johnson-2.0.0.pre1/vendor/spidermonkey/editline' gcc -o Linux_All_DBG.OBJ/editline.o -c -Wall -Wno-format -MMD -DXP_UNIX -g3 -DXP_UNIX -DSVR4 -DSYSV -D_BSD_SOURCE -DPOSIX_SOURCE -DHAVE_LOCALTIME_R -DHAVE_VA_COPY -DVA_COPY=va_copy -DPIC -fPIC -DDEBUG -DDEBUG_root -DJSFILE -DANSI_ARROWS -DHAVE_TCGETATTR -DHIDE -DUSE_DIRENT -DSYS_UNIX -DHAVE_STDLIB -DUNIQUE_HISTORY editline.c editline.c: In function ‘readline’: editline.c:1038: warning: implicit declaration of function ‘getpid’ editline.c: In function ‘add_history’: editline.c:1051: warning: pointer targets in passing argument 2 of ‘strcmp’ differ in signedness /usr/include/string.h:142: note: expected ‘const char *’ but argument is of type ‘CHAR *’ gcc -o Linux_All_DBG.OBJ/sysunix.o -c -Wall -Wno-format -MMD -DXP_UNIX -g3 -DXP_UNIX -DSVR4 -DSYSV -D_BSD_SOURCE -DPOSIX_SOURCE -DHAVE_LOCALTIME_R -DHAVE_VA_COPY -DVA_COPY=va_copy -DPIC -fPIC -DDEBUG -DDEBUG_root -DJSFILE -DANSI_ARROWS -DHAVE_TCGETATTR -DHIDE -DUSE_DIRENT -DSYS_UNIX -DHAVE_STDLIB -DUNIQUE_HISTORY sysunix.c ar rv Linux_All_DBG.OBJ/libedit.a Linux_All_DBG.OBJ/editline.o Linux_All_DBG.OBJ/sysunix.o ar: creating Linux_All_DBG.OBJ/libedit.a a - Linux_All_DBG.OBJ/editline.o a - Linux_All_DBG.OBJ/sysunix.o echo Linux_All_DBG.OBJ/libedit.a Linux_All_DBG.OBJ/libedit.a make[1]: Leaving directory `/usr/lib/ruby/gems/1.9.1/gems/johnson-2.0.0.pre1/vendor/spidermonkey/editline' make -f Makefile.ref Linux_All_DBG.OBJ/libjs.a Linux_All_DBG.OBJ/libjs.so Linux_All_DBG.OBJ/js Linux_All_DBG.OBJ/jsautocfg.h Linux_All_DBG.OBJ/jscpucfg Linux_All_DBG.OBJ/jscpucfg.o cat: ../../dist/Linux_All_DBG.OBJ/nspr/Version: No such file or directory make[1]: Entering directory `/usr/lib/ruby/gems/1.9.1/gems/johnson-2.0.0.pre1/vendor/spidermonkey' make[1]: Circular jscpucfg.h <- Linux_All_DBG.OBJ/jsautocfg.h dependency dropped. gcc -o Linux_All_DBG.OBJ/jscpucfg.o -c -Wall -Wno-format -MMD -g3 -DXP_UNIX -DSVR4 -DSYSV -D_BSD_SOURCE -DPOSIX_SOURCE -DHAVE_LOCALTIME_R -DHAVE_VA_COPY -DVA_COPY=va_copy -DPIC -fPIC -DDEBUG -DDEBUG_root -DEDITLINE -ILinux_All_DBG.OBJ jscpucfg.c gcc -o Linux_All_DBG.OBJ/jscpucfg Linux_All_DBG.OBJ/jscpucfg.o make[1]: Circular Linux_All_DBG.OBJ/jsautocfg.h <- Linux_All_DBG.OBJ/jsautocfg.h dependency dropped. rm -f Linux_All_DBG.OBJ/jsautocfg.h Linux_All_DBG.OBJ/jscpucfg > Linux_All_DBG.OBJ/jsautocfg.h gcc -o Linux_All_DBG.OBJ/jsapi.o -c -Wall -Wno-format -MMD -g3 -DXP_UNIX -DSVR4 -DSYSV -D_BSD_SOURCE -DPOSIX_SOURCE -DHAVE_LOCALTIME_R -DHAVE_VA_COPY -DVA_COPY=va_copy -DPIC -fPIC -DDEBUG -DDEBUG_root -DEDITLINE -ILinux_All_DBG.OBJ jsapi.c jsapi.c: In function ‘JS_ConvertArgumentsVA’: jsapi.c:272: warning: passing argument 5 of ‘TryArgumentFormatter’ from incompatible pointer type jsapi.c:134: note: expected ‘struct __va_list_tag (*)[1]’ but argument is of type ‘struct __va_list_tag **’ jsapi.c: In function ‘JS_PushArgumentsVA’: jsapi.c:380: warning: passing argument 5 of ‘TryArgumentFormatter’ from incompatible pointer type jsapi.c:134: note: expected ‘struct __va_list_tag (*)[1]’ but argument is of type ‘struct __va_list_tag **’ gcc -o Linux_All_DBG.OBJ/jsarena.o -c -Wall -Wno-format -MMD -g3 -DXP_UNIX -DSVR4 -DSYSV -D_BSD_SOURCE -DPOSIX_SOURCE -DHAVE_LOCALTIME_R -DHAVE_VA_COPY -DVA_COPY=va_copy -DPIC -fPIC -DDEBUG -DDEBUG_root -DEDITLINE -ILinux_All_DBG.OBJ jsarena.c gcc -o Linux_All_DBG.OBJ/jsarray.o -c -Wall -Wno-format -MMD -g3 -DXP_UNIX -DSVR4 -DSYSV -D_BSD_SOURCE -DPOSIX_SOURCE -DHAVE_LOCALTIME_R -DHAVE_VA_COPY -DVA_COPY=va_copy -DPIC -fPIC -DDEBUG -DDEBUG_root -DEDITLINE -ILinux_All_DBG.OBJ jsarray.c gcc -o Linux_All_DBG.OBJ/jsatom.o -c -Wall -Wno-format -MMD -g3 -DXP_UNIX -DSVR4 -DSYSV -D_BSD_SOURCE -DPOSIX_SOURCE -DHAVE_LOCALTIME_R -DHAVE_VA_COPY -DVA_COPY=va_copy -DPIC -fPIC -DDEBUG -DDEBUG_root -DEDITLINE -ILinux_All_DBG.OBJ jsatom.c gcc -o Linux_All_DBG.OBJ/jsbool.o -c -Wall -Wno-format -MMD -g3 -DXP_UNIX -DSVR4 -DSYSV -D_BSD_SOURCE -DPOSIX_SOURCE -DHAVE_LOCALTIME_R -DHAVE_VA_COPY -DVA_COPY=va_copy -DPIC -fPIC -DDEBUG -DDEBUG_root -DEDITLINE -ILinux_All_DBG.OBJ jsbool.c gcc -o Linux_All_DBG.OBJ/jscntxt.o -c -Wall -Wno-format -MMD -g3 -DXP_UNIX -DSVR4 -DSYSV -D_BSD_SOURCE -DPOSIX_SOURCE -DHAVE_LOCALTIME_R -DHAVE_VA_COPY -DVA_COPY=va_copy -DPIC -fPIC -DDEBUG -DDEBUG_root -DEDITLINE -ILinux_All_DBG.OBJ jscntxt.c gcc -o Linux_All_DBG.OBJ/jsdate.o -c -Wall -Wno-format -MMD -g3 -DXP_UNIX -DSVR4 -DSYSV -D_BSD_SOURCE -DPOSIX_SOURCE -DHAVE_LOCALTIME_R -DHAVE_VA_COPY -DVA_COPY=va_copy -DPIC -fPIC -DDEBUG -DDEBUG_root -DEDITLINE -ILinux_All_DBG.OBJ jsdate.c gcc -o Linux_All_DBG.OBJ/jsdbgapi.o -c -Wall -Wno-format -MMD -g3 -DXP_UNIX -DSVR4 -DSYSV -D_BSD_SOURCE -DPOSIX_SOURCE -DHAVE_LOCALTIME_R -DHAVE_VA_COPY -DVA_COPY=va_copy -DPIC -fPIC -DDEBUG -DDEBUG_root -DEDITLINE -ILinux_All_DBG.OBJ jsdbgapi.c gcc -o Linux_All_DBG.OBJ/jsdhash.o -c -Wall -Wno-format -MMD -g3 -DXP_UNIX -DSVR4 -DSYSV -D_BSD_SOURCE -DPOSIX_SOURCE -DHAVE_LOCALTIME_R -DHAVE_VA_COPY -DVA_COPY=va_copy -DPIC -fPIC -DDEBUG -DDEBUG_root -DEDITLINE -ILinux_All_DBG.OBJ jsdhash.c gcc -o Linux_All_DBG.OBJ/jsdtoa.o -c -Wall -Wno-format -MMD -g3 -DXP_UNIX -DSVR4 -DSYSV -D_BSD_SOURCE -DPOSIX_SOURCE -DHAVE_LOCALTIME_R -DHAVE_VA_COPY -DVA_COPY=va_copy -DPIC -fPIC -DDEBUG -DDEBUG_root -DEDITLINE -ILinux_All_DBG.OBJ jsdtoa.c gcc -o Linux_All_DBG.OBJ/jsemit.o -c -Wall -Wno-format -MMD -g3 -DXP_UNIX -DSVR4 -DSYSV -D_BSD_SOURCE -DPOSIX_SOURCE -DHAVE_LOCALTIME_R -DHAVE_VA_COPY -DVA_COPY=va_copy -DPIC -fPIC -DDEBUG -DDEBUG_root -DEDITLINE -ILinux_All_DBG.OBJ jsemit.c gcc -o Linux_All_DBG.OBJ/jsexn.o -c -Wall -Wno-format -MMD -g3 -DXP_UNIX -DSVR4 -DSYSV -D_BSD_SOURCE -DPOSIX_SOURCE -DHAVE_LOCALTIME_R -DHAVE_VA_COPY -DVA_COPY=va_copy -DPIC -fPIC -DDEBUG -DDEBUG_root -DEDITLINE -ILinux_All_DBG.OBJ jsexn.c gcc -o Linux_All_DBG.OBJ/jsfun.o -c -Wall -Wno-format -MMD -g3 -DXP_UNIX -DSVR4 -DSYSV -D_BSD_SOURCE -DPOSIX_SOURCE -DHAVE_LOCALTIME_R -DHAVE_VA_COPY -DVA_COPY=va_copy -DPIC -fPIC -DDEBUG -DDEBUG_root -DEDITLINE -ILinux_All_DBG.OBJ jsfun.c gcc -o Linux_All_DBG.OBJ/jsgc.o -c -Wall -Wno-format -MMD -g3 -DXP_UNIX -DSVR4 -DSYSV -D_BSD_SOURCE -DPOSIX_SOURCE -DHAVE_LOCALTIME_R -DHAVE_VA_COPY -DVA_COPY=va_copy -DPIC -fPIC -DDEBUG -DDEBUG_root -DEDITLINE -ILinux_All_DBG.OBJ jsgc.c gcc -o Linux_All_DBG.OBJ/jshash.o -c -Wall -Wno-format -MMD -g3 -DXP_UNIX -DSVR4 -DSYSV -D_BSD_SOURCE -DPOSIX_SOURCE -DHAVE_LOCALTIME_R -DHAVE_VA_COPY -DVA_COPY=va_copy -DPIC -fPIC -DDEBUG -DDEBUG_root -DEDITLINE -ILinux_All_DBG.OBJ jshash.c gcc -o Linux_All_DBG.OBJ/jsinterp.o -c -g3 -DXP_UNIX -DSVR4 -DSYSV -D_BSD_SOURCE -DPOSIX_SOURCE -DHAVE_LOCALTIME_R -DHAVE_VA_COPY -DVA_COPY=va_copy -DPIC -fPIC -DDEBUG -DDEBUG_root -DEDITLINE -ILinux_All_DBG.OBJ jsinterp.c gcc -o Linux_All_DBG.OBJ/jsinvoke.o -c -Wall -Wno-format -MMD -g3 -DXP_UNIX -DSVR4 -DSYSV -D_BSD_SOURCE -DPOSIX_SOURCE -DHAVE_LOCALTIME_R -DHAVE_VA_COPY -DVA_COPY=va_copy -DPIC -fPIC -DDEBUG -DDEBUG_root -DEDITLINE -ILinux_All_DBG.OBJ jsinvoke.c gcc -o Linux_All_DBG.OBJ/jsiter.o -c -Wall -Wno-format -MMD -g3 -DXP_UNIX -DSVR4 -DSYSV -D_BSD_SOURCE -DPOSIX_SOURCE -DHAVE_LOCALTIME_R -DHAVE_VA_COPY -DVA_COPY=va_copy -DPIC -fPIC -DDEBUG -DDEBUG_root -DEDITLINE -ILinux_All_DBG.OBJ jsiter.c gcc -o Linux_All_DBG.OBJ/jslock.o -c -Wall -Wno-format -MMD -g3 -DXP_UNIX -DSVR4 -DSYSV -D_BSD_SOURCE -DPOSIX_SOURCE -DHAVE_LOCALTIME_R -DHAVE_VA_COPY -DVA_COPY=va_copy -DPIC -fPIC -DDEBUG -DDEBUG_root -DEDITLINE -ILinux_All_DBG.OBJ jslock.c gcc -o Linux_All_DBG.OBJ/jslog2.o -c -Wall -Wno-format -MMD -g3 -DXP_UNIX -DSVR4 -DSYSV -D_BSD_SOURCE -DPOSIX_SOURCE -DHAVE_LOCALTIME_R -DHAVE_VA_COPY -DVA_COPY=va_copy -DPIC -fPIC -DDEBUG -DDEBUG_root -DEDITLINE -ILinux_All_DBG.OBJ jslog2.c gcc -o Linux_All_DBG.OBJ/jslong.o -c -Wall -Wno-format -MMD -g3 -DXP_UNIX -DSVR4 -DSYSV -D_BSD_SOURCE -DPOSIX_SOURCE -DHAVE_LOCALTIME_R -DHAVE_VA_COPY -DVA_COPY=va_copy -DPIC -fPIC -DDEBUG -DDEBUG_root -DEDITLINE -ILinux_All_DBG.OBJ jslong.c gcc -o Linux_All_DBG.OBJ/jsmath.o -c -Wall -Wno-format -MMD -g3 -DXP_UNIX -DSVR4 -DSYSV -D_BSD_SOURCE -DPOSIX_SOURCE -DHAVE_LOCALTIME_R -DHAVE_VA_COPY -DVA_COPY=va_copy -DPIC -fPIC -DDEBUG -DDEBUG_root -DEDITLINE -ILinux_All_DBG.OBJ jsmath.c gcc -o Linux_All_DBG.OBJ/jsnum.o -c -Wall -Wno-format -MMD -g3 -DXP_UNIX -DSVR4 -DSYSV -D_BSD_SOURCE -DPOSIX_SOURCE -DHAVE_LOCALTIME_R -DHAVE_VA_COPY -DVA_COPY=va_copy -DPIC -fPIC -DDEBUG -DDEBUG_root -DEDITLINE -ILinux_All_DBG.OBJ jsnum.c gcc -o Linux_All_DBG.OBJ/jsobj.o -c -Wall -Wno-format -MMD -g3 -DXP_UNIX -DSVR4 -DSYSV -D_BSD_SOURCE -DPOSIX_SOURCE -DHAVE_LOCALTIME_R -DHAVE_VA_COPY -DVA_COPY=va_copy -DPIC -fPIC -DDEBUG -DDEBUG_root -DEDITLINE -ILinux_All_DBG.OBJ jsobj.c gcc -o Linux_All_DBG.OBJ/jsopcode.o -c -Wall -Wno-format -MMD -g3 -DXP_UNIX -DSVR4 -DSYSV -D_BSD_SOURCE -DPOSIX_SOURCE -DHAVE_LOCALTIME_R -DHAVE_VA_COPY -DVA_COPY=va_copy -DPIC -fPIC -DDEBUG -DDEBUG_root -DEDITLINE -ILinux_All_DBG.OBJ jsopcode.c gcc -o Linux_All_DBG.OBJ/jsparse.o -c -Wall -Wno-format -MMD -g3 -DXP_UNIX -DSVR4 -DSYSV -D_BSD_SOURCE -DPOSIX_SOURCE -DHAVE_LOCALTIME_R -DHAVE_VA_COPY -DVA_COPY=va_copy -DPIC -fPIC -DDEBUG -DDEBUG_root -DEDITLINE -ILinux_All_DBG.OBJ jsparse.c gcc -o Linux_All_DBG.OBJ/jsprf.o -c -Wall -Wno-format -MMD -g3 -DXP_UNIX -DSVR4 -DSYSV -D_BSD_SOURCE -DPOSIX_SOURCE -DHAVE_LOCALTIME_R -DHAVE_VA_COPY -DVA_COPY=va_copy -DPIC -fPIC -DDEBUG -DDEBUG_root -DEDITLINE -ILinux_All_DBG.OBJ jsprf.c gcc -o Linux_All_DBG.OBJ/jsregexp.o -c -Wall -Wno-format -MMD -g3 -DXP_UNIX -DSVR4 -DSYSV -D_BSD_SOURCE -DPOSIX_SOURCE -DHAVE_LOCALTIME_R -DHAVE_VA_COPY -DVA_COPY=va_copy -DPIC -fPIC -DDEBUG -DDEBUG_root -DEDITLINE -ILinux_All_DBG.OBJ jsregexp.c gcc -o Linux_All_DBG.OBJ/jskwgen.o -c -Wall -Wno-format -MMD -g3 -DXP_UNIX -DSVR4 -DSYSV -D_BSD_SOURCE -DPOSIX_SOURCE -DHAVE_LOCALTIME_R -DHAVE_VA_COPY -DVA_COPY=va_copy -DPIC -fPIC -DDEBUG -DDEBUG_root -DEDITLINE -ILinux_All_DBG.OBJ jskwgen.c gcc -o Linux_All_DBG.OBJ/jskwgen -Wall -Wno-format -MMD -g3 -DXP_UNIX -DSVR4 -DSYSV -D_BSD_SOURCE -DPOSIX_SOURCE -DHAVE_LOCALTIME_R -DHAVE_VA_COPY -DVA_COPY=va_copy -DPIC -fPIC -DDEBUG -DDEBUG_root -DEDITLINE -ILinux_All_DBG.OBJ -lm Linux_All_DBG.OBJ/jskwgen.o Linux_All_DBG.OBJ/jskwgen Linux_All_DBG.OBJ/jsautokw.h gcc -o Linux_All_DBG.OBJ/jsscan.o -c -Wall -Wno-format -MMD -g3 -DXP_UNIX -DSVR4 -DSYSV -D_BSD_SOURCE -DPOSIX_SOURCE -DHAVE_LOCALTIME_R -DHAVE_VA_COPY -DVA_COPY=va_copy -DPIC -fPIC -DDEBUG -DDEBUG_root -DEDITLINE -ILinux_All_DBG.OBJ jsscan.c gcc -o Linux_All_DBG.OBJ/jsscope.o -c -Wall -Wno-format -MMD -g3 -DXP_UNIX -DSVR4 -DSYSV -D_BSD_SOURCE -DPOSIX_SOURCE -DHAVE_LOCALTIME_R -DHAVE_VA_COPY -DVA_COPY=va_copy -DPIC -fPIC -DDEBUG -DDEBUG_root -DEDITLINE -ILinux_All_DBG.OBJ jsscope.c gcc -o Linux_All_DBG.OBJ/jsscript.o -c -Wall -Wno-format -MMD -g3 -DXP_UNIX -DSVR4 -DSYSV -D_BSD_SOURCE -DPOSIX_SOURCE -DHAVE_LOCALTIME_R -DHAVE_VA_COPY -DVA_COPY=va_copy -DPIC -fPIC -DDEBUG -DDEBUG_root -DEDITLINE -ILinux_All_DBG.OBJ jsscript.c gcc -o Linux_All_DBG.OBJ/jsstr.o -c -Wall -Wno-format -MMD -g3 -DXP_UNIX -DSVR4 -DSYSV -D_BSD_SOURCE -DPOSIX_SOURCE -DHAVE_LOCALTIME_R -DHAVE_VA_COPY -DVA_COPY=va_copy -DPIC -fPIC -DDEBUG -DDEBUG_root -DEDITLINE -ILinux_All_DBG.OBJ jsstr.c gcc -o Linux_All_DBG.OBJ/jsutil.o -c -Wall -Wno-format -MMD -g3 -DXP_UNIX -DSVR4 -DSYSV -D_BSD_SOURCE -DPOSIX_SOURCE -DHAVE_LOCALTIME_R -DHAVE_VA_COPY -DVA_COPY=va_copy -DPIC -fPIC -DDEBUG -DDEBUG_root -DEDITLINE -ILinux_All_DBG.OBJ jsutil.c gcc -o Linux_All_DBG.OBJ/jsxdrapi.o -c -Wall -Wno-format -MMD -g3 -DXP_UNIX -DSVR4 -DSYSV -D_BSD_SOURCE -DPOSIX_SOURCE -DHAVE_LOCALTIME_R -DHAVE_VA_COPY -DVA_COPY=va_copy -DPIC -fPIC -DDEBUG -DDEBUG_root -DEDITLINE -ILinux_All_DBG.OBJ jsxdrapi.c gcc -o Linux_All_DBG.OBJ/jsxml.o -c -Wall -Wno-format -MMD -g3 -DXP_UNIX -DSVR4 -DSYSV -D_BSD_SOURCE -DPOSIX_SOURCE -DHAVE_LOCALTIME_R -DHAVE_VA_COPY -DVA_COPY=va_copy -DPIC -fPIC -DDEBUG -DDEBUG_root -DEDITLINE -ILinux_All_DBG.OBJ jsxml.c gcc -o Linux_All_DBG.OBJ/prmjtime.o -c -Wall -Wno-format -MMD -g3 -DXP_UNIX -DSVR4 -DSYSV -D_BSD_SOURCE -DPOSIX_SOURCE -DHAVE_LOCALTIME_R -DHAVE_VA_COPY -DVA_COPY=va_copy -DPIC -fPIC -DDEBUG -DDEBUG_root -DEDITLINE -ILinux_All_DBG.OBJ prmjtime.c ar rv Linux_All_DBG.OBJ/libjs.a Linux_All_DBG.OBJ/jsapi.o Linux_All_DBG.OBJ/jsarena.o Linux_All_DBG.OBJ/jsarray.o Linux_All_DBG.OBJ/jsatom.o Linux_All_DBG.OBJ/jsbool.o Linux_All_DBG.OBJ/jscntxt.o Linux_All_DBG.OBJ/jsdate.o Linux_All_DBG.OBJ/jsdbgapi.o Linux_All_DBG.OBJ/jsdhash.o Linux_All_DBG.OBJ/jsdtoa.o Linux_All_DBG.OBJ/jsemit.o Linux_All_DBG.OBJ/jsexn.o Linux_All_DBG.OBJ/jsfun.o Linux_All_DBG.OBJ/jsgc.o Linux_All_DBG.OBJ/jshash.o Linux_All_DBG.OBJ/jsinterp.o Linux_All_DBG.OBJ/jsinvoke.o Linux_All_DBG.OBJ/jsiter.o Linux_All_DBG.OBJ/jslock.o Linux_All_DBG.OBJ/jslog2.o Linux_All_DBG.OBJ/jslong.o Linux_All_DBG.OBJ/jsmath.o Linux_All_DBG.OBJ/jsnum.o Linux_All_DBG.OBJ/jsobj.o Linux_All_DBG.OBJ/jsopcode.o Linux_All_DBG.OBJ/jsparse.o Linux_All_DBG.OBJ/jsprf.o Linux_All_DBG.OBJ/jsregexp.o Linux_All_DBG.OBJ/jsscan.o Linux_All_DBG.OBJ/jsscope.o Linux_All_DBG.OBJ/jsscript.o Linux_All_DBG.OBJ/jsstr.o Linux_All_DBG.OBJ/jsutil.o Linux_All_DBG.OBJ/jsxdrapi.o Linux_All_DBG.OBJ/jsxml.o Linux_All_DBG.OBJ/prmjtime.o ar: creating Linux_All_DBG.OBJ/libjs.a a - Linux_All_DBG.OBJ/jsapi.o a - Linux_All_DBG.OBJ/jsarena.o a - Linux_All_DBG.OBJ/jsarray.o a - Linux_All_DBG.OBJ/jsatom.o a - Linux_All_DBG.OBJ/jsbool.o a - Linux_All_DBG.OBJ/jscntxt.o a - Linux_All_DBG.OBJ/jsdate.o a - Linux_All_DBG.OBJ/jsdbgapi.o a - Linux_All_DBG.OBJ/jsdhash.o a - Linux_All_DBG.OBJ/jsdtoa.o a - Linux_All_DBG.OBJ/jsemit.o a - Linux_All_DBG.OBJ/jsexn.o a - Linux_All_DBG.OBJ/jsfun.o a - Linux_All_DBG.OBJ/jsgc.o a - Linux_All_DBG.OBJ/jshash.o a - Linux_All_DBG.OBJ/jsinterp.o a - Linux_All_DBG.OBJ/jsinvoke.o a - Linux_All_DBG.OBJ/jsiter.o a - Linux_All_DBG.OBJ/jslock.o a - Linux_All_DBG.OBJ/jslog2.o a - Linux_All_DBG.OBJ/jslong.o a - Linux_All_DBG.OBJ/jsmath.o a - Linux_All_DBG.OBJ/jsnum.o a - Linux_All_DBG.OBJ/jsobj.o a - Linux_All_DBG.OBJ/jsopcode.o a - Linux_All_DBG.OBJ/jsparse.o a - Linux_All_DBG.OBJ/jsprf.o a - Linux_All_DBG.OBJ/jsregexp.o a - Linux_All_DBG.OBJ/jsscan.o a - Linux_All_DBG.OBJ/jsscope.o a - Linux_All_DBG.OBJ/jsscript.o a - Linux_All_DBG.OBJ/jsstr.o a - Linux_All_DBG.OBJ/jsutil.o a - Linux_All_DBG.OBJ/jsxdrapi.o a - Linux_All_DBG.OBJ/jsxml.o a - Linux_All_DBG.OBJ/prmjtime.o echo Linux_All_DBG.OBJ/libjs.a Linux_All_DBG.OBJ/libjs.a ld -shared -o Linux_All_DBG.OBJ/libjs.so Linux_All_DBG.OBJ/jsapi.o Linux_All_DBG.OBJ/jsarena.o Linux_All_DBG.OBJ/jsarray.o Linux_All_DBG.OBJ/jsatom.o Linux_All_DBG.OBJ/jsbool.o Linux_All_DBG.OBJ/jscntxt.o Linux_All_DBG.OBJ/jsdate.o Linux_All_DBG.OBJ/jsdbgapi.o Linux_All_DBG.OBJ/jsdhash.o Linux_All_DBG.OBJ/jsdtoa.o Linux_All_DBG.OBJ/jsemit.o Linux_All_DBG.OBJ/jsexn.o Linux_All_DBG.OBJ/jsfun.o Linux_All_DBG.OBJ/jsgc.o Linux_All_DBG.OBJ/jshash.o Linux_All_DBG.OBJ/jsinterp.o Linux_All_DBG.OBJ/jsinvoke.o Linux_All_DBG.OBJ/jsiter.o Linux_All_DBG.OBJ/jslock.o Linux_All_DBG.OBJ/jslog2.o Linux_All_DBG.OBJ/jslong.o Linux_All_DBG.OBJ/jsmath.o Linux_All_DBG.OBJ/jsnum.o Linux_All_DBG.OBJ/jsobj.o Linux_All_DBG.OBJ/jsopcode.o Linux_All_DBG.OBJ/jsparse.o Linux_All_DBG.OBJ/jsprf.o Linux_All_DBG.OBJ/jsregexp.o Linux_All_DBG.OBJ/jsscan.o Linux_All_DBG.OBJ/jsscope.o Linux_All_DBG.OBJ/jsscript.o Linux_All_DBG.OBJ/jsstr.o Linux_All_DBG.OBJ/jsutil.o Linux_All_DBG.OBJ/jsxdrapi.o Linux_All_DBG.OBJ/jsxml.o Linux_All_DBG.OBJ/prmjtime.o -lm gcc -o Linux_All_DBG.OBJ/js.o -c -Wall -Wno-format -MMD -g3 -DXP_UNIX -DSVR4 -DSYSV -D_BSD_SOURCE -DPOSIX_SOURCE -DHAVE_LOCALTIME_R -DHAVE_VA_COPY -DVA_COPY=va_copy -DPIC -fPIC -DDEBUG -DDEBUG_root -DEDITLINE -ILinux_All_DBG.OBJ js.c gcc -o Linux_All_DBG.OBJ/js -Wall -Wno-format -MMD -g3 -DXP_UNIX -DSVR4 -DSYSV -D_BSD_SOURCE -DPOSIX_SOURCE -DHAVE_LOCALTIME_R -DHAVE_VA_COPY -DVA_COPY=va_copy -DPIC -fPIC -DDEBUG -DDEBUG_root -DEDITLINE -ILinux_All_DBG.OBJ Linux_All_DBG.OBJ/js.o Linux_All_DBG.OBJ/libjs.a -lm \ editline/Linux_All_DBG.OBJ/libedit.a make[1]: `Linux_All_DBG.OBJ/jsautocfg.h' is up to date. make[1]: `Linux_All_DBG.OBJ/jscpucfg' is up to date. make[1]: `Linux_All_DBG.OBJ/jscpucfg.o' is up to date. make[1]: Leaving directory `/usr/lib/ruby/gems/1.9.1/gems/johnson-2.0.0.pre1/vendor/spidermonkey' checking for jsautocfg.h in /usr/lib/ruby/gems/1.9.1/gems/johnson-2.0.0.pre1/vendor/spidermonkey/Linux_All_DBG.OBJ... yes checking for jsapi.h in /usr/lib/ruby/gems/1.9.1/gems/johnson-2.0.0.pre1/vendor/spidermonkey... yes creating Makefile make gcc -I. -I/usr/include/ruby-1.9.1/x86_64-linux -I/usr/include/ruby-1.9.1/ruby/backward -I/usr/include/ruby-1.9.1 -I. -I/usr/lib/ruby/gems/1.9.1/gems/johnson-2.0.0.pre1/vendor/spidermonkey/Linux_All_DBG.OBJ -I/usr/lib/ruby/gems/1.9.1/gems/johnson-2.0.0.pre1/vendor/spidermonkey -fPIC -march=x86-64 -mtune=generic -O2 -pipe -O2 -g -Wall -Wno-parentheses -fPIC -g -Wall -Wextra -Wcast-qual -Wwrite-strings -Wconversion -Wmissing-noreturn -Winline -DXP_UNIX -o context.o -c context.c In file included from /usr/include/ruby-1.9.1/ruby.h:32, from spidermonkey.h:7, from context.h:4, from context.c:1: /usr/include/ruby-1.9.1/ruby/ruby.h: In function ‘NUM2INT’: /usr/include/ruby-1.9.1/ruby/ruby.h:413: warning: conversion to ‘int’ from ‘long int’ may alter its value gcc -I. -I/usr/include/ruby-1.9.1/x86_64-linux -I/usr/include/ruby-1.9.1/ruby/backward -I/usr/include/ruby-1.9.1 -I. -I/usr/lib/ruby/gems/1.9.1/gems/johnson-2.0.0.pre1/vendor/spidermonkey/Linux_All_DBG.OBJ -I/usr/lib/ruby/gems/1.9.1/gems/johnson-2.0.0.pre1/vendor/spidermonkey -fPIC -march=x86-64 -mtune=generic -O2 -pipe -O2 -g -Wall -Wno-parentheses -fPIC -g -Wall -Wextra -Wcast-qual -Wwrite-strings -Wconversion -Wmissing-noreturn -Winline -DXP_UNIX -o idhash.o -c idhash.c In file included from /usr/include/ruby-1.9.1/ruby.h:32, from spidermonkey.h:7, from idhash.h:4, from idhash.c:1: /usr/include/ruby-1.9.1/ruby/ruby.h: In function ‘NUM2INT’: /usr/include/ruby-1.9.1/ruby/ruby.h:413: warning: conversion to ‘int’ from ‘long int’ may alter its value idhash.c: In function ‘key_hash’: idhash.c:5: warning: cast from pointer to integer of different size gcc -I. -I/usr/include/ruby-1.9.1/x86_64-linux -I/usr/include/ruby-1.9.1/ruby/backward -I/usr/include/ruby-1.9.1 -I. -I/usr/lib/ruby/gems/1.9.1/gems/johnson-2.0.0.pre1/vendor/spidermonkey/Linux_All_DBG.OBJ -I/usr/lib/ruby/gems/1.9.1/gems/johnson-2.0.0.pre1/vendor/spidermonkey -fPIC -march=x86-64 -mtune=generic -O2 -pipe -O2 -g -Wall -Wno-parentheses -fPIC -g -Wall -Wextra -Wcast-qual -Wwrite-strings -Wconversion -Wmissing-noreturn -Winline -DXP_UNIX -o spidermonkey.o -c spidermonkey.c In file included from /usr/include/ruby-1.9.1/ruby.h:32, from spidermonkey.h:7, from spidermonkey.c:1: /usr/include/ruby-1.9.1/ruby/ruby.h: In function ‘NUM2INT’: /usr/include/ruby-1.9.1/ruby/ruby.h:413: warning: conversion to ‘int’ from ‘long int’ may alter its value gcc -I. -I/usr/include/ruby-1.9.1/x86_64-linux -I/usr/include/ruby-1.9.1/ruby/backward -I/usr/include/ruby-1.9.1 -I. -I/usr/lib/ruby/gems/1.9.1/gems/johnson-2.0.0.pre1/vendor/spidermonkey/Linux_All_DBG.OBJ -I/usr/lib/ruby/gems/1.9.1/gems/johnson-2.0.0.pre1/vendor/spidermonkey -fPIC -march=x86-64 -mtune=generic -O2 -pipe -O2 -g -Wall -Wno-parentheses -fPIC -g -Wall -Wextra -Wcast-qual -Wwrite-strings -Wconversion -Wmissing-noreturn -Winline -DXP_UNIX -o conversions.o -c conversions.c In file included from /usr/include/ruby-1.9.1/ruby.h:32, from spidermonkey.h:7, from conversions.h:4, from conversions.c:1: /usr/include/ruby-1.9.1/ruby/ruby.h: In function ‘NUM2INT’: /usr/include/ruby-1.9.1/ruby/ruby.h:413: warning: conversion to ‘int’ from ‘long int’ may alter its value In file included from conversions.c:2: js_land_proxy.h:11:18: error: node.h: No such file or directory In file included from conversions.c:2: js_land_proxy.h: At top level: js_land_proxy.h:17: error: expected specifier-qualifier-list before ‘NODE’ conversions.c: In function ‘convert_symbol_to_js’: conversions.c:33: error: ‘ruby_errinfo’ undeclared (first use in this function) conversions.c:33: error: (Each undeclared identifier is reported only once conversions.c:33: error: for each function it appears in.) conversions.c:34: warning: initialization makes integer from pointer without a cast conversions.c:35: error: ‘struct RString’ has no member named ‘len’ conversions.c: In function ‘convert_regexp_to_js’: conversions.c:54: error: ‘ruby_errinfo’ undeclared (first use in this function) conversions.c:55: warning: initialization makes integer from pointer without a cast conversions.c:60: error: ‘struct RString’ has no member named ‘len’ conversions.c: In function ‘convert_to_js’: conversions.c:86: error: ‘T_BLKTAG’ undeclared (first use in this function) conversions.c:98: error: ‘T_VARMAP’ undeclared (first use in this function) conversions.c:116: error: ‘ruby_errinfo’ undeclared (first use in this function) conversions.c:116: warning: initialization makes integer from pointer without a cast conversions.c:118: error: ‘struct RString’ has no member named ‘len’ conversions.c: In function ‘convert_js_string_to_ruby’: conversions.c:192: warning: conversion to ‘long int’ from ‘size_t’ may change the sign of the result conversions.c: In function ‘convert_regexp_to_ruby’: conversions.c:204: error: ‘ruby_errinfo’ undeclared (first use in this function) conversions.c:204: warning: conversion to ‘VALUE’ from ‘JSBool’ may change the sign of the result conversions.c:204: warning: conversion to ‘VALUE’ from ‘JSBool’ may change the sign of the result conversions.c:204: warning: conversion to ‘VALUE’ from ‘JSBool’ may change the sign of the result conversions.c: In function ‘convert_to_ruby’: conversions.c:262: error: ‘ruby_errinfo’ undeclared (first use in this function) conversions.c:262: warning: conversion to ‘VALUE’ from ‘JSBool’ may change the sign of the result conversions.c:268: warning: conversion to ‘VALUE’ from ‘JSBool’ may change the sign of the result conversions.c:276: warning: conversion to ‘VALUE’ from ‘JSBool’ may change the sign of the result conversions.c:278: warning: conversion to ‘VALUE’ from ‘JSBool’ may change the sign of the result conversions.c:284: warning: conversion to ‘VALUE’ from ‘JSBool’ may change the sign of the result conversions.c:288: warning: conversion to ‘VALUE’ from ‘JSBool’ may change the sign of the result conversions.c: In function ‘report_ruby_error_in_js’: conversions.c:333: error: ‘ruby_errinfo’ undeclared (first use in this function) make: *** [conversions.o] Error 1 Gem files will remain installed in /usr/lib/ruby/gems/1.9.1/gems/johnson-2.0.0.pre1 for inspection. Results logged to /usr/lib/ruby/gems/1.9.1/gems/johnson-2.0.0.pre1/ext/spidermonkey/gem_make.out
I got the same problem. and I am waiting for an answer!!!!!
@hannyu no need to be aggressive. afaik, ruby1.9 support will be a priority after johnson2.0 final is out. The johnson internals are very complex (close interaction with the js interpreter), so it's not simply a matter of a few quick fixes like it is for most other libs.
@mynyml sorry for my tone. I just want to know if there are some solutions to fix it. Thank you very much!
I couldn't wait for Ruby 1.9 support, so I tried RVM (Ruby version manager) [1], works like a charm.
RVM installs different versions of Ruby but is for Unix based systems only, if you are on Windows, try Pik [2](not tested).
[1] http://rvm.beginrescueend.com/ [2] http://github.com/vertiginous/pik
sepastian, which version of ruby 1.9 did you get johnson to compile on?
Hey Sven, try 1.9.1 branch.
Same problem here. Does the developing for 1.9 support require C skills? If not, I can try to give a hand, I'm looking for a project to face with :)
Same problem with ruby 1.9.2 and Johnson 2.0.0.pre3 (running on ubuntu 10.04)
Same as @andyl. I can't wait to use Johnson, looks very impressive.
That's truly sad… =( I'd love support for 1.9, but I can't help with C code…
The 1.9.1 branch installed on my 1.9.2 rvm install. But I get this error when trying to use jslintrb (my current reason for having johnson):
johnson-2.0.0.pre3/lib/johnson/js/core.js:9 [JavaScript]: wrong argument type Method (expected Data) (TypeError)
Just chiming in that I'm still seeing this issue with Johnson v2.0.0pre3 on Ruby 1.9.2p180. Anything to report on 1.9 support? Looks like an awesome library, and I can't want to use it!
With ruby 1.9.2p290 Johnson v2.0.0pre3 still does not compile. Would be great if it would.
Super bummed out this doesn't build on ruby 1.9.2p180 (2011-02-18 revision 30909) [x86_64-darwin10.4.0]
Me too. Just tried to install a gem that depends on envjs gem (which depends on johnson) and am finding out that Ruby 1.9 is not supported.
Someone posted that "afaik, ruby1.9 support will be a priority after johnson2.0 final is out". That would be very encouraging, except that the last commit is over a year ago (February 16, 2010 -- April 23, 2010 for 1.9.1 branch).... Too bad. It's certainly a neat idea.
FWIW, this works fine in 1.9.2 so I moved over it: https://github.com/cowboyd/therubyracer
Are there any major obstacles left in porting Johnson to 1.9? I've been looking into this a bit and can evaluate code without problems; I see the same issue @matschaffer describes above when executing core.js which seems to be caused by js_Execute in tracemonkey returning an error, however, by skipping core.js execution I can evaluate a fairly complex JavaScript library in Ruby 1.9 – so I'm wondering if someone with better knowledge of Johnson could tell me what exactly is the purpose of the code in core.js? Any ideas on why it fails? Any pointers on what could be done to fix this?
Thanks!
Following up on this, the problem occurs when looking up methods on a JSLandProxy. For example:
> Johnson.evaluate('Ruby.Time')
=> Time
Johnson.evaluate('Ruby.Time.now()')
TypeError: wrong argument type Method (expected Data)
My guess was that the internal representation of methods has changed from Ruby 1.8 to 1.9 in a way that breaks an assumption in Johnson and managed to trace the problem to attribute_p
in js_land_proxy.cc: I'm pretty sure that the problem is that the method struct can't be cast to METHOD.
Does that make sense?
Meanwhile, I'll take a look at the Ruby source code to see if I can figure this one out.
Just to confirm my previous assumption: if I skip over the test (since we know that .now
is no instance variable) the proxy calls the method successfully and returns the current time.
After a cursory look at the Ruby sources I can confirm that the METHOD struct has changed considerably; I'm not sure, but a similar code may be something along the lines of:
METHOD* method;
TypedData_Get_Struct(rb_method, METHOD, &method_data_type, method);
if (method && method->me) {
const rb_method_definition_t* def = method->me->def;
if (def && def->type == VM_METHOD_TYPE_IVAR) {
return Qtrue;
}
}
With the necessary definitions updated in js_land_proxy.h (the definitions coming from Ruby method.h and proc.c).
Is there an easier way to do this? I looked at the C extension README but couldn't find any method to check if a method is an instance method reader.
I'm seeing this issue as well. Has anyone looked into what inukshuk saw in js_land_proxy?
Hey, sorry, it seems like I forgot to push my workaround. I haven't really found a satisfying solution yet (posted to ruby-talk but no one picked it up); I assumed I look at this when I find the time, but haven't yet.
In the meantime here is my fork of the 1.9.1 branch; on Ruby 1.9.2 (not 1.9.3 I think), you can clone it and run
rake compile
rake gem
Then you'll find the gem in the pkg
directory. With this, I can do stuff like:
001:0> Johnson.evaluate('Ruby.Time')
=> Time
002:0> Johnson.evaluate('Ruby.Time.now()')
=> 2012-03-16 11:28:58 0100
003:0> Johnson.evaluate('Ruby.Time.now')
=> #<Method: Time.now>
004:0> RUBY_VERSION
=> "1.9.2"
With that, I used to johnson on 1.9.2 with a fairly complex javascript codebase, but no guarantees it does what you need.
Update:
I should add that this is not a fix if you need to access attribute accessors like properties. For that we need to distinguish between regular methods and attr_* methods.
Johnson-2.0.0.pre0 fails to install on Ruby1.9. Though I imagine this is a well known limitation.