# The goal of this makefile is to build the executable hopman
# It uses static libraries in two other subdirectories, plus an icon
# and it also depends on the general header file hopman.h

ICON := ../icon/removable-media-32x32.png
WATCH_DIR := ../watch
ANNEX_DIR := ../annex

# Search path for hopman.h, watch.a, annex.a and their prerequisites:
VPATH := ..:$(WATCH_DIR):$(ANNEX_DIR)

#WATCH_DEPS := $(shell $(MAKE) -s -r -C $(WATCH_DIR) print_deps)
#ANNEX_DEPS := $(shell $(MAKE) -s -r -C $(ANNEX_DIR) print_deps)
WATCH_DEPS := $(WATCH_DIR)/partition.c $(WATCH_DIR)/init_list.c $(WATCH_DIR)/inot.c $(WATCH_DIR)/sigfd.c \
	$(WATCH_DIR)/hotplug_partition.c $(WATCH_DIR)/mountpoints.c $(WATCH_DIR)/devpath.c $(WATCH_DIR)/readwrite.c \
	$(WATCH_DIR)/sysfs.c $(WATCH_DIR)/sysfs.h $(WATCH_DIR)/watch.h hopman.h
ANNEX_DEPS := $(ANNEX_DIR)/config.c $(ANNEX_DIR)/userinfo.c $(ANNEX_DIR)/newpid.c $(ANNEX_DIR)/do_all_config.c $(ANNEX_DIR)/annex.h hopman.h

OBJECTS := set_icon.o hopman.o gui.o
SOURCES := $(patsubst %.o,%.c,$(OBJECTS)) gui.h

.SUFFIXES:

%.o: %.c
	gcc -c $< -I.. -I../watch `pkg-config --cflags gtk+-2.0`

hopman: $(OBJECTS) $(WATCH_DIR)/watch.a $(ANNEX_DIR)/annex.a
	gcc -o $@ $^ `pkg-config --libs gtk+-2.0`

$(OBJECTS): gui.h hopman.h

set_icon.o: set_icon.c gui.h hopman.h $(ICON) 
	gdk-pixbuf-csource --raw --name=icon_32x32 $(ICON) >icon_32x32
	gcc -c $< -I.. `pkg-config --cflags gtk+-2.0`

.SECONDARY: icon_32x32

$(ANNEX_DIR)/annex.a: $(ANNEX_DEPS)
	$(MAKE) -r -C $(ANNEX_DIR) annex.a

$(WATCH_DIR)/watch.a: $(WATCH_DEPS)
	$(MAKE) -r -C $(WATCH_DIR) watch.a

.PHONY: clean cleanall print_objs print_srcs print_deps
.SILENT: print_objs print_srcs print_deps

clean:
	@rm -vf $(wildcard *.o) $(wildcard *~) icon_32x32

cleanall:
	@rm -vf $(wildcard *.o) $(wildcard *~) icon_32x32 hopman

#------- print objects, source-files and dependencies of the executable hopman
print_objs:
	@echo $(OBJECTS)

print_srcs:
	@echo $(SOURCES)

print_deps:
	@echo $(SOURCES) hopman.h $(ICON) annex.a watch.a
