Project

General

Profile

Bug #10808

r49451以降 Solarisにてruby-glommed.oの作成に失敗

Added by ngoto (Naohisa Goto) over 5 years ago. Updated over 5 years ago.

Status:
Closed
Priority:
Normal
Assignee:
-
Target version:
-
[ruby-dev:48849]

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

r49462_sparc64-solaris10.make_-p_-V1-ruby-glommed_o.log (207 KB) r49462_sparc64-solaris10.make_-p_-V1-ruby-glommed_o.log make -p V=1 ruby-glommed.o したときのログ ngoto (Naohisa Goto), 02/03/2015 02:44 AM
r49462_sparc64-solaris10.Makefile (15.6 KB) r49462_sparc64-solaris10.Makefile sparc64-solaris10 における Makefile (GNU make使用)(r49462) ngoto (Naohisa Goto), 02/03/2015 02:44 AM

Updated by nobu (Nobuyoshi Nakada) over 5 years ago

  • Status changed from Open to Feedback

ldに渡されていることから $(OBJS) には含まれているようです。
直接 make dln.o と実行した場合は作られるのでしょうか。
もしそれでできないのなら dln.o の依存ルールがおかしいことになりますが。

Updated by ngoto (Naohisa Goto) over 5 years ago

直接 make dln.o と実行した場合は作られるのでしょうか。

make dln.o によって dln.o は問題無く作られます。

しかし、make ruby-glommed.o は上記と同様に失敗します。
つまり、ruby-glommed.o の依存関係の問題のようです。

make -p V=1 ruby-glommed.o したときのログとMakefileを添付します。

#3

Updated by ngoto (Naohisa Goto) over 5 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 5 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 5 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

Also available in: Atom PDF