Bug #10808
closedr49451以降 Solarisにてruby-glommed.oの作成に失敗
Description
r49451以降、以下のエラーが発生してビルドできません。
dln.o がビルドされないため、ruby-glommed.o のビルドに失敗しています。
cc -xO4 -xtarget=sparc64viiplus -m64 -L. -L/usr/local/64/lib -R/usr/local/64/lib main.o dmydln.o miniinit.o miniprelude.o array.o bignum.o class.o compar.o complex.o dir.o dln_find.o encoding.o enum.o enumerator.o error.o eval.o load.o proc.o file.o gc.o hash.o inits.o io.o marshal.o math.o node.o numeric.o object.o pack.o parse.o process.o random.o range.o rational.o re.o regcomp.o regenc.o regerror.o regexec.o regparse.o regsyntax.o ruby.o safe.o signal.o sprintf.o st.o strftime.o string.o struct.o symbol.o time.o transcode.o util.o variable.o version.o compile.o debug.o iseq.o vm.o vm_dump.o vm_backtrace.o vm_trace.o thread.o cont.o probes.o enc/ascii.o enc/us_ascii.o enc/unicode.o enc/utf_8.o enc/trans/newline.o sparc.o flock.o isinf.o setproctitle.o addr2line.o dmyext.o dmyenc.o -lpthread -lrt -lgmp -lsocket -ldl -lcrypt -lm -o miniruby
./miniruby -I./lib -I. -I.ext/common ./tool/mkconfig.rb -timestamp=.rbconfig.time \
-install_name=ruby \
-so_name=ruby rbconfig.rb
rbconfig.rb updated
./miniruby -I./lib -I. -I.ext/common ./enc/make_encmake.rb --builtin-encs="enc/ascii.o enc/us_ascii.o enc/unicode.o enc/utf_8.o" --builtin-transes="enc/trans/newline.o" --module enc.mk
/usr/ccs/bin/ld -r -o ruby-glommed.o dln.o localeinit.o loadpath.o array.o bignum.o class.o compar.o complex.o dir.o dln_find.o encoding.o enum.o enumerator.o error.o eval.o load.o proc.o file.o gc.o hash.o inits.o io.o marshal.o math.o node.o numeric.o object.o pack.o parse.o process.o random.o range.o rational.o re.o regcomp.o regenc.o regerror.o regexec.o regparse.o regsyntax.o ruby.o safe.o signal.o sprintf.o st.o strftime.o string.o struct.o symbol.o time.o transcode.o util.o variable.o version.o compile.o debug.o iseq.o vm.o vm_dump.o vm_backtrace.o vm_trace.o thread.o cont.o probes.o enc/ascii.o enc/us_ascii.o enc/unicode.o enc/utf_8.o enc/trans/newline.o sparc.o flock.o isinf.o setproctitle.o addr2line.o prelude.o probes.o
ld: fatal: file dln.o: open failed: No such file or directory
make: *** [ruby-glommed.o] Error 1
Files
Updated by nobu (Nobuyoshi Nakada) over 9 years ago
- Status changed from Open to Feedback
ldに渡されていることから $(OBJS)
には含まれているようです。
直接 make dln.o
と実行した場合は作られるのでしょうか。
もしそれでできないのなら dln.o の依存ルールがおかしいことになりますが。
Updated by ngoto (Naohisa Goto) over 9 years ago
- File r49462_sparc64-solaris10.make_-p_-V1-ruby-glommed_o.log r49462_sparc64-solaris10.make_-p_-V1-ruby-glommed_o.log added
- File r49462_sparc64-solaris10.Makefile r49462_sparc64-solaris10.Makefile added
- Status changed from Feedback to Open
直接 make dln.o と実行した場合は作られるのでしょうか。
make dln.o によって dln.o は問題無く作られます。
しかし、make ruby-glommed.o は上記と同様に失敗します。
つまり、ruby-glommed.o の依存関係の問題のようです。
make -p V=1 ruby-glommed.o したときのログとMakefileを添付します。
Updated by ngoto (Naohisa Goto) over 9 years ago
- Status changed from Open to Closed
- % Done changed from 0 to 100
Applied in changeset r49485.
-
common.mk (ruby-glommed.o): dependency on $(OBJ) should be written
in common.mk (in which OBJ is defined) because of Makefile include
and parse order. This partly reverts r49419.
[ruby-dev:48849] [Bug #10808] -
Makefile.in (ruby-glommed.o): ditto.
-
Makefile.in (ruby-glommed.o): remove excess $(DTRACE_OBJ) because
it is included in $(OBJS) since r49451. -
Makefile.in (probes.o): should depend on $(DTRACE_DEPENDENT_OBJS)
Updated by ngoto (Naohisa Goto) over 9 years ago
Makefile と uncommon.mk (common.mk から自動作成) は GNUMakefile からこの順番で読み込まれますが、$(OBJS) は uncommon.mk 内にて代入されるため、Makefile 内にて ruby-glommed.$(OBJEXT) の依存関係が定義された際には $(OBJS) は空のままです。
そして、変数 $(OBJS) の中身が後から common.mk 内部で変更されても、以前に読み込んだ Makefile 内で定義された依存関係にまで遡っての変更は行わないようです。。
つまり、各コマンドの実行は、Makefile, uncommon.mk などすべてを読み込んだ後になるため、変数の最終の内容が反映される一方、依存関係のルールは、(同一ファイル内ならどうかはわかりませんが、複数ファイルに分けて書いた場合には)その依存関係が出現した時点での変数の内容が使われるようです。
r49419 以前のように ruby-glommed.$(OBJEXT) の依存関係の記述を common.mk 内に移動するとうまくビルドできるようになりました。
Updated by usa (Usaku NAKAMURA) over 9 years ago
- Backport changed from 2.0.0: UNKNOWN, 2.1: UNKNOWN, 2.2: UNKNOWN to 2.0.0: DONTNEED, 2.1: DONTNEED, 2.2: DONTNEED