diff --git a/.gitignore b/.gitignore index 1a1271295..90e72da46 100644 --- a/.gitignore +++ b/.gitignore @@ -18,6 +18,7 @@ tools/check-bolt coverage ccan/config.h __pycache__ +config.vars # Ignore some generated binaries lightningd/test/run-channel @@ -46,4 +47,5 @@ test/test_protocol test/test_sphinx tests/.pytest.restart gossip_store + .pytest_cache diff --git a/configure b/configure new file mode 100755 index 000000000..047196f57 --- /dev/null +++ b/configure @@ -0,0 +1,99 @@ +#! /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} +COMPAT=${COMPAT:-1} +CONFIGURATOR_CC=${CONFIGURATOR_CC:-$CC} + +CONFIGURATOR=ccan/tools/configurator/configurator +CONFIG_VAR_FILE=config.vars +CONFIG_HEADER=ccan/config.h + +usage_with_default() +{ + if [ $# = 4 ]; then + if [ $2 ]; then + DEF=$4 + else + DEF=$3 + 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" + 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-compat" "$COMPAT" "enable" "disable" + echo " Compatibility mode, good to disable to see if your software breaks" + exit 1 +} + +add_var() +{ + echo "Setting $1... $2" + echo "$1=$2" >> $CONFIG_VAR_FILE + [ -z "$3" ] || echo "#define $1 $2" >> "$3" +} + +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=}";; + --prefix=*) PREFIX="${opt#--prefix=}";; + --enable-developer) DEVELOPER=1;; + --disable-developer) DEVELOPER=0;; + --enable-compat) COMPAT=1;; + --disable-compat) COMPAT=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" + +rm -f $CONFIG_VAR_FILE.$$ +$CONFIGURATOR --autotools-style --var-file=$CONFIG_VAR_FILE.$$ --header-file=$CONFIG_HEADER --configurator-cc="$CONFIGURATOR_CC" "$CC" $CWARNFLAGS $CDEBUGFLAGS +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 DEVELOPER "$DEVELOPER" $CONFIG_HEADER +add_var COMPAT "$COMPAT" $CONFIG_HEADER