1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798 |
- #!/bin/sh
- #shellcheck disable=SC2090,SC2086,SC2089
- set -ef
- if [ "$1" = "help" ]; then
- echo "Usage: ./build.sh"
- echo " [no]debian - Defines whether a Debian package or a source archive is to be created"
- echo " [no]sourcearchive - Defines whether a souce archive is to be created"
- echo " libsodium|tweetnacl - Defines the NaCl library to be used"
- echo " By default, an attempt is made to build with libsodium."
- echo " If libsodium is not available, the bundled tweetnacl library is used."
- exit
- fi
- tar="tar"
- if [ -z "$cc" ]; then
- cc="cc"
- fi
- if [ "$(uname -s)" = "OpenBSD" ] || [ "$(uname -s)" = "FreeBSD" ] || [ "$(uname -s)" = "NetBSD" ]; then
- echo "Detected *BSD"
- tar="gtar"
- export CPATH="/usr/local/include:${CPATH}"
- elif [ "$(uname -s)" = "SunOS" ]; then
- echo "Detected SunOS"
- tar="gtar"
- CFLAGS="$CFLAGS -DSOLARIS -m64"
- LDFLAGS="$LDFLAGS -lnsl -lsocket"
- elif [ "$(uname -s)" = "Darwin" ]; then
- echo "Detected Mac OS X (Darwin)"
- CFLAGS="$CFLAGS -arch i686"
- LDFLAGS="$LDFLAGS -arch i686"
- fi
- VERSION=$(cat version)
- CFLAGS="$CFLAGS -O2"
- CFLAGS="$CFLAGS -Wall -Wextra -Wpedantic"
- ./clean.sh
- mkdir -p out
- if [ "$2" = "sourcearchive" ]; then
- echo Creating source archive...
- $tar --transform "s,^,quicktun-$VERSION/," --exclude "debian/data" -czf "out/quicktun-$VERSION.tgz" build.sh clean.sh deb src version
- fi
- mkdir -p obj tmp tmp/include
- export LIBRARY_PATH="/usr/local/lib/:${LIBRARY_PATH}"
- echo '#include <sodium.h>' > tmp/libsodiumtest.c
- if [ "$3" = "libsodium" ] || ([ -z "$3" ] && $cc -shared -lsodium tmp/libsodiumtest.c -o tmp/libsodiumtest 2>/dev/null); then
- echo Using shared libsodium.
- echo '#include <sodium.h>' > tmp/include/nacl.h
- export CPATH="./tmp/include/:${CPATH}"
- export CRYPTLIB="-lsodium"
- else
- echo Building TweetNaCl...
- echo 'The TweetNaCl cryptography library is not optimized for performance. Please install libsodium or libnacl before building QuickTun for best performance.'
- $cc $CFLAGS -c src/tweetnacl.c -o obj/tweetnacl.o
- $cc $CFLAGS -c src/randombytes.c -o obj/randombytes.o
- echo '#include <src/tweetnacl.h>' > tmp/include/nacl.h
- export CPATH="./tmp/include/:${CPATH}"
- export CRYPTLIB="obj/randombytes.o obj/tweetnacl.o"
- fi
- CFLAGS="$CFLAGS -DQT_VERSION=\"$VERSION\""
- echo Building combined binary...
- $cc $CFLAGS -c -DCOMBINED_BINARY src/proto.raw.c -o obj/proto.raw.o
- $cc $CFLAGS -c -DCOMBINED_BINARY src/proto.nacl0.c -o obj/proto.nacl0.o
- $cc $CFLAGS -c -DCOMBINED_BINARY src/proto.nacltai.c -o obj/proto.nacltai.o
- $cc $CFLAGS -c -DCOMBINED_BINARY src/proto.salty.c -o obj/proto.salty.o
- $cc $CFLAGS -c -DCOMBINED_BINARY src/run.combined.c -o obj/run.combined.o
- $cc $CFLAGS -c src/common.c -o obj/common.o
- $cc $CFLAGS -o out/quicktun.combined obj/common.o obj/run.combined.o obj/proto.raw.o obj/proto.nacl0.o obj/proto.nacltai.o obj/proto.salty.o $CRYPTLIB $LDFLAGS
- ln out/quicktun.combined out/quicktun
- echo Building single protocol binaries...
- $cc $CFLAGS -o out/quicktun.raw src/proto.raw.c $LDFLAGS
- $cc $CFLAGS -o out/quicktun.nacl0 src/proto.nacl0.c $CRYPTLIB $LDFLAGS
- $cc $CFLAGS -o out/quicktun.nacltai src/proto.nacltai.c $CRYPTLIB $LDFLAGS
- $cc $CFLAGS -o out/quicktun.salty src/proto.salty.c $CRYPTLIB $LDFLAGS
- $cc $CFLAGS -o out/quicktun.keypair src/keypair.c $CRYPTLIB $LDFLAGS
- if [ "$1" = "debian" ]; then
- echo Building debian binary...
- $cc $CFLAGS -c -DCOMBINED_BINARY -DDEBIAN_BINARY src/run.combined.c -o obj/run.debian.o
- $cc $CFLAGS -o out/quicktun.debian obj/common.o obj/run.debian.o obj/proto.raw.o obj/proto.nacl0.o obj/proto.nacltai.o obj/proto.salty.o $CRYPTLIB $LDFLAGS
- if [ -x /usr/bin/dpkg-deb ] && [ -x /usr/bin/fakeroot ]; then
- echo Building debian package...
- (
- cd deb
- ./build.sh
- )
- fi
- fi
|