include MCONFIG

#
# Headers included from libucd_int.h
#
HDRS = libucd_int.h ucd.h int24.h compiler.h

#
# These are the files produced by convert_ucd.pl
#
CVT_FILES = gen/jamo.c gen/nameslist.tab gen/nametoucs.keys gen/nametoucs.tab \
	gen/ucstoname.keys gen/proparray.c gen/proparrayindex

# -----------------------------------------------------------------------

.SUFFIXES: .c .o .lo .s .ls .i .ho .hs .hi .cc .h
.c.o:
	$(CC) $(CFLAGS) -c -o $@ $<
.c.lo:
	$(CC) $(CFLAGS) $(PICFLAGS) -c -o $@ $<
.c.s:
	$(CC) $(CFLAGS) -S -o $@ $<
.c.ls:
	$(CC) $(CFLAGS) $(PICFLAGS) -S -o $@ $<
.c.i:
	$(CC) $(CFLAGS) -E -o $@ $<
.c.ho:
	$(HOST_CC) $(HOST_CFLAGS) -c -o $@ $<
.c.hs:
	$(HOST_CC) $(HOST_CFLAGS) -S -o $@ $<
.c.hi:
	$(HOST_CC) $(HOST_CFLAGS) -E -o $@ $<

enums/%.o: enums/%.c $(HDRS)
	$(CC) $(CFLAGS) -c -o $@ $<
enums/%.lo: enums/%.c $(HDRS)
	$(CC) $(CFLAGS) $(PICFLAGS) -c -o $@ $<

# -----------------------------------------------------------------------

LIBSRCS = proparray.c gen/nametoucs_hash.c gen/ucstoname_hash.c \
	  gen/jamo.c gen/nameslist.c gen/nameslist_dict.c \
	  gen/ucstoname_tab.c gen/nametoucs_tab.c nametoucs.c \
	  ucslookup.c cache.c gen/ucdversion.c $(wildcard enums/*.c)

LIBOBJS = $(patsubst %.c,%.o,$(LIBSRCS))
SO_OBJS = $(patsubst %.c,%.lo,$(LIBSRCS))

# -----------------------------------------------------------------------

all : $(LIB_FILE) $(SO_FILE) $(SO_NAME) ucd.h

clean:
	rm -rf gen enums
	rm -f *.o *.ho *.lo *.i *.s *.a *.so *.so.* ucd.h
	$(MAKE) -C perfect clean

distclean: clean
	find . -name \*~ -print0 | xargs -0rt rm -f

install: all
	mkdir -p $(INSTALLROOT)$(libdir)
	$(INSTALL_LIB) $(LIB_FILE) $(SO_FILE) $(SO_NAME) $(INSTALLROOT)$(libdir)
	mkdir -p $(INSTALLROOT)$(includedir)
	$(INSTALL_DATA) ucd.h $(INSTALLROOT)$(includedir)
	mkdir -p $(INSTALLROOT)$(mandir)/man3
	$(INSTALL_DATA) *.3 $(INSTALLROOT)$(mandir)/man3

# -----------------------------------------------------------------------

$(CVT_FILES) : gen/done

gen/done: convert_ucd.pl $(wildcard ucd/*.txt ucd/extracted/*.txt)
	mkdir -p gen
	$(PERL) convert_ucd.pl
	touch gen/done

perfect/perfect: $(wildcard perfect/*.c perfect/*.h)
	$(MAKE) -C perfect

gen/nametoucs_hash.c: gen/nametoucs.keys perfect/perfect
	perfect/perfect -im _libucd_nametoucs_hash gen/nametoucs_hash.c \
		gen/nametoucs_hash.h < gen/nametoucs.keys 

gen/nametoucs_hash.h: gen/nametoucs_hash.c
	: Generated by side effect

gen/ucstoname_hash.c: gen/ucstoname.keys perfect/perfect
	perfect/perfect -hm _libucd_ucstoname_hash gen/ucstoname_hash.c \
		gen/ucstoname_hash.h < gen/ucstoname.keys 

gen/ucstoname_hash.h: gen/ucstoname_hash.c
	: Generated by side effect

gen/nameslist.compr: gen/nameslist.tab simplecomp.pl
	$(PERL) simplecomp.pl < $<

gen/nameslist_tab.c gen/nameslist_dict.c gen/nameslist.offset: gen/nameslist.compr
	: Generated by side effect

gen/nameslist.c: gen/nameslist.compr bin2c.pl
	$(PERL) bin2c.pl _libucd_names_list < $< > $@ || rm -f $@

gen/mk_ucstoname_tab: mk_ucstoname_tab.ho gen/ucstoname_hash.ho
	$(HOST_CC) $(HOST_LDFLAGS) -o $@ $^ $(HOST_LIBS)

gen/ucstoname_tab.c: gen/mk_ucstoname_tab \
		     gen/proparrayindex gen/nameslist.offset
	gen/mk_ucstoname_tab

gen/mk_nametoucs_tab: mk_nametoucs_tab.ho gen/nametoucs_hash.ho
	$(HOST_CC) $(HOST_LDFLAGS) -o $@ $^ $(HOST_LIBS)

gen/nametoucs_tab.c: gen/mk_nametoucs_tab gen/nametoucs.tab
	gen/mk_nametoucs_tab

gen/ucdversion.c: ucd/version ucdversion.pl
	$(PERL) ucdversion.pl

$(LIB_FILE): $(LIBOBJS)
	rm -f $(LIB_FILE)
	$(AR) cq $(LIB_FILE) $^
	$(RANLIB) $(LIB_FILE)

$(SO_FILE): $(SO_OBJS)
	$(CC) $(SOFLAGS) -o $(SO_FILE) $^

ifneq ($(SO_NAME),$(SO_FILE))
$(SO_NAME): $(SO_FILE)
	ln -f $(SO_FILE) $(SO_NAME)
endif

ucd.h: ucd.h.in enum.list makeenums.pl
	$(PERL) makeenums.pl

gen/cache.c: gencache.pl
	$(PERL) gencache.pl

# -----------------------------------------------------------------------

proparray.o: proparray.c ucd.h $(HDRS) gen/proparray.c
proparray.lo: proparray.c ucd.h $(HDRS) gen/proparray.c

mk_ucstoname_tab.ho: mk_ucstoname_tab.c gen/ucstoname_hash.h
mk_nametoucs_tab.ho: mk_nametoucs_tab.c gen/nametoucs_hash.h

gen/ucstoname_tab.o: gen/ucstoname_tab.c $(HDRS)
gen/ucstoname_tab.lo: gen/ucstoname_tab.c $(HDRS)

gen/nametoucs_tab.o: gen/nametoucs_tab.c $(HDRS)
gen/nametoucs_tab.lo: gen/nametoucs_tab.c $(HDRS)

gen/nameslist_dict.o: gen/nameslist_dict.c
gen/nameslist_dict.lo: gen/nameslist_dict.c

nametoucs.o: nametoucs.c $(HDRS) gen/nametoucs_hash.h
nametoucs.lo: nametoucs.c $(HDRS) gen/nametoucs_hash.h

ucslookup.o: ucslookup.c $(HDRS) gen/ucstoname_hash.h
ucslookup.lo: ucslookup.c $(HDRS) gen/ucstoname_hash.h

cache.o: cache.c gen/cache.c $(HDRS)
cache.lo: cache.c gen/cache.c $(HDRS)

gen/ucdversion.o: gen/ucdversion.c $(HDRS)
gen/ucdversion.lo: gen/ucdversion.c $(HDRS)
