.POSIX: # DIRECTORIES TEST_DIR = tests SRC_DIR = src OBJ_DIR = obj X_STRING_DIR = $(SRC_DIR)/xlibc/x_string SQLITE_DIR = $(SRC_DIR)/sqlite3 # Sources SRC = $(wildcard $(SRC_DIR)/*.c) X_STRING_SRC = $(wildcard $(X_STRING_DIR)/src/*.c) SQLITE_SRC = $(wildcard $(SQLITE_DIR)/src/*.c) TEST_SRC = $(wildcard $(TEST_DIR)/*.c) # Headers HEADERS = $(wildcard $(SRC_DIR)/*.h) X_STRING_HEADERS = $(wildcard $(X_STRING_DIR)/src/*.h) SQLITE_HEADERS = $(wildcard $(SQLITE_DIR)/src/*.h) TEST_HEADERS = $(wildcard $(TEST_DIR)/*.h) # Objects OBJ = $(patsubst $(SRC_DIR)/%.c, $(OBJ_DIR)/%.o, $(SRC)) X_STRING_OBJ = $(patsubst $(X_STRING_DIR)/src/%.c, $(OBJ_DIR)/%.o, $(X_STRING_SRC)) SQLITE_OBJ = $(patsubst $(SQLITE_DIR)/src/%.c, $(OBJ_DIR)/%.o, $(SQLITE_SRC)) ALL_OBJS = $(wildcard $(OBJ_DIR)/*.o) TEST_OBJ = $(patsubst $(TEST_DIR)/%.c, $(OBJ_DIR)/%.o, $(TEST_SRC)) SQLITE_DB_SCHEMA = $(SRC_DIR)/dodo.schema INC_DIRS=-I./$(X_STRING_DIR)/src/ -I./$(SQLITE_DIR)/src/ -I./src CFLAGS = -ggdb HOME_DIR = $$HOME CONFIG_DIR = /.config/dodo DB_FILE = $(CONFIG_DIR)/dodo.db DFLAGS = -DDB_PATH=\"$(DB_FILE)\" all: dodo $(OBJ): $(X_STRING_OBJ) $(SQLITE_OBJ) $(HEADERS) $(CC) -c -o $(OBJ_DIR)/$(@F) $(INC_DIRS) $(CFLAGS) $(DFLAGS) $(SRC_DIR)/$(@F:.o=.c) $(X_STRING_OBJ): $(X_STRING_HEADERS) $(CC) -c -o $(OBJ_DIR)/$(@F) $(CFLAGS) $(X_STRING_SRC) $(SQLITE_OBJ): $(SQLITE_HEADERS) $(CC) -c -o $(OBJ_DIR)/$(@F) $(CFLAGS) $(SQLITE_SRC) dodo: test ./test rm test $(CC) -o $@ $(CFLAGS) $(ALL_OBJS) test: $(OBJ) $(CC) -o $@ $(TEST_SRC) $(INC_DIRS) $(DFLAGS) $(CFLAGS) obj/dodo.o $(X_STRING_OBJ) $(SQLITE_OBJ) install: mkdir -p $(HOME_DIR)$(CONFIG_DIR) sqlite3 $(HOME_DIR)$(DB_FILE) < $(SQLITE_DB_SCHEMA) uninstall: rm -rf $(HOME_DIR)$(CONFIG_DIR) clean_all: rm -f dodo test $(ALL_OBJS) clean: rm -f dodo test $(OBJ) $(X_STRING_OBJ) .PHONY: all clean_all clean install uninstall