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 /ext | |
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
Diffstat (limited to 'ext')
-rw-r--r-- | ext/.cvsignore | 3 | ||||
-rw-r--r-- | ext/Win32API/.cvsignore | 2 | ||||
-rw-r--r-- | ext/curses/.cvsignore | 1 | ||||
-rw-r--r-- | ext/dbm/.cvsignore | 1 | ||||
-rw-r--r-- | ext/digest/.cvsignore | 1 | ||||
-rw-r--r-- | ext/digest/md5/.cvsignore | 1 | ||||
-rw-r--r-- | ext/digest/rmd160/.cvsignore | 1 | ||||
-rw-r--r-- | ext/digest/sha1/.cvsignore | 1 | ||||
-rw-r--r-- | ext/digest/sha2/.cvsignore | 1 | ||||
-rw-r--r-- | ext/dl/.cvsignore | 1 | ||||
-rw-r--r-- | ext/etc/.cvsignore | 1 | ||||
-rw-r--r-- | ext/extmk.rb | 549 | ||||
-rw-r--r-- | ext/fcntl/.cvsignore | 1 | ||||
-rw-r--r-- | ext/gdbm/.cvsignore | 1 | ||||
-rw-r--r-- | ext/iconv/.cvsignore | 1 | ||||
-rw-r--r-- | ext/nkf/.cvsignore | 1 | ||||
-rw-r--r-- | ext/pty/.cvsignore | 1 | ||||
-rw-r--r-- | ext/racc/cparse/.cvsignore | 1 | ||||
-rw-r--r-- | ext/readline/.cvsignore | 1 | ||||
-rw-r--r-- | ext/sdbm/.cvsignore | 1 | ||||
-rw-r--r-- | ext/socket/.cvsignore | 1 | ||||
-rw-r--r-- | ext/stringio/.cvsignore | 1 | ||||
-rw-r--r-- | ext/strscan/.cvsignore | 1 | ||||
-rw-r--r-- | ext/syslog/.cvsignore | 1 | ||||
-rw-r--r-- | ext/tcltklib/.cvsignore | 2 | ||||
-rw-r--r-- | ext/tk/.cvsignore | 1 | ||||
-rw-r--r-- | ext/win32ole/.cvsignore | 1 |
27 files changed, 577 insertions, 2 deletions
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 |