Skip to content

Commit

Permalink
* instruby.rb, ext/extmk.rb, Makefile.in, win32/Makefile.sub,
Browse files Browse the repository at this point in the history
  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
  • Loading branch information
knu committed Jan 25, 2003
1 parent cdc46f0 commit 78f457a
Show file tree
Hide file tree
Showing 6 changed files with 122 additions and 58 deletions.
10 changes: 10 additions & 0 deletions ChangeLog
Original file line number Diff line number Diff line change
@@ -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.
Expand Down
19 changes: 12 additions & 7 deletions Makefile.in
Original file line number Diff line number Diff line change
Expand Up @@ -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 $@
Expand All @@ -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)
Expand All @@ -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
Expand Down
19 changes: 12 additions & 7 deletions bcc32/Makefile.sub
Original file line number Diff line number Diff line change
Expand Up @@ -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)
Expand Down Expand Up @@ -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

Expand All @@ -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

Expand Down Expand Up @@ -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
Expand Down
45 changes: 31 additions & 14 deletions ext/extmk.rb
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,7 @@
require 'mkmf'
require 'ftools'
require 'shellwords'
require 'getopts'

$topdir = File.expand_path(".")
$top_srcdir = srcdir
Expand Down Expand Up @@ -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
Expand All @@ -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']
Expand Down
68 changes: 45 additions & 23 deletions instruby.rb
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand All @@ -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"]
Expand Down Expand Up @@ -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'
Expand Down
19 changes: 12 additions & 7 deletions win32/Makefile.sub
Original file line number Diff line number Diff line change
Expand Up @@ -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 $@
Expand Down Expand Up @@ -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

Expand All @@ -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

Expand Down Expand Up @@ -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
Expand Down

0 comments on commit 78f457a

Please sign in to comment.