|
- #!/bin/sh
-
- # Copyright (C) 2008 Jonathan Moore Liles #
- # #
- # This program is free software; you can redistribute it and/or modify it #
- # under the terms of the GNU General Public License as published by the #
- # Free Software Foundation; either version 2 of the License, or (at your #
- # option) any later version. #
- # #
- # This program is distributed in the hope that it will be useful, but WITHOUT #
- # ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or #
- # FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for #
- # more details. #
- # #
- # You should have received a copy of the GNU General Public License along #
- # with This program; see the file COPYING. If not,write to the Free Software #
- # Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. #
- #
-
- . 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" > .config
-
- 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' >> .config
- UPDATE=yes;
- fi
- fi
-
- if [ $HELP != yes ] && [ $UPDATE != yes ]
- then
- if ! ( [ -t 0 ] && [ -t 1 ] )
- then
- fatal "not a terminal!"
- 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}"
-
- eval "${2}='${A:-$D}'"
- }
-
- ok ()
- {
- echo -e '\r'`tput cuf 30`"$BOLD${GREEN}ok${SGR0} ${*:+${BOLD}${BLACK}($*)${SGR0}}"
- }
-
- failed ()
- {
- echo "$BOLD${RED}failed!${SGR0}" > /dev/stderr
- rm -f .config
- }
-
- using ()
- {
- [ "`eval echo \\$USE_$1`" = yes ]
-
- return $?
- }
-
- upcase ()
- {
- echo "$*" | tr '[[:lower:]]' '[[:upper:]]'
- }
-
- extract_options ()
- {
- local line name value
-
- if [ -f .config ]
- 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
- } < .config
- 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}$*"
- }
-
- info ()
- {
- echo "${BOLD}${CYAN}--- ${SGR0}$*"
- }
-
- begin_options ()
- {
- # get the old values
- extract_options
-
- if [ $HELP = yes ]
- then
- echo
- warn "This is a ${BOLD}non-configure${SGR0} script. Run without any arguments and you will be prompted"
- warn "with configuration choices. Alternatively, you may use the following autoconf style"
- warn "arguments for non-interactive configuration."
- echo
- echo " Available options:"
- echo
- else
- echo > .config
- append "# This file was automatically generated on `date`. Any changes may be lost!"
- append "## options"
-
- if [ $UPDATE = yes ]
- then
- info "Updating configuration"
- else
- info "Configuration required"
- fi
- fi
- }
-
- begin_tests ()
- {
- if [ $HELP = yes ]
- then
- echo
- exit 0;
- fi
-
- append "## libs"
- extract_options
- }
-
- append ()
- {
- echo "$1" >> .config
- }
-
- end ()
- {
- info "Configuration complete"
- touch .config
- }
-
- 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 | sed 's/,\\?--as-needed//g'`"
- append "${name}_CFLAGS=-DHAVE_${1} `pkg-config --cflags $3`"
-
- ok `pkg-config --modversion "$3"`
- return 0
- }
-
- _test_version ()
- {
- if [ $# = 6 ]
- then
- [ $1 -gt $4 ] && return 0
- [ $1 -eq $4 ] && [ $2 -gt $5 ] && return 0
- [ $1 -eq $4 ] && [ $2 -eq $5 ] && [ $3 -gt $6 ] && return 0
- [ $1 -eq $4 ] && [ $2 -eq $5 ] && [ $3 -eq $6 ] && return 0
- return 1
- elif [ $# = 4 ]
- then
- [ $1 -gt $3 ] && return 0
- [ $1 -eq $3 ] && [ $2 -eq $4 ] && return 0
- return 1
- fi
- }
-
- # return true if #1 is greater than or equal to $2
- test_version ()
- {
- local IFS
- IFS='.'
-
- _test_version $1 $2
- }
-
- 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 $1
- then
- failed
- fatal "The installed FLTK version ($FLTK_VERSION) is too old."
- else
- ok $FLTK_VERSION
- fi
-
- use=
-
- while [ $# -gt 1 ]
- do
- shift 1
- use="$use --use-$1"
- done
-
- append "FLTK_LIBS=`fltk-config $use --ldflags | sed 's/,\\?--as-needed//g'`"
- append "FLTK_CFLAGS=`fltk-config $use --cflags`"
- }
|