xref: /unit/auto/make (revision 460:a0e02a322b52)
1
2# Copyright (C) Igor Sysoev
3# Copyright (C) Valentin V. Bartenev
4# Copyright (C) NGINX, Inc.
5
6. auto/cc/deps
7
8$echo "creating $NXT_MAKEFILE"
9
10mkdir -p $NXT_BUILD_DIR/src \
11         $NXT_BUILD_DIR/src/test
12
13
14cat << END > $NXT_MAKEFILE
15
16CC =			$CC
17
18CFLAGS = 		$NXT_CFLAGS $NXT_CC_OPT $CFLAGS
19
20NXT_EXEC_LINK =		$NXT_EXEC_LINK $NXT_LD_OPT
21NXT_SHARED_LOCAL_LINK =	$NXT_SHARED_LOCAL_LINK $NXT_LD_OPT
22NXT_MODULE_LINK =	$NXT_MODULE_LINK
23
24.PHONY: $NXT_DAEMON
25$NXT_DAEMON: $NXT_BUILD_DIR/$NXT_DAEMON
26
27all: $NXT_DAEMON
28
29END
30
31
32# The include paths list.
33
34$echo -n "NXT_LIB_INCS =" >> $NXT_MAKEFILE
35
36for nxt_inc in src $NXT_BUILD_DIR
37do
38    $echo -n " -I $nxt_inc" >> $NXT_MAKEFILE
39done
40
41$echo >> $NXT_MAKEFILE
42$echo >> $NXT_MAKEFILE
43
44
45# Library object files list.
46
47$echo "NXT_LIB_OBJS = \\" >> $NXT_MAKEFILE
48
49for nxt_src in $NXT_LIB_SRCS
50do
51    nxt_obj=${nxt_src%.c}.o
52    $echo "	$NXT_BUILD_DIR/$nxt_obj \\" >> $NXT_MAKEFILE
53done
54
55$echo >> $NXT_MAKEFILE
56
57
58# Shared and static library.
59
60cat << END >> $NXT_MAKEFILE
61
62libnxt:	$NXT_BUILD_DIR/$NXT_LIB_SHARED $NXT_BUILD_DIR/$NXT_LIB_STATIC
63
64$NXT_BUILD_DIR/$NXT_LIB_SHARED:	\$(NXT_LIB_OBJS)
65	\$(NXT_SHARED_LOCAL_LINK) -o $NXT_BUILD_DIR/$NXT_LIB_SHARED \\
66		\$(NXT_LIB_OBJS) \\
67		$NXT_LIBM $NXT_LIBS $NXT_LIB_AUX_LIBS
68
69$NXT_BUILD_DIR/$NXT_LIB_STATIC:	\$(NXT_LIB_OBJS)
70	$NXT_STATIC_LINK $NXT_BUILD_DIR/$NXT_LIB_STATIC \\
71		\$(NXT_LIB_OBJS)
72
73END
74
75
76# Object files.
77
78for nxt_src in $NXT_LIB_SRCS $NXT_TEST_SRCS
79do
80    nxt_obj=${nxt_src%.c}.o
81    nxt_dep=${nxt_src%.c}.dep
82    nxt_dep_flags=`nxt_gen_dep_flags`
83    nxt_dep_post=`nxt_gen_dep_post`
84    cat << END >> $NXT_MAKEFILE
85
86$NXT_BUILD_DIR/$nxt_obj: $nxt_src
87	\$(CC) -c \$(CFLAGS) \$(NXT_LIB_INCS) $NXT_LIB_AUX_CFLAGS \\
88	-o $NXT_BUILD_DIR/$nxt_obj \\
89	$nxt_dep_flags \\
90	$nxt_src
91	$nxt_dep_post
92
93-include $NXT_BUILD_DIR/$nxt_dep
94
95END
96
97done
98
99$echo >> $NXT_MAKEFILE
100
101
102# Test object files list.
103
104$echo "NXT_TEST_OBJS = \\" >> $NXT_MAKEFILE
105
106for nxt_src in $NXT_TEST_SRCS
107do
108    nxt_obj=${nxt_src%.c}.o
109    $echo "	$NXT_BUILD_DIR/$nxt_obj \\" >> $NXT_MAKEFILE
110done
111
112
113# Test executables.
114
115cat << END >> $NXT_MAKEFILE
116
117$NXT_BUILD_DIR/tests: \$(NXT_TEST_OBJS) \\
118			$NXT_BUILD_DIR/$NXT_LIB_STATIC
119	\$(NXT_EXEC_LINK) -o $NXT_BUILD_DIR/tests \\
120		\$(CFLAGS) \$(NXT_TEST_OBJS) \\
121		$NXT_BUILD_DIR/$NXT_LIB_STATIC \\
122		$NXT_LD_OPT $NXT_LIBM $NXT_LIBS $NXT_LIB_AUX_LIBS
123
124$NXT_BUILD_DIR/utf8_file_name_test: $NXT_LIB_UTF8_FILE_NAME_TEST_SRCS \\
125			$NXT_BUILD_DIR/$NXT_LIB_STATIC
126	\$(CC) \$(CFLAGS) \$(NXT_LIB_INCS) $NXT_LIB_AUX_CFLAGS \\
127		-o $NXT_BUILD_DIR/utf8_file_name_test \\
128		$NXT_LIB_UTF8_FILE_NAME_TEST_SRCS \\
129		$NXT_BUILD_DIR/$NXT_LIB_STATIC \\
130		$NXT_LD_OPT $NXT_LIBM $NXT_LIBS
131
132END
133
134
135NXT_MAKE_INCS="src $NXT_BUILD_DIR"
136NXT_MAKE_SRCS="$NXT_SRCS"
137
138
139# The include pathes list.
140
141$echo -n "NXT_INCS =" >> $NXT_MAKEFILE
142
143for nxt_inc in $NXT_MAKE_INCS
144do
145    $echo -n " -I $nxt_inc" >> $NXT_MAKEFILE
146done
147
148$echo >> $NXT_MAKEFILE
149$echo >> $NXT_MAKEFILE
150
151
152# Object files list.
153
154$echo "NXT_OBJS = \\" >> $NXT_MAKEFILE
155
156for nxt_src in $NXT_MAKE_SRCS
157do
158    nxt_obj=${nxt_src%.c}.o
159    $echo "	$NXT_BUILD_DIR/$nxt_obj \\" >> $NXT_MAKEFILE
160done
161
162$echo >> $NXT_MAKEFILE
163
164
165# unit executable.
166
167cat << END >> $NXT_MAKEFILE
168
169$NXT_BUILD_DIR/$NXT_DAEMON:	$NXT_BUILD_DIR/$NXT_LIB_STATIC \\
170				\$(NXT_OBJS)
171	\$(NXT_EXEC_LINK) -o $NXT_BUILD_DIR/$NXT_DAEMON \$(CFLAGS) \\
172		\$(NXT_OBJS) $NXT_BUILD_DIR/$NXT_LIB_STATIC \\
173		$NXT_LIBM $NXT_LIBS $NXT_LIB_AUX_LIBS
174
175END
176
177
178# unit object files.
179
180for nxt_src in $NXT_MAKE_SRCS
181do
182    nxt_obj=${nxt_src%.c}.o
183    nxt_dep=${nxt_src%.c}.dep
184    nxt_dep_flags=`nxt_gen_dep_flags`
185    nxt_dep_post=`nxt_gen_dep_post`
186    cat << END >> $NXT_MAKEFILE
187
188$NXT_BUILD_DIR/$nxt_obj:	$nxt_src
189	\$(CC) -c \$(CFLAGS) \$(NXT_INCS) \\
190		$NXT_LIB_AUX_CFLAGS \\
191		-o $NXT_BUILD_DIR/$nxt_obj \\
192		$nxt_dep_flags \\
193		$nxt_src
194	$nxt_dep_post
195
196-include $NXT_BUILD_DIR/$nxt_dep
197
198END
199
200done
201
202
203# install
204
205cat << END >> $NXT_MAKEFILE
206
207.PHONY: install ${NXT_DAEMON}-install
208
209install: ${NXT_DAEMON}-install
210
211${NXT_DAEMON}-install: $NXT_DAEMON
212	install -d \$(DESTDIR)$NXT_SBINDIR
213	install -p $NXT_BUILD_DIR/$NXT_DAEMON \$(DESTDIR)$NXT_SBINDIR/
214	install -d \$(DESTDIR)$NXT_STATE
215
216
217.PHONY: uninstall ${NXT_DAEMON}-uninstall
218
219uninstall: ${NXT_DAEMON}-uninstall
220
221${NXT_DAEMON}-uninstall:
222	rm -f \$(DESTDIR)$NXT_SBINDIR/$NXT_DAEMON
223	@rmdir -p \$(DESTDIR)$NXT_SBINDIR 2>/dev/null || true
224
225END
226
227nxt_version=`grep NXT_VERSION src/nxt_main.h | sed -e 's/.*"\(.*\)".*/\1/'`
228
229# Makefile.
230# *.dSYM is MacOSX Clang debug information.
231
232cat << END > Makefile
233
234NXT_VERSION =	$nxt_version
235
236include $NXT_MAKEFILE
237
238.PHONY:		tests
239tests:		$NXT_BUILD_DIR/tests $NXT_BUILD_DIR/utf8_file_name_test
240
241.PHONY: clean
242clean:
243		rm -rf $NXT_BUILD_DIR *.dSYM Makefile
244
245.PHONY: dist
246dist:
247		rm -f unit-\$(NXT_VERSION).tar.gz
248		hg archive unit-\$(NXT_VERSION).tar.gz \\
249			-p unit-\$(NXT_VERSION) \\
250			-X ".hg*" -X "pkg/" -X "docs/"
251
252END
253