Bug #21271
openRuby build failure due to invalid probe specifier for dtrace
Description
I've noticed that building the master branch of Ruby fails on my MacBook with the following error about dtrace and probes.h:
% make
BASERUBY = /Users/nekketsuuu/.rbenv/shims/ruby --disable=gems
CC = clang
LD = ld
LDSHARED = clang -dynamiclib
CFLAGS = -isystem/opt/homebrew/include -isystem/opt/homebrew/include -fstack-protector-strong -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=2 -fdeclspec -O3 -fno-fast-math -ggdb3 -Wall -Wextra -Wextra-tokens -Wdeprecated-declarations -Wdivision-by-zero -Wdiv-by-zero -Wimplicit-function-declaration -Wimplicit-int -Wpointer-arith -Wshorten-64-to-32 -Wwrite-strings -Wold-style-definition -Wmissing-noreturn -Wno-cast-function-type -Wno-constant-logical-operand -Wno-long-long -Wno-missing-field-initializers -Wno-overlength-strings -Wno-parentheses-equality -Wno-self-assign -Wno-tautological-compare -Wno-unused-parameter -Wno-unused-value -Wunused-variable -Wmisleading-indentation -Wundef -pipe -arch arm64
XCFLAGS = -fno-strict-overflow -fvisibility=hidden -fexcess-precision=standard -DRUBY_EXPORT -fPIE -I. -I.ext/include/arm64-darwin24 -I../include -I.. -I../prism -I../enc/unicode/15.0.0 -Dmodular_gc_dir=
CPPFLAGS = -I/opt/homebrew/opt/openssl/include -I/opt/homebrew/opt/mysql-client@8.4/include -I/opt/homebrew/opt/libffi/include -isystem/opt/homebrew/include -I/opt/homebrew/opt/openssl/include -I/opt/homebrew/opt/mysql-client@8.4/include -I/opt/homebrew/opt/libffi/include -isystem/opt/homebrew/include -D_XOPEN_SOURCE -D_DARWIN_C_SOURCE -D_DARWIN_UNLIMITED_SELECT -D_REENTRANT
DLDFLAGS = -L/opt/homebrew/opt/openssl/lib -L/opt/homebrew/opt/mysql-client@8.4/lib -L/opt/homebrew/opt/libffi/lib -L/opt/homebrew/lib -L/opt/homebrew/opt/openssl/lib -L/opt/homebrew/opt/mysql-client@8.4/lib -L/opt/homebrew/opt/libffi/lib -L/opt/homebrew/lib -Wl,-undefined,dynamic_lookup -fstack-protector-strong -Wl,-pie -framework CoreFoundation -arch arm64
SOLIBS = -lgmp -ldl -lobjc -lpthread
LANG = ja_JP.UTF-8
LC_ALL =
LC_CTYPE =
MFLAGS =
RUSTC = rustc
YJIT_RUSTC_ARGS = --crate-name=yjit --crate-type=staticlib --edition=2021 -g -C lto=thin -C opt-level=3 -C overflow-checks=on '--out-dir=/Users/nekketsuuu/dev/src/github.com/ruby/ruby/build/yjit/target/release/' ../yjit/src/lib.rs
Apple clang version 16.0.0 (clang-1600.0.26.3)
Target: arm64-apple-darwin24.4.0
Thread model: posix
InstalledDir: /Applications/Xcode_16.0.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin
compiling ../main.c
compiling ../dmydln.c
generating id.h
id.h updated
generating miniprelude.c
miniprelude.c updated
compiling ../miniinit.c
making ../array.rbinc
/Users/nekketsuuu/.rbenv/shims/ruby --disable=gems ../tool/gen_dummy_probes.rb ../probes.d > probes.dmyh
translating probes ../probes.d
dtrace: invalid probe specifier system/opt/homebrew/include: syntax error near end of input
make: *** [probes.h] Error 1
With running git bisect
, I found that the build started failing after the commit 060ae17c806f0ba955b1c5d825b890b6de6c47e3 https://github.com/ruby/ruby/commit/060ae17c806f0ba955b1c5d825b890b6de6c47e3 (between Ruby 3.4.3 d0b7e5b6a04bde21ca483d20a1546b28b401c2d4 and the HEAD 7e2ba5a91bcdc31e14502f797a6184e3f4d41747).
I'm not sure if this is a problem of my local configurations or a build script. Here is a summary of my configurations:
Configuration summary for ruby version 3.5.0
* Installation prefix: /Users/nekketsuuu/.rbenv/versions/master
* exec prefix: ${prefix}
* arch: arm64-darwin24
* site arch: ${arch}
* RUBY_BASE_NAME: ruby
* ruby lib prefix: ${libdir}/${RUBY_BASE_NAME}
* site libraries path: ${rubylibprefix}/${sitearch}
* vendor path: ${rubylibprefix}/vendor_ruby
* target OS: darwin24
* compiler: clang
* with thread: pthread
* with coroutine: arm64
* with modular GC: no
* enable shared libs: no
* dynamic library ext: bundle
* CFLAGS: ${hardenflags} -fdeclspec ${optflags} \
${debugflags} ${warnflags}
* LDFLAGS: -L. -L/opt/homebrew/opt/openssl/lib \
-L/opt/homebrew/opt/mysql-client@8.4/lib \
-L/opt/homebrew/opt/libffi/lib \
-L/opt/homebrew/lib \
-L/opt/homebrew/opt/openssl/lib \
-L/opt/homebrew/opt/mysql-client@8.4/lib \
-L/opt/homebrew/opt/libffi/lib \
-L/opt/homebrew/lib -fstack-protector-strong
* DLDFLAGS: -L/opt/homebrew/opt/openssl/lib \
-L/opt/homebrew/opt/mysql-client@8.4/lib \
-L/opt/homebrew/opt/libffi/lib \
-L/opt/homebrew/lib \
-L/opt/homebrew/opt/openssl/lib \
-L/opt/homebrew/opt/mysql-client@8.4/lib \
-L/opt/homebrew/opt/libffi/lib \
-L/opt/homebrew/lib -Wl,-undefined,dynamic_lookup
* optflags: -O3 -fno-fast-math
* debugflags: -ggdb3
* warnflags: -Wall -Wextra -Wextra-tokens \
-Wdeprecated-declarations -Wdivision-by-zero \
-Wdiv-by-zero -Wimplicit-function-declaration \
-Wimplicit-int -Wpointer-arith -Wshorten-64-to-32 \
-Wwrite-strings -Wold-style-definition \
-Wmissing-noreturn -Wno-cast-function-type \
-Wno-constant-logical-operand -Wno-long-long \
-Wno-missing-field-initializers \
-Wno-overlength-strings -Wno-parentheses-equality \
-Wno-self-assign -Wno-tautological-compare \
-Wno-unused-parameter -Wno-unused-value \
-Wunused-variable -Wmisleading-indentation -Wundef
* hardenflags: -fstack-protector-strong -U_FORTIFY_SOURCE \
-D_FORTIFY_SOURCE=2
* strip command: strip -A -n
* install doc: rdoc
* YJIT support: yes
* RJIT support: yes
* man page type: doc
* BASERUBY -v: ruby 3.4.1 (2024-12-25 revision 48d4efcb85) \
+PRISM [arm64-darwin24]
and here is a full command logs by make Q=
:
translating probes ../probes.d
dtrace -xnolibs -o probes.h.tmp -h -C -I. -I.ext/include/arm64-darwin24 -I../include -I.. -I../prism -I../enc/unicode/15.0.0 -I/opt/homebrew/opt/openssl/include -I/opt/homebrew/opt/mysql-client@8.4/include -I/opt/homebrew/opt/libffi/include -isystem/opt/homebrew/include -I/opt/homebrew/opt/openssl/include -I/opt/homebrew/opt/mysql-client@8.4/include -I/opt/homebrew/opt/libffi/include -isystem/opt/homebrew/include -D_XOPEN_SOURCE -D_DARWIN_C_SOURCE -D_DARWIN_UNLIMITED_SELECT -D_REENTRANT -s ../probes.d
dtrace: invalid probe specifier system/opt/homebrew/include: syntax error near end of input
make: *** [probes.h] Error 1
It appears that CPPFLAGS contains -isystem
flag, and dtrace might handle it as -i
flag.
This is my first time submitting a bug issue here. Feel free to correct me if there are any mistakes. Also, let me know if more information is needed.
No data to display