From: nobu.nakada@... Date: 2002-03-19T15:46:13+09:00 Subject: [ruby-dev:16486] mswin32 configuration なかだです。 先日「mswin32でconfigurationをカスタマイズするにはどうすればい いか」という質問がありました。 最初、configure.batでできたMakefileでマクロを再定義すればいいと 思ったんですが、nmakeはマクロ定義の右辺を定義時に展開してしまう ので、再定義が有効になる部分とならない部分ができてしまいますし、 config.statusやrbconfig.rbに反映されません。 それに、win32/config.status.inにはいくつか、更新されずに正しくな い値が残っているものがあります。 ということで、以下のようなパッチを作ってみました。 * Makefile(や環境変数)で先に定義されているマクロを優先する * Makefileからconfig.statusを作る * cygwin, mingw32と合わせてPLATFORMはi386固定 ついでに、config.statusのフォーマットを最近のものに合わせて"," 区切りにしたのですが、そのためのext/configsub.rbの修正は昨日間 違って入れてしまいました。 Index: win32/Makefile.sub =================================================================== RCS file: /cvs/ruby/src/ruby/win32/Makefile.sub,v retrieving revision 1.12 diff -u -2 -p -r1.12 Makefile.sub --- win32/Makefile.sub 2001/06/09 07:41:44 1.12 +++ win32/Makefile.sub 2002/03/18 13:49:35 @@ -24,5 +24,5 @@ icondirs=$(ICONDIRS) !if defined(icondirs) icondirs=$(icondirs:\=/) -iconinc=-I$(icondirs) +iconinc=-I$(icondirs: = -I) !endif ############### @@ -31,22 +31,58 @@ VPATH = $(srcdir):$(srcdir)/missing .SUFFIXES: .y +!if !defined(CC) CC = cl +!endif +!if !defined(YACC) YACC = byacc +!endif PURIFY = AUTOCONF = autoconf +!if !defined(PROCESSOR_ARCHITECTURE) || "$(PROCESSOR_ARCHITECTURE)" == "x86" +!if !defined(PROCESSOR_LEVEL) +PROCESSOR_LEVEL = 5 +!endif +PROCESSOR_FLAG = -G$(PROCESSOR_LEVEL) +CPU = i$(PROCESSOR_LEVEL)86 +ARCH = i386 +!else +CPU = $(PROCESSOR_ARCHITECTURE) +ARCH = $(PROCESSOR_ARCHITECTURE) +!endif +!if !defined(DEBUGFLAGS) +DEBUGFLAGS = -Zi +!endif +!if !defined(OPTFLAGS) +OPTFLAGS = -O2b2xg- +!endif +OS = mswin32 +!if !defined(prefix) prefix = /usr -CFLAGS = -nologo -DNT=1 -Zi -MD -O2b2xg- -G5 -CPPFLAGS = -I. -I$(srcdir) -I$(srcdir)/missing -DLIBRUBY_SO=\"$(LIBRUBY_SO)\" +!endif +!if !defined(CFLAGS) +CFLAGS = -nologo -MD $(DEBUGFLAGS) $(OPTFLAGS) $(PROCESSOR_FLAG) +!endif +!if !defined(CPPFLAGS) +CPPFLAGS = -I. -I$(srcdir) -I$(srcdir)/missing -DLIBRUBY_SO=\"$(LIBRUBY_SO)\" -DNT=1 +!endif +!if !defined(LDFLAGS) LDFLAGS = $(CFLAGS) -Fm +!endif +!if !defined(XLDFLAGS) XLDFLAGS = -#EXTLIBS = +!endif +!if !defined(RFLAGS) +RFLAGS = -r +!endif +!if !defined(EXTLIBS) +EXTLIBS = +!endif LIBS = user32.lib advapi32.lib wsock32.lib $(EXTLIBS) MISSING = crypt.obj win32.obj isinf.obj isnan.obj -LDSHARED = +LDSHARED = $(CC) -LD DLDFLAGS = SOLIBS = -RFLAGS = -r EXEEXT = .exe @@ -54,6 +90,9 @@ PROGRAM=$(RUBY_INSTALL_NAME)$(EXEEXT) WPROGRAM=$(RUBYW_INSTALL_NAME)$(EXEEXT) RUBYDEF = $(RUBY_SO_NAME).def +MINIRUBY=miniruby$(EXEEXT) +!if !defined(STACK) STACK = 0x2000000 +!endif ORGLIBPATH = $(LIB) @@ -117,8 +156,96 @@ rubyw: $(WPROGRAM) lib: $(LIBRUBY) dll: $(LIBRUBY_SO) + +config: config.h config.status -config.h config.status: $(srcdir)/win32/$$@.in +config.h: Makefile $(srcdir)/win32/$$@.in + @echo Creating config.h @type $(srcdir:/=\)\win32\$@.in > $@ + @echo #undef RUBY_PLATFORM >> $@ + @echo #define RUBY_PLATFORM "$(ARCH)-$(OS)" >> $@ +config.status: Makefile $(srcdir)/win32/Makefile.sub $(MINIRUBY) + @echo Creating config.status + @echo # Generated automatically by Makefile.sub. > config.tmp + @echo s,@SHELL@,$$(COMSPEC),g >> config.tmp + @echo s,@CFLAGS@,$(CFLAGS),g >> config.tmp + @echo s,@CPPFLAGS@,$(CPPFLAGS),g >> config.tmp + @echo s,@CXXFLAGS@,$(CXXFLAGS),g >> config.tmp + @echo s,@FFLAGS@,$(FFLAGS),g >> config.tmp + @echo s,@LDFLAGS@,$(LDFLAGS),g >> config.tmp + @echo s,@LIBS@,user32.lib advapi32.lib wsock32.lib,g >> config.tmp + @echo s,@exec_prefix@,$${prefix},g >> config.tmp + @echo s,@prefix@,$(prefix),g >> config.tmp + @echo s,@program_transform_name@,s,,,,g >> config.tmp + @echo s,@bindir@,$${exec_prefix}/bin,g >> config.tmp + @echo s,@sbindir@,$${exec_prefix}/sbin,g >> config.tmp + @echo s,@libexecdir@,$${exec_prefix}/libexec,g >> config.tmp + @echo s,@datadir@,$${prefix}/share,g >> config.tmp + @echo s,@sysconfdir@,$${prefix}/etc,g >> config.tmp + @echo s,@sharedstatedir@,/etc,g >> config.tmp + @echo s,@localstatedir@,/var,g >> config.tmp + @echo s,@libdir@,$${exec_prefix}/lib,g >> config.tmp + @echo s,@includedir@,$${prefix}/include,g >> config.tmp + @echo s,@oldincludedir@,/usr/include,g >> config.tmp + @echo s,@infodir@,$${datadir}/info,g >> config.tmp + @echo s,@mandir@,$${datadir}/man,g >> config.tmp + @echo s,@build@,$(CPU)-pc-$(OS),g >> config.tmp + @echo s,@build_alias@,$(CPU)-$(OS),g >> config.tmp + @echo s,@build_cpu@,$(CPU),g >> config.tmp + @echo s,@build_vendor@,pc,g >> config.tmp + @echo s,@build_os@,$(OS),g >> config.tmp + @echo s,@host@,$(CPU)-pc-$(OS),g >> config.tmp + @echo s,@host_alias@,$(CPU)-$(OS),g >> config.tmp + @echo s,@host_cpu@,$(CPU),g >> config.tmp + @echo s,@host_vendor@,pc,g >> config.tmp + @echo s,@host_os@,$(OS),g >> config.tmp + @echo s,@target@,$(ARCH)-pc-$(OS),g >> config.tmp + @echo s,@target_alias@,$(ARCH)-$(OS),g >> config.tmp + @echo s,@target_cpu@,$(ARCH),g >> config.tmp + @echo s,@target_vendor@,pc,g >> config.tmp + @echo s,@target_os@,$(OS),g >> config.tmp + @echo s,@CC@,cl,g >> config.tmp + @echo s,@CPP@,$$(CC) -E,g >> config.tmp + @echo s,@YACC@,$(YACC),g >> config.tmp + @echo s,@RANLIB@,rem,g >> config.tmp + @echo s,@AR@,lib -nologo,g >> config.tmp + @echo s,@LN_S@,$(LN_S),g >> config.tmp + @echo s,@SET_MAKE@,$(SET_MAKE),g >> config.tmp + @echo s,@LIBOBJS@, crypt.obj win32.obj isinf.obj isnan.obj,g >> config.tmp + @echo s,@ALLOCA@,$(ALLOCA),g >> config.tmp + @echo s,@DEFAULT_KCODE@,$(DEFAULT_KCODE),g >> config.tmp + @echo s,@EXEEXT@,.exe,g >> config.tmp + @echo s,@OBJEXT@,obj,g >> config.tmp + @echo s,@XLDFLAGS@,$(XLDFLAGS),g >> config.tmp + @echo s,@DLDFLAGS@,$$(CFLAGS),g >> config.tmp + @echo s,@STATIC@,$(STATIC),g >> config.tmp + @echo s,@CCDLFLAGS@,-DIMPORT,g >> config.tmp + @echo s,@LDSHARED@,$$(CC) -LD,g >> config.tmp + @echo s,@DLEXT@,so,g >> config.tmp + @echo s,@DLEXT2@,dll,g >> config.tmp + @echo s,@STRIP@,$(STRIP),g >> config.tmp + @echo s,@EXTSTATIC@,$(EXTSTATIC),g >> config.tmp + @echo s,@setup@,Setup,g >> config.tmp + @echo s,@LIBRUBY_LDSHARED@,$(LIBRUBY_LDSHARED),g >> config.tmp + @echo s,@LIBRUBY_DLDFLAGS@,$(LIBRUBY_DLDFLAGS),g >> config.tmp + @echo s,@RUBY_INSTALL_NAME@,$(RUBY_INSTALL_NAME),g >> config.tmp + @echo s,@RUBY_SO_NAME@,$(RUBY_SO_NAME),g >> config.tmp + @echo s,@LIBRUBY_A@,lib$$(RUBY_INSTALL_NAME).lib,g >> config.tmp + @echo s,@LIBRUBY_SO@,$$(RUBY_SO_NAME).dll,g >> config.tmp + @echo s,@LIBRUBY_ALIASES@,$(LIBRUBY_ALIASES),g >> config.tmp + @echo s,@LIBRUBY@,$$(RUBY_SO_NAME).lib,g >> config.tmp + @echo s,@LIBRUBYARG@,$$(RUBY_SO_NAME).lib,g >> config.tmp + @echo s,@SOLIBS@,$(SOLIBS),g >> config.tmp + @echo s,@DLDLIBS@,$(DLDLIBS),g >> config.tmp + @echo s,@ENABLE_SHARED@,yes,g >> config.tmp + @echo s,@arch@,$(ARCH)-$(OS),g >> config.tmp + @echo s,@sitedir@,$${prefix}/lib/ruby/site_ruby,g >> config.tmp + @echo s,@configure_args@,--with-make-prog=nmake --enable-shared,g >> config.tmp + @echo s,@configure_input@,$$configure_input,g >> config.tmp + @echo s,@srcdir@,$(srcdir),g >> config.tmp + @echo s,@top_srcdir@,$(srcdir),g >> config.tmp + @$(MINIRUBY) -pe "chomp(' ');~/@CFLAGS@/||$$_['$(CFLAGS)']='$$(CFLAGS)'" config.tmp > $@ + @del config.tmp + ext/extmk.rb: $(srcdir)/ext/extmk.rb.in config.status @echo Creating ext/extmk.rb @@ -163,6 +290,8 @@ $(RUBYDEF): $(LIBRUBY_A) miniruby$(EXEEX install: rbconfig.rb .\miniruby.exe $(srcdir)/instruby.rb $(DESTDIR) + +clean: clean-ext clean-local -clean: +clean-local: @if exist $(LIBRUBY_A) del $(LIBRUBY_A) @if exist $(MAINOBJ) del $(MAINOBJ) @@ -173,7 +302,11 @@ clean: @if exist *.obj del *.obj @if exist *.res del *.res + +clean-ext: @-.\miniruby$(EXEEXT) -Cext extmk.rb clean -distclean: clean +distclean: distclean-ext distclean-local + +distclean-local: clean-local @if exist Makefile del Makefile @if exist ext\extmk.rb del ext\extmk.rb @@ -204,4 +337,7 @@ distclean: clean @if exist ext\nul if not exist ext\* rmdir ext @if exist miniruby$(EXEEXT) del miniruby$(EXEEXT) + +distclean-ext: + @-.\miniruby$(EXEEXT) -Cext extmk.rb distclean realclean: distclean Index: win32/config.h.in =================================================================== RCS file: /cvs/ruby/src/ruby/win32/config.h.in,v retrieving revision 1.9 diff -u -2 -p -r1.9 config.h.in --- win32/config.h.in 2001/05/02 17:09:22 1.9 +++ win32/config.h.in 2002/03/18 10:11:28 @@ -4,5 +4,8 @@ #if _MSC_VER > 1100 && !defined NORETURN #define NORETURN(x) __declspec(noreturn) x +#else +#define NORETURN(x) x #endif +#define TOKEN_PASTE(x,y) x##y #define inline __inline /* #define HAVE_DIRENT_H 1 */ @@ -45,4 +48,5 @@ #define RSHIFT(x,y) ((x)>>y) #define FILE_COUNT _cnt +#define FILE_READPTR _ptr #define DEFAULT_KCODE KCODE_NONE #define DLEXT ".so" @@ -52,6 +56,6 @@ #define RUBY_SITE_LIB2 "/lib/ruby/site_ruby/1.7" #define RUBY_PLATFORM "i586-mswin32" -#define RUBY_ARCHLIB "/lib/ruby/1.7/i586-mswin32" -#define RUBY_SITE_ARCHLIB "/lib/ruby/site_ruby/1.7/i586-mswin32" +#define RUBY_ARCHLIB "/lib/ruby/1.7/" RUBY_PLATFORM +#define RUBY_SITE_ARCHLIB "/lib/ruby/site_ruby/1.7/" RUBY_PLATFORM #define SIZEOF_INT 4 Index: win32/setup.mak =================================================================== RCS file: /cvs/ruby/src/ruby/win32/setup.mak,v retrieving revision 1.5 diff -u -2 -p -r1.5 setup.mak --- win32/setup.mak 2001/06/09 07:41:44 1.5 +++ win32/setup.mak 2002/03/18 12:37:37 @@ -10,5 +10,4 @@ srcdir = $(WIN32DIR)/.. OS = mswin32 -all: config.h config.status all: ext all: Makefile @@ -20,8 +19,12 @@ Makefile: @echo RUBY_INSTALL_NAME = ruby>> $@ @echo RUBY_SO_NAME = $(OS)-$$(RUBY_INSTALL_NAME)17>> $@ + @echo prefix = /usr>> $@ + @echo CFLAGS = -nologo -MD $$(DEBUGFLAGS) $$(OPTFLAGS) $$(PROCESSOR_FLAG)>> $@ + @echo CPPFLAGS = -I. -I$$(srcdir) -I$$(srcdir)/missing -DLIBRUBY_SO=\"$$(LIBRUBY_SO)\" -DNT=1>> $@ + @echo LDFLAGS = $$(CFLAGS) -Fm>> $@ + @echo XLDFLAGS = >> $@ + @echo RFLAGS = -r>> $@ + @echo EXTLIBS =>> $@ @echo !INCLUDE $$(srcdir)/win32/Makefile.sub>> $@ - -config.h config.status: $(srcdir)/win32/$$@.in - @type $(srcdir:/=\)\win32\$@.in > $@ ext:; @if not exist $@\* mkdir $@ -- --- 僕の前にBugはない。 --- 僕の後ろにBugはできる。 中田 伸悦