2 # Copyright (C) 1997 Angelos D. Keromytis.
3 # Copyright (C) 1998-2001 D. Hugh Redelmeier
5 # This program is free software; you can redistribute it and/or modify it
6 # under the terms of the GNU General Public License as published by the
7 # Free Software Foundation; either version 2 of the License, or (at your
8 # option) any later version. See <http://www.fsf.org/copyleft/gpl.txt>.
10 # This program is distributed in the hope that it will be useful, but
11 # WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
12 # or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
15 # RCSID $Id: Makefile,v 1.95 2002/04/02 04:08:01 mcr Exp $
19 include ../Makefile.inc
23 FMANDIR=$(MANTREE)/man5
24 PMANDIR=$(MANTREE)/man8
27 FREESWANINCLS= -I$(FREESWANLIBDIR)
28 FREESWANLIB=$(FREESWANLIBDIR)/libfreeswan.a
29 LIBDESLITE=$(FREESWANLIBDIR)/libdes.a
31 KLIPSD=../klips/net/ipsec
33 # -O on Linux makes gcc coredump when compiling sha1.c
34 # -Wundef is nice but RHL5.2 compiler doesn't support it
35 CFLAGS = -g -Wall -W -Wmissing-prototypes -Wpointer-arith -Wbad-function-cast \
36 -Wcast-qual -Wmissing-declarations -Wwrite-strings \
37 -Wstrict-prototypes # -Wundef
39 # where to find klips headers and FreeS/WAN headers
40 HDRDIRS = -I$(KLIPSD) $(FREESWANINCLS)
42 # On non-LINUX systems, these one of these may be needed (see endian.h)
43 # BYTE_ORDER = -DBIG_ENDIAN=4321 -DLITTLE_ENDIAN=1234 -DBYTE_ORDER=BIG_ENDIAN
44 # BYTE_ORDER = -DBIG_ENDIAN=4321 -DLITTLE_ENDIAN=1234 -DBYTE_ORDER=LITTLE_ENDIAN
46 # -DKLIPS enables interface to Kernel LINUX IPsec code
47 # -DDEBUG enables debugging code, allowing for debugging output
48 # (note that output must also be selected at runtime, so it is
49 # reasonable to always define this)
50 # -DGCC_LINT uses gcc-specific declarations to improve compile-time
52 # -DLEAK_DETECTIVE enables crude code to find memory allocation leaks.
53 # -DDODGE_DH_MISSING_ZERO_BUG enables kludge to remain interoperable
54 # with Pluto from FreeS/WAN 1.00 and before.
55 # -DOLD_RESOLVER. At some point, the resolver interface changed.
56 # This macro enables Pluto support for the old interface.
57 # It is automatically defined, based on the value of the <resolver.h>
58 # macro __RES. We don't know the correct threshold, so you may
59 # find that you must manually define this. If so, please inform
60 # us so that we can refine the threshold.
62 # The following are best left undefined -- each can be overridden at runtime
64 # -DPORT=n sets the default UDP port for IKE messages (otherwise 500)
65 # -DSHARED_SECRETS_FILE=string overrides /etc/ipsec.secrets as the
66 # default name of the file containing secrets used to authenticate other
67 # IKE daemons. In the Makefile, two levels of quoting are needed:
68 # -DSHARED_SECRETS_FILE='"/etc/ipsec.secrets"'
69 # -DDEFAULT_CTLBASE=string overrides /var/run/pluto as default directory
70 # and basename for pluto's lockfile (.pid) and control socket (.ctl).
71 # Double quoting may be needed.
73 DEFINES = $(BYTE_ORDER) \
76 -DDODGE_DH_MISSING_ZERO_BUG \
79 -DNAT_TRAVERSAL -DVIRTUAL_IP \
82 CPPFLAGS = $(HDRDIRS) $(DEFINES) \
83 -DSHARED_SECRETS_FILE=\"${FINALCONFDIR}/ipsec.secrets\"
85 ALLFLAGS = $(CPPFLAGS) $(CFLAGS)
87 # libefence is a free memory allocation debugger
88 # Solaris 2 needs -lsocket -lnsl
89 LIBSPLUTO = -lgmp -lresolv # -lefence
93 LIBSADNS = -lresolv # -lefence
95 # Solaris needs -lsocket -lnsl
100 BINNAMEADNS = _pluto_adns
108 # files for a (source) distribution
110 DISTMISC = CHANGES TODO ipsec.secrets Makefile routing.txt .cvsignore \
111 pluto.8 ipsec.secrets.5
114 gcryptfix.c gcryptfix.h \
116 elgamal.c elgamal.h \
122 connections.c connections.h \
123 constants.c constants.h \
131 ipsec_doi.c ipsec_doi.h \
133 kernel_alg.c kernel_alg.h \
134 ike_alg.c ike_alg.h \
135 alg_info.c alg_info.h \
136 kernel_comm.c kernel_comm.h \
144 preshared.c preshared.h \
153 vendor.c nat_traversal.c virtual.c \
157 DIST = $(DISTMISC) $(DISTSRC)
160 # start of support for DSS/DSA. Not currently used.
161 # OBJSGCRYPT = gcryptfix.o dsa.o elgamal.o primegen.o smallprime.o
164 OBJSPLUTO = asn1.o connections.o constants.o cookie.o crypto.o defs.o log.o \
165 state.o main.o server.o timer.o pem.o pkcs.o x509.o id.o ipsec_doi.o kernel.o \
166 kernel_comm.o demux.o packet.o preshared.o dnskey.o rnd.o spdb.o \
167 vendor.o nat_traversal.o virtual.o \
168 sha1.o md5.o md2.o $(OBJSGCRYPT) $(LIBDESLITE) $(FREESWANLIB)
170 OBJSADNS = adns.o $(FREESWANLIB)
172 OBJSWHACK = whack.o $(FREESWANLIB)
174 all: $(BINNAMEPLUTO) $(BINNAMEADNS) $(BINNAMEWHACK)
180 $(INSTALL) $(INSTBINFLAGS) $(BINNAMEPLUTO) $(BINNAMEADNS) $(BINNAMEWHACK) $(BINDIR)
181 $(INSTALL) $(INSTMANFLAGS) pluto.8 $(PMANDIR)/ipsec_pluto.8
182 ../utils/manlink $(PMANDIR) ipsec_pluto.8
183 $(INSTALL) $(INSTMANFLAGS) ipsec.secrets.5 $(FMANDIR)
184 ../utils/manlink $(FMANDIR) ipsec.secrets.5
186 alg_info_test: alg_info_test.o alg_info.o kernel_alg.o ike_alg.o constants.o defs.o log.o db_ops.o crypto.o $(LIBDESLITE) $(FREESWANLIB)
187 $(CC) -o $@ $^ $(LIBSPLUTO)
189 # alg/libalg.o contains an already resolved object built with
190 # additional crypto algos inside.
191 OBJSPLUTO:= kernel_alg.o ike_alg.o alg_info.o db_ops.o $(OBJSPLUTO) alg/libalg.o
192 # if new alg source is created in alg directory,
193 # trigger libalg.o rebuild
198 # helper for creating alg/Make.common
200 @echo DEFINES=$(DEFINES)
201 @echo CFLAGS=$(CFLAGS)
202 @echo CPPFLAGS=$(CPPFLAGS)
205 $(BINNAMEPLUTO): $(OBJSPLUTO) $(ALG_LIBS)
206 $(CC) -o $(BINNAMEPLUTO) $(LDFLAGS) $(OBJSPLUTO) $(LIBSPLUTO)
208 $(BINNAMEADNS): $(OBJSADNS)
209 $(CC) -o $(BINNAMEADNS) $(OBJSADNS) $(LIBSADNS)
211 $(BINNAMEWHACK): $(OBJSWHACK)
212 $(CC) -o $(BINNAMEWHACK) $(OBJSWHACK) $(LIBSWHACK)
217 # Exuberant Ctags doesn't work if LC_ALL is set to something other than C
219 CTAGSFLAGS = -N --format=1 # fishy options required for Exuberant Ctags
222 LC_ALL=C ctags $(CTAGSFLAGS) $(DISTSRC)
233 $(RM) $(RMFLAGS) *.core core *~ a.out ktrace.out \
234 $(OBJSPLUTO) $(BINNAMEPLUTO) \
235 $(OBJSWHACK) $(BINNAMEWHACK) \
236 $(OBJSADNS) $(BINNAMEADNS)
240 echo no checks in lib right now.
245 $(CC) $(COPTS) $(ALLFLAGS) -c $<
247 # These rules are not for production use
249 cd $(FREESWANLIBDIR) ; $(MAKE)
252 cd $(FREESWANLIBDIR) ; $(MAKE) libdes.a
254 # Gather dependencies caused by explicit #includes within .c files
256 # Each .c is assumed to compile into a .o with the corresponding name.
257 # Only dependencies on based on "" includes are considered, not <>.
258 # Dependencies caused by includes within headers are not noticed.
259 # Unlike dependencies generated by the compiler, these include dependencies
260 # suppressed by conditional compilation (good, we think).
261 # This code can be tricked by embeding #include in comments or
262 # vice-versa, but we're among friends.
265 @ls $(DISTSRC) | grep '\.c' | sed -e 's/\(.*\)\.c$$/\1.o: \1.c/'
267 @ls $(DISTSRC) | grep '\.c' | xargs grep '^#[ ]*include[ ]*"' | \
268 sed -e 's/\.c:#[ ]*include[ ]*"/.o: /' -e 's/".*//'
270 # Dependencies generated by "make gatherdeps":
273 alg_info.o: alg_info.c
275 connections.o: connections.c
276 constants.o: constants.c
284 gcryptfix.o: gcryptfix.c
287 ipsec_doi.o: ipsec_doi.c
289 kernel_alg.o: kernel_alg.c
290 kernel_comm.o: kernel_comm.c
295 nat_traversal.o: nat_traversal.c
299 preshared.o: preshared.c
300 primegen.o: primegen.c
304 smallprime.o: smallprime.c
314 alg_info.o: alg_info.h
315 alg_info.o: constants.h
321 alg_info.o: kernel_alg.h
322 alg_info.o: ike_alg.h
328 connections.o: constants.h
329 connections.o: defs.h
331 connections.o: x509.h
332 connections.o: connections.h
333 connections.o: packet.h
334 connections.o: demux.h
335 connections.o: state.h
336 connections.o: timer.h
337 connections.o: ipsec_doi.h
338 connections.o: server.h
339 connections.o: kernel.h
341 connections.o: preshared.h
342 connections.o: adns.h
343 connections.o: dnskey.h
344 connections.o: whack.h
345 connections.o: alg_info.h
346 connections.o: ike_alg.h
347 connections.o: kernel_alg.h
348 connections.o: nat_traversal.h
349 connections.o: virtual.h
350 constants.o: constants.h
353 constants.o: packet.h
354 cookie.o: constants.h
359 crypto.o: constants.h
377 demux.o: connections.h
390 demux.o: nat_traversal.h
393 dnskey.o: constants.h
398 dnskey.o: connections.h
399 dnskey.o: preshared.h
409 elgamal.o: constants.h
413 elgamal.o: gcryptfix.h
415 gcryptfix.o: constants.h
419 gcryptfix.o: gcryptfix.h
427 ike_alg.o: constants.h
438 ike_alg.o: alg_info.h
443 ike_alg.o: connections.h
444 ipsec_doi.o: constants.h
449 ipsec_doi.o: connections.h
450 ipsec_doi.o: preshared.h
451 ipsec_doi.o: packet.h
454 ipsec_doi.o: dnskey.h
455 ipsec_doi.o: kernel.h
457 ipsec_doi.o: cookie.h
458 ipsec_doi.o: server.h
462 ipsec_doi.o: ipsec_doi.h
467 ipsec_doi.o: crypto.h
468 ipsec_doi.o: ike_alg.h
469 ipsec_doi.o: kernel_alg.h
470 ipsec_doi.o: alg_info.h
471 ipsec_doi.o: vendor.h
472 ipsec_doi.o: nat_traversal.h
473 ipsec_doi.o: virtual.h
474 kernel.o: constants.h
479 kernel.o: connections.h
487 kernel.o: kernel_alg.h
489 kernel.o: nat_traversal.h
490 kernel_alg.o: constants.h
494 kernel_alg.o: connections.h
495 kernel_alg.o: state.h
496 kernel_alg.o: packet.h
498 kernel_alg.o: kernel.h
499 kernel_alg.o: kernel_alg.h
500 kernel_alg.o: alg_info.h
502 kernel_alg.o: whack.h
503 kernel_alg.o: db_ops.h
504 kernel_comm.o: constants.h
505 kernel_comm.o: defs.h
507 kernel_comm.o: x509.h
508 kernel_comm.o: connections.h
509 kernel_comm.o: whack.h
510 kernel_comm.o: packet.h
511 kernel_comm.o: demux.h
512 kernel_comm.o: state.h
513 kernel_comm.o: ipsec_doi.h
514 kernel_comm.o: kernel.h
515 kernel_comm.o: kernel_comm.h
517 kernel_comm.o: preshared.h
518 kernel_comm.o: adns.h
519 kernel_comm.o: dnskey.h
520 kernel_comm.o: server.h
521 kernel_comm.o: kernel_alg.h
522 kernel_comm.o: ike_alg.h
523 kernel_comm.o: db_ops.h
536 main.o: connections.h
551 main.o: nat_traversal.h
555 nat_traversal.o: constants.h
556 nat_traversal.o: defs.h
557 nat_traversal.o: log.h
558 nat_traversal.o: id.h
559 nat_traversal.o: x509.h
560 nat_traversal.o: connections.h
561 nat_traversal.o: packet.h
562 nat_traversal.o: demux.h
563 nat_traversal.o: whack.h
564 nat_traversal.o: state.h
565 nat_traversal.o: server.h
566 nat_traversal.o: timer.h
567 nat_traversal.o: sha1.h
568 nat_traversal.o: md5.h
569 nat_traversal.o: crypto.h
570 nat_traversal.o: vendor.h
571 nat_traversal.o: cookie.h
572 nat_traversal.o: kernel.h
573 nat_traversal.o: nat_traversal.h
574 nat_traversal.o: ike_alg.h
575 packet.o: constants.h
592 preshared.o: constants.h
596 preshared.o: connections.h
598 preshared.o: preshared.h
600 preshared.o: dnskey.h
604 preshared.o: nat_traversal.h
605 primegen.o: constants.h
609 primegen.o: gcryptfix.h
616 server.o: constants.h
621 server.o: connections.h
628 server.o: kernel_comm.h
629 server.o: preshared.h
633 server.o: nat_traversal.h
636 smallprime.o: constants.h
638 smallprime.o: gcryptfix.h
643 spdb.o: connections.h
658 spdb.o: nat_traversal.h
663 state.o: connections.h
681 timer.o: connections.h
692 timer.o: nat_traversal.h
693 vendor.o: constants.h
699 vendor.o: connections.h
704 vendor.o: nat_traversal.h
705 virtual.o: constants.h
710 virtual.o: connections.h