-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathMakefile
More file actions
65 lines (54 loc) · 1.87 KB
/
Copy pathMakefile
File metadata and controls
65 lines (54 loc) · 1.87 KB
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
VERSION ?= 0.1.0
PREFIX ?= /usr/local
INCLUDEDIR = $(PREFIX)/include
LIBDIR = $(PREFIX)/lib
PKGCONFIGDIR = $(LIBDIR)/pkgconfig
CC = cc
CFLAGS = -std=c11 -O2 -Wall -Wextra -Iinclude
SRC = $(wildcard src/*.c)
OBJ = $(SRC:src/%.c=build/%.o)
LIB = build/libstrlib.a
.PHONY: all clean install uninstall release
all: $(LIB)
$(LIB): $(OBJ)
ar rcs $@ $^
build/%.o: src/%.c | build
$(CC) $(CFLAGS) -c $< -o $@
build:
mkdir -p build
clean:
rm -rf build
install: $(LIB)
mkdir -p $(DESTDIR)$(INCLUDEDIR)/strlib-$(VERSION)
cp include/*.h $(DESTDIR)$(INCLUDEDIR)/strlib-$(VERSION)/
mkdir -p $(DESTDIR)$(LIBDIR)
cp $(LIB) $(DESTDIR)$(LIBDIR)/libstrlib-$(VERSION).a
ln -sfn $(INCLUDEDIR)/strlib-$(VERSION) $(DESTDIR)$(INCLUDEDIR)/strlib
ln -sfn $(LIBDIR)/libstrlib-$(VERSION).a $(DESTDIR)$(LIBDIR)/libstrlib.a
mkdir -p $(DESTDIR)$(PKGCONFIGDIR)
sed -e 's|@PREFIX@|$(PREFIX)|g' \
-e 's|@LIBDIR@|$(LIBDIR)|g' \
-e 's|@INCLUDEDIR@|$(INCLUDEDIR)|g' \
-e 's|@VERSION@|$(VERSION)|g' \
strlib.pc.in > $(DESTDIR)$(PKGCONFIGDIR)/strlib.pc
uninstall:
rm -rf $(DESTDIR)$(INCLUDEDIR)/strlib-$(VERSION)
rm -f $(DESTDIR)$(LIBDIR)/libstrlib-$(VERSION).a
rm -f $(DESTDIR)$(PKGCONFIGDIR)/strlib.pc
@if [ "$$(readlink $(DESTDIR)$(INCLUDEDIR)/strlib)" = "$(INCLUDEDIR)/strlib-$(VERSION)" ]; then \
rm -f $(DESTDIR)$(INCLUDEDIR)/strlib; \
fi
@if [ "$$(readlink $(DESTDIR)$(LIBDIR)/libstrlib.a)" = "$(LIBDIR)/libstrlib-$(VERSION).a" ]; then \
rm -f $(DESTDIR)$(LIBDIR)/libstrlib.a; \
fi
release:
@if ! git diff --quiet || ! git diff --cached --quiet; then \
echo "error: working tree is dirty, commit first"; exit 1; \
fi
@if git rev-parse "v$(VERSION)" >/dev/null 2>&1; then \
echo "error: tag v$(VERSION) already exists"; exit 1; \
fi
sudo $(MAKE) install VERSION=$(VERSION)
git tag v$(VERSION)
git push origin main --tags
@echo "released strlib v$(VERSION)"