-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathMakefile.in
119 lines (91 loc) · 3.43 KB
/
Makefile.in
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
SHARED_LINK = lib$(BIN_NAME).so.$(MAJOR_VERSION)
SHARED_NAME = $(SHARED_LINK).$(MINOR_VERSION)
STATIC_NAME = lib$(BIN_NAME).a
SRC_DIR = src
LIB_DIR = lib
INCLUDE_DIR = include
BUILD_DIR = build
SRC_BUILD = $(BUILD_DIR)/$(SRC_DIR)
LIB_BUILD = $(BUILD_DIR)/$(LIB_DIR)
TEKSTITV_INCLUDE = -Iinclude
LIB_LINKS = -lcurl
SRC_HEADERS := $(wildcard $(SRC_DIR)/*.h)
SRC_SOURCES := $(wildcard $(SRC_DIR)/*.c)
SRC_OBJECTS := $(addprefix $(SRC_BUILD)/, $(notdir $(SRC_SOURCES:.c=.o)))
LIB_HEADERS := $(wildcard $(INCLUDE_DIR)/*.h)
LIB_SOURCES := $(wildcard $(LIB_DIR)/*.c)
LIB_OBJECTS := $(addprefix $(LIB_BUILD)/, $(notdir $(LIB_SOURCES:.c=.o)))
TEST_EXECS := $(wildcard tests/check_*.c)
TEST_EXECS := $(addprefix tests/, $(notdir $(TEST_EXECS:.c=)))
all: buildpaths $(TARGETS)
buildpaths:
@ mkdir -p $(SRC_BUILD)
@ mkdir -p $(LIB_BUILD)
executable: $(SRC_OBJECTS) $(LIB_OBJECTS)
@ printf "%8s %-40s %s\n" $(CC) $(BIN_NAME)
@ $(CC) $(TEKSTITV_INCLUDE) $(CFLAGS) $^ -o $(BUILD_DIR)/$(BIN_NAME) $(BIN_LINKS)
shared: $(LIB_OBJECTS)
@ printf "%8s %-40s %s\n" $(CC) $(SHARED_NAME)
@ $(CC) -shared $(TEKSTITV_INCLUDE) $(CFLAGS) $^ -o $(LIB_BUILD)/$(SHARED_NAME) $(LIB_LINKS)
@ ln -fs $(LIB_BUILD)/$(SHARED_NAME) $(LIB_BUILD)/$(SHARED_LINK)
static: $(LIB_OBJECTS)
@ printf "%8s %-40s %s\n" $(AR) $(STATIC_NAME)
@ $(AR) rcs -o $(LIB_BUILD)/$(STATIC_NAME) $^
# Build with make to keep the building clean
# But handle the executing and run time erros with bash
test: $(TEST_EXECS)
@ bash tests/run.sh
# Compile object files for tekstitv binary
$(SRC_BUILD)/%.o: $(SRC_DIR)/%.c $(SRC_HEADERS) $(LIB_HEADERS)
@ printf "%8s %-40s %s\n" $(CC) $<
@ $(CC) $(TEKSTITV_INCLUDE) -c $(CFLAGS) -o $@ $<
# Compile object files for library
$(LIB_BUILD)/%.o: $(LIB_DIR)/%.c $(LIB_HEADERS)
@ printf "%8s %-40s %s\n" $(CC) $<
@ $(CC) $(TEKSTITV_INCLUDE) -c $(CFLAGS) -o $@ $<
# Compile the test executables
# Test relies on config.c being rebuilt with TESTING flag turned on
# so make sure that the correct config version is always built
tests/check_%: tests/check_%.c $(LIB_OBJECTS)
@ printf "%8s %-40s %s\n" $(CC) $<
@ $(CC) $(TEKSTITV_INCLUDE) $(CFLAGS) -DTESTING src/config.c $^ -o [email protected] -lcheck -lsubunit -lrt -lm -pthread
clean:
@ rm -rfv build Makefile tests/*.test
install_executable:
@ echo "Installing executable..."
@ mkdir -p $(BINDIR)
@ install -m 755 $(BUILD_DIR)/$(BIN_NAME) $(BINDIR)
@ echo "Installation complete."
install_completion:
@ cp tekstitv-completion.sh $(COMPLETIONDIR)/$(BIN_NAME)
install_shared:
@ echo "Installing shared library"
@ mkdir -p $(LIBDIR)
@ install -m 644 $(LIB_BUILD)/$(SHARED_NAME) $(LIBDIR)
@ ln -fs $(LIB_DIR)/$(SHARED_NAME) $(LIBDIR)/$(SHARED_LINK)
install_static:
@ echo "Installing static library"
@ mkdir -p $(LIBDIR)
@ install -m 644 $(LIB_BUILD)/$(STATIC_NAME) $(LIBDIR)
install_headers:
@ echo "Installing library headers"
@ mkdir -p $(INCLUDEDIR)
@ install -m 644 $(LIB_HEADERS) $(INCLUDEDIR)
uninstall_executable:
@ echo "Uninstalling binary"
@ rm -fv $(BINDIR)/$(BIN_NAME)
uninstall_completion:
@ rm -fv $(COMPLETIONDIR)/$(BIN_NAME)
uninstall_shared:
@ echo "Uninstalling shared library"
@ rm -fv $(LIBDIR)/$(SHARED_NAME)
@ rm -fv $(LIBDIR)/$(SHARED_LINK)
uninstall_static:
@ echo "Uninstalling shared library"
@ rm -fv $(LIBDIR)/$(STATIC_NAME)
uninstall_headers:
@ echo "Uninstalling library headers"
@ rm -fv $(INCLUDEDIR)/$(BIN_NAME).h
install: $(INSTALLS)
uninstall: $(UNINSTALLS)
.PHONY: clean install uninstall test