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
17AR =			$AR
18
19CFLAGS = 		$NXT_CFLAGS $NXT_CC_OPT $CFLAGS
20
21NXT_EXEC_LINK =		$NXT_EXEC_LINK $NXT_LD_OPT
22NXT_SHARED_LOCAL_LINK =	$NXT_SHARED_LOCAL_LINK $NXT_LD_OPT
23NXT_MODULE_LINK =	$NXT_MODULE_LINK
24
25all: $NXT_DAEMON manpage
26
27.PHONY: $NXT_DAEMON manpage
28$NXT_DAEMON: $NXT_BUILD_DIR/$NXT_DAEMON
29manpage: $NXT_BUILD_DIR/unitd.8
30
31END
32
33
34# The include paths list.
35
36$echo -n "NXT_LIB_INCS =" >> $NXT_MAKEFILE
37
38for nxt_inc in src $NXT_BUILD_DIR
39do
40    $echo -n " -I $nxt_inc" >> $NXT_MAKEFILE
41done
42
43$echo >> $NXT_MAKEFILE
44$echo >> $NXT_MAKEFILE
45
46
47# Library object files list.
48
49$echo "NXT_LIB_OBJS = \\" >> $NXT_MAKEFILE
50
51for nxt_src in $NXT_LIB_SRCS
52do
53    nxt_obj=${nxt_src%.c}.o
54    $echo "	$NXT_BUILD_DIR/$nxt_obj \\" >> $NXT_MAKEFILE
55done
56
57$echo >> $NXT_MAKEFILE
58
59$echo "NXT_LIB_UNIT_OBJS = \\" >> $NXT_MAKEFILE
60$echo "	$NXT_BUILD_DIR/src/nxt_lvlhsh.o \\" >> $NXT_MAKEFILE
61$echo "	$NXT_BUILD_DIR/src/nxt_murmur_hash.o \\" >> $NXT_MAKEFILE
62$echo "	$NXT_BUILD_DIR/src/nxt_socket_msg.o \\" >> $NXT_MAKEFILE
63$echo "	$NXT_BUILD_DIR/src/nxt_websocket.o \\" >> $NXT_MAKEFILE
64
65for nxt_src in $NXT_LIB_UNIT_SRCS
66do
67    nxt_obj=${nxt_src%.c}.o
68    $echo "	$NXT_BUILD_DIR/$nxt_obj \\" >> $NXT_MAKEFILE
69done
70
71$echo >> $NXT_MAKEFILE
72
73
74# The version file.
75
76cat << END >> $NXT_MAKEFILE
77
78include version
79
80$NXT_VERSION_H: version
81	$echo '#define NXT_VERSION "\$(NXT_VERSION)"' > $NXT_VERSION_H
82	$echo '#define NXT_VERNUM  \$(NXT_VERNUM)' >> $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 $NXT_VERSION_H
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
135nxt_src=src/test/nxt_cq_test.c
136nxt_obj=src/test/nxt_ncq_test.o
137nxt_dep=src/test/nxt_ncq_test.dep
138nxt_dep_flags=`nxt_gen_dep_flags`
139nxt_dep_post=`nxt_gen_dep_post`
140cat << END >> $NXT_MAKEFILE
141
142$NXT_BUILD_DIR/$nxt_obj: $nxt_src $NXT_VERSION_H
143	\$(CC) -c \$(CFLAGS) -DNXT_NCQ_TEST=1 \$(NXT_LIB_INCS) $NXT_LIB_AUX_CFLAGS \\
144	-o $NXT_BUILD_DIR/$nxt_obj \\
145	$nxt_dep_flags \\
146	$nxt_src
147	$nxt_dep_post
148
149-include $NXT_BUILD_DIR/$nxt_dep
150
151END
152
153nxt_src=src/test/nxt_cq_test.c
154nxt_obj=src/test/nxt_vbcq_test.o
155nxt_dep=src/test/nxt_vbcq_test.dep
156nxt_dep_flags=`nxt_gen_dep_flags`
157nxt_dep_post=`nxt_gen_dep_post`
158cat << END >> $NXT_MAKEFILE
159
160$NXT_BUILD_DIR/$nxt_obj: $nxt_src $NXT_VERSION_H
161	\$(CC) -c \$(CFLAGS) -DNXT_NCQ_TEST=0 \$(NXT_LIB_INCS) $NXT_LIB_AUX_CFLAGS \\
162	-o $NXT_BUILD_DIR/$nxt_obj \\
163	$nxt_dep_flags \\
164	$nxt_src
165	$nxt_dep_post
166
167-include $NXT_BUILD_DIR/$nxt_dep
168
169END
170
171$echo >> $NXT_MAKEFILE
172
173
174if [ $NXT_TESTS = YES ]; then
175
176    # Test object files list.
177
178    $echo "NXT_TEST_OBJS = \\" >> $NXT_MAKEFILE
179
180    for nxt_src in $NXT_TEST_SRCS
181    do
182        nxt_obj=${nxt_src%.c}.o
183        $echo "	$NXT_BUILD_DIR/$nxt_obj \\" >> $NXT_MAKEFILE
184    done
185
186    # Test executables.
187
188    cat << END >> $NXT_MAKEFILE
189
190.PHONY: tests
191tests:		$NXT_BUILD_DIR/tests $NXT_BUILD_DIR/utf8_file_name_test \\
192			$NXT_BUILD_DIR/ncq_test \\
193			$NXT_BUILD_DIR/vbcq_test \\
194			$NXT_BUILD_DIR/unit_app_test $NXT_BUILD_DIR/unit_websocket_chat \\
195			$NXT_BUILD_DIR/unit_websocket_echo
196
197$NXT_BUILD_DIR/tests: \$(NXT_TEST_OBJS) \\
198			$NXT_BUILD_DIR/$NXT_LIB_STATIC
199	\$(NXT_EXEC_LINK) -o $NXT_BUILD_DIR/tests \\
200		\$(CFLAGS) \$(NXT_TEST_OBJS) \\
201		$NXT_BUILD_DIR/$NXT_LIB_STATIC \\
202		$NXT_LD_OPT $NXT_LIBM $NXT_LIBS $NXT_LIB_AUX_LIBS
203
204$NXT_BUILD_DIR/utf8_file_name_test: $NXT_LIB_UTF8_FILE_NAME_TEST_SRCS \\
205			$NXT_BUILD_DIR/$NXT_LIB_STATIC
206	\$(CC) \$(CFLAGS) \$(NXT_LIB_INCS) $NXT_LIB_AUX_CFLAGS \\
207		-o $NXT_BUILD_DIR/utf8_file_name_test \\
208		$NXT_LIB_UTF8_FILE_NAME_TEST_SRCS \\
209		$NXT_BUILD_DIR/$NXT_LIB_STATIC \\
210		$NXT_LD_OPT $NXT_LIBM $NXT_LIBS $NXT_LIB_AUX_LIBS
211
212$NXT_BUILD_DIR/ncq_test: $NXT_BUILD_DIR/src/test/nxt_ncq_test.o \\
213			$NXT_BUILD_DIR/$NXT_LIB_STATIC
214	\$(NXT_EXEC_LINK) -o $NXT_BUILD_DIR/ncq_test \\
215		\$(CFLAGS) $NXT_BUILD_DIR/src/test/nxt_ncq_test.o \\
216		$NXT_BUILD_DIR/$NXT_LIB_STATIC \\
217		$NXT_LD_OPT $NXT_LIBM $NXT_LIBS $NXT_LIB_AUX_LIBS
218
219$NXT_BUILD_DIR/vbcq_test: $NXT_BUILD_DIR/src/test/nxt_vbcq_test.o \\
220			$NXT_BUILD_DIR/$NXT_LIB_STATIC
221	\$(NXT_EXEC_LINK) -o $NXT_BUILD_DIR/vbcq_test \\
222		\$(CFLAGS) $NXT_BUILD_DIR/src/test/nxt_vbcq_test.o \\
223		$NXT_BUILD_DIR/$NXT_LIB_STATIC \\
224		$NXT_LD_OPT $NXT_LIBM $NXT_LIBS $NXT_LIB_AUX_LIBS
225
226$NXT_BUILD_DIR/unit_app_test: $NXT_BUILD_DIR/src/test/nxt_unit_app_test.o \\
227		$NXT_BUILD_DIR/$NXT_LIB_UNIT_STATIC
228	\$(NXT_EXEC_LINK) -o $NXT_BUILD_DIR/unit_app_test \\
229		\$(CFLAGS) $NXT_BUILD_DIR/src/test/nxt_unit_app_test.o \\
230		$NXT_BUILD_DIR/$NXT_LIB_UNIT_STATIC \\
231		$NXT_LD_OPT $NXT_LIBM $NXT_LIBS $NXT_LIB_AUX_LIBS
232
233$NXT_BUILD_DIR/unit_websocket_chat: \\
234		$NXT_BUILD_DIR/src/test/nxt_unit_websocket_chat.o \\
235		$NXT_BUILD_DIR/$NXT_LIB_UNIT_STATIC
236	\$(NXT_EXEC_LINK) -o $NXT_BUILD_DIR/unit_websocket_chat \\
237		\$(CFLAGS) $NXT_BUILD_DIR/src/test/nxt_unit_websocket_chat.o \\
238		$NXT_BUILD_DIR/$NXT_LIB_UNIT_STATIC \\
239		$NXT_LD_OPT $NXT_LIBM $NXT_LIBS $NXT_LIB_AUX_LIBS
240
241$NXT_BUILD_DIR/unit_websocket_echo: \\
242		$NXT_BUILD_DIR/src/test/nxt_unit_websocket_echo.o \\
243		$NXT_BUILD_DIR/$NXT_LIB_UNIT_STATIC
244	\$(NXT_EXEC_LINK) -o $NXT_BUILD_DIR/unit_websocket_echo \\
245		\$(CFLAGS) $NXT_BUILD_DIR/src/test/nxt_unit_websocket_echo.o \\
246		$NXT_BUILD_DIR/$NXT_LIB_UNIT_STATIC \\
247		$NXT_LD_OPT $NXT_LIBM $NXT_LIBS $NXT_LIB_AUX_LIBS
248
249END
250
251else
252
253    cat << END >> $NXT_MAKEFILE
254
255.PHONY: tests
256tests:
257	@(echo; \\
258	  echo "error: to make tests you need to configure --tests option."; \\
259	  echo; \\
260	  exit 1)
261
262END
263
264fi
265
266
267NXT_MAKE_INCS="src $NXT_BUILD_DIR"
268NXT_MAKE_SRCS="$NXT_SRCS"
269
270
271# The include paths list.
272
273$echo -n "NXT_INCS =" >> $NXT_MAKEFILE
274
275for nxt_inc in $NXT_MAKE_INCS
276do
277    $echo -n " -I $nxt_inc" >> $NXT_MAKEFILE
278done
279
280$echo >> $NXT_MAKEFILE
281$echo >> $NXT_MAKEFILE
282
283
284# Object files list.
285
286$echo "NXT_OBJS = \\" >> $NXT_MAKEFILE
287
288for nxt_src in $NXT_MAKE_SRCS
289do
290    nxt_obj=${nxt_src%.c}.o
291    $echo "	$NXT_BUILD_DIR/$nxt_obj \\" >> $NXT_MAKEFILE
292done
293
294$echo >> $NXT_MAKEFILE
295
296
297# unit executable.
298
299cat << END >> $NXT_MAKEFILE
300
301$NXT_BUILD_DIR/$NXT_DAEMON:	$NXT_BUILD_DIR/$NXT_LIB_STATIC \\
302				\$(NXT_OBJS)
303	\$(NXT_EXEC_LINK) -o $NXT_BUILD_DIR/$NXT_DAEMON \$(CFLAGS) \\
304		\$(NXT_OBJS) $NXT_BUILD_DIR/$NXT_LIB_STATIC \\
305		$NXT_LIBM $NXT_LIBS $NXT_LIB_AUX_LIBS
306
307END
308
309
310# unitd man page
311
312cat << END >> $NXT_MAKEFILE
313
314$NXT_BUILD_DIR/unitd.8: docs/man/unitd.8.in $NXT_BUILD_DIR/nxt_auto_config.h
315	sed -e "s|%%ERROR_LOG_PATH%%|$NXT_LOG|" \\
316		-e "s|%%PID_PATH%%|$NXT_PID|" \\
317		-e "s|%%SOCKET_PATH%%|$NXT_CONTROL|" \\
318		< docs/man/unitd.8.in > \$@
319
320END
321
322
323# unit object files.
324
325for nxt_src in $NXT_MAKE_SRCS
326do
327    nxt_obj=${nxt_src%.c}.o
328    nxt_dep=${nxt_src%.c}.dep
329    nxt_dep_flags=`nxt_gen_dep_flags`
330    nxt_dep_post=`nxt_gen_dep_post`
331    cat << END >> $NXT_MAKEFILE
332
333$NXT_BUILD_DIR/$nxt_obj:	$nxt_src $NXT_VERSION_H
334	\$(CC) -c \$(CFLAGS) \$(NXT_INCS) \\
335		$NXT_LIB_AUX_CFLAGS \\
336		-o $NXT_BUILD_DIR/$nxt_obj \\
337		$nxt_dep_flags \\
338		$nxt_src
339	$nxt_dep_post
340
341-include $NXT_BUILD_DIR/$nxt_dep
342
343END
344
345done
346
347
348# install
349
350cat << END >> $NXT_MAKEFILE
351
352.PHONY: install ${NXT_DAEMON}-install install-check manpage-install
353
354install: ${NXT_DAEMON}-install manpage-install
355
356install-check:
357	@test -n "\$(DESTDIR)$NXT_PREFIX" \\
358	|| (echo; \\
359	    echo "error: to make install you need either"; \\
360	    echo "    to configure --prefix option"; \\
361	    echo "    or to set DESTDIR environment variable."; \\
362	    echo; \\
363	    exit 1)
364
365${NXT_DAEMON}-install: $NXT_DAEMON install-check
366	install -d \$(DESTDIR)$NXT_SBINDIR
367	install -p $NXT_BUILD_DIR/$NXT_DAEMON \$(DESTDIR)$NXT_SBINDIR/
368	install -d \$(DESTDIR)$NXT_STATE
369
370manpage-install: manpage install-check
371	install -d \$(DESTDIR)$NXT_MANDIR/man8
372	install -p -m644 $NXT_BUILD_DIR/unitd.8 \$(DESTDIR)$NXT_MANDIR/man8/
373
374.PHONY: uninstall ${NXT_DAEMON}-uninstall manpage-uninstall
375
376uninstall: ${NXT_DAEMON}-uninstall manpage-uninstall
377
378${NXT_DAEMON}-uninstall:
379	rm -f \$(DESTDIR)$NXT_SBINDIR/$NXT_DAEMON
380	@rmdir -p \$(DESTDIR)$NXT_SBINDIR 2>/dev/null || true
381
382manpage-uninstall:
383	rm -f \$(DESTDIR)$NXT_MANDIR/man8/unitd.8
384	@rmdir -p \$(DESTDIR)$NXT_MANDIR/man8 2>/dev/null || true
385
386END
387
388cat << END >> $NXT_MAKEFILE
389
390.PHONY: libunit-install libunit-uninstall
391
392libunit-install: $NXT_BUILD_DIR/$NXT_LIB_UNIT_STATIC
393	install -d \$(DESTDIR)$NXT_LIBDIR
394	install -p -m u=rw,go=r $NXT_BUILD_DIR/$NXT_LIB_UNIT_STATIC \
395		\$(DESTDIR)$NXT_LIBDIR/
396	install -d \$(DESTDIR)$NXT_INCDIR
397	install -p -m u=rw,go=r src/nxt_unit.h \
398		src/nxt_unit_field.h \
399		src/nxt_unit_request.h \
400		src/nxt_unit_response.h \
401		src/nxt_unit_sptr.h \
402		src/nxt_unit_typedefs.h \
403		src/nxt_unit_websocket.h \
404		$NXT_BUILD_DIR/nxt_auto_config.h \
405		$NXT_BUILD_DIR/nxt_version.h \
406		src/nxt_websocket_header.h \
407		\$(DESTDIR)$NXT_INCDIR/
408
409libunit-uninstall:
410	rm -f \$(DESTDIR)$NXT_LIBDIR/$NXT_LIB_UNIT_STATIC
411	@rmdir -p \$(DESTDIR)$NXT_LIBDIR 2>/dev/null || true
412	rm -f \$(DESTDIR)$NXT_INCDIR/nxt_unit.h \
413		\$(DESTDIR)$NXT_INCDIR/nxt_unit_field.h \
414		\$(DESTDIR)$NXT_INCDIR/nxt_unit_request.h \
415		\$(DESTDIR)$NXT_INCDIR/nxt_unit_response.h \
416		\$(DESTDIR)$NXT_INCDIR/nxt_unit_sptr.h \
417		\$(DESTDIR)$NXT_INCDIR/nxt_unit_typedefs.h \
418		\$(DESTDIR)$NXT_INCDIR/nxt_unit_websocket.h \
419		\$(DESTDIR)$NXT_INCDIR/nxt_auto_config.h \
420		\$(DESTDIR)$NXT_INCDIR/nxt_version.h \
421		\$(DESTDIR)$NXT_INCDIR/nxt_websocket_header.h
422	@rmdir -p \$(DESTDIR)$NXT_INCDIR 2>/dev/null || true
423
424END
425
426# Makefile.
427# *.dSYM is MacOSX Clang debug information.
428
429cat << END > Makefile
430
431include $NXT_MAKEFILE
432
433.PHONY: clean
434clean:
435		rm -rf $NXT_BUILD_DIR *.dSYM Makefile
436
437END
438