SHELL		= /bin/sh
MAKE		= make

CC		= cc
CFLAGS		= -DNDEBUG
LDFLAGS		= $(CFLAGS)

DESTDIR		=
PREFIX		= /usr/local
INCDIR		= $(PREFIX)/inc
LIBDIR		= $(PREFIX)/lib
MANDIR		= $(PREFIX)/man

PRGNAM		= gleipnir
VERSION		= 140617
MANCAT		= 7

LINE		= $(PRGNAM)_line
LINE_DIR	= $(LINE)
LINE_A		= lib$(LINE).a
LINE_SO		= lib$(LINE).so
LINE_H		= $(LINE).h

LINES		= $(PRGNAM)_lines
LINES_DIR	= $(LINES)
LINES_A		= lib$(LINES).a
LINES_SO	= lib$(LINES).so
LINES_H		= $(LINES).h

LINEREAD	= $(PRGNAM)_lineread
LINEREAD_DIR	= $(LINEREAD)
LINEREAD_A	= lib$(LINEREAD).a
LINEREAD_SO	= lib$(LINEREAD).so
LINEREAD_H	= $(LINEREAD).h

LANG		= $(PRGNAM)_lang
LANG_DIR	= $(LANG)
LANG_A		= lib$(LANG).a
LANG_SO		= lib$(LANG).so
LANG_H		= $(LANG).h

TEST_DIR	= $(PRGNAM)_test

all: static

dynamic:	dynamic-line\
		dynamic-lines\
		dynamic-lineread\
		dynamic-lang

static:		static-line\
		static-lines\
		static-lineread\
		static-lang

dynamic-line:		$(LINE_SO)\
			$(LINE_H)

dynamic-lines:		$(LINES_SO)\
			$(LINES_H)

dynamic-lineread:	$(LINEREAD_SO)\
			$(LINEREAD_H)

dynamic-lang:		$(LANG_SO)\
			$(LANG_H)

static-line:		$(LINE_A)\
			$(LINE_H)

static-lines:		$(LINES_A)\
			$(LINES_H)

static-lineread:	$(LINEREAD_A)\
			$(LINEREAD_H)

static-lang:		$(LANG_A)\
			$(LANG_H)

$(LINE_H): $(LINE_DIR)/$(LINE_H)
	cp $(LINE_DIR)/$(LINE_H) $(LINE_H)

$(LINES_H): $(LINES_DIR)/$(LINES_H)
	cp $(LINES_DIR)/$(LINES_H) $(LINES_H)

$(LINEREAD_H): $(LINEREAD_DIR)/$(LINEREAD_H)
	cp $(LINEREAD_DIR)/$(LINEREAD_H) $(LINEREAD_H)

$(LANG_H): $(LANG_DIR)/$(LANG_H)
	cp $(LANG_DIR)/$(LANG_H) $(LANG_H)

$(LINE_SO): $(LINE_DIR)/$(LINE_SO)
	cp $(LINE_DIR)/$(LINE_SO) $(LINE_SO)

$(LINE_DIR)/$(LINE_SO): FORCE
	cd $(LINE_DIR)		&& $(MAKE) dynamic\
					CC="$(CC)"\
					CFLAGS="$(CFLAGS)"\
					LDFLAGS="$(LDFLAGS)"

$(LINES_SO): $(LINES_DIR)/$(LINES_SO)
	cp $(LINES_DIR)/$(LINES_SO) $(LINES_SO)

$(LINES_DIR)/$(LINES_SO): FORCE
	cd $(LINES_DIR)		&& $(MAKE) dynamic\
					CC="$(CC)"\
					CFLAGS="$(CFLAGS)"\
					LDFLAGS="$(LDFLAGS)"

$(LINEREAD_SO): $(LINEREAD_DIR)/$(LINEREAD_SO)
	cp $(LINEREAD_DIR)/$(LINEREAD_SO) $(LINEREAD_SO)

$(LINEREAD_DIR)/$(LINEREAD_SO): FORCE
	cd $(LINEREAD_DIR)	&& $(MAKE) dynamic\
					CC="$(CC)"\
					CFLAGS="$(CFLAGS)"\
					LDFLAGS="$(LDFLAGS)"

$(LANG_SO): $(LANG_DIR)/$(LANG_SO)
	cp $(LANG_DIR)/$(LANG_SO) $(LANG_SO)

$(LANG_DIR)/$(LANG_SO): FORCE
	cd $(LANG_DIR)		&& $(MAKE) dynamic\
					CC="$(CC)"\
					CFLAGS="$(CFLAGS)"\
					LDFLAGS="$(LDFLAGS)"

$(LINE_A): $(LINE_DIR)/$(LINE_A)
	cp $(LINE_DIR)/$(LINE_A) $(LINE_A)

$(LINE_DIR)/$(LINE_A): FORCE
	cd $(LINE_DIR)		&& $(MAKE) static\
					CC="$(CC)"\
					CFLAGS="$(CFLAGS)"\
					LDFLAGS="$(LDFLAGS)"

$(LINES_A): $(LINES_DIR)/$(LINES_A)
	cp $(LINES_DIR)/$(LINES_A) $(LINES_A)

$(LINES_DIR)/$(LINES_A): FORCE
	cd $(LINES_DIR)		&& $(MAKE) static\
					CC="$(CC)"\
					CFLAGS="$(CFLAGS)"\
					LDFLAGS="$(LDFLAGS)"

$(LINEREAD_A): $(LINEREAD_DIR)/$(LINEREAD_A)
	cp $(LINEREAD_DIR)/$(LINEREAD_A) $(LINEREAD_A)

$(LINEREAD_DIR)/$(LINEREAD_A): FORCE
	cd $(LINEREAD_DIR)	&& $(MAKE) static\
					CC="$(CC)"\
					CFLAGS="$(CFLAGS)"\
					LDFLAGS="$(LDFLAGS)"

$(LANG_A): $(LANG_DIR)/$(LANG_A)
	cp $(LANG_DIR)/$(LANG_A) $(LANG_A)

$(LANG_DIR)/$(LANG_A): FORCE
	cd $(LANG_DIR)		&& $(MAKE) static\
					CC="$(CC)"\
					CFLAGS="$(CFLAGS)"\
					LDFLAGS="$(LDFLAGS)"

clean:
	cd $(LINE_DIR)		&& $(MAKE) clean
	cd $(LINES_DIR)		&& $(MAKE) clean
	cd $(LINEREAD_DIR)	&& $(MAKE) clean
	cd $(LANG_DIR)		&& $(MAKE) clean
	cd $(TEST_DIR)		&& $(MAKE) clean

mrproper: clean
	cd $(LINE_DIR)		&& $(MAKE) mrproper
	cd $(LINES_DIR)		&& $(MAKE) mrproper
	cd $(LINEREAD_DIR)	&& $(MAKE) mrproper
	cd $(LANG_DIR)		&& $(MAKE) mrproper
	cd $(TEST_DIR)		&& $(MAKE) mrproper
	rm -f	$(LINE_A)	$(LINE_H)	$(LINE_SO)\
		$(LINES_A)	$(LINES_H)	$(LINES_SO)\
		$(LINEREAD_A)	$(LINEREAD_H)	$(LINEREAD_SO)\
		$(LANG_A)	$(LANG_H)	$(LANG_SO)

clean-roff:
	cd $(LINE_DIR)		&& $(MAKE) clean-roff
	cd $(LINES_DIR)		&& $(MAKE) clean-roff
	cd $(LINEREAD_DIR)	&& $(MAKE) clean-roff
	cd $(LANG_DIR)		&& $(MAKE) clean-roff

install:	install-line\
		install-lines\
		install-lineread\
		install-lang

install-line: dynamic-line
	mkdir -p $(DESTDIR)$(INCDIR)
	mkdir -p $(DESTDIR)$(LIBDIR)
	mkdir -p $(DESTDIR)$(MANDIR)/man$(MANCAT)/
	mkdir -p $(DESTDIR)$(MANDIR)/sv/man$(MANCAT)/
	cp $(LINE_H)	$(DESTDIR)$(INCDIR)/
	cp $(LINE_SO)	$(DESTDIR)$(LIBDIR)/
	cp $(LINE_DIR)/$(LINE)_eng.$(MANCAT)\
		$(DESTDIR)$(MANDIR)/man$(MANCAT)/$(LINE).$(MANCAT)
	cp $(LINE_DIR)/$(LINE)_swe.$(MANCAT)\
		$(DESTDIR)$(MANDIR)/sv/man$(MANCAT)/$(LINE).$(MANCAT)

install-lines: dynamic-lines
	mkdir -p $(DESTDIR)$(INCDIR)
	mkdir -p $(DESTDIR)$(LIBDIR)
	mkdir -p $(DESTDIR)$(MANDIR)/man$(MANCAT)/
	mkdir -p $(DESTDIR)$(MANDIR)/sv/man$(MANCAT)/
	cp $(LINES_H)	$(DESTDIR)$(INCDIR)/
	cp $(LINES_SO)	$(DESTDIR)$(LIBDIR)/
	cp $(LINES_DIR)/$(LINES)_eng.$(MANCAT)\
		$(DESTDIR)$(MANDIR)/man$(MANCAT)/$(LINES).$(MANCAT)
	cp $(LINES_DIR)/$(LINES)_swe.$(MANCAT)\
		$(DESTDIR)$(MANDIR)/sv/man$(MANCAT)/$(LINES).$(MANCAT)

install-lineread: dynamic-lineread
	mkdir -p $(DESTDIR)$(INCDIR)
	mkdir -p $(DESTDIR)$(LIBDIR)
	mkdir -p $(DESTDIR)$(MANDIR)/man$(MANCAT)/
	mkdir -p $(DESTDIR)$(MANDIR)/sv/man$(MANCAT)/
	cp $(LINEREAD_H)	$(DESTDIR)$(INCDIR)/
	cp $(LINEREAD_SO)	$(DESTDIR)$(LIBDIR)/
	cp $(LINEREAD_DIR)/$(LINEREAD)_eng.$(MANCAT)\
		$(DESTDIR)$(MANDIR)/man$(MANCAT)/$(LINEREAD).$(MANCAT)
	cp $(LINEREAD_DIR)/$(LINEREAD)_swe.$(MANCAT)\
		$(DESTDIR)$(MANDIR)/sv/man$(MANCAT)/$(LINEREAD).$(MANCAT)

install-lang: dynamic-lang
	mkdir -p $(DESTDIR)$(INCDIR)
	mkdir -p $(DESTDIR)$(LIBDIR)
	mkdir -p $(DESTDIR)$(MANDIR)/man$(MANCAT)/
	mkdir -p $(DESTDIR)$(MANDIR)/sv/man$(MANCAT)/
	cp $(LANG_H)	$(DESTDIR)$(INCDIR)/
	cp $(LANG_SO)	$(DESTDIR)$(LIBDIR)/
	cp $(LANG_DIR)/$(LANG)_eng.$(MANCAT)\
		$(DESTDIR)$(MANDIR)/man$(MANCAT)/$(LANG).$(MANCAT)
	cp $(LANG_DIR)/$(LANG)_swe.$(MANCAT)\
		$(DESTDIR)$(MANDIR)/sv/man$(MANCAT)/$(LANG).$(MANCAT)

uninstall:	uninstall-line\
		uninstall-lines\
		uninstall-lineread\
		uninstall-lang

uninstall-line:
	rm -f $(DESTDIR)$(INCDIR)/$(LINE_H)
	rm -f $(DESTDIR)$(LIBDIR)/$(LINE_SO)
	rm -f $(DESTDIR)$(MANDIR)/man$(MANCAT)/$(LINE).$(MANCAT)
	rm -f $(DESTDIR)$(MANDIR)/sv/man$(MANCAT)/$(LINE).$(MANCAT)

uninstall-lines:
	rm -f $(DESTDIR)$(INCDIR)/$(LINES_H)
	rm -f $(DESTDIR)$(LIBDIR)/$(LINES_SO)
	rm -f $(DESTDIR)$(MANDIR)/man$(MANCAT)/$(LINES).$(MANCAT)
	rm -f $(DESTDIR)$(MANDIR)/sv/man$(MANCAT)/$(LINES).$(MANCAT)

uninstall-lineread:
	rm -f $(DESTDIR)$(INCDIR)/$(LINEREAD_H)
	rm -f $(DESTDIR)$(LIBDIR)/$(LINEREAD_SO)
	rm -f $(DESTDIR)$(MANDIR)/man$(MANCAT)/$(LINEREAD).$(MANCAT)
	rm -f $(DESTDIR)$(MANDIR)/sv/man$(MANCAT)/$(LINEREAD).$(MANCAT)

uninstall-lang:
	rm -f $(DESTDIR)$(INCDIR)/$(LANG_H)
	rm -f $(DESTDIR)$(LIBDIR)/$(LANG_SO)
	rm -f $(DESTDIR)$(MANDIR)/man$(MANCAT)/$(LANG).$(MANCAT)
	rm -f $(DESTDIR)$(MANDIR)/sv/man$(MANCAT)/$(LANG).$(MANCAT)

roff:	roff-line\
	roff-lines\
	roff-lineread\
	roff-lang

roff-line:
	cd $(LINE_DIR)		&& $(MAKE) roff\
					MANCAT="$(MANCAT)"\
					ED="$(ED)"\
					EDFLAGS="$(EDFLAGS)"\
					MARKDOWN="$(MARKDOWN)"\
					MDFLAGS="$(MDFLAGS)"

roff-lines:
	cd $(LINES_DIR)		&& $(MAKE) roff\
					MANCAT="$(MANCAT)"\
					ED="$(ED)"\
					EDFLAGS="$(EDFLAGS)"\
					MARKDOWN="$(MARKDOWN)"\
					MDFLAGS="$(MDFLAGS)"

roff-lineread:
	cd $(LINEREAD_DIR)	&& $(MAKE) roff\
					MANCAT="$(MANCAT)"\
					ED="$(ED)"\
					EDFLAGS="$(EDFLAGS)"\
					MARKDOWN="$(MARKDOWN)"\
					MDFLAGS="$(MDFLAGS)"

roff-lang:
	cd $(LANG_DIR)		&& $(MAKE) roff\
					MANCAT="$(MANCAT)"\
					ED="$(ED)"\
					EDFLAGS="$(EDFLAGS)"\
					MARKDOWN="$(MARKDOWN)"\
					MDFLAGS="$(MDFLAGS)"

clean-dist: mrproper clean-roff

dist: clean-dist
	$(MAKE) roff
	./.cdist.sh	"$(PRGNAM)$(VERSION)"

sloc:
	./.csloc.sh	$$(find $(PRGNAM)_l* -type f -name '*\.c')

style:
	./.cstyle.sh	$$(find . -type f -name '*\.[ch]'\
			-o -name 'DEPENDS')\
			LICENSE README

.PHONY: all clean mrproper\
	roff clean-roff\
	roff-line\
	roff-lines\
	roff-lineread\
	roff-lang\
	dynamic			static\
	dynamic-line		static-line\
	dynamic-lines		static-lines\
	dynamic-lineread	static-lineread\
	dynamic-lang		static-lang\
	install			uninstall\
	install-line		uninstall-line\
	install-lines		uninstall-lines\
	install-lineread	uninstall-lineread\
	install-lang		uninstall-lang\
	dist clean-dist\
	sloc style

FORCE:

