#!/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 ok } warn () { echo "${BOLD}${YELLOW}* ${SGR0}$*" } begin_options () { # get the old values extract_options if [ $HELP = yes ] then 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`" }