# Multi-purpose C++ class library
# libapolloron
# Tachibanamasashi, Apolloron Project

CONFIG_FILE = ../config
include $(CONFIG_FILE)

INCLUDES +=  -I. -I../include

ifeq ($(ENABLE_REGEX),1)
  REGEX_SRC       = regcomp.cc regexec.cc reggnu.cc
  REGEX_HEAD      = regex.h regint.h
  REGEX_OBJ       = regcomp.o regexec.o reggnu.o
else
  REGEX_SRC       =
  REGEX_HEAD      =
  REGEX_OBJ       =
endif

ifeq ($(ENABLE_MD5),1)
  MD5_SRC         = md5.cc
  MD5_HEAD        = md5.h
  MD5_OBJ         = md5.o
else
  MD5_CC          =
  MD5_H           =
  MD5_O           =
endif

LIBAPOLLORON_SRC  = String.cc Keys.cc List.cc DateTime.cc Socket.cc CGI.cc \
                    utils.cc ansi.cc charset.cc strmidi.cc \
                    $(REGEX_SRC) $(MD5_SRC)
CHARSET_HEAD      = charset/table_iso8859_unicode.h charset/table_koi8_unicode.h \
                    charset/table_sjis_unicode.h charset/table_euckr_unicode.h \
                    charset/table_gbk_unicode.h charset/table_big5_unicode.h \
                    charset/table_unicode_eucjp.h charset/table_unicode_euckr.h \
                    charset/table_unicode_gbk.h charset/table_unicode_big5.h \
                    charset/table_charwidth.h
LIBAPOLLORON_HEAD = ../include/apolloron.h charset.h $(CHARSET_HEAD) \
                    strmidi.h $(REGEX_HEAD) $(MD5_HEAD)
CHARSET_OBJ       = charset/table_iso8859_unicode.o charset/table_koi8_unicode.o \
                    charset/table_sjis_unicode.o charset/table_euckr_unicode.o \
                    charset/table_gbk_unicode.o charset/table_big5_unicode.o \
                    charset/table_unicode_eucjp.o charset/table_unicode_euckr.o \
                    charset/table_unicode_gbk.o charset/table_unicode_big5.o \
                    charset/table_charwidth.o
LIBAPOLLORON_OBJ  = String.o Keys.o List.o DateTime.o Socket.o CGI.o \
                    utils.o ansi.o charset.o $(CHARSET_OBJ) strmidi.o \
                    $(REGEX_OBJ) $(MD5_OBJ)
LIBAPOLLORON_LIB  = ../lib/libapolloron.a

.cc.o:
	$(CPP) $(INCLUDES) $(CFLAGS) -c $<

all: $(LIBAPOLLORON_LIB) $(LIBAPOLLORON_OBJ)

$(LIBAPOLLORON_LIB): $(LIBAPOLLORON_OBJ) $(LIBAPOLLORON_HEAD)
	@touch $@ && $(RM) $@
	$(AR) rv $@ $(LIBAPOLLORON_OBJ)
	$(RANLIB) $@

String.o:     String.cc     $(LIBAPOLLORON_HEAD)
Keys.o:       Keys.cc       $(LIBAPOLLORON_HEAD)
List.o:       List.cc       $(LIBAPOLLORON_HEAD)
DateTime.o:   DateTime.cc   $(LIBAPOLLORON_HEAD)
Socket.o:     Socket.cc     $(LIBAPOLLORON_HEAD)
CGI.o:        CGI.cc        $(LIBAPOLLORON_HEAD)
utils.o:      utils.cc      $(LIBAPOLLORON_HEAD)
ansi.o:       ansi.cc       $(LIBAPOLLORON_HEAD)
charset.o:    charset.cc    $(LIBAPOLLORON_HEAD)
	$(CPP) -c $(INCLUDES) $(CFLAGS) -D__ICONV_CONST=1 $< || $(CPP) -c $(INCLUDES) $(CFLAGS) -D__ICONV_CONST=0 $<
$(CHARSET_OBJ): $(CHARSET_HEAD)
	cd charset && $(MAKE)
strmidi.o:    strmidi.cc    $(LIBAPOLLORON_HEAD)
regcomp.o:    regcomp.cc    $(REGEX_HEAD)
regexec.o:    regexec.cc    $(REGEX_HEAD)
reggnu.o:     reggnu.cc     $(REGEX_HEAD)
md5.o:        md5.cc        $(MD5_HEAD)

clean:
	cd charset && $(MAKE) clean
	$(RM) *.o $(LIBAPOLLORON_LIB)
