summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authoryugui <yugui@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2009-03-03 11:40:11 +0000
committeryugui <yugui@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2009-03-03 11:40:11 +0000
commitc2109f71a6ffde319d845558c07e6eac803aa21f (patch)
treef327cbc644bb97a0992fd9299c5662eb72bb73e7
parent5002cf082f9f621c055cb77ff90658f74f5ff3b5 (diff)
merges r22592 from trunk into ruby_1_9_1.
-- * common.mk (main): split from exts and makes main program after building exts with miniruby, to get rid of overwriting running program. [ruby-core:22339] * Makefile.in, win32/Makefile.sub (RUNCMD, MKMAIN_CMD): macros to run script file. * ext/extmk.rb (parse_args): added --command-output option which creates script file to make main program. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/branches/ruby_1_9_1@22737 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
-rw-r--r--ChangeLog12
-rw-r--r--Makefile.in3
-rw-r--r--common.mk13
-rw-r--r--ext/extmk.rb34
-rw-r--r--win32/Makefile.sub8
5 files changed, 59 insertions, 11 deletions
diff --git a/ChangeLog b/ChangeLog
index 94e6194820..2da2152a25 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,15 @@
+Tue Feb 24 19:01:05 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * common.mk (main): split from exts and makes main program after
+ building exts with miniruby, to get rid of overwriting running
+ program. [ruby-core:22339]
+
+ * Makefile.in, win32/Makefile.sub (RUNCMD, MKMAIN_CMD): macros to
+ run script file.
+
+ * ext/extmk.rb (parse_args): added --command-output option which
+ creates script file to make main program.
+
Tue Feb 24 17:58:07 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
* common.mk (ripper.c): exec can't work on Windows.
diff --git a/Makefile.in b/Makefile.in
index c29dcf352e..b59b0cbb9e 100644
--- a/Makefile.in
+++ b/Makefile.in
@@ -1,5 +1,6 @@
SHELL = /bin/sh
NULLCMD = :
+RUNCMD = $(SHELL)
exec = exec
#### Start of system configuration section. ####
@@ -116,6 +117,8 @@ DLEXT = @DLEXT@
MANTYPE = @MANTYPE@
INSTALLED_LIST= .installed.list
+
+MKMAIN_CMD = mkmain.sh
#### End of variables
all:
diff --git a/common.mk b/common.mk
index 9a5c7d0921..552bb1954c 100644
--- a/common.mk
+++ b/common.mk
@@ -122,9 +122,16 @@ BOOTSTRAPRUBY = $(BASERUBY)
COMPILE_PRELUDE = $(MINIRUBY) -I$(srcdir) -rrbconfig $(srcdir)/tool/compile_prelude.rb
-all: encs exts
-exts: $(MKFILES) incs $(PREP) $(RBCONFIG) $(LIBRUBY)
- @$(MINIRUBY) $(srcdir)/ext/extmk.rb --make="$(MAKE)" $(EXTMK_ARGS)
+all: encs exts main
+
+main: exts
+ @$(RUNCMD) $(MKMAIN_CMD) MAKE=$(MAKE)
+
+exts: $(MKMAIN_CMD)
+
+$(MKMAIN_CMD): $(MKFILES) incs $(PREP) $(RBCONFIG) $(LIBRUBY)
+ @$(MINIRUBY) $(srcdir)/ext/extmk.rb --make="$(MAKE)" --command-output=$@ $(EXTMK_ARGS)
+
prog: $(PROGRAM) $(WPROGRAM)
loadpath: $(PREP)
diff --git a/ext/extmk.rb b/ext/extmk.rb
index 5a99f323d8..adca9b4030 100644
--- a/ext/extmk.rb
+++ b/ext/extmk.rb
@@ -16,6 +16,7 @@ $extlibs = nil
$extpath = nil
$ignore = nil
$message = nil
+$command_output = nil
$progname = $0
alias $PROGRAM_NAME $0
@@ -230,6 +231,7 @@ end
def parse_args()
$mflags = []
+ $makeflags = []
$optparser ||= OptionParser.new do |opts|
opts.on('-n') {$dryrun = true}
@@ -258,11 +260,15 @@ def parse_args()
if arg = v.first
arg.insert(0, '-') if /\A[^-][^=]*\Z/ =~ arg
end
+ $makeflags.concat(v.reject {|arg| /\AMINIRUBY=/ =~ arg}.quote)
$mflags.concat(v)
end
opts.on('--message [MESSAGE]', String) do |v|
$message = v
end
+ opts.on('--command-output=FILE', String) do |v|
+ $command_output = v
+ end
end
begin
$optparser.parse!(ARGV)
@@ -521,6 +527,7 @@ void Init_ext _((void))\n{\n#$extinit}
puts(*conf)
$stdout.flush
$mflags.concat(conf)
+ $makeflags.concat(conf)
else
FileUtils.rm_f(extinit.to_a)
end
@@ -537,9 +544,10 @@ Dir.chdir ".."
unless $destdir.to_s.empty?
$mflags.defined?("DESTDIR") or $mflags << "DESTDIR=#{$destdir}"
end
-puts "making #{rubies.join(', ')}"
-$stdout.flush
+message = "making #{rubies.join(', ')}"
$mflags.concat(rubies)
+$makeflags.uniq!
+$makeflags.concat(rubies)
if $nmake == ?b
unless (vars = $mflags.grep(/\A\w+=/n)).empty?
@@ -555,7 +563,27 @@ if $nmake == ?b
end
$mflags.unshift("topdir=#$topdir")
ENV.delete("RUBYOPT")
-system($make, *sysquote($mflags)) or exit($?.exitstatus)
+if $command_output
+ message = "echo #{message}"
+ cmd = [$make, *sysquote($makeflags)].join(' ')
+ open($command_output, 'wb') do |f|
+ case $command_output
+ when /\.sh\z/
+ f.puts message, "rm -f $0; exec #{cmd}"
+ when /\.bat\z/
+ ["@echo off", message, cmd, "del %0 & exit %ERRORLEVEL%"].each do |s|
+ f.print s, "\r\n"
+ end
+ else
+ f.puts cmd
+ end
+ f.chmod(0755)
+ end
+else
+ puts message
+ $stdout.flush
+ system($make, *sysquote($mflags)) or exit($?.exitstatus)
+end
#Local variables:
# mode: ruby
diff --git a/win32/Makefile.sub b/win32/Makefile.sub
index c8bb336f4d..3d4f13024d 100644
--- a/win32/Makefile.sub
+++ b/win32/Makefile.sub
@@ -1,6 +1,7 @@
# -*- makefile -*-
SHELL = $(COMSPEC)
+RUNCMD = $(COMSPEC) /c
MKFILES = Makefile
NULL = nul
@@ -258,6 +259,8 @@ ASMEXT = asm
INSTALLED_LIST= .installed.list
+MKMAIN_CMD = mkmain.bat
+
!if !defined(WINMAINOBJ)
WINMAINOBJ = winmain.$(OBJEXT)
!endif
@@ -803,20 +806,15 @@ ext/extinit.obj: ext/extinit.c $(SETUP)
$(INSNS):
@$(RM) $(PROGRAM)
-$(BASERUBY) -Ks $(srcdir)/tool/insns2vm.rb $(INSNS2VMOPT) $@
- if not exist $@ copy $(srcdir:/=\)\$(@F) $@
node_name.inc:
-$(BASERUBY) -n $(srcdir)/tool/node_name.rb $? > $@
- if not exist $@ copy $(srcdir:/=\)\$(@F) $@
known_errors.inc:
-$(BASERUBY) $(srcdir)/tool/generic_erb.rb -c -o $@ $(srcdir)/template/known_errors.inc.tmpl $(srcdir)/defs/known_errors.def
- if not exist $@ copy $(srcdir:/=\)\$(@F) $@
miniprelude.c:
-$(BASERUBY) -I$(srcdir) $(srcdir)/tool/compile_prelude.rb $(srcdir)/prelude.rb $@
- if not exist $@ copy $(srcdir:/=\)\$(@F) $@
newline.c:
-$(BASERUBY) "$(srcdir)/tool/transcode-tblgen.rb" -vo newline.c $(srcdir)/enc/trans/newline.trans
- if not exist $@ copy $(srcdir:/=\)\$(@F) $@