xref: /unit/auto/make (revision 1131:ec7d924d8dfb)
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$echo "	$NXT_BUILD_DIR/src/nxt_websocket.o \\" >> $NXT_MAKEFILE
61
62for nxt_src in $NXT_LIB_UNIT_SRCS
63do
64    nxt_obj=${nxt_src%.c}.o
65    $echo "	$NXT_BUILD_DIR/$nxt_obj \\" >> $NXT_MAKEFILE
66done
67
68$echo >> $NXT_MAKEFILE
69
70
71# The version file.
72
73cat << END >> $NXT_MAKEFILE
74
75include version
76
77$NXT_VERSION_H: version
78	$echo '#define NXT_VERSION "\$(NXT_VERSION)"' > $NXT_VERSION_H
79	$echo '#define NXT_VERNUM  \$(NXT_VERNUM)' >> $NXT_VERSION_H
80
81$NXT_BUILD_DIR/src/nxt_unit.o: $NXT_VERSION_H
82$NXT_BUILD_DIR/src/nxt_lib.o: $NXT_VERSION_H
83
84END
85
86
87# Shared and static library.
88
89cat << END >> $NXT_MAKEFILE
90
91libnxt:	$NXT_BUILD_DIR/$NXT_LIB_SHARED $NXT_BUILD_DIR/$NXT_LIB_STATIC
92
93$NXT_BUILD_DIR/$NXT_LIB_SHARED:	\$(NXT_LIB_OBJS)
94	\$(NXT_SHARED_LOCAL_LINK) -o $NXT_BUILD_DIR/$NXT_LIB_SHARED \\
95		\$(NXT_LIB_OBJS) \\
96		$NXT_LIBM $NXT_LIBS $NXT_LIB_AUX_LIBS
97
98$NXT_BUILD_DIR/$NXT_LIB_STATIC:	\$(NXT_LIB_OBJS)
99	$NXT_STATIC_LINK $NXT_BUILD_DIR/$NXT_LIB_STATIC \\
100		\$(NXT_LIB_OBJS)
101
102$NXT_BUILD_DIR/$NXT_LIB_UNIT_STATIC:	\$(NXT_LIB_UNIT_OBJS)
103	$NXT_STATIC_LINK $NXT_BUILD_DIR/$NXT_LIB_UNIT_STATIC \\
104		\$(NXT_LIB_UNIT_OBJS)
105
106END
107
108
109# Object files.
110
111for nxt_src in $NXT_LIB_SRCS $NXT_TEST_SRCS $NXT_LIB_UNIT_SRCS \
112               src/test/nxt_unit_app_test.c \
113               src/test/nxt_unit_websocket_chat.c \
114               src/test/nxt_unit_websocket_echo.c
115do
116    nxt_obj=${nxt_src%.c}.o
117    nxt_dep=${nxt_src%.c}.dep
118    nxt_dep_flags=`nxt_gen_dep_flags`
119    nxt_dep_post=`nxt_gen_dep_post`
120    cat << END >> $NXT_MAKEFILE
121
122$NXT_BUILD_DIR/$nxt_obj: $nxt_src
123	\$(CC) -c \$(CFLAGS) \$(NXT_LIB_INCS) $NXT_LIB_AUX_CFLAGS \\
124	-o $NXT_BUILD_DIR/$nxt_obj \\
125	$nxt_dep_flags \\
126	$nxt_src
127	$nxt_dep_post
128
129-include $NXT_BUILD_DIR/$nxt_dep
130
131END
132
133done
134
135$echo >> $NXT_MAKEFILE
136
137
138if [ $NXT_TESTS = YES ]; then
139
140    # Test object files list.
141
142    $echo "NXT_TEST_OBJS = \\" >> $NXT_MAKEFILE
143
144    for nxt_src in $NXT_TEST_SRCS
145    do
146        nxt_obj=${nxt_src%.c}.o
147        $echo "	$NXT_BUILD_DIR/$nxt_obj \\" >> $NXT_MAKEFILE
148    done
149
150    # Test executables.
151
152    cat << END >> $NXT_MAKEFILE
153
154.PHONY: tests
155tests:		$NXT_BUILD_DIR/tests $NXT_BUILD_DIR/utf8_file_name_test \\
156			$NXT_BUILD_DIR/unit_app_test $NXT_BUILD_DIR/unit_websocket_chat \\
157			$NXT_BUILD_DIR/unit_websocket_echo
158
159$NXT_BUILD_DIR/tests: \$(NXT_TEST_OBJS) \\
160			$NXT_BUILD_DIR/$NXT_LIB_STATIC
161	\$(NXT_EXEC_LINK) -o $NXT_BUILD_DIR/tests \\
162		\$(CFLAGS) \$(NXT_TEST_OBJS) \\
163		$NXT_BUILD_DIR/$NXT_LIB_STATIC \\
164		$NXT_LD_OPT $NXT_LIBM $NXT_LIBS $NXT_LIB_AUX_LIBS
165
166$NXT_BUILD_DIR/utf8_file_name_test: $NXT_LIB_UTF8_FILE_NAME_TEST_SRCS \\
167			$NXT_BUILD_DIR/$NXT_LIB_STATIC
168	\$(CC) \$(CFLAGS) \$(NXT_LIB_INCS) $NXT_LIB_AUX_CFLAGS \\
169		-o $NXT_BUILD_DIR/utf8_file_name_test \\
170		$NXT_LIB_UTF8_FILE_NAME_TEST_SRCS \\
171		$NXT_BUILD_DIR/$NXT_LIB_STATIC \\
172		$NXT_LD_OPT $NXT_LIBM $NXT_LIBS $NXT_LIB_AUX_LIBS
173
174$NXT_BUILD_DIR/unit_app_test: $NXT_BUILD_DIR/src/test/nxt_unit_app_test.o \\
175		$NXT_BUILD_DIR/$NXT_LIB_UNIT_STATIC
176	\$(NXT_EXEC_LINK) -o $NXT_BUILD_DIR/unit_app_test \\
177		\$(CFLAGS) $NXT_BUILD_DIR/src/test/nxt_unit_app_test.o \\
178		$NXT_BUILD_DIR/$NXT_LIB_UNIT_STATIC \\
179		$NXT_LD_OPT $NXT_LIBM $NXT_LIBS $NXT_LIB_AUX_LIBS
180
181$NXT_BUILD_DIR/unit_websocket_chat: \\
182		$NXT_BUILD_DIR/src/test/nxt_unit_websocket_chat.o \\
183		$NXT_BUILD_DIR/$NXT_LIB_UNIT_STATIC
184	\$(NXT_EXEC_LINK) -o $NXT_BUILD_DIR/unit_websocket_chat \\
185		\$(CFLAGS) $NXT_BUILD_DIR/src/test/nxt_unit_websocket_chat.o \\
186		$NXT_BUILD_DIR/$NXT_LIB_UNIT_STATIC \\
187		$NXT_LD_OPT $NXT_LIBM $NXT_LIBS $NXT_LIB_AUX_LIBS
188
189$NXT_BUILD_DIR/unit_websocket_echo: \\
190		$NXT_BUILD_DIR/src/test/nxt_unit_websocket_echo.o \\
191		$NXT_BUILD_DIR/$NXT_LIB_UNIT_STATIC
192	\$(NXT_EXEC_LINK) -o $NXT_BUILD_DIR/unit_websocket_echo \\
193		\$(CFLAGS) $NXT_BUILD_DIR/src/test/nxt_unit_websocket_echo.o \\
194		$NXT_BUILD_DIR/$NXT_LIB_UNIT_STATIC \\
195		$NXT_LD_OPT $NXT_LIBM $NXT_LIBS $NXT_LIB_AUX_LIBS
196
197END
198
199else
200
201    cat << END >> $NXT_MAKEFILE
202
203.PHONY: tests
204tests:
205	@(echo; \\
206	  echo "error: to make tests you need to configure --tests option."; \\
207	  echo; \\
208	  exit 1)
209
210END
211
212fi
213
214
215NXT_MAKE_INCS="src $NXT_BUILD_DIR"
216NXT_MAKE_SRCS="$NXT_SRCS"
217
218
219# The include paths list.
220
221$echo -n "NXT_INCS =" >> $NXT_MAKEFILE
222
223for nxt_inc in $NXT_MAKE_INCS
224do
225    $echo -n " -I $nxt_inc" >> $NXT_MAKEFILE
226done
227
228$echo >> $NXT_MAKEFILE
229$echo >> $NXT_MAKEFILE
230
231
232# Object files list.
233
234$echo "NXT_OBJS = \\" >> $NXT_MAKEFILE
235
236for nxt_src in $NXT_MAKE_SRCS
237do
238    nxt_obj=${nxt_src%.c}.o
239    $echo "	$NXT_BUILD_DIR/$nxt_obj \\" >> $NXT_MAKEFILE
240done
241
242$echo >> $NXT_MAKEFILE
243
244
245# unit executable.
246
247cat << END >> $NXT_MAKEFILE
248
249$NXT_BUILD_DIR/$NXT_DAEMON:	$NXT_BUILD_DIR/$NXT_LIB_STATIC \\
250				\$(NXT_OBJS)
251	\$(NXT_EXEC_LINK) -o $NXT_BUILD_DIR/$NXT_DAEMON \$(CFLAGS) \\
252		\$(NXT_OBJS) $NXT_BUILD_DIR/$NXT_LIB_STATIC \\
253		$NXT_LIBM $NXT_LIBS $NXT_LIB_AUX_LIBS
254
255END
256
257
258# unit object files.
259
260for nxt_src in $NXT_MAKE_SRCS
261do
262    nxt_obj=${nxt_src%.c}.o
263    nxt_dep=${nxt_src%.c}.dep
264    nxt_dep_flags=`nxt_gen_dep_flags`
265    nxt_dep_post=`nxt_gen_dep_post`
266    cat << END >> $NXT_MAKEFILE
267
268$NXT_BUILD_DIR/$nxt_obj:	$nxt_src
269	\$(CC) -c \$(CFLAGS) \$(NXT_INCS) \\
270		$NXT_LIB_AUX_CFLAGS \\
271		-o $NXT_BUILD_DIR/$nxt_obj \\
272		$nxt_dep_flags \\
273		$nxt_src
274	$nxt_dep_post
275
276-include $NXT_BUILD_DIR/$nxt_dep
277
278END
279
280done
281
282
283# install
284
285cat << END >> $NXT_MAKEFILE
286
287.PHONY: install ${NXT_DAEMON}-install install-check
288
289install: ${NXT_DAEMON}-install
290
291install-check:
292	@test -n "\$(DESTDIR)$NXT_PREFIX" \\
293	|| (echo; \\
294	    echo "error: to make install you need either"; \\
295	    echo "    to configure --prefix option"; \\
296	    echo "    or to set DESTDIR environment variable."; \\
297	    echo; \\
298	    exit 1)
299
300${NXT_DAEMON}-install: $NXT_DAEMON install-check
301	install -d \$(DESTDIR)$NXT_SBINDIR
302	install -p $NXT_BUILD_DIR/$NXT_DAEMON \$(DESTDIR)$NXT_SBINDIR/
303	install -d \$(DESTDIR)$NXT_STATE
304
305
306.PHONY: uninstall ${NXT_DAEMON}-uninstall
307
308uninstall: ${NXT_DAEMON}-uninstall
309
310${NXT_DAEMON}-uninstall:
311	rm -f \$(DESTDIR)$NXT_SBINDIR/$NXT_DAEMON
312	@rmdir -p \$(DESTDIR)$NXT_SBINDIR 2>/dev/null || true
313
314END
315
316cat << END >> $NXT_MAKEFILE
317
318.PHONY: libunit-install libunit-uninstall
319
320libunit-install: $NXT_BUILD_DIR/$NXT_LIB_UNIT_STATIC
321	install -d \$(DESTDIR)$NXT_LIBDIR
322	install -p -m u=rw,go=r $NXT_BUILD_DIR/$NXT_LIB_UNIT_STATIC \
323		\$(DESTDIR)$NXT_LIBDIR/
324	install -d \$(DESTDIR)$NXT_INCDIR
325	install -p -m u=rw,go=r src/nxt_unit.h src/nxt_unit_field.h \
326		src/nxt_unit_request.h src/nxt_unit_response.h src/nxt_unit_sptr.h \
327		src/nxt_unit_typedefs.h $NXT_BUILD_DIR/nxt_version.h \
328		\$(DESTDIR)$NXT_INCDIR/
329
330libunit-uninstall:
331	rm -f \$(DESTDIR)$NXT_LIBDIR/$NXT_LIB_UNIT_STATIC
332	@rmdir -p \$(DESTDIR)$NXT_LIBDIR 2>/dev/null || true
333	rm -f \$(DESTDIR)$NXT_INCDIR/nxt_unit.h \
334		\$(DESTDIR)$NXT_INCDIR/nxt_unit_field.h \
335		\$(DESTDIR)$NXT_INCDIR/nxt_unit_request.h \
336		\$(DESTDIR)$NXT_INCDIR/nxt_unit_response.h \
337		\$(DESTDIR)$NXT_INCDIR/nxt_unit_sptr.h \
338		\$(DESTDIR)$NXT_INCDIR/nxt_unit_typedefs.h \
339		\$(DESTDIR)$NXT_INCDIR/nxt_version.h
340	@rmdir -p \$(DESTDIR)$NXT_INCDIR 2>/dev/null || true
341
342END
343
344# Makefile.
345# *.dSYM is MacOSX Clang debug information.
346
347cat << END > Makefile
348
349include $NXT_MAKEFILE
350
351.PHONY: clean
352clean:
353		rm -rf $NXT_BUILD_DIR *.dSYM Makefile
354
355END
356