SUBDIRS	= common
TARGETS	= $(OBJDIR)download$(EXEEXT) $(OBJDIR)surfer$(EXEEXT)
OBJDIR	=
PREFIX	= /usr/local
DESTDIR	=
BINDIR	= $(PREFIX)/bin
SBINDIR	= $(PREFIX)/sbin
CC	= cc
CPPFLAGSF=
CPPFLAGS=
CFLAGSF	=
CFLAGS	= -W -Wall -g -O2 -fPIE -D_FORTIFY_SOURCE=2 -fstack-protector
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

download_OBJS = $(OBJDIR)download.o
download_CFLAGS = $(CPPFLAGSF) $(CPPFLAGS) $(CFLAGSF) $(CFLAGS)
download_LDFLAGS = $(LDFLAGSF) $(LDFLAGS)

$(OBJDIR)download$(EXEEXT): $(download_OBJS)
	$(CC) -o $(OBJDIR)download$(EXEEXT) $(download_OBJS) $(download_LDFLAGS)

surfer_OBJS = $(OBJDIR)surfer.o $(OBJDIR)ghtml.o $(OBJDIR)callbacks.o $(OBJDIR)main.o
surfer_CFLAGS = $(CPPFLAGSF) $(CPPFLAGS) $(CFLAGSF) $(CFLAGS)
surfer_LDFLAGS = $(LDFLAGSF) $(LDFLAGS)

$(OBJDIR)surfer$(EXEEXT): $(surfer_OBJS)
	$(CC) -o $(OBJDIR)surfer$(EXEEXT) $(surfer_OBJS) $(surfer_LDFLAGS)

$(OBJDIR)download.o: download.c download.h ../config.h
	$(CC) -D WITH_MAIN $(download_CFLAGS) -o $(OBJDIR)download.o -c download.c

$(OBJDIR)surfer.o: surfer.c callbacks.h common/find.c download.c download.h surfer.h ../config.h
	$(CC) $(surfer_CFLAGS) -o $(OBJDIR)surfer.o -c surfer.c

$(OBJDIR)ghtml.o: ghtml.c ghtml.h ghtml-gtkhtml.c ghtml-gtkmozembed.c ghtml-gtktextview.c ghtml-webkit.c ghtml-webkit2.c common/conn.c common/history.c common/url.c ../config.h
	$(CC) -D PREFIX=\"$(PREFIX)\" $(surfer_CFLAGS) -o $(OBJDIR)ghtml.o -c ghtml.c

$(OBJDIR)callbacks.o: callbacks.c surfer.h ghtml.h callbacks.h ../config.h
	$(CC) $(surfer_CFLAGS) -o $(OBJDIR)callbacks.o -c callbacks.c

$(OBJDIR)main.o: main.c surfer.h ../config.h
	$(CC) $(surfer_CFLAGS) -o $(OBJDIR)main.o -c main.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) -- $(download_OBJS) $(surfer_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) -- $(download_OBJS) $(surfer_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)download$(EXEEXT) $(DESTDIR)$(BINDIR)/download$(EXEEXT)
	$(MKDIR) $(DESTDIR)$(BINDIR)
	$(INSTALL) -m 0755 $(OBJDIR)surfer$(EXEEXT) $(DESTDIR)$(BINDIR)/surfer$(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)/download$(EXEEXT)
	$(RM) -- $(DESTDIR)$(BINDIR)/surfer$(EXEEXT)

.PHONY: all subdirs clean distclean install uninstall
