SUBDIRS	= account
TARGETS	= $(OBJDIR)libMailer.a $(OBJDIR)libMailer$(SOEXT).0.0 $(OBJDIR)libMailer$(SOEXT).0 $(OBJDIR)libMailer$(SOEXT) $(OBJDIR)compose$(EXEEXT) $(OBJDIR)mailer$(EXEEXT)
OBJDIR	=
PREFIX	= /usr/local
DESTDIR	=
LIBDIR	= $(PREFIX)/lib
CC	= cc
CPPFLAGSF=
CPPFLAGS=
CFLAGSF	= `pkg-config --cflags libDesktop`
CFLAGS	= -W -Wall -g -O2 -pedantic -D_FORTIFY_SOURCE=2 -fstack-protector
LDFLAGSF= `pkg-config --libs libDesktop` -lintl
LDFLAGS	= -Wl,-z,relro -Wl,-z,now
EXEEXT	=
AR	= ar
ARFLAGS	= -rc
RANLIB	= ranlib
CCSHARED= $(CC) -shared
SOEXT	= .so
BINDIR	= $(PREFIX)/bin
SBINDIR	= $(PREFIX)/sbin
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

libMailer_OBJS = $(OBJDIR)account.o $(OBJDIR)callbacks.o $(OBJDIR)compose.o $(OBJDIR)folder.o $(OBJDIR)helper.o $(OBJDIR)mailer.o $(OBJDIR)message.o
libMailer_CFLAGS = $(CPPFLAGSF) $(CPPFLAGS) $(CFLAGSF) $(CFLAGS) -fPIC
libMailer_LDFLAGS = $(LDFLAGSF) $(LDFLAGS) `pkg-config --libs openssl`

$(OBJDIR)libMailer.a: $(libMailer_OBJS)
	$(AR) $(ARFLAGS) $(OBJDIR)libMailer.a $(libMailer_OBJS)
	$(RANLIB) $(OBJDIR)libMailer.a

$(OBJDIR)libMailer$(SOEXT).0.0: $(libMailer_OBJS)
	$(CCSHARED) -o $(OBJDIR)libMailer$(SOEXT).0.0 -Wl,-soname,libMailer$(SOEXT).0 $(libMailer_OBJS) $(libMailer_LDFLAGS)

$(OBJDIR)libMailer$(SOEXT).0: $(OBJDIR)libMailer$(SOEXT).0.0
	$(LN) -s -- libMailer$(SOEXT).0.0 $(OBJDIR)libMailer$(SOEXT).0

$(OBJDIR)libMailer$(SOEXT): $(OBJDIR)libMailer$(SOEXT).0.0
	$(LN) -s -- libMailer$(SOEXT).0.0 $(OBJDIR)libMailer$(SOEXT)

compose_OBJS = $(OBJDIR)compose-main.o
compose_CFLAGS = $(CPPFLAGSF) $(CPPFLAGS) $(CFLAGSF) $(CFLAGS) -fPIE
compose_LDFLAGS = $(LDFLAGSF) $(LDFLAGS) `pkg-config --libs openssl` -L$(OBJDIR). -Wl,-rpath,$(LIBDIR) -lMailer -pie

$(OBJDIR)compose$(EXEEXT): $(compose_OBJS) $(OBJDIR)libMailer$(SOEXT)
	$(CC) -o $(OBJDIR)compose$(EXEEXT) $(compose_OBJS) $(compose_LDFLAGS)

mailer_OBJS = $(OBJDIR)main.o
mailer_CFLAGS = $(CPPFLAGSF) $(CPPFLAGS) $(CFLAGSF) $(CFLAGS) -fPIE
mailer_LDFLAGS = $(LDFLAGSF) $(LDFLAGS) `pkg-config --libs openssl` -L$(OBJDIR). -Wl,-rpath,$(LIBDIR) -lMailer -pie

$(OBJDIR)mailer$(EXEEXT): $(mailer_OBJS) $(OBJDIR)libMailer$(SOEXT)
	$(CC) -o $(OBJDIR)mailer$(EXEEXT) $(mailer_OBJS) $(mailer_LDFLAGS)

$(OBJDIR)account.o: account.c mailer.h message.h account.h ../config.h
	$(CC) -D PREFIX=\"$(PREFIX)\" $(libMailer_CFLAGS) -o $(OBJDIR)account.o -c account.c

$(OBJDIR)callbacks.o: callbacks.c account.h callbacks.h compose.h mailer.h message.h gtkassistant.c ../config.h
	$(CC) $(libMailer_CFLAGS) -o $(OBJDIR)callbacks.o -c callbacks.c

$(OBJDIR)compose.o: compose.c callbacks.h common.c mailer.h message.h compose.h ../config.h
	$(CC) $(libMailer_CFLAGS) -o $(OBJDIR)compose.o -c compose.c

$(OBJDIR)folder.o: folder.c mailer.h folder.h
	$(CC) $(libMailer_CFLAGS) -o $(OBJDIR)folder.o -c folder.c

$(OBJDIR)helper.o: helper.c ../include/Mailer/helper.h
	$(CC) $(libMailer_CFLAGS) -o $(OBJDIR)helper.o -c helper.c

$(OBJDIR)mailer.o: mailer.c account.h callbacks.h common.c compose.h message.h mailer.h ../config.h
	$(CC) -D PREFIX=\"$(PREFIX)\" $(libMailer_CFLAGS) -o $(OBJDIR)mailer.o -c mailer.c

$(OBJDIR)message.o: message.c
	$(CC) $(libMailer_CFLAGS) -o $(OBJDIR)message.o -c message.c

$(OBJDIR)compose-main.o: compose-main.c compose.h message.h
	$(CC) $(compose_CFLAGS) -o $(OBJDIR)compose-main.o -c compose-main.c

$(OBJDIR)main.o: main.c mailer.h ../config.h
	$(CC) -D PREFIX=\"$(PREFIX)\" $(mailer_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) -- $(libMailer_OBJS) $(compose_OBJS) $(mailer_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) -- $(libMailer_OBJS) $(compose_OBJS) $(mailer_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)$(LIBDIR)
	$(INSTALL) -m 0644 $(OBJDIR)libMailer.a $(DESTDIR)$(LIBDIR)/libMailer.a
	$(INSTALL) -m 0755 $(OBJDIR)libMailer$(SOEXT).0.0 $(DESTDIR)$(LIBDIR)/libMailer$(SOEXT).0.0
	$(LN) -s -- libMailer$(SOEXT).0.0 $(DESTDIR)$(LIBDIR)/libMailer$(SOEXT).0
	$(LN) -s -- libMailer$(SOEXT).0.0 $(DESTDIR)$(LIBDIR)/libMailer$(SOEXT)
	$(MKDIR) $(DESTDIR)$(BINDIR)
	$(INSTALL) -m 0755 $(OBJDIR)compose$(EXEEXT) $(DESTDIR)$(BINDIR)/compose$(EXEEXT)
	$(MKDIR) $(DESTDIR)$(BINDIR)
	$(INSTALL) -m 0755 $(OBJDIR)mailer$(EXEEXT) $(DESTDIR)$(BINDIR)/mailer$(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)$(LIBDIR)/libMailer.a
	$(RM) -- $(DESTDIR)$(LIBDIR)/libMailer$(SOEXT).0.0
	$(RM) -- $(DESTDIR)$(LIBDIR)/libMailer$(SOEXT).0
	$(RM) -- $(DESTDIR)$(LIBDIR)/libMailer$(SOEXT)
	$(RM) -- $(DESTDIR)$(BINDIR)/compose$(EXEEXT)
	$(RM) -- $(DESTDIR)$(BINDIR)/mailer$(EXEEXT)

.PHONY: all subdirs clean distclean install uninstall
