xref: /unit/auto/make (revision 743:e0f0cd7d244a)
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
24all: $NXT_DAEMON
25
26.PHONY: $NXT_DAEMON
27$NXT_DAEMON: $NXT_BUILD_DIR/$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$echo "NXT_LIB_UNIT_OBJS = \\" >> $NXT_MAKEFILE
58$echo "	$NXT_BUILD_DIR/src/nxt_lvlhsh.o \\" >> $NXT_MAKEFILE
59$echo "	$NXT_BUILD_DIR/src/nxt_murmur_hash.o \\" >> $NXT_MAKEFILE
60
61for nxt_src in $NXT_LIB_UNIT_SRCS
62do
63    nxt_obj=${nxt_src%.c}.o
64    $echo "	$NXT_BUILD_DIR/$nxt_obj \\" >> $NXT_MAKEFILE
65done
66
67$echo >> $NXT_MAKEFILE
68
69
70# Shared and static library.
71
72cat << END >> $NXT_MAKEFILE
73
74libnxt:	$NXT_BUILD_DIR/$NXT_LIB_SHARED $NXT_BUILD_DIR/$NXT_LIB_STATIC
75
76$NXT_BUILD_DIR/$NXT_LIB_SHARED:	\$(NXT_LIB_OBJS)
77	\$(NXT_SHARED_LOCAL_LINK) -o $NXT_BUILD_DIR/$NXT_LIB_SHARED \\
78		\$(NXT_LIB_OBJS) \\
79		$NXT_LIBM $NXT_LIBS $NXT_LIB_AUX_LIBS
80
81$NXT_BUILD_DIR/$NXT_LIB_STATIC:	\$(NXT_LIB_OBJS)
82	$NXT_STATIC_LINK $NXT_BUILD_DIR/$NXT_LIB_STATIC \\
83		\$(NXT_LIB_OBJS)
84
85$NXT_BUILD_DIR/$NXT_LIB_UNIT_STATIC:	\$(NXT_LIB_UNIT_OBJS)
86	$NXT_STATIC_LINK $NXT_BUILD_DIR/$NXT_LIB_UNIT_STATIC \\
87		\$(NXT_LIB_UNIT_OBJS)
88
89END
90
91
92# Object files.
93
94for nxt_src in $NXT_LIB_SRCS $NXT_TEST_SRCS $NXT_LIB_UNIT_SRCS \
95               src/test/nxt_unit_app_test.c
96do
97    nxt_obj=${nxt_src%.c}.o
98    nxt_dep=${nxt_src%.c}.dep
99    nxt_dep_flags=`nxt_gen_dep_flags`
100    nxt_dep_post=`nxt_gen_dep_post`
101    cat << END >> $NXT_MAKEFILE
102
103$NXT_BUILD_DIR/$nxt_obj: $nxt_src
104	\$(CC) -c \$(CFLAGS) \$(NXT_LIB_INCS) $NXT_LIB_AUX_CFLAGS \\
105	-o $NXT_BUILD_DIR/$nxt_obj \\
106	$nxt_dep_flags \\
107	$nxt_src
108	$nxt_dep_post
109
110-include $NXT_BUILD_DIR/$nxt_dep
111
112END
113
114done
115
116$echo >> $NXT_MAKEFILE
117
118
119# Test object files list.
120
121$echo "NXT_TEST_OBJS = \\" >> $NXT_MAKEFILE
122
123for nxt_src in $NXT_TEST_SRCS
124do
125    nxt_obj=${nxt_src%.c}.o
126    $echo "	$NXT_BUILD_DIR/$nxt_obj \\" >> $NXT_MAKEFILE
127done
128
129
130# Test executables.
131
132cat << END >> $NXT_MAKEFILE
133
134$NXT_BUILD_DIR/tests: \$(NXT_TEST_OBJS) \\
135			$NXT_BUILD_DIR/$NXT_LIB_STATIC
136	\$(NXT_EXEC_LINK) -o $NXT_BUILD_DIR/tests \\
137		\$(CFLAGS) \$(NXT_TEST_OBJS) \\
138		$NXT_BUILD_DIR/$NXT_LIB_STATIC \\
139		$NXT_LD_OPT $NXT_LIBM $NXT_LIBS $NXT_LIB_AUX_LIBS
140
141$NXT_BUILD_DIR/utf8_file_name_test: $NXT_LIB_UTF8_FILE_NAME_TEST_SRCS \\
142			$NXT_BUILD_DIR/$NXT_LIB_STATIC
143	\$(CC) \$(CFLAGS) \$(NXT_LIB_INCS) $NXT_LIB_AUX_CFLAGS \\
144		-o $NXT_BUILD_DIR/utf8_file_name_test \\
145		$NXT_LIB_UTF8_FILE_NAME_TEST_SRCS \\
146		$NXT_BUILD_DIR/$NXT_LIB_STATIC \\
147		$NXT_LD_OPT $NXT_LIBM $NXT_LIBS
148
149$NXT_BUILD_DIR/unit_app_test: $NXT_BUILD_DIR/src/test/nxt_unit_app_test.o \\
150		$NXT_BUILD_DIR/$NXT_LIB_UNIT_STATIC
151	\$(NXT_EXEC_LINK) -o $NXT_BUILD_DIR/unit_app_test \\
152		\$(CFLAGS) $NXT_BUILD_DIR/src/test/nxt_unit_app_test.o \\
153		$NXT_BUILD_DIR/$NXT_LIB_UNIT_STATIC \\
154		$NXT_LD_OPT $NXT_LIBM $NXT_LIBS $NXT_LIB_AUX_LIBS
155
156END
157
158
159NXT_MAKE_INCS="src $NXT_BUILD_DIR"
160NXT_MAKE_SRCS="$NXT_SRCS"
161
162
163# The include pathes list.
164
165$echo -n "NXT_INCS =" >> $NXT_MAKEFILE
166
167for nxt_inc in $NXT_MAKE_INCS
168do
169    $echo -n " -I $nxt_inc" >> $NXT_MAKEFILE
170done
171
172$echo >> $NXT_MAKEFILE
173$echo >> $NXT_MAKEFILE
174
175
176# Object files list.
177
178$echo "NXT_OBJS = \\" >> $NXT_MAKEFILE
179
180for nxt_src in $NXT_MAKE_SRCS
181do
182    nxt_obj=${nxt_src%.c}.o
183    $echo "	$NXT_BUILD_DIR/$nxt_obj \\" >> $NXT_MAKEFILE
184done
185
186$echo >> $NXT_MAKEFILE
187
188
189# unit executable.
190
191cat << END >> $NXT_MAKEFILE
192
193$NXT_BUILD_DIR/$NXT_DAEMON:	$NXT_BUILD_DIR/$NXT_LIB_STATIC \\
194				\$(NXT_OBJS)
195	\$(NXT_EXEC_LINK) -o $NXT_BUILD_DIR/$NXT_DAEMON \$(CFLAGS) \\
196		\$(NXT_OBJS) $NXT_BUILD_DIR/$NXT_LIB_STATIC \\
197		$NXT_LIBM $NXT_LIBS $NXT_LIB_AUX_LIBS
198
199END
200
201
202# unit object files.
203
204for nxt_src in $NXT_MAKE_SRCS
205do
206    nxt_obj=${nxt_src%.c}.o
207    nxt_dep=${nxt_src%.c}.dep
208    nxt_dep_flags=`nxt_gen_dep_flags`
209    nxt_dep_post=`nxt_gen_dep_post`
210    cat << END >> $NXT_MAKEFILE
211
212$NXT_BUILD_DIR/$nxt_obj:	$nxt_src
213	\$(CC) -c \$(CFLAGS) \$(NXT_INCS) \\
214		$NXT_LIB_AUX_CFLAGS \\
215		-o $NXT_BUILD_DIR/$nxt_obj \\
216		$nxt_dep_flags \\
217		$nxt_src
218	$nxt_dep_post
219
220-include $NXT_BUILD_DIR/$nxt_dep
221
222END
223
224done
225
226
227# install
228
229cat << END >> $NXT_MAKEFILE
230
231.PHONY: install ${NXT_DAEMON}-install install-check
232
233install: ${NXT_DAEMON}-install
234
235install-check:
236	@test -n "\$(DESTDIR)$NXT_PREFIX" \\
237	|| (echo; \\
238	    echo "error: to make install you need either"; \\
239	    echo "    to configure --prefix option"; \\
240	    echo "    or to set DESTDIR environment variable."; \\
241	    echo; \\
242	    exit 1)
243
244${NXT_DAEMON}-install: $NXT_DAEMON install-check
245	install -d \$(DESTDIR)$NXT_SBINDIR
246	install -p $NXT_BUILD_DIR/$NXT_DAEMON \$(DESTDIR)$NXT_SBINDIR/
247	install -d \$(DESTDIR)$NXT_STATE
248
249
250.PHONY: uninstall ${NXT_DAEMON}-uninstall
251
252uninstall: ${NXT_DAEMON}-uninstall
253
254${NXT_DAEMON}-uninstall:
255	rm -f \$(DESTDIR)$NXT_SBINDIR/$NXT_DAEMON
256	@rmdir -p \$(DESTDIR)$NXT_SBINDIR 2>/dev/null || true
257
258END
259
260# Makefile.
261# *.dSYM is MacOSX Clang debug information.
262
263cat << END > Makefile
264
265include $NXT_MAKEFILE
266
267.PHONY:		tests
268tests:		$NXT_BUILD_DIR/tests $NXT_BUILD_DIR/utf8_file_name_test \\
269			$NXT_BUILD_DIR/unit_app_test
270
271.PHONY: clean
272clean:
273		rm -rf $NXT_BUILD_DIR *.dSYM Makefile
274
275END
276