2022-07-26 Rubyビルド中にtest/v3ext.cでエラー / Semgrepによるリファクタ
Rubyビルド中にtest/v3ext.cでエラー
github actions にて Ruby ビルド中に下記のようなエラーが出ていた。
Downloading openssl-1.1.1q.tar.gz...
-> https://dqw8nmjcqpjn7.cloudfront.net/d7939ce614029cdff0b6c20f0e2e5703158a489a72b2507b8bd51bf8c8fd10ca
Installing openssl-1.1.1q...
BUILD FAILED (macOS 12.4 using ruby-build 20[22](https://github.com/toshimaru/dotfiles/runs/7521141312?check_suite_focus=true#step:3:23)0713)
Inspect or clean up the working tree at /var/folders/[24](https://github.com/toshimaru/dotfiles/runs/7521141312?check_suite_focus=true#step:3:25)/8k48jl6d249_n_qfxwsl6xvm0000gn/T/ruby-build.202207[26](https://github.com/toshimaru/dotfiles/runs/7521141312?check_suite_focus=true#step:3:27)133228.7919.DBj3Do
Results logged to /var/folders/24/8k48jl6d249_n_qfxwsl6xvm0000gn/T/ruby-build.20220726133228.7919.log
Last 10 log lines:
clang -Iinclude -arch x86_64 -O3 -Wall -D_REENTRANT -DZLIB -DZLIB_SHARED -DNDEBUG -I/Users/runner/.rbenv/versions/2.7.6/include -MMD -MF test/v3ext.d.tmp -MT test/v3ext.o -c -o test/v3ext.o test/v3ext.c
clang -Iinclude -arch x86_64 -O3 -Wall -D_REENTRANT -DZLIB -DZLIB_SHARED -DNDEBUG -I/Users/runner/.rbenv/versions/2.7.6/include -MMD -MF test/v3nametest.d.tmp -MT test/v3nametest.o -c -o test/v3nametest.o test/v3nametest.c
test/v3ext.c:201:24: error: implicitly declaring library function 'memcmp' with type 'int (const void *, const void *, unsigned long)' [-Werror,-Wimplicit-function-declaration]
if (!TEST_true(memcmp(ip1->data, ip2->data, ip1->length) <= 0))
^
test/v3ext.c:201:24: note: include the header <string.h> or explicitly provide a declaration for 'memcmp'
1 error generated.
make[1]: *** [test/v3ext.o] Error 1
make[1]: *** Waiting for unfinished jobs....
make: *** [all] Error 2
Error: Process completed with exit code 1.
エラー内容だけ抜き出すとこれ。
test/v3ext.c:201:24: note: include the header <string.h> or explicitly provide a declaration for 'memcmp'
本問題は既に rbenv 側で報告されている。
OpenSSL 1.1.1q failing to build · Discussion #2009 · rbenv/ruby-build
OPENSSL_CFLAGS
による解決方法が定時されているが、既に最新版の ruby-build を取得すれば直る。
Semgrepによるリファクタ
Semgrepは、正規表現では難しくASTツールでは面倒なチェックや変換がある程度簡単に書けるのが特徴です。
Semgrepを使った構文木ベースの検索と置換でコードのリファクタリングをする | Web Scratch
何か一括置換するときとか、大リファくリングするときとかに使えそう。