mirror of
https://github.com/scummvm/scummvm-tools.git
synced 2026-05-21 05:40:44 +00:00
2041 lines
52 KiB
Bash
Executable File
2041 lines
52 KiB
Bash
Executable File
#!/bin/sh
|
||
#
|
||
# configure -- custom configure script for the ScummVM tools.
|
||
#
|
||
# ScummVM Tools is the legal property of its developers, whose names
|
||
# are too numerous to list here. Please refer to the COPYRIGHT
|
||
# file distributed with this source distribution.
|
||
#
|
||
# 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 3 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. If not, see <http://www.gnu.org/licenses/>.
|
||
|
||
|
||
# Save the current environment variables for next runs
|
||
SAVED_CONFIGFLAGS=$@
|
||
SAVED_LDFLAGS=$LDFLAGS
|
||
SAVED_PKG_CONFIG_LIBDIR=${PKG_CONFIG_LIBDIR:-unset}
|
||
SAVED_CXX=$CXX
|
||
SAVED_CXXFLAGS=$CXXFLAGS
|
||
SAVED_CPPFLAGS=$CPPFLAGS
|
||
SAVED_ASFLAGS=$ASFLAGS
|
||
SAVED_WINDRESFLAGS=$WINDRESFLAGS
|
||
|
||
# Use environment vars if set
|
||
CXXFLAGS="$CXXFLAGS $CPPFLAGS"
|
||
|
||
# Backslashes into forward slashes:
|
||
# The following OS/2 specific code is performed to deal with handling of backslashes by ksh.
|
||
# Borrowed from the Sane configure script
|
||
|
||
if test "$ac_emxsupport" != "no" -a "$ac_emxsupport" != "NO"; then
|
||
ac_save_IFS="$IFS"
|
||
IFS="\\"
|
||
ac_TEMP_PATH=
|
||
for ac_dir in $PATH; do
|
||
IFS=$ac_save_IFS
|
||
if test -z "$ac_TEMP_PATH"; then
|
||
ac_TEMP_PATH="$ac_dir"
|
||
else
|
||
ac_TEMP_PATH="$ac_TEMP_PATH/$ac_dir"
|
||
fi
|
||
done
|
||
PATH="$ac_TEMP_PATH"
|
||
export PATH
|
||
unset ac_TEMP_PATH
|
||
fi
|
||
|
||
set_var() {
|
||
eval ${1}='${2}'
|
||
}
|
||
|
||
get_var() {
|
||
eval echo \$${1}
|
||
}
|
||
|
||
_srcdir=`dirname $0`
|
||
|
||
#
|
||
# Default settings
|
||
#
|
||
# Default lib behavior yes/no/auto
|
||
_vorbis=auto
|
||
_tremor=auto
|
||
_flac=auto
|
||
_mad=auto
|
||
_zlib=auto
|
||
_png=auto
|
||
_freetype2=auto
|
||
_wxwidgets=auto
|
||
_iconv=auto
|
||
_boost=auto
|
||
_endian=unknown
|
||
_need_memalign=yes
|
||
# Default option behavior yes/no
|
||
_debug_build=auto
|
||
_release_build=auto
|
||
_verbose_build=no
|
||
_enable_prof=no
|
||
# Default commands
|
||
_ranlib=ranlib
|
||
_strip=strip
|
||
_ar="ar cru"
|
||
_as="as"
|
||
_windres=windres
|
||
_pkgconfig=pkg-config
|
||
_wxconfig=wx-config
|
||
_wxpath="$PATH"
|
||
_prefix=/usr/local
|
||
_wxincludes=""
|
||
_wxlibs=""
|
||
_wxstaticlibs=""
|
||
_freetypeconfig=freetype-config
|
||
_freetype_found="false"
|
||
_freetypepath="$PATH"
|
||
_staticlibpath=""
|
||
_xcodetoolspath=""
|
||
_amigaospath="install"
|
||
_morphospath="PROGDIR:"
|
||
# For cross compiling
|
||
_host=""
|
||
_host_cpu=""
|
||
_host_vendor=""
|
||
_host_os=""
|
||
_host_alias=""
|
||
|
||
# Use temp files in the build directory
|
||
TMPO=./scummvm-tools-conf
|
||
TMPC=${TMPO}.cpp
|
||
TMPLOG=config.log
|
||
|
||
cc_check_no_clean() {
|
||
echo >> "$TMPLOG"
|
||
cat "$TMPC" >> "$TMPLOG"
|
||
echo >> "$TMPLOG"
|
||
echo "$CXX $LDFLAGS $CXXFLAGS $TMPC -o $TMPO$HOSTEXEEXT $@" >> "$TMPLOG"
|
||
rm -f "$TMPO$HOSTEXEEXT"
|
||
( $CXX $LDFLAGS $CXXFLAGS "$TMPC" -o "$TMPO$HOSTEXEEXT" "$@" ) >> "$TMPLOG" 2>&1
|
||
TMPR="$?"
|
||
echo "return code: $TMPR" >> "$TMPLOG"
|
||
echo >> "$TMPLOG"
|
||
return "$TMPR"
|
||
}
|
||
|
||
cc_check_clean() {
|
||
rm -rf $TMPC $TMPO $TMPO.o $TMPO.dSYM $TMPO$HOSTEXEEXT "$@"
|
||
}
|
||
|
||
cc_check() {
|
||
cc_check_no_clean "$@"
|
||
TMPR="$?"
|
||
cc_check_clean
|
||
return "$TMPR"
|
||
}
|
||
|
||
cc_check_define() {
|
||
cat > $TMPC << EOF
|
||
int main(void) {
|
||
#ifndef $1
|
||
syntax error
|
||
#endif
|
||
return 0;
|
||
}
|
||
EOF
|
||
cc_check -c
|
||
return $?
|
||
}
|
||
|
||
gcc_get_define() {
|
||
echo "" | $CXX -dM -E - | fgrep "$1" | head -n1 | cut -d ' ' -f 3-
|
||
}
|
||
|
||
#
|
||
# Function to provide echo -n for bourne shells that don't have it
|
||
#
|
||
echo_n() {
|
||
printf "$@"
|
||
}
|
||
|
||
echocheck() {
|
||
echo_n "Checking for $@... "
|
||
}
|
||
|
||
# Add a line of data to config.mk.
|
||
add_line_to_config_mk() {
|
||
_config_mk_data="$_config_mk_data"'
|
||
'"$1"
|
||
}
|
||
|
||
# Add a line of data to config.h.
|
||
add_line_to_config_h() {
|
||
_config_h_data="$_config_h_data"'
|
||
'"$1"
|
||
}
|
||
|
||
# Conditionally add a line of data to config.h. Takes two parameters:
|
||
# The first one can be set to 'no' to "comment out" the line, i.e.
|
||
# make it ineffective, use 'yes' otherwise.
|
||
# The second param is the line to insert.
|
||
add_to_config_h_if_yes() {
|
||
if test "$1" = yes ; then
|
||
add_line_to_config_h "$2"
|
||
else
|
||
add_line_to_config_h "/* $2 */"
|
||
fi
|
||
}
|
||
|
||
# Conditionally add a line of data to config.mk. Takes two parameters:
|
||
# The first one can be set to 'no' to "comment out" the line, i.e.
|
||
# make it ineffective, use 'yes' otherwise.
|
||
# The second param is the line to insert.
|
||
add_to_config_mk_if_yes() {
|
||
if test "$1" = yes ; then
|
||
add_line_to_config_mk "$2"
|
||
else
|
||
add_line_to_config_mk "# $2"
|
||
fi
|
||
}
|
||
|
||
# Conditionally add a '#define' line to config.h. Takes two parameters:
|
||
# The first one can be set to 'yes' or 'no'. If 'yes' is used, then
|
||
# the line "#define $2" is added to config.h, otherwise "#undef $2".
|
||
define_in_config_h_if_yes() {
|
||
if test "$1" = yes ; then
|
||
add_line_to_config_h "#define $2"
|
||
else
|
||
add_line_to_config_h "#undef $2"
|
||
fi
|
||
}
|
||
|
||
# Conditionally add definitions to config.h and config.mk. Takes two parameters:
|
||
# The first one can be set to 'yes' or 'no'. If 'yes' is used, then
|
||
# the line "#define $2" is added to config.h and "$2 = 1" to config.mk.
|
||
# Otherwise "#undef $2" is added to config.h and "# $2 = 1" to config.mk
|
||
define_in_config_if_yes() {
|
||
if test "$1" = yes ; then
|
||
add_line_to_config_h "#define $2"
|
||
add_line_to_config_mk "$2 = 1"
|
||
else
|
||
add_line_to_config_h "#undef $2"
|
||
add_line_to_config_mk "# $2 = 1"
|
||
fi
|
||
}
|
||
|
||
#
|
||
# Determine wx-config
|
||
#
|
||
# TODO: small bit of code to test wxWidgets usability
|
||
find_wxconfig() {
|
||
echo_n "Looking for wx-config... "
|
||
wxconfigs="$_wxconfig:wxgtk2-2.8-config"
|
||
_wxconfig=
|
||
|
||
IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="$SEPARATOR"
|
||
for path_dir in $_wxpath; do
|
||
#reset separator to parse wxconfigs
|
||
IFS=":"
|
||
for wxconfig in $wxconfigs; do
|
||
if test -f "$path_dir/$wxconfig" ; then
|
||
_wxconfig="$path_dir/$wxconfig"
|
||
echo $_wxconfig
|
||
# Save the prefix
|
||
_wxpath=$path_dir
|
||
if test `basename $path_dir` = bin ; then
|
||
_wxpath=`dirname $path_dir`
|
||
fi
|
||
# break at first wx-config found in path
|
||
break 2
|
||
fi
|
||
done
|
||
done
|
||
|
||
IFS="$ac_save_ifs"
|
||
|
||
if test -z "$_wxconfig"; then
|
||
echo "none found!"
|
||
fi
|
||
}
|
||
|
||
#
|
||
# Determine freetype-config
|
||
#
|
||
find_freetypeconfig() {
|
||
echo_n "Looking for freetype-config... "
|
||
freetypeconfigs="$_freetypeconfig"
|
||
_freetypeconfig=
|
||
|
||
IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="$SEPARATOR"
|
||
for path_dir in $_freetypepath; do
|
||
#reset separator to parse freetypeconfigs
|
||
IFS=":"
|
||
for freetypeconfig in $freetypeconfigs; do
|
||
if test -f "$path_dir/$freetypeconfig" ; then
|
||
_freetypeconfig="$path_dir/$freetypeconfig"
|
||
echo $_freetypeconfig
|
||
# Save the prefix
|
||
_freetypepath=$path_dir
|
||
if test `basename $path_dir` = bin ; then
|
||
_freetypepath=`dirname $path_dir`
|
||
fi
|
||
# break at first freetype-config found in path
|
||
break 2
|
||
fi
|
||
done
|
||
done
|
||
|
||
IFS="$ac_save_ifs"
|
||
|
||
if test -z "$_freetypeconfig"; then
|
||
echo "none found!"
|
||
fi
|
||
}
|
||
|
||
#
|
||
# Determine extension used for executables
|
||
#
|
||
get_system_exe_extension() {
|
||
case $1 in
|
||
riscos)
|
||
_exeext=",e1f"
|
||
;;
|
||
dreamcast | ds | gamecube | n64 | ps2 | psp | wii)
|
||
_exeext=".elf"
|
||
;;
|
||
gph-linux)
|
||
_exeext=".gph"
|
||
;;
|
||
mingw* | *os2-emx | wince)
|
||
_exeext=".exe"
|
||
;;
|
||
*)
|
||
_exeext=""
|
||
;;
|
||
esac
|
||
}
|
||
|
||
#
|
||
# Generic options functions
|
||
#
|
||
|
||
# Show the configure help line for an option
|
||
option_help() {
|
||
tmpopt=`echo $1 | sed 's/_/-/g'`
|
||
option=`echo "--${tmpopt} " | sed "s/\(.\{23\}\).*/\1/"`
|
||
echo " ${option} ${2}"
|
||
}
|
||
|
||
# Show an error about an unknown option
|
||
option_error() {
|
||
echo "error: unrecognized option: $ac_option
|
||
Try \`$0 --help' for more information." >&2
|
||
exit 1
|
||
}
|
||
|
||
|
||
#
|
||
# Greet user
|
||
#
|
||
echo "Running ScummVM Tools configure..."
|
||
echo "Configure run on" `date` > $TMPLOG
|
||
|
||
#
|
||
# Check any parameters we received
|
||
#
|
||
|
||
for parm in "$@" ; do
|
||
if test "$parm" = "--help" || test "$parm" = "-help" || test "$parm" = "-h" ; then
|
||
cat << EOF
|
||
|
||
Usage: $0 [OPTIONS]...
|
||
|
||
Configuration:
|
||
-h, --help display this help and exit
|
||
|
||
Installation directories:
|
||
--prefix=DIR use this prefix for installing the ScummVM Tools [/usr/local]
|
||
--bindir=DIR directory to install the tool binaries in [PREFIX/bin]
|
||
--datadir=DIR directory to install the GUI tool media files in [PREFIX/share]
|
||
--mandir=DIR directory to install the manpage in [PREFIX/share/man]
|
||
--libdir=DIR directory to install the plugins in [PREFIX/lib]
|
||
|
||
Special configuration feature:
|
||
--host=HOST cross-compile to target HOST (arm-linux, ...)
|
||
|
||
Optional Features:
|
||
--disable-c++11 disable building as C++11 when the compiler allows that
|
||
--disable-debug disable building with debugging symbols
|
||
--enable-Werror treat warnings as errors
|
||
--enable-profiling enable profiling
|
||
--enable-verbose-build enable regular echoing of commands during build
|
||
process
|
||
|
||
Optional Libraries:
|
||
--with-ogg-prefix=DIR Prefix where libogg is installed (optional)
|
||
--with-vorbis-prefix=DIR Prefix where libvorbis is installed (optional)
|
||
--disable-vorbis disable Ogg Vorbis support [autodetect]
|
||
|
||
--with-tremor-prefix=DIR Prefix where tremor is installed (optional)
|
||
--disable-tremor disable tremor support [autodetect]
|
||
|
||
--with-mad-prefix=DIR Prefix where libmad is installed (optional)
|
||
--disable-mad disable libmad (MP3) support [autodetect]
|
||
|
||
--with-flac-prefix=DIR Prefix where libFLAC is installed (optional)
|
||
--disable-flac disable FLAC support [autodetect]
|
||
|
||
--with-zlib-prefix=DIR Prefix where zlib is installed (optional)
|
||
--disable-zlib disable zlib (compression) support [autodetect]
|
||
|
||
--with-png-prefix=DIR Prefix where libpng is installed (optional)
|
||
--disable-png disable libpng (compression) support [autodetect]
|
||
|
||
--with-freetype2-prefix=DIR prefix where the freetype-config script is
|
||
installed (optional)
|
||
--disable-freetype2 disable freetype2 TTF library usage [autodetect]
|
||
|
||
--with-wx-prefix=DIR Prefix where wxwidgets is installed (optional)
|
||
--disable-wxwidgets disable wxwidgets (GUI) support [autodetect]
|
||
|
||
--disable-iconv disable iconv (Japanese font) support [autodetect]
|
||
|
||
--with-boost-prefix=DIR Prefix where Boost is installed (optional)
|
||
--disable-boost disable Boost support [autodetect]
|
||
|
||
Some influential environment variables:
|
||
LDFLAGS linker flags, e.g. -L<lib dir> if you have libraries in a
|
||
nonstandard directory <lib dir>
|
||
CXX C++ compiler command
|
||
CXXFLAGS C++ compiler flags
|
||
CONFIGURE_NO_HOST Ignore the cross-compile target set by the --host= option
|
||
CPPFLAGS C++ preprocessor flags, e.g. -I<include dir> if you have
|
||
headers in a nonstandard directory <include dir>
|
||
PKG_CONFIG_LIBDIR list of directories where pkg-config ‘.pc’ files are
|
||
looked up
|
||
|
||
EOF
|
||
exit 0
|
||
fi
|
||
done # for parm in ...
|
||
|
||
for ac_option in $@; do
|
||
case "$ac_option" in
|
||
# Silently ignore options valid for Autotools configure.
|
||
--build=*) ;;
|
||
--exec-prefix=*) ;;
|
||
--program-prefix=*) ;;
|
||
--sbindir=*) ;;
|
||
--sysconfdir=*) ;;
|
||
--includedir=*) ;;
|
||
--libexecdir=*) ;;
|
||
--localstatedir=*) ;;
|
||
--sharedstatedir=*) ;;
|
||
--infodir=*) ;;
|
||
--disable-dependency-tracking) ;;
|
||
--enable-dependency-tracking) ;;
|
||
# End of ignored options.
|
||
--enable-vorbis) _vorbis=yes ;;
|
||
--disable-vorbis) _vorbis=no ;;
|
||
--enable-tremor) _tremor=yes ;;
|
||
--disable-tremor) _tremor=no ;;
|
||
--enable-flac) _flac=yes ;;
|
||
--disable-flac) _flac=no ;;
|
||
--enable-mad) _mad=yes ;;
|
||
--disable-mad) _mad=no ;;
|
||
--enable-zlib) _zlib=yes ;;
|
||
--disable-zlib) _zlib=no ;;
|
||
--enable-png) _png=yes ;;
|
||
--disable-png) _png=no ;;
|
||
--enable-freetype2) _freetype2=yes ;;
|
||
--disable-freetype2) _freetype2=no ;;
|
||
--enable-wxwidgets) _wxwidgets=yes ;;
|
||
--disable-wxwidgets) _wxwidgets=no ;;
|
||
--enable-iconv) _iconv=yes ;;
|
||
--disable-iconv) _iconv=no ;;
|
||
--enable-boost) _boost=yes ;;
|
||
--disable-boost) _boost=no ;;
|
||
--enable-verbose-build) _verbose_build=yes ;;
|
||
--with-ogg-prefix=*)
|
||
arg=`echo $ac_option | cut -d '=' -f 2`
|
||
OGG_CFLAGS="-I$arg/include"
|
||
OGG_LIBS="-L$arg/lib"
|
||
;;
|
||
--with-vorbis-prefix=*)
|
||
arg=`echo $ac_option | cut -d '=' -f 2`
|
||
VORBIS_CFLAGS="-I$arg/include"
|
||
VORBIS_LIBS="-L$arg/lib"
|
||
;;
|
||
--with-tremor-prefix=*)
|
||
arg=`echo $ac_option | cut -d '=' -f 2`
|
||
TREMOR_CFLAGS="-I$arg/include"
|
||
TREMOR_LIBS="-L$arg/lib"
|
||
;;
|
||
--with-flac-prefix=*)
|
||
arg=`echo $ac_option | cut -d '=' -f 2`
|
||
FLAC_CFLAGS="-I$arg/include"
|
||
FLAC_LIBS="-L$arg/lib"
|
||
;;
|
||
--with-mad-prefix=*)
|
||
arg=`echo $ac_option | cut -d '=' -f 2`
|
||
MAD_CFLAGS="-I$arg/include"
|
||
MAD_LIBS="-L$arg/lib"
|
||
;;
|
||
--with-zlib-prefix=*)
|
||
arg=`echo $ac_option | cut -d '=' -f 2`
|
||
ZLIB_CFLAGS="-I$arg/include"
|
||
ZLIB_LIBS="-L$arg/lib"
|
||
;;
|
||
--with-png-prefix=*)
|
||
arg=`echo $ac_option | cut -d '=' -f 2`
|
||
PNG_CFLAGS="-I$arg/include"
|
||
PNG_LIBS="-L$arg/lib"
|
||
;;
|
||
--with-freetype2-prefix=*)
|
||
arg=`echo $ac_option | cut -d '=' -f 2`
|
||
_freetypepath="$arg:$arg/bin"
|
||
;;
|
||
--with-wx-prefix=*)
|
||
arg=`echo $ac_option | cut -d '=' -f 2`
|
||
_wxpath="$arg:$arg/bin"
|
||
;;
|
||
--with-boost-prefix=*)
|
||
arg=`echo $ac_option | cut -d '=' -f 2`
|
||
BOOST_CFLAGS="-I$arg/include"
|
||
BOOST_LIBS="-L$arg/lib"
|
||
;;
|
||
--with-staticlib-prefix=*)
|
||
_staticlibpath=`echo $ac_option | cut -d '=' -f 2`
|
||
;;
|
||
--with-xcodetools-path=*)
|
||
_xcodetoolspath=`echo $ac_option | cut -d '=' -f 2`
|
||
;;
|
||
--enable-debug)
|
||
_debug_build=yes
|
||
;;
|
||
--disable-debug)
|
||
_debug_build=no
|
||
;;
|
||
--enable-Werror)
|
||
CXXFLAGS="$CXXFLAGS -Werror"
|
||
;;
|
||
--enable-release)
|
||
_release_build=yes
|
||
;;
|
||
--disable-release)
|
||
_release_build=no
|
||
;;
|
||
--enable-profiling)
|
||
_enable_prof=yes
|
||
;;
|
||
--host=*)
|
||
if test -z "$CONFIGURE_NO_HOST"; then
|
||
_host=`echo $ac_option | cut -d '=' -f 2`
|
||
else
|
||
echo "Ignoring --host option!" >&2
|
||
fi
|
||
;;
|
||
--prefix=*)
|
||
_prefix=`echo $ac_option | cut -d '=' -f 2`
|
||
;;
|
||
--bindir=*)
|
||
_bindir=`echo $ac_option | cut -d '=' -f 2`
|
||
;;
|
||
--datadir=*)
|
||
_datadir=`echo $ac_option | cut -d '=' -f 2`
|
||
;;
|
||
--mandir=*)
|
||
_mandir=`echo $ac_option | cut -d '=' -f 2`
|
||
;;
|
||
--libdir=*)
|
||
_libdir=`echo $ac_option | cut -d '=' -f 2`
|
||
;;
|
||
*)
|
||
option_error
|
||
;;
|
||
esac;
|
||
done;
|
||
|
||
guessed_host=`$_srcdir/config.guess`
|
||
get_system_exe_extension $guessed_host
|
||
NATIVEEXEEXT=$_exeext
|
||
|
||
case $_host in
|
||
android | android-v7a)
|
||
_host_os=android
|
||
_host_cpu=arm
|
||
_host_alias=arm-linux-androideabi
|
||
;;
|
||
bada)
|
||
_host_os=bada
|
||
if test "$_debug_build" = yes; then
|
||
_host_cpu=i686
|
||
_host_alias=i686-mingw32
|
||
else
|
||
_host_cpu=arm
|
||
_host_alias=arm-samsung-nucleuseabi
|
||
fi
|
||
;;
|
||
caanoo)
|
||
_host_os=gph-linux
|
||
_host_cpu=arm
|
||
_host_alias=arm-none-linux-gnueabi
|
||
;;
|
||
dingux)
|
||
_host_os=linux
|
||
_host_cpu=mipsel
|
||
_host_alias=mipsel-linux
|
||
;;
|
||
dreamcast)
|
||
_host_os=dreamcast
|
||
_host_cpu=sh
|
||
_host_alias=sh-elf
|
||
CXXFLAGS="$CXXFLAGS -ml -m4-single-only"
|
||
LDFLAGS="$LDFLAGS -ml -m4-single-only"
|
||
;;
|
||
ds)
|
||
_host_os=ds
|
||
_host_cpu=arm
|
||
_host_alias=arm-eabi
|
||
;;
|
||
gamecube)
|
||
_host_os=gamecube
|
||
_host_cpu=ppc
|
||
_host_alias=powerpc-gekko
|
||
;;
|
||
gp2x)
|
||
_host_os=gph-linux
|
||
_host_cpu=arm
|
||
_host_alias=arm-open2x-linux
|
||
;;
|
||
gp2xwiz)
|
||
_host_os=gph-linux
|
||
_host_cpu=arm
|
||
_host_alias=arm-open2x-linux
|
||
;;
|
||
i586-mingw32msvc)
|
||
_host_os=mingw32msvc
|
||
_host_cpu=i586
|
||
;;
|
||
iphone)
|
||
_host_os=iphone
|
||
_host_cpu=arm
|
||
_host_alias=arm-apple-darwin9
|
||
;;
|
||
linupy)
|
||
_host_os=linux
|
||
_host_cpu=arm
|
||
;;
|
||
maemo)
|
||
_host_os=maemo
|
||
_host_cpu=arm
|
||
_host_alias=arm-linux
|
||
|
||
# The prefix is always the same on Maemo so we hardcode the default
|
||
# here. It is still possible to define a custom prefix which is
|
||
# needed when packaging the app with a user-specific app ID.
|
||
test "x$prefix" = xNONE && prefix=/opt/scummvm
|
||
# Maemo apps are installed into app-specific directories. The
|
||
# default directory structure of ScummVM makes no sense here so we
|
||
# hardcode Maemo specific directories here.
|
||
datarootdir='${prefix}/share'
|
||
datadir=/opt/scummvm/share
|
||
docdir='${datarootdir}/doc/scummvm'
|
||
;;
|
||
motoezx)
|
||
_host_os=linux
|
||
_host_cpu=arm
|
||
_host_alias=arm-linux-gnu
|
||
;;
|
||
motomagx)
|
||
_host_os=linux
|
||
_host_cpu=arm
|
||
_host_alias=arm-linux-gnueabi
|
||
;;
|
||
n64)
|
||
_host_os=n64
|
||
_host_cpu=mips
|
||
_host_alias=mips64
|
||
;;
|
||
neuros)
|
||
_host_os=linux
|
||
_host_cpu=arm
|
||
;;
|
||
openpandora)
|
||
_host_os=linux
|
||
_host_cpu=arm
|
||
_host_alias=arm-angstrom-linux-gnueabi
|
||
;;
|
||
ppc-amigaos)
|
||
_host_os=amigaos
|
||
_host_cpu=ppc
|
||
;;
|
||
ppc-morphos)
|
||
_host_os=morphos
|
||
_host_cpu=ppc
|
||
;;
|
||
ps2)
|
||
_host_os=ps2
|
||
_host_cpu=mips64r5900el
|
||
_host_alias=ee
|
||
;;
|
||
ps3)
|
||
_host_os=ps3
|
||
_host_cpu=ppc
|
||
_host_alias=powerpc64-ps3-elf
|
||
|
||
# The prefix is always the same on PS3 so we hardcode the default
|
||
# here. It is still possible to define a custom prefix which is
|
||
# needed when packaging the app with a user-specific app ID.
|
||
test "x$prefix" = xNONE && prefix=/dev_hdd0/game/SCUM12000/USRDIR
|
||
# PS3 apps are installed into app-specific directories. The
|
||
# default directory structure of ScummVM makes no sense here so we
|
||
# hardcode PS3 specific directories here.
|
||
datarootdir='${prefix}/data'
|
||
datadir='${datarootdir}'
|
||
docdir='${prefix}/doc'
|
||
;;
|
||
psp)
|
||
_host_os=psp
|
||
_host_cpu=mipsallegrexel
|
||
_host_alias=psp
|
||
;;
|
||
raspberrypi)
|
||
_host_os=linux
|
||
_host_cpu=arm
|
||
# This tuple is the one used by the official Rpi toolchain.
|
||
# It may change in the future.
|
||
_host_alias=arm-linux-gnueabihf
|
||
;;
|
||
samsungtv)
|
||
_host_os=linux
|
||
_host_cpu=arm
|
||
_host_alias=arm-linux-gnueabi
|
||
;;
|
||
webos)
|
||
_host_os=webos
|
||
_host_cpu=arm
|
||
_host_alias=arm-none-linux-gnueabi
|
||
# The prefix is always the same on WebOS so we hardcode the default
|
||
# here. It is still possible to define a custom prefix which is
|
||
# needed when packaging the app with a user-specific app ID.
|
||
test "x$prefix" = xNONE && prefix=/media/cryptofs/apps/usr/palm/applications/org.scummvm.scummvm
|
||
# WebOS apps are installed into app-specific directories. The
|
||
# default directory structure of ScummVM makes no sense here so we
|
||
# hardcode WebOS specific directories here.
|
||
datarootdir='${prefix}/data'
|
||
datadir='${datarootdir}'
|
||
docdir='${prefix}/doc'
|
||
;;
|
||
wii)
|
||
_host_os=wii
|
||
_host_cpu=ppc
|
||
_host_alias=powerpc-gekko
|
||
;;
|
||
wince)
|
||
_host_os=wince
|
||
_host_cpu=arm
|
||
_host_alias=arm-mingw32ce
|
||
;;
|
||
*)
|
||
if test -n "$_host"; then
|
||
guessed_host=`$_srcdir/config.sub $_host`
|
||
fi
|
||
_host_cpu=`echo $guessed_host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\1/'`
|
||
_host_vendor=`echo $guessed_host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\2/'`
|
||
_host_os=`echo $guessed_host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\3/'`
|
||
;;
|
||
esac
|
||
|
||
if test -z "$_host_alias"; then
|
||
_host_alias="$_host_cpu-$_host_os"
|
||
else
|
||
# if _host_alias was set, default to the standard GNU tools
|
||
_ranlib=$_host_alias-ranlib
|
||
_strip=$_host_alias-strip
|
||
_ar="$_host_alias-ar cru"
|
||
_as="$_host_alias-as"
|
||
_windres=$_host_alias-windres
|
||
fi
|
||
|
||
#
|
||
# Determine extra build flags for debug and/or release builds
|
||
#
|
||
|
||
if test "$_debug_build" != no; then
|
||
# debug mode not explicitly disabled -> compile with -g
|
||
CXXFLAGS="$CXXFLAGS -g"
|
||
fi
|
||
|
||
if test "$_release_build" = yes; then
|
||
# Release mode enabled: enable optimizations. This also
|
||
# makes it possible to use -Wuninitialized, so let's do that.
|
||
CXXFLAGS="$CXXFLAGS -O2"
|
||
CXXFLAGS="$CXXFLAGS -Wuninitialized"
|
||
fi
|
||
|
||
|
||
#
|
||
# Determine extension used for executables
|
||
#
|
||
get_system_exe_extension $_host_os
|
||
HOSTEXEEXT=$_exeext
|
||
|
||
#
|
||
# Determine separator used for $PATH
|
||
#
|
||
case $_host_os in
|
||
os2-emx*)
|
||
SEPARATOR=";"
|
||
;;
|
||
*)
|
||
SEPARATOR=":"
|
||
;;
|
||
esac
|
||
|
||
#
|
||
# Determine the C++ compiler
|
||
#
|
||
echo_n "Looking for C++ compiler... "
|
||
|
||
# Check whether the given command is a working C++ compiler
|
||
test_compiler() {
|
||
cat > tmp_cxx_compiler.cpp << EOF
|
||
class Foo { int a; };
|
||
int main(int argc, char **argv) {
|
||
Foo *a = new Foo(); delete a; return 0;
|
||
}
|
||
EOF
|
||
|
||
echo "testing compiler: $1" >> "$TMPLOG"
|
||
|
||
if test -n "$_host"; then
|
||
# In cross-compiling mode, we cannot run the result
|
||
eval "$1 $CXXFLAGS $LDFLAGS -o $TMPO.o -c tmp_cxx_compiler.cpp" 2> /dev/null && cc_check_clean tmp_cxx_compiler.cpp
|
||
else
|
||
eval "$1 $CXXFLAGS $LDFLAGS -o $TMPO$HOSTEXEEXT tmp_cxx_compiler.cpp" 2> /dev/null && eval "$TMPO$HOSTEXEEXT 2> /dev/null" && cc_check_clean tmp_cxx_compiler.cpp
|
||
fi
|
||
}
|
||
|
||
# Prepare a list of candidates for the C++ compiler
|
||
if test -n "$CXX" && test_compiler "$CXX"; then
|
||
# Use the compiler specified in CXX
|
||
echo $CXX
|
||
else
|
||
if test -n "$_host"; then
|
||
compilers="$_host_alias-g++ $_host_alias-c++ $_host-g++ $_host-c++"
|
||
else
|
||
compilers="g++ c++ CC"
|
||
fi
|
||
|
||
# Iterate over all candidates, pick the first working one
|
||
CXX=
|
||
for compiler in $compilers; do
|
||
if test_compiler $compiler; then
|
||
echo "success testing compiler: $compiler" >> "$TMPLOG"
|
||
CXX=$compiler
|
||
echo $CXX
|
||
break
|
||
else
|
||
echo "failure testing compiler: $compiler" >> "$TMPLOG"
|
||
fi
|
||
done
|
||
fi
|
||
|
||
if test -z "$CXX"; then
|
||
echo "none found!"
|
||
exit 1
|
||
fi
|
||
|
||
# By default, use the C++ compiler as linker
|
||
LD=$CXX
|
||
|
||
#
|
||
# Check whether the compiler supports C++11
|
||
#
|
||
echo_n "Checking if compiler supports C++11... "
|
||
have_cxx11=no
|
||
cat > $TMPC << EOF
|
||
int main(int argc, char *argv[]) { if (argv == nullptr) return -1; else return 0; }
|
||
EOF
|
||
cc_check -std=c++11 && have_cxx11=yes
|
||
echo $have_cxx11
|
||
|
||
if test "$have_cxx11" = "no" ; then
|
||
echo
|
||
echo "ScummVM requires C++11 compiler support. Please ensure your compiler supports it"
|
||
exit 1
|
||
fi
|
||
|
||
#
|
||
# Determine the compiler version
|
||
#
|
||
echocheck "compiler version"
|
||
|
||
# Some compilers pretend to be gcc to ease compatibility with
|
||
# common Linux etc. programs. We first check for some of these here.
|
||
have_gcc=no
|
||
cc_check_define __GNUC__ && have_gcc=yes
|
||
have_icc=no
|
||
cc_check_define __INTEL_COMPILER && have_icc=yes
|
||
have_clang=no
|
||
cc_check_define __clang__ && have_clang=yes
|
||
|
||
if test "$have_icc" = yes; then
|
||
add_line_to_config_mk 'HAVE_ICC = 1'
|
||
|
||
# Make ICC error out on unknown command line options instead of printing
|
||
# a warning. This is for example required to make the -Wglobal-constructors
|
||
# detection work correctly.
|
||
CXXFLAGS="$CXXFLAGS -diag-error 10006,10148"
|
||
|
||
# ICC doesn't accept all gcc options, so we disable have_gcc, even if
|
||
# ICC does have the gcc-compatibility defines.
|
||
have_gcc=no
|
||
fi
|
||
|
||
if test "$have_clang" = yes; then
|
||
add_line_to_config_mk 'HAVE_CLANG = 1'
|
||
|
||
# clang does accept all gcc options we use, so we keep have_gcc
|
||
fi
|
||
|
||
if test "$have_gcc" = yes; then
|
||
add_line_to_config_mk 'HAVE_GCC = 1'
|
||
_cxx_major=`gcc_get_define __GNUC__`
|
||
_cxx_minor=`gcc_get_define __GNUC_MINOR__`
|
||
cxx_version="`( $CXX -dumpversion ) 2>&1`"
|
||
|
||
if test "$have_clang" = yes; then
|
||
# Clang sets a gcc version number for compatibility.
|
||
# We keep that as _cxx_minor/_cxx_major for later
|
||
# compiler version checks.
|
||
|
||
# For the version reported in the configure log (cxx_version),
|
||
# we get the actual clang version.
|
||
cxx_version=`gcc_get_define __clang_version__`
|
||
cxx_version="`echo "${cxx_version}" | sed -e 's/"\([^ ]*\) .*/\1/'`"
|
||
cxx_version="clang $cxx_version, ok"
|
||
else
|
||
cxx_version="GCC $cxx_version, ok"
|
||
fi
|
||
elif test "$have_icc" = yes; then
|
||
cxx_version="`( $CXX -dumpversion ) 2>/dev/null`"
|
||
_cxx_major="`echo "${cxx_version}" | sed -ne 's/\([0-9][0-9]*\)\..*/\1/gp'`"
|
||
_cxx_minor="`echo "${cxx_version}" | sed -ne 's/[0-9][0-9]*\.\([0-9][0-9]*\)/\1/gp'`"
|
||
cxx_version="ICC $cxx_version, ok"
|
||
else
|
||
# TODO: Big scary warning about unsupported compilers
|
||
cxx_version=`( $CXX -version ) 2>&1`
|
||
if test "$?" -eq 0; then
|
||
cxx_version="`echo "${cxx_version}" | sed -ne 's/^.*[^0-9]\([0-9][0-9]*\.[0-9][0-9]*\.[0-9][0-9]*\).*$/\1/gp'`"
|
||
if test -z "${cxx_version}"; then
|
||
cxx_version="not found"
|
||
fi
|
||
echo non-gcc compiler version ${cxx_version}
|
||
else
|
||
cxx_version="not found"
|
||
echo non-gcc compiler version ${cxx_version}
|
||
fi
|
||
cxx_verc_fail=yes
|
||
cxx_version="$cxx_version, bad"
|
||
fi
|
||
|
||
echo "$cxx_version"
|
||
|
||
#
|
||
# Bail out now if no useable compiler was found.
|
||
#
|
||
if test "$cxx_verc_fail" = yes ; then
|
||
echo
|
||
echo "The version of your compiler is not supported at this time"
|
||
exit 1
|
||
fi
|
||
|
||
#
|
||
# Setup compiler specific CXXFLAGS now that we know the compiler version.
|
||
# Foremost, this means enabling various warnings.
|
||
# In addition, we set CXX_UPDATE_DEP_FLAG for GCC and ICC.
|
||
#
|
||
# By default compile with strict C++
|
||
std_variant=c++
|
||
pedantic=no
|
||
if test "$have_gcc" = yes ; then
|
||
# By default, we add -pedantic to the CXXFLAGS to catch some potentially
|
||
# non-portable constructs, like use of GNU extensions.
|
||
# However, some platforms use GNU extensions in system header files, so
|
||
# for these we must not use -pedantic.
|
||
pedantic=yes
|
||
|
||
case $_host_os in
|
||
# newlib-based system include files suppress non-C89 function
|
||
# declarations under __STRICT_ANSI__, undefine it
|
||
3ds | android | gamecube | psp | switch | wii)
|
||
std_variant=gnu++
|
||
pedantic=no
|
||
;;
|
||
amigaos* | dreamcast | ds | mingw* | mint* | morphos | n64 | ps3 | psp2)
|
||
std_variant=gnu++
|
||
;;
|
||
openbsd*)
|
||
pedantic=no
|
||
;;
|
||
*)
|
||
;;
|
||
esac
|
||
CXXFLAGS="$CXXFLAGS -W -Wno-unused-parameter"
|
||
add_line_to_config_mk 'CXX_UPDATE_DEP_FLAG = -MMD -MF "$(*D)/$(DEPDIR)/$(*F).d" -MQ "$@" -MP'
|
||
|
||
CXXFLAGS="$CXXFLAGS -Wno-empty-body"
|
||
CXXFLAGS="$CXXFLAGS -fno-operator-names"
|
||
elif test "$have_icc" = yes ; then
|
||
# ICC does not support pedantic, while GCC and clang do.
|
||
add_line_to_config_mk 'CXX_UPDATE_DEP_FLAG = -MMD -MF "$(*D)/$(DEPDIR)/$(*F).d" -MQ "$@" -MP'
|
||
fi
|
||
|
||
#
|
||
# Set status about C++11 mode
|
||
#
|
||
CXXFLAGS="$CXXFLAGS -std=${std_variant}11"
|
||
|
||
if test "$pedantic" = yes ; then
|
||
CXXFLAGS="$CXXFLAGS -pedantic"
|
||
fi
|
||
|
||
# Check if std::nullptr_t is available
|
||
echo_n "Checking if C++11 std::nullptr_t is available..."
|
||
cat > $TMPC << EOF
|
||
#include <cstddef>
|
||
int main(int argc, char *argv[]) {
|
||
std::nullptr_t i = nullptr;
|
||
return 0;
|
||
}
|
||
EOF
|
||
cc_check
|
||
if test "$TMPR" -eq 0; then
|
||
echo yes
|
||
else
|
||
echo no
|
||
define_in_config_if_yes yes 'NO_CXX11_NULLPTR_T'
|
||
fi
|
||
|
||
if test -n "$STRINGS"; then
|
||
_strings=$STRINGS
|
||
else
|
||
echo_n "Checking for $_host_alias-strings... " >> "$TMPLOG"
|
||
if `which $_host_alias-strings >/dev/null 2>&1`; then
|
||
_strings=$_host_alias-strings
|
||
echo yes >> "$TMPLOG"
|
||
else
|
||
_strings=strings
|
||
echo no >> "$TMPLOG"
|
||
fi
|
||
fi
|
||
|
||
#
|
||
# Check for endianness
|
||
#
|
||
echo_n "Checking endianness... "
|
||
cat > tmp_endianness_check.cpp << EOF
|
||
unsigned short ascii_mm[] = { 0x4249, 0x4765, 0x6E44, 0x6961, 0x6E53, 0x7953, 0 };
|
||
unsigned short ascii_ii[] = { 0x694C, 0x5454, 0x656C, 0x6E45, 0x6944, 0x6E61, 0 };
|
||
void _ascii() { char* s = (char*) ascii_mm; s = (char*) ascii_ii; }
|
||
unsigned short ebcdic_ii[] = { 0x89D3, 0xE3E3, 0x8593, 0x95C5, 0x89C4, 0x9581, 0 };
|
||
unsigned short ebcdic_mm[] = { 0xC2C9, 0xC785, 0x95C4, 0x8981, 0x95E2, 0xA8E2, 0 };
|
||
void _ebcdic() { char* s = (char*) ebcdic_mm; s = (char*) ebcdic_ii; }
|
||
int main() { _ascii (); _ebcdic (); return 0; }
|
||
EOF
|
||
$CXX $CXXFLAGS -c -o $TMPO.o tmp_endianness_check.cpp
|
||
if $_strings $TMPO.o | grep BIGenDianSyS >/dev/null; then
|
||
_endian=big
|
||
elif $_strings $TMPO.o | grep LiTTleEnDian >/dev/null; then
|
||
_endian=little
|
||
fi
|
||
echo $_endian;
|
||
cc_check_clean tmp_endianness_check.cpp
|
||
|
||
case $_endian in
|
||
big)
|
||
add_line_to_config_h '#undef SCUMM_LITTLE_ENDIAN'
|
||
add_line_to_config_h '#define SCUMM_BIG_ENDIAN'
|
||
;;
|
||
little)
|
||
add_line_to_config_h '#define SCUMM_LITTLE_ENDIAN'
|
||
add_line_to_config_h '#undef SCUMM_BIG_ENDIAN'
|
||
;;
|
||
*)
|
||
exit 1
|
||
;;
|
||
esac
|
||
|
||
#
|
||
# Determine a data type with the given length
|
||
#
|
||
find_type_with_size() {
|
||
for datatype in int short char long "long long" unknown; do
|
||
cat > tmp_find_type_with_size.cpp << EOF
|
||
typedef $datatype ac__type_sizeof_;
|
||
int main() {
|
||
static int test_array [1 - 2 * !(((long int) (sizeof (ac__type_sizeof_))) == $1)];
|
||
test_array [0] = 0;
|
||
return 0;
|
||
}
|
||
EOF
|
||
if $CXX $CXXFLAGS -c -o $TMPO.o tmp_find_type_with_size.cpp 2>/dev/null ; then
|
||
break
|
||
else
|
||
if test "$datatype" = "unknown"; then
|
||
echo "couldn't find data type with $1 bytes"
|
||
exit 1
|
||
fi
|
||
continue
|
||
fi
|
||
done
|
||
cc_check_clean tmp_find_type_with_size.cpp
|
||
echo "$datatype"
|
||
}
|
||
|
||
#
|
||
# Determine data type sizes
|
||
#
|
||
echo_n "Type with 1 byte... "
|
||
type_1_byte=`find_type_with_size 1`
|
||
TMPR="$?"
|
||
echo "$type_1_byte"
|
||
test $TMPR -eq 0 || exit 1 # check exit code of subshell
|
||
|
||
echo_n "Type with 2 bytes... "
|
||
type_2_byte=`find_type_with_size 2`
|
||
TMPR="$?"
|
||
echo "$type_2_byte"
|
||
test $TMPR -eq 0 || exit 1 # check exit code of subshell
|
||
|
||
echo_n "Type with 4 bytes... "
|
||
type_4_byte=`find_type_with_size 4`
|
||
TMPR="$?"
|
||
echo "$type_4_byte"
|
||
test $TMPR -eq 0 || exit 1 # check exit code of subshell
|
||
|
||
echo_n "Type with 8 bytes... "
|
||
type_8_byte=`find_type_with_size 8`
|
||
TMPR="$?"
|
||
echo "$type_8_byte"
|
||
test $TMPR -eq 0 || exit 1 # check exit code of subshell
|
||
|
||
#
|
||
# Check whether memory alignment is required
|
||
#
|
||
# For some CPU types, unaligned memory access is either not supported at
|
||
# all (and so leads to a crash), requires a super-slow emulation via an
|
||
# exception handler, or just results in incorrect results.
|
||
# On the other hand, accessing data in a manner that works regardless of
|
||
# alignment can be a lot slower than regular access, so we don't want
|
||
# to use it if we don't have to.
|
||
#
|
||
# So we do the following: For CPU families where we know whether unaligned
|
||
# access is safe & fast, we enable / disable unaligned access accordingly.
|
||
# Otherwise, we just disable memory alignment.
|
||
#
|
||
# NOTE: In the past, for non-cross compiled builds, we would also run some code
|
||
# which would try to test whether unaligned access worked or not. But this test
|
||
# could not reliably determine whether unaligned access really worked in all
|
||
# situations (and across different implementations of the target CPU arch), nor
|
||
# whether it was fast (as opposed to slowly emulated by fault handlers). Hence,
|
||
# we do not use this approach anymore.
|
||
#
|
||
# NOTE: The only kinds of unaligned access we allow are for 2 byte and 4
|
||
# byte loads / stores. No promises are made for bigger sizes, such as 8
|
||
# or 16 byte loads, for which architectures may behave differently than
|
||
# for the smaller sizes.
|
||
echo_n "Alignment required... "
|
||
case $_host_cpu in
|
||
i[3-6]86 | amd64 | x86_64 | powerpc* | ppc* | m68k)
|
||
# Unaligned access should work
|
||
_need_memalign=no
|
||
;;
|
||
alpha* | arm* | bfin* | hp* | mips* | sh* | sparc* | ia64 | nv1*)
|
||
# Unaligned access is not supported or extremely slow.
|
||
_need_memalign=yes
|
||
;;
|
||
*)
|
||
# Status of unaligned access is unknown, so assume the worst.
|
||
_need_memalign=yes
|
||
;;
|
||
esac
|
||
echo "$_need_memalign"
|
||
|
||
define_in_config_h_if_yes $_need_memalign 'SCUMM_NEED_ALIGNMENT'
|
||
|
||
#
|
||
# Determine build settings
|
||
#
|
||
echo_n "Checking hosttype... "
|
||
echo $_host_os
|
||
case $_host_os in
|
||
amigaos*)
|
||
add_line_to_config_mk 'AMIGAOS = 1'
|
||
# Use 'long' for ScummVM's 4 byte typedef, because AmigaOS
|
||
# already typedefs (u)int32 as (unsigned) long and suppress
|
||
# those noisy format warnings caused by the 'long' 4 byte
|
||
type_4_byte='long'
|
||
CXXFLAGS="$CXXFLAGS -Wno-format"
|
||
# Dependencies might also be compiled with stack protection
|
||
LDFLAGS="$LDFLAGS -L/sdk/local/newlib/lib -fstack-protector"
|
||
;;
|
||
beos*)
|
||
DEFINES="$DEFINES -DSYSTEM_NOT_SUPPORTING_D_TYPE"
|
||
# Needs -lbind -lsocket for the timidity MIDI driver
|
||
LDFLAGS="-L/boot/home/config/lib"
|
||
CFLAGS="-I/boot/home/config/include"
|
||
CXXFLAGS="$CXXFLAGS -fhuge-objects"
|
||
LIBS="$LIBS -lbind -lsocket"
|
||
_seq_midi=no
|
||
;;
|
||
cygwin*)
|
||
echo ERROR: Cygwin building is not supported by ScummVM anymore. Consider using MinGW.
|
||
exit 1
|
||
;;
|
||
darwin*)
|
||
DEFINES="$DEFINES -DMACOSX"
|
||
LIBS="$LIBS -framework AudioUnit -framework AudioToolbox -framework Carbon -framework CoreMIDI"
|
||
add_line_to_config_mk 'MACOSX = 1'
|
||
|
||
# Now we may have MacPorts or Fink installed
|
||
# Which put libraries and headers in non-standard places
|
||
# Checking them here
|
||
|
||
# MacPorts
|
||
# There is no way to get the prefix, so implementing a hack here
|
||
macport_version=`port version 2>/dev/null`
|
||
if test "$?" -eq 0; then
|
||
macport_version="`echo "${macport_version}" | sed -ne 's/Version: \([0-9]\.[0-9]\.[0-9]\)/\1/gp'`"
|
||
echo_n "You seem to be running MacPorts version ${macport_version}..."
|
||
|
||
macport_prefix=`which port`
|
||
# strip off /bin/port from /opt/local/bin/port
|
||
macport_prefix=`dirname ${macport_prefix}`
|
||
macport_prefix=`dirname ${macport_prefix}`
|
||
|
||
echo "adding ${macport_prefix} to paths"
|
||
|
||
LDFLAGS="-L${macport_prefix}/lib $LDFLAGS"
|
||
CXXFLAGS="-I${macport_prefix}/include $CXXFLAGS"
|
||
|
||
if test -z "$_staticlibpath"; then
|
||
_staticlibpath=${macport_prefix}
|
||
echo "Set staticlib-prefix to ${_staticlibpath}"
|
||
fi
|
||
fi
|
||
|
||
# Fink
|
||
# There is no way to get the prefix, so implementing a hack here
|
||
fink_version=`fink -V 2>/dev/null`
|
||
if test "$?" -eq 0; then
|
||
fink_version="`echo "${fink_version}" | sed -ne 's/Package manager version: \([0-9.]*\)/\1/gp'`"
|
||
echo_n "You seem to be running Fink version ${fink_version}..."
|
||
|
||
fink_prefix=`which fink`
|
||
# strip off /bin/fink from /sw/bin/port
|
||
fink_prefix=`dirname ${fink_prefix}`
|
||
fink_prefix=`dirname ${fink_prefix}`
|
||
|
||
echo "adding ${fink_prefix} to paths"
|
||
|
||
LDFLAGS="-L${fink_prefix}/lib $LDFLAGS"
|
||
CXXFLAGS="-I${fink_prefix}/include $CXXFLAGS"
|
||
|
||
if test -z "$_staticlibpath"; then
|
||
_staticlibpath=${fink_prefix}
|
||
echo "Set staticlib-prefix to ${_staticlibpath}"
|
||
fi
|
||
fi
|
||
|
||
# Homebrew
|
||
brew_version=`brew -v 2>/dev/null`
|
||
if test "$?" -eq 0; then
|
||
brew_version="`echo "${brew_version}" | sed -ne 's/Homebrew \([0-9.]*\)/\1/gp'`"
|
||
echo_n "You seem to be running Homebrew version ${brew_version}..."
|
||
|
||
brew_prefix=`brew --prefix`
|
||
|
||
echo "adding ${brew_prefix} to paths"
|
||
|
||
LDFLAGS="-L${brew_prefix}/lib $LDFLAGS"
|
||
CXXFLAGS="-I${brew_prefix}/include $CXXFLAGS"
|
||
|
||
if test -z "$_staticlibpath"; then
|
||
_staticlibpath=${brew_prefix}
|
||
echo "Set staticlib-prefix to ${_staticlibpath}"
|
||
fi
|
||
fi
|
||
|
||
# If _staticlibpath is not set yet try first /sw (fink) then /usr/local
|
||
# (the macports case is handled above).
|
||
if test -z "$_staticlibpath"; then
|
||
if test -d "/sw"; then
|
||
_staticlibpath=/sw
|
||
echo "Set staticlib-prefix to ${_staticlibpath}"
|
||
elif test -d "/usr/local"; then
|
||
_staticlibpath=/usr/local
|
||
echo "Set staticlib-prefix to ${_staticlibpath}"
|
||
else
|
||
echo "Could not determine prefix for static libraries"
|
||
fi
|
||
fi
|
||
|
||
# If _xcodetoolspath is not set yet use xcode-select to get the path
|
||
if test -z "$_xcodetoolspath"; then
|
||
_xcodetoolspath=`xcode-select -print-path`/Tools
|
||
if test -d "$_xcodetoolspath"; then
|
||
echo "Set xcodetools-path to ${_xcodetoolspath}"
|
||
else
|
||
_xcodetoolspath=
|
||
echo "Could not determine path for Xcode Tools"
|
||
fi
|
||
fi
|
||
;;
|
||
freebsd*)
|
||
LDFLAGS="$LDFLAGS -L/usr/local/lib"
|
||
CXXFLAGS="$CXXFLAGS -I/usr/local/include"
|
||
;;
|
||
haiku*)
|
||
DEFINES="$DEFINES -DSYSTEM_NOT_SUPPORTING_D_TYPE"
|
||
# Needs -lnetwork for the timidity MIDI driver
|
||
LIBS="$LIBS -lnetwork"
|
||
_seq_midi=no
|
||
;;
|
||
irix*)
|
||
DEFINES="$DEFINES -DIRIX"
|
||
DEFINES="$DEFINES -DSYSTEM_NOT_SUPPORTING_D_TYPE"
|
||
LIBS="$LIBS -lmd -lfastm -lm"
|
||
_ranlib=:
|
||
;;
|
||
linux* | uclinux*)
|
||
# When not cross-compiling, enable large file support, but don't
|
||
# care if getconf doesn't exist or doesn't recognize LFS_CFLAGS.
|
||
if test -z "$_host"; then
|
||
CXXFLAGS="$CXXFLAGS $(getconf LFS_CFLAGS 2>/dev/null)"
|
||
fi
|
||
;;
|
||
mingw*)
|
||
DEFINES="$DEFINES -DWIN32"
|
||
# append_var DEFINES "-D__USE_MINGW_ANSI_STDIO=0" # Modern MinGW does not need it
|
||
LDFLAGS="$LDFLAGS -static-libgcc -static-libstdc++"
|
||
LIBS="$LIBS -lmingw32 -lwinmm"
|
||
OBJS="$OBJS scummvmtoolswinres.o"
|
||
add_line_to_config_mk 'WIN32 = 1'
|
||
;;
|
||
mint*)
|
||
DEFINES="$DEFINES -DSYSTEM_NOT_SUPPORTING_D_TYPE"
|
||
;;
|
||
morphos*)
|
||
LDFLAGS="$LDFLAGS -L/usr/local/lib -noixemul"
|
||
CXXFLAGS="$CXXFLAGS -D__MORPHOS_SHAREDLIBS"
|
||
# We have to use 'long' for our 4 byte typedef because MorphOS already typedefs (u)int32
|
||
# as (unsigned) long, and consequently we'd get a compiler error otherwise.
|
||
type_4_byte='long'
|
||
add_line_to_config_mk 'MORPHOS = 1'
|
||
;;
|
||
riscos)
|
||
DEFINES="$DEFINES -DRISCOS"
|
||
add_line_to_config_mk 'RISCOS = 1'
|
||
LDFLAGS="$LDFLAGS -L$GCCSDK_INSTALL_ENV/lib"
|
||
CXXFLAGS="$CXXFLAGS -I$GCCSDK_INSTALL_ENV/include"
|
||
_pkgconfig=$GCCSDK_INSTALL_ENV/ro-pkg-config
|
||
_wxconfig=$GCCSDK_INSTALL_ENV/bin/wx-config
|
||
_freetypepath=$GCCSDK_INSTALL_ENV/bin
|
||
LDFLAGS="$LDFLAGS -static"
|
||
;;
|
||
solaris*)
|
||
DEFINES="$DEFINES -DSOLARIS"
|
||
DEFINES="$DEFINES -DSYSTEM_NOT_SUPPORTING_D_TYPE"
|
||
# Needs -lbind -lsocket for the timidity MIDI driver
|
||
LIBS="$LIBS -lnsl -lsocket"
|
||
;;
|
||
esac
|
||
|
||
if test -n "$_host"; then
|
||
# Cross-compiling mode - add your target here if needed
|
||
echo "Cross-compiling to $_host"
|
||
case "$_host" in
|
||
arm-linux|arm*-linux-gnueabi|arm-*-linux)
|
||
;;
|
||
arm-*riscos)
|
||
# toolchain binaries prefixed by host
|
||
_ranlib=$_host-ranlib
|
||
_strip=$_host-strip
|
||
_ar="$_host-ar cru"
|
||
_as="$_host-as"
|
||
;;
|
||
*darwin*)
|
||
_ranlib=$_host-ranlib
|
||
_strip=$_host-strip
|
||
;;
|
||
linupy)
|
||
DEFINES="$DEFINES -DLINUPY"
|
||
;;
|
||
m68k-atari-mint)
|
||
DEFINES="$DEFINES -DSYSTEM_NOT_SUPPORTING_D_TYPE"
|
||
_ranlib=m68k-atari-mint-ranlib
|
||
_ar="m68k-atari-mint-ar cru"
|
||
;;
|
||
*mingw32*)
|
||
_windres=$_host-windres
|
||
_ar="$_host-ar cru"
|
||
_ranlib=$_host-ranlib
|
||
;;
|
||
mips-sgi*)
|
||
LDFLAGS="$LDFLAGS -static-libgcc"
|
||
LIBS="$LIBS -laudio"
|
||
;;
|
||
ppc-amigaos|ppc-morphos)
|
||
# Only static builds link successfully on buildbot
|
||
LDFLAGS=`echo $LDFLAGS | sed 's/-use-dynld//'`
|
||
LDFLAGS="$LDFLAGS -static"
|
||
|
||
# toolchain binaries prefixed by host
|
||
_ranlib=$_host-ranlib
|
||
_strip=$_host-strip
|
||
_ar="$_host-ar cru"
|
||
_as="$_host-as"
|
||
_windres=$_host-windres
|
||
;;
|
||
raspberrypi)
|
||
# This is needed because the official cross compiler doesn't have multiarch enabled
|
||
# but Raspbian does.
|
||
# Be careful as it's the linker (LDFLAGS) which must know about sysroot.
|
||
# These are needed to build against Raspbian's libSDL.
|
||
LDFLAGS="$LDFLAGS --sysroot=$RPI_ROOT"
|
||
LDFLAGS="$LDFLAGS -B$RPI_ROOT/usr/lib/arm-linux-gnueabihf"
|
||
LDFLAGS="$LDFLAGS -Xlinker --rpath-link=$RPI_ROOT/usr/lib/arm-linux-gnueabihf/pulseaudio"
|
||
LDFLAGS="$LDFLAGS -Xlinker --rpath-link=$RPI_ROOT/usr/lib/arm-linux-gnueabihf"
|
||
LDFLAGS="$LDFLAGS -Xlinker --rpath-link=$RPI_ROOT/lib/arm-linux-gnueabihf"
|
||
LDFLAGS="$LDFLAGS -Xlinker --rpath-link=$RPI_ROOT/opt/vc/lib"
|
||
LDFLAGS="$LDFLAGS -L$RPI_ROOT/opt/vc/lib"
|
||
CXXFLAGS="$CXXFLAGS -isystem $RPI_ROOT/usr/include/arm-linux-gnueabihf"
|
||
CXXFLAGS="$CXXFLAGS -I$RPI_ROOT/usr/include"
|
||
# This is so optional OpenGL ES includes are found.
|
||
CXXFLAGS="$CXXFLAGS -I$RPI_ROOT/opt/vc/include"
|
||
;;
|
||
*)
|
||
echo "WARNING: Unknown target, continuing with auto-detected values"
|
||
;;
|
||
esac
|
||
fi
|
||
|
||
#
|
||
# Determine whether host is POSIX compliant, or at least POSIX
|
||
# compatible enough to support our POSIX code (including dlsym(),
|
||
# mkdir() and some other APIs).
|
||
#
|
||
# TODO: Instead of basing this on the host name, we should really base
|
||
# this on the presence of features (such as the dlsym and mkdir APIs).
|
||
#
|
||
echo_n "Checking if host is POSIX compliant... "
|
||
case $_host_os in
|
||
amigaos* | cygwin* | dreamcast | ds | gamecube | mingw* | morphos* | n64 | ps2 | psp | wii | wince)
|
||
_posix=no
|
||
;;
|
||
android | beos* | bsd* | darwin* | freebsd* | gph-linux | haiku* | hpux* | iphone | irix* | linux* | mint* | netbsd* | openbsd* | riscos | solaris* | sunos* | uclinux* | webos)
|
||
_posix=yes
|
||
;;
|
||
os2-emx*)
|
||
_posix=yes # FIXME: Really???
|
||
;;
|
||
*)
|
||
# given this is a shell script, we might assume some type of posix.
|
||
# However, the host system might be a totally different one, so
|
||
# we can assume nothing about it.
|
||
# Indeed, as mentioned further above, we really should test for the
|
||
# presences of relevant APIs on the host anyway...
|
||
_posix=no
|
||
;;
|
||
esac
|
||
echo $_posix
|
||
|
||
if test "$_posix" = yes ; then
|
||
DEFINES="$DEFINES -DPOSIX"
|
||
add_line_to_config_mk 'POSIX = 1'
|
||
fi
|
||
|
||
#
|
||
# Check whether to enable a verbose build
|
||
#
|
||
echo_n "Checking whether to have a verbose build... "
|
||
echo "$_verbose_build"
|
||
add_to_config_mk_if_yes "$_verbose_build" 'VERBOSE_BUILD = 1'
|
||
|
||
#
|
||
# Check for math lib
|
||
#
|
||
cat > $TMPC << EOF
|
||
int main(void) { return 0; }
|
||
EOF
|
||
cc_check -lm && LDFLAGS="$LDFLAGS -lm"
|
||
|
||
#
|
||
# Check for pkg-config
|
||
#
|
||
echocheck "pkg-config"
|
||
_pkg_config=no
|
||
command -v $_pkgconfig >/dev/null 2>&1 && _pkg_config=yes
|
||
echo "$_pkg_config"
|
||
|
||
if test "$_pkg_config" = yes && test -n "$_host" && test -z "$PKG_CONFIG_LIBDIR"; then
|
||
echo "WARNING: When cross-compiling PKG_CONFIG_LIBDIR must be set to the location of the .pc files for the target"
|
||
fi
|
||
|
||
#
|
||
# Check for Ogg Vorbis
|
||
#
|
||
echocheck "Ogg Vorbis"
|
||
if test "$_vorbis" = auto ; then
|
||
_vorbis=no
|
||
cat > $TMPC << EOF
|
||
#include <vorbis/codec.h>
|
||
int main(void) { vorbis_packet_blocksize(0,0); return 0; }
|
||
EOF
|
||
cc_check $OGG_CFLAGS $OGG_LIBS $VORBIS_CFLAGS $VORBIS_LIBS \
|
||
-lvorbisfile -lvorbis -logg && _vorbis=yes
|
||
fi
|
||
if test "$_vorbis" = yes ; then
|
||
LIBS="$LIBS $OGG_LIBS $VORBIS_LIBS -lvorbisfile -lvorbis -lvorbisenc -logg"
|
||
INCLUDES="$INCLUDES $OGG_CFLAGS $VORBIS_CFLAGS"
|
||
fi
|
||
define_in_config_if_yes "$_vorbis" 'USE_VORBIS'
|
||
echo "$_vorbis"
|
||
|
||
#
|
||
# Check for Tremor
|
||
#
|
||
echocheck "Tremor"
|
||
if test "$_tremor" = auto ; then
|
||
_tremor=no
|
||
cat > $TMPC << EOF
|
||
#include <tremor/ivorbiscodec.h>
|
||
int main(void) { vorbis_info_init(0); return 0; }
|
||
EOF
|
||
cc_check $TREMOR_CFLAGS $TREMOR_LIBS -lvorbisidec && \
|
||
_tremor=yes
|
||
fi
|
||
if test "$_tremor" = yes && test "$_vorbis" = no; then
|
||
add_line_to_config_h '#define USE_TREMOR'
|
||
add_line_to_config_h '#define USE_VORBIS'
|
||
LIBS="$LIBS $TREMOR_LIBS -lvorbisenc"
|
||
INCLUDES="$INCLUDES $TREMOR_CFLAGS"
|
||
else
|
||
if test "$_vorbis" = yes; then
|
||
_tremor="no (Ogg Vorbis/Tremor support is mutually exclusive)"
|
||
fi
|
||
add_line_to_config_h '#undef USE_TREMOR'
|
||
fi
|
||
add_to_config_mk_if_yes "$_tremor" 'USE_TREMOR = 1'
|
||
echo "$_tremor"
|
||
|
||
#
|
||
# Check for FLAC
|
||
#
|
||
echocheck "FLAC >= 1.1.3"
|
||
if test "$_flac" = auto ; then
|
||
_flac=no
|
||
cat > $TMPC << EOF
|
||
#include <FLAC/format.h>
|
||
#include <FLAC/stream_encoder.h>
|
||
FLAC__StreamEncoderInitStatus x;
|
||
int main(void) { return FLAC__STREAM_SYNC_LEN >> 30; /* guaranteed to be 0 */ }
|
||
EOF
|
||
if test "$_vorbis" = yes ; then
|
||
cc_check $FLAC_CFLAGS $FLAC_LIBS $OGG_CFLAGS $OGG_LIBS \
|
||
-lFLAC -logg && _flac=yes
|
||
else
|
||
cc_check $FLAC_CFLAGS $FLAC_LIBS \
|
||
-lFLAC && _flac=yes
|
||
fi
|
||
fi
|
||
if test "$_flac" = yes ; then
|
||
if test "$_vorbis" = yes ; then
|
||
LIBS="$LIBS $FLAC_LIBS $OGG_LIBS -lFLAC -logg"
|
||
else
|
||
LIBS="$LIBS $FLAC_LIBS -lFLAC"
|
||
fi
|
||
case $_host_os in
|
||
amigaos*)
|
||
LIBS="$LIBS -lpthread"
|
||
;;
|
||
esac
|
||
INCLUDES="$INCLUDES $FLAC_CFLAGS"
|
||
fi
|
||
define_in_config_if_yes "$_flac" 'USE_FLAC'
|
||
echo "$_flac"
|
||
|
||
#
|
||
# Check for MAD (MP3 library)
|
||
#
|
||
echocheck "MAD"
|
||
if test "$_mad" = auto ; then
|
||
_mad=no
|
||
cat > $TMPC << EOF
|
||
#include <mad.h>
|
||
int main(void) { return 0; }
|
||
EOF
|
||
cc_check $MAD_CFLAGS $MAD_LIBS -lmad && _mad=yes
|
||
fi
|
||
if test "$_mad" = yes ; then
|
||
LIBS="$LIBS $MAD_LIBS -lmad"
|
||
INCLUDES="$INCLUDES $MAD_CFLAGS"
|
||
fi
|
||
define_in_config_if_yes "$_mad" 'USE_MAD'
|
||
echo "$_mad"
|
||
|
||
#
|
||
# Check for PNG
|
||
#
|
||
echocheck "PNG >= 1.2.8"
|
||
if test "$_pkg_config" = "yes" && $_pkgconfig --exists libpng; then
|
||
PNG_LIBS="$PNG_LIBS `$_pkgconfig --libs libpng`"
|
||
PNG_CFLAGS="$PNG_CFLAGS `$_pkgconfig --cflags libpng`"
|
||
else
|
||
PNG_LIBS="$PNG_LIBS -lpng -lz"
|
||
fi
|
||
if test "$_png" = auto ; then
|
||
_png=no
|
||
cat > $TMPC << EOF
|
||
#include <png.h>
|
||
int main(void) {
|
||
#if PNG_LIBPNG_VER >= 10208
|
||
#else
|
||
syntax error
|
||
#endif
|
||
return 0;
|
||
}
|
||
EOF
|
||
cc_check $PNG_CFLAGS $PNG_LIBS && _png=yes
|
||
fi
|
||
if test "$_png" = yes ; then
|
||
LIBS="$LIBS $PNG_LIBS"
|
||
INCLUDES="$INCLUDES $PNG_CFLAGS"
|
||
fi
|
||
define_in_config_if_yes "$_png" 'USE_PNG'
|
||
echo "$_png"
|
||
|
||
#
|
||
# Check for ZLib
|
||
#
|
||
echocheck "zlib"
|
||
if test "$_zlib" = auto ; then
|
||
_zlib=no
|
||
cat > $TMPC << EOF
|
||
#include <string.h>
|
||
#include <zlib.h>
|
||
int main(void) { return strcmp(ZLIB_VERSION, zlibVersion()); }
|
||
EOF
|
||
cc_check $ZLIB_CFLAGS $ZLIB_LIBS -lz && _zlib=yes
|
||
fi
|
||
if test "$_zlib" = yes ; then
|
||
LIBS="$LIBS $ZLIB_LIBS -lz"
|
||
INCLUDES="$INCLUDES $ZLIB_CFLAGS"
|
||
fi
|
||
define_in_config_if_yes "$_zlib" 'USE_ZLIB'
|
||
echo "$_zlib"
|
||
|
||
#
|
||
# Check for FreeType2 to be present
|
||
#
|
||
find_freetype() {
|
||
# Wrapper function which tries to find freetype
|
||
# either by calling freetype-config or by using
|
||
# pkg-config.
|
||
# As of freetype-2.9.1 the freetype-config file
|
||
# no longer gets installed by default.
|
||
if test "$_pkg_config" = "yes" && $_pkgconfig --exists freetype2; then
|
||
FREETYPE2_LIBS=`$_pkgconfig --libs freetype2`
|
||
FREETYPE2_CFLAGS=`$_pkgconfig --cflags freetype2`
|
||
FREETYPE2_STATIC_LIBS=`$_pkgconfig --static --libs freetype2`
|
||
_freetype_found="true"
|
||
else
|
||
# Look for the freetype-config script
|
||
find_freetypeconfig
|
||
if test -n "$_freetypeconfig"; then
|
||
# Since 2.3.12, freetype-config prepends $SYSROOT to everything.
|
||
# This means we can't pass it a --prefix that includes $SYSROOT.
|
||
freetypeprefix="$_freetypepath"
|
||
if test -n "$SYSROOT" -a "$SYSROOT" != "/"; then
|
||
teststring=VeryImplausibleSysrootX1Y2Z3
|
||
if ( env SYSROOT=/$teststring "$_freetypeconfig" --cflags | grep $teststring 2> /dev/null > /dev/null ); then
|
||
echo "Adapting FreeType prefix to SYSROOT" >> "$TMPLOG"
|
||
freetypeprefix="${freetypeprefix##$SYSROOT}"
|
||
fi
|
||
fi
|
||
FREETYPE2_LIBS=`$_freetypeconfig --prefix="$freetypeprefix" --libs`
|
||
FREETYPE2_CFLAGS=`$_freetypeconfig --prefix="$freetypeprefix" --cflags`
|
||
FREETYPE2_STATIC_LIBS=`$_freetypeconfig --prefix="$freetypeprefix" --static --libs 2>/dev/null`
|
||
_freetype_found="true"
|
||
fi
|
||
fi
|
||
}
|
||
|
||
if test "$_freetype2" != "no"; then
|
||
find_freetype
|
||
if test $_freetype_found != true; then
|
||
_freetype2=no
|
||
else
|
||
if test "$_freetype2" = "auto"; then
|
||
_freetype2=no
|
||
|
||
cat > $TMPC << EOF
|
||
#include <ft2build.h>
|
||
#include FT_FREETYPE_H
|
||
|
||
int main(int argc, char *argv[]) {
|
||
FT_Library library;
|
||
FT_Error error = FT_Init_FreeType(&library);
|
||
FT_Done_FreeType(library);
|
||
}
|
||
EOF
|
||
|
||
cc_check_no_clean $FREETYPE2_CFLAGS $FREETYPE2_LIBS && _freetype2=yes
|
||
# Modern freetype-config scripts accept --static to get all
|
||
# required flags for static linking. We abuse this to detect
|
||
# FreeType2 builds which are static themselves.
|
||
if test "$_freetype2" != "yes"; then
|
||
FREETYPE2_LIBS="$FREETYPE2_STATIC_LIBS"
|
||
cc_check_no_clean $FREETYPE2_CFLAGS $FREETYPE2_LIBS && _freetype2=yes
|
||
fi
|
||
cc_check_clean
|
||
fi
|
||
|
||
if test "$_freetype2" = "yes"; then
|
||
LIBS="$LIBS $FREETYPE2_LIBS"
|
||
CXXFLAGS="$CXXFLAGS $FREETYPE2_CFLAGS"
|
||
fi
|
||
fi
|
||
|
||
fi
|
||
|
||
echocheck "FreeType2"
|
||
echo "$_freetype2"
|
||
|
||
define_in_config_if_yes "$_freetype2" "USE_FREETYPE2"
|
||
|
||
#
|
||
# Check for Boost
|
||
#
|
||
echocheck "Boost => 1.32.0"
|
||
if test "$_boost" = auto ; then
|
||
_boost=no
|
||
cat > $TMPC << EOF
|
||
#include <iostream>
|
||
#include <boost/version.hpp>
|
||
int main(void) { if (BOOST_VERSION < 103200) return 1; return 0; }
|
||
EOF
|
||
cc_check $BOOST_CFLAGS $BOOST_LIBS && _boost=yes
|
||
fi
|
||
echo "$_boost"
|
||
|
||
if test "$_boost" = yes ; then
|
||
_boost=no
|
||
echo_n "Checking whether Boost.ProgramOptions has been compiled... "
|
||
cat > $TMPC << EOF
|
||
#include <boost/program_options.hpp>
|
||
int main(void) { boost::program_options::options_description generic("Generic options"); return 0; }
|
||
EOF
|
||
cc_check $BOOST_CFLAGS $BOOST_LIBS -lboost_program_options && _boost=yes
|
||
add_to_config_mk_if_yes "$_boost" 'BOOST_SUFFIX = '
|
||
|
||
# If not working without suffix, try -mt suffix
|
||
if test "$_boost" = no ; then
|
||
cc_check $BOOST_CFLAGS $BOOST_LIBS -lboost_program_options-mt && _boost=yes
|
||
add_to_config_mk_if_yes "$_boost" 'BOOST_SUFFIX = -mt'
|
||
fi
|
||
add_to_config_mk_if_yes "$_boost" 'USE_BOOST = 1'
|
||
echo "$_boost"
|
||
fi
|
||
|
||
#
|
||
# Check for iconv
|
||
#
|
||
echo_n "Checking whether iconv.h is present... "
|
||
if test "$_iconv" = auto ; then
|
||
_iconv=no
|
||
cat > $TMPC << EOF
|
||
#include <iconv.h>
|
||
int main(int, char **) {
|
||
return 0;
|
||
}
|
||
EOF
|
||
cc_check && _iconv=yes
|
||
fi
|
||
|
||
create_iconv_test() {
|
||
cat > $TMPC << EOF
|
||
#include <iconv.h>
|
||
int main(int, char **) {
|
||
iconv_t iconv = iconv_open("UTF-32", "SJIS");
|
||
iconv_close(iconv);
|
||
return 0;
|
||
}
|
||
EOF
|
||
}
|
||
echo "$_iconv"
|
||
|
||
if test "$_iconv" = yes ; then
|
||
echo_n "Checking whether iconv needs linking against libiconv... "
|
||
|
||
needs_iconvlib='auto'
|
||
create_iconv_test
|
||
cc_check -liconv && needs_iconvlib='yes'
|
||
# We do check linking without -liconv here too, just in case
|
||
# it would fail otherwise too
|
||
create_iconv_test
|
||
cc_check && needs_iconvlib='no'
|
||
|
||
if test "$needs_iconvlib" = auto ; then
|
||
_iconv=no
|
||
echo "does not link at all"
|
||
else
|
||
if test "$needs_iconvlib" = yes ; then
|
||
_iconvlibs='-liconv'
|
||
else
|
||
_iconvlibs=''
|
||
fi
|
||
echo "$needs_iconvlib"
|
||
|
||
echo_n "Checking signature of iconv... "
|
||
uses_const=no
|
||
|
||
cat > $TMPC << EOF
|
||
#include <iconv.h>
|
||
int main(int argc, char **argv) {
|
||
iconv_t iconvP;
|
||
const char **inbuf = 0;
|
||
iconv(iconvP, inbuf, 0, 0, 0);
|
||
return 0;
|
||
}
|
||
EOF
|
||
cc_check $_iconvlibs && uses_const=yes
|
||
|
||
if test "$uses_const" = yes ; then
|
||
echo "iconv_t, const char **, size_t *, char **, size_t *"
|
||
_iconvcflags='-DICONV_USES_CONST'
|
||
else
|
||
echo "iconv_t, char **, size_t *, char **, size_t *"
|
||
_iconvcflags='-UICONV_USES_CONST'
|
||
fi
|
||
fi
|
||
fi
|
||
|
||
echocheck "iconv"
|
||
define_in_config_if_yes "$_iconv" 'USE_ICONV'
|
||
echo "$_iconv"
|
||
|
||
#
|
||
# Check for wxWidgets
|
||
#
|
||
if test "$_wxwidgets" = auto ; then
|
||
_wxwidgets=no
|
||
find_wxconfig
|
||
if test -n "$_wxconfig"; then
|
||
_wxwidgets=yes
|
||
fi
|
||
fi
|
||
|
||
if test "$_wxwidgets" = yes ; then
|
||
_wxincludes="`$_wxconfig --prefix="$_wxpath" --cflags`"
|
||
_wxlibs="`$_wxconfig --prefix="$_wxpath" --libs`"
|
||
_wxstaticlibs="`$_wxconfig --prefix="$_wxpath" --static --libs 2> /dev/null`"
|
||
_wxstaticlibs=`echo $_wxstaticlibs | sed 's|-lpng||' | sed 's|-lz||'`
|
||
# _wxstaticlibs may contain non-static libraries that we also have in _wxstaticlibs.
|
||
# remove those to avoid dependency on non-static libraries
|
||
|
||
if test "$have_gcc" = yes ; then
|
||
if test "$_cxx_major" -ge "8" ; then
|
||
# These warnings appear a lot in wx headers
|
||
_wxincludes="$_wxincludes -Wno-deprecated-copy -Wno-cast-function-type -Wno-cast-qual"
|
||
fi
|
||
fi
|
||
# Use the compiler specified by wx-config when not cross-compiling. This is needed on some systems to get a working executable.
|
||
if test -z "$_host"; then
|
||
CXX="`$_wxconfig --cxx`"
|
||
LD=$CXX
|
||
fi
|
||
|
||
echo_n "Checking for wxwidgets gui dev component... "
|
||
has_wx_gui_dev=no
|
||
|
||
cat > $TMPC << EOF
|
||
#include <wx/wx.h>
|
||
|
||
class Foo : public wxFrame {
|
||
public:
|
||
Foo(const wxString& title) : wxFrame(NULL, wxID_ANY, title) {}
|
||
};
|
||
|
||
class FooApp : public wxApp {
|
||
public:
|
||
virtual bool OnInit();
|
||
};
|
||
|
||
IMPLEMENT_APP(FooApp)
|
||
|
||
bool FooApp::OnInit() {
|
||
Foo *foo = new Foo(wxT("Foo"));
|
||
foo->Show(true);
|
||
return true;
|
||
}
|
||
EOF
|
||
cc_check $_wxincludes $_wxlibs && has_wx_gui_dev=yes
|
||
|
||
if test "$has_wx_gui_dev" = no ; then
|
||
_wxincludes=""
|
||
_wxlibs=""
|
||
_wxstaticlibs=""
|
||
_wxwidgets=no
|
||
echo "not found"
|
||
else
|
||
echo "found"
|
||
fi
|
||
|
||
fi
|
||
add_to_config_mk_if_yes "$_wxwidgets" 'USE_WXWIDGETS = 1'
|
||
|
||
|
||
#
|
||
# Figure out installation directories
|
||
#
|
||
test -z "$_bindir" && _bindir="$_prefix/bin"
|
||
test -z "$_datadir" && _datadir="$_prefix/share"
|
||
test -z "$_mandir" && _mandir="$_prefix/share/man"
|
||
test -z "$_libdir" && _libdir="$_prefix/lib"
|
||
|
||
#
|
||
# Set variables for profiling.
|
||
# We need to do it here to prevent mess-ups with the tests e.g. on the PSP
|
||
#
|
||
if test "$_enable_prof" = yes ; then
|
||
CXXFLAGS="$CXXFLAGS -pg"
|
||
LDFLAGS="$LDFLAGS -pg"
|
||
fi
|
||
|
||
_def_media_path='#define APP_MEDIA_PATH "'$_datadir'"'
|
||
|
||
echo
|
||
echo "Creating config.h"
|
||
cat > config.h << EOF
|
||
/* This file is automatically generated by configure */
|
||
/* DO NOT EDIT MANUALLY */
|
||
|
||
#ifndef CONFIG_H
|
||
#define CONFIG_H
|
||
|
||
$_config_h_data
|
||
|
||
/* paths */
|
||
$_def_media_path
|
||
|
||
/* Data types */
|
||
typedef unsigned $type_1_byte byte;
|
||
typedef unsigned int uint;
|
||
typedef unsigned $type_1_byte uint8;
|
||
typedef unsigned $type_2_byte uint16;
|
||
typedef unsigned $type_4_byte uint32;
|
||
typedef unsigned $type_8_byte uint64;
|
||
typedef signed $type_1_byte int8;
|
||
typedef signed $type_2_byte int16;
|
||
typedef signed $type_4_byte int32;
|
||
typedef signed $type_8_byte int64;
|
||
|
||
#if defined(__APPLE__) && !defined(__ppc__)
|
||
#ifndef _UINT64
|
||
#define _UINT64
|
||
#endif
|
||
#endif
|
||
|
||
#endif /* CONFIG_H */
|
||
EOF
|
||
|
||
echo "Creating config.mk"
|
||
cat > config.mk << EOF
|
||
# -------- Generated by configure -----------
|
||
|
||
CXX := $CXX
|
||
CXXFLAGS := $CXXFLAGS
|
||
LD := $LD
|
||
LIBS += $LIBS
|
||
RANLIB := $_ranlib
|
||
STRIP := $_strip
|
||
AR := $_ar
|
||
AS := $_as
|
||
ASFLAGS := $ASFLAGS
|
||
WINDRES := $_windres
|
||
WINDRESFLAGS := $WINDRESFLAGS
|
||
WIN32PATH=$_win32path
|
||
AMIGAOSPATH=$_amigaospath
|
||
MORPHOSPATH=$_morphospath
|
||
STATICLIBPATH=$_staticlibpath
|
||
XCODETOOLSPATH=$_xcodetoolspath
|
||
|
||
EXEEXT := $HOSTEXEEXT
|
||
|
||
PREFIX := $_prefix
|
||
BINDIR := $_bindir
|
||
DATADIR := $_datadir
|
||
MANDIR := $_mandir
|
||
LIBDIR := $_libdir
|
||
|
||
$_config_mk_data
|
||
|
||
INCLUDES += $INCLUDES
|
||
OBJS += $OBJS
|
||
DEFINES += $DEFINES
|
||
LDFLAGS += $LDFLAGS
|
||
|
||
WXINCLUDES := $_wxincludes
|
||
WXLIBS := $_wxlibs
|
||
WXSTATICLIBS := $_wxstaticlibs
|
||
|
||
FREETYPE2_CFLAGS := $FREETYPE2_CFLAGS
|
||
FREETYPE2_LIBS := $FREETYPE2_LIBS
|
||
|
||
ICONVLIBS := $_iconvlibs
|
||
ICONVCFLAGS := $_iconvcflags
|
||
|
||
SAVED_CONFIGFLAGS := $SAVED_CONFIGFLAGS
|
||
SAVED_LDFLAGS := $SAVED_LDFLAGS
|
||
SAVED_PKG_CONFIG_LIBDIR := $SAVED_PKG_CONFIG_LIBDIR
|
||
SAVED_CXX := $SAVED_CXX
|
||
SAVED_CXXFLAGS := $SAVED_CXXFLAGS
|
||
SAVED_CPPFLAGS := $SAVED_CPPFLAGS
|
||
SAVED_ASFLAGS := $SAVED_ASFLAGS
|
||
SAVED_WINDRESFLAGS := $SAVED_WINDRESFLAGS
|
||
EOF
|
||
|
||
#
|
||
# Create a custom Makefile when building outside the source tree
|
||
# TODO: Add a better check than just looking for 'Makefile'
|
||
#
|
||
if test ! -f Makefile.common ; then
|
||
echo "Creating Makefile"
|
||
|
||
cat > Makefile << EOF
|
||
# -------- Generated by configure -----------
|
||
srcdir = $_srcdir
|
||
vpath %.h \$(srcdir)
|
||
vpath %.cpp \$(srcdir)
|
||
vpath %.c \$(srcdir)
|
||
vpath %.m \$(srcdir)
|
||
vpath %.mm \$(srcdir)
|
||
vpath %.asm \$(srcdir)
|
||
vpath %.s \$(srcdir)
|
||
vpath %.S \$(srcdir)
|
||
include \$(srcdir)/Makefile
|
||
EOF
|
||
|
||
fi
|