--- /dev/null
+GOPATH != pwd
+VERSION != cat VERSION
+
+LDFLAGS = -X govpn.Version $(VERSION)
+PREFIX ?= /usr/local
+BINDIR = $(DESTDIR)$(PREFIX)/bin
+INFODIR = $(DESTDIR)$(PREFIX)/info
+SHAREDIR = $(DESTDIR)$(PREFIX)/share/govpn
+DOCDIR = $(DESTDIR)$(PREFIX)/share/doc/govpn
+
+all: govpn-client govpn-server govpn-verifier
+
+depends:
+ $(MAKE) -C src
+
+govpn-client: depends
+ GOPATH=$(GOPATH) go build -ldflags "$(LDFLAGS)" govpn/cmd/govpn-client
+
+govpn-server: depends
+ GOPATH=$(GOPATH) go build -ldflags "$(LDFLAGS)" govpn/cmd/govpn-server
+
+govpn-verifier: depends
+ GOPATH=$(GOPATH) go build -ldflags "$(LDFLAGS)" govpn/cmd/govpn-verifier
+
+bench:
+ cd src/govpn ; GOPATH=$(GOPATH) GOMAXPROC=2 go test -bench .
+
+clean:
+ rm -f govpn-client govpn-server govpn-verifier
+
+doc:
+ $(MAKE) -C doc
+
+install: all doc
+ mkdir -p $(BINDIR)
+ cp -f govpn-client govpn-server govpn-verifier $(BINDIR)
+ chmod 755 $(BINDIR)/govpn-client $(BINDIR)/govpn-server $(BINDIR)/govpn-verifier
+ mkdir -p $(INFODIR)
+ cp -f doc/govpn.info $(INFODIR)
+ chmod 644 $(INFODIR)/govpn.info
+ mkdir -p $(SHAREDIR)
+ cp -f utils/newclient.sh utils/storekey.sh $(SHAREDIR)
+ chmod 755 $(SHAREDIR)/newclient.sh $(SHAREDIR)/storekey.sh
+ mkdir -p $(DOCDIR)
+ cp -f -L AUTHORS INSTALL NEWS README THANKS $(DOCDIR)
+ chmod 644 $(DOCDIR)/AUTHORS $(DOCDIR)/INSTALL $(DOCDIR)/NEWS $(DOCDIR)/README $(DOCDIR)/THANKS
+
+install-strip: install
+ strip $(BINDIR)/govpn-client $(BINDIR)/govpn-server $(BINDIR)/govpn-verifier
all: govpn.info govpn.html
+MAKEINFO ?= makeinfo
+
govpn.info: *.texi handshake.utxt
- makeinfo govpn.texi
+ $(MAKEINFO) govpn.texi
handshake.utxt: handshake.txt
plantuml -tutxt handshake.txt
govpn.html: *.texi handshake.utxt
rm -f govpn.html/*.html
- makeinfo --html -o govpn.html govpn.texi
+ $(MAKEINFO) --html -o govpn.html govpn.texi
Official website is @url{http://www.cypherpunks.ru/govpn/}, also available
as @url{https://www.torproject.org/, Tor} hidden service:
@url{http://vabu56j2ep2rwv3b.onion/govpn/}.
-Development Git source code repository currently is located here:
-@url{https://github.com/stargrave/govpn.git}.
@tab @url{download/govpn-3.0.tar.xz, link} @url{download/govpn-3.0.tar.xz.sig, sign}
@tab @code{12579c5c3cccfe73c66b5893335bc70c42d7b13b8e94c7751ec65d421eaff9a5}
+@item 3.1 @tab 54 KiB
+@tab @url{download/govpn-3.1.tar.xz, link} @url{download/govpn-3.1.tar.xz.sig, sign}
+@tab @code{4034a67eb472e33760ed1783ca871f531c3a6be99b9bd6213f4f83c1147c344b}
+
@end multitable
Also you can try its @ref{Contacts, .onion} version.
@unnumbered Installation
GoVPN is written on @url{http://golang.org/, Go programming language},
-@url{https://www.gnu.org/software/make/, GNU Make} is recommended for
-convenient building. @url{https://www.gnu.org/software/texinfo/, Texinfo}
+@emph{Make} is recommended for convenient building.
+@url{https://www.gnu.org/software/texinfo/, Texinfo}
is used for building documentation.
-Required libraries, dependencies (they are installed automatically when
-using @emph{Make}):
+Included required libraries:
@multitable @columnfractions .40 .20 .40
@headitem Library @tab Platform @tab Licence
-@item @code{golang.org/x/crypto/poly1305} @tab All @tab BSD 3-Clause
-@item @code{golang.org/x/crypto/salsa20} @tab All @tab BSD 3-Clause
-@item @code{golang.org/x/crypto/xtea} @tab All @tab BSD 3-Clause
-@item @code{golang.org/x/crypto/pbkdf2} @tab All @tab BSD 3-Clause
+@item @code{golang.org/x/crypto} @tab All @tab BSD 3-Clause
@item @code{github.com/agl/ed25519} @tab All @tab BSD 3-Clause
@item @code{github.com/bigeagle/water} @tab GNU/Linux @tab BSD 3-Clause
@end multitable
-You can get tarball, set proper @code{$GOPATH} and run
-@code{make} (that will install all necessary libraries and build
-@emph{govpn-client}, @emph{govpn-server}, @emph{govpn-verifier} binaries:
+Get the tarball and run @code{make}.
+@emph{govpn-client}, @emph{govpn-server}, @emph{govpn-verifier}
+binaries will be build in the current directory.
@example
-% mkdir -p govpn/src
-% set -e
% wget http://www.cypherpunks.ru/govpn/download/govpn-2.3.tar.xz
% wget http://www.cypherpunks.ru/govpn/download/govpn-2.3.tar.xz.sig
% gpg --verify govpn-2.3.tar.xz.sig govpn-2.3.tar.xz
-% tar xfC govpn-2.3.tar.xz govpn/src
-% mv govpn/src/govpn-2.3 govpn/src/govpn
-% export GOPATH=$(pwd)/govpn:$GOPATH
-% gmake -C govpn/src/govpn all
+% tar xf govpn-2.3.tar.xz
+% make -C govpn-2.3 all
@end example
+There is @code{install} target respecting @code{DESTDIR}. It will
+install binaries, info-documentation and utilities.
+
@menu
* Prepared tarballs::
* Development source code::
@unnumbered News
@table @strong
+@item Release 3.2
+@itemize @bullet
+@item
+Deterministic building: dependent libraries source code commits are
+fixed in our makefiles.
+@item
+No Internet connection is needed for building the source code: all
+required libraries are included in release tarballs.
+@item
+FreeBSD Make compatibility. GNU Make is not necessary anymore.
+@end itemize
+
@item Release 3.1
@itemize @bullet
@item
@section Development source code
Development source contains the latest version of the code. It may be
-buggy. Also it does not contain compiled documentation and is not
-recommended for porters because of that.
+buggy. It does not contain compiled documentation and dependent
+libraries source code. Because of that it is not recommended for porters.
You can obtain it by cloning Git repository:
@code{git clone https://github.com/stargrave/govpn.git}.
+@code{src} directory has makefile that will download necessary dependent
+library versions.
Also there is mirror of dependent libraries for safety if their native
repositories will be unavailable (they are seldom updated):
@multitable @columnfractions .50 .50
@headitem Software/library @tab Mirror
@item @code{govpn} @tab @url{git://git.cypherpunks.ru/govpn.git}
-@item @code{golang.org/x/crypto/poly1305} @tab @url{git://git.cypherpunks.ru/crypto.git}
-@item @code{golang.org/x/crypto/salsa20} @tab @url{git://git.cypherpunks.ru/crypto.git}
-@item @code{golang.org/x/crypto/xtea} @tab @url{git://git.cypherpunks.ru/crypto.git}
-@item @code{golang.org/x/crypto/pbkdf2} @tab @url{git://git.cypherpunks.ru/crypto.git}
+@item @code{golang.org/x/crypto} @tab @url{git://git.cypherpunks.ru/crypto.git}
@item @code{github.com/agl/ed25519} @tab @url{git://git.cypherpunks.ru/ed25519.git}
@end multitable
+++ /dev/null
-.PHONY: govpn-client govpn-server govpn-verifier
-
-LDFLAGS=-X govpn.Version $(shell cat VERSION)
-
-all: govpn-client govpn-server govpn-verifier
-
-dependencies:
- [ "$(shell uname)" = FreeBSD ] || go get github.com/bigeagle/water
- go get golang.org/x/crypto/poly1305
- go get golang.org/x/crypto/salsa20
- go get golang.org/x/crypto/xtea
- go get golang.org/x/crypto/pbkdf2
- go get github.com/agl/ed25519
-
-govpn-client: dependencies
- go build -ldflags "$(LDFLAGS)" govpn/cmd/govpn-client
-
-govpn-server: dependencies
- go build -ldflags "$(LDFLAGS)" govpn/cmd/govpn-server
-
-govpn-verifier: dependencies
- go build -ldflags "$(LDFLAGS)" govpn/cmd/govpn-verifier
-
-bench: dependencies
- GOMAXPROC=2 go test -bench .
--- /dev/null
+github.com
+golang.org
--- /dev/null
+GIT ?= git
+
+all: golang.org/x/crypto github.com/agl/ed25519 github.com/bigeagle/water
+
+github.com/bigeagle/water:
+ mkdir -p github.com/bigeagle
+ $(GIT) clone https://github.com/bigeagle/water.git github.com/bigeagle/water
+ cd github.com/bigeagle/water && $(GIT) checkout --force 36aebfeb35da4f1f6a975726716c6fc563c5c495
+
+github.com/agl/ed25519:
+ mkdir -p github.com/agl
+ $(GIT) clone https://github.com/agl/ed25519.git github.com/agl/ed25519
+ cd github.com/agl/ed25519 && $(GIT) checkout --force d2b94fd789ea21d12fac1a4443dd3a3f79cda72c
+
+golang.org/x/crypto:
+ mkdir -p golang.org/x
+ $(GIT) clone https://go.googlesource.com/crypto golang.org/x/crypto
+ cd golang.org/x/crypto && $(GIT) checkout --force 24ffb5feb3312a39054178a4b0a4554fc2201248
tmp=$(mktemp -d)
release=$1
[ -n "$release" ]
+
git clone . $tmp/govpn-$release
+cat > $tmp/includes <<EOF
+github.com
+golang.org/x/crypto/AUTHORS
+golang.org/x/crypto/CONTRIBUTORS
+golang.org/x/crypto/LICENSE
+golang.org/x/crypto/PATENTS
+golang.org/x/crypto/README
+golang.org/x/crypto/curve25519
+golang.org/x/crypto/pbkdf2
+golang.org/x/crypto/poly1305
+golang.org/x/crypto/salsa20
+golang.org/x/crypto/xtea
+EOF
+tar cfCI - src $tmp/includes | tar xfC - $tmp/govpn-$release/src
+rm $tmp/includes
+
cd $tmp/govpn-$release
git checkout $release
-rm -fr .git
-find . -name .gitignore -delete
+
cat > doc/download.texi <<EOF
@node Prepared tarballs
@section Prepared tarballs
You can obtain releases source code prepared tarballs on
@url{http://www.cypherpunks.ru/govpn/}.
EOF
-rm utils/makedist.sh
make -C doc
-cd $tmp
+
+rm utils/makedist.sh
+find . -name .git -type d | xargs rm -fr
+find . -name .gitignore -delete
+
+cd ..
tar cvf govpn-"$release".tar govpn-"$release"
xz -9 govpn-"$release".tar
gpg --detach-sign --sign --local-user FFE2F4A1 govpn-"$release".tar.xz