summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ChangeLog27
-rw-r--r--MANIFEST2
-rw-r--r--Makefile.in8
-rw-r--r--bcc32/Makefile.sub24
-rw-r--r--configure.in5
-rw-r--r--ext/.cvsignore3
-rw-r--r--ext/Win32API/.cvsignore2
-rw-r--r--ext/curses/.cvsignore1
-rw-r--r--ext/dbm/.cvsignore1
-rw-r--r--ext/digest/.cvsignore1
-rw-r--r--ext/digest/md5/.cvsignore1
-rw-r--r--ext/digest/rmd160/.cvsignore1
-rw-r--r--ext/digest/sha1/.cvsignore1
-rw-r--r--ext/digest/sha2/.cvsignore1
-rw-r--r--ext/dl/.cvsignore1
-rw-r--r--ext/etc/.cvsignore1
-rw-r--r--ext/extmk.rb549
-rw-r--r--ext/fcntl/.cvsignore1
-rw-r--r--ext/gdbm/.cvsignore1
-rw-r--r--ext/iconv/.cvsignore1
-rw-r--r--ext/nkf/.cvsignore1
-rw-r--r--ext/pty/.cvsignore1
-rw-r--r--ext/racc/cparse/.cvsignore1
-rw-r--r--ext/readline/.cvsignore1
-rw-r--r--ext/sdbm/.cvsignore1
-rw-r--r--ext/socket/.cvsignore1
-rw-r--r--ext/stringio/.cvsignore1
-rw-r--r--ext/strscan/.cvsignore1
-rw-r--r--ext/syslog/.cvsignore1
-rw-r--r--ext/tcltklib/.cvsignore2
-rw-r--r--ext/tk/.cvsignore1
-rw-r--r--ext/win32ole/.cvsignore1
-rw-r--r--instruby.rb8
-rw-r--r--lib/mkmf.rb62
-rw-r--r--win32/Makefile.sub24
35 files changed, 679 insertions, 60 deletions
diff --git a/ChangeLog b/ChangeLog
index b91c345..5fe006b 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -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.
diff --git a/MANIFEST b/MANIFEST
index 771640a..55a17d0 100644
--- a/MANIFEST
+++ b/MANIFEST
@@ -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 c966010..fec6198 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 31b9236..1bdb70b 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 357eb74..d299c63 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 a3fac48..ab2424f 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 f3c7a7c..90c83ed 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 fc802ff..4088712 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 fc802ff..4088712 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 fc802ff..4088712 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 fc802ff..4088712 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 fc802ff..4088712 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 fc802ff..4088712 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 fc802ff..4088712 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 94a01c4..6d884b6 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 fc802ff..4088712 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 0000000..77757dc
--- /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 fc802ff..4088712 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 fc802ff..4088712 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 fc802ff..4088712 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 fc802ff..4088712 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 fc802ff..4088712 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 fc802ff..4088712 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 fc802ff..4088712 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 fc802ff..4088712 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 fc802ff..4088712 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 fc802ff..4088712 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 fc802ff..4088712 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 fc802ff..4088712 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 f3c7a7c..90c83ed 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 fc802ff..44e7f26 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 fc802ff..44e7f26 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 7807837..26f97db 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 ff00be2..68b324a 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 3e60d08..d48d4bd 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