Project

General

Profile

Actions

Bug #1904

closed

cmp required?

Added by znz (Kazuhiro NISHIYAMA) over 14 years ago. Updated almost 13 years ago.

Status:
Rejected
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
Actions #1

Updated by znz (Kazuhiro NISHIYAMA) over 14 years ago

=begin
補足です。

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

Actions #2

Updated by naruse (Yui NARUSE) over 14 years ago

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

Actions #3

Updated by znz (Kazuhiro NISHIYAMA) over 14 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

Actions #4

Updated by akr (Akira Tanaka) over 14 years ago

  • Status changed from Open to Rejected

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

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

=end

Actions #5

Updated by naruse (Yui NARUSE) over 14 years ago

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

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

Actions #6

Updated by znz (Kazuhiro NISHIYAMA) over 14 years ago

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

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

Actions

Also available in: Atom PDF

Like0
Like0Like0Like0Like0Like0Like0