Project

General

Profile

Bug #1904

cmp required?

Added by znz (Kazuhiro NISHIYAMA) almost 10 years ago. Updated about 8 years ago.

Status:
Rejected
Priority:
Normal
Assignee:
-
Target version:
-
ruby -v:
ruby 1.9.2dev (2009-08-06 trunk 24412) [i386-cygwin]
Backport:
[ruby-dev:39035]

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

History

#1

Updated by znz (Kazuhiro NISHIYAMA) almost 10 years ago

=begin
補足です。

baseruby用にruby_1_8をビルドしたときにautoconf,gcc,bison,makeなどは入れていて、trunkをビルドしようとすると追加でdiffutilsに含まれるcmpが必要だったという話です。
=end

#2

Updated by naruse (Yui NARUSE) over 9 years ago

=begin
一時的なバグだったんですっけ?これ。
今も再現しますかね。
=end

#3

Updated by znz (Kazuhiro NISHIYAMA) over 9 years ago

=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

#4

Updated by akr (Akira Tanaka) over 9 years ago

  • Status changed from Open to Rejected

=begin
Unix (っぽい環境) で cmp がないというのは考慮しないことにします。

なお、記憶によれば、cmp をつかって比較するのはバージョンの違う gperf がインストールされている環境で不要に再生成される (そして svn diff に出てくる) のを防ぐためです。

=end

#5

Updated by naruse (Yui NARUSE) over 9 years ago

=begin
必要だということにするということ自体に異論はありません。

ただ、現状 cmp を使っているのって、lex.c や enc/unicode/name2ctype.h の生成でなので、
ソースに通常添付されているこれらの生成プロセスがなぜ走るのか不思議なんですよね。
=end

#6

Updated by znz (Kazuhiro NISHIYAMA) over 9 years ago

=begin
レポジトリの方には trunk/enc/unicode/name2ctype.h はありますが、 trunk/lex.c はないようです。

snapshot.tar.gz には両方入っていました。
=end

Also available in: Atom PDF