# Copyright (C) Internet Systems Consortium, Inc. ("ISC")
#
# SPDX-License-Identifier: MPL-2.0
#
# This Source Code Form is subject to the terms of the Mozilla Public
# License, v. 2.0. If a copy of the MPL was not distributed with this
# file, you can obtain one at https://mozilla.org/MPL/2.0/.
#
# See the COPYRIGHT file distributed with this work for additional
# information regarding copyright ownership.
###
### Common Makefile rules for BIND 9.
###
###
### Paths
###
### Note: paths that vary by Makefile MUST NOT be listed
### here, or they won't get expanded correctly.
prefix = @prefix@
exec_prefix = @exec_prefix@
bindir = @bindir@
sbindir = @sbindir@
includedir = @includedir@
libdir = @libdir@
sysconfdir = @sysconfdir@
localstatedir = @localstatedir@
mandir = @mandir@
datarootdir = @datarootdir@
plugindir = ${libdir}/named
DESTDIR =
@SET_MAKE@
top_builddir = @BIND9_TOP_BUILDDIR@
###
### All
###
### Makefile may define:
### PREREQS
### TARGETS
all: ${PREREQS} subdirs ${TARGETS} testdirs
###
### Subdirectories
###
### Makefile may define:
### SUBDIRS
### DEPDIRS
ALL_SUBDIRS = ${SUBDIRS} nulldir
ALL_TESTDIRS = ${TESTDIRS} nulldir
#
# We use a single-colon rule so that additional dependencies of
# subdirectories can be specified after the inclusion of this file.
# The "depend" and "testdirs" targets are treated the same way.
#
subdirs:
@for i in ${ALL_SUBDIRS}; do \
if [ "$$i" != "nulldir" -a -d $$i ]; then \
echo "making all in `pwd`/$$i"; \
(cd $$i; ${MAKE} ${MAKEDEFS} DESTDIR="${DESTDIR}" all) || exit 1; \
fi; \
done
#
# Tests are built after the targets instead of before
#
testdirs: subdirs ${TARGETS}
@for i in ${ALL_TESTDIRS}; do \
if [ "$$i" != "nulldir" -a -d $$i ]; then \
echo "making all in `pwd`/$$i"; \
(cd $$i; ${MAKE} ${MAKEDEFS} DESTDIR="${DESTDIR}" all) || exit 1; \
fi; \
done
install:: all
install uninstall clean distclean maintainer-clean doc docclean man manclean::
@for i in ${ALL_SUBDIRS} ${ALL_TESTDIRS}; do \
if [ "$$i" != "nulldir" -a -d $$i -a -f $$i/Makefile ]; then \
echo "making $@ in `pwd`/$$i"; \
(cd $$i; ${MAKE} ${MAKEDEFS} DESTDIR="${DESTDIR}" $@) || exit 1; \
fi; \
done
###
### C Programs
###
### Makefile must define
### CC
### Makefile may define
### CFLAGS
### LDFLAGS
### CINCLUDES
### CDEFINES
### CWARNINGS
### User may define externally
### EXT_CFLAGS
CC = @CC@
CFLAGS = @CFLAGS@
LDFLAGS = @LDFLAGS@
STD_CINCLUDES = @STD_CINCLUDES@
STD_CDEFINES = @STD_CDEFINES@
STD_CWARNINGS = @STD_CWARNINGS@
BUILD_CC = @BUILD_CC@
BUILD_CFLAGS = @BUILD_CFLAGS@
BUILD_CPPFLAGS = @BUILD_CPPFLAGS@
BUILD_LDFLAGS = @BUILD_LDFLAGS@
BUILD_LIBS = @BUILD_LIBS@
FSTRM_CFLAGS = @FSTRM_CFLAGS@
FSTRM_LIBS = @FSTRM_LIBS@
GSSAPI_LIBS = @DNS_CRYPTO_LIBS@
JSON_C_CFLAGS = @JSON_C_CFLAGS@
JSON_C_LIBS = @JSON_C_LIBS@
LFS_CFLAGS = @LFS_CFLAGS@
LFS_LDFLAGS = @LFS_LDFLAGS@
LFS_LIBS = @LFS_LIBS@
LIBUV_CFLAGS = @LIBUV_CFLAGS@
LIBUV_LIBS = @LIBUV_LIBS@
LIBXML2_CFLAGS = @LIBXML2_CFLAGS@
LIBXML2_LIBS = @LIBXML2_LIBS@
LMDB_CFLAGS = @LMDB_CFLAGS@
LMDB_LIBS = @LMDB_LIBS@
MAXMINDDB_CFLAGS = @MAXMINDDB_CFLAGS@
MAXMINDDB_LIBS = @MAXMINDDB_LIBS@
OPENSSL_CFLAGS = @OPENSSL_CFLAGS@
OPENSSL_LIBS = @OPENSSL_LIBS@
PROTOBUF_C_CFLAGS = @PROTOBUF_C_CFLAGS@
PROTOBUF_C_LIBS = @PROTOBUF_C_LIBS@
ZLIB_CFLAGS = @ZLIB_CFLAGS@
ZLIB_LIBS = @ZLIB_LIBS@
NO_LIBTOOL_ISCLIBS = ${OPENSSL_LIBS} ${JSON_C_LIBS} ${LIBXML2_LIBS} ${ZLIB_LIBS} ${LIBUV_LIBS}
NO_LIBTOOL_DNSLIBS = ${LMDB_LIBS} ${MAXMINDDB_LIBS} ${GSSAPI_LIBS} ${PROTOBUF_C_LIBS} ${FSTRM_LIBS}
.SUFFIXES:
.SUFFIXES: .c .@O@
ALWAYS_INCLUDES = -include ${top_builddir}/config.h -I${top_builddir} -I${top_srcdir}
ALWAYS_DEFINES = @ALWAYS_DEFINES@
ALWAYS_WARNINGS =
ALL_CPPFLAGS = \
${ALWAYS_INCLUDES} ${CINCLUDES} ${STD_CINCLUDES} \
${ALWAYS_DEFINES} ${CDEFINES} ${STD_CDEFINES}
ALL_CFLAGS = ${EXT_CFLAGS} ${ALL_CPPFLAGS} ${CFLAGS} \
${ALWAYS_WARNINGS} ${STD_CWARNINGS} ${CWARNINGS}
@BIND9_CO_RULE@
${LIBTOOL_MODE_COMPILE} ${CC} ${ALL_CFLAGS} -c $<
SHELL = @SHELL@
LIBTOOL = @LIBTOOL@
LIBTOOL_MODE_COMPILE = ${LIBTOOL} @LIBTOOL_MODE_COMPILE@
LIBTOOL_MODE_INSTALL = ${LIBTOOL} @LIBTOOL_MODE_INSTALL@
LIBTOOL_MODE_LINK = ${LIBTOOL} @LIBTOOL_MODE_LINK@
LIBTOOL_MODE_UNINSTALL = ${LIBTOOL} @LIBTOOL_MODE_UNINSTALL@
PURIFY = @PURIFY@
MKDEP = ${SHELL} ${top_builddir}/make/mkdep
###
### This is a template compound command to build an executable binary with
### an internal symbol table.
### This process is tricky. We first link all objects including a tentative
### empty symbol table, then get a tentative list of symbols from the resulting
### binary ($@tmp0). Next, we re-link all objects, but this time with the
### symbol table just created ($tmp@1). The set of symbols should be the same,
### but the corresponding addresses would be changed due to the difference on
### the size of symbol tables. So we create the symbol table and re-create the
### objects once again. Finally, we check the symbol table embedded in the
### final binaryis consistent with the binary itself; otherwise the process is
### terminated.
###
### To minimize the overhead of creating symbol tables, the autoconf switch
### --enable-symtable takes an argument so that the symbol table can be created
### on a per application basis: unless the argument is set to "all", the symbol
### table is created only when a shell (environment) variable "MAKE_SYMTABLE" is
### set to a non-null value in the rule to build the executable binary.
###
### Each Makefile.in that uses this macro is expected to define "LIBS" and
### "NOSYMLIBS"; the former includes libisc with an empty symbol table, and
### the latter includes libisc without the definition of a symbol table.
### The rule to make the executable binary will look like this
### binary@EXEEXT@: ${OBJS}
### #export MAKE_SYMTABLE="yes"; \ <- enable if symtable is always needed
### export BASEOBJS="${OBJS}"; \
### ${FINALBUILDCMD}
###
### Normally, ${LIBS} includes all necessary libraries to build the binary;
### there are some exceptions however, where the rule lists some of the
### necessary libraries explicitly in addition to (or instead of) ${LIBS},
### like this:
### binary@EXEEXT@: ${OBJS}
### cc -o $@ ${OBJS} ${OTHERLIB1} ${OTHERLIB2} ${LIBS}
### in order to modify such a rule to use this compound command, a separate
### variable "LIBS0" should be deinfed for the explicitly listed libraries,
### while making sure ${LIBS} still includes libisc. So the above rule would
### be modified as follows:
### binary@EXEEXT@: ${OBJS}
### export BASEOBJS="${OBJS}"; \
### export LIBS0="${OTHERLIB1} ${OTHERLIB2}"; \
### ${FINALBUILDCMD}
### See bin/check/Makefile.in for a complete example of the use of LIBS0.
###
FINALBUILDCMD = if [ X"${MKSYMTBL_PROGRAM}" = X -o X"$${MAKE_SYMTABLE:-${ALWAYS_MAKE_SYMTABLE}}" = X ] ; then \
${LIBTOOL_MODE_LINK} ${PURIFY} ${CC} ${ALL_CFLAGS} ${LDFLAGS} \
-o $@ $${BASEOBJS} $${LIBS0} ${LIBS}; \
else \
rm -f $@tmp0; \
${LIBTOOL_MODE_LINK} ${PURIFY} ${CC} ${ALL_CFLAGS} ${LDFLAGS} \
-o $@tmp0 $${BASEOBJS} $${LIBS0} ${LIBS} || exit 1; \
rm -f $@-symtbl.c $@-symtbl.@O@; \
${MKSYMTBL_PROGRAM} ${top_srcdir}/util/mksymtbl.pl \
-o $@-symtbl.c $@tmp0 || exit 1; \
$(MAKE) $@-symtbl.@O@ || exit 1; \
rm -f $@tmp1; \
${LIBTOOL_MODE_LINK} ${PURIFY} ${CC} ${ALL_CFLAGS} ${LDFLAGS} \
-o $@tmp1 $${BASEOBJS} $@-symtbl.@O@ $${LIBS0} ${NOSYMLIBS} || exit 1; \
rm -f $@-symtbl.c $@-symtbl.@O@; \
${MKSYMTBL_PROGRAM} ${top_srcdir}/util/mksymtbl.pl \
-o $@-symtbl.c $@tmp1 || exit 1; \
$(MAKE) $@-symtbl.@O@ || exit 1; \
${LIBTOOL_MODE_LINK} ${PURIFY} ${CC} ${ALL_CFLAGS} ${LDFLAGS} \
-o $@tmp2 $${BASEOBJS} $@-symtbl.@O@ $${LIBS0} ${NOSYMLIBS}; \
${MKSYMTBL_PROGRAM} ${top_srcdir}/util/mksymtbl.pl \
-o $@-symtbl2.c $@tmp2; \
count=0; \
until diff $@-symtbl.c $@-symtbl2.c > /dev/null ; \
do \
count=`expr $$count + 1` ; \
test $$count = 42 && exit 1 ; \
rm -f $@-symtbl.c $@-symtbl.@O@; \
${MKSYMTBL_PROGRAM} ${top_srcdir}/util/mksymtbl.pl \
-o $@-symtbl.c $@tmp2 || exit 1; \
$(MAKE) $@-symtbl.@O@ || exit 1; \
${LIBTOOL_MODE_LINK} ${PURIFY} ${CC} ${ALL_CFLAGS} \
${LDFLAGS} -o $@tmp2 $${BASEOBJS} $@-symtbl.@O@ \
$${LIBS0} ${NOSYMLIBS}; \
${MKSYMTBL_PROGRAM} ${top_srcdir}/util/mksymtbl.pl \
-o $@-symtbl2.c $@tmp2; \
done ; \
mv $@tmp2 $@; \
rm -f $@tmp0 $@tmp1 $@tmp2 $@-symtbl2.c; \
fi
cleandir: distclean
superclean: maintainer-clean
clean distclean maintainer-clean::
rm -f *.@O@ *.o *.lo *.la core *.core *-symtbl.c *tmp0 *tmp1 *tmp2
rm -rf .depend .libs
distclean maintainer-clean::
rm -f Makefile
depend:
@for i in ${ALL_SUBDIRS} ${ALL_TESTDIRS}; do \
if [ "$$i" != "nulldir" -a -d $$i ]; then \
echo "making depend in `pwd`/$$i"; \
(cd $$i; ${MAKE} ${MAKEDEFS} DESTDIR="${DESTDIR}" $@) || exit 1; \
fi; \
done
@if [ X"${srcdir}" != X. ] ; then \
if [ X"${SRCS}" != X -a X"${PSRCS}" != X ] ; then \
echo ${MKDEP} -vpath ${srcdir} ${ALL_CPPFLAGS} ${ALL_CFLAGS} ${SRCS}; \
${MKDEP} -vpath ${srcdir} ${ALL_CPPFLAGS} ${ALL_CFLAGS} ${SRCS}; \
echo ${MKDEP} -vpath ${srcdir} -ap ${ALL_CPPFLAGS} ${ALL_CFLAGS} ${PSRCS}; \
${MKDEP} -vpath ${srcdir} -ap ${ALL_CPPFLAGS} ${ALL_CFLAGS} ${PSRCS}; \
${DEPENDEXTRA} \
elif [ X"${SRCS}" != X ] ; then \
echo ${MKDEP} -vpath ${srcdir} ${ALL_CPPFLAGS} ${ALL_CFLAGS} ${SRCS}; \
${MKDEP} -vpath ${srcdir} ${ALL_CPPFLAGS} ${ALL_CFLAGS} ${SRCS}; \
${DEPENDEXTRA} \
elif [ X"${PSRCS}" != X ] ; then \
echo ${MKDEP} -vpath ${srcdir} ${ALL_CPPFLAGS} ${ALL_CFLAGS} ${PSRCS}; \
${MKDEP} -vpath ${srcdir} -p ${ALL_CPPFLAGS} ${ALL_CFLAGS} ${PSRCS}; \
${DEPENDEXTRA} \
fi \
else \
if [ X"${SRCS}" != X -a X"${PSRCS}" != X ] ; then \
echo ${MKDEP} ${ALL_CPPFLAGS} ${ALL_CFLAGS} ${SRCS}; \
${MKDEP} ${ALL_CPPFLAGS} ${ALL_CFLAGS} ${SRCS}; \
echo ${MKDEP} -ap ${ALL_CPPFLAGS} ${ALL_CFLAGS} ${PSRCS}; \
${MKDEP} -ap ${ALL_CPPFLAGS} ${ALL_CFLAGS} ${PSRCS}; \
${DEPENDEXTRA} \
elif [ X"${SRCS}" != X ] ; then \
echo ${MKDEP} ${ALL_CPPFLAGS} ${ALL_CFLAGS} ${SRCS}; \
${MKDEP} ${ALL_CPPFLAGS} ${ALL_CFLAGS} ${SRCS}; \
${DEPENDEXTRA} \
elif [ X"${PSRCS}" != X ] ; then \
echo ${MKDEP} ${ALL_CPPFLAGS} ${ALL_CFLAGS} ${PSRCS}; \
${MKDEP} -p ${ALL_CPPFLAGS} ${ALL_CFLAGS} ${PSRCS}; \
${DEPENDEXTRA} \
fi \
fi
FORCE:
###
### Libraries
###
AR = @AR@
ARFLAGS = @ARFLAGS@
RANLIB = @RANLIB@
###
### Installation
###
INSTALL = @INSTALL@
INSTALL_PROGRAM = @INSTALL_PROGRAM@
LINK_PROGRAM = @LN_S@
INSTALL_SCRIPT = @INSTALL_SCRIPT@
INSTALL_DATA = @INSTALL_DATA@
INSTALL_LIBRARY = @INSTALL_LIBRARY@
PERL = @PERL@
###
### Script language program used to create internal symbol tables
###
MKSYMTBL_PROGRAM = @MKSYMTBL_PROGRAM@
###
### Switch to create internal symbol table selectively
###
ALWAYS_MAKE_SYMTABLE = @ALWAYS_MAKE_SYMTABLE@
###
### DocBook -> HTML
### DocBook -> man page
###
.SUFFIXES: .docbook .html .1 .2 .3 .4 .5 .6 .7 .8
.docbook.html:
${XSLTPROC} -o $@ ${top_srcdir}/doc/xsl/isc-docbook-html.xsl $<
.docbook.1:
${XSLTPROC} -o $@ ${top_srcdir}/doc/xsl/isc-manpage.xsl $<
.docbook.2:
${XSLTPROC} -o $@ ${top_srcdir}/doc/xsl/isc-manpage.xsl $<
.docbook.3:
${XSLTPROC} -o $@ ${top_srcdir}/doc/xsl/isc-manpage.xsl $<
.docbook.4:
${XSLTPROC} -o $@ ${top_srcdir}/doc/xsl/isc-manpage.xsl $<
.docbook.5:
${XSLTPROC} -o $@ ${top_srcdir}/doc/xsl/isc-manpage.xsl $<
.docbook.6:
${XSLTPROC} -o $@ ${top_srcdir}/doc/xsl/isc-manpage.xsl $<
.docbook.7:
${XSLTPROC} -o $@ ${top_srcdir}/doc/xsl/isc-manpage.xsl $<
.docbook.8:
${XSLTPROC} -o $@ ${top_srcdir}/doc/xsl/isc-manpage.xsl $<