SHELL = /bin/sh

#### Start of system configuration section. ####

srcdir = @srcdir@
VPATH = @srcdir@:@srcdir@/missing

CC = @CC@
YACC = @YACC@
PURIFY =
@SET_MAKE@

prefix = @prefix@
CFLAGS = @CFLAGS@ -I. -I@srcdir@ -I@includedir@
LDFLAGS = @STATIC@ $(CFLAGS) @LDFLAGS@
EXTLIBS = 
LIBS = @LIBS@ $(EXTLIBS)
MISSING = @LIBOBJS@ @ALLOCA@
LDSHARED = @LDSHARED@
DLDFLAGS = @DLDFLAGS@
SOLIBS = @SOLIBS@

binsuffix = @binsuffix@

#### End of system configuration section. ####


LIBRUBY	      = @LIBRUBY@
LIBRUBYARG    = @LIBRUBYARG@

EXTOBJS	      = 

MAINOBJ	      = main.o

OBJS	      = array.o \
		bignum.o \
		class.o \
		compar.o \
		dir.o \
		dln.o \
		enum.o \
		error.o \
		eval.o \
		file.o \
		fnmatch.o \
		gc.o \
		glob.o \
		hash.o \
		inits.o \
		io.o \
		marshal.o \
		math.o \
		numeric.o \
		object.o \
		pack.o \
		parse.o \
		process.o \
		random.o \
		range.o \
		re.o \
		regex.o \
		ruby.o \
		signal.o \
		sprintf.o \
		st.o \
		string.o \
		struct.o \
		time.o \
		util.o \
		variable.o \
		version.o \
		$(MISSING)

all:		miniruby$(binsuffix) rbconfig.rb
		@./miniruby$(binsuffix) -Xext extmk.rb @EXTSTATIC@

miniruby$(binsuffix):	$(OBJS) $(MAINOBJ) dmyext.o
		@rm -f $@
		$(PURIFY) $(CC) $(LDFLAGS) $(MAINOBJ) $(OBJS) dmyext.o $(LIBS) -o $@

ruby$(binsuffix):     	$(LIBRUBY) $(MAINOBJ) $(EXTOBJS) 
		@rm -f $@
		$(PURIFY) $(CC) $(LDFLAGS) $(MAINOBJ) $(EXTOBJS) $(LIBRUBYARG) $(LIBS) -o $@

libruby.a:	$(OBJS) dmyext.o
		@AR@ rcu $@ $(OBJS) dmyext.o
		@-@RANLIB@ $@ 2> /dev/null || true

libruby.so:	$(OBJS) dmyext.o
		$(LDSHARED) $(DLDFLAGS) $(SOLIBS) $(OBJS) dmyext.o -o $@

install:	rbconfig.rb
		./miniruby$(binsuffix) $(srcdir)/instruby.rb $(DESTDIR)

clean:;		@rm -f $(OBJS) $(LIBRUBY) $(MAINOBJ) rbconfig.rb
		@rm -f ext/extinit.c ext/extinit.o dmyext.o
		@if test -f ./miniruby$(binsuffix); then \
			./miniruby$(binsuffix) -Xext extmk.rb clean; \
		fi

distclean:	clean
		@rm -f Makefile ext/extmk.rb config.h
		@rm -f ext/config.cache config.cache config.log config.status
		@rm -f parse.c *~ core *.core gmon.out y.tab.c y.output
		@rm -f ruby$(binsuffix) miniruby$(binsuffix)

realclean:	distclean
		@rm -f lex.c

test:		miniruby$(binsuffix)
		@./miniruby$(binsuffix) $(srcdir)/rubytest.rb

rbconfig.rb:	config.status miniruby$(binsuffix)
		@./miniruby$(binsuffix) $(srcdir)/mkconfig.rb rbconfig.rb

.c.o:
	$(CC) $(CFLAGS) $(CPPFLAGS) -c $<

lex.c: keywords
	gperf -p -j1 -i 1 -g -o -t -N rb_reserved_word -k1,3,$$ @srcdir@/keywords > lex.c

parse.c: parse.y
	$(YACC) $<
	mv -f y.tab.c parse.c

alloca.o: @srcdir@/missing/alloca.c
	$(CC) -I. $(CFLAGS) $(CPPFLAGS) -c @srcdir@/missing/alloca.c

crypt.o: @srcdir@/missing/crypt.c
	$(CC) -I. $(CFLAGS) $(CPPFLAGS) -c @srcdir@/missing/crypt.c

dup2.o: @srcdir@/missing/dup2.c
	$(CC) -I. $(CFLAGS) $(CPPFLAGS) -c @srcdir@/missing/dup2.c

flock.o: @srcdir@/missing/flock.c
	$(CC) -I. $(CFLAGS) $(CPPFLAGS) -c @srcdir@/missing/flock.c

memcmp.o: @srcdir@/missing/memcmp.c
	$(CC) $(CFLAGS) $(CPPFLAGS) -c @srcdir@/missing/memcmp.c

memmove.o: @srcdir@/missing/memmove.c
	$(CC) $(CFLAGS) $(CPPFLAGS) -c @srcdir@/missing/memmove.c

mkdir.o: @srcdir@/missing/mkdir.c
	$(CC) $(CFLAGS) $(CPPFLAGS) -c @srcdir@/missing/mkdir.c

setenv.o: @srcdir@/missing/setenv.c
	$(CC) $(CFLAGS) $(CPPFLAGS) -c @srcdir@/missing/setenv.c

vsnprintf.o: @srcdir@/missing/vsnprintf.c
	$(CC) $(CFLAGS) $(CPPFLAGS) -c @srcdir@/missing/vsnprintf.c

strcasecmp.o: @srcdir@/missing/strcasecmp.c
	$(CC) $(CFLAGS) $(CPPFLAGS) -c @srcdir@/missing/strcasecmp.c

strchr.o: @srcdir@/missing/strchr.c
	$(CC) $(CFLAGS) $(CPPFLAGS) -c @srcdir@/missing/strchr.c

strdup.o: @srcdir@/missing/strdup.c
	$(CC) $(CFLAGS) $(CPPFLAGS) -c @srcdir@/missing/strdup.c

strerror.o: @srcdir@/missing/strerror.c
	$(CC) $(CFLAGS) $(CPPFLAGS) -c @srcdir@/missing/strerror.c

strftime.o: @srcdir@/missing/strftime.c
	$(CC) -I. $(CFLAGS) $(CPPFLAGS) -c @srcdir@/missing/strftime.c

strstr.o: @srcdir@/missing/strstr.c
	$(CC) $(CFLAGS) $(CPPFLAGS) -c @srcdir@/missing/strstr.c

strtol.o: @srcdir@/missing/strtol.c
	$(CC) $(CFLAGS) $(CPPFLAGS) -c @srcdir@/missing/strtol.c

strtoul.o: @srcdir@/missing/strtoul.c
	$(CC) $(CFLAGS) $(CPPFLAGS) -c @srcdir@/missing/strtoul.c

nt.o: @srcdir@/missing/nt.c
	$(CC) $(CFLAGS) $(CPPFLAGS) -c @srcdir@/missing/nt.c

x68.o: @srcdir@/missing/x68.c
	$(CC) $(CFLAGS) $(CPPFLAGS) -c @srcdir@/missing/x68.c

# Prevent GNU make v3 from overflowing arg limit on SysV.
.NOEXPORT:
###
parse.o: parse.y ruby.h config.h defines.h intern.h env.h node.h st.h regex.h util.h lex.c
###
array.o: array.c ruby.h config.h defines.h intern.h
bignum.o: bignum.c ruby.h config.h defines.h intern.h
class.o: class.c ruby.h config.h defines.h intern.h node.h st.h
compar.o: compar.c ruby.h config.h defines.h intern.h
dir.o: dir.c ruby.h config.h defines.h intern.h
dln.o: dln.c config.h defines.h dln.h
dmyext.o: dmyext.c
enum.o: enum.c ruby.h config.h defines.h intern.h
error.o: error.c ruby.h config.h defines.h intern.h env.h
eval.o: eval.c ruby.h config.h defines.h intern.h node.h env.h rubysig.h st.h dln.h
file.o: file.c ruby.h config.h defines.h intern.h rubyio.h rubysig.h
fnmatch.o: fnmatch.c config.h fnmatch.h
gc.o: gc.c ruby.h config.h defines.h intern.h rubysig.h st.h node.h env.h re.h regex.h
glob.o: config.h glob.c fnmatch.h
hash.o: hash.c ruby.h config.h defines.h intern.h st.h rubysig.h
inits.o: inits.c ruby.h config.h defines.h intern.h
io.o: io.c ruby.h config.h defines.h intern.h rubyio.h rubysig.h
main.o: main.c ruby.h config.h defines.h intern.h
marshal.o: marshal.c ruby.h config.h defines.h intern.h rubyio.h st.h
math.o: math.c ruby.h config.h defines.h intern.h
numeric.o: numeric.c ruby.h config.h defines.h intern.h
object.o: object.c ruby.h config.h defines.h intern.h st.h
pack.o: pack.c ruby.h config.h defines.h intern.h
process.o: process.c ruby.h config.h defines.h intern.h rubysig.h st.h
random.o: random.c ruby.h config.h defines.h intern.h
range.o: range.c ruby.h config.h defines.h intern.h
re.o: re.c ruby.h config.h defines.h intern.h re.h regex.h
regex.o: regex.c config.h regex.h util.h
ruby.o: ruby.c ruby.h config.h defines.h intern.h dln.h
signal.o: signal.c ruby.h config.h defines.h intern.h rubysig.h
sprintf.o: sprintf.c ruby.h config.h defines.h intern.h
st.o: st.c config.h st.h
string.o: string.c ruby.h config.h defines.h intern.h re.h regex.h
struct.o: struct.c ruby.h config.h defines.h intern.h
time.o: time.c ruby.h config.h defines.h intern.h
util.o: util.c ruby.h config.h defines.h intern.h util.h
variable.o: variable.c ruby.h config.h defines.h intern.h env.h node.h st.h
version.o: version.c ruby.h config.h defines.h intern.h version.h
