#
# Makefile
# @configure_input@
#
@SET_MAKE@
SHELL=@SHELL@
PACKAGE = @PACKAGE@
VERSION = @VERSION@
DOMAIN = $(PACKAGE)
prefix = @prefix@
exec_prefix = @exec_prefix@
datarootdir = @datarootdir@
bindir = @bindir@
datadir = @datadir@
localedir = $(datadir)/locale
libdir = @libdir@
includedir = @includedir@
infodir = @infodir@
libexecdir = @libexecdir@
localstatedir = @localstatedir@
mandir = @mandir@
oldincludedir = @oldincludedir@
sbindir = @sbindir@
sharedstatedir = @sharedstatedir@
srcdir = @srcdir@
sysconfdir = @sysconfdir@
top_srcdir = @top_srcdir@
top_builddir = .
VPATH = $(top_srcdir):.

CGIBIN_DIR = $(libexecdir)/$(PACKAGE)/cgi-bin
AUXBIN_DIR = $(libexecdir)/$(PACKAGE)
HELP_DIR = @HELP_DIR@
RC_DIR = @RC_DIR@
ETC_DIR = $(sysconfdir)
CONF_DIR = $(sysconfdir)/$(PACKAGE)

WARNINGS= -Wall -Wnull-dereference
CFLAGS = $(WARNINGS) -I. -I$(top_srcdir) @CFLAGS@ $(CPPFLAGS) $(DEFS) $(OPTS)
WCCFLAGS = @WCCFLAGS@
CPPFLAGS = @CPPFLAGS@
DEFS = @DEFS@ -DAUXBIN_DIR=\"$(AUXBIN_DIR)\" \
	-DCGIBIN_DIR=\"$(CGIBIN_DIR)\" -DHELP_DIR=\"$(HELP_DIR)\" \
	-DETC_DIR=\"$(ETC_DIR)\" -DCONF_DIR=\"$(CONF_DIR)\" \
	-DRC_DIR=\"$(RC_DIR)\" \
        -DLOCALEDIR=\"$(localedir)\"
LDFLAGS = @LDFLAGS@
LIBS = @LIBS@
GC_LIBS = @LIBGC@
EXT_LIBS = -L. -lindep @LIBINTL@ $(GC_LIBS)
W3M_LIBS = @W3M_LIBS@
WCTARGET = @WCTARGET@
NLSTARGET = @NLSTARGET@

MAKE_ARGS = PERL='$(PERL)' MKDIR='$(MKDIR)' \
	BIN_DIR='$(bindir)' AUXBIN_DIR='$(AUXBIN_DIR)' \
	CGIBIN_DIR='$(CGIBIN_DIR)' \
	HELP_DIR='$(HELP_DIR)' MAN_DIR='$(mandir)' ETC_DIR='$(ETC_DIR)' \
	CONF_DIR='$(CONF_DIR)' \
	RC_DIR='$(RC_DIR)' DESTDIR='$(DESTDIR)' KEYBIND_SRC='$(KEYBIND_SRC)'

IMGCFLAGS = @IMGX11CFLAGS@ @IMGFBCFLAGS@ @IMGWINCFLAGS@
IMGLDFLAGS = @IMGX11LDFLAGS@ @IMGFBLDFLAGS@ @IMGWINLDFLAGS@

CC0 = @CC@
CXX = @CXX@
IMGLINK = @IMGLINK@
CC = @POSUBST@ $(CC0)
CPP = @CPP@
RANLIB=@RANLIB@
AWK = @AWK@
PERL = @PERL@
MKDIR=mkdir -p
MV=mv
RM=rm
AR=ar
INSTALL=@INSTALL@
INSTALL_PROGRAM=@INSTALL_PROGRAM@
INSTALL_SCRIPT=@INSTALL_SCRIPT@
INSTALL_DATA=@INSTALL_DATA@
INSTALL_W3MIMGDISPLAY=@INSTALL_W3MIMGDISPLAY@

HELP_FILE = @HELP_FILE@
KEYBIND_SRC = @KEYMAP_FILE@.c
KEYBIND_OBJ = @KEYMAP_FILE@.o

VERSION=@CURRENT_VERSION@
MODEL=@W3M_TARGET@-@W3M_LANG@

SRCS=main.c file.c buffer.c display.c etc.c search.c linein.c table.c local.c \
	form.c map.c frame.c rc.c menu.c mailcap.c image.c \
	symbol.c entity.c terms.c url.c ftp.c mimehead.c regex.c news.c \
	func.c cookie.c history.c backend.c util.c $(KEYBIND_SRC)
OBJS=main.o file.o buffer.o display.o etc.o search.o linein.o table.o local.o\
	form.o map.o frame.o rc.o menu.o mailcap.o image.o \
	symbol.o entity.o terms.o url.o ftp.o mimehead.o regex.o news.o \
	func.o cookie.o history.o backend.o util.o $(KEYBIND_OBJ)
LSRCS=anchor.c parsetagx.c tagtable.c istream.c
LOBJS=anchor.o parsetagx.o tagtable.o istream.o
LLOBJS=version.o
ALIBOBJS=Str.o indep.o regex.o textlist.o parsetag.o myctype.o hash.o
ALIB=libindep.a
ALLOBJS=$(OBJS) $(LOBJS) $(LLOBJS)

EXT=@EXEEXT@

TARGET=$(PACKAGE)$(EXT)
BOOKMARKER=w3mbookmark$(EXT)
HELPER=w3mhelperpanel$(EXT)
INFLATE=inflate$(EXT)
IMGDISPLAY=w3mimgdisplay$(EXT)
MAN1_TARGET=$(PACKAGE).1
MAN1=$(top_srcdir)/doc/w3m.1
MAN1_JA=$(top_srcdir)/doc-jp/w3m.1
MAN1_DE=$(top_srcdir)/doc-de/w3m.1

LIB_TARGETS=$(BOOKMARKER) $(HELPER)
AUXBIN_TARGETS=@AUXBIN_TARGETS@
TARGETS=$(TARGET) $(LIB_TARGETS) $(AUXBIN_TARGETS)
HELP_TARGET=w3mhelp.html
HELP_ALLFILES=w3mhelp-w3m_en.html w3mhelp-w3m_ja.html \
	w3mhelp-lynx_en.html w3mhelp-lynx_ja.html

DEFUNS=$(top_srcdir)/main.c $(top_srcdir)/menu.c
SCRIPTSUBDIRS= scripts
SUBDIRS = $(SCRIPTSUBDIRS) w3mimg libwc po
.PHONY: $(SUBDIRS)

all: $(TARGETS) all-scripts $(NLSTARGET)

$(TARGET): $(ALLOBJS) $(ALIB) $(WCTARGET)
	$(CC) $(CFLAGS) -o $(TARGET) $(ALLOBJS) $(LDFLAGS) $(LIBS) $(EXT_LIBS) $(W3M_LIBS)

$(ALIB): $(ALIBOBJS)
	$(AR) rv $(ALIB) $(ALIBOBJS)
	$(RANLIB) $(ALIB)

$(OBJS) $(LOBJS): fm.h funcname1.h

tagtable.c: tagtable.tab mktable$(EXT) html.h 
	./mktable$(EXT) 100 $(srcdir)/tagtable.tab > $@

entity.h: entity.tab mktable$(EXT)
	echo '/* $$I''d$$ */' > $@
	./mktable$(EXT) 100 $(srcdir)/entity.tab >> $@

indep.o: indep.c fm.h funcname1.h entity.h
func.o: funcname.c functable.c funcname1.h
keybind.o: funcname2.h
keybind_lynx.o: funcname2.h
parsetagx.o: html.c

funcname.tab: $(DEFUNS)
	(echo '#define DEFUN(x,y,z) x y';\
	 sed -ne '/^DEFUN/{p;n;/^[ 	]/p;}' $(DEFUNS)) | $(CPP) $(CPPFLAGS) - | \
	 awk '$$1 ~ /^[_A-Za-z]/ { \
	       for (i=2;i<=NF;i++) { print $$i, $$1} \
	 }' > $@.tmp
	@if cmp -s $@.tmp $@; then \
		echo "$@ unchanged"; \
		rm -f $@.tmp; \
	else \
		echo "$@ updated"; \
		mv $@.tmp $@; \
	fi

funcname.c: funcname.tab
	sort funcname.tab | $(AWK) -f $(top_srcdir)/funcname0.awk > $@

funcname1.h: funcname.tab
	sort funcname.tab | $(AWK) -f $(top_srcdir)/funcname1.awk > $@

funcname2.h: funcname.tab
	sort funcname.tab | $(AWK) -f $(top_srcdir)/funcname2.awk > $@

functable.c: funcname.tab mktable$(EXT)
	sort funcname.tab | $(AWK) -f $(top_srcdir)/functable.awk > functable.tab
	./mktable$(EXT) 100 functable.tab > $@
	-rm -f functable.tab

mktable$(EXT): mktable.o dummy.o Str.o hash.o myctype.o
	$(CC) $(CFLAGS) -o mktable mktable.o dummy.o Str.o hash.o myctype.o $(LDFLAGS) $(LIBS) $(GC_LIBS)

$(BOOKMARKER): w3mbookmark.o dummy.o $(ALIB)
	$(CC) $(CFLAGS) -o $(BOOKMARKER) w3mbookmark.o dummy.o $(LDFLAGS) $(LIBS) $(EXT_LIBS)

$(HELPER): w3mhelperpanel.o dummy.o $(ALIB)
	$(CC) $(CFLAGS) -o $(HELPER) w3mhelperpanel.o dummy.o $(LDFLAGS) $(LIBS) $(EXT_LIBS)

$(INFLATE): inflate.o $(ALIB)
	$(CC) $(CFLAGS) -o $(INFLATE) inflate.o $(LDFLAGS) $(LIBS) -lz

inflate.o: inflate.c
	$(CC) $(CFLAGS) -o $@ -c $(srcdir)/inflate.c

libwc/libwc.a: libwc
libwc:
	(cd libwc && $(MAKE) CC='$(CC0)' OPTS='$(OPTS)')
 
dummy.o: entity.c
	$(CC) $(CFLAGS) -DDUMMY -c -o $@ $?

$(IMGDISPLAY): w3mimgdisplay.o $(ALIB) w3mimg/w3mimg.a
	$(IMGLINK) $(CFLAGS) -o $(IMGDISPLAY) w3mimgdisplay.o w3mimg/w3mimg.a $(LDFLAGS) $(LIBS) $(IMGLDFLAGS)

w3mimgdisplay.o: w3mimgdisplay.c w3mimg/w3mimg.h
	$(CC) $(CFLAGS) $(IMGCFLAGS) -o $@ -c $(srcdir)/w3mimgdisplay.c

w3mimg/w3mimg.a: w3mimg
w3mimg:
	(cd w3mimg && $(MAKE) CC="$(CC0)" OPTS="$(OPTS)")

po:
	(cd $@ && $(MAKE))

install: install-core install-scripts install-po

install-core: $(TARGETS)
	-$(MKDIR) $(DESTDIR)$(bindir)
	-$(MKDIR) $(DESTDIR)$(AUXBIN_DIR)
	-$(MKDIR) $(DESTDIR)$(CGIBIN_DIR)
	-$(MKDIR) $(DESTDIR)$(HELP_DIR)
	-$(MKDIR) $(DESTDIR)$(mandir)/man1
	-$(MKDIR) $(DESTDIR)$(mandir)/ja/man1
	-$(MKDIR) $(DESTDIR)$(mandir)/de/man1
	$(INSTALL_PROGRAM) $(TARGET) $(DESTDIR)$(bindir)/$(TARGET)
	$(INSTALL_DATA) $(HELP_FILE) $(DESTDIR)$(HELP_DIR)/$(HELP_TARGET)
	$(INSTALL_DATA) $(MAN1) $(DESTDIR)$(mandir)/man1/$(MAN1_TARGET)
	$(INSTALL_DATA) $(MAN1_JA) $(DESTDIR)$(mandir)/ja/man1/$(MAN1_TARGET)
	$(INSTALL_DATA) $(MAN1_DE) $(DESTDIR)$(mandir)/de/man1/$(MAN1_TARGET)
	targets="$(AUXBIN_TARGETS)"; for file in $$targets; \
	do \
		case $$file in \
		$(IMGDISPLAY)) $(INSTALL_W3MIMGDISPLAY) $$file \
			$(DESTDIR)$(AUXBIN_DIR)/$$file;; \
		*) $(INSTALL_PROGRAM) $$file $(DESTDIR)$(AUXBIN_DIR)/$$file;; \
		esac; \
	done
	for file in $(LIB_TARGETS); \
	do \
		$(INSTALL_PROGRAM) $$file $(DESTDIR)$(CGIBIN_DIR)/$$file; \
	done

install-helpfile:
	-$(MKDIR) $(DESTDIR)$(HELP_DIR)
	for file in $(HELP_ALLFILES); \
	do \
		$(INSTALL_DATA) $$file $(DESTDIR)$(HELP_DIR)/$$file; \
	done

install-po:
	NLSTARGET="$(NLSTARGET)"; for subdir in $$NLSTARGET; \
	do \
	 (cd $$subdir && $(MAKE) install); \
	done

all-scripts: funcname.tab
	for dir in $(SCRIPTSUBDIRS);	\
	do	\
		(cd $$dir && $(MAKE) $(MAKE_ARGS)); \
	done

install-scripts: all-scripts
	topdir=`pwd`; \
	for dir in $(SCRIPTSUBDIRS);	\
	do	\
		(cd $$dir && $(MAKE) $(MAKE_ARGS) install); \
	done

uninstall:
	-$(RM) $(bindir)/$(TARGET)
	-for file in $(AUXBIN_TARGETS); \
	do \
		$(RM) -f $(AUXBIN_DIR)/$$file; \
	done
	-for file in $(LIB_TARGETS); \
	do \
		$(RM) -f $(CGIBIN_DIR)/$$file; \
	done
	-for file in $(HELP_ALLFILES); \
	do \
		$(RM) -f $(HELP_DIR)/$$file; \
	done
	-$(RM) -f $(HELP_DIR)/$(HELP_TARGET)
	-$(RM) -f $(mandir)/man1/$(MAN1_TARGET)
	-$(RM) -f $(mandir)/ja/man1/$(MAN1_TARGET)
	-$(RM) -f $(mandir)/de/man1/$(MAN1_TARGET)
	-for dir in $(SCRIPTSUBDIRS);	\
	do	\
		(cd $$dir && $(MAKE) $(MAKE_ARGS) uninstall); \
	done

clean: sweep
	-$(RM) -f *.o *.a $(TARGETS) mktable$(EXT)
	-$(RM) -f funcname.tab
	-$(RM) -f entity.h funcname.c funcname1.h funcname2.h tagtable.c functable.c
	-for dir in w3mimg libwc; \
	do \
		(cd $$dir && $(MAKE) clean RM="$(RM)"); \
	done
	-for dir in $(SCRIPTSUBDIRS);	\
	do	\
		(cd $$dir && $(MAKE) clean); \
	done

distclean: clean
	for subdir in po scripts w3mimg libwc; \
	do \
		(cd $$subdir && $(MAKE) distclean); \
	done
	-$(RM) -f config.cache config.log config.status
	-$(RM) -f w3mhelp-w3m_en.html w3mhelp-w3m_ja.html
	-$(RM) -f w3mhelp-lynx_en.html w3mhelp-lynx_ja.html
	-$(RM) -f version.c
	-$(RM) -f posubst
	-$(RM) -f config.h Makefile
	-$(RM) -f *core

sweep:
	-$(RM) -f core *~ *.bak *.orig *.rej

depend: 
	makedepend $(CFLAGS) *.c

dist:
	git archive --format=tar --prefix=w3m-$(VERSION)/ HEAD | xz -9e > ../w3m-$(VERSION).tar.xz

bindist:
	cd ..; tar cvfz w3m-$(VERSION)-$(MODEL).tar.gz w3m/w3m* w3m/doc* w3m/Bonus* w3m/README w3m/scripts 

