# 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.

srcdir =	@srcdir@
VPATH =		@srcdir@
top_srcdir =	@top_srcdir@

# Attempt to disable parallel processing.
.NOTPARALLEL:
.NO_PARALLEL:

VERSION=@BIND9_VERSION@
@BIND9_MAJOR@

@LIBDNS_MAPAPI@

@LIBDNS_API@

@BIND9_MAKE_INCLUDES@

USE_ISC_SPNEGO = @USE_ISC_SPNEGO@

CINCLUDES =	-I. -I${top_srcdir}/lib/dns -Iinclude ${DNS_INCLUDES} \
		${ISC_INCLUDES} @DST_OPENSSL_INC@ @DST_GSSAPI_INC@

CDEFINES =	-DUSE_MD5 @CRYPTO@ @USE_GSSAPI@ ${USE_ISC_SPNEGO}

CWARNINGS =

ISCLIBS =	../../lib/isc/libisc.@A@

ISCDEPLIBS =	../../lib/isc/libisc.@A@

LIBS =		@LIBS@

# Alphabetically

OPENSSLGOSTLINKOBJS = opensslgost_link.@O@
OPENSSLECDSALINKOBJS = opensslecdsa_link.@O@
OPENSSLEDDSALINKOBJS = openssleddsa_link.@O@
OPENSSLLINKOBJS = openssl_link.@O@ openssldh_link.@O@ openssldsa_link.@O@ \
		  @OPENSSLECDSALINKOBJS@ @OPENSSLEDDSALINKOBJS@ \
		  @OPENSSLGOSTLINKOBJS@ opensslrsa_link.@O@

PKCS11LINKOBJS	= pkcs11dh_link.@O@ pkcs11dsa_link.@O@ pkcs11rsa_link.@O@ \
		pkcs11ecdsa_link.@O@ pkcs11eddsa_link.@O@ \
		pkcs11gost_link.@O@ pkcs11.@O@

DSTOBJS =	@DST_EXTRA_OBJS@ @OPENSSLLINKOBJS@ @PKCS11LINKOBJS@ \
		dst_api.@O@ dst_lib.@O@ dst_parse.@O@ dst_result.@O@ \
		gssapi_link.@O@ gssapictx.@O@ hmac_link.@O@ key.@O@

GEOIPLINKOBJS = geoip.@O@

DNSTAPOBJS = dnstap.@O@ dnstap.pb-c.@O@

# Alphabetically
DNSOBJS =	acache.@O@ acl.@O@ adb.@O@ badcache.@O@ byaddr.@O@ \
		cache.@O@ callbacks.@O@ catz.@O@ clientinfo.@O@ compress.@O@ \
		db.@O@ dbiterator.@O@ dbtable.@O@ diff.@O@ dispatch.@O@ \
		dlz.@O@ dns64.@O@ dnssec.@O@ ds.@O@ dyndb.@O@ \
		fixedname.@O@ forward.@O@ \
		ipkeylist.@O@ iptable.@O@ journal.@O@ keydata.@O@ \
		keytable.@O@ lib.@O@ log.@O@ lookup.@O@ \
		master.@O@ masterdump.@O@ message.@O@ \
		name.@O@ ncache.@O@ nsec.@O@ nsec3.@O@ nta.@O@ \
		order.@O@ peer.@O@ portlist.@O@ private.@O@ \
		rbt.@O@ rbtdb.@O@ rbtdb64.@O@ rcode.@O@ rdata.@O@ \
		rdatalist.@O@ rdataset.@O@ rdatasetiter.@O@ rdataslab.@O@ \
		request.@O@ resolver.@O@ result.@O@ rootns.@O@ \
		rpz.@O@ rrl.@O@ rriterator.@O@ sdb.@O@ \
		sdlz.@O@ soa.@O@ ssu.@O@ ssu_external.@O@ \
		stats.@O@ tcpmsg.@O@ time.@O@ timer.@O@ tkey.@O@ \
		tsec.@O@ tsig.@O@ ttl.@O@ update.@O@ validator.@O@ \
		version.@O@ view.@O@ xfrin.@O@ zone.@O@ zonekey.@O@ zt.@O@
PORTDNSOBJS =	client.@O@ ecdb.@O@

OBJS=		@DNSTAPOBJS@ ${DNSOBJS} ${OTHEROBJS} ${DSTOBJS} \
		${PORTDNSOBJS} @GEOIPLINKOBJS@


# Alphabetically
OPENSSLGOSTLINKSRCS = opensslgost_link.c
OPENSSLECDSALINKSRCS = opensslecdsa_link.c
OPENSSLEDDSALINKSRCS = openssleddsa_link.c
OPENSSLLINKSRCS = openssl_link.c openssldh_link.c openssldsa_link.c \
		  @OPENSSLECDSALINKSRCS@ @OPENSSLEDDSALINKSRCS@ \
		  @OPENSSLGOSTLINKSRCS@ opensslrsa_link.c

PKCS11LINKSRCS	= pkcs11dh_link.c pkcs11dsa_link.c pkcs11rsa_link.c \
		pkcs11ecdsa_link.c pkcs11eddsa_link.c \
		pkcs11gost_link.c pkcs11.c

DSTSRCS =	@DST_EXTRA_SRCS@ @OPENSSLLINKSRCS@ @PKCS11LINKSRCS@ \
		dst_api.c dst_lib.c dst_parse.c \
		dst_result.c gssapi_link.c gssapictx.c \
		hmac_link.c key.c

GEOIPLINKSRCS = geoip.c

DNSTAPSRCS = dnstap.c dnstap.pb-c.c

DNSSRCS =	acache.c acl.c adb.c badcache. byaddr.c \
		cache.c callbacks.c clientinfo.c compress.c \
		db.c dbiterator.c dbtable.c diff.c dispatch.c \
		dlz.c dns64.c dnssec.c ds.c dyndb.c fixedname.c forward.c \
		ipkeylist.c iptable.c journal.c keydata.c keytable.c lib.c \
		log.c lookup.c master.c masterdump.c message.c \
		name.c ncache.c nsec.c nsec3.c nta.c \
		order.c peer.c portlist.c \
		rbt.c rbtdb.c rbtdb64.c rcode.c rdata.c rdatalist.c \
		rdataset.c rdatasetiter.c rdataslab.c request.c \
		resolver.c result.c rootns.c rpz.c rrl.c rriterator.c \
		sdb.c sdlz.c soa.c ssu.c ssu_external.c \
		stats.c tcpmsg.c time.c timer.c tkey.c \
		tsec.c tsig.c ttl.c update.c validator.c \
		version.c view.c xfrin.c zone.c zonekey.c zt.c ${OTHERSRCS}
PORTDNSSRCS =	client.c ecdb.c

SRCS = ${DSTSRCS} ${DNSSRCS} ${PORTDNSSRCS} @DNSTAPSRCS@ @GEOIPLINKSRCS@

SUBDIRS =	include
TARGETS =	timestamp
TESTDIRS =	@UNITTESTS@

DEPENDEXTRA =	./gen -F include/dns/rdatastruct.h \
		-s ${srcdir} -d >> Makefile ;

@BIND9_MAKE_RULES@

PROTOC_C = @PROTOC_C@

version.@O@: version.c
	${LIBTOOL_MODE_COMPILE} ${CC} ${ALL_CFLAGS} \
		-DVERSION=\"${VERSION}\" \
		-DMAJOR=\"${MAJOR}\" \
		-DMAPAPI=\"${MAPAPI}\" \
		-DLIBINTERFACE=${LIBINTERFACE} \
		-DLIBREVISION=${LIBREVISION} \
		-DLIBAGE=${LIBAGE} \
		-c ${srcdir}/version.c

libdns.@SA@: ${OBJS}
	${AR} ${ARFLAGS} $@ ${OBJS}
	${RANLIB} $@

libdns.la: ${OBJS}
	${LIBTOOL_MODE_LINK} \
		${CC} ${ALL_CFLAGS} ${LDFLAGS} -o libdns.la -rpath ${libdir} \
		-version-info ${LIBINTERFACE}:${LIBREVISION}:${LIBAGE} \
		${OBJS} ${ISCLIBS} @DNS_CRYPTO_LIBS@ ${LIBS}

include: gen
	${MAKE} include/dns/enumtype.h
	${MAKE} include/dns/enumclass.h
	${MAKE} include/dns/rdatastruct.h
	${MAKE} code.h

include/dns/enumtype.h: gen
	./gen -s ${srcdir} -t > $@ || { rm -f $@ ; exit 1; }

include/dns/enumclass.h: gen
	./gen -s ${srcdir} -c > $@ || { rm -f $@ ; exit 1; }

include/dns/rdatastruct.h: gen \
		${srcdir}/rdata/rdatastructpre.h \
		${srcdir}/rdata/rdatastructsuf.h
	./gen -s ${srcdir} -i \
		-P ${srcdir}/rdata/rdatastructpre.h \
		-S ${srcdir}/rdata/rdatastructsuf.h > $@ || \
	{ rm -f $@ ; exit 1; }

code.h:	gen
	./gen -s ${srcdir} > code.h || { rm -f $@ ; exit 1; }

gen: gen.c
	${BUILD_CC} ${BUILD_CFLAGS} -I${top_srcdir}/lib/isc/include \
	${BUILD_CPPFLAGS} ${BUILD_LDFLAGS} -o $@ ${srcdir}/gen.c ${BUILD_LIBS}

timestamp: include libdns.@A@
	touch timestamp

testdirs: libdns.@A@

installdirs:
	$(SHELL) ${top_srcdir}/mkinstalldirs ${DESTDIR}${libdir}

install:: timestamp installdirs
	${LIBTOOL_MODE_INSTALL} ${INSTALL_LIBRARY} libdns.@A@ ${DESTDIR}${libdir}

uninstall::
	${LIBTOOL_MODE_UNINSTALL} rm -f ${DESTDIR}${libdir}/libdns.@A@

clean distclean::
	rm -f libdns.@A@ timestamp
	rm -f gen code.h include/dns/enumtype.h include/dns/enumclass.h
	rm -f include/dns/rdatastruct.h
	rm -f dnstap.pb-c.c dnstap.pb-c.h include/dns/dnstap.pb-c.h

newrr::
	rm -f code.h include/dns/enumtype.h include/dns/enumclass.h
	rm -f include/dns/rdatastruct.h

rdata.@O@: include

rbtdb64.@O@: rbtdb64.c rbtdb.c

depend: include
subdirs: include
${OBJS}: include

# dnstap
dnstap.@O@: dnstap.c dnstap.pb-c.c

dnstap.pb-c.c dnstap.pb-c.h include/dns/dnstap.pb-c.h: dnstap.proto
	$(PROTOC_C) --c_out=. dnstap.proto
	cp -f dnstap.pb-c.h include/dns

dnstap.pb-c.@O@: dnstap.pb-c.c

spnego.@O@: spnego_asn1.c spnego.h
