Actions
Bug #12379
closedmkmf.rb `pkg-config --exists`と`pkg-config --libs`の呼び出し方法が異なり期待した結果にならない(OS X)
Status:
Closed
Assignee:
-
Target version:
-
ruby -v:
ruby 2.4.0dev (2016-05-14) [x86_64-darwin15]
Description
OS X 10.11.4上で
- rubyが/opt/localにインストールされている
- /opt/local/lib/libiconv.dylibがある
とき、gem ffiのインストールに失敗します。
% gem2.4 install --user-install ffi
:
Building native extensions. This could take a while...
ERROR: Error installing ffi:
ERROR: Failed to build gem native extension.
current directory: /Volumes/CHome/kimuraw/.gem/ruby/2.4.0/gems/ffi-1.9.10/ext/ffi_c
/opt/local/bin/ruby2.4 -r ./siteconf20160514-49182-10gdli4.rb extconf.rb
*** extconf.rb failed ***
Could not create Makefile due to some reason, probably lack of necessary
libraries and/or headers. Check the mkmf.log file for more details. You may
need configuration options.
:
extconf failed, exit code 1
mkmf.logには
| pkg-config --libs libffi
=> "dyld: Symbol not found: _iconv\n"
=> " Referenced from: /usr/lib/libcups.2.dylib\n"
=> " Expected in: /opt/local/lib/libiconv.2.dylib\n"
=> " in /usr/lib/libcups.2.dylib\n"
のようなエラーが記録されています。
調べてみたところ、mkmf.rbのpkg_config()で
- pkg-config --existsはsystem()で環境変数の追加なしで呼び出し
- pkg-config --libs等はxpopen()経由で環境変数を追加して呼び出し
- この場合は
DYLD_LIBRARY_PATH=.|/opt/local
が指定されている。 - pkg-configは間接的に/usr/lib/libiconvにリンクしているが、環境変数により/opt/localを優先しシンボルの解決に失敗する。
- この場合は
- 上述の結果としてpkg-config --existsは成功するが、--libsや--cflagsはエラーになってしまう。
となっているようです。
少なくともpkg-configコマンドの呼び出し時のDYLD_LIBRARY_PATHの有無について
mkmf.rb内で統一すべきではないかと思います。
常に環境変数を渡すようにしたとしても、pkg-config以外の方法でlibffiを探すようになるので
extconf.rbは正常に実行できるようになります。
trunk(r54997)と2.3.1で起きることを確認しました。
2.2以前はどちらも環境変数なしでpkg-configを呼び出しているため、今回の問題は起きません。
エラーになったときのmkmf.logを添付します。
Files
Updated by nobu (Nobuyoshi Nakada) over 8 years ago
- Status changed from Open to Closed
Applied in changeset r54999.
lib/mkmf.rb: use xsystem to pkg-config --exists
- lib/mkmf.rb (pkg_config): use xsystem consistently to set up
library path environment variable as well as latter pkg-config
calls. [ruby-dev:49619] [Bug #12379]
Updated by nagachika (Tomoyuki Chikanaga) over 8 years ago
- Backport changed from 2.1: DONTNEED, 2.2: DONTNEED, 2.3: REQUIRED to 2.1: DONTNEED, 2.2: DONTNEED, 2.3: DONE
ruby_2_3 r55001 merged revision(s) 54999.
Actions
Like0
Like0Like0