diff options
author | nobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2002-10-21 14:03:46 +0000 |
---|---|---|
committer | nobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2002-10-21 14:03:46 +0000 |
commit | e7ce523bb172c36b61cd5fc8d141a4488323bd84 (patch) | |
tree | 9def4bcac6871845573108cd38c51ead73dfc2c0 /ext | |
parent | 76e8a9e82870393e5cef137526e811a878404096 (diff) |
* configure.in (XCFLAGS): CFLAGS to comile ruby itself.
* configure.in (LIBEXT): suffix for static libraries.
* configure.in (LIBPATHFLAG): switch template to specify library
path.
* configure.in (LINK_SO): command to link shared objects.
* configure.in (DEFFILE, ARCHFILE): miscellaneous system dependent
files.
* configure.in (EXPORT_PREFIX): prefix to exported symbols on
Windows.
* configure.in (COMMON_LIBS, COMMON_MACROS, COMMON_HEADERS):
libraries, macros and headers used in common.
* configure.in (RUBYW_INSTALL_NAME, rubyw_install_name): GUI mode
excutable name.
* Makefile.in (CFLAGS): append XCFLAGS.
* Makefile.in (PREP): miscellaneous system dependent files.
* Makefile.in (ruby.imp, ext/extinit.o): moved from ext/extmk.rb.
* Makefile.in (fake.rb): CROSS_COMPILING keeps building platform.
* Makefile.in (MAKEFILES): depend on *.in and config.status.
* Makefile.in (parse.c): replace "y.tab.c" with actual name for
byacc.
* ext/extmk.rb, lib/mkmf.rb: integrated.
* ext/extmk.rb: propagate MFLAGS.
* ext/extmk.rb (extmake): make dummy Makefile to clean even if no
Makefile is made.
* lib/mkmf.rb (older): accept multiple file names and Time
objects.
* lib/mkmf.rb (xsystem): split and qoute.
* lib/mkmf.rb (cpp_include): make include directives.
* lib/mkmf.rb (try_func): try wheather specified function is
available.
* lib/mkmf.rb (install_files): default to site-install.
* lib/mkmf.rb (checking_for): added.
* lib/mkmf.rb (find_executable0): just find executable file with
no message.
* lib/mkmf.rb (create_header): output header file is variable.
* lib/mkmf.rb (create_makefile): separate sections.
* lib/mkmf.rb (init_mkmf): initialize global variables.
* win32/Makefile.sub, bcc32/Makefile.sub (CPP, AR): added.
* bcc32/Makefile.sub (ARCH): fixed to i386.
* win32/Makefile.sub, bcc32/Makefile.sub (miniruby): should not
link EXTOBJS.
* ext/dl/extconf.rb: use try_cpp to cross compile.
* ext/dl/extconf.rb: not modify files in source directory.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@2974 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'ext')
-rw-r--r-- | ext/dl/extconf.rb | 39 | ||||
-rw-r--r-- | ext/extmk.rb | 545 |
2 files changed, 123 insertions, 461 deletions
diff --git a/ext/dl/extconf.rb b/ext/dl/extconf.rb index 46b3c6c87d..dd9c3844e4 100644 --- a/ext/dl/extconf.rb +++ b/ext/dl/extconf.rb @@ -33,19 +33,25 @@ else end $with_dlstack = ! $with_asm -$with_type_int = try_run(<<EOF) -int main(){ return sizeof(int) == sizeof(long); } +$with_type_int = try_cpp(<<EOF) +#include "config.h" +#if SIZEOF_INT == SIZEOF_LONG +#error int not needed +#endif EOF -$with_type_float = try_run(<<EOF) -int main(){ return sizeof(float) == sizeof(double); } +$with_type_float = try_cpp(<<EOF) +#include "config.h" +#if SIZEOF_FLOAT == SIZEOF_DOUBLE +#error float not needed +#endif EOF -$with_type_voidp = try_run(<<EOF) -int main(){ - return (sizeof(void *) == sizeof(long)) - || (sizeof(void *) == sizeof(int)); -} +$with_type_voidp = try_cpp(<<EOF) +#include "config.h" +#if SIZEOF_VOIDP == SIZEOF_INT || SIZEOF_VOIDP == SIZEOF_LONG +#error void* not needed +#endif EOF $with_type_char = DLTYPE[CHAR][:sym] @@ -176,21 +182,6 @@ $INSTALLFILES = [ ["dl.h", "$(archdir)$(target_prefix)", ""], ] -if /bccwin32/ =~ RUBY_PLATFORM - srcdir = $top_srcdir + "/ext/dl/" - if !FileTest.exist?( srcdir+"dl.def.org" ) - File.copy( srcdir+"dl.def", srcdir+"dl.def.org" ) - open( srcdir+"dl.def.org" ){ |f| - open( "dl.def", "w" ) { |g| - g.print f.gets - while line = f.gets - g.print "_", line - end - } - } - end -end - create_makefile('dl') rescue SystemExit # do nothing diff --git a/ext/extmk.rb b/ext/extmk.rb index 50b2890a22..ebe562c7d4 100644 --- a/ext/extmk.rb +++ b/ext/extmk.rb @@ -1,4 +1,4 @@ -#! /usr/local/bin/ruby +#! /usr/local/bin/ruby -s # -*- ruby -*- $force_static = nil @@ -9,24 +9,6 @@ $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 ["."] @@ -37,350 +19,27 @@ srcdir = Config::CONFIG["srcdir"] $:.replace [srcdir, srcdir+"/lib", "."] require 'mkmf' -require 'find' require 'ftools' require 'shellwords' $topdir = File.expand_path(".") $top_srcdir = srcdir - -# avoid warning for $VERBOSE mode -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 /linux/ =~ RUBY_PLATFORM and $configure_args['--enable-shared'] and CONFIG["GNU_LD"] == "yes" - $DLDFLAGS << " -Wl,-no-undefined" - end - - 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 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 +$hdrdir = $top_srcdir def extmake(target) + print "#{$message} #{target}\n" + $stdout.flush if $force_static or $static_ext[target] $static = target else $static = false end - unless $install or $clean + unless $ignore 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] - $INCFLAGS = "-I#{$topdir}" - - dir_config("opt") + init_mkmf begin dir = Dir.pwd @@ -388,164 +47,176 @@ def extmake(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") + $srcdir = File.join($top_srcdir, "ext", $mdir) + unless $ignore + if $static || + older("./Makefile", *MTIMES + %w"#{$srcdir}/makefile.rb #{$srcdir}/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" + Config::CONFIG["srcdir"] = $srcdir + if File.exist?("#{$srcdir}/makefile.rb") + load "#{$srcdir}/makefile.rb" + elsif File.exist?("#{$srcdir}/extconf.rb") + load "#{$srcdir}/extconf.rb" else create_makefile(target) end + Config::CONFIG["srcdir"] = $top_srcdir end end if File.exist?("./Makefile") if $static - $extlist.push [$static, $target, File.basename($target)] + $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 + unless system *ARGV + $ignore or $continue or exit(1) end + else + open("./Makefile", "w") {|f| + f.print configuration($srcdir), makerules(nil) + } end if $static + $extflags ||= "" $extlibs ||= "" - $extlibs += " " + $DLDFLAGS if $DLDFLAGS - $extlibs += " " + $LDFLAGS unless $LDFLAGS == "" + $extflags += " " + $DLDFLAGS if $DLDFLAGS + $extflags += " " + $LDFLAGS unless $LDFLAGS == "" $extlibs += " " + $libs unless $libs == "" $extlibs += " " + $LOCAL_LIBS unless $LOCAL_LIBS == "" end + rescue SystemExit + # ignore ensure rm_f "conftest*" Dir.chdir dir end end -$make = ENV["MAKE"] -$make ||= with_config("make-prog", "make") +if ARGV[0] == "static" + ARGV.shift + $force_static = true +end + +$make = ARGV[0] if ARGV[0] +ARGV << $make if ARGV.empty? and $make +if mflags = ENV["MAKEFLAGS"] + mflags, = mflags.split(nil, 2) +else + mflags = ENV["MFLAGS"] || "" +end +$continue = mflags.include?(?k) +$dryrun = mflags.include?(?n) + +unless $message + if ARGV.size > 1 and /^[a-z]+$/ =~ ($message = ARGV[-1]) + $message = $message.sub(/^(?:dist|real)(?=(?:clean)?$)/, '\1') + case $message + when "clean" + $ignore ||= true + when "install" + $ignore ||= true + ARGV[1, 0] = ["INSTALL_PROG=install -m 0755", "INSTALL_DATA=install -m 0644"] if $dryrun + end + $message.sub!(/e?$/, "ing") + else + $message = "compiling" + end +end + +EXEEXT = CONFIG['EXEEXT'] +if defined? CROSS_COMPILING + $ruby = CONFIG['MINIRUBY'] +elsif $nmake + $ruby = '$(topdir:/=\\)\\miniruby' + EXEEXT +else + $ruby = '$(topdir)/miniruby' + EXEEXT +end +$ruby << " -I$(topdir) -I$(hdrdir)/lib" +$config_h = '$(topdir)/config.h' -File::makedirs('ext') -Dir::chdir('ext') +MTIMES = [File.mtime(__FILE__)] # get static-link modules $static_ext = {} -for setup in [CONFIG['setup'], File::join($top_srcdir, "ext", CONFIG['setup'])] +for dir in ["ext", File::join($top_srcdir, "ext")] + setup = File::join(dir, 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 + target, opt = line.split(nil, 3) + if target == 'option' + case opt + when 'nodynamic' + $nodynamic = true + end next end - target = line.split[0] target = target.downcase if /mswin32|bccwin32/ =~ RUBY_PLATFORM $static_ext[target] = true end + MTIMES << f.mtime $setup = setup f.close break end end +File::makedirs('ext') +Dir::chdir('ext') + ext_prefix = "#{$top_srcdir}/ext" -for d in Dir["#{ext_prefix}/**/*"] - File.directory?(d) || next - File.file?(d + "/MANIFEST") || next - +Dir.glob("#{ext_prefix}/**/MANIFEST") do |d| + d = File.dirname(d) 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 +if $ignore 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 + $extinit ||= "" + $extobjs ||= "" 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 + $extinit += "\tInit_#{i}();\n\trb_provide(\"#{t}.so\");\n" + $extobjs += "ext/#{f} " 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 + src = "void Init_ext() {\n#$extinit}\n" + if older("extinit.c", *MTIMES) || IO.read("extinit.c") != src + open("extinit.c", "w") {|f| f.print src} 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 + conf = ['SETUP='+$setup, 'EXTOBJS='+$extobjs.strip] + conf << 'EXTLIBS='+$extlibs.strip if $extlibs + conf << 'EXTLDFLAGS='+$extflags.strip if $extflags + puts conf + ARGV.concat(conf) end +rubies = [] +%w[RUBY RUBYW].each {|r| + r = CONFIG[r+"_INSTALL_NAME"] and !r.empty? and rubies << r+EXEEXT +} + +Dir.chdir ".." +puts "making #{rubies.join(', ')}" +ARGV.concat(rubies) +host = (defined?(CROSS_COMPILING) ? CROSS_COMPILING : RUBY_PLATFORM) +/mswin|bccwin|mingw|djgpp|human|os2|macos/ =~ host or exec(*ARGV) +system(*ARGV.quote) or exit($?.exitstatus) #Local variables: # mode: ruby |