#!/bin/sh # Copyright (C) 2006-2007 G.P. Halkes # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License version 3, as # published by the Free Software Foundation. # # 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. If not, see . # Set zsh to emulate sh (otherwise all kinds of eval's wont work) [ -n "${ZSH_VERSION}" ] && emulate sh #============================== # Functions #============================== error() { echo "$@" exit 1 } not() { if "$@" ; then false else true fi } check() { if not "$@" ; then error "Error executing $@. Aborting." fi } check_message() { printf "$@" echo "----------------------------------">> config.log echo "$@" >> config.log } check_message_result() { echo "$@" echo "$@" >> config.log } clean() { rm -rf "$@" >/dev/null 2>&1 } test_make() { echo "Running '${MAKE} -f .Makefile $@'" >> config.log "${MAKE}" -f .Makefile "$@" } test_compile() { clean .config.o check_message "Checking for $1... " shift if test_make "$@" .config.o >> config.log 2>&1 ; then check_message_result "yes" true else check_message_result "no" false fi } test_link() { clean .config check_message "Checking for $1... " shift if test_make "$@" .config >> config.log 2>&1 ; then check_message_result "yes" true else check_message_result "no" false fi } test_install() { clean .foo check_message "Checking for working install '$@'... " if test_make "INSTALL=$@" "install" >> config.log 2>&1 ; then check_message_result "yes" true else check_message_result "no" false fi } add_replace_settings() { for SETTING do NAME=`echo "${SETTING}" | sed 's/=.*/=/g'` if grep -q "^${NAME}" Makefile.in ; then ESCAPED_SETTING=`echo "${SETTING}" | sed 's/\//\\\\\//g'` echo "s/^${NAME}.*/${ESCAPED_SETTING}/g" else echo "/^\\.POSIX:/a\\ ${SETTING}" fi done } replace_default() { if [ -n "$2" ] ; then ESCAPED=`echo "$2" | sed 's/\//\\\\\//g'` echo "s/^$1=.*/$1=${ESCAPED}/g" fi } insert() { [ -n "$2" ] && echo "/^\\.POSIX:/a\\ $1=$2" } create_makefile() { if [ -n "${TEST_INSTALL}" ] ; then [ -n "${INSTALL}" ] && TEST_INSTALL="${INSTALL}" unset INSTALL for _INSTALL in ${TEST_INSTALL} do test_install "${_INSTALL}" && INSTALL="${_INSTALL}" && break done if [ -z "${INSTALL}" ] ; then check_message_result "!! No working install program found. The install target will not work." fi fi echo "----------------------------------">> config.log check_message_result "Creating Makefile" { replace_default prefix "${PREFIX}" replace_default mandir "${MANDIR}" replace_default CFLAGS "${CFLAGS}" [ -n "${TEST_INSTALL}" ] && replace_default INSTALL "${INSTALL}" echo '/^\.POSIX:/a\ # Inserted settings' insert CC "${CC}" insert LDFLAGS "${LDFLAGS}" insert LDLIBS "${LDLIBS}" sed_lines "$@" } > .sedscript cat Makefile.in | sed -f .sedscript > Makefile clean .sedscript .config.c .config.o .config .Makefile .foo exit 0 } #============================== # Setup #============================== unset LINKRULE COMPILERULE USERRULES TEST_INSTALL . ./config.pkg for _switch in ${SWITCHES} do _name=`echo "${_switch}" | sed -e 's/^[+-]//' -e 's/-/_/g'` _pm=`echo "${_switch}" | sed 's/[^+-].*//'` if [ "${_pm}" = "+" ] ; then eval with_${_name}="yes" else eval with_${_name}="no" fi done _SWITCHES=`echo " ${SWITCHES}" | sed 's/[[:space:]][+-]/ /g'` for PARAM do case "${PARAM}" in -h|--help) cat <] [=] --prefix= Prefix for installation [/usr/local] --mandir= Set manual page directory [prefix/share/man] Environment variables that tune build: MAKE Make program to use [make] CC C-compiler to use (default determined by make) CFLAGS C-compiler flags to use [-O2] LDFLAGS Linker flags to use (default determined by make) LDLIBS Extra libraries to link PREFIX See --prefix= EOF [ -n "${TEST_INSTALL}" ] && echo " INSTALL The install program to use" [ -n "${USER_HELP}" ] && { echo ; echo "Package specific settings" ; echo "${USER_HELP}" ; } cat < config.log echo "-- configure called with $0 $@" >> config.log [ -z "${LINKRULE}" ] && LINKRULE='$(CC) $(CFLAGS) $(LDFLAGS) -o .config .config.o $(LDLIBS) $(TESTLIBS)' [ -z "${COMPILERULE}" ] && COMPILERULE='$(CC) $(CFLAGS) $(TESTFLAGS) -c -o .config.o .config.c' unset SETTINGS [ -z "${LDLIBS}" ] || SETTINGS="LDLIBS=${LDLIBS} ${SETTINGS}" [ -z "${LDFLAGS}" ] || SETTINGS="LDFLAGS=${LDFLAGS} ${SETTINGS}" [ -z "${CFLAGS}" ] || SETTINGS="CFLAGS=${CFLAGS} ${SETTINGS}" [ -z "${CC}" ] || SETTINGS="CC=${CC} ${SETTINGS}" [ -n "${SETTINGS}" ] && check_message_result "Using settings ${SETTINGS}" clean .config .config.o .config.c config.log .Makefile .sedscript { echo ".POSIX:" [ -z "${CC}" ] || echo "CC=${CC}" [ -z "${LDFLAGS}" ] || echo "LDFLAGS=${LDFLAGS}" [ -z "${LDLIBS}" ] || echo "LDLIBS=${LDLIBS}" if [ -n "${CFLAGS}" ] ; then echo "CFLAGS=${CFLAGS}" else echo "CFLAGS=-O2" fi echo "${USERRULES}" if [ -n "${TEST_INSTALL}" ] ; then cat < .Makefile if [ -z "${MAKE}" ] ; then MAKE=make fi cat > .config.c <