1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123
|
TARGET_SERVER ?= midiminder
TARGET_USER ?= midiwala
PREFIX ?= /usr/local
BINARY_DIR ?= $(PREFIX)/bin
CONF_DIR ?= /etc
INSTALL ?= install
INSTALL_PROGRAM ?= $(INSTALL) -s
INSTALL_DATA ?= $(INSTALL) -m 644
MKDIR_P ?= mkdir -p
BUILD_DIR ?= ./build
all: bin
bin: $(BUILD_DIR)/$(TARGET_SERVER) $(BUILD_DIR)/$(TARGET_USER)
deb:
dpkg-buildpackage -b --no-sign
deb-nc:
dpkg-buildpackage -nc -b --no-sign
install:
$(MKDIR_P) $(DESTDIR)$(BINARY_DIR)
$(INSTALL_PROGRAM) $(BUILD_DIR)/$(TARGET_SERVER) $(DESTDIR)$(BINARY_DIR)/
$(INSTALL_PROGRAM) $(BUILD_DIR)/$(TARGET_USER) $(DESTDIR)$(BINARY_DIR)/
SRCS_COMMON := msg.cpp rule.cpp seq.cpp
SRCS_SERVER := service.cpp service-commands.cpp service-tests.cpp
SRCS_SERVER += args-service.cpp main-service.cpp
SRCS_SERVER += files.cpp ipc.cpp
SRCS_SERVER += $(SRCS_COMMON)
SRCS_USER += user-connect.cpp user-list.cpp user-view.cpp
SRCS_USER += args-user.cpp main-user.cpp
SRCS_USER += seqsnapshot.cpp term.cpp
SRCS_USER += $(SRCS_COMMON)
INCS := .
LIBS := stdc++ asound fmt icuuc
LIBS += m # for older GCC systems
OBJS_SERVER := $(SRCS_SERVER:%=$(BUILD_DIR)/%.o)
OBJS_USER := $(SRCS_USER:%=$(BUILD_DIR)/%.o)
INC_FLAGS := $(addprefix -I,$(INCS))
CPPFLAGS += $(INC_FLAGS)
CPPFLAGS += -Wdate-time -D_FORTIFY_SOURCE=2
CPPFLAGS += -std=c++17
CPPFLAGS += -MMD -MP
CPPFLAGS += -O2
CPPFLAGS += -fstack-protector-strong -Wformat -Werror=format-security
CPPFLAGS += -Wall -Wextra -pedantic
LDFLAGS += $(addprefix -l,$(LIBS))
# c++ source
$(BUILD_DIR)/%.cpp.o: src/%.cpp
@$(MKDIR_P) $(BUILD_DIR)
$(CXX) $(CPPFLAGS) $(CXXFLAGS) -c $< -o $@
$(BUILD_DIR)/$(TARGET_SERVER): $(OBJS_SERVER)
$(CC) $^ -o $@ $(LDFLAGS)
$(BUILD_DIR)/$(TARGET_USER): $(OBJS_USER)
$(CC) $^ -o $@ $(LDFLAGS)
.PHONY: clean test deb deb-clean tars
clean:
$(RM) -r $(BUILD_DIR)
deb-clean:
dh clean
test: $(BUILD_DIR)/$(TARGET_SERVER)
$(BUILD_DIR)/$(TARGET_SERVER) check rules/test.rules && echo PASS || echo FAIL
# test shell with runtime and state directories in /tmp
TEST_DIR=/tmp/midiminder-test
TEST_RUNTIME_DIR=$(TEST_DIR)/runtime
TEST_STATE_DIR=$(TEST_DIR)/state
$(BUILD_DIR)/test-env:
echo PS1="'(midiminder test): '" > $@
echo export STATE_DIRECTORY=$(TEST_STATE_DIR) >> $@
echo export RUNTIME_DIRECTORY=$(TEST_RUNTIME_DIR) >> $@
test-shell: $(BUILD_DIR)/test-env
$(MKDIR_P) $(TEST_RUNTIME_DIR)
$(MKDIR_P) $(TEST_STATE_DIR)
$$SHELL --rcfile $(BUILD_DIR)/test-env || true
# man files
MANDIR ?= man
MANPAGES ?= midiminder.1 midiminder-profile.5 midiminder-daemon.8 midiwala.1
MANFILES ?= $(foreach page,$(MANPAGES),$(MANDIR)/$(page))
MANFORMATED ?= $(foreach file,$(MANFILES),$(file).txt)
$(MANFORMATED): %.txt : %
groff -t -man -Tutf8 $< | col -b -x > $@
format-man-pages: $(MANFORMATED)
# tar files for Debian package
tars: deb-clean
cd .. && tar -cJvf midiminder_1.0.1.orig.tar.xz --exclude=debian midiminder_1.0.1
tar -cJvf ../midiminder_1.0.1-1.debian.tar.xz debian/
# dependencies
DEPS := $(OBJS_SERVER:.o=.d) $(OBJS_USER:.o=.d)
-include $(DEPS)
|