Bug #1904
closed
Added by znz (Kazuhiro NISHIYAMA) over 14 years ago.
Updated almost 13 years ago.
Description
=begin
ほぼ最小限のcygwin環境でtrunkのビルドを試そうとしてみたところ、cmpかgperfもなくて止まってしまったのですが、cmpが必須になったのでしょうか?
ccache gcc -O3 -g -Wall -Wno-unused-parameter -Wno-parentheses -Wpointer-arith -
Wwrite-strings -I. -I.ext/include/i386-cygwin -I/home/kazu/wc/ruby/trunk/include
-I/home/kazu/wc/ruby/trunk -DRUBY_EXPORT -o pack.o -c /home/kazu/wc/ruby/trun
k/pack.c
/bin/sh: line 1: cmp: command not found
- gperf -C -p -j1 -i 1 -g -o -t -N rb_reserved_word '-k1,3,$' /home/kazu/wc/ruby
/trunk/defs/keywords
/bin/sh: line 6: gperf: command not found
make: *** [lex.c] Error 127
=end
=begin
補足です。
baseruby用にruby_1_8をビルドしたときにautoconf,gcc,bison,makeなどは入れていて、trunkをビルドしようとすると追加でdiffutilsに含まれるcmpが必要だったという話です。
=end
=begin
一時的なバグだったんですっけ?これ。
今も再現しますかね。
=end
=begin
trunk/Makefile.in が以下のようになっていて、 cmp に失敗すると失敗の原因が何であっても gperf を実行するようになっているので、今も再現すると思います。
Things which should be considered:¶
* with gperf v.s. without gperf¶
* ./configure v.s. ../ruby/configure¶
* GNU make v.s. HP-UX make # HP-UX make invokes the action if lex.c and keywords has same mtime.¶
* svn checkout generate a file with mtime as current time¶
* XFS has a mtime with fractional part¶
lex.c: defs/keywords
@
if cmp -s $(srcdir)/defs/lex.c.src $?; then
set -x;
$(CP) $(srcdir)/lex.c.blt $@;
else
set -x;
gperf -C -p -j1 -i 1 -g -o -t -N rb_reserved_word -k1,3,$$ $? > $@.tmp &&
$(MV) $@.tmp $@ &&
$(CP) $? $(srcdir)/defs/lex.c.src &&
$(CP) $@ $(srcdir)/lex.c.blt;
fi
ruby_1_8 の Makefile.in では以下のように cmp は使っていないようです。
lex.c: keywords
( gperf -C -p -j1 -i 1 -g -o -t -N rb_reserved_word -k1,3,$$ $? > $@.tmp && mv $@.tmp $@ ) ||
if test -f $@; then
touch $@ && echo $@ touched.;
else
cp $(srcdir)/lex.c $@ && echo $@ copied.;
fi
「enc/unicode/name2ctype.h: enc/unicode/name2ctype.kwd」でも cmp を使っているようなので、 cmp が必要になったというのなら、なければ入れてからビルドするというだけなので、 Rejected で終了してください。
=end
- Status changed from Open to Rejected
=begin
Unix (っぽい環境) で cmp がないというのは考慮しないことにします。
なお、記憶によれば、cmp をつかって比較するのはバージョンの違う gperf がインストールされている環境で不要に再生成される (そして svn diff に出てくる) のを防ぐためです。
=end
=begin
必要だということにするということ自体に異論はありません。
ただ、現状 cmp を使っているのって、lex.c や enc/unicode/name2ctype.h の生成でなので、
ソースに通常添付されているこれらの生成プロセスがなぜ走るのか不思議なんですよね。
=end
=begin
レポジトリの方には trunk/enc/unicode/name2ctype.h はありますが、 trunk/lex.c はないようです。
snapshot.tar.gz には両方入っていました。
=end
Also available in: Atom
PDF
Like0
Like0Like0Like0Like0Like0Like0