#	$KAME: Makefile.in,v 1.40 2003/08/19 09:09:15 itojun Exp $


srcdir=	.

CC=	gcc
LDFLAGS= -L../libipsec/.libs
CPPFLAGS=	-I./../include-glibc -I../include-glibc -include ./../include-glibc/glibc-bugs.h -DINET6 -DIPV6_INRIA_VERSION  -I./missing
OPTFLAG=-Wall -Wmissing-prototypes -Wmissing-declarations -DYIPS_DEBUG
CFLAGS=	-g -O2 $(CPPFLAGS) -DHAVE_CONFIG_H $(CPPFLAGS) $(OPTFLAG) -DIPSEC -I. -I$(srcdir) -DSYSCONFDIR=\"${sysconfdir}\" -Wno-sign-compare
CFLAGS+=-DYY_NO_UNPUT
CFLAGS+=-I${srcdir}/../libipsec
LIBS=	-ll -lssl -lcrypto  -lresolv -lipsec -lfl
YFLAGS+=-d
LEX=	flex
YACC=	bison -y

prefix=	/usr/local/ipsec
bindir=	${exec_prefix}/bin
sbindir=${exec_prefix}/sbin
mandir=	${prefix}/man
exec_prefix=	${prefix}
sysconfdir=	${prefix}/etc
INSTALL=/usr/bin/install -c
INSTALL_OPTS=

PROG=	racoon racoonctl eaytest
#PROG+=	pfkey
OBJS=	main.o session.o isakmp.o handler.o \
	isakmp_ident.o isakmp_agg.o isakmp_base.o \
	isakmp_quick.o isakmp_inf.o isakmp_newg.o \
	gssapi.o dnssec.o getcertsbyname.o \
	pfkey.o admin.o ipsec_doi.o oakley.o grabmyaddr.o vendorid.o \
	policy.o localconf.o remoteconf.o crypto_openssl.o algorithm.o \
	proposal.o sainfo.o strnames.o \
	vmbuf.o plog.o logger.o schedule.o str2val.o misc.o sockmisc.o \
	safefile.o backupsa.o cfparse.o cftoken.o nattraversal.o
# under samples
CONF=	psk.txt racoon.conf

RACOON_OBJS = $(OBJS)  arc4random$U.o  sha2.o 
RACOON_CTL_OBJS = kmpstat.o vmbuf.o str2val.o
EAYTEST_OBJS = eaytest.o vmbuf.o str2val.o plog.o logger.o

all: $(PROG)

racoon: $(RACOON_OBJS)
	$(CC) $(LDFLAGS) -o $@ $(RACOON_OBJS) $(LIBS)

racoonctl: $(RACOON_CTL_OBJS) misc_noplog.o 
	$(CC) $(LDFLAGS) -o $@ $(RACOON_CTL_OBJS) misc_noplog.o \
		$(LIBS) 

pfkey: dummy.o
	$(CC) $(LDFLAGS) -o $@ dummy.o

eaytest: $(EAYTEST_OBJS) crypto_openssl_test.o  misc_noplog.o
	$(CC) $(LDFLAGS) -o $@ $(EAYTEST_OBJS) crypto_openssl_test.o misc_noplog.o \
		$(LIBS)  sha2.o 

# special object rules
crypto_openssl_test.o: $(srcdir)/crypto_openssl.c
	$(CC) $(CFLAGS) -DEAYDEBUG -o crypto_openssl_test.o -c $(srcdir)/crypto_openssl.c
misc_noplog.o: $(srcdir)/misc.c
	$(CC) $(CFLAGS) -DNOUSE_PLOG -o misc_noplog.o -c $(srcdir)/misc.c

# extra
print-isakmp.o:	$(srcdir)/../tcpdump/print-isakmp.c
	$(CC) $(CFLAGS) -c $(srcdir)/../tcpdump/$*.c

# missing/*.c
strdup.o:	$(srcdir)/missing/strdup.c
	$(CC) $(CFLAGS) -c $(srcdir)/missing/$*.c
getaddrinfo.o:	$(srcdir)/missing/getaddrinfo.c
	$(CC) $(CFLAGS) -c $(srcdir)/missing/$*.c
getnameinfo.o:	$(srcdir)/missing/getnameinfo.c
	$(CC) $(CFLAGS) -c $(srcdir)/missing/$*.c
rijndael-api-fst.o: $(srcdir)/missing/crypto/rijndael/rijndael-api-fst.c
	$(CC) $(CFLAGS) -c $(srcdir)/missing/crypto/rijndael/$*.c
rijndael-alg-fst.o: $(srcdir)/missing/crypto/rijndael/rijndael-alg-fst.c
	$(CC) $(CFLAGS) -c $(srcdir)/missing/crypto/rijndael/$*.c
sha2.o: $(srcdir)/missing/crypto/sha2/sha2.c
	$(CC) $(CFLAGS) -c $(srcdir)/missing/crypto/sha2/$*.c
arc4random.o: $(srcdir)/missing/arc4random.c
	$(CC) $(CFLAGS) -c $(srcdir)/missing/$*.c

.c.o:
	$(CC) $(CFLAGS) -c $<

tag:
	ctags -dtw $(srcdir)/*.[chly]

install:
	-mkdir -p $(DESTDIR)$(sbindir)
	$(INSTALL) -s $(INSTALL_OPTS) -m 555 racoon $(DESTDIR)$(sbindir)
	-mkdir -p $(DESTDIR)$(mandir)/man8/
	$(INSTALL) $(INSTALL_OPTS) -m 444 $(srcdir)/racoon.8 $(DESTDIR)$(mandir)/man8
	-mkdir -p $(DESTDIR)$(mandir)/man5/
	$(INSTALL) $(INSTALL_OPTS) -m 444 $(srcdir)/racoon.conf.5 $(DESTDIR)$(mandir)/man5
	-mkdir -p $(DESTDIR)${sysconfdir}/racoon
	for i in $(CONF); do \
		mode=644; \
		if test $$i = psk.txt; then mode=600; fi; \
		if test ! -f $(DESTDIR)${sysconfdir}/racoon/$$i; then \
			$(INSTALL) $(INSTALL_OPTS) -m $$mode samples/$$i \
				$(DESTDIR)${sysconfdir}/racoon; \
		fi; \
		$(INSTALL) $(INSTALL_OPTS) -m $$mode samples/$$i \
			$(DESTDIR)${sysconfdir}/racoon/$$i.dist; \
	done

clean:
	-rm -f $(PROG) *.o *.core

distclean: clean
	-rm -f Makefile config.cache config.status config.h config.log cfparse.c cftoken.c y.tab.h
	-for i in $(CONF); do \
		rm -f samples/$$i; \
	done


depend:
	$(CC) -MM $(CFLAGS) $(srcdir)/*.c > .depend

-include .depend

#
# Everything below this line is for "make dist" to work from
# the Linux tree.
#

top_srcdir = $(srcdir)/../..
install-sh = $(top_srcdir)/install-sh

RACOON_SOURCES = $(OBJS:.o=.c)
RACOON_CTL_SOURCES = $(RACOON_CTL_OBJS:.o=.c)
EAYTEST_SOURCES = $(EAYTEST_OBJS:.o=.c)
EXTRA_SOURCES = \
	missing/crypto/rijndael/boxes-fst.dat \
	missing/crypto/rijndael/rijndael-alg-fst.c \
	missing/crypto/rijndael/rijndael-alg-fst.h \
	missing/crypto/rijndael/rijndael-api-fst.c \
	missing/crypto/rijndael/rijndael-api-fst.h \
	missing/crypto/rijndael/rijndael.h \
	missing/crypto/rijndael/rijndael_local.h \
	missing/crypto/sha2/sha2.c \
	missing/crypto/sha2/sha2.h \
	missing/addrinfo.h \
	missing/getaddrinfo.c \
	missing/getnameinfo.c \
	missing/strdup.c \
	missing/arc4random.c \
	client-puzzle.c debugrm.c dump.c

HEADERS= \
	admin.h           dnssec.h      isakmp_base.h   oakley.h      session.h \
	admin_var.h       dump.h        isakmp_ident.h  pfkey.h       sockmisc.h \
	algorithm.h       gcmalloc.h    isakmp_inf.h    plog.h        str2val.h \
	backupsa.h        gnuc.h        isakmp_newg.h   policy.h      strnames.h \
	arc4random.h	  grabmyaddr.h  isakmp_quick.h  proposal.h    var.h \
	gssapi.h          isakmp_var.h	vendorid.h      nattraversal.h\
	crypto_openssl.h  handler.h     localconf.h     remoteconf.h  vmbuf.h \
	debug.h           ipsec_doi.h   logger.h        safefile.h \
	debugrm.h         isakmp.h      misc.h          sainfo.h \
	dhgroup.h         isakmp_agg.h  netdb_dnssec.h  schedule.h \
	cfparse_proto.h	  cftoken_proto.h y.tab.h

MAN_FILES = racoon.8 racoon.conf.5

EXTRA_DIST= cftoken.l cfparse.y \
   doc/FAQ                     doc/ibm-result.jp      doc/rules.jp \
   doc/README.certificate      doc/pattern            doc/sandiego-result.en \
   doc/README.gssapi           doc/question           doc/sandiego-result.jp \
   doc/SantaBarbara-result.jp doc/racoonquestion.sh doc/sandiego0009-result.en \
   doc/helsinki-result.jp      doc/redmond.txt \
   samples/Makefile    samples/psk.txt.sample  samples/racoon.conf.sample \
   samples/racoon.conf.sample-gssapi samples/racoon.conf.sample-natt \
   samples/psk.txt.in  samples/racoon.conf.in  samples/sandiego.pl \
   contrib/sp.pl stats.pl

DIST_FILES = Makefile.in TODO aclocal.m4 \
	config.guess config.sub configure configure.in install-sh config.h.in

DISTFILES = $(RACOON_SOURCES) $(RACOON_CTL_SOURCES) $(EAYTEST_SOURCES) \
	$(EXTRA_SOURCES) $(HEADERS) $(DIST_FILES) $(MAN_FILES) $(EXTRA_DIST)

top_distdir = ../..
distdir = $(top_distdir)/$(PACKAGE)-$(VERSION)

distdir: $(DISTFILES)
	@for file in $(DISTFILES); do \
	  if test -f $$file; then d=.; else d=$(srcdir); fi; \
	  dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \
	  if test "$$dir" != "$$file" && test "$$dir" != "."; then \
	    $(install-sh) -d "$(distdir)/$$dir"; \
	  fi; \
	  if test -d $$d/$$file; then \
	    cp -pR $$d/$$file $(distdir) \
	    || exit 1; \
	  else \
	    test -f $(distdir)/$$file \
	    || cp -p $$d/$$file $(distdir)/$$file \
	    || exit 1; \
	  fi; \
	done
	for subdir in $(SUBDIRS); do \
	  if test "$$subdir" = .; then :; else \
	    test -d $(distdir)/$$subdir \
	    || mkdir $(distdir)/$$subdir \
	    || exit 1; \
	    (cd $$subdir && \
	      $(MAKE) $(AM_MAKEFLAGS) \
	        top_distdir="$(top_distdir)" \
	        distdir=../$(distdir)/$$subdir \
	        distdir) \
	      || exit 1; \
	  fi; \
	done

check: eaytest
	./eaytest

# The following are to get "make distcheck" to work from the Linux top-level
dvi:
dvi-recursive:
check-recursive:
installcheck:
installcheck-recursive:
uninstall-recursive:

# Note: this should _probably_ test whether to remove the config file?
uninstall:
	-rm -f $(DESTDIR)$(sbindir)/racoon
	-rm -f $(DESTDIR)$(mandir)/man8/racoon.8
	-rm -f $(DESTDIR)$(mandir)/man5/racoon.conf.5
	for i in $(CONF); do \
		rm -f $(DESTDIR)$(sysconfdir)/racoon/$$i ; \
		rm -f $(DESTDIR)$(sysconfdir)/racoon/$$i.dist ; \
	done
