|
1 |
| -# useful paths |
2 |
| -SRC_DIR = src |
3 |
| -HDR = $(SRC_DIR)/cs50.h |
4 |
| -SRC = $(SRC_DIR)/cs50.c |
| 1 | +VERSION := 8.0.3 |
5 | 2 |
|
6 |
| -BUILD_DIR = build |
7 |
| -OBJ = $(BUILD_DIR)/cs50.o |
8 |
| -USR_DIR = $(BUILD_DIR)/usr |
9 |
| -INCLUDE_DIR = $(USR_DIR)/include |
10 |
| -LIB_DIR = $(USR_DIR)/lib |
11 |
| -MAN_DIR = $(USR_DIR)/share/man/man3 |
12 |
| -BUILD_SRC = $(USR_DIR)/src |
| 3 | +# soname - libcs50.so.<major_version> |
| 4 | +SONAME := libcs50.so.$(shell echo $(VERSION) | head -c 1) |
13 | 5 |
|
14 |
| -# eprintf |
15 |
| -EPRINTF_EXE = $(BUILD_DIR)/eprintf |
16 |
| - |
17 |
| -# HackerRank |
18 |
| -HR_HDR = $(BUILD_DIR)/cs50.h |
19 |
| -HR_EXE = $(BUILD_DIR)/hackerrank |
20 |
| - |
21 |
| -TESTS_DIR = tests |
22 |
| - |
23 |
| -# deb package info |
24 |
| -DESCRIPTION = CS50 Library for C |
25 |
| -MAINTAINER = CS50 < [email protected]> |
26 |
| -NAME = libcs50 |
27 |
| -OLD_NAMES = lib50-c library50-c |
28 |
| -VERSION = 8.0.2 |
29 |
| - |
30 |
| -.PHONY: bash |
31 |
| -bash: |
32 |
| - docker run -i --rm -t -v "$(PWD):/root" cs50/cli |
| 6 | +# installation directory (/usr/local by default) |
| 7 | +DESTDIR ?= /usr/local |
33 | 8 |
|
34 | 9 | .PHONY: build
|
35 |
| -build: clean Makefile $(SRC) $(HDR) |
36 |
| - mkdir -p "$(INCLUDE_DIR)" "$(LIB_DIR)" "$(MAN_DIR)" "$(BUILD_SRC)" |
37 |
| - gcc -c -fPIC -std=gnu99 -Wall -o "$(OBJ)" "$(SRC)" |
38 |
| - gcc -o "$(LIB_DIR)/libcs50.so" -shared "$(OBJ)" |
39 |
| - rm -f "$(OBJ)" |
40 |
| - cp "$(HDR)" "$(INCLUDE_DIR)" |
41 |
| - cp "$(SRC)" "$(BUILD_SRC)" |
42 |
| - cp -r docs/* "$(MAN_DIR)" |
43 |
| - find "$(BUILD_DIR)" -type d -exec chmod 0755 {} + |
44 |
| - find "$(BUILD_DIR)" -type f -exec chmod 0644 {} + |
45 |
| - |
46 |
| -.PHONY: clean |
47 |
| -clean: |
48 |
| - rm -rf "$(BUILD_DIR)" |
49 |
| - |
50 |
| -.PHONY: deb |
51 |
| -deb: build |
52 |
| - fpm \ |
53 |
| - -C "$(BUILD_DIR)" \ |
54 |
| - -m "$(MAINTAINER)" \ |
55 |
| - -n "$(NAME)" \ |
56 |
| - -p "$(BUILD_DIR)" \ |
57 |
| - -s dir \ |
58 |
| - -t deb \ |
59 |
| - -v "$(VERSION)" \ |
60 |
| - --conflicts "$(NAME) (<< $(VERSION))" \ |
61 |
| - $(foreach name,$(OLD_NAMES),--conflicts $(name) --provides $(name) --replaces $(name)) \ |
62 |
| - --deb-no-default-config-files \ |
63 |
| - --depends c-compiler \ |
64 |
| - --description "$(DESCRIPTION)" \ |
65 |
| - --provides "$(NAME)" \ |
66 |
| - --replaces "$(NAME) (<= $(VERSION))" \ |
67 |
| - usr |
68 |
| - |
69 |
| -.PHONY: hackerrank |
70 |
| -hackerrank: build |
71 |
| - cat "$(HDR)" > "$(HR_HDR)" |
72 |
| - echo "\n#ifndef _CS50_C\n#define _CS50_C\n" >> "$(HR_HDR)" |
73 |
| - cat "$(SRC)" >> "$(HR_HDR)" |
74 |
| - echo "\n#endif" >> "$(HR_HDR)" |
| 10 | +build: clean |
| 11 | + $(CC) -c -fPIC -std=gnu99 -Wall -o cs50.o src/cs50.c |
| 12 | + $(CC) -shared -Wl,-soname,$(SONAME) -o libcs50.so.$(VERSION) cs50.o |
| 13 | + rm -f cs50.o |
| 14 | + ln -s libcs50.so.$(VERSION) $(SONAME) |
| 15 | + ln -s $(SONAME) libcs50.so |
| 16 | + install -D -m 644 src/cs50.h build/include/cs50.h |
| 17 | + mkdir -p build/lib build/src/libcs50 |
| 18 | + mv libcs50.so* build/lib |
| 19 | + cp -r src/* build/src/libcs50 |
75 | 20 |
|
76 | 21 | .PHONY: install
|
77 |
| -install: build |
78 |
| - cp "$(INCLUDE_DIR)"/* /usr/include |
79 |
| - cp "$(LIB_DIR)"/* /usr/lib |
| 22 | +install: build docs |
| 23 | + mkdir -p $(DESTDIR) $(DESTDIR)/share/man/man3 |
| 24 | + cp -r build/* $(DESTDIR) |
| 25 | + cp -r debian/docs/* $(DESTDIR)/share/man/man3 |
80 | 26 |
|
81 |
| -# TODO: add dependencies |
82 |
| -.PHONY: pacman |
83 |
| -pacman: build |
84 |
| - rm -f "$(NAME)-$(VERSION)-"*.pkg.tar.xz |
85 |
| - fpm \ |
86 |
| - -C "$(BUILD_DIR)" \ |
87 |
| - -m "$(MAINTAINER)" \ |
88 |
| - -n "$(NAME)" \ |
89 |
| - -p "$(BUILD_DIR)" \ |
90 |
| - -s dir \ |
91 |
| - -t pacman \ |
92 |
| - -v "$(VERSION)" \ |
93 |
| - --description "$(DESCRIPTION)" \ |
94 |
| - usr |
| 27 | +.PHONY: clean |
| 28 | +clean: |
| 29 | + rm -rf build debian/docs/ libcs50-* libcs50_* |
95 | 30 |
|
96 |
| -# TODO: add dependencies |
97 |
| -.PHONY: rpm |
98 |
| -rpm: build |
99 |
| - rm -f "$(NAME)-$(VERSION)-"*.rpm |
100 |
| - fpm \ |
101 |
| - -C "$(BUILD_DIR)" \ |
102 |
| - -m "$(MAINTAINER)" \ |
103 |
| - -n "$(NAME)" \ |
104 |
| - -p "$(BUILD_DIR)" \ |
105 |
| - -s dir \ |
106 |
| - -t rpm \ |
107 |
| - -v "$(VERSION)" \ |
108 |
| - --description "$(DESCRIPTION)" \ |
109 |
| - usr |
| 31 | +# requires asciidoctor (gem install asciidoctor) |
| 32 | +.PHONY: docs |
| 33 | +docs: |
| 34 | + asciidoctor -d manpage -b manpage -D debian/docs/ docs/*.adoc |
110 | 35 |
|
111 |
| -# TODO: improve test suite |
112 |
| -.PHONY: test |
113 |
| -test: build hackerrank |
114 |
| - #clang -ggdb3 -I "$(INCLUDE_DIR)" -O0 -Wall -Werror -Wno-deprecated-declarations "$(TESTS_DIR)/eprintf.c" -L "$(LIB_DIR)" -lcs50 -o "$(EPRINTF_EXE)" |
115 |
| - #clang -I "$(BUILD_DIR)" -Wall -Werror -Wno-deprecated-declarations "$(TESTS_DIR)/hackerrank.c" -o "$(HR_EXE)" |
116 |
| - clang -ggdb3 -I "$(INCLUDE_DIR)" -O0 -Wall -Werror -Wno-deprecated-declarations "$(TESTS_DIR)/get_int.c" -L "$(LIB_DIR)" -lcs50 -o "$(BUILD_DIR)"/get_int |
117 |
| - LD_LIBRARY_PATH="$(LIB_DIR)" "$(BUILD_DIR)"/get_int |
| 36 | +.PHONY: deb |
| 37 | +deb: build docs |
| 38 | + @echo "libcs50 ($(VERSION)-0ubuntu1) trusty; urgency=low" > debian/changelog |
| 39 | + @echo " * v$(VERSION)" >> debian/changelog |
| 40 | + @echo " -- CS50 Sysadmins <[email protected]> $$(date --rfc-2822)" >> debian/changelog |
| 41 | + mkdir -p libcs50-$(VERSION)/usr |
| 42 | + rsync -a build/* libcs50-$(VERSION)/usr --exclude=hack |
| 43 | + tar -cvzf libcs50_$(VERSION).orig.tar.gz libcs50-$(VERSION) |
| 44 | + cp -r debian libcs50-$(VERSION) |
| 45 | + cd libcs50-$(VERSION) && debuild -S -sa --lintian-opts --display-info --info --show-overrides |
| 46 | + mkdir -p build/deb |
| 47 | + mv libcs50-* libcs50_* build/deb |
| 48 | + |
| 49 | +.PHONY: hack |
| 50 | +hack: |
| 51 | + rm -rf build/hack && mkdir -p build/hack |
| 52 | + cat src/cs50.h > build/hack/cs50.h |
| 53 | + echo "\n#ifndef _CS50_C\n#define _CS50_C\n" >> build/hack/cs50.h |
| 54 | + cat src/cs50.c >> build/hack/cs50.h |
| 55 | + echo "\n#endif" >> build/hack/cs50.h |
| 56 | + |
| 57 | +# used by .travis.yml |
| 58 | +.PHONY: version |
| 59 | +version: |
| 60 | + @echo $(VERSION) |
0 commit comments