diff options
-rw-r--r-- | Makefile | 152 |
1 files changed, 82 insertions, 70 deletions
@@ -1,3 +1,5 @@ | |||
1 | all:: | ||
2 | |||
1 | CGIT_VERSION = v0.9.1 | 3 | CGIT_VERSION = v0.9.1 |
2 | CGIT_SCRIPT_NAME = cgit.cgi | 4 | CGIT_SCRIPT_NAME = cgit.cgi |
3 | CGIT_SCRIPT_PATH = /var/www/htdocs/cgit | 5 | CGIT_SCRIPT_PATH = /var/www/htdocs/cgit |
@@ -12,8 +14,8 @@ htmldir = $(docdir) | |||
12 | pdfdir = $(docdir) | 14 | pdfdir = $(docdir) |
13 | mandir = $(prefix)/share/man | 15 | mandir = $(prefix)/share/man |
14 | SHA1_HEADER = <openssl/sha.h> | 16 | SHA1_HEADER = <openssl/sha.h> |
15 | GIT_VER = 1.7.4 | 17 | GIT_VER = 1.7.12.4 |
16 | GIT_URL = https://github.com/git/git/archive/v$(GIT_VER).tar.gz | 18 | GIT_URL = https://git-core.googlecode.com/files/git-$(GIT_VER).tar.gz |
17 | INSTALL = install | 19 | INSTALL = install |
18 | MAN5_TXT = $(wildcard *.5.txt) | 20 | MAN5_TXT = $(wildcard *.5.txt) |
19 | MAN_TXT = $(MAN5_TXT) | 21 | MAN_TXT = $(MAN5_TXT) |
@@ -40,22 +42,14 @@ DOC_PDF = $(patsubst %.txt,%.pdf,$(MAN_TXT)) | |||
40 | # Platform specific tweaks | 42 | # Platform specific tweaks |
41 | # | 43 | # |
42 | 44 | ||
45 | VERSION: force-version | ||
46 | @./gen-version.sh "$(CGIT_VERSION)" | ||
47 | -include VERSION | ||
48 | |||
43 | uname_S := $(shell sh -c 'uname -s 2>/dev/null || echo not') | 49 | uname_S := $(shell sh -c 'uname -s 2>/dev/null || echo not') |
44 | uname_O := $(shell sh -c 'uname -o 2>/dev/null || echo not') | 50 | uname_O := $(shell sh -c 'uname -o 2>/dev/null || echo not') |
45 | uname_R := $(shell sh -c 'uname -r 2>/dev/null || echo not') | 51 | uname_R := $(shell sh -c 'uname -r 2>/dev/null || echo not') |
46 | 52 | ||
47 | ifeq ($(uname_O),Cygwin) | ||
48 | NO_STRCASESTR = YesPlease | ||
49 | NEEDS_LIBICONV = YesPlease | ||
50 | endif | ||
51 | |||
52 | ifeq ($(uname_S),$(filter $(uname_S),FreeBSD OpenBSD)) | ||
53 | # Apparantly libiconv is installed in /usr/local on BSD | ||
54 | LDFLAGS ?= -L/usr/local/lib | ||
55 | CFLAGS ?= -I/usr/local/include | ||
56 | NEEDS_LIBICONV = yes | ||
57 | endif | ||
58 | |||
59 | # | 53 | # |
60 | # Let the user override the above settings. | 54 | # Let the user override the above settings. |
61 | # | 55 | # |
@@ -76,30 +70,62 @@ endif | |||
76 | 70 | ||
77 | ifndef V | 71 | ifndef V |
78 | QUIET_CC = @echo ' ' CC $@; | 72 | QUIET_CC = @echo ' ' CC $@; |
79 | QUIET_MM = @echo ' ' MM $@; | 73 | QUIET_LINK = @echo ' ' LINK $@; |
80 | QUIET_SUBDIR0 = +@subdir= | 74 | QUIET_SUBDIR0 = +@subdir= |
81 | QUIET_SUBDIR1 = ;$(NO_SUBDIR) echo ' ' SUBDIR $$subdir; \ | 75 | QUIET_SUBDIR1 = ;$(NO_SUBDIR) echo ' ' SUBDIR $$subdir; \ |
82 | $(MAKE) $(PRINT_DIR) -C $$subdir | 76 | $(MAKE) $(PRINT_DIR) -C $$subdir |
83 | QUIET_TAGS = @echo ' ' TAGS $@; | 77 | QUIET_TAGS = @echo ' ' TAGS $@; |
78 | export V | ||
84 | endif | 79 | endif |
85 | 80 | ||
86 | # | 81 | LDFLAGS ?= |
87 | # Define a pattern rule for automatic dependency building | 82 | CFLAGS ?= -g -Wall |
88 | # | 83 | CFLAGS += -Igit |
89 | %.d: %.c | 84 | CFLAGS += -DSHA1_HEADER='$(SHA1_HEADER)' |
90 | $(QUIET_MM)$(CC) $(CFLAGS) -MM -MP $< | sed -e 's/\($*\)\.o:/\1.o $@:/g' >$@ | 85 | CFLAGS += -DCGIT_VERSION='"$(CGIT_VERSION)"' |
86 | CFLAGS += -DCGIT_CONFIG='"$(CGIT_CONFIG)"' | ||
87 | CFLAGS += -DCGIT_SCRIPT_NAME='"$(CGIT_SCRIPT_NAME)"' | ||
88 | CFLAGS += -DCGIT_CACHE_ROOT='"$(CACHE_ROOT)"' | ||
91 | 89 | ||
92 | # | 90 | ifeq ($(uname_O),Cygwin) |
93 | # Define a pattern rule for silent object building | 91 | NO_STRCASESTR = YesPlease |
94 | # | 92 | NEEDS_LIBICONV = YesPlease |
95 | %.o: %.c | 93 | endif |
96 | $(QUIET_CC)$(CC) -o $*.o -c $(CFLAGS) $< | ||
97 | 94 | ||
95 | ifeq ($(uname_S),$(filter $(uname_S),FreeBSD OpenBSD)) | ||
96 | # Apparantly libiconv is installed in /usr/local on BSD | ||
97 | LDFLAGS += -L/usr/local/lib | ||
98 | CFLAGS += -I/usr/local/include | ||
99 | NEEDS_LIBICONV = yes | ||
100 | endif | ||
98 | 101 | ||
99 | EXTLIBS = git/libgit.a git/xdiff/lib.a -lz -lpthread | 102 | GIT_OPTIONS = prefix=/usr |
100 | OBJECTS = | 103 | OBJECTS = |
101 | OBJECTS += cache.o | 104 | |
105 | ifdef NO_ICONV | ||
106 | CFLAGS += -DNO_ICONV | ||
107 | endif | ||
108 | ifdef NO_STRCASESTR | ||
109 | CFLAGS += -DNO_STRCASESTR | ||
110 | endif | ||
111 | ifdef NO_C99_FORMAT | ||
112 | CFLAGS += -DNO_C99_FORMAT | ||
113 | endif | ||
114 | ifdef NO_OPENSSL | ||
115 | CFLAGS += -DNO_OPENSSL | ||
116 | GIT_OPTIONS += NO_OPENSSL=1 | ||
117 | else | ||
118 | LDLIBS += -lcrypto | ||
119 | endif | ||
120 | |||
121 | ifdef NEEDS_LIBICONV | ||
122 | LDLIBS += -liconv | ||
123 | endif | ||
124 | |||
125 | LDLIBS += git/libgit.a git/xdiff/lib.a -lz -lpthread | ||
126 | |||
102 | OBJECTS += cgit.o | 127 | OBJECTS += cgit.o |
128 | OBJECTS += cache.o | ||
103 | OBJECTS += cmd.o | 129 | OBJECTS += cmd.o |
104 | OBJECTS += configfile.o | 130 | OBJECTS += configfile.o |
105 | OBJECTS += html.o | 131 | OBJECTS += html.o |
@@ -125,55 +151,30 @@ OBJECTS += ui-tag.o | |||
125 | OBJECTS += ui-tree.o | 151 | OBJECTS += ui-tree.o |
126 | OBJECTS += vector.o | 152 | OBJECTS += vector.o |
127 | 153 | ||
128 | ifdef NEEDS_LIBICONV | 154 | dep_files := $(foreach f,$(OBJECTS),$(dir $f).deps/$(notdir $f).d) |
129 | EXTLIBS += -liconv | 155 | dep_dirs := $(addsuffix .deps,$(sort $(dir $OBJECTS))) |
130 | endif | ||
131 | 156 | ||
157 | $(dep_dirs): | ||
158 | @mkdir -p $@ | ||
132 | 159 | ||
133 | .PHONY: all libgit test install uninstall clean force-version get-git \ | 160 | missing_dep_dirs := $(filter-out $(wildcard $(dep_dirs)),$(dep_dirs)) |
134 | doc clean-doc install-doc install-man install-html install-pdf \ | 161 | dep_file = $(dir $@).deps/$(notdir $@).d |
135 | uninstall-doc uninstall-man uninstall-html uninstall-pdf tags | 162 | dep_args = -MF $(dep_file) -MMD -MP |
136 | 163 | ||
137 | all: cgit | 164 | .SUFFIXES: |
138 | 165 | ||
139 | VERSION: force-version | 166 | $(OBJECTS): %.o: %.c $(missing_dep_dirs) |
140 | @./gen-version.sh "$(CGIT_VERSION)" | 167 | $(QUIET_CC)$(CC) -o $*.o -c $(dep_args) $(CFLAGS) $< |
141 | -include VERSION | ||
142 | 168 | ||
143 | 169 | dep_files_present := $(wildcard $(dep_files)) | |
144 | CFLAGS += -g -Wall -Igit | 170 | ifneq ($(dep_files_present),) |
145 | CFLAGS += -DSHA1_HEADER='$(SHA1_HEADER)' | 171 | include $(dep_files_present) |
146 | CFLAGS += -DCGIT_VERSION='"$(CGIT_VERSION)"' | ||
147 | CFLAGS += -DCGIT_CONFIG='"$(CGIT_CONFIG)"' | ||
148 | CFLAGS += -DCGIT_SCRIPT_NAME='"$(CGIT_SCRIPT_NAME)"' | ||
149 | CFLAGS += -DCGIT_CACHE_ROOT='"$(CACHE_ROOT)"' | ||
150 | |||
151 | GIT_OPTIONS = prefix=/usr | ||
152 | |||
153 | ifdef NO_ICONV | ||
154 | CFLAGS += -DNO_ICONV | ||
155 | endif | 172 | endif |
156 | ifdef NO_STRCASESTR | ||
157 | CFLAGS += -DNO_STRCASESTR | ||
158 | endif | ||
159 | ifdef NO_C99_FORMAT | ||
160 | CFLAGS += -DNO_C99_FORMAT | ||
161 | endif | ||
162 | ifdef NO_OPENSSL | ||
163 | CFLAGS += -DNO_OPENSSL | ||
164 | GIT_OPTIONS += NO_OPENSSL=1 | ||
165 | else | ||
166 | EXTLIBS += -lcrypto | ||
167 | endif | ||
168 | |||
169 | cgit: $(OBJECTS) libgit | ||
170 | $(QUIET_CC)$(CC) $(CFLAGS) $(LDFLAGS) -o cgit $(OBJECTS) $(EXTLIBS) | ||
171 | 173 | ||
172 | cgit.o: VERSION | 174 | all:: cgit |
173 | 175 | ||
174 | ifneq "$(MAKECMDGOALS)" "clean" | 176 | cgit: VERSION $(OBJECTS) libgit |
175 | -include $(OBJECTS:.o=.d) | 177 | $(QUIET_LINK)$(CC) $(CFLAGS) $(LDFLAGS) -o $@ $(OBJECTS) $(LDLIBS) |
176 | endif | ||
177 | 178 | ||
178 | libgit: | 179 | libgit: |
179 | $(QUIET_SUBDIR0)git $(QUIET_SUBDIR1) NO_CURL=1 $(GIT_OPTIONS) libgit.a | 180 | $(QUIET_SUBDIR0)git $(QUIET_SUBDIR1) NO_CURL=1 $(GIT_OPTIONS) libgit.a |
@@ -243,13 +244,24 @@ $(DOC_PDF): %.pdf : %.txt | |||
243 | a2x -f pdf cgitrc.5.txt | 244 | a2x -f pdf cgitrc.5.txt |
244 | 245 | ||
245 | clean: clean-doc | 246 | clean: clean-doc |
246 | rm -f cgit VERSION *.o *.d tags | 247 | $(RM) cgit VERSION *.o tags |
248 | $(RM) -r .deps | ||
249 | |||
250 | cleanall: clean | ||
251 | $(MAKE) -C git clean | ||
247 | 252 | ||
248 | clean-doc: | 253 | clean-doc: |
249 | rm -f cgitrc.5 cgitrc.5.html cgitrc.5.pdf cgitrc.5.xml cgitrc.5.fo | 254 | $(RM) cgitrc.5 cgitrc.5.html cgitrc.5.pdf cgitrc.5.xml cgitrc.5.fo |
250 | 255 | ||
251 | get-git: | 256 | get-git: |
252 | curl -L $(GIT_URL) | tar -xzf - && rm -rf git && mv git-$(GIT_VER) git | 257 | curl -L $(GIT_URL) | tar -xzf - && rm -rf git && mv git-$(GIT_VER) git |
253 | 258 | ||
254 | tags: | 259 | tags: |
255 | $(QUIET_TAGS)find . -name '*.[ch]' | xargs ctags | 260 | $(QUIET_TAGS)find . -name '*.[ch]' | xargs ctags |
261 | |||
262 | .PHONY: all cgit get-git libgit force-version | ||
263 | .PHONY: clean clean-doc cleanall | ||
264 | .PHONY: doc doc-html doc-man doc-pdf | ||
265 | .PHONY: install install-doc install-html install-man install-pdf | ||
266 | .PHONY: tags test | ||
267 | .PHONY: uninstall uninstall-doc uninstall-html uninstall-man uninstall-pdf | ||