Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

trouble installing nokogiri / rails with rbenv truffleruby+graalvm-22.1.0 #2710

Closed
kalaracey opened this issue Aug 24, 2022 · 3 comments
Closed
Milestone

Comments

@kalaracey
Copy link

kalaracey commented Aug 24, 2022

Hello. Truffle Ruby looks really cool. I wanted to try running rails with it, but when I went to gem install rails, it failed while installing nokogiri.
I tried installing nokogiri separately, and it failed with the same error. Here are the steps I took, and the output I got:

$ rbenv install truffleruby+graalvm-22.1.0
$ mkdir rotr; echo truffleruby+graalvm-22.1.0 > rotr/.ruby-version; cd rotr
$ rbenv version
truffleruby+graalvm-22.1.0 (set by /Users/kal/Code/rotr/.ruby-version)
$ $(ruby -e 'puts RbConfig::CONFIG["CC"]') --version
clang version 12.0.1 (GraalVM.org llvmorg-12.0.1-4-g44c3fb5080-bgbcb1638df0 44c3fb5080e32b108fc4d05e8fbe255b6e2a8f51)
Target: x86_64-apple-darwin21.6.0
Thread model: posix
InstalledDir: /Users/kal/.rbenv/versions/truffleruby+graalvm-22.1.0/graalvm/Contents/Home/lib/llvm/bin
$ gem install -V nokogiri
#
# ... snip ...
#
"/Users/kal/.rbenv/versions/truffleruby+graalvm-22.1.0/graalvm/Contents/Home/languages/llvm/native/bin/graalvm-native-clang -o conftest -I/Users/kal/.rbenv/versions/truffleruby+graalvm-22.1.0/graalvm/Contents/Home/languages/ruby/lib/cext/include -I/Users/kal/.rbenv/versions/truffleruby+graalvm-22.1.0/graalvm/Contents/Home/languages/ruby/lib/cext/include/ruby/backward -I/Users/kal/.rbenv/versions/truffleruby+graalvm-22.1.0/graalvm/Contents/Home/languages/ruby/lib/cext/include -I. -I/Users/kal/.rbenv/versions/truffleruby+graalvm-22.1.0/graalvm/Contents/Home/languages/ruby/lib/gems/gems/nokogiri-1.13.8/ports/x86_64-darwin18/libxml2/2.9.14/include/libxml2 -I/Users/kal/.rbenv/versions/truffleruby+graalvm-22.1.0/graalvm/Contents/Home/languages/ruby/lib/gems/gems/nokogiri-1.13.8/ports/x86_64-darwin18/libxslt/1.1.35/include -I/Users/kal/.rbenv/versions/truffleruby+graalvm-22.1.0/graalvm/Contents/Home/languages/ruby/lib/gems/gems/nokogiri-1.13.8/ports/x86_64-darwin18/libxml2/2.9.14/include/libxml2  -D_DARWIN_C_SOURCE -DTRUFFLERUBY_ABI_VERSION=3.0.2.22.1.1  -I/usr/local/opt/[email protected]/include -DNOKOGIRI_PACKAGED_LIBRARIES -DNOKOGIRI_LIBXML2_PATCHES="\"0001-Remove-script-macro-support.patch 0002-Update-entities-to-remove-handling-of-ssi.patch 0003-libxml2.la-is-in-top_builddir.patch 0004-use-glibc-strlen.patch 0005-avoid-isnan-isinf.patch 0006-update-automake-files-for-arm64.patch 0008-htmlParseComment-handle-abruptly-closed-comments.patch 0009-allow-wildcard-namespaces.patch\"" -DNOKOGIRI_LIBXSLT_PATCHES="\"0001-update-automake-files-for-arm64.patch\"" -I/Users/kal/.rbenv/versions/truffleruby+graalvm-22.1.0/graalvm/Contents/Home/languages/ruby/lib/gems/gems/nokogiri-1.13.8/ext/nokogiri/ports/x86_64-darwin18/libgumbo/1.0.0-nokogiri/include   -Wimplicit-function-declaration -Wno-int-conversion -Wno-int-to-pointer-cast -Wno-incompatible-pointer-types -Wno-format-invalid-specifier -Wno-format-extra-args -ferror-limit=500 -std=c99 -Wno-declaration-after-statement -g -Winline -Wmissing-noreturn conftest.c  -L. -L/Users/kal/.rbenv/versions/truffleruby+graalvm-22.1.0/graalvm/Contents/Home/languages/ruby/lib/gems/gems/nokogiri-1.13.8/ports/x86_64-darwin18/libxml2/2.9.14/lib -Wl,-rpath,/Users/kal/.rbenv/versions/truffleruby+graalvm-22.1.0/graalvm/Contents/Home/languages/ruby/lib/gems/gems/nokogiri-1.13.8/ports/x86_64-darwin18/libxml2/2.9.14/lib -L/Users/kal/.rbenv/versions/truffleruby+graalvm-22.1.0/graalvm/Contents/Home/languages/ruby/lib/gems/gems/nokogiri-1.13.8/ports/x86_64-darwin18/libxslt/1.1.35/lib -Wl,-rpath,/Users/kal/.rbenv/versions/truffleruby+graalvm-22.1.0/graalvm/Contents/Home/languages/ruby/lib/gems/gems/nokogiri-1.13.8/ports/x86_64-darwin18/libxslt/1.1.35/lib -L/usr/local/Cellar/xz/5.2.5/lib -Wl,-rpath,/usr/local/Cellar/xz/5.2.5/lib -L/Users/kal/.rbenv/versions/truffleruby+graalvm-22.1.0/graalvm/Contents/Home/languages/ruby/lib/gems/gems/nokogiri-1.13.8/ext/nokogiri/ports/x86_64-darwin18/libgumbo/1.0.0-nokogiri/lib -Wl,-rpath,/Users/kal/.rbenv/versions/truffleruby+graalvm-22.1.0/graalvm/Contents/Home/languages/ruby/lib/gems/gems/nokogiri-1.13.8/ext/nokogiri/ports/x86_64-darwin18/libgumbo/1.0.0-nokogiri/lib  -L/usr/local/opt/[email protected]/lib    -lexslt -lxml2 -lxslt -lm -liconv -lpthread -llzma -lz -lxml2 /Users/kal/.rbenv/versions/truffleruby+graalvm-22.1.0/graalvm/Contents/Home/languages/ruby/lib/gems/gems/nokogiri-1.13.8/ext/nokogiri/ports/x86_64-darwin18/libgumbo/1.0.0-nokogiri/lib/libgumbo.a -lgraalvm-llvm -lexslt -lxml2 -lxslt -lm -liconv -lpthread -llzma -lz -lxml2 /Users/kal/.rbenv/versions/truffleruby+graalvm-22.1.0/graalvm/Contents/Home/languages/ruby/lib/gems/gems/nokogiri-1.13.8/ext/nokogiri/ports/x86_64-darwin18/libgumbo/1.0.0-nokogiri/lib/libgumbo.a   -L/Users/kal/.rbenv/versions/truffleruby+graalvm-22.1.0/graalvm/Contents/Home/languages/ruby/lib/cext -rpath /Users/kal/.rbenv/versions/truffleruby+graalvm-22.1.0/graalvm/Contents/Home/languages/ruby/lib/cext -ltruffleruby -rpath /Users/kal/.rbenv/versions/truffleruby+graalvm-22.1.0/graalvm/Contents/Home/languages/llvm/native/lib"
conftest.c:16:13: error: conflicting types for 'gumbo_parse_with_options'
extern void gumbo_parse_with_options();
            ^
/Users/kal/.rbenv/versions/truffleruby+graalvm-22.1.0/graalvm/Contents/Home/languages/ruby/lib/gems/gems/nokogiri-1.13.8/ext/nokogiri/ports/x86_64-darwin18/libgumbo/1.0.0-nokogiri/include/gumbo.h:870:14: note: previous declaration is here
GumboOutput* gumbo_parse_with_options (
             ^
conftest.c:17:40: error: too few arguments to function call, expected 3, have 0
int t(void) { gumbo_parse_with_options(); return 0; }
              ~~~~~~~~~~~~~~~~~~~~~~~~ ^
/Users/kal/.rbenv/versions/truffleruby+graalvm-22.1.0/graalvm/Contents/Home/languages/ruby/lib/gems/gems/nokogiri-1.13.8/ext/nokogiri/ports/x86_64-darwin18/libgumbo/1.0.0-nokogiri/include/gumbo.h:870:14: note: 'gumbo_parse_with_options' declared here
GumboOutput* gumbo_parse_with_options (
             ^
2 errors generated.
conftest.c:16:13: error: conflicting types for 'gumbo_parse_with_options'
extern void gumbo_parse_with_options();
            ^
/Users/kal/.rbenv/versions/truffleruby+graalvm-22.1.0/graalvm/Contents/Home/languages/ruby/lib/gems/gems/nokogiri-1.13.8/ext/nokogiri/ports/x86_64-darwin18/libgumbo/1.0.0-nokogiri/include/gumbo.h:870:14: note: previous declaration is here
GumboOutput* gumbo_parse_with_options (
             ^
conftest.c:17:40: error: too few arguments to function call, expected 3, have 0
int t(void) { gumbo_parse_with_options(); return 0; }
              ~~~~~~~~~~~~~~~~~~~~~~~~ ^
/Users/kal/.rbenv/versions/truffleruby+graalvm-22.1.0/graalvm/Contents/Home/languages/ruby/lib/gems/gems/nokogiri-1.13.8/ext/nokogiri/ports/x86_64-darwin18/libgumbo/1.0.0-nokogiri/include/gumbo.h:870:14: note: 'gumbo_parse_with_options' declared here
GumboOutput* gumbo_parse_with_options (
             ^
2 errors generated.
Process failed: #<Process::Status: pid 966 exit 1>
checked program was:
/* begin */
 1: #include "ruby.h"
 2:
 3: #include <gumbo.h>
 4:
 5: /*top*/
 6: extern int t(void);
 7: int main(int argc, char **argv)
 8: {
 9:   if (argc > 1000000) {
10:     int (* volatile tp)(void)=(int (*)(void))&t;
11:     printf("%d", (*tp)());
12:   }
13:
14:   return !!argv[argc];
15: }
16: extern void gumbo_parse_with_options();
17: int t(void) { gumbo_parse_with_options(); return 0; }
/* end */

--------------------

ERROR:  Error installing nokogiri:
        ERROR: Failed to build gem native extension.

    current directory: /Users/kal/.rbenv/versions/truffleruby+graalvm-22.1.0/graalvm/Contents/Home/languages/ruby/lib/gems/gems/nokogiri-1.13.8/ext/nokogiri
/Users/kal/.rbenv/versions/truffleruby+graalvm-22.1.0/graalvm/Contents/Home/languages/ruby/bin/ruby -I /Users/kal/.rbenv/versions/truffleruby+graalvm-22.1.0/graalvm/Contents/Home/languages/ruby/lib/mri -r ./siteconf20220823-89989-al3gxf.rb extconf.rb --disable-static
Building has failed. See above output for more information on the failure.
To see why this extension failed to compile, please check the mkmf.log which can be found here:

  /Users/kal/.rbenv/versions/truffleruby+graalvm-22.1.0/graalvm/Contents/Home/languages/ruby/lib/gems/extensions/x86_64-darwin/3.0.2.22.1.1/nokogiri-1.13.8/mkmf.log

extconf failed, exit code 1

Gem files will remain installed in /Users/kal/.rbenv/versions/truffleruby+graalvm-22.1.0/graalvm/Contents/Home/languages/ruby/lib/gems/gems/nokogiri-1.13.8 for inspection.
Results logged to /Users/kal/.rbenv/versions/truffleruby+graalvm-22.1.0/graalvm/Contents/Home/languages/ruby/lib/gems/extensions/x86_64-darwin/3.0.2.22.1.1/nokogiri-1.13.8/gem_make.out
  • Mac OS 12.5
  • rbenv 1.2.0

Full output of gem install: gem-install-nokogiri-log.txt (Edit: that actually may not be the full log, here it is: https://www.dropbox.com/s/2tn86u6cjdpux0d/gem-install-nokogiri-log.txt?dl=0 I was having trouble uploading it here.)

mkmf.log

@eregon
Copy link
Member

eregon commented Aug 24, 2022

The error seems:

have_func: checking for gumbo_parse_with_options() in gumbo.h... -------------------- no

"/Users/kal/.rbenv/versions/truffleruby+graalvm-22.1.0/graalvm/Contents/Home/languages/llvm/native/bin/graalvm-native-clang -o conftest -I/Users/kal/.rbenv/versions/truffleruby+graalvm-22.1.0/graalvm/Contents/Home/languages/ruby/lib/cext/include -I/Users/kal/.rbenv/versions/truffleruby+graalvm-22.1.0/graalvm/Contents/Home/languages/ruby/lib/cext/include/ruby/backward -I/Users/kal/.rbenv/versions/truffleruby+graalvm-22.1.0/graalvm/Contents/Home/languages/ruby/lib/cext/include -I. -I/Users/kal/.rbenv/versions/truffleruby+graalvm-22.1.0/graalvm/Contents/Home/languages/ruby/lib/gems/gems/nokogiri-1.13.8/ports/x86_64-darwin18/libxml2/2.9.14/include/libxml2 -I/Users/kal/.rbenv/versions/truffleruby+graalvm-22.1.0/graalvm/Contents/Home/languages/ruby/lib/gems/gems/nokogiri-1.13.8/ports/x86_64-darwin18/libxslt/1.1.35/include -I/Users/kal/.rbenv/versions/truffleruby+graalvm-22.1.0/graalvm/Contents/Home/languages/ruby/lib/gems/gems/nokogiri-1.13.8/ports/x86_64-darwin18/libxml2/2.9.14/include/libxml2  -D_DARWIN_C_SOURCE -DTRUFFLERUBY_ABI_VERSION=3.0.2.22.1.1  -I/usr/local/opt/[email protected]/include -DNOKOGIRI_PACKAGED_LIBRARIES -DNOKOGIRI_LIBXML2_PATCHES="\"0001-Remove-script-macro-support.patch 0002-Update-entities-to-remove-handling-of-ssi.patch 0003-libxml2.la-is-in-top_builddir.patch 0004-use-glibc-strlen.patch 0005-avoid-isnan-isinf.patch 0006-update-automake-files-for-arm64.patch 0008-htmlParseComment-handle-abruptly-closed-comments.patch 0009-allow-wildcard-namespaces.patch\"" -DNOKOGIRI_LIBXSLT_PATCHES="\"0001-update-automake-files-for-arm64.patch\"" -I/Users/kal/.rbenv/versions/truffleruby+graalvm-22.1.0/graalvm/Contents/Home/languages/ruby/lib/gems/gems/nokogiri-1.13.8/ext/nokogiri/ports/x86_64-darwin18/libgumbo/1.0.0-nokogiri/include   -Wimplicit-function-declaration -Wno-int-conversion -Wno-int-to-pointer-cast -Wno-incompatible-pointer-types -Wno-format-invalid-specifier -Wno-format-extra-args -ferror-limit=500 -std=c99 -Wno-declaration-after-statement -g -Winline -Wmissing-noreturn conftest.c  -L. -L/Users/kal/.rbenv/versions/truffleruby+graalvm-22.1.0/graalvm/Contents/Home/languages/ruby/lib/gems/gems/nokogiri-1.13.8/ports/x86_64-darwin18/libxml2/2.9.14/lib -Wl,-rpath,/Users/kal/.rbenv/versions/truffleruby+graalvm-22.1.0/graalvm/Contents/Home/languages/ruby/lib/gems/gems/nokogiri-1.13.8/ports/x86_64-darwin18/libxml2/2.9.14/lib -L/Users/kal/.rbenv/versions/truffleruby+graalvm-22.1.0/graalvm/Contents/Home/languages/ruby/lib/gems/gems/nokogiri-1.13.8/ports/x86_64-darwin18/libxslt/1.1.35/lib -Wl,-rpath,/Users/kal/.rbenv/versions/truffleruby+graalvm-22.1.0/graalvm/Contents/Home/languages/ruby/lib/gems/gems/nokogiri-1.13.8/ports/x86_64-darwin18/libxslt/1.1.35/lib -L/usr/local/Cellar/xz/5.2.5/lib -Wl,-rpath,/usr/local/Cellar/xz/5.2.5/lib -L/Users/kal/.rbenv/versions/truffleruby+graalvm-22.1.0/graalvm/Contents/Home/languages/ruby/lib/gems/gems/nokogiri-1.13.8/ext/nokogiri/ports/x86_64-darwin18/libgumbo/1.0.0-nokogiri/lib -Wl,-rpath,/Users/kal/.rbenv/versions/truffleruby+graalvm-22.1.0/graalvm/Contents/Home/languages/ruby/lib/gems/gems/nokogiri-1.13.8/ext/nokogiri/ports/x86_64-darwin18/libgumbo/1.0.0-nokogiri/lib  -L/usr/local/opt/[email protected]/lib    -lexslt -lxml2 -lxslt -lm -liconv -lpthread -llzma -lz -lxml2 /Users/kal/.rbenv/versions/truffleruby+graalvm-22.1.0/graalvm/Contents/Home/languages/ruby/lib/gems/gems/nokogiri-1.13.8/ext/nokogiri/ports/x86_64-darwin18/libgumbo/1.0.0-nokogiri/lib/libgumbo.a -lgraalvm-llvm -lexslt -lxml2 -lxslt -lm -liconv -lpthread -llzma -lz -lxml2 /Users/kal/.rbenv/versions/truffleruby+graalvm-22.1.0/graalvm/Contents/Home/languages/ruby/lib/gems/gems/nokogiri-1.13.8/ext/nokogiri/ports/x86_64-darwin18/libgumbo/1.0.0-nokogiri/lib/libgumbo.a   -L/Users/kal/.rbenv/versions/truffleruby+graalvm-22.1.0/graalvm/Contents/Home/languages/ruby/lib/cext -rpath /Users/kal/.rbenv/versions/truffleruby+graalvm-22.1.0/graalvm/Contents/Home/languages/ruby/lib/cext -ltruffleruby -rpath /Users/kal/.rbenv/versions/truffleruby+graalvm-22.1.0/graalvm/Contents/Home/languages/llvm/native/lib"
warning: Unsupported attribute form DW_FORM_loclistx in cloneAttribute. Dropping.
note: while processing /var/folders/23/82ghc8m51fx3c774b2v_hcxw0000gn/T/cc-514d95.o
warning: Unsupported attribute form DW_FORM_loclistx in cloneAttribute. Dropping.
note: while processing /var/folders/23/82ghc8m51fx3c774b2v_hcxw0000gn/T/cc-514d95.o

...

warning: Unsupported attribute form DW_FORM_loclistx in cloneAttribute. Dropping.
note: while processing /var/folders/23/82ghc8m51fx3c774b2v_hcxw0000gn/T/cc-0dc0a1.o
warning: Unsupported attribute form DW_FORM_loclistx in cloneAttribute. Dropping.
note: while processing /var/folders/23/82ghc8m51fx3c774b2v_hcxw0000gn/T/cc-0dc0a1.o
clang-12: error: unable to execute command: Segmentation fault: 11
clang-12: error: dsymutil command failed due to signal (use -v to see invocation)
Process failed: #<Process::Status: pid 22883 exit 254>
checked program was:
/* begin */
 1: #include "ruby.h"
 2: 
 3: #include <gumbo.h>
 4: 
 5: /*top*/
 6: extern int t(void);
 7: int main(int argc, char **argv)
 8: {
 9:   if (argc > 1000000) {
10:     int (* volatile tp)(void)=(int (*)(void))&t;
11:     printf("%d", (*tp)());
12:   }
13: 
14:   return !!argv[argc];
15: }
16: int t(void) { void ((*volatile p)()); p = (void ((*)()))gumbo_parse_with_options; return !p; }
/* end */

Could you try with the latest release, TruffleRuby 22.2.0?

Also it would be useful if you can try gem install nokogiri --platform=ruby on CRuby to see if that works or if there is something wrong with the system compiler.

@rschatz
Copy link
Member

rschatz commented Aug 24, 2022

I think we've seen an issue like this before, it's an incompatibility between the dsymutil version that's shipped with Xcode and to the LLVM version we ship. This was fixed in GraalVM 22.2 (oracle/graal@779d805).

If this is really the same issue, updating to version 22.2 should fix it.

@kalaracey
Copy link
Author

Upgrading TruffleRuby to 22.2.0 worked, thanks very much.

For reference, I had to update brew and upgrade ruby-build to get TruffleRuby 22.2.0. After doing that, and installing 22.2.0, the installation worked.

$ brew update && brew upgrade ruby-build
$ rbenv install truffleruby+graalvm-22.2.0
$ echo truffleruby+graalvm-22.2.0 >.ruby-version
$ gem install -V nokogiri
$ gem install -V rails

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

3 participants