Issue #12379 has been reported by Wataru Kimura.

----------------------------------------
Bug #12379: mkmf.rb `pkg-config --exists`と`pkg-config --libs`の呼び出し方法が異なり期待した結果にならない(OS X)
https://bugs.ruby-lang.org/issues/12379

* Author: Wataru Kimura
* Status: Open
* Priority: Normal
* Assignee: 
* ruby -v: ruby 2.4.0dev (2016-05-14) [x86_64-darwin15]
* Backport: 2.1: DONTNEED, 2.2: DONTNEED, 2.3: REQUIRED
----------------------------------------
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--------------------------------
mkmf.log (2.07 KB)


-- 
https://bugs.ruby-lang.org/