diff options
author | eban <eban@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2002-09-08 09:08:15 +0000 |
---|---|---|
committer | eban <eban@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2002-09-08 09:08:15 +0000 |
commit | 3d5010de7fd264d5b54d74cbb06e3c98ae6af29b (patch) | |
tree | 8f51964341539072b73e7d7ffdae95c6179cca9e | |
parent | fe0079ce01d17c8b28ccb093c737eceb57cb17a7 (diff) | |
download | ruby-3d5010de7fd264d5b54d74cbb06e3c98ae6af29b.tar.gz ruby-3d5010de7fd264d5b54d74cbb06e3c98ae6af29b.tar.xz ruby-3d5010de7fd264d5b54d74cbb06e3c98ae6af29b.zip |
* configure.in: modify program_prefix only if specified
--program-prefix.
* configure.in: don't generate ext/extmk.rb.
* Makefile.in: execute directly $(srcdir)/ext/extmk.rb.
remove -Cext option, "Dir::chdir 'ext'" in ext/extmk.rb.
* {win32,bccwin32}/Makefile.sub: ditto.
* instruby.rb: ditto.
* ext/extmk.rb: renamed from ext/extmk.rb.in.
* lib/mkmf.rb (module Logging): create log files (mkmf.log)
in each extension module directories.
* ext/extmk.rb: ditto.
* lib/mkmf.rb (macro_defined?): new method.
* ext/.cvsignore: remove extmk.rb.
* ext/*/.cvsignore: add "*.def".
git-svn-id: http://svn.ruby-lang.org/repos/ruby/trunk@2819 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
35 files changed, 679 insertions, 60 deletions
@@ -1,3 +1,30 @@ +Sun Sep 8 14:38:31 2002 WATANABE Hirofumi <eban@ruby-lang.org> + + * configure.in: modify program_prefix only if specified + --program-prefix. + + * configure.in: don't generate ext/extmk.rb. + + * Makefile.in: execute directly $(srcdir)/ext/extmk.rb. + remove -Cext option, "Dir::chdir 'ext'" in ext/extmk.rb. + + * {win32,bccwin32}/Makefile.sub: ditto. + + * instruby.rb: ditto. + + * ext/extmk.rb: renamed from ext/extmk.rb.in. + + * lib/mkmf.rb (module Logging): create log files (mkmf.log) + in each extension module directories. + + * ext/extmk.rb: ditto. + + * lib/mkmf.rb (macro_defined?): new method. + + * ext/.cvsignore: remove extmk.rb. + + * ext/*/.cvsignore: add "*.def". + Sun Sep 8 14:36:40 2002 KONISHI Hiromasa <konishih@fd6.so-net.ne.jp> * bcc32/configure.bat : Control of a message. @@ -99,7 +99,7 @@ ext/Setup.nt ext/Setup.x68 ext/aix_mksym.rb ext/configsub.rb -ext/extmk.rb.in +ext/extmk.rb lib/English.rb lib/Env.rb lib/README diff --git a/Makefile.in b/Makefile.in index c9660106d..fec6198fb 100644 --- a/Makefile.in +++ b/Makefile.in @@ -84,7 +84,7 @@ OBJS = array.@OBJEXT@ \ $(MISSING) all: miniruby$(EXEEXT) @PREP@ rbconfig.rb $(LIBRUBY) - @@MINIRUBY@ -Cext extmk.rb @EXTSTATIC@ + @@MINIRUBY@ $(srcdir)/ext/extmk.rb @EXTSTATIC@ miniruby$(EXEEXT): config.status $(LIBRUBY_A) $(MAINOBJ) dmyext.@OBJEXT@ @rm -f $@ @@ -107,7 +107,7 @@ $(LIBRUBY_SO): $(OBJS) dmyext.@OBJEXT@ miniruby$(EXEEXT) install: rbconfig.rb @MINIRUBY@ $(srcdir)/instruby.rb $(DESTDIR) -clean-ext:; @-@MINIRUBY@ -Cext extmk.rb clean 2> /dev/null || true +clean-ext:; @-@MINIRUBY@ $(srcdir)/ext/extmk.rb clean 2> /dev/null || true clean-local: @rm -f $(OBJS) $(MAINOBJ) $(LIBRUBY_A) $(LIBRUBY_SO) $(LIBRUBY_ALIASES) @@ -117,10 +117,10 @@ clean-local: clean: clean-ext clean-local distclean-ext: - @-@MINIRUBY@ -Cext extmk.rb distclean 2> /dev/null || true + @-@MINIRUBY@ $(srcdir)/ext/extmk.rb distclean 2> /dev/null || true distclean-local: clean-local - @rm -f Makefile ext/extmk.rb config.h rbconfig.rb + @rm -f Makefile config.h rbconfig.rb @rm -f ext/config.cache config.cache config.log config.status @rm -f *~ core *.core gmon.out y.tab.c y.output ruby.imp diff --git a/bcc32/Makefile.sub b/bcc32/Makefile.sub index 31b923606..1bdb70b71 100644 --- a/bcc32/Makefile.sub +++ b/bcc32/Makefile.sub @@ -165,9 +165,9 @@ OBJS = array.obj \ version.obj \ $(MISSING) -all: miniruby$(EXEEXT) rbconfig.rb ext/extmk.rb \ +all: miniruby$(EXEEXT) rbconfig.rb \ $(LIBRUBY) $(MISCLIBS) - @.\miniruby$(EXEEXT) -Cext extmk.rb + @.\miniruby$(EXEEXT) $(srcdir)ext/extmk.rb ruby: $(PROGRAM) rubyw: $(WPROGRAM) @@ -324,6 +324,7 @@ s,@DLEXT2@,dll,;t t s,@STRIP@,$(STRIP),;t t s,@EXTSTATIC@,$(EXTSTATIC),;t t s,@setup@,Setup,;t t +s,@MINIRUBY@,$(MINIRUBY),;t t s,@LIBRUBY_LDSHARED@,$(LIBRUBY_LDSHARED),;t t s,@LIBRUBY_DLDFLAGS@,$(LIBRUBY_DLDFLAGS),;t t s,@RUBY_INSTALL_NAME@,$(RUBY_INSTALL_NAME),;t t @@ -345,13 +346,13 @@ s,@srcdir@,$(srcdir),;t t s,@top_srcdir@,$(srcdir),;t t | -ext/extmk.rb: $(srcdir)ext/extmk.rb.in config.status - @echo Creating ext/extmk.rb - @.\miniruby$(EXEEXT) $(srcdir)ext/configsub.rb \ - -srcdir=$(srcdir) \ - -install_name=$(RUBY_INSTALL_NAME) \ - -so_name=$(RUBY_SO_NAME) \ - -output=$@ $(srcdir)ext/extmk.rb.in +#ext/extmk.rb: $(srcdir)ext/extmk.rb.in config.status +# @echo Creating ext/extmk.rb +# @.\miniruby$(EXEEXT) $(srcdir)ext/configsub.rb \ +# -srcdir=$(srcdir) \ +# -install_name=$(RUBY_INSTALL_NAME) \ +# -so_name=$(RUBY_SO_NAME) \ +# -output=$@ $(srcdir)ext/extmk.rb.in miniruby$(EXEEXT): $(OBJS) $(MAINOBJ) $(EXTOBJS) @echo $(EXTOBJS) @@ -396,13 +397,12 @@ clean-local: @if exist *.tds del *.tds clean-ext: - @-.\miniruby$(EXEEXT) -Cext extmk.rb clean + @-.\miniruby$(EXEEXT) $(srcdir)ext/extmk.rb clean distclean: distclean-ext distclean-local distclean-local: clean-local @if exist Makefile del Makefile - @if exist ext\extmk.rb del ext\extmk.rb @if exist config.h del config.h @if exist ext\config.cache del ext\config.cache @if exist config.cache del config.cache @@ -432,7 +432,7 @@ distclean-local: clean-local @if exist miniruby$(EXEEXT) del miniruby$(EXEEXT) distclean-ext: - @-.\miniruby$(EXEEXT) -Cext extmk.rb distclean + @-.\miniruby$(EXEEXT) $(srcdir)ext/extmk.rb distclean realclean: distclean @if exist parse.c del parse.c diff --git a/configure.in b/configure.in index 357eb7431..d299c633b 100644 --- a/configure.in +++ b/configure.in @@ -27,6 +27,9 @@ then (it is also a good idea to do 'make clean' before compiling)) fi +if test "$program_prefix" = NONE; then + program_prefix= +fi AC_CANONICAL_TARGET dnl checks for fat-binary @@ -1172,5 +1175,5 @@ else fi : > confdefs.h -AC_CONFIG_FILES([$FIRSTMAKEFILE Makefile ext/extmk.rb]) +AC_CONFIG_FILES([$FIRSTMAKEFILE Makefile]) AC_OUTPUT diff --git a/ext/.cvsignore b/ext/.cvsignore index a3fac48ae..ab2424ff7 100644 --- a/ext/.cvsignore +++ b/ext/.cvsignore @@ -1,3 +1,2 @@ extinit.c -extmk.log -extmk.rb +*.log diff --git a/ext/Win32API/.cvsignore b/ext/Win32API/.cvsignore index f3c7a7c5d..90c83ed9b 100644 --- a/ext/Win32API/.cvsignore +++ b/ext/Win32API/.cvsignore @@ -1 +1,3 @@ Makefile +*.log +*.def diff --git a/ext/curses/.cvsignore b/ext/curses/.cvsignore index fc802ff1c..408871223 100644 --- a/ext/curses/.cvsignore +++ b/ext/curses/.cvsignore @@ -1,2 +1,3 @@ Makefile mkmf.log +*.def diff --git a/ext/dbm/.cvsignore b/ext/dbm/.cvsignore index fc802ff1c..408871223 100644 --- a/ext/dbm/.cvsignore +++ b/ext/dbm/.cvsignore @@ -1,2 +1,3 @@ Makefile mkmf.log +*.def diff --git a/ext/digest/.cvsignore b/ext/digest/.cvsignore index fc802ff1c..408871223 100644 --- a/ext/digest/.cvsignore +++ b/ext/digest/.cvsignore @@ -1,2 +1,3 @@ Makefile mkmf.log +*.def diff --git a/ext/digest/md5/.cvsignore b/ext/digest/md5/.cvsignore index fc802ff1c..408871223 100644 --- a/ext/digest/md5/.cvsignore +++ b/ext/digest/md5/.cvsignore @@ -1,2 +1,3 @@ Makefile mkmf.log +*.def diff --git a/ext/digest/rmd160/.cvsignore b/ext/digest/rmd160/.cvsignore index fc802ff1c..408871223 100644 --- a/ext/digest/rmd160/.cvsignore +++ b/ext/digest/rmd160/.cvsignore @@ -1,2 +1,3 @@ Makefile mkmf.log +*.def diff --git a/ext/digest/sha1/.cvsignore b/ext/digest/sha1/.cvsignore index fc802ff1c..408871223 100644 --- a/ext/digest/sha1/.cvsignore +++ b/ext/digest/sha1/.cvsignore @@ -1,2 +1,3 @@ Makefile mkmf.log +*.def diff --git a/ext/digest/sha2/.cvsignore b/ext/digest/sha2/.cvsignore index fc802ff1c..408871223 100644 --- a/ext/digest/sha2/.cvsignore +++ b/ext/digest/sha2/.cvsignore @@ -1,2 +1,3 @@ Makefile mkmf.log +*.def diff --git a/ext/dl/.cvsignore b/ext/dl/.cvsignore index 94a01c4ba..6d884b6ce 100644 --- a/ext/dl/.cvsignore +++ b/ext/dl/.cvsignore @@ -5,3 +5,4 @@ dlconfig.rb *.func *.o *~ +*.def diff --git a/ext/etc/.cvsignore b/ext/etc/.cvsignore index fc802ff1c..408871223 100644 --- a/ext/etc/.cvsignore +++ b/ext/etc/.cvsignore @@ -1,2 +1,3 @@ Makefile mkmf.log +*.def diff --git a/ext/extmk.rb b/ext/extmk.rb new file mode 100644 index 000000000..77757dc83 --- /dev/null +++ b/ext/extmk.rb @@ -0,0 +1,549 @@ +#! /usr/local/bin/ruby +# -*- ruby -*- + +$force_static = nil +$install = nil +$destdir = nil +$clean = nil +$nodynamic = nil +$extinit = nil +$extobjs = nil + +if ARGV[0] == 'static' + $force_static = true + ARGV.shift +elsif ARGV[0] == 'install' + $install = true + $destdir = ARGV[1] || '' + ARGV.shift +elsif ARGV[0] == 'clean' + $clean = "clean" + ARGV.shift +elsif ARGV[0] == 'distclean' + $clean = "distclean" + ARGV.shift +elsif ARGV[0] == 'realclean' + $clean = "realclean" + ARGV.shift +end + +$extlist = [] + +$:.replace ["."] +require 'rbconfig' + +$top_srcdir = Config::CONFIG["srcdir"] + +$:.replace [$top_srcdir, $top_srcdir+"/lib", "."] + +require 'mkmf' +require 'find' +require 'ftools' +require 'shellwords' + +$topdir = File.expand_path(".") + +$LINK = "#{CONFIG['CC']} #{OUTFLAG}conftest -I#$topdir -I#$top_srcdir #{CFLAGS} %s %s #{CONFIG['LDFLAGS']} %s conftest.c %s %s #{CONFIG['LIBS']}" +$CPP = "#{CONFIG['CPP']} #{CONFIG['CPPFLAGS']} %s -I#$topdir -I#$top_srcdir #{CFLAGS} %s %s %s conftest.c" + +Object.class_eval do remove_method :create_makefile end + +def create_makefile(target) + $target = target + if target.include?('/') + target_prefix, target = File.split(target) + target_prefix[0,0] = '/' + else + target_prefix = "" + end + rm_f "conftest*" + if CONFIG["DLEXT"] == $OBJEXT + libs = $libs.split + for lib in libs + lib.sub!(/-l(.*)/, %%"lib\\1.#{$LIBEXT}"%) + end + $defs.push(format("-DEXTLIB='%s'", libs.join(","))) + end + + $DLDFLAGS = CONFIG["DLDFLAGS"].dup + + if $configure_args['--enable-shared'] or CONFIG["LIBRUBY"] != CONFIG["LIBRUBY_A"] + $libs = CONFIG["LIBRUBYARG"] + " " + $libs + $LIBPATH.unshift $topdir + end + + defflag = '' + if RUBY_PLATFORM =~ /cygwin|mingw/ and not $static + if not File.exist? target + '.def' + open(target + '.def', 'wb') do |f| + f.print "EXPORTS\n", "Init_", target, "\n" + end + end + defflag = target + ".def" + elsif RUBY_PLATFORM =~ /bccwin32/ + deffile = target + '.def' + if not File.exist? target + '.def' + open(deffile, 'wb') do |f| + f.print "EXPORTS\n", "_Init_", target, "\n" + end + end + end + + if RUBY_PLATFORM =~ /mswin32|bccwin32/ + libpath = $LIBPATH.join(';') + else + $LIBPATH.each {|d| $DLDFLAGS << " -L" << d} + if /netbsdelf/ =~ RUBY_PLATFORM + $LIBPATH.each {|d| $DLDFLAGS << " -Wl,-R" + d unless d == $topdir} + end + end + + $srcdir = File.join($top_srcdir,"ext",$mdir) + mfile = open("Makefile", "w") + mfile.binmode if /mingw/ =~ RUBY_PLATFORM + mfile.printf <<EOL, if $static then "" else CONFIG["CCDLFLAGS"] end, $defs.join(" ") +SHELL = /bin/sh + +#### Start of system configuration section. #### + +srcdir = #{$srcdir} +VPATH = #{$srcdir} + +topdir = #{$topdir} +hdrdir = #{$top_srcdir} + +CC = #{CONFIG['CC']} + +CFLAGS = %s #{CFLAGS} #$CFLAGS +CPPFLAGS = -I$(topdir) -I$(hdrdir) %s #$CPPFLAGS +#{ +if /bccwin32/ =~ RUBY_PLATFORM + "DLDFLAGS = #$LDFLAGS -L" + '"$(libdir:/=\\);$(topdir:/=\\)"' + "\n" + + "LDSHARED = #{CONFIG['LDSHARED']}\n" +else + "DLDFLAGS = #$DLDFLAGS #$LDFLAGS\n" + + "LDSHARED = #{CONFIG['LDSHARED']} #{defflag}\n" +end +} +EOL + mfile.puts "LIBPATH = #{libpath}" if libpath + + mfile.puts ".SUFFIXES: .#{CONFIG['OBJEXT']}" unless #{CONFIG['OBJEXT']} == "o" + + mfile.printf "\ + +RUBY_INSTALL_NAME = #{CONFIG['RUBY_INSTALL_NAME']} +RUBY_SO_NAME = #{CONFIG['RUBY_SO_NAME']} +ruby_version = #{Config::CONFIG["ruby_version"]} + +prefix = #{CONFIG['prefix']} +exec_prefix = #{CONFIG['exec_prefix']} +libdir = #{CONFIG['libdir']} +rubylibdir = $(libdir)/ruby/$(ruby_version) +#pkglibdir = $(libdir)/$(RUBY_INSTALL_NAME)/#{CONFIG['MAJOR']}.#{CONFIG['MINOR']} +pkglibdir = $(libdir)/ruby/#{CONFIG['MAJOR']}.#{CONFIG['MINOR']} +archdir = $(pkglibdir)/#{CONFIG['arch']} +target_prefix = #{target_prefix} +#{CONFIG['SET_MAKE']} + +#### End of system configuration section. #### + +" + mfile.printf "LOCAL_LIBS = %s %s\n", $LOCAL_LIBS, $local_flags + if /bccwin32/ =~ RUBY_PLATFORM + mfile.printf "LIBS = $(topdir:/=\\)\\%s\n", $libs + else + mfile.printf "LIBS = %s\n", $libs + end + mfile.printf "OBJS = " + if !$objs or (/bccwin32/ =~ RUBY_PLATFORM) then + $objs = [] + for f in Dir["#{$top_srcdir}/ext/#{$mdir}/*.{#{SRC_EXT.join(%q{,})}}"] + f = File.basename(f) + f.sub!(/(#{SRC_EXT.join(%q{|})})$/, $OBJEXT) + $objs.push f + end + else + for i in $objs + i.sub!(/\.o\z/, ".#{$OBJEXT}") + end + end + mfile.printf $objs.join(" ") + mfile.printf "\n" + + if /bccwin32/ =~ RUBY_PLATFORM + ruby_interpreter = '$(topdir:/=\)/miniruby' + CONFIG['EXEEXT'] + else + ruby_interpreter = "$(topdir)/miniruby" + CONFIG['EXEEXT'] + if /nmake/i =~ $make + ruby_interpreter = '$(topdir:/=\)\miniruby' + CONFIG['EXEEXT'] + end + end + if defined? CROSS_COMPILING + ruby_interpreter = CONFIG['MINIRUBY'] + end + + mfile.printf <<EOS +TARGET = #{target} +DLLIB = $(TARGET).#{$static ? $LIBEXT : CONFIG['DLEXT']} + +RUBY = #{ruby_interpreter} -I$(topdir) -I$(hdrdir)/lib +RM = $(RUBY) -rftools -e "File::rm_f(*ARGV.map do|x|Dir[x]end.flatten.uniq)" +MAKEDIRS = $(RUBY) -r ftools -e 'File::makedirs(*ARGV)' +INSTALL_PROG = $(RUBY) -r ftools -e 'File::install(ARGV[0], ARGV[1], 0555, true)' +INSTALL_DATA = $(RUBY) -r ftools -e 'File::install(ARGV[0], ARGV[1], 0644, true)' + +EXEEXT = CONFIG['EXEEXT'] + +all: $(DLLIB) + +clean: + @$(RM) *.#{$OBJEXT} *.so *.sl *.#{$LIBEXT} $(DLLIB) +#{ +if /bccwin32/ =~ RUBY_PLATFORM + " @$(RM) *.def *.ilc *.ild *.ilf *.ils *.map *.tds *.bak $(CLEANFILES)\n" + + " @if exist $(target).def.org ren $(target).def.org $(target).def" +else + " @$(RM) *.ilk *.exp *.pdb *.bak $(CLEANFILES)" +end +} + +distclean: clean + @$(RM) Makefile extconf.h conftest.* + @$(RM) core ruby$(EXEEXT) *~ $(DISTCLEANFILES) + +realclean: distclean +EOS + + mfile.printf <<EOS + +install: + @$(MAKEDIRS) $(DESTDIR)$(libdir) $(DESTDIR)$(pkglibdir) $(DESTDIR)$(archdir)$(target_prefix) +EOS + unless $static + mfile.printf "\ + @$(INSTALL_PROG) $(DLLIB) $(DESTDIR)$(archdir)$(target_prefix)/$(DLLIB) +" + end + save_srcdir = Config::CONFIG['srcdir'] + Config::CONFIG['srcdir'] = $srcdir + install_rb(mfile, '$(DESTDIR)$(rubylibdir)$(target_prefix)', '$(srcdir)') + Config::CONFIG['srcdir'] = save_srcdir + mfile.printf "\n" + + unless /mswin32/ =~ RUBY_PLATFORM + if /bccwin32/ =~ RUBY_PLATFORM + src = '$(<:\\=/)' + else + src = '$<' + end + copt = cxxopt = '' + else + if /nmake/i =~ $make + src = '$(<:\\=/)' + else + src = '$(subst /,\\\\,$<)' + end + copt = '-Tc' + cxxopt = '-Tp' + end + unless /nmake/i =~ $make + if /bccwin32/ =~ RUBY_PLATFORM + mfile.print " +{$(srcdir)}.cc{}.#{CONFIG['OBJEXT']}: + $(CXX) $(CXXFLAGS) $(CPPFLAGS) -c #{cxxopt}#{src} +{$(srcdir)}.cpp{}.#{CONFIG['OBJEXT']}: + $(CXX) $(CXXFLAGS) $(CPPFLAGS) -c #{cxxopt}#{src} +{$(srcdir)}.cxx{}.#{CONFIG['OBJEXT']}: + $(CXX) $(CXXFLAGS) $(CPPFLAGS) -c #{cxxopt}#{src} +{$(srcdir)}.c{}.#{CONFIG['OBJEXT']}: + $(CC) $(CFLAGS) $(CPPFLAGS) -c #{copt}#{src} +" + end + mfile.puts " +.cc.#{CONFIG['OBJEXT']}: + $(CXX) $(CXXFLAGS) $(CPPFLAGS) -c #{cxxopt}#{src} +.cpp.#{CONFIG['OBJEXT']}: + $(CXX) $(CXXFLAGS) $(CPPFLAGS) -c #{cxxopt}#{src} +.cxx.#{CONFIG['OBJEXT']}: + $(CXX) $(CXXFLAGS) $(CPPFLAGS) -c #{cxxopt}#{src} +.C.#{CONFIG['OBJEXT']}: + $(CXX) $(CXXFLAGS) $(CPPFLAGS) -c #{cxxopt}#{src} +.c.#{CONFIG['OBJEXT']}: + $(CC) $(CFLAGS) $(CPPFLAGS) -c #{copt}#{src} +" + else + mfile.print " +{$(srcdir)}.c{}.#{CONFIG['OBJEXT']}: + $(CC) -I. -I$(<D) $(CFLAGS) $(CPPFLAGS) -c #{copt}#{src} +.c.#{CONFIG['OBJEXT']}: + $(CC) $(CFLAGS) $(CPPFLAGS) -c #{copt}#{src} +{$(srcdir)}.cc{}.#{CONFIG['OBJEXT']}: + $(CXX) -I. -I$(<D) $(CXXFLAGS) $(CPPFLAGS) -c #{cxxopt}#{src} +.cc.#{CONFIG['OBJEXT']}: + $(CXX) $(CXXFLAGS) $(CPPFLAGS) -c #{cxxopt}#{src} +{$(srcdir)}.cpp{}.#{CONFIG['OBJEXT']}: + $(CXX) -I. -I$(<D) $(CXXFLAGS) $(CPPFLAGS) -c #{cxxopt}#{src} +.cpp.#{CONFIG['OBJEXT']}: + $(CXX) $(CXXFLAGS) $(CPPFLAGS) -c #{cxxopt}#{src} +{$(srcdir)}.cxx{}.#{CONFIG['OBJEXT']}: + $(CXX) -I. -I$(<D) $(CXXFLAGS) $(CPPFLAGS) -c #{cxxopt}#{src} +.cxx.#{CONFIG['OBJEXT']}: + $(CXX) $(CXXFLAGS) $(CPPFLAGS) -c #{cxxopt}#{src} +" + end + + if $static + if CONFIG['AR'] =~ /^lib\b/i + mfile.printf "\ +$(DLLIB): $(OBJS) + #{CONFIG['AR']} /OUT:$(DLLIB) $(OBJS) +" + else + mfile.printf "\ +$(DLLIB): $(OBJS) + #{CONFIG['AR']} cru $(DLLIB) $(OBJS) + @-#{CONFIG['RANLIB']} $(DLLIB) 2> /dev/null || true +" + end + elsif CONFIG['DLEXT'] != $OBJEXT + mfile.print "$(DLLIB): $(OBJS)\n" + if /bccwin32/ =~ RUBY_PLATFORM + mfile.print "\t$(LDSHARED) $(DLDFLAGS) C0D32.OBJ $(OBJS), $@,, CW32.LIB IMPORT32.LIB WS2_32.LIB $(LIBS), #{deffile}\n" + else + if /mswin32/ =~ RUBY_PLATFORM + if /nmake/i =~ $make + mfile.print "\tset LIB=$(LIBPATH:/=\\);$(LIB)\n" + else + mfile.print "\tenv LIB='$(subst /,\\\\,$(LIBPATH));$(LIB)' \\\n" + end + end + mfile.print "\t$(LDSHARED) $(DLDFLAGS) #{OUTFLAG}$(DLLIB) $(OBJS) $(LIBS) $(LOCAL_LIBS)\n" + end + elsif RUBY_PLATFORM == "m68k-human" + mfile.printf "\ +$(DLLIB): $(OBJS) + ar cru $(DLLIB) $(OBJS) +" + else + mfile.printf "\ +$(DLLIB): $(OBJS) + ld $(DLDFLAGS) -r -o $(DLLIB) $(OBJS) +" + end + + if File.exist?("#{$srcdir}/depend") + dfile = open("#{$srcdir}/depend", "r") + mfile.printf "###\n" + while line = dfile.gets() + line.gsub!(/\.o\b/, ".#{$OBJEXT}") + if /bccwin32/ =~ RUBY_PLATFORM + line.gsub!(/(\s)([^\s\/]+\.[ch])/, '\1{$(srcdir)}\2') + else + line.gsub!(/(\s)([^\s\/]+\.[ch])/, '\1{$(srcdir)}\2') if /nmake/i =~ $make + end + mfile.printf "%s", line.gsub(/\$\(hdrdir\)\/config.h/, '$(topdir)/config.h') + end + dfile.close + end + mfile.close +end + +def extmake(target) + if $force_static or $static_ext[target] + $static = target + else + $static = false + end + + unless $install or $clean + return if $nodynamic and not $static + end + + $OBJEXT = CONFIG['OBJEXT'] + $LIBEXT = "a" + $objs = nil + $libs = CONFIG['DLDLIBS'].dup + $local_flags = "" + if /mswin32/ =~ RUBY_PLATFORM + $LIBEXT = "lib" + $local_flags = "-link /INCREMENTAL:no /EXPORT:Init_$(TARGET)" + elsif /bccwin32/ =~ RUBY_PLATFORM + $LIBEXT = "lib" + end + $LOCAL_LIBS = "" # to be assigned in extconf.rb + $CFLAGS = "" + $CPPFLAGS = CONFIG['CPPFLAGS'] + $LDFLAGS = "" + $LIBPATH = [$libdir] + + dir_config("opt") + + begin + dir = Dir.pwd + File.mkpath target unless File.directory?(target) + Dir.chdir target + $target = target + $mdir = target + unless $install or $clean + if $static_ext.size > 0 || + !File.exist?("./Makefile") || + older("./Makefile", $setup) || + older("./Makefile", "#{$top_srcdir}/ext/extmk.rb") || + older("./Makefile", "#{$top_srcdir}/ext/#{target}/makefile.rb") || + older("./Makefile", "#{$top_srcdir}/ext/#{target}/extconf.rb") + then + $defs = [] + Logging::logfile 'mkmf.log' + if File.exist?("#{$top_srcdir}/ext/#{target}/makefile.rb") + load "#{$top_srcdir}/ext/#{target}/makefile.rb" + elsif File.exist?("#{$top_srcdir}/ext/#{target}/extconf.rb") + load "#{$top_srcdir}/ext/#{target}/extconf.rb" + else + create_makefile(target) + end + end + end + if File.exist?("./Makefile") + if $static + $extlist.push [$static, $target, File.basename($target)] + end + if $install + if /bccwin32/ =~ RUBY_PLATFORM + system "#{$make} -DDESTDIR=#{$destdir} install" + else + system "#{$make} install DESTDIR=#{$destdir}" + end + elsif $clean + system "#{$make} #{$clean}" + else + unless system "#{$make} all" + if ENV["MAKEFLAGS"] != "k" and ENV["MFLAGS"] != "-k" + exit + end + end + end + end + if $static + $extlibs ||= "" + $extlibs += " " + $DLDFLAGS if $DLDFLAGS + $extlibs += " " + $LDFLAGS unless $LDFLAGS == "" + $extlibs += " " + $libs unless $libs == "" + $extlibs += " " + $LOCAL_LIBS unless $LOCAL_LIBS == "" + end + ensure + rm_f "conftest*" + Dir.chdir dir + end +end + +$make = ENV["MAKE"] +$make ||= with_config("make-prog", "make") + +File::makedirs('ext') +Dir::chdir('ext') + +# get static-link modules +$static_ext = {} +for setup in [CONFIG['setup'], File::join($top_srcdir, "ext", CONFIG['setup'])] + if File.file? setup + f = open(setup) + while line = f.gets() + line.chomp! + line.sub!(/#.*$/, '') + next if /^\s*$/ =~ line + if /^option +nodynamic/ =~ line + $nodynamic = true + next + end + target = line.split[0] + target = target.downcase if /mswin32|bccwin32/ =~ RUBY_PLATFORM + $static_ext[target] = true + end + $setup = setup + f.close + break + end +end + +ext_prefix = "#{$top_srcdir}/ext" +for d in Dir["#{ext_prefix}/**/*"] + File.directory?(d) || next + File.file?(d + "/MANIFEST") || next + + d.slice!(0, ext_prefix.length + 1) + if $install + print "installing ", d, "\n" + elsif $clean + print "cleaning ", d, "\n" + else + print "compiling ", d, "\n" + if RUBY_PLATFORM =~ /-aix/ and older("../ruby.imp", "../miniruby") + load "#{$top_srcdir}/ext/aix_mksym.rb" + end + end + $stdout.flush + extmake(d) +end + +if $install or $clean + Dir.chdir ".." + exit +end +$extinit = "" unless $extinit + +ruby = CONFIG["RUBY_INSTALL_NAME"] + CONFIG["EXEEXT"] +miniruby = "miniruby" + CONFIG["EXEEXT"] + +$extobjs = "" unless $extobjs +if $extlist.size > 0 + for s,t,i in $extlist + f = format("%s/%s.%s", s, i, $LIBEXT) + if File.exist?(f) + $extinit += format("\ +\tInit_%s();\n\ +\trb_provide(\"%s.so\");\n\ +", i, t) + $extobjs += "ext/" + $extobjs += f + $extobjs += " " + else + false + end + end + + if older("extinit.c", $setup) || older("extinit.c", "#{$top_srcdir}/ext/extmk.rb") + f = open("extinit.c", "w") + f.printf "void Init_ext() {\n" + f.printf $extinit + f.printf "}\n" + f.close + end + if older("extinit.#{$OBJEXT}", "extinit.c") + cmd = CONFIG["CC"] + " " + CFLAGS + " -c extinit.c" + print cmd, "\n" + system cmd or exit 1 + end + + Dir.chdir ".." + + if older(ruby, $setup) or older(ruby, miniruby) + rm_f ruby + end + + $extobjs = "ext/extinit.#{$OBJEXT} " + $extobjs + if RUBY_PLATFORM =~ /m68k-human|beos/ + $extlibs.gsub!("-L/usr/local/lib", "") if $extlibs + end + system format(%[#{$make} #{ruby} EXTOBJS='%s' EXTLIBS='%s'], $extobjs, $extlibs) +else + Dir.chdir ".." + if older(ruby, miniruby) + rm_f ruby + system("#{$make} #{ruby}") + end +end + +#Local variables: +# mode: ruby +#end: diff --git a/ext/fcntl/.cvsignore b/ext/fcntl/.cvsignore index fc802ff1c..408871223 100644 --- a/ext/fcntl/.cvsignore +++ b/ext/fcntl/.cvsignore @@ -1,2 +1,3 @@ Makefile mkmf.log +*.def diff --git a/ext/gdbm/.cvsignore b/ext/gdbm/.cvsignore index fc802ff1c..408871223 100644 --- a/ext/gdbm/.cvsignore +++ b/ext/gdbm/.cvsignore @@ -1,2 +1,3 @@ Makefile mkmf.log +*.def diff --git a/ext/iconv/.cvsignore b/ext/iconv/.cvsignore index fc802ff1c..408871223 100644 --- a/ext/iconv/.cvsignore +++ b/ext/iconv/.cvsignore @@ -1,2 +1,3 @@ Makefile mkmf.log +*.def diff --git a/ext/nkf/.cvsignore b/ext/nkf/.cvsignore index fc802ff1c..408871223 100644 --- a/ext/nkf/.cvsignore +++ b/ext/nkf/.cvsignore @@ -1,2 +1,3 @@ Makefile mkmf.log +*.def diff --git a/ext/pty/.cvsignore b/ext/pty/.cvsignore index fc802ff1c..408871223 100644 --- a/ext/pty/.cvsignore +++ b/ext/pty/.cvsignore @@ -1,2 +1,3 @@ Makefile mkmf.log +*.def diff --git a/ext/racc/cparse/.cvsignore b/ext/racc/cparse/.cvsignore index fc802ff1c..408871223 100644 --- a/ext/racc/cparse/.cvsignore +++ b/ext/racc/cparse/.cvsignore @@ -1,2 +1,3 @@ Makefile mkmf.log +*.def diff --git a/ext/readline/.cvsignore b/ext/readline/.cvsignore index fc802ff1c..408871223 100644 --- a/ext/readline/.cvsignore +++ b/ext/readline/.cvsignore @@ -1,2 +1,3 @@ Makefile mkmf.log +*.def diff --git a/ext/sdbm/.cvsignore b/ext/sdbm/.cvsignore index fc802ff1c..408871223 100644 --- a/ext/sdbm/.cvsignore +++ b/ext/sdbm/.cvsignore @@ -1,2 +1,3 @@ Makefile mkmf.log +*.def diff --git a/ext/socket/.cvsignore b/ext/socket/.cvsignore index fc802ff1c..408871223 100644 --- a/ext/socket/.cvsignore +++ b/ext/socket/.cvsignore @@ -1,2 +1,3 @@ Makefile mkmf.log +*.def diff --git a/ext/stringio/.cvsignore b/ext/stringio/.cvsignore index fc802ff1c..408871223 100644 --- a/ext/stringio/.cvsignore +++ b/ext/stringio/.cvsignore @@ -1,2 +1,3 @@ Makefile mkmf.log +*.def diff --git a/ext/strscan/.cvsignore b/ext/strscan/.cvsignore index fc802ff1c..408871223 100644 --- a/ext/strscan/.cvsignore +++ b/ext/strscan/.cvsignore @@ -1,2 +1,3 @@ Makefile mkmf.log +*.def diff --git a/ext/syslog/.cvsignore b/ext/syslog/.cvsignore index fc802ff1c..408871223 100644 --- a/ext/syslog/.cvsignore +++ b/ext/syslog/.cvsignore @@ -1,2 +1,3 @@ Makefile mkmf.log +*.def diff --git a/ext/tcltklib/.cvsignore b/ext/tcltklib/.cvsignore index f3c7a7c5d..90c83ed9b 100644 --- a/ext/tcltklib/.cvsignore +++ b/ext/tcltklib/.cvsignore @@ -1 +1,3 @@ Makefile +*.log +*.def diff --git a/ext/tk/.cvsignore b/ext/tk/.cvsignore index fc802ff1c..44e7f262d 100644 --- a/ext/tk/.cvsignore +++ b/ext/tk/.cvsignore @@ -1,2 +1,3 @@ Makefile mkmf.log +*.log diff --git a/ext/win32ole/.cvsignore b/ext/win32ole/.cvsignore index fc802ff1c..44e7f262d 100644 --- a/ext/win32ole/.cvsignore +++ b/ext/win32ole/.cvsignore @@ -1,2 +1,3 @@ Makefile mkmf.log +*.log diff --git a/instruby.rb b/instruby.rb index 7807837c5..26f97db0d 100644 --- a/instruby.rb +++ b/instruby.rb @@ -69,12 +69,8 @@ if RUBY_PLATFORM =~ /-aix/ File.install "ruby.imp", archlibdir, 0644, true end -Dir.chdir "ext" -if defined? CROSS_COMPILING - system "#{CONFIG['MINIRUBY']} extmk.rb install #{destdir}" -else - system "../miniruby#{exeext} extmk.rb install #{destdir}" -end +system "#{CONFIG['MINIRUBY']} #{CONFIG['srcdir']}/ext/extmk.rb install #{destdir}" + Dir.chdir CONFIG["srcdir"] File.install "sample/irb.rb", "#{bindir}/irb", 0755, true diff --git a/lib/mkmf.rb b/lib/mkmf.rb index ff00be245..68b324a82 100644 --- a/lib/mkmf.rb +++ b/lib/mkmf.rb @@ -80,14 +80,18 @@ end if /mswin32/ =~ RUBY_PLATFORM OUTFLAG = '-Fe' + CPPOUTFILE = '-P' elsif /bccwin32/ =~ RUBY_PLATFORM OUTFLAG = '-o' + CPPOUTFILE = '-oconftest.i' else OUTFLAG = '-o ' + CPPOUTFILE = '-o conftest.i' end + $LINK = "#{CONFIG['CC']} #{OUTFLAG}conftest -I#{$hdrdir} #{CFLAGS} %s %s #{CONFIG['LDFLAGS']} %s conftest.c %s %s #{CONFIG['LIBS']}" $CC = "#{CONFIG['CC']} -c #{CONFIG['CPPFLAGS']} %s -I#{$hdrdir} #{CFLAGS} %s %s conftest.c" -$CPP = "#{CONFIG['CPP']} #{CONFIG['CPPFLAGS']} %s -I#{$hdrdir} #{CFLAGS} %s %s conftest.c" +$CPP = "#{CONFIG['CPP']} #{CONFIG['CPPFLAGS']} %s -I#{$hdrdir} #{CFLAGS} %s %s %s conftest.c" def rm_f(*files) targets = [] @@ -113,28 +117,34 @@ def older(file1, file2) return false end -$log = nil -$orgerr = $stderr.dup -$orgout = $stdout.dup -$extmk = /extmk\.rb/ =~ $0 +module Logging + @log = nil + @logfile = 'mkmf.log' + @orgerr = $stderr.dup + @orgout = $stdout.dup -def logging - if $DEBUG - return yield + def self::open + @log ||= File::open(@logfile, 'w') + $stderr.reopen(@log) + $stdout.reopen(@log) + yield + ensure + $stderr.reopen(@orgerr) + $stdout.reopen(@orgout) + end + + def self::logfile file + @logfile = file + if @log and not @log.closed? + @log.close + @log = nil + end end - logfile = $extmk ? File.join($topdir, 'ext', 'extmk.log') : 'mkmf.log' - $log ||= open(logfile, 'w') - $stderr.reopen($log) - $stdout.reopen($log) - yield -ensure - $stderr.reopen($orgerr) - $stdout.reopen($orgout) end def xsystem command Config.expand(command) - logging do + Logging::open do puts command system(command) end @@ -142,7 +152,7 @@ end def xpopen command, *mode, &block Config.expand(command) - logging do + Logging::open do case mode[0] when nil, /^r/ puts "#{command} |" @@ -194,12 +204,20 @@ def try_compile(src, opt="") end end +def macro_defined?(macro, src, opt="") + try_cpp(src + <<EOP, opt) +#ifndef #{macro} +# error +#endif +EOP +end + def try_cpp(src, opt="") cfile = open("conftest.c", "w") cfile.print src cfile.close begin - xsystem(format($CPP, $CPPFLAGS, $CFLAGS, opt)) + xsystem(format($CPP, $CPPFLAGS, $CFLAGS, CPPOUTFILE, opt)) ensure rm_f "conftest*" end @@ -210,7 +228,7 @@ def egrep_cpp(pat, src, opt="") cfile.print src cfile.close begin - xpopen(format($CPP, $CFLAGS, $CPPFLAGS, opt)) do |f| + xpopen(format($CPP, $CFLAGS, $CPPFLAGS, '', opt)) do |f| if Regexp === pat puts(" ruby -ne 'print if /#{pat.source}/'") f.grep(pat) {|l| @@ -300,7 +318,7 @@ def append_library(libs, lib) end def message(*s) - unless $extmk + unless /extmk\.rb/ =~ $0 and not $VERBOSE print(*s) STDOUT.flush end @@ -526,7 +544,7 @@ def create_makefile(target, srcprefix = nil) end $DLDFLAGS = CONFIG["DLDFLAGS"] - $libs = CONFIG["LIBRUBYARG"] + " " + $libs + CONFIG["LIBS"] + $libs = CONFIG["LIBRUBYARG"] + " " + $libs + " " + CONFIG["LIBS"] $configure_args['--enable-shared'] or $LIBPATH |= [$topdir] $LIBPATH |= [CONFIG["libdir"]] diff --git a/win32/Makefile.sub b/win32/Makefile.sub index 3e60d08a5..d48d4bd01 100644 --- a/win32/Makefile.sub +++ b/win32/Makefile.sub @@ -153,10 +153,10 @@ OBJS = array.obj \ version.obj \ $(MISSING) -all: miniruby$(EXEEXT) rbconfig.rb ext/extmk.rb \ +all: miniruby$(EXEEXT) rbconfig.rb \ $(LIBRUBY) $(MISCLIBS) set LIB=..\..;$(ORGLIBPATH) - @.\miniruby$(EXEEXT) -Cext extmk.rb + @.\miniruby$(EXEEXT) $(srcdir)/ext/extmk.rb ruby: $(PROGRAM) rubyw: $(WPROGRAM) @@ -319,6 +319,7 @@ s,@DLEXT2@,dll,;t t s,@STRIP@,$(STRIP),;t t s,@EXTSTATIC@,$(EXTSTATIC),;t t s,@setup@,Setup,;t t +s,@MINIRUBY@,$(MINIRUBY),;t t s,@LIBRUBY_LDSHARED@,$(LIBRUBY_LDSHARED),;t t s,@LIBRUBY_DLDFLAGS@,$(LIBRUBY_DLDFLAGS),;t t s,@RUBY_INSTALL_NAME@,$(RUBY_INSTALL_NAME),;t t @@ -340,13 +341,13 @@ s,@srcdir@,$(srcdir),;t t s,@top_srcdir@,$(srcdir),;t t << -ext/extmk.rb: $(srcdir)/ext/extmk.rb.in config.status - @echo Creating ext/extmk.rb - @.\miniruby$(EXEEXT) $(srcdir)/ext/configsub.rb \ - -srcdir=$(srcdir) \ - -install_name=$(RUBY_INSTALL_NAME) \ - -so_name=$(RUBY_SO_NAME) \ - -output=$@ $(srcdir)/ext/extmk.rb.in +#ext/extmk.rb: $(srcdir)/ext/extmk.rb.in config.status +# @echo Creating ext/extmk.rb +# @.\miniruby$(EXEEXT) $(srcdir)/ext/configsub.rb \ +# -srcdir=$(srcdir) \ +# -install_name=$(RUBY_INSTALL_NAME) \ +# -so_name=$(RUBY_SO_NAME) \ +# -output=$@ $(srcdir)/ext/extmk.rb.in miniruby$(EXEEXT): $(OBJS) $(MAINOBJ) $(EXTOBJS) @echo $(EXTOBJS) @@ -396,13 +397,12 @@ clean-local: @if exist *.res del *.res clean-ext: - @-.\miniruby$(EXEEXT) -Cext extmk.rb clean + @-.\miniruby$(EXEEXT) $(srcdir)/ext/extmk.rb clean distclean: distclean-ext distclean-local distclean-local: clean-local @if exist Makefile del Makefile - @if exist ext\extmk.rb del ext\extmk.rb @if exist config.h del config.h @if exist ext\config.cache del ext\config.cache @if exist config.cache del config.cache @@ -431,7 +431,7 @@ distclean-local: clean-local @if exist miniruby$(EXEEXT) del miniruby$(EXEEXT) distclean-ext: - @-.\miniruby$(EXEEXT) -Cext extmk.rb distclean + @-.\miniruby$(EXEEXT) $(srcdir)/ext/extmk.rb distclean realclean: distclean @if exist parse.c del parse.c |