diff options
-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 |