#!/bin/sh # # Yoink # Execute this file to configure the build system. # PACKAGE="Yoink" VERSION="0.1" BUGREPORT="chaz@dogcows.com" showhelp() { cat <<"END" This script prepares Yoink for building on your system. Usage: ./configure [OPTION]... [VAR=VALUE]... Basic configuration: -h, --help display this help and exit --host=HOST cross-compile program to run on HOST --prefix=DIR base directory to install program --bindir=DIR directory to install executables --libdir=DIR directory to install libraries --datadir=DIR directory to install shared data files --mandir=DIR directory to install manual pages Program options: --enable-debug include debugging symbols and code paths --enable-double-precision use doubles instead of floats --enable-profile compile in gprof profiling instructions --enable-extra-warnings make the gcc compiler give more warnings --enable-link-sh try to decrease the number of direct dependencies --enable-clock_gettime use clock_gettime() instead of SDL --enable-threads use threads for concurrency where appropriate --enable-hotloading monitor assets and reload them when they change --with-gtk use gtk2 modal dialogs --with-qt4 use qt4 modal dialogs; overridden by --with-gtk END } . "build/functions.sh" # # Perform a quick sanity check. # test -f configure -a -f Makefile || die <<"END" You must `cd' to the project root directory where the Makefile resides. END # # Define some default values. # CC="" CXX="" AR="" RANLIB="" CFLAGS="-g -O2" CXXFLAGS="$CFLAGS" LDFLAGS="" LIBS="" prefix='/usr/local' bindir='$prefix/bin' libdir='$prefix/lib' datadir='$prefix/share/yoink' mandir='$prefix/share/man' host=$(./build/config.guess) althost=$(./build/config.sub $host) cross_compile="no" # # Parse the command-line options. # for opt in "$@" do case $opt in -h|--help) showhelp exit 0 ;; --host=*) host=$(parse_argument host $opt) cross_compile="yes" ;; --prefix=*) prefix=$(parse_argument prefix $opt) ;; --bindir=*) bindir=$(parse_argument bindir $opt) ;; --libdir=*) libdir=$(parse_argument libdir $opt) ;; --datadir=*) datadir=$(parse_argument datadir $opt) ;; --mandir=*) mandir=$(parse_argument mandir $opt) ;; --enable-debug) cflags="$cflags -O0 -Wall -Wno-uninitialized" define "DEBUG" ;; --enable-double-precision) define "USE_DOUBLE_PRECISION" ;; --enable-profile) cflags="$cflags -pg" define "PROFILING_ENABLED" ;; --enable-extra-warnings) cflags="$cflags -Wextra -Wno-unused-parameter" ;; --enable-link-sh) link_sh=yes ;; --enable-clock_gettime) clock_gettime=yes ;; --enable-threads) define "USE_THREADS" ;; --enable-hotloading) define "USE_HOTLOADING" ;; --with-gtk) gtk=yes ;; --with-qt4) qt4=yes ;; *) if echo "$opt" | grep -q '^[A-Za-z0-9_]*=.*' then export "$opt" else echo "warning: unknown option: $opt" fi ;; esac done # # Evaluate any dependent paths. # eval bindir="$bindir" eval datadir="$datadir" eval libdir="$libdir" eval mandir="$mandir" is_defined "DEBUG" || define "NDEBUG" export PKG_CONFIG_PATH="$libdir/pkgconfig:$PKG_CONFIG_PATH" define_string "YOINK_DATADIR" "$datadir" # # Determine the target platform. # case $host in *mingw32*) HOST=win32 ;; *netbsd*) HOST=netbsd ;; esac # # Define the check functions. # # Run a command and return its exit code. If the third argument is given, # stdin will be read and written to the specified file before the command # is executed. If the command creates any files inside the current # directory, they will be removed automatically. # $1 The command to run. # $2 The arguments to be passed to the command. # $3 Optional filename where stdin will be written. check_run_command() { tmpdir=$(mktemp -d "tmp-XXXXXXXX") || die "could not create temp directory" cd $tmpdir || die "could not enter temp directory" if test "x$3" != x then while read line do echo $line done >$3 fi saved_ifs=$IFS IFS=: for path in $PATH do if test -x "$path/$1" then eval "$1 $2" 2>&1 >/dev/null exit_code=$? cd .. rm -rf $tmpdir IFS=$saved_ifs return $exit_code fi done cd .. rm -rf $tmpdir IFS=$saved_ifs return 1 } # # Do some common checks. # if test "x$cross_compile" = xno then # If we are not cross-compiling, we also want to consider tools without # host prefixes. extra_cc="gcc cc" extra_cxx="g++ c++" extra_ar="ar" extra_ranlib="ranlib" extra_windres="windres" fi for exe in $CC $host-gcc $host-cc $althost-gcc $althost-cc $extra_cc do if check_run_command "$exe" "test.c" "test.c" <<"END" #include int main() { printf("Hello world!\n"); return 0; } END then CC="$exe" break fi done for exe in $CXX $host-g++ $host-c++ $althost-g++ $althost-c++ $extra_cxx do if check_run_command "$exe" "test.cpp" "test.cpp" <<"END" #include int main() { std::cout << "Hello world!" << std::endl; return 0; } END then CXX="$exe" break fi done for exe in $AR $host-ar $althost-ar $extra_ar do if check_run_command "$exe" "--version" then AR="$exe" break fi done for exe in $RANLIB $host-ranlib $althost-ranlib $extra_ranlib do if check_run_command "$exe" "--version" then RANLIB="$exe" break fi done if test x$HOST = xwin32 then for exe in $WINDRES $host-windres $althost-windres $extra_windres do if check_run_command "$exe" "--version" then WINDRES="$exe" break fi done fi if test "x$CC" = x -o "x$CXX" = x -o "x$AR" = x -o "x$RANLIB" = x then die <config.mk <