summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorknu <knu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2003-01-25 18:59:34 +0000
committerknu <knu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2003-01-25 18:59:34 +0000
commit78f457a5d57b06e2e28931e46bef2ee64a0de8a9 (patch)
tree39811750f5d3501bbf07c86f93dd590d35aa406c
parentcdc46f0f833cad58fd3a2e3499a6f06a11eebb5c (diff)
* instruby.rb, ext/extmk.rb, Makefile.in, win32/Makefile.sub,
bcc32/Makefile.sub: Replace the complicated MFLAGS/MAKEFLAGS parser with something plain and comprehensible. This fixes a bug where make flags were wrongly reordered and the resulted command line often did not make sense especially when BSD make is used with extra arguments given. Tested with FreeBSD and Linux by me and mswin32, bccwin32 and mingw by usa. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@3408 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
-rw-r--r--ChangeLog10
-rw-r--r--Makefile.in19
-rw-r--r--bcc32/Makefile.sub19
-rw-r--r--ext/extmk.rb45
-rw-r--r--instruby.rb68
-rw-r--r--win32/Makefile.sub19
6 files changed, 122 insertions, 58 deletions
diff --git a/ChangeLog b/ChangeLog
index 1068adb..1e29d3c 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,13 @@
+Sun Jan 26 03:37:18 2003 Akinori MUSHA <knu@iDaemons.org>
+
+ * instruby.rb, ext/extmk.rb, Makefile.in, win32/Makefile.sub,
+ bcc32/Makefile.sub: Replace the complicated MFLAGS/MAKEFLAGS
+ parser with something plain and comprehensible. This fixes a
+ bug where make flags were wrongly reordered and the resulted
+ command line often did not make sense especially when BSD make
+ is used with extra arguments given. Tested with FreeBSD and
+ Linux by me and mswin32, bccwin32 and mingw by usa.
+
Fri Jan 24 18:15:33 2003 Yukihiro Matsumoto <matz@ruby-lang.org>
* parse.y: tMINUS should have lower precedence than tPOW.
diff --git a/Makefile.in b/Makefile.in
index c4a229c..825a5f4 100644
--- a/Makefile.in
+++ b/Makefile.in
@@ -102,8 +102,13 @@ OBJS = array.@OBJEXT@ \
MANTYPE = @MANTYPE@
+SCRIPT_ARGS = --dest-dir="$(DESTDIR)" \
+ --make="$(MAKE)" \
+ --mflags="$(MFLAGS)" \
+ --make-flags="$(MAKEFLAGS)"
+
all: @MAKEFILES@ miniruby$(EXEEXT) rbconfig.rb $(LIBRUBY)
- @$(MINIRUBY) $(srcdir)/ext/extmk.rb --extstatic="@EXTSTATIC@" --make="$(MAKE)" --make-flags="$(MFLAGS)$(MAKEFLAGS)"
+ @$(MINIRUBY) $(srcdir)/ext/extmk.rb --extstatic="@EXTSTATIC@" $(SCRIPT_ARGS)
miniruby$(EXEEXT): config.status $(LIBRUBY_A) $(MAINOBJ) dmyext.@OBJEXT@
@rm -f $@
@@ -128,15 +133,15 @@ ruby.imp: $(LIBRUBY_A)
# $(MINIRUBY) $< $@
install: rbconfig.rb
- $(MINIRUBY) $(srcdir)/instruby.rb --make="$(MAKE)" --make-flags="$(MFLAGS)$(MAKEFLAGS)" --mantype=$(MANTYPE) $(DESTDIR)
- $(MINIRUBY) $(srcdir)/ext/extmk.rb --make="$(MAKE)" --make-flags="$(MFLAGS)$(MAKEFLAGS) DESTDIR=$(DESTDIR)" install
+ $(MINIRUBY) $(srcdir)/instruby.rb $(SCRIPT_ARGS) --mantype="$(MANTYPE)"
+ $(MINIRUBY) $(srcdir)/ext/extmk.rb $(SCRIPT_ARGS) install
what-where no-install: rbconfig.rb
- $(MINIRUBY) $(srcdir)/instruby.rb --make="$(MAKE)" --make-flags="$(MFLAGS)$(MAKEFLAGS) -n" --mantype=$(MANTYPE) $(DESTDIR)
- $(MINIRUBY) $(srcdir)/ext/extmk.rb --make="$(MAKE)" --make-flags="$(MFLAGS)$(MAKEFLAGS) -n DESTDIR=$(DESTDIR)" install
+ $(MINIRUBY) $(srcdir)/instruby.rb -n $(SCRIPT_ARGS) --mantype="$(MANTYPE)"
+ $(MINIRUBY) $(srcdir)/ext/extmk.rb -n $(SCRIPT_ARGS) install
clean-ext:
- @-$(MINIRUBY) $(srcdir)/ext/extmk.rb --make="$(MAKE)" --make-flags="$(MFLAGS)$(MAKEFLAGS)" clean 2> /dev/null || true
+ @-$(MINIRUBY) $(srcdir)/ext/extmk.rb $(SCRIPT_ARGS) clean 2> /dev/null || true
clean-local:
@rm -f $(OBJS) $(MAINOBJ) $(LIBRUBY_A) $(LIBRUBY_SO) $(LIBRUBY_ALIASES)
@@ -146,7 +151,7 @@ clean-local:
clean: clean-ext clean-local
distclean-ext:
- @-$(MINIRUBY) $(srcdir)/ext/extmk.rb --make="$(MAKE)" --make-flags="$(MFLAGS)$(MAKEFLAGS)" distclean 2> /dev/null || true
+ @-$(MINIRUBY) $(srcdir)/ext/extmk.rb $(SCRIPT_ARGS) distclean 2> /dev/null || true
distclean-local: clean-local
@rm -f @MAKEFILES@ config.h rbconfig.rb
diff --git a/bcc32/Makefile.sub b/bcc32/Makefile.sub
index c2eb07f..c16430c 100644
--- a/bcc32/Makefile.sub
+++ b/bcc32/Makefile.sub
@@ -182,9 +182,14 @@ OBJS = array.obj \
version.obj \
$(MISSING)
+SCRIPT_ARGS = "--dest-dir=$(DESTDIR)" \
+ "--make=$(MAKE)" \
+ "--mflags=$(MFLAGS)" \
+ "--make-flags=$(MAKEFLAGS)"
+
all: miniruby$(EXEEXT) rbconfig.rb \
$(LIBRUBY) $(MISCLIBS)
- .\miniruby$(EXEEXT) $(srcdir)ext/extmk.rb --extstatic=$(EXTSTATIC) --make "$(MAKE)" --make-flags "$(MFLAGS)$(MAKEFLAGS)"
+ .\miniruby$(EXEEXT) $(srcdir)ext/extmk.rb --extstatic=$(EXTSTATIC) $(SCRIPT_ARGS)
ruby: $(PROGRAM)
rubyw: $(WPROGRAM)
@@ -408,12 +413,12 @@ $(RUBYDEF): $(LIBRUBY_A) miniruby$(EXEEXT)
$(MINIRUBY) $(srcdir)bcc32/mkexports.rb -output=$@ $(LIBRUBY_A)
install: rbconfig.rb
- $(MINIRUBY) $(srcdir)instruby.rb --make "$(MAKE)" --make-flags "$(MFLAGS)$(MAKEFLAGS)" $(DESTDIR)
- $(MINIRUBY) $(srcdir)ext/extmk.rb --make "$(MAKE)" --make-flags "$(MFLAGS)$(MAKEFLAGS) DESTDIR=$(DESTDIR)" install
+ $(MINIRUBY) $(srcdir)instruby.rb $(SCRIPT_ARGS)
+ $(MINIRUBY) $(srcdir)ext/extmk.rb $(SCRIPT_ARGS) install
what-where no-install: rbconfig.rb
- $(MINIRUBY) $(srcdir)instruby.rb --make "$(MAKE)" --make-flags "$(MFLAGS)$(MAKEFLAGS) -n" $(DESTDIR)
- $(MINIRUBY) $(srcdir)ext/extmk.rb --make "$(MAKE)" --make-flags "$(MFLAGS)$(MAKEFLAGS) -n DESTDIR=$(DESTDIR)" install
+ $(MINIRUBY) $(srcdir)instruby.rb -n $(SCRIPT_ARGS)
+ $(MINIRUBY) $(srcdir)ext/extmk.rb -n $(SCRIPT_ARGS) install
clean: clean-ext clean-local
@@ -430,7 +435,7 @@ clean-local:
@if exist *.il? del *.il?
clean-ext:
- @-$(MINIRUBY) $(srcdir)ext/extmk.rb --make "$(MAKE)" --make-flags "$(MFLAGS)$(MAKEFLAGS)" clean
+ @-$(MINIRUBY) $(srcdir)ext/extmk.rb $(SCRIPT_ARGS) clean
distclean: distclean-ext distclean-local
@@ -464,7 +469,7 @@ distclean-local: clean-local
@if exist miniruby$(EXEEXT) del miniruby$(EXEEXT)
distclean-ext:
- @-$(MINIRUBY) $(srcdir)ext/extmk.rb --make "$(MAKE)" --make-flags "$(MFLAGS)$(MAKEFLAGS)" distclean
+ @-$(MINIRUBY) $(srcdir)ext/extmk.rb $(SCRIPT_ARGS) distclean
realclean: distclean
@if exist parse.c del parse.c
diff --git a/ext/extmk.rb b/ext/extmk.rb
index 97cf4b4..2cee3df 100644
--- a/ext/extmk.rb
+++ b/ext/extmk.rb
@@ -27,6 +27,7 @@ $:.replace [srcdir, srcdir+"/lib", "."]
require 'mkmf'
require 'ftools'
require 'shellwords'
+require 'getopts'
$topdir = File.expand_path(".")
$top_srcdir = srcdir
@@ -113,22 +114,40 @@ def extmake(target)
true
end
-require 'getopts'
+def parse_args()
+ getopts('n', 'extstatic:', 'dest-dir:',
+ 'make:', 'make-flags:', 'mflags:')
+
+ $dryrun = $OPT['n']
+ $force_static = $OPT['extstatic'] == 'static'
+ $destdir = $OPT['dest-dir'] || ''
+ $make = $OPT['make'] || $make
+ make_flags = ($OPT['make-flags'] || '').strip
+ mflags = ($OPT['mflags'] || '').strip
+
+ # BSD make defines both MFLAGS and MAKEFLAGS, and MAKEFLAGS it
+ # defines includes a preceding '-' unlike other implementations.
+ # So we use MFLAGS if defined, otherwise use ('-' + MAKEFLAGS).
+ if mflags.empty?
+ mflags = "-#{make_flags}" unless make_flags.empty?
+ end
-getopts('', 'extstatic', 'make:', 'make-flags:')
+ $mflags = Shellwords.shellwords(mflags)
+ $make, *rest = Shellwords.shellwords($make)
+ $mflags.unshift(*rest) unless rest.empty?
-$force_static = $OPT['extstatic'] == 'static'
-$make = $OPT['make'] || $make
-$mflags = Shellwords.shellwords($OPT['make-flags'] || "").uniq
-$mflags[0].sub!(/^\w+$/, '-\&') unless $mflags.empty?
-$make, *$mflags[0, 0] = Shellwords.shellwords($make)
+ $mflags << '-n' if $dryrun
-$mflags.delete_if{|x| x == '-' || x == '--'}
+ $mflags << "DESTDIR=#{$destdir}"
-mflags = $mflags.grep(/^-([^-])/){$1}.join
-mflags.downcase! if $nmake == ?m
-$continue = mflags.include?(?k)
-$dryrun = mflags.include?(?n)
+ # Most make implementations put each flag separated in MAKEFLAGS, so
+ # we can just search for an option with exact match. Only nmake
+ # puts flags together, but nmake does not propagate -k via MAKEFLAGS
+ # anyway.
+ $continue = $mflags.include?('-k')
+end
+
+parse_args()
unless $message
if $message = ARGV.shift and /^[a-z]+$/ =~ $message
@@ -149,8 +168,6 @@ unless $message
end
end
-$mflags = $mflags.partition{|x| x[0] == ?-}.flatten!
-
EXEEXT = CONFIG['EXEEXT']
if CROSS_COMPILING
$ruby = CONFIG['MINIRUBY']
diff --git a/instruby.rb b/instruby.rb
index 7483f1e..16caec1 100644
--- a/instruby.rb
+++ b/instruby.rb
@@ -11,18 +11,40 @@ require 'tempfile'
File.umask(0)
-getopts("n", "make:", "make-flags:", "mantype:doc")
-$dryrun = $OPT["n"]
-mflags = Shellwords.shellwords($OPT["make-flags"] || "").uniq
-mflags[0].sub!(/^\w+$/, '-\&') unless mflags.empty?
-make, *mflags[0, 0] = Shellwords.shellwords($OPT['make'] || ENV["MAKE"] || "")
-mflags = mflags.grep(/^-([^-])/){$1}.join
-mflags.downcase! if /nmake/i == make
-$dryrun = true if mflags.include?(?n)
-mantype = $OPT["mantype"]
-
-ARGV.delete_if{|x|x[0] == ?-}
-destdir = ARGV[0] || ''
+def parse_args()
+ getopts('n', 'dest-dir:',
+ 'make:', 'make-flags:', 'mflags:',
+ 'mantype:doc')
+
+ $dryrun = $OPT['n']
+ $destdir = $OPT['dest-dir'] || ''
+ $make = $OPT['make'] || $make
+ make_flags = ($OPT['make-flags'] || '').strip
+ mflags = ($OPT['mflags'] || '').strip
+ $mantype = $OPT["mantype"]
+
+ # BSD make defines both MFLAGS and MAKEFLAGS, and MAKEFLAGS it
+ # defines includes a preceding '-' unlike other implementations.
+ # So we use MFLAGS if defined, otherwise use ('-' + MAKEFLAGS).
+ if mflags.empty?
+ mflags = "-#{make_flags}" unless make_flags.empty?
+ end
+
+ $mflags = Shellwords.shellwords(mflags)
+ $make, *rest = Shellwords.shellwords($make)
+ $mflags.unshift(*rest) unless rest.empty?
+
+ $mflags << '-n' if $dryrun
+
+ $mflags << "DESTDIR=#{$destdir}"
+
+ # Most make implementations put each flag separated in MAKEFLAGS, so
+ # we can just search with exact match. Only nmake puts flags
+ # together, but nmake does not propagate -k via MAKEFLAGS anyway.
+ $continue = $mflags.include?('-k')
+end
+
+parse_args()
include FileUtils::Verbose
include FileUtils::NoWrite if $dryrun
@@ -36,13 +58,13 @@ ruby_install_name = CONFIG["ruby_install_name"]
rubyw_install_name = CONFIG["rubyw_install_name"]
version = CONFIG["ruby_version"]
-bindir = destdir+CONFIG["bindir"]
-libdir = destdir+CONFIG["libdir"]
-rubylibdir = destdir+CONFIG["rubylibdir"]
-archlibdir = destdir+CONFIG["archdir"]
-sitelibdir = destdir+CONFIG["sitelibdir"]
-sitearchlibdir = destdir+CONFIG["sitearchdir"]
-mandir = File.join(destdir+CONFIG["mandir"], "man")
+bindir = $destdir+CONFIG["bindir"]
+libdir = $destdir+CONFIG["libdir"]
+rubylibdir = $destdir+CONFIG["rubylibdir"]
+archlibdir = $destdir+CONFIG["archdir"]
+sitelibdir = $destdir+CONFIG["sitelibdir"]
+sitearchlibdir = $destdir+CONFIG["sitearchdir"]
+mandir = File.join($destdir+CONFIG["mandir"], "man")
configure_args = Shellwords.shellwords(CONFIG["configure_args"])
enable_shared = CONFIG["ENABLE_SHARED"] == 'yes'
dll = CONFIG["LIBRUBY_SO"]
@@ -139,12 +161,12 @@ end
Dir.glob("*.[1-9]") do |mdoc|
section = mdoc[-1,1]
- destdir = mandir + section
- destfile = File.join(destdir, mdoc.sub(/ruby/, ruby_install_name))
+ $destdir = mandir + section
+ destfile = File.join($destdir, mdoc.sub(/ruby/, ruby_install_name))
- makedirs destdir
+ makedirs $destdir
- if mantype == "doc"
+ if $mantype == "doc"
install mdoc, destfile, 0644
else
require 'mdoc2man.rb'
diff --git a/win32/Makefile.sub b/win32/Makefile.sub
index 5ba33b1..50647a6 100644
--- a/win32/Makefile.sub
+++ b/win32/Makefile.sub
@@ -169,9 +169,14 @@ OBJS = array.obj \
version.obj \
$(MISSING)
+SCRIPT_ARGS = "--dest-dir=$(DESTDIR)" \
+ "--make=$(MAKE)" \
+ "--mflags=$(MFLAGS)" \
+ "--make-flags=$(MAKEFLAGS)"
+
all: ext miniruby$(EXEEXT) rbconfig.rb \
$(LIBRUBY) $(MISCLIBS)
- @$(MINIRUBY) $(srcdir)/ext/extmk.rb --extstatic=$(EXTSTATIC) --make "$(MAKE)" --make-flags "$(MFLAGS)$(MAKEFLAGS)"
+ @$(MINIRUBY) $(srcdir)/ext/extmk.rb --extstatic=$(EXTSTATIC) $(SCRIPT_ARGS)
ext:
@mkdir $@
@@ -408,12 +413,12 @@ $(RUBYDEF): $(LIBRUBY_A) miniruby$(EXEEXT)
$(AR) $(ARFLAGS)$@ -def:$<
install: rbconfig.rb
- $(MINIRUBY) $(srcdir)/instruby.rb --make-flags "$(MFLAGS)$(MAKEFLAGS)" $(DESTDIR)
- $(MINIRUBY) $(srcdir)/ext/extmk.rb --make "$(MAKE)" --make-flags "$(MFLAGS)$(MAKEFLAGS) DESTDIR=$(DESTDIR)" install
+ $(MINIRUBY) $(srcdir)/instruby.rb $(SCRIPT_ARGS)
+ $(MINIRUBY) $(srcdir)/ext/extmk.rb $(SCRIPT_ARGS) install
what-where no-install: rbconfig.rb
- $(MINIRUBY) $(srcdir)/instruby.rb --make-flags "$(MFLAGS)$(MAKEFLAGS) -n" $(DESTDIR)
- $(MINIRUBY) $(srcdir)/ext/extmk.rb --make "$(MAKE)" --make-flags "$(MFLAGS)$(MAKEFLAGS) -n DESTDIR=$(DESTDIR)" install
+ $(MINIRUBY) $(srcdir)/instruby.rb -n $(SCRIPT_ARGS)
+ $(MINIRUBY) $(srcdir)/ext/extmk.rb -n $(SCRIPT_ARGS) install
clean: clean-ext clean-local
@@ -428,7 +433,7 @@ clean-local:
@if exist *.res del *.res
clean-ext:
- @-$(MINIRUBY) $(srcdir)/ext/extmk.rb --make "$(MAKE)" --make-flags "$(MFLAGS)$(MAKEFLAGS)" clean
+ @-$(MINIRUBY) $(srcdir)/ext/extmk.rb $(SCRIPT_ARGS) clean
distclean: distclean-ext distclean-local
@@ -462,7 +467,7 @@ distclean-local: clean-local
@if exist miniruby$(EXEEXT) del miniruby$(EXEEXT)
distclean-ext:
- @-$(MINIRUBY) $(srcdir)/ext/extmk.rb --make "$(MAKE)" --make-flags "$(MFLAGS)$(MAKEFLAGS)" distclean
+ @-$(MINIRUBY) $(srcdir)/ext/extmk.rb $(SCRIPT_ARGS) distclean
realclean: distclean
@if exist parse.c del parse.c