# You need GNU C, GNU Make, GNU fileutils, and GNU binutils.

include version.mak

DESTDIR=
PREFIX=/usr/local
INCDIR=${PREFIX}/include/iso2mb
LIBSODIR=${PREFIX}/lib
LIBADIR=${LIBSODIR}
BINDIR=${PREFIX}/bin
MANDIR=${PREFIX}/man
MANSECT=1
MANCOMPR=gzip -9c
MANX=.gz

DEST=libiso2mb
Os=mbbtri.o iso2mb.o mb2iso.o mbinit.o mbfind.o mbio.o mb128misc.o
Hs=mbconfig.h mbbtri.h mb.h mb128.h mb128misc.h
TAB_Hs=jis1flag.h jis2flag.h notascii.h ucswidth.h domestic-ascii.h ucs-prop.h iso-prop.h ucs-cjk.h iso-cjk.h preconv.h

include lang.mak

LANG_Hs=$(patsubst %.o,%.h,${LANG_Os})

CN_Hs=\
cns-to-big5.h \
cns1-to-big5.h \
cns2-to-big5.h \
cns3-to-big5.h \
cns4-to-big5.h \
cns5-to-big5.h \
cns6-to-big5.h \
cns7-to-big5.h \
big5-to-cns.h
ALL=${DEST}.so
INST=${Hs} ${LANG_Hs}
INSTLIBA=${DEST}.a
INSTLIBSO=${DEST}.so ${DEST}.so.${VER}.${RELEASE} ${DEST}.so.${VER}.${RELEASE}.${LEVEL}
INSTBIN=mbconv

DEBUG=
CF=${DEBUG} -O2 -Wall -fpic -I.
LF=-shared -Wl,-soname,${DEST}.so.${VER}.${RELEASE}
CC=gcc
LD=gcc
RANLIB=ranlib
AR=ar

UNICODEDOCS=$( shell find $HOME/doc/unicode -name '*.TXT' )

all: mbconv mbconv.man

mbconv: mbconv.c ${ALL}
	${CC} ${CF} -o $@ $< -L. -liso2mb


${DEST}.so: ${DEST}.so.${VER}.${RELEASE}
	ln -sfv $< $@

${DEST}.so.${VER}.${RELEASE}: ${DEST}.so.${VER}.${RELEASE}.${LEVEL}
	ln -sfv $< $@

${DEST}.so.${VER}.${RELEASE}.${LEVEL}: ${Os} ${LANG_Os}
	${LD} ${LF} -o $@ $^

${DEST}.a: ${Os} ${LANG_Os}
	${AR} cru $@ $^
	${RANLIB} $@

${Os}: %.o: %.c ${Hs} ${TAB_Hs}
	${CC} ${CF} -c $<

mbconfig.h: lang.mak
	( \
	for f in ${LANG_Os}; do \
		case "$$f" in \
		cn.o) echo '#define USE_CN';; \
		ja.o) echo '#define USE_JA';; \
		kr.o) echo '#define USE_KR';; \
		ucs.o) echo '#define USE_UCS';; \
		esac; \
	done ; \
	for d in ${MISC_LANGs}; do \
		echo "#define USE_$$d"; \
	done \
	) > $@

cn.o: cn.c cn.h ucs.h ${Hs} ${TAB_Hs} ${CN_Hs}
	${CC} ${CF} -c $<

ja.o: ja.c ja.h ucs.h ${Hs} ${TAB_Hs}
	${CC} ${CF} -c $<

kr.o: kr.c kr.h ucs.h ${Hs} ${TAB_Hs}
	${CC} ${CF} -c $<

ucs.o: ucs.c ucs.h ${Hs} ${TAB_Hs} ucs-to-iso-pool.h ucs-to-iso.h iso-to-ucs.h
	${CC} ${CF} -c $<

# To generate ucs-to-iso-pool.h, ucs-to-iso.h, and iso-to-ucs.h.
big_headers:
	perl ucs-to-iso.pl $UNICODEDOCS

mbconv.man: mbconv.pod
	pod2man --section=${MANSECT} --center=' ' $< >$@

install: install-bin install-lib install-man

install-bin: mbconv
	rm -fv \
	${DESTDIR}${LIBSODIR}/${DEST}.so \
	${DESTDIR}${LIBSODIR}/${DEST}.so.${VER}.${RELEASE} \
	${DESTDIR}${LIBSODIR}/${DEST}.so.${VER}.${RELEASE}.*
	mkdir -p ${DESTDIR}${LIBSODIR}
	mkdir -p ${DESTDIR}${BINDIR}
	test -d ${DESTDIR}${LIBSODIR} && cp -pdv ${INSTLIBSO} ${DESTDIR}${LIBSODIR}
	test -d ${DESTDIR}${BINDIR} && cp -pdv ${INSTBIN} ${DESTDIR}${BINDIR}

install-lib: ${INSTLIBA}
	mkdir -p ${DESTDIR}${INCDIR}
	mkdir -p ${DESTDIR}${LIBADIR}
	test -d ${DESTDIR}${INCDIR} && cp -pdv ${INST} ${DESTDIR}${INCDIR}
	test -d ${DESTDIR}${LIBADIR} && cp -pdv ${INSTLIBA} ${DESTDIR}${LIBADIR}

install-man: mbconv.man
	mkdir -p ${DESTDIR}${MANDIR}/man${MANSECT}
	test -d ${DESTDIR}${MANDIR}/man${MANSECT} && \
		${MANCOMPR} <mbconv.man >${DESTDIR}${MANDIR}/man${MANSECT}/mbconv.${MANSECT}${MANX}

clean:
	rm -f ${DEST}.a ${DEST}.so* *.o mbconv mbconfig.h

clean-oldso:
	for f in ${DEST}.so.${VER}.${RELEASE}.*; do \
		test "X$$f" = "X${DEST}.so.${VER}.${RELEASE}.${LEVEL}" || rm -fv $$f ; \
	done

.PHONY: all big_headers install install-bin install-lib install-man clean clean-oldso
