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