1 # Copyright (C) 2004-2009, 2011 Internet Systems Consortium, Inc. ("ISC")
2 # Copyright (C) 1998-2003 Internet Software Consortium.
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.
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.
16 # $Id: rules.in,v 1.68.346.2 2011-02-28 01:20:04 tbox Exp $
19 ### Common Makefile rules for BIND 9.
25 ### Note: paths that vary by Makefile MUST NOT be listed
26 ### here, or they won't get expanded correctly.
29 exec_prefix = @exec_prefix@
32 includedir = @includedir@
34 sysconfdir = @sysconfdir@
35 localstatedir = @localstatedir@
37 datarootdir = @datarootdir@
38 export_libdir = @export_libdir@
39 export_includedir = @export_includedir@
45 top_builddir = @BIND9_TOP_BUILDDIR@
50 ### Makefile may define:
53 all: subdirs ${TARGETS} testdirs
58 ### Makefile may define:
61 ALL_SUBDIRS = ${SUBDIRS} nulldir
62 ALL_TESTDIRS = ${TESTDIRS} nulldir
65 # We use a single-colon rule so that additional dependencies of
66 # subdirectories can be specified after the inclusion of this file.
67 # The "depend" and "testdirs" targets are treated the same way.
70 @for i in ${ALL_SUBDIRS}; do \
71 if [ "$$i" != "nulldir" -a -d $$i ]; then \
72 echo "making all in `pwd`/$$i"; \
73 (cd $$i; ${MAKE} ${MAKEDEFS} DESTDIR="${DESTDIR}" all) || exit 1; \
78 # Tests are built after the targets instead of before
81 @for i in ${ALL_TESTDIRS}; do \
82 if [ "$$i" != "nulldir" -a -d $$i ]; then \
83 echo "making all in `pwd`/$$i"; \
84 (cd $$i; ${MAKE} ${MAKEDEFS} DESTDIR="${DESTDIR}" all) || exit 1; \
90 install clean distclean maintainer-clean doc docclean man manclean::
91 @for i in ${ALL_SUBDIRS}; do \
92 if [ "$$i" != "nulldir" -a -d $$i ]; then \
93 echo "making $@ in `pwd`/$$i"; \
94 (cd $$i; ${MAKE} ${MAKEDEFS} DESTDIR="${DESTDIR}" $@) || exit 1; \
101 ### Makefile must define
103 ### Makefile may define
109 ### User may define externally
115 STD_CINCLUDES = @STD_CINCLUDES@
116 STD_CDEFINES = @STD_CDEFINES@
117 STD_CWARNINGS = @STD_CWARNINGS@
119 BUILD_CC = @BUILD_CC@
120 BUILD_CFLAGS = @BUILD_CFLAGS@
121 BUILD_CPPFLAGS = @BUILD_CPPFLAGS@
122 BUILD_LDFLAGS = @BUILD_LDFLAGS@
123 BUILD_LIBS = @BUILD_LIBS@
128 ALWAYS_INCLUDES = -I${top_builddir}
129 ALWAYS_DEFINES = @ALWAYS_DEFINES@
133 ${ALWAYS_INCLUDES} ${CINCLUDES} ${STD_CINCLUDES} \
134 ${ALWAYS_DEFINES} ${CDEFINES} ${STD_CDEFINES}
136 ALL_CFLAGS = ${EXT_CFLAGS} ${ALL_CPPFLAGS} ${CFLAGS} \
137 ${ALWAYS_WARNINGS} ${STD_CWARNINGS} ${CWARNINGS}
140 ${LIBTOOL_MODE_COMPILE} ${CC} ${ALL_CFLAGS} -c $<
144 LIBTOOL_MODE_COMPILE = ${LIBTOOL} @LIBTOOL_MODE_COMPILE@
145 LIBTOOL_MODE_INSTALL = ${LIBTOOL} @LIBTOOL_MODE_INSTALL@
146 LIBTOOL_MODE_LINK = ${LIBTOOL} @LIBTOOL_MODE_LINK@
149 MKDEP = ${SHELL} ${top_builddir}/make/mkdep
152 ### This is a template compound command to build an executable binary with
153 ### an internal symbol table.
154 ### This process is tricky. We first link all objects including a tentative
155 ### empty symbol table, then get a tentative list of symbols from the resulting
156 ### binary ($@tmp0). Next, we re-link all objects, but this time with the
157 ### symbol table just created ($tmp@1). The set of symbols should be the same,
158 ### but the corresponding addresses would be changed due to the difference on
159 ### the size of symbol tables. So we create the symbol table and re-create the
160 ### objects once again. Finally, we check the symbol table embedded in the
161 ### final binaryis consistent with the binary itself; otherwise the process is
164 ### To minimize the overhead of creating symbol tables, the autoconf switch
165 ### --enable-symtable takes an argument so that the symbol table can be created
166 ### on a per application basis: unless the argument is set to "all", the symbol
167 ### table is created only when a shell (environment) variable "MAKE_SYMTABLE" is
168 ### set to a non-null value in the rule to build the executable binary.
170 ### Each Makefile.in that uses this macro is expected to define "LIBS" and
171 ### "NOSYMLIBS"; the former includes libisc with an empty symbol table, and
172 ### the latter includes libisc without the definition of a symbol table.
173 ### The rule to make the executable binary will look like this
174 ### binary@EXEEXT@: ${OBJS}
175 ### #export MAKE_SYMTABLE="yes"; \ <- enable if symtable is always needed
176 ### export BASEOBJS="${OBJS}"; \
179 ### Normally, ${LIBS} includes all necessary libraries to build the binary;
180 ### there are some exceptions however, where the rule lists some of the
181 ### necessary libraries explicitly in addition to (or instead of) ${LIBS},
183 ### binary@EXEEXT@: ${OBJS}
184 ### cc -o $@ ${OBJS} ${OTHERLIB1} ${OTHERLIB2} ${lIBS}
185 ### in order to modify such a rule to use this compound command, a separate
186 ### variable "LIBS0" should be deinfed for the explicitly listed libraries,
187 ### while making sure ${LIBS} still includes libisc. So the above rule would
188 ### be modified as follows:
189 ### binary@EXEEXT@: ${OBJS}
190 ### export BASEOBJS="${OBJS}"; \
191 ### export LIBS0="${OTHERLIB1} ${OTHERLIB2}"; \
193 ### See bin/check/Makefile.in for a complete example of the use of LIBS0.
195 FINALBUILDCMD = if [ X"${MKSYMTBL_PROGRAM}" = X -o X"$${MAKE_SYMTABLE:-${ALWAYS_MAKE_SYMTABLE}}" = X ] ; then \
196 ${LIBTOOL_MODE_LINK} ${PURIFY} ${CC} ${CFLAGS} ${LDFLAGS} \
197 -o $@ $${BASEOBJS} $${LIBS0} ${LIBS}; \
200 ${LIBTOOL_MODE_LINK} ${PURIFY} ${CC} ${CFLAGS} ${LDFLAGS} \
201 -o $@tmp0 $${BASEOBJS} $${LIBS0} ${LIBS} || exit 1; \
202 rm -f $@-symtbl.c $@-symtbl.@O@; \
203 ${MKSYMTBL_PROGRAM} ${top_srcdir}/util/mksymtbl.pl \
204 -o $@-symtbl.c $@tmp0 || exit 1; \
205 $(MAKE) $@-symtbl.@O@ || exit 1; \
207 ${LIBTOOL_MODE_LINK} ${PURIFY} ${CC} ${CFLAGS} ${LDFLAGS} \
208 -o $@tmp1 $${BASEOBJS} $@-symtbl.@O@ $${LIBS0} ${NOSYMLIBS} || exit 1; \
209 rm -f $@-symtbl.c $@-symtbl.@O@; \
210 ${MKSYMTBL_PROGRAM} ${top_srcdir}/util/mksymtbl.pl \
211 -o $@-symtbl.c $@tmp1 || exit 1; \
212 $(MAKE) $@-symtbl.@O@ || exit 1; \
213 ${LIBTOOL_MODE_LINK} ${PURIFY} ${CC} ${CFLAGS} ${LDFLAGS} \
214 -o $@tmp2 $${BASEOBJS} $@-symtbl.@O@ $${LIBS0} ${NOSYMLIBS}; \
215 ${MKSYMTBL_PROGRAM} ${top_srcdir}/util/mksymtbl.pl \
216 -o $@-symtbl2.c $@tmp2; \
217 diff $@-symtbl.c $@-symtbl2.c || exit 1;\
219 rm -f $@tmp0 $@tmp1 $@tmp2 $@-symtbl2.c; \
223 superclean: maintainer-clean
225 clean distclean maintainer-clean::
226 rm -f *.@O@ *.o *.lo *.la core *.core *-symtbl.c *tmp0 *tmp1 *tmp2
229 distclean maintainer-clean::
233 @for i in ${ALL_SUBDIRS}; do \
234 if [ "$$i" != "nulldir" -a -d $$i ]; then \
235 echo "making depend in `pwd`/$$i"; \
236 (cd $$i; ${MAKE} ${MAKEDEFS} DESTDIR="${DESTDIR}" $@) || exit 1; \
239 @if [ X"${VPATH}" != X ] ; then \
240 if [ X"${SRCS}" != X -a X"${PSRCS}" != X ] ; then \
241 echo ${MKDEP} -vpath ${VPATH} ${ALL_CPPFLAGS} ${ALL_CFLAGS} ${SRCS}; \
242 ${MKDEP} -vpath ${VPATH} ${ALL_CPPFLAGS} ${ALL_CFLAGS} ${SRCS}; \
243 echo ${MKDEP} -vpath ${VPATH} -ap ${ALL_CPPFLAGS} ${ALL_CFLAGS} ${PSRCS}; \
244 ${MKDEP} -vpath ${VPATH} -ap ${ALL_CPPFLAGS} ${ALL_CFLAGS} ${PSRCS}; \
246 elif [ X"${SRCS}" != X ] ; then \
247 echo ${MKDEP} -vpath ${VPATH} ${ALL_CPPFLAGS} ${ALL_CFLAGS} ${SRCS}; \
248 ${MKDEP} -vpath ${VPATH} ${ALL_CPPFLAGS} ${ALL_CFLAGS} ${SRCS}; \
250 elif [ X"${PSRCS}" != X ] ; then \
251 echo ${MKDEP} -vpath ${VPATH} ${ALL_CPPFLAGS} ${ALL_CFLAGS} ${PSRCS}; \
252 ${MKDEP} -vpath ${VPATH} -p ${ALL_CPPFLAGS} ${ALL_CFLAGS} ${PSRCS}; \
256 if [ X"${SRCS}" != X -a X"${PSRCS}" != X ] ; then \
257 echo ${MKDEP} ${ALL_CPPFLAGS} ${ALL_CFLAGS} ${SRCS}; \
258 ${MKDEP} ${ALL_CPPFLAGS} ${ALL_CFLAGS} ${SRCS}; \
259 echo ${MKDEP} -ap ${ALL_CPPFLAGS} ${ALL_CFLAGS} ${PSRCS}; \
260 ${MKDEP} -ap ${ALL_CPPFLAGS} ${ALL_CFLAGS} ${PSRCS}; \
262 elif [ X"${SRCS}" != X ] ; then \
263 echo ${MKDEP} ${ALL_CPPFLAGS} ${ALL_CFLAGS} ${SRCS}; \
264 ${MKDEP} ${ALL_CPPFLAGS} ${ALL_CFLAGS} ${SRCS}; \
266 elif [ X"${PSRCS}" != X ] ; then \
267 echo ${MKDEP} ${ALL_CPPFLAGS} ${ALL_CFLAGS} ${PSRCS}; \
268 ${MKDEP} -p ${ALL_CPPFLAGS} ${ALL_CFLAGS} ${PSRCS}; \
288 INSTALL_PROGRAM = @INSTALL_PROGRAM@
289 LINK_PROGRAM = @LN_S@
290 INSTALL_SCRIPT = @INSTALL_SCRIPT@
291 INSTALL_DATA = @INSTALL_DATA@
294 ### Programs used when generating documentation. It's ok for these
295 ### not to exist when not generating documentation.
298 XSLTPROC = @XSLTPROC@ --novalid --xinclude --nonet
301 PDFLATEX = @PDFLATEX@
305 ### Script language program used to create internal symbol tables
307 MKSYMTBL_PROGRAM = @MKSYMTBL_PROGRAM@
310 ### Switch to create internal symbol table selectively
312 ALWAYS_MAKE_SYMTABLE = @ALWAYS_MAKE_SYMTABLE@
316 ### DocBook -> man page
319 .SUFFIXES: .docbook .html .1 .2 .3 .4 .5 .6 .7 .8
322 ${XSLTPROC} -o $@ ${top_srcdir}/doc/xsl/isc-docbook-html.xsl $<
325 ${XSLTPROC} -o $@ ${top_srcdir}/doc/xsl/isc-manpage.xsl $<
328 ${XSLTPROC} -o $@ ${top_srcdir}/doc/xsl/isc-manpage.xsl $<
331 ${XSLTPROC} -o $@ ${top_srcdir}/doc/xsl/isc-manpage.xsl $<
334 ${XSLTPROC} -o $@ ${top_srcdir}/doc/xsl/isc-manpage.xsl $<
337 ${XSLTPROC} -o $@ ${top_srcdir}/doc/xsl/isc-manpage.xsl $<
340 ${XSLTPROC} -o $@ ${top_srcdir}/doc/xsl/isc-manpage.xsl $<
343 ${XSLTPROC} -o $@ ${top_srcdir}/doc/xsl/isc-manpage.xsl $<
346 ${XSLTPROC} -o $@ ${top_srcdir}/doc/xsl/isc-manpage.xsl $<