diff options
author | knu <knu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2003-01-25 18:59:34 +0000 |
---|---|---|
committer | knu <knu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2003-01-25 18:59:34 +0000 |
commit | f0103202cc0764f3be151d954b411af0ced8ebcd (patch) | |
tree | 39811750f5d3501bbf07c86f93dd590d35aa406c | |
parent | 8cc9a073b850c2f251af8301aca8a3b03bee402f (diff) | |
download | ruby-f0103202cc0764f3be151d954b411af0ced8ebcd.tar.gz ruby-f0103202cc0764f3be151d954b411af0ced8ebcd.tar.xz ruby-f0103202cc0764f3be151d954b411af0ced8ebcd.zip |
* 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: http://svn.ruby-lang.org/repos/ruby/trunk@3408 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
-rw-r--r-- | ChangeLog | 10 | ||||
-rw-r--r-- | Makefile.in | 19 | ||||
-rw-r--r-- | bcc32/Makefile.sub | 19 | ||||
-rw-r--r-- | ext/extmk.rb | 45 | ||||
-rw-r--r-- | instruby.rb | 68 | ||||
-rw-r--r-- | win32/Makefile.sub | 19 |
6 files changed, 122 insertions, 58 deletions
@@ -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 c4a229cf1..825a5f472 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 c2eb07ffc..c16430cd2 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 97cf4b4a2..2cee3df3d 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 7483f1e16..16caec158 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 5ba33b183..50647a60c 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 |