80 lines
		
	
	
		
			1.7 KiB
		
	
	
	
		
			Makefile
		
	
	
	
	
	
			
		
		
	
	
			80 lines
		
	
	
		
			1.7 KiB
		
	
	
	
		
			Makefile
		
	
	
	
	
	
include premake.make
 | 
						|
 | 
						|
BIN := $(shell basename $$(pwd))
 | 
						|
COMMIT != git log 2>/dev/null | sed -e '1s/^commit //;q'
 | 
						|
 | 
						|
MANSECTION ?= 1
 | 
						|
MANPAGE := $(BIN).$(MANSECTION)
 | 
						|
 | 
						|
SRCS := $(notdir $(wildcard src/*.cpp))
 | 
						|
OBJS := $(SRCS:.cpp=.o)
 | 
						|
DEPS := $(SRCS:.cpp=.dep)
 | 
						|
 | 
						|
BUILDDIR := build/intermediates/
 | 
						|
PREFIX ?= /usr/local
 | 
						|
BINDIR ?= $(PREFIX)/bin
 | 
						|
MANDIR ?= $(PREFIX)/man/man
 | 
						|
CONFIGDIR ?= $(PREFIX)/etc
 | 
						|
DATADIR ?= $(PREFIX)/share
 | 
						|
DOCDIR ?= $(DATADIR)/$(BIN)/doc
 | 
						|
 | 
						|
CXX ?= g++
 | 
						|
RM := /bin/rm -rf
 | 
						|
INSTALL := /usr/bin/install -c
 | 
						|
 | 
						|
CXXFLAGS += -Wshadow -Wall -Wpedantic -Wextra -Wno-unused-parameter
 | 
						|
CXXFLAGS += -g3 -std=c++17
 | 
						|
ifeq ($(DEBUG),1)
 | 
						|
	CXXFLAGS += -D DEBUG -O0
 | 
						|
	CONFIG := debug
 | 
						|
else
 | 
						|
	CXXFLAGS += -D NDEBUG -O3
 | 
						|
	CONFIG := release
 | 
						|
endif
 | 
						|
OUTDIR := build/$(CONFIG)/
 | 
						|
 | 
						|
vpath %.cpp src
 | 
						|
vpath %.dep $(BUILDDIR)
 | 
						|
vpath %.o $(BUILDDIR)
 | 
						|
 | 
						|
.PHONY: all clean install prebuild test dist-clean
 | 
						|
 | 
						|
all: prebuild $(OUTDIR)$(BIN)
 | 
						|
 | 
						|
prebuild: src/commit.inc
 | 
						|
	@mkdir -p $(BUILDDIR) $(OUTDIR)
 | 
						|
	sed -i.bak -e '1s/".*"/"$(COMMIT)"/' src/commit.inc
 | 
						|
	@rm src/commit.inc.bak
 | 
						|
 | 
						|
src/commit.inc:
 | 
						|
	echo 'const char* commit = "";' > $@
 | 
						|
 | 
						|
$(OUTDIR)$(BIN): $(OBJS)
 | 
						|
	$(CXX) -o $(OUTDIR)$(BIN) $(LDFLAGS) $(addprefix $(BUILDDIR),$(OBJS)) $(LDLIBS)
 | 
						|
	@ln -sf $(OUTDIR)$(BIN) $(BIN)
 | 
						|
 | 
						|
%.o %.dep: %.cpp
 | 
						|
	$(CXX) $(CXXFLAGS) -MMD -MP -MT $@ -MF $*.dep -c $<
 | 
						|
	@mv $@ $*.dep $(BUILDDIR)
 | 
						|
 | 
						|
-include $(addprefix $(BUILDDIR), $(DEPS))
 | 
						|
 | 
						|
test:
 | 
						|
	$(MAKE) -C tests && tests/tests
 | 
						|
 | 
						|
clean:
 | 
						|
	$(RM) $(BUILDDIR)
 | 
						|
	$(MAKE) -C tests clean
 | 
						|
 | 
						|
dist-clean:
 | 
						|
	$(RM) build $(BIN) src/commit.inc
 | 
						|
	$(MAKE) -C tests clean
 | 
						|
 | 
						|
install:
 | 
						|
	$(INSTALL) -d $(BINDIR)
 | 
						|
	$(INSTALL) $(OUTDIR)$(BIN) $(BINDIR)
 | 
						|
	$(INSTALL) -d $(MANDIR)$(MANSECTION)
 | 
						|
	$(INSTALL) -m 0644 $(MANPAGE) $(MANDIR)$(MANSECTION)
 | 
						|
 | 
						|
-include postmake.make
 |