From 4f26f3b8902a59ec27070f8cf1fd038561894f4d Mon Sep 17 00:00:00 2001 From: eban Date: Sun, 8 Sep 2002 09:08:15 +0000 Subject: * 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: svn+ssh://ci.ruby-lang.org/ruby/trunk@2819 b2dd03c8-39d4-4d8f-98ff-823fe69b080e --- ext/.cvsignore | 3 +- ext/Win32API/.cvsignore | 2 + ext/curses/.cvsignore | 1 + ext/dbm/.cvsignore | 1 + ext/digest/.cvsignore | 1 + ext/digest/md5/.cvsignore | 1 + ext/digest/rmd160/.cvsignore | 1 + ext/digest/sha1/.cvsignore | 1 + ext/digest/sha2/.cvsignore | 1 + ext/dl/.cvsignore | 1 + ext/etc/.cvsignore | 1 + ext/extmk.rb | 549 +++++++++++++++++++++++++++++++++++++++++++ ext/fcntl/.cvsignore | 1 + ext/gdbm/.cvsignore | 1 + ext/iconv/.cvsignore | 1 + ext/nkf/.cvsignore | 1 + ext/pty/.cvsignore | 1 + ext/racc/cparse/.cvsignore | 1 + ext/readline/.cvsignore | 1 + ext/sdbm/.cvsignore | 1 + ext/socket/.cvsignore | 1 + ext/stringio/.cvsignore | 1 + ext/strscan/.cvsignore | 1 + ext/syslog/.cvsignore | 1 + ext/tcltklib/.cvsignore | 2 + ext/tk/.cvsignore | 1 + ext/win32ole/.cvsignore | 1 + 27 files changed, 577 insertions(+), 2 deletions(-) create mode 100644 ext/extmk.rb (limited to 'ext') diff --git a/ext/.cvsignore b/ext/.cvsignore index a3fac48ae6..ab2424ff7a 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 f3c7a7c5da..90c83ed9b1 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 fc802ff1c2..4088712231 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 fc802ff1c2..4088712231 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 fc802ff1c2..4088712231 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 fc802ff1c2..4088712231 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 fc802ff1c2..4088712231 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 fc802ff1c2..4088712231 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 fc802ff1c2..4088712231 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 94a01c4ba7..6d884b6cec 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 fc802ff1c2..4088712231 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 0000000000..77757dc830 --- /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 < /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 fc802ff1c2..4088712231 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 fc802ff1c2..4088712231 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 fc802ff1c2..4088712231 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 fc802ff1c2..4088712231 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 fc802ff1c2..4088712231 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 fc802ff1c2..4088712231 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 fc802ff1c2..4088712231 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 fc802ff1c2..4088712231 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 fc802ff1c2..4088712231 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 fc802ff1c2..4088712231 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 fc802ff1c2..4088712231 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 fc802ff1c2..4088712231 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 f3c7a7c5da..90c83ed9b1 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 fc802ff1c2..44e7f262dc 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 fc802ff1c2..44e7f262dc 100644 --- a/ext/win32ole/.cvsignore +++ b/ext/win32ole/.cvsignore @@ -1,2 +1,3 @@ Makefile mkmf.log +*.log -- cgit v1.2.3