mirror of
https://github.com/isc-projects/bind9.git
synced 2026-02-13 07:43:21 -05:00
Originally, every library and binaries got linked to everything, which creates unnecessary overlinking. This wasn't as straightforward as it should be as we still support configuration without libtool for 9.16. Couple of smaller issues related to include headers and an issue where sanitizer overload dlopen and dlclose symbols, so we were getting false negatives in the autoconf test.
396 lines
12 KiB
Text
396 lines
12 KiB
Text
# Copyright (C) Internet Systems Consortium, Inc. ("ISC")
|
|
#
|
|
# 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 http://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@
|
|
|
|
###
|
|
### Programs used when generating documentation. It's ok for these
|
|
### not to exist when not generating documentation.
|
|
###
|
|
|
|
XSLTPROC = @XSLTPROC@ --novalid --xinclude --nonet
|
|
XMLLINT = @XMLLINT@
|
|
PERL = @PERL@
|
|
LATEX = @LATEX@
|
|
PDFLATEX = @PDFLATEX@
|
|
DBLATEX = @DBLATEX@
|
|
W3M = @W3M@
|
|
PANDOC = @PANDOC@
|
|
|
|
###
|
|
### 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 $<
|
|
|