PROG	=	tarsnap
SRCS	=	bsdtar.c cmdline.c getdate.y matching.c read.c siginfo.c subst.c tree.c util.c write.c
MAN1	=	tarsnap.1
MAN5	=	tarsnap.conf.5
WARNS	?=	6
CFLAGS	+=	-DUSERAGENT=\"${PROG}-${TARVERSION}\"
CFLAGS	+=	-DPACKAGE_VERSION=\"${TARVERSION}\"
CFLAGS	+=	-DTSSERVER=\"${TSSERVER}\"
CFLAGS	+=	-DPLATFORM_CONFIG_H=\"config_freebsd.h\"
CFLAGS	+=	-I ${.CURDIR}

# Install sample configuration file
FILESGROUPS	+=	CONFIG
CONFIGDIR	?=	/usr/local/etc
CONFIG		=	tarsnap.conf.sample

# Location of system tarsnap configuration file
CFLAGS	+=	-DETC_TARSNAP_CONF=\"${CONFIGDIR}/tarsnap.conf\"

# Generate tarsnap.1 and tarsnap.conf.5 via sed.
CLEANFILES	+=	tarsnap.1 tarsnap.conf.5
tarsnap.1:	tarsnap.1.in
	cat tarsnap.1.in |					\
	    sed -e 's|@CONFIGDIR@|${CONFIGDIR}|g' > tarsnap.1
tarsnap.conf.5:	tarsnap.conf.5.in
	cat tarsnap.conf.5.in |					\
	    sed -e 's|@CONFIGDIR@|${CONFIGDIR}|g' > tarsnap.conf.5

# Use our own version of libarchive
.if defined(PROFILE)
LDADD	+=	../libarchive/libarchive_p.a
${PROG}	:	../libarchive/libarchive_p.a
.else
LDADD	+=	../libarchive/libarchive.a
${PROG}	:	../libarchive/libarchive.a
.endif
CFLAGS	+=	-I ${.OBJDIR}/../libarchive

# Other libraries used
LDADD	+=	-lz -lbz2 -lcrypto

# Code which interfaces between multiple layers.
.PATH.c	:	./glue
SRCS	+=	archive_multitape.c
SRCS	+=	tape.c
CFLAGS	+=	-I ./glue

# Chunkification cache
.PATH.c	:	./ccache
SRCS	+=	ccache_entry.c
SRCS	+=	ccache_read.c
SRCS	+=	ccache_write.c
CFLAGS	+=	-I ./ccache

# Multitape code
.PATH.c	:	./multitape
SRCS	+=	chunkify.c
SRCS	+=	multitape_write.c
SRCS	+=	multitape_read.c
SRCS	+=	multitape_stats.c
SRCS	+=	multitape_delete.c
SRCS	+=	multitape_fsck.c
SRCS	+=	multitape_nuke.c
SRCS	+=	multitape_chunkiter.c
SRCS	+=	multitape_metadata.c
SRCS	+=	multitape_metaindex.c
SRCS	+=	multitape_transaction.c
CFLAGS	+=	-I ./multitape

# Chunk layer
.PATH.c	:	./chunks
SRCS	+=	chunks_write.c
SRCS	+=	chunks_read.c
SRCS	+=	chunks_stats.c
SRCS	+=	chunks_delete.c 
SRCS	+=	chunks_transaction.c
SRCS	+=	chunks_stats_internal.c
SRCS	+=	chunks_directory.c
CFLAGS	+=	-I ./chunks

# Storage layer
.PATH.c	:	./storage
SRCS	+=	storage_write.c
SRCS	+=	storage_read.c
SRCS	+=	storage_delete.c
SRCS	+=	storage_directory.c
SRCS	+=	storage_transaction.c
CFLAGS	+=	-I ./storage

# Client-server protocol layer
.PATH.c	:	../lib/netpacket
SRCS	+=	netpacket_transaction.c
SRCS	+=	netpacket_write.c
SRCS	+=	netpacket_read.c
SRCS	+=	netpacket_delete.c
SRCS	+=	netpacket_directory.c
SRCS	+=	netpacket_hmac.c
SRCS	+=	netpacket_op.c
CFLAGS	+=	-I ../lib/netpacket

# Packet transport layer
.PATH.c	:	../lib/netproto
SRCS	+=	netproto_connect.c
SRCS	+=	netproto.c
SRCS	+=	netproto_keyexchange.c
SRCS	+=	netproto_packet.c
CFLAGS	+=	-I ../lib/netproto

# Network layer
.PATH.c	:	../lib/network
SRCS	+=	network_select.c
SRCS	+=	network_connect.c
SRCS	+=	network_buf.c
SRCS	+=	network_writeq.c
SRCS	+=	network_cork.c
CFLAGS	+=	-I ../lib/network

# Data structures
.PATH.c	:	../lib/datastruct
SRCS	+=	patricia.c
SRCS	+=	rwhashtab.c
CFLAGS	+=	-I ../lib/datastruct

# Cryptographic code
.PATH.c	:	../lib/crypto
SRCS	+=	sha256.c
SRCS	+=	crypto_entropy.c
SRCS	+=	crypto_hash.c
SRCS	+=	crypto_keyfile.c
SRCS	+=	crypto_keys.c
SRCS	+=	crypto_keys_subr.c
SRCS	+=	crypto_file.c
SRCS	+=	crypto_session.c
SRCS	+=	crypto_aesctr.c
SRCS	+=	crypto_rsa.c
SRCS	+=	crypto_dh.c
SRCS	+=	crypto_verify_bytes.c
SRCS	+=	crypto_keys_server.c
SRCS	+=	crypto_dh_group14.c
SRCS	+=	scryptenc.c
SRCS	+=	scrypt-nosse.c
SRCS	+=	scrypt_cpuperf.c
CFLAGS	+=	-I ../lib/crypto

# Utility code
.PATH.c	:	../lib/util
SRCS	+=	asprintf.c
SRCS	+=	b64encode.c
SRCS	+=	dirutil.c
SRCS	+=	entropy.c
SRCS	+=	hexify.c
SRCS	+=	hexlink.c
SRCS	+=	humansize.c
SRCS	+=	memlimit.c
SRCS	+=	readpass.c
SRCS	+=	sigquit.c
CFLAGS	+=	-I ../lib/util

# Compiler flags for profiling
.if defined(PROFILE)
CFLAGS	+=	-g -pg -DPROFILE
.endif

# Debugging flags
.if defined(DEBUG)
CFLAGS	+=	-g
CFLAGS	+=	-DDEBUG
CFLAGS	+=	-O1
.endif

.include <bsd.prog.mk>
