SUBDIRS	= 16x16 24x24 32x32 48x48 gprs ussd
TARGETS	= $(OBJDIR)blacklist$(SOEXT) $(OBJDIR)console$(SOEXT) $(OBJDIR)debug$(SOEXT) $(OBJDIR)engineering$(SOEXT) $(OBJDIR)gprs$(SOEXT) $(OBJDIR)gps$(SOEXT) $(OBJDIR)n900$(SOEXT) $(OBJDIR)openmoko$(SOEXT) $(OBJDIR)oss$(SOEXT) $(OBJDIR)panel$(SOEXT) $(OBJDIR)password$(SOEXT) $(OBJDIR)profiles$(SOEXT) $(OBJDIR)smscrypt$(SOEXT) $(OBJDIR)systray$(SOEXT) $(OBJDIR)template$(SOEXT) $(OBJDIR)ussd$(SOEXT) $(OBJDIR)video$(SOEXT)
OBJDIR	=
PREFIX	= /usr/local
DESTDIR	=
LIBDIR	= $(PREFIX)/lib
CC	= cc
CPPFLAGSF= -I ../../include
CPPFLAGS=
CFLAGSF	= `pkg-config --cflags libSystem gtk+-3.0` -fPIC
CFLAGS	= -W -Wall -g -O2 -D_FORTIFY_SOURCE=2 -fstack-protector-all
LDFLAGSF= `pkg-config --cflags libSystem gtk+-3.0`
LDFLAGS	= -Wl,-z,relro -Wl,-z,now
EXEEXT	=
AR	= ar
ARFLAGS	= -rc
RANLIB	= ranlib
CCSHARED= $(CC) -shared
SOEXT	= .so
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

blacklist_OBJS = $(OBJDIR)blacklist.o
blacklist_CFLAGS = $(CPPFLAGSF) $(CPPFLAGS) $(CFLAGSF) $(CFLAGS)
blacklist_LDFLAGS = $(LDFLAGSF) $(LDFLAGS)

$(OBJDIR)blacklist$(SOEXT): $(blacklist_OBJS)
	$(CCSHARED) -o $(OBJDIR)blacklist$(SOEXT) $(blacklist_OBJS) $(blacklist_LDFLAGS)

console_OBJS = $(OBJDIR)console.o
console_CFLAGS = $(CPPFLAGSF) $(CPPFLAGS) $(CFLAGSF) $(CFLAGS)
console_LDFLAGS = $(LDFLAGSF) $(LDFLAGS)

$(OBJDIR)console$(SOEXT): $(console_OBJS)
	$(CCSHARED) -o $(OBJDIR)console$(SOEXT) $(console_OBJS) $(console_LDFLAGS)

debug_OBJS = $(OBJDIR)debug.o
debug_CFLAGS = $(CPPFLAGSF) $(CPPFLAGS) $(CFLAGSF) $(CFLAGS)
debug_LDFLAGS = $(LDFLAGSF) $(LDFLAGS)

$(OBJDIR)debug$(SOEXT): $(debug_OBJS)
	$(CCSHARED) -o $(OBJDIR)debug$(SOEXT) $(debug_OBJS) $(debug_LDFLAGS)

engineering_OBJS = $(OBJDIR)engineering.o
engineering_CFLAGS = $(CPPFLAGSF) $(CPPFLAGS) $(CFLAGSF) $(CFLAGS)
engineering_LDFLAGS = $(LDFLAGSF) $(LDFLAGS)

$(OBJDIR)engineering$(SOEXT): $(engineering_OBJS)
	$(CCSHARED) -o $(OBJDIR)engineering$(SOEXT) $(engineering_OBJS) $(engineering_LDFLAGS)

gprs_OBJS = $(OBJDIR)gprs.o
gprs_CFLAGS = $(CPPFLAGSF) $(CPPFLAGS) $(CFLAGSF) $(CFLAGS)
gprs_LDFLAGS = $(LDFLAGSF) $(LDFLAGS)

$(OBJDIR)gprs$(SOEXT): $(gprs_OBJS)
	$(CCSHARED) -o $(OBJDIR)gprs$(SOEXT) $(gprs_OBJS) $(gprs_LDFLAGS)

gps_OBJS = $(OBJDIR)gps.o
gps_CFLAGS = $(CPPFLAGSF) $(CPPFLAGS) -I../modems $(CFLAGSF) $(CFLAGS)
gps_LDFLAGS = $(LDFLAGSF) $(LDFLAGS)

$(OBJDIR)gps$(SOEXT): $(gps_OBJS)
	$(CCSHARED) -o $(OBJDIR)gps$(SOEXT) $(gps_OBJS) $(gps_LDFLAGS)

n900_OBJS = $(OBJDIR)n900.o
n900_CFLAGS = $(CPPFLAGSF) $(CPPFLAGS) $(CFLAGSF) $(CFLAGS)
n900_LDFLAGS = $(LDFLAGSF) $(LDFLAGS)

$(OBJDIR)n900$(SOEXT): $(n900_OBJS)
	$(CCSHARED) -o $(OBJDIR)n900$(SOEXT) $(n900_OBJS) $(n900_LDFLAGS)

openmoko_OBJS = $(OBJDIR)openmoko.o
openmoko_CFLAGS = $(CPPFLAGSF) $(CPPFLAGS) -I../modems $(CFLAGSF) $(CFLAGS) `pkg-config --cflags alsa`
openmoko_LDFLAGS = $(LDFLAGSF) $(LDFLAGS) `pkg-config --libs alsa`

$(OBJDIR)openmoko$(SOEXT): $(openmoko_OBJS)
	$(CCSHARED) -o $(OBJDIR)openmoko$(SOEXT) $(openmoko_OBJS) $(openmoko_LDFLAGS)

oss_OBJS = $(OBJDIR)oss.o
oss_CFLAGS = $(CPPFLAGSF) $(CPPFLAGS) $(CFLAGSF) $(CFLAGS)
oss_LDFLAGS = $(LDFLAGSF) $(LDFLAGS) -lossaudio

$(OBJDIR)oss$(SOEXT): $(oss_OBJS)
	$(CCSHARED) -o $(OBJDIR)oss$(SOEXT) $(oss_OBJS) $(oss_LDFLAGS)

panel_OBJS = $(OBJDIR)panel.o
panel_CFLAGS = $(CPPFLAGSF) $(CPPFLAGS) $(CFLAGSF) $(CFLAGS) `pkg-config --cflags libDesktop`
panel_LDFLAGS = $(LDFLAGSF) $(LDFLAGS) `pkg-config --libs libDesktop`

$(OBJDIR)panel$(SOEXT): $(panel_OBJS)
	$(CCSHARED) -o $(OBJDIR)panel$(SOEXT) $(panel_OBJS) $(panel_LDFLAGS)

password_OBJS = $(OBJDIR)password.o
password_CFLAGS = $(CPPFLAGSF) $(CPPFLAGS) $(CFLAGSF) $(CFLAGS)
password_LDFLAGS = $(LDFLAGSF) $(LDFLAGS)

$(OBJDIR)password$(SOEXT): $(password_OBJS)
	$(CCSHARED) -o $(OBJDIR)password$(SOEXT) $(password_OBJS) $(password_LDFLAGS)

profiles_OBJS = $(OBJDIR)profiles.o
profiles_CFLAGS = $(CPPFLAGSF) $(CPPFLAGS) $(CFLAGSF) $(CFLAGS)
profiles_LDFLAGS = $(LDFLAGSF) $(LDFLAGS)

$(OBJDIR)profiles$(SOEXT): $(profiles_OBJS)
	$(CCSHARED) -o $(OBJDIR)profiles$(SOEXT) $(profiles_OBJS) $(profiles_LDFLAGS)

smscrypt_OBJS = $(OBJDIR)smscrypt.o
smscrypt_CFLAGS = $(CPPFLAGSF) $(CPPFLAGS) $(CFLAGSF) $(CFLAGS) `pkg-config --cflags openssl`
smscrypt_LDFLAGS = $(LDFLAGSF) $(LDFLAGS) `pkg-config --libs openssl`

$(OBJDIR)smscrypt$(SOEXT): $(smscrypt_OBJS)
	$(CCSHARED) -o $(OBJDIR)smscrypt$(SOEXT) $(smscrypt_OBJS) $(smscrypt_LDFLAGS)

systray_OBJS = $(OBJDIR)systray.o
systray_CFLAGS = $(CPPFLAGSF) $(CPPFLAGS) $(CFLAGSF) $(CFLAGS)
systray_LDFLAGS = $(LDFLAGSF) $(LDFLAGS)

$(OBJDIR)systray$(SOEXT): $(systray_OBJS)
	$(CCSHARED) -o $(OBJDIR)systray$(SOEXT) $(systray_OBJS) $(systray_LDFLAGS)

template_OBJS = $(OBJDIR)template.o
template_CFLAGS = $(CPPFLAGSF) $(CPPFLAGS) $(CFLAGSF) $(CFLAGS)
template_LDFLAGS = $(LDFLAGSF) $(LDFLAGS)

$(OBJDIR)template$(SOEXT): $(template_OBJS)
	$(CCSHARED) -o $(OBJDIR)template$(SOEXT) $(template_OBJS) $(template_LDFLAGS)

ussd_OBJS = $(OBJDIR)ussd.o
ussd_CFLAGS = $(CPPFLAGSF) $(CPPFLAGS) $(CFLAGSF) $(CFLAGS)
ussd_LDFLAGS = $(LDFLAGSF) $(LDFLAGS)

$(OBJDIR)ussd$(SOEXT): $(ussd_OBJS)
	$(CCSHARED) -o $(OBJDIR)ussd$(SOEXT) $(ussd_OBJS) $(ussd_LDFLAGS)

video_OBJS = $(OBJDIR)video.o
video_CFLAGS = $(CPPFLAGSF) $(CPPFLAGS) $(CFLAGSF) $(CFLAGS)
video_LDFLAGS = $(LDFLAGSF) $(LDFLAGS)

$(OBJDIR)video$(SOEXT): $(video_OBJS)
	$(CCSHARED) -o $(OBJDIR)video$(SOEXT) $(video_OBJS) $(video_LDFLAGS)

$(OBJDIR)blacklist.o: blacklist.c ../../include/Phone.h
	$(CC) $(blacklist_CFLAGS) -o $(OBJDIR)blacklist.o -c blacklist.c

$(OBJDIR)console.o: console.c
	$(CC) $(console_CFLAGS) -o $(OBJDIR)console.o -c console.c

$(OBJDIR)debug.o: debug.c ../../include/Phone.h
	$(CC) $(debug_CFLAGS) -o $(OBJDIR)debug.o -c debug.c

$(OBJDIR)engineering.o: engineering.c ../../include/Phone.h
	$(CC) $(engineering_CFLAGS) -o $(OBJDIR)engineering.o -c engineering.c

$(OBJDIR)gprs.o: gprs.c ../../include/Phone.h ../../config.h
	$(CC) $(gprs_CFLAGS) -o $(OBJDIR)gprs.o -c gprs.c

$(OBJDIR)gps.o: gps.c ../../include/Phone.h
	$(CC) $(gps_CFLAGS) -o $(OBJDIR)gps.o -c gps.c

$(OBJDIR)n900.o: n900.c ../../include/Phone.h
	$(CC) $(n900_CFLAGS) -o $(OBJDIR)n900.o -c n900.c

$(OBJDIR)openmoko.o: openmoko.c ../../include/Phone.h
	$(CC) $(openmoko_CFLAGS) -o $(OBJDIR)openmoko.o -c openmoko.c

$(OBJDIR)oss.o: oss.c ../../include/Phone.h ../../config.h
	$(CC) $(oss_CFLAGS) -o $(OBJDIR)oss.o -c oss.c

$(OBJDIR)panel.o: panel.c ../../include/Phone.h
	$(CC) $(panel_CFLAGS) -o $(OBJDIR)panel.o -c panel.c

$(OBJDIR)password.o: password.c ../../include/Phone.h
	$(CC) $(password_CFLAGS) -o $(OBJDIR)password.o -c password.c

$(OBJDIR)profiles.o: profiles.c ../../include/Phone.h
	$(CC) $(profiles_CFLAGS) -o $(OBJDIR)profiles.o -c profiles.c

$(OBJDIR)smscrypt.o: smscrypt.c ../../include/Phone.h
	$(CC) $(smscrypt_CFLAGS) -o $(OBJDIR)smscrypt.o -c smscrypt.c

$(OBJDIR)systray.o: systray.c ../../include/Phone.h ../../config.h
	$(CC) $(systray_CFLAGS) -o $(OBJDIR)systray.o -c systray.c

$(OBJDIR)template.o: template.c ../../include/Phone.h
	$(CC) $(template_CFLAGS) -o $(OBJDIR)template.o -c template.c

$(OBJDIR)ussd.o: ussd.c ../../include/Phone.h ../../config.h
	$(CC) $(ussd_CFLAGS) -o $(OBJDIR)ussd.o -c ussd.c

$(OBJDIR)video.o: video.c ../../include/Phone.h
	$(CC) $(video_CFLAGS) -o $(OBJDIR)video.o -c video.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) -- $(blacklist_OBJS) $(console_OBJS) $(debug_OBJS) $(engineering_OBJS) $(gprs_OBJS) $(gps_OBJS) $(n900_OBJS) $(openmoko_OBJS) $(oss_OBJS) $(panel_OBJS) $(password_OBJS) $(profiles_OBJS) $(smscrypt_OBJS) $(systray_OBJS) $(template_OBJS) $(ussd_OBJS) $(video_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) -- $(blacklist_OBJS) $(console_OBJS) $(debug_OBJS) $(engineering_OBJS) $(gprs_OBJS) $(gps_OBJS) $(n900_OBJS) $(openmoko_OBJS) $(oss_OBJS) $(panel_OBJS) $(password_OBJS) $(profiles_OBJS) $(smscrypt_OBJS) $(systray_OBJS) $(template_OBJS) $(ussd_OBJS) $(video_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)/Phone/plugins
	$(INSTALL) -m 0755 $(OBJDIR)blacklist$(SOEXT) $(DESTDIR)$(LIBDIR)/Phone/plugins/blacklist$(SOEXT)
	$(MKDIR) $(DESTDIR)$(LIBDIR)/Phone/plugins
	$(INSTALL) -m 0755 $(OBJDIR)console$(SOEXT) $(DESTDIR)$(LIBDIR)/Phone/plugins/console$(SOEXT)
	$(MKDIR) $(DESTDIR)$(LIBDIR)/Phone/plugins
	$(INSTALL) -m 0755 $(OBJDIR)debug$(SOEXT) $(DESTDIR)$(LIBDIR)/Phone/plugins/debug$(SOEXT)
	$(MKDIR) $(DESTDIR)$(LIBDIR)/Phone/plugins
	$(INSTALL) -m 0755 $(OBJDIR)engineering$(SOEXT) $(DESTDIR)$(LIBDIR)/Phone/plugins/engineering$(SOEXT)
	$(MKDIR) $(DESTDIR)$(LIBDIR)/Phone/plugins
	$(INSTALL) -m 0755 $(OBJDIR)gprs$(SOEXT) $(DESTDIR)$(LIBDIR)/Phone/plugins/gprs$(SOEXT)
	$(MKDIR) $(DESTDIR)$(LIBDIR)/Phone/plugins
	$(INSTALL) -m 0755 $(OBJDIR)gps$(SOEXT) $(DESTDIR)$(LIBDIR)/Phone/plugins/gps$(SOEXT)
	$(MKDIR) $(DESTDIR)$(LIBDIR)/Phone/plugins
	$(INSTALL) -m 0755 $(OBJDIR)n900$(SOEXT) $(DESTDIR)$(LIBDIR)/Phone/plugins/n900$(SOEXT)
	$(MKDIR) $(DESTDIR)$(LIBDIR)/Phone/plugins
	$(INSTALL) -m 0755 $(OBJDIR)openmoko$(SOEXT) $(DESTDIR)$(LIBDIR)/Phone/plugins/openmoko$(SOEXT)
	$(MKDIR) $(DESTDIR)$(LIBDIR)/Phone/plugins
	$(INSTALL) -m 0755 $(OBJDIR)oss$(SOEXT) $(DESTDIR)$(LIBDIR)/Phone/plugins/oss$(SOEXT)
	$(MKDIR) $(DESTDIR)$(LIBDIR)/Phone/plugins
	$(INSTALL) -m 0755 $(OBJDIR)panel$(SOEXT) $(DESTDIR)$(LIBDIR)/Phone/plugins/panel$(SOEXT)
	$(MKDIR) $(DESTDIR)$(LIBDIR)/Phone/plugins
	$(INSTALL) -m 0755 $(OBJDIR)password$(SOEXT) $(DESTDIR)$(LIBDIR)/Phone/plugins/password$(SOEXT)
	$(MKDIR) $(DESTDIR)$(LIBDIR)/Phone/plugins
	$(INSTALL) -m 0755 $(OBJDIR)profiles$(SOEXT) $(DESTDIR)$(LIBDIR)/Phone/plugins/profiles$(SOEXT)
	$(MKDIR) $(DESTDIR)$(LIBDIR)/Phone/plugins
	$(INSTALL) -m 0755 $(OBJDIR)smscrypt$(SOEXT) $(DESTDIR)$(LIBDIR)/Phone/plugins/smscrypt$(SOEXT)
	$(MKDIR) $(DESTDIR)$(LIBDIR)/Phone/plugins
	$(INSTALL) -m 0755 $(OBJDIR)systray$(SOEXT) $(DESTDIR)$(LIBDIR)/Phone/plugins/systray$(SOEXT)
	$(MKDIR) $(DESTDIR)$(LIBDIR)/Phone/plugins
	$(INSTALL) -m 0755 $(OBJDIR)ussd$(SOEXT) $(DESTDIR)$(LIBDIR)/Phone/plugins/ussd$(SOEXT)

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)/Phone/plugins/blacklist$(SOEXT)
	$(RM) -- $(DESTDIR)$(LIBDIR)/Phone/plugins/console$(SOEXT)
	$(RM) -- $(DESTDIR)$(LIBDIR)/Phone/plugins/debug$(SOEXT)
	$(RM) -- $(DESTDIR)$(LIBDIR)/Phone/plugins/engineering$(SOEXT)
	$(RM) -- $(DESTDIR)$(LIBDIR)/Phone/plugins/gprs$(SOEXT)
	$(RM) -- $(DESTDIR)$(LIBDIR)/Phone/plugins/gps$(SOEXT)
	$(RM) -- $(DESTDIR)$(LIBDIR)/Phone/plugins/n900$(SOEXT)
	$(RM) -- $(DESTDIR)$(LIBDIR)/Phone/plugins/openmoko$(SOEXT)
	$(RM) -- $(DESTDIR)$(LIBDIR)/Phone/plugins/oss$(SOEXT)
	$(RM) -- $(DESTDIR)$(LIBDIR)/Phone/plugins/panel$(SOEXT)
	$(RM) -- $(DESTDIR)$(LIBDIR)/Phone/plugins/password$(SOEXT)
	$(RM) -- $(DESTDIR)$(LIBDIR)/Phone/plugins/profiles$(SOEXT)
	$(RM) -- $(DESTDIR)$(LIBDIR)/Phone/plugins/smscrypt$(SOEXT)
	$(RM) -- $(DESTDIR)$(LIBDIR)/Phone/plugins/systray$(SOEXT)
	$(RM) -- $(DESTDIR)$(LIBDIR)/Phone/plugins/ussd$(SOEXT)

.PHONY: all subdirs clean distclean install uninstall
