Skip to content

Error installing mini_racer v0.19.0 on darwin platform #359

@afdev82

Description

@afdev82

I am trying to install mini_racer v0.19.0 on a MacBook Pro and I am getting the following error:

Gem::Ext::BuildError: ERROR: Failed to build gem native extension.

    current directory: /Users/antonio.facciolo/.rbenv/versions/3.4.4/lib/ruby/gems/3.4.0/gems/mini_racer-0.19.0/ext/mini_racer_extension
/Users/antonio.facciolo/.rbenv/versions/3.4.4/bin/ruby extconf.rb
checking for -lpthread... yes
checking for -lobjc... yes
checking for whether -Wl,--exclude-libs=ALL  is accepted as LDFLAGS... no
creating Makefile

current directory: /Users/antonio.facciolo/.rbenv/versions/3.4.4/lib/ruby/gems/3.4.0/gems/mini_racer-0.19.0/ext/mini_racer_extension
make DESTDIR\= sitearchdir\=./.gem.20250716-48170-u24r96 sitelibdir\=./.gem.20250716-48170-u24r96 clean

current directory: /Users/antonio.facciolo/.rbenv/versions/3.4.4/lib/ruby/gems/3.4.0/gems/mini_racer-0.19.0/ext/mini_racer_extension
make DESTDIR\= sitearchdir\=./.gem.20250716-48170-u24r96 sitelibdir\=./.gem.20250716-48170-u24r96
compiling mini_racer_extension.c
In file included from mini_racer_extension.c:13:
./serde.c:101:27: warning: implicit conversion loses integer precision: 'size_t' (aka 'unsigned long') to 'uint32_t' (aka 'unsigned int') [-Wshorten-64-to-32]
    n = next_power_of_two(n);
        ~~~~~~~~~~~~~~~~~ ^
./serde.c:111:14: warning: implicit conversion loses integer precision: 'size_t' (aka 'unsigned long') to 'uint32_t' (aka 'unsigned int') [-Wshorten-64-to-32]
    b->cap = n;
           ~ ^
./serde.c:398:29: warning: implicit conversion loses integer precision: 'uint64_t' (aka 'unsigned long long') to 'uint32_t' (aka 'unsigned int') [-Wshorten-64-to-32]
        des_object_ref(arg, u);
        ~~~~~~~~~~~~~~      ^
./serde.c:572:33: warning: implicit conversion loses integer precision: 'unsigned long long' to 'int' [-Wshorten-64-to-32]
        des_bigint(arg, *p, u, 1-2*t);
        ~~~~~~~~~~             ~^~~~
mini_racer_extension.c:610:23: warning: incompatible pointer types passing 'unsigned long[64]' to parameter of type 'const uint64_t *' (aka 'const unsigned long long *')
[-Wincompatible-pointer-types]
        ser_bigint(s, limbs, countof(limbs), sign);
                      ^~~~~
./serde.c:243:48: note: passing argument to parameter 'p' here
static void ser_bigint(Ser *s, const uint64_t *p, size_t n, int sign)
                                               ^
mini_racer_extension.c:535:32: warning: implicit conversion loses integer precision: 'size_t' (aka 'unsigned long') to 'uint32_t' (aka 'unsigned int')
[-Wshorten-64-to-32]
            ser_array_begin(s, n);
            ~~~~~~~~~~~~~~~    ^
mini_racer_extension.c:539:30: warning: implicit conversion loses integer precision: 'size_t' (aka 'unsigned long') to 'uint32_t' (aka 'unsigned int')
[-Wshorten-64-to-32]
            ser_array_end(s, n);
            ~~~~~~~~~~~~~    ^
mini_racer_extension.c:541:31: warning: implicit conversion loses integer precision: 'long' to 'uint32_t' (aka 'unsigned int') [-Wshorten-64-to-32]
            ser_object_ref(s, FIX2LONG(id));
            ~~~~~~~~~~~~~~    ^~~~~~~~~~~~
/Users/antonio.facciolo/.rbenv/versions/3.4.4/include/ruby-3.4.0/ruby/internal/arithmetic/long.h:46:22: note: expanded from macro 'FIX2LONG'
#define FIX2LONG     RB_FIX2LONG          /**< @old{RB_FIX2LONG} */
                     ^
/Users/antonio.facciolo/.rbenv/versions/3.4.4/include/ruby-3.4.0/ruby/internal/arithmetic/long.h:53:22: note: expanded from macro 'RB_FIX2LONG'
#define RB_FIX2LONG  rb_fix2long          /**< @alias{rb_fix2long} */
                     ^
mini_racer_extension.c:570:35: warning: implicit conversion loses integer precision: 'size_t' (aka 'unsigned long') to 'uint32_t' (aka 'unsigned int')
[-Wshorten-64-to-32]
                ser_object_end(s, n);
                ~~~~~~~~~~~~~~    ^
mini_racer_extension.c:575:31: warning: implicit conversion loses integer precision: 'long' to 'uint32_t' (aka 'unsigned int') [-Wshorten-64-to-32]
            ser_object_ref(s, FIX2LONG(id));
            ~~~~~~~~~~~~~~    ^~~~~~~~~~~~
/Users/antonio.facciolo/.rbenv/versions/3.4.4/include/ruby-3.4.0/ruby/internal/arithmetic/long.h:46:22: note: expanded from macro 'FIX2LONG'
#define FIX2LONG     RB_FIX2LONG          /**< @old{RB_FIX2LONG} */
                     ^
/Users/antonio.facciolo/.rbenv/versions/3.4.4/include/ruby-3.4.0/ruby/internal/arithmetic/long.h:53:22: note: expanded from macro 'RB_FIX2LONG'
#define RB_FIX2LONG  rb_fix2long          /**< @alias{rb_fix2long} */
                     ^
mini_racer_extension.c:690:31: warning: implicit conversion loses integer precision: 'int64_t' (aka 'long long') to 'int' [-Wshorten-64-to-32]
    deadline = deadline_ms(c->timeout);
               ~~~~~~~~~~~ ~~~^~~~~~~
mini_racer_extension.c:771:43: warning: implicit conversion loses integer precision: 'int64_t' (aka 'long long') to 'int' [-Wshorten-64-to-32]
                deadline = deadline_ms(c->idle_gc);
                           ~~~~~~~~~~~ ~~~^~~~~~~
12 warnings generated.
compiling mini_racer_v8.cc
clang: warning: argument unused during compilation: '-rdynamic' [-Wunused-command-line-argument]
In file included from mini_racer_v8.cc:1:
In file included from /Users/antonio.facciolo/.rbenv/versions/3.4.4/lib/ruby/gems/3.4.0/gems/libv8-node-24.1.0.0-x86_64-darwin/vendor/v8/include/v8.h:24:
In file included from /Users/antonio.facciolo/.rbenv/versions/3.4.4/lib/ruby/gems/3.4.0/gems/libv8-node-24.1.0.0-x86_64-darwin/vendor/v8/include/v8-array-buffer.h:13:
/Users/antonio.facciolo/.rbenv/versions/3.4.4/lib/ruby/gems/3.4.0/gems/libv8-node-24.1.0.0-x86_64-darwin/vendor/v8/include/v8-memory-span.h:45:36: error: no member named
'enable_view' in namespace 'std::ranges'
inline constexpr bool std::ranges::enable_view<v8::MemorySpan<T>> = true;
                      ~~~~~~~~~~~~~^
/Users/antonio.facciolo/.rbenv/versions/3.4.4/lib/ruby/gems/3.4.0/gems/libv8-node-24.1.0.0-x86_64-darwin/vendor/v8/include/v8-memory-span.h:45:47: error: expected ';' at
end of declaration
inline constexpr bool std::ranges::enable_view<v8::MemorySpan<T>> = true;
                                              ^
                                              ;
/Users/antonio.facciolo/.rbenv/versions/3.4.4/lib/ruby/gems/3.4.0/gems/libv8-node-24.1.0.0-x86_64-darwin/vendor/v8/include/v8-memory-span.h:45:47: error: expected
unqualified-id
In file included from mini_racer_v8.cc:1:
In file included from /Users/antonio.facciolo/.rbenv/versions/3.4.4/lib/ruby/gems/3.4.0/gems/libv8-node-24.1.0.0-x86_64-darwin/vendor/v8/include/v8.h:24:
In file included from /Users/antonio.facciolo/.rbenv/versions/3.4.4/lib/ruby/gems/3.4.0/gems/libv8-node-24.1.0.0-x86_64-darwin/vendor/v8/include/v8-array-buffer.h:15:
In file included from /Users/antonio.facciolo/.rbenv/versions/3.4.4/lib/ruby/gems/3.4.0/gems/libv8-node-24.1.0.0-x86_64-darwin/vendor/v8/include/v8-platform.h:14:
In file included from /Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/string:532:
In file included from /Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/string_view:191:
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/__ranges/enable_view.h:32:23: error: redefinition of 'enable_view'
inline constexpr bool enable_view = derived_from<_Tp, view_base>;
                      ^
/Users/antonio.facciolo/.rbenv/versions/3.4.4/lib/ruby/gems/3.4.0/gems/libv8-node-24.1.0.0-x86_64-darwin/vendor/v8/include/v8-memory-span.h:45:36: note: previous
definition is here
inline constexpr bool std::ranges::enable_view<v8::MemorySpan<T>> = true;
                                   ^
4 errors generated.
make: *** [mini_racer_v8.o] Error 1

make failed, exit code 2

Gem files will remain installed in /Users/antonio.facciolo/.rbenv/versions/3.4.4/lib/ruby/gems/3.4.0/gems/mini_racer-0.19.0 for inspection.
Results logged to /Users/antonio.facciolo/.rbenv/versions/3.4.4/lib/ruby/gems/3.4.0/extensions/x86_64-darwin-21/3.4.0/mini_racer-0.19.0/gem_make.out

  /Users/antonio.facciolo/.rbenv/versions/3.4.4/lib/ruby/3.4.0/rubygems/ext/builder.rb:126:in 'Gem::Ext::Builder.run'
  /Users/antonio.facciolo/.rbenv/versions/3.4.4/lib/ruby/3.4.0/rubygems/ext/builder.rb:52:in 'block in Gem::Ext::Builder.make'
  /Users/antonio.facciolo/.rbenv/versions/3.4.4/lib/ruby/3.4.0/rubygems/ext/builder.rb:44:in 'Array#each'
  /Users/antonio.facciolo/.rbenv/versions/3.4.4/lib/ruby/3.4.0/rubygems/ext/builder.rb:44:in 'Gem::Ext::Builder.make'
  /Users/antonio.facciolo/.rbenv/versions/3.4.4/lib/ruby/3.4.0/rubygems/ext/ext_conf_builder.rb:44:in 'Gem::Ext::ExtConfBuilder.build'
  /Users/antonio.facciolo/.rbenv/versions/3.4.4/lib/ruby/3.4.0/rubygems/ext/builder.rb:195:in 'Gem::Ext::Builder#build_extension'
  /Users/antonio.facciolo/.rbenv/versions/3.4.4/lib/ruby/3.4.0/rubygems/ext/builder.rb:229:in 'block in Gem::Ext::Builder#build_extensions'
  /Users/antonio.facciolo/.rbenv/versions/3.4.4/lib/ruby/3.4.0/rubygems/ext/builder.rb:226:in 'Array#each'
  /Users/antonio.facciolo/.rbenv/versions/3.4.4/lib/ruby/3.4.0/rubygems/ext/builder.rb:226:in 'Gem::Ext::Builder#build_extensions'
  /Users/antonio.facciolo/.rbenv/versions/3.4.4/lib/ruby/3.4.0/rubygems/installer.rb:844:in 'Gem::Installer#build_extensions'
/Users/antonio.facciolo/.rbenv/versions/3.4.4/lib/ruby/gems/3.4.0/gems/bundler-2.6.9/lib/bundler/rubygems_gem_installer.rb:111:in
'Bundler::RubyGemsGemInstaller#build_extensions'
/Users/antonio.facciolo/.rbenv/versions/3.4.4/lib/ruby/gems/3.4.0/gems/bundler-2.6.9/lib/bundler/rubygems_gem_installer.rb:30:in
'Bundler::RubyGemsGemInstaller#install'
  /Users/antonio.facciolo/.rbenv/versions/3.4.4/lib/ruby/gems/3.4.0/gems/bundler-2.6.9/lib/bundler/source/rubygems.rb:220:in 'Bundler::Source::Rubygems#install'
  /Users/antonio.facciolo/.rbenv/versions/3.4.4/lib/ruby/gems/3.4.0/gems/bundler-2.6.9/lib/bundler/installer/gem_installer.rb:55:in 'Bundler::GemInstaller#install'
/Users/antonio.facciolo/.rbenv/versions/3.4.4/lib/ruby/gems/3.4.0/gems/bundler-2.6.9/lib/bundler/installer/gem_installer.rb:17:in
'Bundler::GemInstaller#install_from_spec'
/Users/antonio.facciolo/.rbenv/versions/3.4.4/lib/ruby/gems/3.4.0/gems/bundler-2.6.9/lib/bundler/installer/parallel_installer.rb:133:in
'Bundler::ParallelInstaller#do_install'
/Users/antonio.facciolo/.rbenv/versions/3.4.4/lib/ruby/gems/3.4.0/gems/bundler-2.6.9/lib/bundler/installer/parallel_installer.rb:124:in 'block in
Bundler::ParallelInstaller#worker_pool'
  /Users/antonio.facciolo/.rbenv/versions/3.4.4/lib/ruby/gems/3.4.0/gems/bundler-2.6.9/lib/bundler/worker.rb:62:in 'Bundler::Worker#apply_func'
  /Users/antonio.facciolo/.rbenv/versions/3.4.4/lib/ruby/gems/3.4.0/gems/bundler-2.6.9/lib/bundler/worker.rb:57:in 'block in Bundler::Worker#process_queue'
  <internal:kernel>:168:in 'Kernel#loop'
  /Users/antonio.facciolo/.rbenv/versions/3.4.4/lib/ruby/gems/3.4.0/gems/bundler-2.6.9/lib/bundler/worker.rb:54:in 'Bundler::Worker#process_queue'
  /Users/antonio.facciolo/.rbenv/versions/3.4.4/lib/ruby/gems/3.4.0/gems/bundler-2.6.9/lib/bundler/worker.rb:90:in 'block (2 levels) in Bundler::Worker#create_threads'

An error occurred while installing mini_racer (0.19.0), and Bundler cannot continue.

In Gemfile:
  mini_racer

MacOSX 12.7.6
Darwin 21.6.0
Ruby 3.4.4 (also tried with 3.4.5)
Bundler 2.6.9 (also tried with 2.7.0)
Rubygems v3.6.7

I have already asked ChatGPT:

This line shows the root issue:

error: no member named 'enable_view' in namespace 'std::ranges'

This means:

The C++ headers shipped with your system (macOS Command Line Tools) already define enable_view in std::ranges.

But the libv8-node vendored by mini_racer tries to define it again, which leads to a conflict.

This is due to:

Newer versions of the macOS Clang toolchain already having full support for C++20 ranges.

But libv8-node (vendored V8 engine) assuming an older compiler.

The suggested solutions were to downgrade ruby (I don't want to), use precompiled libv8-node and patch libv8-node.
I have tried to use a precompiled libv8-node with the following command

gem install libv8-node -v '24.1.0.0' --platform ruby

but the installation failed as well with the same error (because in fact that's the problem I think). It tried to compile it anyway.

Mini_racer v0.18.1 was working fine.
It's not a big deal for me, I will stay with the previous version for the moment.
If someone could help to find out what's happening or I could solve the problem, many thanks in advance.

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions