summaryrefslogtreecommitdiff
path: root/gitweb/Makefile
blob: eaf0cfcf80eb67cfc00fc78819bfe8169f070862 (plain)
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
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
# The default target of this Makefile is...
all::
.PHONY: all
 
MAK_DIR_GITWEB =
 
# Define V=1 to have a more verbose compile.
#
# Define JSMIN to point to JavaScript minifier that functions as
# a filter to have static/gitweb.js minified.
#
# Define CSSMIN to point to a CSS minifier in order to generate a minified
# version of static/gitweb.css
#
 
prefix ?= $(HOME)
bindir ?= $(prefix)/bin
gitwebdir ?= /var/www/cgi-bin
 
RM ?= rm -f
INSTALL ?= install
 
# default configuration for gitweb
GITWEB_CONFIG = gitweb_config.perl
GITWEB_CONFIG_SYSTEM = /etc/gitweb.conf
GITWEB_CONFIG_COMMON = /etc/gitweb-common.conf
GITWEB_HOME_LINK_STR = projects
GITWEB_SITENAME =
GITWEB_PROJECTROOT = /pub/git
GITWEB_PROJECT_MAXDEPTH = 2007
GITWEB_EXPORT_OK =
GITWEB_STRICT_EXPORT =
GITWEB_BASE_URL =
GITWEB_LIST =
GITWEB_HOMETEXT = indextext.html
GITWEB_CSS_IN = static/gitweb.css
GITWEB_CSS = $(GITWEB_CSS_IN)
GITWEB_LOGO = static/git-logo.png
GITWEB_FAVICON = static/git-favicon.png
GITWEB_JS_IN = static/gitweb.js
GITWEB_JS = $(GITWEB_JS_IN)
GITWEB_SITE_HTML_HEAD_STRING =
GITWEB_SITE_HEADER =
GITWEB_SITE_FOOTER =
HIGHLIGHT_BIN = highlight
 
# include user config
-include ../config.mak.autogen
-include ../config.mak
-include config.mak
 
# determine version
.PHONY: .FORCE-GIT-VERSION-FILE
../GIT-VERSION-FILE: .FORCE-GIT-VERSION-FILE
	$(QUIET_SUBDIR0)../ $(QUIET_SUBDIR1) GIT-VERSION-FILE
 
ifneq ($(MAKECMDGOALS),clean)
-include ../GIT-VERSION-FILE
endif
 
# What targets we'll add to 'all' for "make gitweb"
GITWEB_ALL =
GITWEB_ALL += gitweb.cgi
GITWEB_ALL += $(GITWEB_JS)
 
### Build rules
 
SHELL_PATH ?= $(SHELL)
PERL_PATH  ?= /usr/bin/perl
 
# Shell quote;
bindir_SQ = $(subst ','\'',$(bindir))#'
gitwebdir_SQ = $(subst ','\'',$(gitwebdir))#'
gitwebstaticdir_SQ = $(subst ','\'',$(gitwebdir)/static)#'
SHELL_PATH_SQ = $(subst ','\'',$(SHELL_PATH))#'
PERL_PATH_SQ  = $(subst ','\'',$(PERL_PATH))#'
DESTDIR_SQ    = $(subst ','\'',$(DESTDIR))#'
 
# Quiet generation (unless V=1)
QUIET_SUBDIR0  = +$(MAKE) -C # space to separate -C and subdir
QUIET_SUBDIR1  =
 
ifneq ($(findstring $(MAKEFLAGS),w),w)
PRINT_DIR = --no-print-directory
else # "make -w"
NO_SUBDIR = :
endif
 
ifneq ($(findstring $(MAKEFLAGS),s),s)
ifndef V
	QUIET          = @
	QUIET_GEN      = $(QUIET)echo '   ' GEN $@;
	QUIET_SUBDIR0  = +@subdir=
	QUIET_SUBDIR1  = ;$(NO_SUBDIR) echo '   ' SUBDIR $$subdir; \
	                 $(MAKE) $(PRINT_DIR) -C $$subdir
	export V
	export QUIET
	export QUIET_GEN
	export QUIET_SUBDIR0
	export QUIET_SUBDIR1
endif
endif
 
all:: $(GITWEB_ALL)
 
GITWEB_PROGRAMS = gitweb.cgi
 
GITWEB_JS_MIN = static/gitweb.min.js
ifdef JSMIN
GITWEB_JS = $(GITWEB_JS_MIN)
all:: $(MAK_DIR_GITWEB)$(GITWEB_JS_MIN)
$(MAK_DIR_GITWEB)$(GITWEB_JS_MIN): $(MAK_DIR_GITWEB)GITWEB-BUILD-OPTIONS
$(MAK_DIR_GITWEB)$(GITWEB_JS_MIN): $(MAK_DIR_GITWEB)$(GITWEB_JS_IN)
	$(QUIET_GEN)$(JSMIN) <$< >$@
endif
GITWEB_FILES += $(GITWEB_JS)
 
GITWEB_CSS_MIN = static/gitweb.min.css
ifdef CSSMIN
GITWEB_CSS = $(GITWEB_CSS_MIN)
all:: $(MAK_DIR_GITWEB)$(GITWEB_CSS_MIN)
$(MAK_DIR_GITWEB)$(GITWEB_CSS_MIN): $(MAK_DIR_GITWEB)GITWEB-BUILD-OPTIONS
$(MAK_DIR_GITWEB)$(GITWEB_CSS_MIN): $(MAK_DIR_GITWEB)$(GITWEB_CSS_IN)
	$(QUIET_GEN)$(CSSMIN) <$< >$@
endif
GITWEB_FILES += $(GITWEB_CSS)
 
GITWEB_FILES += static/git-logo.png static/git-favicon.png
 
# JavaScript files that are composed (concatenated) to form gitweb.js
#
# js/lib/common-lib.js should be always first, then js/lib/*.js,
# then the rest of files; js/gitweb.js should be last (if it exists)
GITWEB_JSLIB_FILES =
GITWEB_JSLIB_FILES += static/js/lib/common-lib.js
GITWEB_JSLIB_FILES += static/js/lib/datetime.js
GITWEB_JSLIB_FILES += static/js/lib/cookies.js
GITWEB_JSLIB_FILES += static/js/javascript-detection.js
GITWEB_JSLIB_FILES += static/js/adjust-timezone.js
GITWEB_JSLIB_FILES += static/js/blame_incremental.js
 
 
GITWEB_REPLACE = \
	-e 's|++GIT_VERSION++|$(GIT_VERSION)|g' \
	-e 's|++GIT_BINDIR++|$(bindir)|g' \
	-e 's|++GITWEB_CONFIG++|$(GITWEB_CONFIG)|g' \
	-e 's|++GITWEB_CONFIG_SYSTEM++|$(GITWEB_CONFIG_SYSTEM)|g' \
	-e 's|++GITWEB_CONFIG_COMMON++|$(GITWEB_CONFIG_COMMON)|g' \
	-e 's|++GITWEB_HOME_LINK_STR++|$(GITWEB_HOME_LINK_STR)|g' \
	-e 's|++GITWEB_SITENAME++|$(GITWEB_SITENAME)|g' \
	-e 's|++GITWEB_PROJECTROOT++|$(GITWEB_PROJECTROOT)|g' \
	-e 's|"++GITWEB_PROJECT_MAXDEPTH++"|$(GITWEB_PROJECT_MAXDEPTH)|g' \
	-e 's|++GITWEB_EXPORT_OK++|$(GITWEB_EXPORT_OK)|g' \
	-e 's|++GITWEB_STRICT_EXPORT++|$(GITWEB_STRICT_EXPORT)|g' \
	-e 's|++GITWEB_BASE_URL++|$(GITWEB_BASE_URL)|g' \
	-e 's|++GITWEB_LIST++|$(GITWEB_LIST)|g' \
	-e 's|++GITWEB_HOMETEXT++|$(GITWEB_HOMETEXT)|g' \
	-e 's|++GITWEB_CSS++|$(GITWEB_CSS)|g' \
	-e 's|++GITWEB_LOGO++|$(GITWEB_LOGO)|g' \
	-e 's|++GITWEB_FAVICON++|$(GITWEB_FAVICON)|g' \
	-e 's|++GITWEB_JS++|$(GITWEB_JS)|g' \
	-e 's|++GITWEB_SITE_HTML_HEAD_STRING++|$(GITWEB_SITE_HTML_HEAD_STRING)|g' \
	-e 's|++GITWEB_SITE_HEADER++|$(GITWEB_SITE_HEADER)|g' \
	-e 's|++GITWEB_SITE_FOOTER++|$(GITWEB_SITE_FOOTER)|g' \
	-e 's|++HIGHLIGHT_BIN++|$(HIGHLIGHT_BIN)|g'
 
.PHONY: FORCE
$(MAK_DIR_GITWEB)GITWEB-BUILD-OPTIONS: FORCE
	@rm -f $@+
	@echo "x" '$(PERL_PATH_SQ)' $(GITWEB_REPLACE) "$(JSMIN)|$(CSSMIN)" >$@+
	@cmp -s $@+ $@ && rm -f $@+ || mv -f $@+ $@
 
$(MAK_DIR_GITWEB)gitweb.cgi: $(MAK_DIR_GITWEB)GITWEB-BUILD-OPTIONS
$(MAK_DIR_GITWEB)gitweb.cgi: $(MAK_DIR_GITWEB)gitweb.perl
	$(QUIET_GEN)$(RM) $@ $@+ && \
	sed -e '1s|#!.*perl|#!$(PERL_PATH_SQ)|' \
		$(GITWEB_REPLACE) $< >$@+ && \
	chmod +x $@+ && \
	mv $@+ $@
 
$(MAK_DIR_GITWEB)static/gitweb.js: $(addprefix $(MAK_DIR_GITWEB),$(GITWEB_JSLIB_FILES))
	$(QUIET_GEN)$(RM) $@ $@+ && \
	cat $^ >$@+ && \
	mv $@+ $@
 
### Installation rules
 
.PHONY: install
install: all
	$(INSTALL) -d -m 755 '$(DESTDIR_SQ)$(gitwebdir_SQ)'
	$(INSTALL) -m 755 $(addprefix $(MAK_DIR_GITWEB),$(GITWEB_PROGRAMS)) \
		'$(DESTDIR_SQ)$(gitwebdir_SQ)'
	$(INSTALL) -d -m 755 '$(DESTDIR_SQ)$(gitwebstaticdir_SQ)'
	$(INSTALL) -m 644 $(addprefix $(MAK_DIR_GITWEB),$(GITWEB_FILES)) \
		'$(DESTDIR_SQ)$(gitwebstaticdir_SQ)'
 
### Cleaning rules
 
.PHONY: clean
clean:
	$(RM) $(addprefix $(MAK_DIR_GITWEB),gitweb.cgi $(GITWEB_JS_IN) \
		$(GITWEB_JS_MIN) $(GITWEB_CSS_MIN) \
		GITWEB-BUILD-OPTIONS)