[ruby-trunk - Bug #8379][Open] json dependency problem

Issue #8379 has been reported by akr (Akira T.).


Bug #8379: json dependency problem
https://bugs.ruby-lang.org/issues/8379

Author: akr (Akira T.)
Status: Open
Priority: Normal
Assignee:
Category:
Target version:
ruby -v: ruby 2.1.0dev (2013-05-07 trunk 40599) [i686-linux]
Backport: 1.9.3: UNKNOWN, 2.0.0: UNKNOWN

json の Makefile の依存関係ですが、generator.o と parser.o の依存先の
ヘッダファイルが足りないようです。

過不足を調べてくれるスクリプト (update-deps) によれば、以下が足りないようです。

ext/json/generator/generator.o は以下が依存先として記述されていない:
include/ruby.h
include/ruby/ruby.h
.ext/include/i686-linux/ruby/config.h
include/ruby/defines.h
include/ruby/missing.h
include/ruby/intern.h
include/ruby/st.h
include/ruby/subst.h
include/ruby/encoding.h
include/ruby/oniguruma.h
include/ruby/re.h
include/ruby/regex.h

ext/json/parser/parser.o は以下が依存先として記述されていない:
ext/json/parser/parser.rl
include/ruby.h
include/ruby/ruby.h
.ext/include/i686-linux/ruby/config.h
include/ruby/defines.h
include/ruby/missing.h
include/ruby/intern.h
include/ruby/st.h
include/ruby/subst.h
include/ruby/encoding.h
include/ruby/oniguruma.h

http://www.rubyist.net/~akr/chkbuild/debian/ruby-trunk/log/20130507T121000Z.log.html.gz#update-deps

たとえば、generator.o について試すと、
以下のように ruby.h を更新した (ゴミをつけくわえた) 後に
make しても 再コンパイルされません。

% cd ext/json/generator
% make
installing default generator libraries
% ls -l …/…/…/include/ruby.h generator.o
-rw-r–r-- 1 akr akr 868 May 7 23:31 …/…/…/include/ruby.h
-rw-r–r-- 1 akr akr 214264 May 7 23:31 generator.o
% echo foo >> …/…/…/include/ruby.h
% make
installing default generator libraries

そして、generator.o を消して make すると再コンパイルされ、
(ruby.h にゴミがついているので) エラーになります。

% rm generator.o
% make
compiling generator.c
In file included from …/…/…/./include/ruby/encoding.h:23,
from …/fbuffer/fbuffer.h:29,
from generator.c:1:
…/…/…/./include/ruby/oniguruma.h:101: error: expected ‘=’, ‘,’,
‘;’, ‘asm’ or ‘attribute’ before ‘#pragma
In file included from …/…/…/./include/ruby/re.h:25,
from generator.h:11,
from generator.c:2:
…/…/…/./include/ruby/regex.h:27: error: expected ‘=’, ‘,’, ‘;’,
‘asm’ or ‘attribute’ before ‘#pragma

つまり、generator.o の生成のためには ruby.h が必要ですが、
Makefile にその依存関係が記述されていないため、
ruby.h が更新されるだけでは make で generator.o が更新されないという
問題があります。