non/scripts/config-funcs

300 lines
5.2 KiB
Bash

#!/bin/sh
#
# Copyright (C) 2008 Jonathan Moore Liles
# This file is licensed under version 2 of the GPL.
. scripts/colors
# support functions for 'configure' scripts.
fatal ()
{
echo "$BOLD$RED$*$SGR0" > /dev/stderr
exit 255
}
UPDATE=no
HELP=no
split ()
{
while [ $# -gt 0 ]
do
echo $1
shift 1
done
}
if [ $# -gt 0 ]
then
case "$1" in
--update)
UPDATE=yes
shift 1
;;
--help)
HELP=yes
shift 1
;;
*)
# fatal "This is not an autoconf script. Run it without any options and you will be prompted."
;;
esac
if [ $# -gt 0 ]
then
echo "## options" > make.conf
split "$@" | sed '
s/--\(enable\|disable\)-\([^ =]\+\)/--\1-\U\2/g;
s/--enable-\([^ =]\+\)=\(.*\)/USE_\1=\2/g;
s/--enable-\([^ =]\+\)/USE_\1=yes/g;
s/--disable-\([^ =]\+\)/USE_\1=no/g;
s/--\([^ =]\+\)/\1/g;
' | sed -n '/^[^ =]\+=./p' >> make.conf
UPDATE=yes;
fi
fi
ask ()
{
local A D O
D="`eval echo \\$$2`"
D=${D:-$3}
if [ $HELP = yes ]
then
if [ "$3" = yes ] || [ "$3" = no ]
then
O=`echo -n "$2" | sed s/^USE_/--enable-/ | tr '[[:upper:]]' '[[:lower:]]'`
else
O=`echo -n "--$2" | tr '[[:upper:]]' '[[:lower:]]'`
fi
printf " ${BOLD}${GREEN}%-15s${SGR0}\t%-40s (currently: ${BOLD}%s${SGR0})\n" "$O" "$1" "$D"
return
fi
echo -n "$BLACK$BOLD::$SGR0 ${1}? [$BOLD${D}$SGR0] "
if [ $UPDATE = yes ]
then
A="$D"
echo
else
read A
A=${A:-$D}
fi
if [ "$3" = yes ] || [ "$3" = no ]
then
case "$A" in
no | n | N) A=no ;;
yes | y | Y) A=yes ;;
* ) fatal "Invalid response. Must be 'yes' or 'no'" ;;
esac
fi
append "${2}=${A:-$D}"
}
ok ()
{
echo "$BOLD${GREEN}ok${SGR0}"
}
failed ()
{
echo "$BOLD${RED}failed!${SGR0}" > /dev/stderr
rm -f make.conf
}
using ()
{
[ "`eval echo \\$USE_$1`" = yes ]
return $?
}
upcase ()
{
echo "$*" | tr '[[:lower:]]' '[[:upper:]]'
}
extract_options ()
{
local line name value
if [ -f make.conf ]
then
{
while read line
do
[ "$line" = "## options" ] && break
done
while read line
do
if [ "$line" = "## libs" ]
then
break
else
name=${line%=*}
value=${line#*=}
eval "$name='$value'"
fi
done
} < make.conf
fi
}
begin ()
{
echo -n "Checking sanity..."
require_command pkg-config pkg-config > /dev/null
require_command sed sed > /dev/null
ok
}
warn ()
{
echo " ${BOLD}${YELLOW}* ${SGR0}$*"
}
begin_options ()
{
# get the old values
extract_options
if [ $HELP = yes ]
then
echo
warn "This is not an autoconf script! Run without any arguments and you will be prompted."
warn "Alternatively, you may use the following autoconf style arguments for"
warn "non-interactive configuration."
echo
echo " Available options:"
echo
else
echo > make.conf
append "# This file was automatically generated on `date`. Any changes may be lost!"
append "## options"
if [ $UPDATE = yes ]
then
echo "--- Updating configuration ---"
else
echo "--- Configuration required ---"
fi
fi
}
begin_tests ()
{
[ $HELP = yes ] && exit 0
append "## libs"
extract_options
}
append ()
{
echo "$1" >> make.conf
}
end ()
{
echo "--- Configuration complete ---"
touch make.conf
}
require_command ()
{
echo -n "Checking for ${BOLD}$1${SGR0}..."
if ! [ -x "`which $2`" ]
then
failed
fatal "Command $1 not found."
else
ok
fi
}
require_package ()
{
local name
echo -n "Checking for $BOLD$1$SGR0..."
if ! pkg-config --exists $3
then
failed
fatal "Required package $1 doesn't appear to be installed."
elif ! pkg-config --atleast-version $2 $3
then
failed
fatal "The installed version of $1 (`pkg-config --mod-version $3`) is too old."
fi
name="`upcase \"$1\"`"
append "${name}_LIBS=`pkg-config --libs $3`"
append "${name}_CFLAGS=-DHAVE_${1} `pkg-config --cflags $3`"
ok
return 0
}
_test_version ()
{
[ $1 $4 $5 ] && [ $2 $4 $6 ] && [ $3 $4 $7 ]
}
test_version ()
{
local IFS
IFS='.'
if [ $2 != -ge ] && [ $2 != -le ]
then
fatal "Syntax error"
fi
_test_version $1 $2 $3
}
version_of ()
{
echo `pkg-config --modversion $1`
}
require_FLTK ()
{
local use
echo -n "Checking for ${BOLD}FLTK${SGR0}..."
FLTK_VERSION=`fltk-config --version`
if ! test_version $FLTK_VERSION -ge $1
then
failed
fatal "The installed FLTK version ($FLTK_VERSION) is too old."
else
ok
fi
use=
while [ $# -gt 1 ]
do
shift 1
use="$use --use-$1"
done
append "FLTK_LIBS=`fltk-config $use --ldflags`"
append "FLTK_CFLAGS=`fltk-config $use --cflags`"
}