CC ?= cc PKG_CONFIG ?= pkg-config PREFIX ?= /usr/local BINDIR ?= $(PREFIX)/bin DESTDIR ?= TARGET := bin/yapssg SOURCES := src/Main.c $(wildcard src/*/*.c) OBJECTS := $(patsubst src/%.c,obj/%.o,$(SOURCES)) VERSION_O := obj/Version/Version.o VERSION_H := obj/Version/version.h CPPFLAGS += -Isrc $(shell $(PKG_CONFIG) --cflags libxml-2.0 luajit) CFLAGS ?= -O2 -Wall -Wextra -Werror -std=c99 LDLIBS += $(shell $(PKG_CONFIG) --libs libxml-2.0 luajit) .PHONY: all clean install FORCE all: $(TARGET) $(TARGET): $(OBJECTS) | bin $(CC) $(LDFLAGS) $(OBJECTS) $(LDLIBS) -o $@ $(VERSION_O): CPPFLAGS += -Iobj $(VERSION_O): $(VERSION_H) $(VERSION_H): FORCE @mkdir -p $(@D) @if v="$$(git describe --tags --exact-match HEAD 2>/dev/null)" && [ -n "$$v" ]; then \ :; \ elif h="$$(git rev-parse --short HEAD 2>/dev/null)" && [ -n "$$h" ]; then \ d="$$(git log -1 --format='%ad' --date='format:%y.%m.%d' 2>/dev/null)"; \ b="$$(git rev-parse --abbrev-ref HEAD 2>/dev/null)"; \ v="$${d}+$${h}_$${b}"; \ else \ if [ -f $@ ]; then exit 0; fi; \ v="$$(date +%y.%m.%d)+unknown"; \ fi; \ printf '#define YAPSSG_VERSION "%s"\n' "$$v" > $@.tmp; \ cmp -s $@ $@.tmp || mv -f $@.tmp $@; \ rm -f $@.tmp obj/%.o: src/%.c mkdir -p $(@D) $(CC) $(CPPFLAGS) $(CFLAGS) -MMD -MP -c $< -o $@ bin: mkdir -p $@ clean: rm -rf obj bin install: $(TARGET) install -Dm755 $(TARGET) $(DESTDIR)$(BINDIR)/yapssg -include $(OBJECTS:.o=.d)