mirror of
https://github.com/ElementsProject/lightning.git
synced 2024-11-19 18:11:28 +01:00
5518c7cba8
The v1.0.9 release of libsodium added crypto_aead_chacha20poly1305_ietf_NPUBBYTES which we use; before that it was ...IETF_NPUBBYTES. Since that release was in April 2016, it seems fair to simply check for ancient versions and use the internal one if found. The alternative would be to use the older names (which are still in the header), but given we've never tested with such old versions, this seems safer. Reported-by: Zoltán Gálli <@gallizoltan> Signed-off-by: Christian Decker <decker.christian@gmail.com>
208 lines
5.9 KiB
Bash
Executable File
208 lines
5.9 KiB
Bash
Executable File
#! /bin/sh
|
|
# Simple configure script for c-lightning.
|
|
|
|
set -e
|
|
|
|
# Default values, loaded from environment or canned.
|
|
PREFIX=${PREFIX:-/usr/local}
|
|
CC=${CC:-cc}
|
|
CWARNFLAGS=${CWARNFLAGS:--Werror -Wall -Wundef -Wmissing-prototypes -Wmissing-declarations -Wstrict-prototypes -Wold-style-definition}
|
|
CDEBUGFLAGS=${CDEBUGFLAGS:--std=gnu11 -g -fstack-protector}
|
|
DEVELOPER=${DEVELOPER:-0}
|
|
EXPERIMENTAL_FEATURES=${EXPERIMENTAL_FEATURES:-0}
|
|
COMPAT=${COMPAT:-1}
|
|
STATIC=${STATIC:-0}
|
|
CONFIGURATOR_CC=${CONFIGURATOR_CC:-$CC}
|
|
ASAN=${ASAN:-0}
|
|
|
|
CONFIGURATOR=ccan/tools/configurator/configurator
|
|
CONFIG_VAR_FILE=config.vars
|
|
CONFIG_HEADER=ccan/config.h
|
|
|
|
usage_with_default()
|
|
{
|
|
if [ $# = 4 ]; then
|
|
if [ "$2" = 1 ]; then
|
|
DEF=$3
|
|
else
|
|
DEF=$4
|
|
fi
|
|
else
|
|
DEF=$2
|
|
fi
|
|
echo " $1 (default $DEF)"
|
|
}
|
|
|
|
usage()
|
|
{
|
|
echo "Usage: ./configure [--reconfigure] [setting=value] [options]"
|
|
echo "If --reconfigure is specified, $CONFIG_VAR_FILE will set defaults if it exists."
|
|
echo "Default settings:"
|
|
usage_with_default "CC" "$CC"
|
|
usage_with_default "CWARNFLAGS" "$CWARNFLAGS"
|
|
usage_with_default "CDEBUGFLAGS" "$CDEBUGFLAGS"
|
|
usage_with_default "CONFIGURATOR_CC" "$CONFIGURATOR_CC"
|
|
usage_with_default "PYTEST" "$PYTEST"
|
|
echo " To override compile line for configurator itself"
|
|
|
|
echo "Options include:"
|
|
usage_with_default "--prefix=" "$PREFIX"
|
|
echo " Prefix for make install"
|
|
usage_with_default "--enable/disable-developer" "$DEVELOPER" "enable" "disable"
|
|
echo " Developer mode, good for testing"
|
|
usage_with_default "--enable/disable-experimental-features" "$EXPERIMENTAL_FEATURES" "enable" "disable"
|
|
echo " Developer mode, good for testing"
|
|
usage_with_default "--enable/disable-compat" "$COMPAT" "enable" "disable"
|
|
echo " Compatibility mode, good to disable to see if your software breaks"
|
|
usage_with_default "--enable/disable-valgrind" "(autodetect)"
|
|
echo " Valgrind binary to use for tests"
|
|
usage_with_default "--enable/disable-static" "$STATIC" "enable" "disable"
|
|
echo " Static link binary"
|
|
usage_with_default "--enable/disable-address-sanitizer" "$ASAN" "enable" "disable"
|
|
echo " Compile with address-sanitizer"
|
|
exit 1
|
|
}
|
|
|
|
add_var()
|
|
{
|
|
if [ -n "$2" ]; then
|
|
echo "Setting $1... $2"
|
|
else
|
|
echo "$1 not found"
|
|
fi
|
|
echo "$1=$2" >> $CONFIG_VAR_FILE
|
|
[ -z "$3" ] || echo "#define $1 $2" >> "$3"
|
|
}
|
|
|
|
find_pytest()
|
|
{
|
|
PYTEST_BINS="pytest-3 pytest3 pytest py.test"
|
|
for p in $PYTEST_BINS; do
|
|
if [ "$(which $p)" != "" ] ; then
|
|
"$p" --version 2>&1 | grep -q "python3" || continue
|
|
echo "$p"
|
|
return
|
|
fi
|
|
done
|
|
|
|
PYTHON_BINS="python python3"
|
|
for p in $PYTHON_BINS; do
|
|
if [ "$(which $p)" != "" ] ; then
|
|
$p --version 2>&1 | grep -q "Python 3." || continue
|
|
if $p -c "import pytest" 2>/dev/null ; then
|
|
echo "$p -m pytest"
|
|
return
|
|
fi
|
|
fi
|
|
done
|
|
}
|
|
|
|
PYTEST=${PYTEST:-`find_pytest`}
|
|
|
|
for opt in "$@"; do
|
|
case "$opt" in
|
|
--reconfigure)
|
|
# Escape spaces for things like CWARNFLAGS.
|
|
sed 's/=\(.*\)$/="\1"/' $CONFIG_VAR_FILE > $CONFIG_VAR_FILE.$$
|
|
. ./$CONFIG_VAR_FILE.$$
|
|
;;
|
|
CC=*) CC="${opt#CC=}";;
|
|
CONFIGURATOR_CC=*) CONFIGURATOR_CC="${opt#CONFIGURATOR_CC=}";;
|
|
CWARNFLAGS=*) CWARNFLAGS="${opt#CWARNFLAGS=}";;
|
|
CDEBUGFLAGS=*) CDEBUGFLAGS="${opt#CDEBUGFLAGS=}";;
|
|
PYTEST=*) PYTEST="${opt#PYTEST=}";;
|
|
--prefix=*) PREFIX="${opt#--prefix=}";;
|
|
--enable-developer) DEVELOPER=1;;
|
|
--disable-developer) DEVELOPER=0;;
|
|
--enable-experimental-features) EXPERIMENTAL_FEATURES=1;;
|
|
--disable-experimental-features) EXPERIMENTAL_FEATURES=0;;
|
|
--enable-compat) COMPAT=1;;
|
|
--disable-compat) COMPAT=0;;
|
|
--enable-valgrind) VALGRIND=1;;
|
|
--disable-valgrind) VALGRIND=0;;
|
|
--enable-static) STATIC=1;;
|
|
--disable-static) STATIC=0;;
|
|
--enable-address-sanitizer) ASAN=1;;
|
|
--disable-address-sanitizer) ASAN=0;;
|
|
--help|-h) usage;;
|
|
*)
|
|
echo "Unknown option '$opt'" >&2
|
|
usage
|
|
;;
|
|
esac
|
|
done
|
|
|
|
echo -n "Compiling $CONFIGURATOR..."
|
|
$CC $CWARNFLAGS $CDEBUGFLAGS -o $CONFIGURATOR $CONFIGURATOR.c
|
|
echo "done"
|
|
|
|
if [ -z "$VALGRIND" ]; then
|
|
if valgrind -q --error-exitcode=7 --track-origins=yes --leak-check=full --show-reachable=yes --errors-for-leak-kinds=all $CONFIGURATOR --help >/dev/null 2>&1; then
|
|
VALGRIND=1
|
|
else
|
|
VALGRIND=0
|
|
fi
|
|
fi
|
|
|
|
if [ "$ASAN" = "1" ]; then
|
|
if [ "$CC" = "clang" ]; then
|
|
echo "Address sanitizer (ASAN) is currently only supported with gcc"
|
|
exit 1
|
|
fi
|
|
if [ "$VALGRIND" = "1" ]; then
|
|
echo "Address sanitizer (ASAN) and valgrind cannot be enabled at the same time"
|
|
exit 1
|
|
fi
|
|
fi
|
|
|
|
rm -f $CONFIG_VAR_FILE.$$
|
|
$CONFIGURATOR --extra-tests --autotools-style --var-file=$CONFIG_VAR_FILE.$$ --header-file=$CONFIG_HEADER --configurator-cc="$CONFIGURATOR_CC" "$CC" $CWARNFLAGS $CDEBUGFLAGS <<EOF
|
|
var=HAVE_GOOD_LIBSODIUM
|
|
desc=libsodium with IETF chacha20 variants
|
|
style=DEFINES_EVERYTHING|EXECUTE|MAY_NOT_COMPILE
|
|
link=-lsodium
|
|
code=
|
|
#include <sodium.h>
|
|
#include <stdio.h>
|
|
|
|
int main(void)
|
|
{
|
|
printf("%p\n", crypto_aead_chacha20poly1305_ietf_encrypt);
|
|
printf("%d\n", crypto_aead_chacha20poly1305_ietf_NPUBBYTES);
|
|
exit(0);
|
|
}
|
|
/*END*/
|
|
var=HAVE_SYSTEM_LIBBASE58
|
|
desc=libbase58
|
|
style=DEFINES_EVERYTHING|EXECUTE|MAY_NOT_COMPILE
|
|
link=-lbase58
|
|
code=
|
|
#include <libbase58.h>
|
|
#include <stdio.h>
|
|
|
|
int main(void)
|
|
{
|
|
printf("%p\n", b58check);
|
|
exit(0);
|
|
}
|
|
/*END*/
|
|
EOF
|
|
mv $CONFIG_VAR_FILE.$$ $CONFIG_VAR_FILE
|
|
|
|
add_var PREFIX "$PREFIX"
|
|
add_var CC "$CC"
|
|
add_var CONFIGURATOR_CC "$CONFIGURATOR_CC"
|
|
add_var CWARNFLAGS "$CWARNFLAGS"
|
|
add_var CDEBUGFLAGS "$CDEBUGFLAGS"
|
|
add_var VALGRIND "$VALGRIND"
|
|
add_var DEVELOPER "$DEVELOPER" $CONFIG_HEADER
|
|
add_var EXPERIMENTAL_FEATURES "$EXPERIMENTAL_FEATURES" $CONFIG_HEADER
|
|
add_var COMPAT "$COMPAT" $CONFIG_HEADER
|
|
add_var PYTEST "$PYTEST"
|
|
add_var STATIC "$STATIC"
|
|
add_var ASAN "$ASAN"
|
|
|
|
# Hack to avoid sha256 name clash with libwally: will be fixed when that
|
|
# becomes a standalone shared lib.
|
|
echo '#include "ccan_compat.h"' >> $CONFIG_HEADER
|