#!/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`" }