From: nobuyoshi nakada Date: 2005-08-03T15:06:58+09:00 Subject: [ruby-dev:26730] Re: show information of '--enable-pthread' なかだです。 At Wed, 3 Aug 2005 14:16:20 +0900, Hidetoshi NAGAI wrote in [ruby-dev:26728]: > > もう一点、現在実行中のファイルまたは共有ライブラリにアクセスす > > る、ポータブルな方法ってありましたっけ。 > > ん? なぜこれを気にされているのかが分からないです. > config.status の md5sum の結果は,make 時に ruby のバイナリと > rbconfig.rb とに埋め込んでしまうものですから, > 後は実行時に値の比較を行うだけですよね? > その意味では,適切な識別性が確保できるものであれば > 別に md5sum の結果でなくてもいいんですが. すいません、勘違いしてました。それは問題ないですね。 minirubyはそもそも拡張ライブラリがロードできるかは保証されない ということで無視すれば、埋め込みも可能ではあります。これは config.statusじゃなくてconfig.hの一部だけですが。 Index: Makefile.in =================================================================== RCS file: /cvs/ruby/src/ruby/Makefile.in,v retrieving revision 1.73 diff -U2 -p -r1.73 Makefile.in --- Makefile.in 13 Jul 2005 13:44:21 -0000 1.73 +++ Makefile.in 2 Aug 2005 09:18:44 -0000 @@ -79,10 +79,4 @@ RANLIB = @RANLIB@ OBJEXT = @OBJEXT@ - -EXTOBJS = -DLDOBJS = $(DMYEXT) - -MAINOBJ = main.$(OBJEXT) - MANTYPE = @MANTYPE@ Index: common.mk =================================================================== RCS file: /cvs/ruby/src/ruby/common.mk,v retrieving revision 1.19 diff -U2 -p -r1.19 common.mk --- common.mk 25 Jul 2005 12:29:34 -0000 1.19 +++ common.mk 2 Aug 2005 09:18:32 -0000 @@ -10,4 +10,6 @@ EXTCONF = extconf.rb DMYEXT = dmyext.$(OBJEXT) MAINOBJ = main.$(OBJEXT) +EXTOBJS = +DLDOBJS = autoconf.$(OBJEXT) dmyext.$(OBJEXT) OBJS = array.$(OBJEXT) \ @@ -58,4 +60,7 @@ OBJS = array.$(OBJEXT) \ $(MISSING) +CONFSRC = autoconf.c +CONFOBJ = $(CONFSRC:.c=).$(OBJEXT) + SCRIPT_ARGS = --dest-dir="$(DESTDIR)" \ --make="$(MAKE)" \ @@ -70,9 +75,12 @@ prog: $(PROGRAM) $(WPROGRAM) miniruby$(EXEEXT): config.status $(LIBRUBY_A) $(MAINOBJ) $(MINIOBJS) $(OBJS) $(DMYEXT) +$(CONFSRC): miniruby$(EXEEXT) $(srcdir)/mkautoconf.rb config.h + @$(MINIRUBY) $(srcdir)/mkautoconf.rb config.h > $@ + $(PROGRAM): $(LIBRUBY) $(MAINOBJ) $(OBJS) $(EXTOBJS) $(SETUP) $(PREP) $(LIBRUBY_A): $(OBJS) $(DMYEXT) -$(LIBRUBY_SO): $(OBJS) $(DLDOBJS) $(LIBRUBY_A) $(PREP) $(ARCHFILE) +$(LIBRUBY_SO): $(OBJS) $(DLDOBJS) $(CONFOBJ) $(LIBRUBY_A) $(PREP) $(ARCHFILE) static-ruby: $(MAINOBJ) $(EXTOBJS) $(LIBRUBY_A) @@ -200,4 +208,6 @@ win32.$(OBJEXT): {$(VPATH)}win32.c ### +$(CONFOBJ): {$(VPATH)}$(CONFSRC) {$(VPATH)}ruby.h config.h \ + {$(VPATH)}defines.h {$(VPATH)}intern.h {$(VPATH)}missing.h array.$(OBJEXT): {$(VPATH)}array.c {$(VPATH)}ruby.h config.h \ {$(VPATH)}defines.h {$(VPATH)}intern.h {$(VPATH)}missing.h \ Index: inits.c =================================================================== RCS file: /cvs/ruby/src/ruby/inits.c,v retrieving revision 1.10 diff -U2 -p -u -r1.10 inits.c --- inits.c 14 Jul 2005 15:12:58 -0000 1.10 +++ inits.c 2 Aug 2005 14:04:13 -0000 @@ -48,4 +48,24 @@ void Init_var_tables _((void)); void Init_version _((void)); +const struct config_values { + const char *name; + VALUE val; +} *const rb_config_values; + +static void +Init_config() +{ + const struct config_values *p = rb_config_values; + VALUE conf = rb_hash_new(); + rb_const_set(rb_define_module("Config"), rb_intern("Autoconf"), conf); + if (p) { + for (; p->name; p++) { + VALUE s = rb_str_new2(p->name); + OBJ_FREEZE(s); + rb_hash_aset(conf, s, p->val); + } + } +} + void rb_call_inits() @@ -84,3 +104,4 @@ rb_call_inits() Init_Enumerator(); Init_version(); + Init_config(); } Index: mkautoconf.rb =================================================================== RCS file: mkautoconf.rb diff -N mkautoconf.rb --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ mkautoconf.rb 2 Aug 2005 14:04:00 -0000 @@ -0,0 +1,21 @@ +#!./miniruby -ns +BEGIN { + puts <