SUBDIRS	= backend
TARGETS	= $(OBJDIR)bookmark$(EXEEXT) $(OBJDIR)helper$(EXEEXT) $(OBJDIR)htmlapp$(EXEEXT)
OBJDIR	=
PREFIX	= /usr/local
DESTDIR	=
BINDIR	= $(PREFIX)/bin
SBINDIR	= $(PREFIX)/sbin
CC	= cc
CPPFLAGSF= -I ../src
CPPFLAGS=
CFLAGSF	= `pkg-config --cflags libDesktop`
CFLAGS	= -W -Wall -g -O2 -fPIE -D_FORTIFY_SOURCE=2 -fstack-protector
LDFLAGSF= `pkg-config --libs libDesktop`
LDFLAGS	= -pie -Wl,-z,relro -Wl,-z,now
EXEEXT	=
RM	= rm -f
LN	= ln -f
MKDIR	= mkdir -m 0755 -p
INSTALL	= install


all: subdirs $(TARGETS)

subdirs:
	@for i in $(SUBDIRS); do (cd "$$i" && \
		if [ -n "$(OBJDIR)" ]; then \
		([ -d "$(OBJDIR)$$i" ] || $(MKDIR) -- "$(OBJDIR)$$i") && \
		$(MAKE) OBJDIR="$(OBJDIR)$$i/"; \
		else $(MAKE); fi) || exit; done

bookmark_OBJS = $(OBJDIR)bookmark.o
bookmark_CFLAGS = $(CPPFLAGSF) $(CPPFLAGS) $(CFLAGSF) $(CFLAGS)
bookmark_LDFLAGS = $(LDFLAGSF) $(LDFLAGS)

$(OBJDIR)bookmark$(EXEEXT): $(bookmark_OBJS)
	$(CC) -o $(OBJDIR)bookmark$(EXEEXT) $(bookmark_OBJS) $(bookmark_LDFLAGS)

helper_OBJS = $(OBJDIR)ghtml-helper.o $(OBJDIR)helper.o $(OBJDIR)helper-main.o
helper_CFLAGS = $(CPPFLAGSF) $(CPPFLAGS) $(CFLAGSF) $(CFLAGS)
helper_LDFLAGS = $(LDFLAGSF) $(LDFLAGS)

$(OBJDIR)helper$(EXEEXT): $(helper_OBJS)
	$(CC) -o $(OBJDIR)helper$(EXEEXT) $(helper_OBJS) $(helper_LDFLAGS)

htmlapp_OBJS = $(OBJDIR)htmlapp.o
htmlapp_CFLAGS = $(CPPFLAGSF) $(CPPFLAGS) $(CFLAGSF) $(CFLAGS)
htmlapp_LDFLAGS = $(LDFLAGSF) $(LDFLAGS) $(OBJDIR)ghtml-helper.o

$(OBJDIR)htmlapp$(EXEEXT): $(htmlapp_OBJS) $(OBJDIR)ghtml-helper.o
	$(CC) -o $(OBJDIR)htmlapp$(EXEEXT) $(htmlapp_OBJS) $(htmlapp_LDFLAGS)

$(OBJDIR)bookmark.o: bookmark.c ../config.h
	$(CC) $(bookmark_CFLAGS) -o $(OBJDIR)bookmark.o -c bookmark.c

$(OBJDIR)ghtml-helper.o: ghtml-helper.c ../src/ghtml.h ../src/ghtml.c
	$(CC) $(helper_CFLAGS) -o $(OBJDIR)ghtml-helper.o -c ghtml-helper.c

$(OBJDIR)helper.o: helper.c ../src/common/find.c ../src/surfer.h ../config.h backend/contents.c backend/gtkdoc.c backend/manual.c backend/search.c helper.h
	$(CC) $(helper_CFLAGS) -o $(OBJDIR)helper.o -c helper.c

$(OBJDIR)helper-main.o: helper-main.c helper.h
	$(CC) $(helper_CFLAGS) -o $(OBJDIR)helper-main.o -c helper-main.c

$(OBJDIR)htmlapp.o: htmlapp.c ../src/common/find.c ../src/surfer.h ../config.h
	$(CC) $(htmlapp_CFLAGS) -o $(OBJDIR)htmlapp.o -c htmlapp.c

clean:
	@for i in $(SUBDIRS); do (cd "$$i" && \
		if [ -n "$(OBJDIR)" ]; then \
		$(MAKE) OBJDIR="$(OBJDIR)$$i/" clean; \
		else $(MAKE) clean; fi) || exit; done
	$(RM) -- $(bookmark_OBJS) $(helper_OBJS) $(htmlapp_OBJS)

distclean:
	@for i in $(SUBDIRS); do (cd "$$i" && \
		if [ -n "$(OBJDIR)" ]; then \
		$(MAKE) OBJDIR="$(OBJDIR)$$i/" distclean; \
		else $(MAKE) distclean; fi) || exit; done
	$(RM) -- $(bookmark_OBJS) $(helper_OBJS) $(htmlapp_OBJS)
	$(RM) -- $(TARGETS)

install: all
	@for i in $(SUBDIRS); do (cd "$$i" && \
		if [ -n "$(OBJDIR)" ]; then \
		$(MAKE) OBJDIR="$(OBJDIR)$$i/" install; \
		else $(MAKE) install; fi) || exit; done
	$(MKDIR) $(DESTDIR)$(BINDIR)
	$(INSTALL) -m 0755 $(OBJDIR)helper$(EXEEXT) $(DESTDIR)$(BINDIR)/helper$(EXEEXT)
	$(MKDIR) $(DESTDIR)$(BINDIR)
	$(INSTALL) -m 0755 $(OBJDIR)htmlapp$(EXEEXT) $(DESTDIR)$(BINDIR)/htmlapp$(EXEEXT)

uninstall:
	@for i in $(SUBDIRS); do (cd "$$i" && \
		if [ -n "$(OBJDIR)" ]; then \
		$(MAKE) OBJDIR="$(OBJDIR)$$i/" uninstall; \
		else $(MAKE) uninstall; fi) || exit; done
	$(RM) -- $(DESTDIR)$(BINDIR)/helper$(EXEEXT)
	$(RM) -- $(DESTDIR)$(BINDIR)/htmlapp$(EXEEXT)

.PHONY: all subdirs clean distclean install uninstall
