# Onigmo Makefile for mingw32

product_name = onigmo

# Comment out the next line, if you don't want to use LTCG.
USE_LTCG = 1

# Enable the next line, if you want to use a .def file.
#DEFFILE = onig.def


CPPFLAGS = 
CFLAGS = -O2 -Wall
LDFLAGS =
LOADLIBES =
ARLIB = ar
ARLIB_FLAGS = cr
ARDLL = gcc
ARDLL_FLAGS = -shared $(LINKFLAGS)
LINKFLAGS =

INSTALL = install -c
CP      = cp
CC = gcc
RC = windres
DEFS = -DHAVE_CONFIG_H -DNOT_RUBY -DEXPORT
RUBYDIR = ..
PYTHON = py

ifdef DEFFILE
# Use a .def file to export APIs.
CFLAGS = $(CFLAGS) -DONIG_EXTERN=extern
ARDLL_FLAGS = $(ARDLL_FLAGS) $(DEFFILE)
endif

subdirs = 

libbase   = onig
libname   = $(libbase)_s.a
dllname   = $(libbase).dll
dlllib    = $(libbase).a

onigheaders  = oniguruma.h regint.h regparse.h regenc.h st.h
posixheaders = onigposix.h
headers      = $(posixheaders) $(onigheaders)

onigobjs     = reggnu.o regerror.o regparse.o regext.o regcomp.o \
	       regexec.o regenc.o regsyntax.o regtrav.o \
	       regversion.o st.o
posixobjs    = regposix.o regposerr.o
libobjs      = $(onigobjs) $(posixobjs)

jp_objs      =  $(encdir)\euc_jp.o $(encdir)\sjis.o $(encdir)\cp932.o
iso8859_objs =  $(encdir)\iso8859_1.o  $(encdir)\iso8859_2.o \
		$(encdir)\iso8859_3.o  $(encdir)\iso8859_4.o \
		$(encdir)\iso8859_5.o  $(encdir)\iso8859_6.o \
		$(encdir)\iso8859_7.o  $(encdir)\iso8859_8.o \
		$(encdir)\iso8859_9.o  $(encdir)\iso8859_10.o \
		$(encdir)\iso8859_11.o $(encdir)\iso8859_13.o \
		$(encdir)\iso8859_14.o $(encdir)\iso8859_15.o \
		$(encdir)\iso8859_16.o

encobjs      =  $(encdir)\ascii.o $(encdir)\utf8.o \
		$(encdir)\unicode.o \
		$(encdir)\utf16_be.o $(encdir)\utf16_le.o \
		$(encdir)\utf32_be.o $(encdir)\utf32_le.o \
		$(jp_objs) $(iso8859_objs) \
		$(encdir)\euc_tw.o $(encdir)\euc_kr.o $(encdir)\big5.o \
		$(encdir)\gb18030.o \
		$(encdir)\koi8_r.o  \
		$(encdir)\cp1251.o # $(encdir)\koi8.o

resobj       = win32\onig.res

onigsources  = regerror.c regparse.c regext.c regcomp.c regexec.c regenc.c \
	       regsyntax.c regtrav.c regversion.c reggnu.c st.c
posixsources = regposix.c regposerr.c
libsources   = $(posixsources) $(onigsources)
rubysources  = $(onigsources)

encdir       = enc
distfiles    = README COPYING HISTORY \
		Makefile.in configure.in config.h.in configure \
		$(headers) $(libsources) \
		test.rb testconv.rb
testc        = testc
testcu       = testu
testp        = testp

makeargs = $(MFLAGS) CPPFLAGS='$(CPPFLAGS)' CFLAGS='$(CFLAGS)' CC='$(CC)'

.SUFFIXES:
.SUFFIXES: .o .c .h .ps .dvi .info .texinfo .res .rc

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

.rc.res:
	$(RC) -O coff -I. $< $@

# targets
default: all

setup:
	$(CP) win32/config.h config.h
	$(CP) win32/testc.c  testc.c


all: $(libname) $(dllname) 

$(libname): $(libobjs) $(encobjs)
	$(ARLIB) $(ARLIB_FLAGS) $@ $(libobjs) $(encobjs)

$(dllname): $(libobjs) $(encobjs) $(resobj) $(DEFFILE)
	$(ARDLL) $(libobjs) $(encobjs) $(resobj) -o $@ $(ARDLL_FLAGS) -Wl,--out-implib,$(dlllib)

regparse.o:  regparse.c $(onigheaders) config.h st.h
regext.o:    regext.c   $(onigheaders) config.h
regtrav.o:   regtrav.c  $(onigheaders) config.h
regcomp.o:   regcomp.c  $(onigheaders) config.h
regexec.o:   regexec.c  regint.h regenc.h oniguruma.h config.h
reggnu.o:    reggnu.c   regint.h regenc.h oniguruma.h config.h oniggnu.h
regerror.o:  regerror.c regint.h regenc.h oniguruma.h config.h
regenc.o:    regenc.c   regint.h regenc.h oniguruma.h config.h
regsyntax.o: regsyntax.c regint.h regenc.h oniguruma.h config.h
regversion.o: regversion.c oniguruma.h config.h
regposix.o:  regposix.c $(posixheaders) oniguruma.h config.h
regposerr.o: regposerr.c $(posixheaders) config.h
st.o:        st.c regint.h oniguruma.h config.h st.h

$(encdir)\ascii.o:      $(encdir)\ascii.c regenc.h config.h
$(encdir)\unicode.o:    $(encdir)\unicode.c regint.h regenc.h config.h $(encdir)\unicode\casefold.h $(encdir)\unicode\name2ctype.h
$(encdir)\utf8.o:       $(encdir)\utf8.c regenc.h config.h
$(encdir)\utf16_be.o:   $(encdir)\utf16_be.c regenc.h config.h
$(encdir)\utf16_le.o:   $(encdir)\utf16_le.c regenc.h config.h
$(encdir)\utf32_be.o:   $(encdir)\utf32_be.c regenc.h config.h
$(encdir)\utf32_le.o:   $(encdir)\utf32_le.c regenc.h config.h
$(encdir)\euc_jp.o:     $(encdir)\euc_jp.c regenc.h config.h $(encdir)\jis\props.h
$(encdir)\euc_tw.o:     $(encdir)\euc_tw.c regenc.h config.h
$(encdir)\euc_kr.o:     $(encdir)\euc_kr.c regenc.h config.h
$(encdir)\sjis.o:       $(encdir)\sjis.c regenc.h config.h $(encdir)\jis\props.h
$(encdir)\cp932.o:      $(encdir)\cp932.c $(encdir)\sjis.c regenc.h config.h $(encdir)\jis\props.h
$(encdir)\iso8859_1.o:  $(encdir)\iso8859_1.c regenc.h config.h
$(encdir)\iso8859_2.o:  $(encdir)\iso8859_2.c regenc.h config.h
$(encdir)\iso8859_3.o:  $(encdir)\iso8859_3.c regenc.h config.h
$(encdir)\iso8859_4.o:  $(encdir)\iso8859_4.c regenc.h config.h
$(encdir)\iso8859_5.o:  $(encdir)\iso8859_5.c regenc.h config.h
$(encdir)\iso8859_6.o:  $(encdir)\iso8859_6.c regenc.h config.h
$(encdir)\iso8859_7.o:  $(encdir)\iso8859_7.c regenc.h config.h
$(encdir)\iso8859_8.o:  $(encdir)\iso8859_8.c regenc.h config.h
$(encdir)\iso8859_9.o:  $(encdir)\iso8859_9.c regenc.h config.h
$(encdir)\iso8859_10.o: $(encdir)\iso8859_10.c regenc.h config.h
$(encdir)\iso8859_11.o: $(encdir)\iso8859_11.c regenc.h config.h
$(encdir)\iso8859_13.o: $(encdir)\iso8859_13.c regenc.h config.h
$(encdir)\iso8859_14.o: $(encdir)\iso8859_14.c regenc.h config.h
$(encdir)\iso8859_15.o: $(encdir)\iso8859_15.c regenc.h config.h
$(encdir)\iso8859_16.o: $(encdir)\iso8859_16.c regenc.h config.h
$(encdir)\koi8.o:       $(encdir)\koi8.c   regenc.h config.h
$(encdir)\koi8_r.o:     $(encdir)\koi8_r.c regenc.h config.h
$(encdir)\cp1251.o:     $(encdir)\cp1251.c regenc.h config.h
$(encdir)\big5.o:       $(encdir)\big5.c   regenc.h config.h
$(encdir)\gb18030.o:    $(encdir)\gb18030.c   regenc.h config.h

win32\onig.res: win32\onig.rc oniguruma.h


# Ruby test
rtest:
	$(RUBYDIR)\win32\ruby -w -Ke test.rb

# C library test
ctest: $(testc)
	.\$(testc)

# POSIX C library test
ptest: $(testp)
	.\$(testp)

$(testc): $(testc).c $(libname)
	$(CC) -o $(testc) -DONIG_EXTERN=extern $(testc).c $(libname)

$(testp): $(testc).c $(dlllib)
	$(CC) -DPOSIX_TEST -o $(testp) $(testc).c $(dlllib)

#$(testc)u.c: test.rb testconvu.rb
#	ruby -Ke testconvu.rb test.rb > $@

$(testcu): $(testcu).c $(libname)
	$(CC) -o $(testcu) -DONIG_EXTERN=extern $(testcu).c $(libname)

$(libbase).def: win32\makedef.py oniguruma.h regenc.h oniggnu.h onigposix.h
	$(PYTHON) win32\makedef.py > $@

clean:
	-rm -f *.o $(encdir)/*.o *.a *.dll $(testp).exe $(testc).exe $(testcu).exe win32/*.res


# backup file suffix
SORIG = ruby_orig

# ruby 1.9 source update
19:
	$(CP) regerror.c    $(RUBYDIR)
	$(CP) regparse.c    $(RUBYDIR)
	$(CP) regcomp.c     $(RUBYDIR)
	$(CP) regexec.c     $(RUBYDIR)
	$(CP) regenc.c      $(RUBYDIR)
	$(CP) regint.h      $(RUBYDIR)
	$(CP) regparse.h    $(RUBYDIR)
	$(CP) regenc.h      $(RUBYDIR)
	$(CP) oniguruma.h   $(RUBYDIR)
	$(CP) enc\ascii.c   $(RUBYDIR)
	$(CP) enc\utf8.c    $(RUBYDIR)
	$(CP) enc\euc_jp.c  $(RUBYDIR)
	$(CP) enc\sjis.c    $(RUBYDIR)
	$(CP) enc\unicode.c $(RUBYDIR)


samples: all
	$(CC) $(CFLAGS) -I. -o simple  sample\simple.c  $(dlllib)
	$(CC) $(CFLAGS) -I. -o posix   sample\posix.c   $(dlllib)
	$(CC) $(CFLAGS) -I. -o names   sample\names.c   $(dlllib)
	$(CC) $(CFLAGS) -I. -o listcap sample\listcap.c $(dlllib)
	$(CC) $(CFLAGS) -I. -o sql     sample\sql.c     $(dlllib)
	$(CC) $(CFLAGS) -I. -o encode  sample\encode.c  $(dlllib)
	$(CC) $(CFLAGS) -I. -o syntax  sample\syntax.c  $(dlllib)
	$(CC) $(CFLAGS) -I. -o crnl    sample\crnl.c    $(dlllib)
