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