Skip to content
Browse files

* 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
  • Loading branch information...
1 parent 8cc9a07 commit f0103202cc0764f3be151d954b411af0ced8ebcd @knu knu committed Jan 25, 2003
Showing with 122 additions and 58 deletions.
  1. +10 −0 ChangeLog
  2. +12 −7 Makefile.in
  3. +12 −7 bcc32/Makefile.sub
  4. +31 −14 ext/extmk.rb
  5. +45 −23 instruby.rb
  6. +12 −7 win32/Makefile.sub
View
10 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.
View
19 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
View
19 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
View
45 ext/extmk.rb
@@ -27,6 +27,7 @@
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 @@ def extmake(target)
end
end
-$mflags = $mflags.partition{|x| x[0] == ?-}.flatten!
-
EXEEXT = CONFIG['EXEEXT']
if CROSS_COMPILING
$ruby = CONFIG['MINIRUBY']
View
68 instruby.rb
@@ -11,18 +11,40 @@
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 @@
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 @@
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'
View
19 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

0 comments on commit f010320

Please sign in to comment.
Something went wrong with that request. Please try again.