3 # This file is part of secnet.
4 # See README for full list of copyright holders.
6 # secnet is free software; you can redistribute it and/or modify it
7 # under the terms of the GNU General Public License as published by
8 # the Free Software Foundation; either version 3 of the License, or
9 # (at your option) any later version.
11 # secnet is distributed in the hope that it will be useful, but
12 # WITHOUT ANY WARRANTY; without even the implied warranty of
13 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14 # General Public License for more details.
16 # You should have received a copy of the GNU General Public License
17 # version 3 along with secnet; if not, see
18 # https://www.gnu.org/licenses/gpl.html.
20 .PHONY
: all clean realclean distclean dist install
34 INSTALL_PROGRAM
:=@INSTALL_PROGRAM@
35 INSTALL_SCRIPT
:=@INSTALL_SCRIPT@
36 INSTALL_DATA
:=@INSTALL_DATA@
38 prefix:=$(DESTDIR
)@
prefix@
39 exec_prefix:=@
exec_prefix@
41 sysconfdir
:=$(DESTDIR
)@sysconfdir@
42 datarootdir
:=@datarootdir@
43 transform
:=@program_transform_name@
46 CFLAGS
:=-Wall @WRITESTRINGS@ @CFLAGS@
-Werror \
47 -W
-Wno-unused
-Wno-unused-parameter \
48 -Wno-pointer-sign
-Wstrict-prototypes
-Wmissing-prototypes \
49 -Wmissing-declarations
-Wnested-externs
-Wredundant-decls \
50 -Wpointer-arith
-Wformat
=2 -Winit-self \
51 -Wswitch-enum
-Wunused-variable
-Wunused-function
-Wbad-function-cast \
52 -Wno-strict-aliasing
-fno-strict-aliasing \
54 ALL_CFLAGS
:=@DEFS@
-I
$(srcdir) -I.
$(CFLAGS
) $(EXTRA_CFLAGS
)
55 CPPFLAGS
:=@CPPFLAGS@
-DDATAROOTDIR
='"$(datarootdir)"' $(EXTRA_CPPFLAGS
)
56 LDFLAGS
:=@LDFLAGS@
$(EXTRA_LDFLAGS
)
57 LDLIBS
:=@LIBS@
$(EXTRA_LDLIBS
)
61 OBJECTS
:=secnet.o util.o conffile.yy.o conffile.tab.o conffile.o modules.o \
62 resolver.o random.o udp.o site.o transform-cbcmac.o transform-eax.o \
63 comm-common.o polypath.o \
64 netlink.o rsa.o dh.o serpent.o serpentbe.o \
65 f25519.o x25519.o fgoldi.o x448.o \
66 md5.o sha512.o tun.o slip.o sha1.o ipaddr.o log.o \
69 # version.o is handled specially below and in the link rule for secnet.
71 TEST_OBJECTS
:=eax-aes-test.o eax-serpent-test.o eax-serpentbe-test.o \
72 eax-test.o aes.o x25519-test.o x448-test.o
74 ifeq (version.o
,$(MAKECMDGOALS
))
79 STALE_PYTHON_FILES
= $(foreach e
, py pyc
, \
80 $(foreach p
, /usr
/usr
/local
, \
81 $(foreach l
, ipaddr
, \
82 $(DESTDIR
)$p/share
/secnet
/$l.
$e \
88 flex
--header
=$*.yy.h
-o
$@
$<
93 %.o
: %.c conffile.yy.h
94 $(CC
) $(CPPFLAGS
) $(ALL_CFLAGS
) -c
$< -o
$@
98 # Automatic remaking of configuration files, from autoconf documentation
99 ${srcdir}/configure
: configure.in
100 cd
${srcdir} && autoconf
102 # autoheader might not change config.h.in, so touch a stamp file.
103 ${srcdir}/config.h.in
: stamp-h.in
104 ${srcdir}/stamp-h.in
: configure.in
105 cd
${srcdir} && autoheader
106 echo timestamp
> ${srcdir}/stamp-h.in
109 stamp-h
: config.h.in config.status
112 Makefile
: Makefile.in config.status
115 config.status
: configure
116 .
/config.status
--recheck
117 # End of config file remaking rules
119 # C and header file dependency rules
120 SOURCES
:=$(OBJECTS
:.o
=.c
) $(TEST_OBJECTS
:.o
=.c
)
121 DEPENDS
:=$(OBJECTS
:.o
=.d
) $(TEST_OBJECTS
:.o
=.d
)
125 # Manual dependencies section
126 conffile.yy.c
: conffile.fl conffile.tab.c
127 conffile.yy.h
: conffile.yy.c
128 conffile.tab.c
: conffile.y
129 # End of manual dependencies section
131 conffile.yy.o
: ALL_CFLAGS
+= -Wno-sign-compare
134 $(MAKE
) version.o
# *.o $(filter-out %.o, $^)
135 $(CC
) $(LDFLAGS
) $(ALL_CFLAGS
) -o
$@
$(OBJECTS
) version.o
$(LDLIBS
)
136 # We (always) regenerate the version, but only if we regenerate the
137 # binary. (This is necessary as the version string is can depend on
138 # any of the source files, eg to see whether "+" is needed.)
140 ifneq (,$(wildcard .git
/HEAD
))
141 # If we have (eg) committed, relink and thus regenerate the version
142 # with the new info from git describe.
143 secnet
: Makefile .git
/HEAD
$(shell sed
-n
's#^ref: #.git/#p' .git
/HEAD
)
144 secnet
: $(wildcard .git
/packed-refs
)
147 check: eax-aes-test.confirm eax-serpent-test.confirm \
148 eax-serpentbe-test.confirm check-ipaddrset \
149 msgcode-test.confirm x25519-test.confirm x448-test.confirm
152 echo
"#include \"secnet.h\"" >$@.new
153 @set
-ex
; if
test -e .git
&& type
-p git
>/dev
/null
; then \
154 v
=$$(git describe
--match
'v*'); v
=$${v
#v}; \
155 if
! git diff
--quiet HEAD
; then v
="$$v+"; fi
; \
159 echo
"char version[]=\"secnet $$v\";" >>$@.new
162 eax-
%-test: eax-
%-test.o eax-test.o
%.o
163 $(CC
) $(LDFLAGS
) $(ALL_CFLAGS
) -o
$@
$^
165 eax-
%-test.confirm
: eax-
%-test eax-
%-test.vectors
166 .
/$< <$(srcdir)/eax-
$*-test.vectors
>$@.new
169 msgcode-test
: msgcode-test.o
170 $(CC
) $(LDFLAGS
) $(ALL_CFLAGS
) -o
$@
$^
172 msgcode-test.confirm
: msgcode-test
176 XDH_FUNCS
= x25519 x448
177 x25519_FIELD
= f25519
180 $(addsuffix -test, $(XDH_FUNCS
)): %-test: %-test.o
%.o
181 $(CC
) $(LDFLAGS
) $(ALL_CFLAGS
) -o
$@
$^
182 x25519-test
: f25519.o
185 $(addsuffix -test.o
, $(XDH_FUNCS
)): %-test.o
: xdh-test.c
186 $(CC
) $(CPPFLAGS
) $(ALL_CFLAGS
) -c \
187 -DXDH
=$* -DFIELD
=$($*_FIELD
) \
190 $(addsuffix -test.confirm
, $(XDH_FUNCS
)): %-test.confirm
: %-test %-tests.in
191 .
/$*-test <$(srcdir)/$*-tests.in
194 check-ipaddrset
: ipaddrset-test.py ipaddrset.py ipaddrset-test.expected
195 $(srcdir)/ipaddrset-test.py
>ipaddrset-test.new
196 diff
-u
$(srcdir)/ipaddrset-test.expected ipaddrset-test.new
198 .PRECIOUS
: eax-
%-test
201 $(INSTALL
) -d
$(prefix)/share
/secnet
$(sbindir
)
202 $(INSTALL
) -d
$(mandir)/man8
203 $(INSTALL
) -d
$(datarootdir
)/secnet
206 set
-e
; ok
=true
; for f in
$(STALE_PYTHON_FILES
); do \
207 if
test -e
$$f; then \
208 echo
>&2 "ERROR: $$f still exists "\
209 "- try \`make install-force'"; \
214 $(INSTALL_PROGRAM
) secnet
$(sbindir
)/`echo secnet|sed '$(transform)'`
215 $(INSTALL_PROGRAM
) ${srcdir}/make-secnet-sites
$(sbindir
)/`echo make-secnet-sites|sed '$(transform)'`
216 $(INSTALL_DATA
) ${srcdir}/ipaddrset.py
$(prefix)/share
/secnet
/ipaddrset.py
217 $(INSTALL_SCRIPT
) ${srcdir}/polypath-interface-monitor-linux \
218 $(datarootdir
)/secnet
/.
219 $(INSTALL_DATA
) ${srcdir}/secnet
.8 $(mandir)/man8
/secnet
.8
222 rm -f
$(STALE_PYTHON_FILES
)
226 $(RM
) -f
*.o
*.yy.
[ch
] *.tab.
[ch
] $(TARGETS
) core version.c
227 $(RM
) -f
*.d
*.pyc
*~ eax-
*-test.confirm eax-
*-test
228 $(RM
) -f msgcode-test.confirm msgcode-test
229 $(RM
) -f
$(addsuffix -test, $(XDH_FUNCS
))
230 $(RM
) -f
$(addsuffix -test.confirm
, $(XDH_FUNCS
))
233 $(RM
) -f
*~ Makefile config.h
*.d \
234 config.log config.status config.cache \
241 # 0. Use this checklist from Makefile.in
243 # 1. Check that the tree has what you want
245 # 2. Update changelog:
246 # gbp dch --since=<PREVIOUS VERSION>
247 # and then edit debian/changelog.
249 # 3. Update VERSION (in this file, above) and
250 # finalise debian/changelog (removing ~ from version) and commit.
252 # 4. Build source and binaries:
253 # dgit -wgf sbuild -A -c stretch
255 # 5. dpkg -i on zealot just to check
256 # dpkg -i ~ian/things/Fvpn/bpd/secnet_${VERSION}_amd64.deb
258 # 6. run it on chiark
259 # check we can still ping davenant and chiark
261 # 7. Make git tag and source tarball signature:
262 # git-tag -u general -m "secnet $VERSION" -s v${VERSION//\~/_}
263 # gpg -u general --detach-sign ../bpd/secnet_$VERSION.tar.gz
265 # 8. Publish the branch and distriubtion files:
266 # git-push origin v${VERSION//\~/_} v${VERSION//\~/_}~0:master
267 # dcmd rsync -v ../bpd/secnet_${VERSION}_multi.changes chiark:/home/ianmdlvl/public-html/secnet/download/
269 # 9. Sort out html. On chiark as user secnet:
270 # cd ~secnet/public-html/release/
273 # ln -s /home/ianmdlvl/public-html/secnet/download/secnet?$VERSION* .
274 # ln -sfn $VERSION ../current
276 # 10. write and post a release announcement
278 # dcmd sha256sum secnet_${VERSION}_multi.changes
280 # gpg --clearsign ../release-announcement
281 # rsync -vP ../release-announcement.asc c:mail/d/
283 # 11. bump changelog version in master, to new version with ~