xref: /minix/external/bsd/bind/dist/make/rules.in (revision fb9c64b2)
1# Copyright (C) 2004-2009, 2011-2014  Internet Systems Consortium, Inc. ("ISC")
2# Copyright (C) 1998-2003  Internet Software Consortium.
3#
4# Permission to use, copy, modify, and/or distribute this software for any
5# purpose with or without fee is hereby granted, provided that the above
6# copyright notice and this permission notice appear in all copies.
7#
8# THE SOFTWARE IS PROVIDED "AS IS" AND ISC DISCLAIMS ALL WARRANTIES WITH
9# REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
10# AND FITNESS.  IN NO EVENT SHALL ISC BE LIABLE FOR ANY SPECIAL, DIRECT,
11# INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
12# LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE
13# OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
14# PERFORMANCE OF THIS SOFTWARE.
15
16###
17### Common Makefile rules for BIND 9.
18###
19
20###
21### Paths
22###
23### Note: paths that vary by Makefile MUST NOT be listed
24### here, or they won't get expanded correctly.
25
26prefix =	@prefix@
27exec_prefix =	@exec_prefix@
28bindir =	@bindir@
29sbindir =	@sbindir@
30includedir =	@includedir@
31libdir =	@libdir@
32sysconfdir =	@sysconfdir@
33localstatedir =	@localstatedir@
34mandir =	@mandir@
35datarootdir =   @datarootdir@
36
37DESTDIR =
38
39@SET_MAKE@
40
41top_builddir =	@BIND9_TOP_BUILDDIR@
42
43###
44### All
45###
46### Makefile may define:
47###	PREREQS
48###	TARGETS
49
50all: ${PREREQS} subdirs ${TARGETS} testdirs
51
52###
53### Subdirectories
54###
55### Makefile may define:
56###	SUBDIRS
57
58ALL_SUBDIRS = ${SUBDIRS} nulldir
59ALL_TESTDIRS = ${TESTDIRS} nulldir
60
61#
62# We use a single-colon rule so that additional dependencies of
63# subdirectories can be specified after the inclusion of this file.
64# The "depend" and "testdirs" targets are treated the same way.
65#
66subdirs:
67	@for i in ${ALL_SUBDIRS}; do \
68		if [ "$$i" != "nulldir" -a -d $$i ]; then \
69			echo "making all in `pwd`/$$i"; \
70			(cd $$i; ${MAKE} ${MAKEDEFS} DESTDIR="${DESTDIR}" all) || exit 1; \
71		fi; \
72	done
73
74#
75# Tests are built after the targets instead of before
76#
77testdirs:
78	@for i in ${ALL_TESTDIRS}; do \
79		if [ "$$i" != "nulldir" -a -d $$i ]; then \
80			echo "making all in `pwd`/$$i"; \
81			(cd $$i; ${MAKE} ${MAKEDEFS} DESTDIR="${DESTDIR}" all) || exit 1; \
82		fi; \
83	done
84
85install:: all
86
87install clean distclean maintainer-clean doc docclean man manclean::
88	@for i in ${ALL_SUBDIRS} ${ALL_TESTDIRS}; do \
89		if [ "$$i" != "nulldir" -a -d $$i ]; then \
90			echo "making $@ in `pwd`/$$i"; \
91			(cd $$i; ${MAKE} ${MAKEDEFS} DESTDIR="${DESTDIR}" $@) || exit 1; \
92		fi; \
93	done
94
95###
96### C Programs
97###
98### Makefile must define
99###	CC
100### Makefile may define
101###	CFLAGS
102###	LDFLAGS
103###	CINCLUDES
104###	CDEFINES
105###	CWARNINGS
106### User may define externally
107###     EXT_CFLAGS
108
109CC = 		@CC@
110CFLAGS =	@CFLAGS@
111LDFLAGS =	@LDFLAGS@
112STD_CINCLUDES =	@STD_CINCLUDES@
113STD_CDEFINES =	@STD_CDEFINES@
114STD_CWARNINGS =	@STD_CWARNINGS@
115
116BUILD_CC = @BUILD_CC@
117BUILD_CFLAGS = @BUILD_CFLAGS@
118BUILD_CPPFLAGS = @BUILD_CPPFLAGS@
119BUILD_LDFLAGS = @BUILD_LDFLAGS@
120BUILD_LIBS = @BUILD_LIBS@
121
122.SUFFIXES:
123.SUFFIXES: .c .@O@
124
125ALWAYS_INCLUDES = -I${top_builddir} -I${top_srcdir}
126ALWAYS_DEFINES = @ALWAYS_DEFINES@
127ALWAYS_WARNINGS =
128
129ALL_CPPFLAGS = \
130	${ALWAYS_INCLUDES} ${CINCLUDES} ${STD_CINCLUDES} \
131	${ALWAYS_DEFINES} ${CDEFINES} ${STD_CDEFINES}
132
133ALL_CFLAGS = ${EXT_CFLAGS} ${ALL_CPPFLAGS} ${CFLAGS} \
134	${ALWAYS_WARNINGS} ${STD_CWARNINGS} ${CWARNINGS}
135
136@BIND9_CO_RULE@
137	${LIBTOOL_MODE_COMPILE} ${CC} ${ALL_CFLAGS} -c $<
138
139SHELL = @SHELL@
140LIBTOOL = @LIBTOOL@
141LIBTOOL_MODE_COMPILE = ${LIBTOOL} @LIBTOOL_MODE_COMPILE@
142LIBTOOL_MODE_INSTALL = ${LIBTOOL} @LIBTOOL_MODE_INSTALL@
143LIBTOOL_MODE_LINK = ${LIBTOOL} @LIBTOOL_MODE_LINK@
144PURIFY = @PURIFY@
145
146MKDEP = ${SHELL} ${top_builddir}/make/mkdep
147
148###
149### This is a template compound command to build an executable binary with
150### an internal symbol table.
151### This process is tricky.  We first link all objects including a tentative
152### empty symbol table, then get a tentative list of symbols from the resulting
153### binary ($@tmp0).  Next, we re-link all objects, but this time with the
154### symbol table just created ($tmp@1).  The set of symbols should be the same,
155### but the corresponding addresses would be changed due to the difference on
156### the size of symbol tables.  So we create the symbol table and re-create the
157### objects once again.  Finally, we check the symbol table embedded in the
158### final binaryis consistent with the binary itself; otherwise the process is
159### terminated.
160###
161### To minimize the overhead of creating symbol tables, the autoconf switch
162### --enable-symtable takes an argument so that the symbol table can be created
163### on a per application basis: unless the argument is set to "all", the symbol
164### table is created only when a shell (environment) variable "MAKE_SYMTABLE" is
165### set to a non-null value in the rule to build the executable binary.
166###
167### Each Makefile.in that uses this macro is expected to define "LIBS" and
168### "NOSYMLIBS"; the former includes libisc with an empty symbol table, and
169### the latter includes libisc without the definition of a symbol table.
170### The rule to make the executable binary will look like this
171### binary@EXEEXT@: ${OBJS}
172###     #export MAKE_SYMTABLE="yes"; \  <- enable if symtable is always needed
173###	export BASEOBJS="${OBJS}"; \
174###	${FINALBUILDCMD}
175###
176### Normally, ${LIBS} includes all necessary libraries to build the binary;
177### there are some exceptions however, where the rule lists some of the
178### necessary libraries explicitly in addition to (or instead of) ${LIBS},
179### like this:
180### binary@EXEEXT@: ${OBJS}
181###     cc -o $@ ${OBJS} ${OTHERLIB1} ${OTHERLIB2} ${lIBS}
182### in order to modify such a rule to use this compound command, a separate
183### variable "LIBS0" should be deinfed for the explicitly listed libraries,
184### while making sure ${LIBS} still includes libisc.  So the above rule would
185### be modified as follows:
186### binary@EXEEXT@: ${OBJS}
187###	export BASEOBJS="${OBJS}"; \
188###	export LIBS0="${OTHERLIB1} ${OTHERLIB2}"; \
189###     ${FINALBUILDCMD}
190### See bin/check/Makefile.in for a complete example of the use of LIBS0.
191###
192FINALBUILDCMD = if [ X"${MKSYMTBL_PROGRAM}" = X -o X"$${MAKE_SYMTABLE:-${ALWAYS_MAKE_SYMTABLE}}" = X ] ; then \
193		${LIBTOOL_MODE_LINK} ${PURIFY} ${CC} ${ALL_CFLAGS} ${LDFLAGS} \
194		-o $@ $${BASEOBJS} $${LIBS0} ${LIBS}; \
195	else \
196		rm -f $@tmp0; \
197		${LIBTOOL_MODE_LINK} ${PURIFY} ${CC} ${ALL_CFLAGS} ${LDFLAGS} \
198		-o $@tmp0 $${BASEOBJS} $${LIBS0} ${LIBS} || exit 1; \
199		rm -f $@-symtbl.c $@-symtbl.@O@; \
200		${MKSYMTBL_PROGRAM} ${top_srcdir}/util/mksymtbl.pl \
201		-o $@-symtbl.c $@tmp0 || exit 1; \
202		$(MAKE) $@-symtbl.@O@ || exit 1; \
203		rm -f $@tmp1; \
204		${LIBTOOL_MODE_LINK} ${PURIFY} ${CC} ${ALL_CFLAGS} ${LDFLAGS} \
205		-o $@tmp1 $${BASEOBJS} $@-symtbl.@O@ $${LIBS0} ${NOSYMLIBS} || exit 1; \
206		rm -f $@-symtbl.c $@-symtbl.@O@; \
207		${MKSYMTBL_PROGRAM} ${top_srcdir}/util/mksymtbl.pl \
208		-o $@-symtbl.c $@tmp1 || exit 1; \
209		$(MAKE) $@-symtbl.@O@ || exit 1; \
210		${LIBTOOL_MODE_LINK} ${PURIFY} ${CC} ${ALL_CFLAGS} ${LDFLAGS} \
211		-o $@tmp2 $${BASEOBJS} $@-symtbl.@O@ $${LIBS0} ${NOSYMLIBS}; \
212		${MKSYMTBL_PROGRAM} ${top_srcdir}/util/mksymtbl.pl \
213		-o $@-symtbl2.c $@tmp2; \
214		count=0; \
215		until diff $@-symtbl.c $@-symtbl2.c > /dev/null ; \
216		do \
217			count=`expr $$count + 1` ; \
218			test $$count = 42 && exit 1 ; \
219			rm -f $@-symtbl.c $@-symtbl.@O@; \
220			${MKSYMTBL_PROGRAM} ${top_srcdir}/util/mksymtbl.pl \
221			-o $@-symtbl.c $@tmp2 || exit 1; \
222			$(MAKE) $@-symtbl.@O@ || exit 1; \
223			${LIBTOOL_MODE_LINK} ${PURIFY} ${CC} ${ALL_CFLAGS} \
224			${LDFLAGS} -o $@tmp2 $${BASEOBJS} $@-symtbl.@O@ \
225			$${LIBS0} ${NOSYMLIBS}; \
226			${MKSYMTBL_PROGRAM} ${top_srcdir}/util/mksymtbl.pl \
227			-o $@-symtbl2.c $@tmp2; \
228		done ; \
229		mv $@tmp2 $@; \
230		rm -f $@tmp0 $@tmp1 $@tmp2 $@-symtbl2.c; \
231	fi
232
233cleandir: distclean
234superclean: maintainer-clean
235
236clean distclean maintainer-clean::
237	rm -f *.@O@ *.o *.lo *.la core *.core *-symtbl.c *tmp0 *tmp1 *tmp2
238	rm -rf .depend .libs
239
240distclean maintainer-clean::
241	rm -f Makefile
242
243depend:
244	@for i in ${ALL_SUBDIRS}; do \
245		if [ "$$i" != "nulldir" -a -d $$i ]; then \
246			echo "making depend in `pwd`/$$i"; \
247			(cd $$i; ${MAKE} ${MAKEDEFS} DESTDIR="${DESTDIR}" $@) || exit 1; \
248		fi; \
249	done
250	@if [ X"${srcdir}" != X. ] ; then \
251		if [ X"${SRCS}" != X -a X"${PSRCS}" != X ] ; then \
252			echo ${MKDEP} -vpath ${srcdir} ${ALL_CPPFLAGS} ${ALL_CFLAGS} ${SRCS}; \
253			${MKDEP} -vpath ${srcdir} ${ALL_CPPFLAGS} ${ALL_CFLAGS} ${SRCS}; \
254			echo ${MKDEP} -vpath ${srcdir} -ap ${ALL_CPPFLAGS} ${ALL_CFLAGS} ${PSRCS}; \
255			${MKDEP} -vpath ${srcdir} -ap ${ALL_CPPFLAGS} ${ALL_CFLAGS} ${PSRCS}; \
256			${DEPENDEXTRA} \
257		elif [ X"${SRCS}" != X ] ; then \
258			echo ${MKDEP} -vpath ${srcdir} ${ALL_CPPFLAGS} ${ALL_CFLAGS} ${SRCS}; \
259			${MKDEP} -vpath ${srcdir} ${ALL_CPPFLAGS} ${ALL_CFLAGS} ${SRCS}; \
260			${DEPENDEXTRA} \
261		elif [ X"${PSRCS}" != X ] ; then \
262			echo ${MKDEP} -vpath ${srcdir} ${ALL_CPPFLAGS} ${ALL_CFLAGS} ${PSRCS}; \
263			${MKDEP} -vpath ${srcdir} -p ${ALL_CPPFLAGS} ${ALL_CFLAGS} ${PSRCS}; \
264			${DEPENDEXTRA} \
265		fi \
266	else \
267		if [ X"${SRCS}" != X -a X"${PSRCS}" != X ] ; then \
268			echo ${MKDEP} ${ALL_CPPFLAGS} ${ALL_CFLAGS} ${SRCS}; \
269			${MKDEP} ${ALL_CPPFLAGS} ${ALL_CFLAGS} ${SRCS}; \
270			echo ${MKDEP} -ap ${ALL_CPPFLAGS} ${ALL_CFLAGS} ${PSRCS}; \
271			${MKDEP} -ap ${ALL_CPPFLAGS} ${ALL_CFLAGS} ${PSRCS}; \
272			${DEPENDEXTRA} \
273		elif [ X"${SRCS}" != X ] ; then \
274			echo ${MKDEP} ${ALL_CPPFLAGS} ${ALL_CFLAGS} ${SRCS}; \
275			${MKDEP} ${ALL_CPPFLAGS} ${ALL_CFLAGS} ${SRCS}; \
276			${DEPENDEXTRA} \
277		elif [ X"${PSRCS}" != X ] ; then \
278			echo ${MKDEP} ${ALL_CPPFLAGS} ${ALL_CFLAGS} ${PSRCS}; \
279			${MKDEP} -p ${ALL_CPPFLAGS} ${ALL_CFLAGS} ${PSRCS}; \
280			${DEPENDEXTRA} \
281		fi \
282	fi
283
284FORCE:
285
286###
287### Libraries
288###
289
290AR =		@AR@
291ARFLAGS =	@ARFLAGS@
292RANLIB =	@RANLIB@
293
294###
295### Installation
296###
297
298INSTALL =		@INSTALL@
299INSTALL_PROGRAM =	@INSTALL_PROGRAM@
300LINK_PROGRAM =		@LN_S@
301INSTALL_SCRIPT =	@INSTALL_SCRIPT@
302INSTALL_DATA =		@INSTALL_DATA@
303INSTALL_LIBRARY =	@INSTALL_LIBRARY@
304
305###
306### Programs used when generating documentation.  It's ok for these
307### not to exist when not generating documentation.
308###
309
310XSLTPROC =		@XSLTPROC@ --novalid --xinclude --nonet
311PERL =			@PERL@
312LATEX =			@LATEX@
313PDFLATEX =		@PDFLATEX@
314W3M =			@W3M@
315
316###
317### Script language program used to create internal symbol tables
318###
319MKSYMTBL_PROGRAM =	@MKSYMTBL_PROGRAM@
320
321###
322### Switch to create internal symbol table selectively
323###
324ALWAYS_MAKE_SYMTABLE =	@ALWAYS_MAKE_SYMTABLE@
325
326###
327### DocBook -> HTML
328### DocBook -> man page
329###
330
331.SUFFIXES: .docbook .html .1 .2 .3 .4 .5 .6 .7 .8
332
333.docbook.html:
334	${XSLTPROC} -o $@ ${top_srcdir}/doc/xsl/isc-docbook-html.xsl $<
335
336.docbook.1:
337	${XSLTPROC} -o $@ ${top_srcdir}/doc/xsl/isc-manpage.xsl $<
338
339.docbook.2:
340	${XSLTPROC} -o $@ ${top_srcdir}/doc/xsl/isc-manpage.xsl $<
341
342.docbook.3:
343	${XSLTPROC} -o $@ ${top_srcdir}/doc/xsl/isc-manpage.xsl $<
344
345.docbook.4:
346	${XSLTPROC} -o $@ ${top_srcdir}/doc/xsl/isc-manpage.xsl $<
347
348.docbook.5:
349	${XSLTPROC} -o $@ ${top_srcdir}/doc/xsl/isc-manpage.xsl $<
350
351.docbook.6:
352	${XSLTPROC} -o $@ ${top_srcdir}/doc/xsl/isc-manpage.xsl $<
353
354.docbook.7:
355	${XSLTPROC} -o $@ ${top_srcdir}/doc/xsl/isc-manpage.xsl $<
356
357.docbook.8:
358	${XSLTPROC} -o $@ ${top_srcdir}/doc/xsl/isc-manpage.xsl $<
359
360