#!/bin/sh # # configure -- custom configure script for ScummVM. # # ScummVM 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 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; if not, write to the Free Software # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. # # NLS nuisances. LC_ALL=C export LC_ALL LANGUAGE=C export LANGUAGE # Save the current environment variables for next runs SAVED_CONFIGFLAGS=$@ SAVED_LDFLAGS=$LDFLAGS SAVED_CXX=$CXX SAVED_CXXFLAGS=$CXXFLAGS SAVED_CPPFLAGS=$CPPFLAGS SAVED_ASFLAGS=$ASFLAGS SAVED_WINDRESFLAGS=$WINDRESFLAGS SAVED_SDL_CONFIG=$SDL_CONFIG # 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} } append_var() { VAR=${1} shift if eval test -z \"\$${VAR}\" ; then eval ${VAR}='$@' else eval ${VAR}=\"\$${VAR} \"'$@' fi } # Add an engine: id name build subengines base-games dependencies add_engine() { _engines="${_engines} ${1}" if test "${3}" = "no" ; then set_var _wip_engines "${_wip_engines} ${1}" fi set_var _engine_${1}_name "${2}" set_var _engine_${1}_build "${3}" set_var _engine_${1}_build_default "${3}" set_var _engine_${1}_subengines "${4}" set_var _engine_${1}_base "${5}" set_var _engine_${1}_deps "${6}" for sub in ${4}; do set_var _engine_${sub}_sub "yes" set_var _engine_${sub}_parent "${1}" done } # Add a feature: id name settings-list add_feature() { set_var _feature_${1}_name "${2}" # This is a list of settings, where one must be "yes" for the feature to # be enabled set_var _feature_${1}_settings "${3}" } _srcdir=`dirname $0` # Read list of engines for i in $_srcdir/engines/*/configure.engine; do . "$i" done # # Default settings # # Default lib behavior yes/no/auto _vorbis=auto _tremor=auto _tremolo=no _flac=auto _mad=auto _alsa=auto _seq_midi=auto _sndio=auto _timidity=auto _zlib=auto _mpeg2=auto _sparkle=auto _osxdockplugin=auto _jpeg=auto _png=auto _theoradec=auto _faad=auto _fluidsynth=auto _opengl_mode=auto _readline=auto _freetype2=auto _taskbar=auto _updates=no _libunity=auto # Default option behavior yes/no _debug_build=auto _release_build=auto _optimizations=auto _use_cxx11=no _verbose_build=no _text_console=no _mt32emu=yes _build_scalers=yes _build_hq_scalers=yes _enable_prof=no _global_constructors=no _bink=yes # Default vkeybd/keymapper/eventrec options _vkeybd=no _keymapper=no _eventrec=auto # GUI translation options _translation=yes # Default platform settings _backend=sdl _16bit=auto _highres=auto _savegame_timestamp=auto _dynamic_modules=no _elf_loader=no _plugins_default=static _plugin_prefix= _plugin_suffix= _nasm=auto _optimization_level= _default_optimization_level=-O2 # Default commands _ranlib=ranlib _strip=strip _ar="ar cru" _as="as" _windres=windres _stagingpath="staging" _win32path="c:/scummvm" _amigaospath="Games:ScummVM" _staticlibpath= _xcodetoolspath= _sparklepath= _sdlconfig=sdl-config _freetypeconfig=freetype-config _sdlpath="$PATH" _freetypepath="$PATH" _nasmpath="$PATH" NASMFLAGS="" NASM="" _tainted_build=no # The following variables are automatically detected, and should not # be modified otherwise. Consider them read-only. _posix=no _endian=unknown _need_memalign=yes _have_x86=no # Add (virtual) features add_feature 16bit "16bit color" "_16bit" add_feature faad "libfaad" "_faad" add_feature flac "FLAC" "_flac" add_feature freetype2 "FreeType2" "_freetype2" add_feature highres "high resolution" "_highres" add_feature mad "MAD" "_mad" add_feature jpeg "JPEG" "_jpeg" add_feature png "PNG" "_png" add_feature theoradec "libtheoradec" "_theoradec" add_feature vorbis "Vorbis file support" "_vorbis _tremor" add_feature zlib "zlib" "_zlib" # Directories for installing ScummVM. # This list is closely based on what GNU autoconf does, # although the default value for datadir differs. # Like GNU autoconf, we distinguish datadir and datarootdir # to make it possible to change e.g. the location of the # man pages independently of that of the engine data files, # which are placed inside $datadir/scummvm prefix=NONE exec_prefix=NONE bindir='${exec_prefix}/bin' libdir='${exec_prefix}/lib' datarootdir='${prefix}/share' datadir='${datarootdir}/scummvm' mandir='${datarootdir}/man' docdir='${datarootdir}/doc/scummvm' #localedir='${datarootdir}/locale' # For cross compiling _host="" _host_cpu="" _host_vendor="" _host_os="" _host_alias="" _port_mk="ports.mk" # Use temp files in the build directory TMPO=./scummvm-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" if test "-c" = "$*" ; then ( $CXX $CXXFLAGS "$TMPC" -o "$TMPO$HOSTEXEEXT" "$@" ) >> "$TMPLOG" 2>&1 else ( $CXX $LDFLAGS $CXXFLAGS "$TMPC" -o "$TMPO$HOSTEXEEXT" "$@" ) >> "$TMPLOG" 2>&1 fi 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 sdl-config # # TODO: small bit of code to test sdl usability find_sdlconfig() { echo_n "Looking for sdl-config... " sdlconfigs="$SDL_CONFIG:$_sdlconfig:sdl-config:sdl11-config:sdl12-config" _sdlconfig= IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="$SEPARATOR" for path_dir in $_sdlpath; do #reset separator to parse sdlconfigs IFS=":" for sdlconfig in $sdlconfigs; do if test -f "$path_dir/$sdlconfig" ; then _sdlconfig="$path_dir/$sdlconfig" echo $_sdlconfig # Save the prefix _sdlpath=$path_dir if test `basename $path_dir` = bin ; then _sdlpath=`dirname $path_dir` fi # break at first sdl-config found in path break 2 fi done done IFS="$ac_save_ifs" if test -z "$_sdlconfig"; then echo "none found!" exit 1 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 arm-riscos) _exeext=",ff8" ;; 3ds | 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() { if test "${3}" != "" ; then tmpopt_prefix="${3}" else tmpopt_prefix="--" fi tmpopt=`echo $1 | sed 's/_/-/g'` option=`echo "${tmpopt_prefix}${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 } # Show an error about an unknown engine engine_option_error() { echo "error: unrecognized engine: $1 Try \`$0 --help' for more information." >&2 exit 1 } # Show an error about an invalid subengine option subengine_option_error() { echo "error: this option is invalid for the subengine $1: $ac_option Try \`$0 --help' for more information." >&2 exit 1 } # # Feature handling functions # # Get the name of the feature get_feature_name() { get_var _feature_$1_name } # Check whether the feature is enabled get_feature_state() { for i in `get_var _feature_$1_settings`; do if test `get_var $i` = "yes"; then echo "yes" return fi done echo "no" } # # Engine handling functions # # Get the name of the engine get_engine_name() { get_var _engine_$1_name } # Will this engine be built? get_engine_build() { get_var _engine_$1_build } # Was this engine set to be built by default? get_engine_build_default() { get_var _engine_$1_build_default } # Get the subengines get_engine_subengines() { get_var _engine_$1_subengines } # Get the dependencies get_engine_dependencies() { get_var _engine_$1_deps } # Get the base engine game support description get_engine_base() { get_var _engine_$1_base } # Ask if this is a subengine get_engine_sub() { sub=`get_var _engine_$1_sub` if test -z "$sub" ; then sub=no fi echo $sub } # Get a subengine's parent (undefined for non-subengines) get_subengine_parent() { get_var _engine_$1_parent } # Enable *all* engines engine_enable_all() { for engine in $_engines; do set_var _engine_${engine}_build "yes" done } # Disable *all* engines engine_disable_all() { for engine in $_engines; do set_var _engine_${engine}_build "no" done } # Enable the given engine engine_enable() { # Get the parameter if ( echo $1 | grep ':' ) 2> /dev/null > /dev/null ; then eng=`echo $1 | cut -d ':' -f 1` opt=`echo $1 | cut -d ':' -f 2` else eng=$1 opt=yes fi engine=`echo $eng | sed 's/-/_/g'` # Filter the parameter for the subengines if test "`get_engine_sub ${engine}`" != "no" ; then if test "$opt" != "yes" ; then subengine_option_error ${engine} return fi parent=`get_subengine_parent ${engine}` if test `get_engine_build ${parent}` = "no" ; then set_var _engine_${parent}_build "yes" fi fi if test "$opt" = "static" -o "$opt" = "dynamic" -o "$opt" = "yes" ; then if test "`get_engine_name ${engine}`" != "" ; then set_var _engine_${engine}_build "$opt" else engine_option_error ${engine} fi else option_error fi } # Disable the given engine engine_disable() { # Filter malformed options if ( echo $1 | grep '=' ) 2> /dev/null > /dev/null ; then option_error return fi engine=`echo $1 | sed 's/-/_/g'` if test "`get_engine_name ${engine}`" != "" ; then set_var _engine_${engine}_build "no" else engine_option_error ${engine} fi } # Check whether the engine's dependencies are met # If that is not the case disable the engine check_engine_deps() { unmet_deps="" # Check whether the engine is enabled if test `get_engine_build $1` != "no" ; then # Collect unmet dependencies for dep in `get_engine_dependencies $1`; do if test `get_feature_state $dep` = "no"; then feature_name=`get_feature_name $dep` unmet_deps="${unmet_deps}${feature_name} " fi done # Check whether there is any unmet dependency if test -n "$unmet_deps"; then echo "WARNING: Disabling engine "`get_engine_name $1`" because the following dependencies are unmet: "$unmet_deps engine_disable $1 fi fi } # Show the configure help line for a given engine show_engine_help() { name=`get_engine_name $1` option_help "${1}" "${name} engine" " " for sub in `get_engine_subengines $1`; do show_subengine_help $sub $1 done } # Show the configure help line for a given subengine show_subengine_help() { name=`get_engine_name $1` parent=`get_engine_name $2` option_help "${1}" "${name} in ${parent} engine" " " } # Prepare the strings about the engines to build prepare_engine_build_strings() { string=`get_engine_build_string $1 static` if test -n "$string" ; then _engines_built_static="${_engines_built_static}#$string@" fi string=`get_engine_build_string $1 dynamic` if test -n "$string" ; then _engines_built_dynamic="${_engines_built_dynamic}#$string@" fi string=`get_engine_build_string $1 no` if test -n "$string" ; then _engines_skipped="${_engines_skipped}#$string@" fi string=`get_engine_build_string $1 wip` if test -n "$string" ; then _engines_built_wip="${_engines_built_wip}#$string@" fi } # Get the string about building an engine get_engine_build_string() { engine=$1 request_status=$2 engine_string="" engine_build=`get_engine_build $1` engine_build_default=`get_engine_build_default $engine` show=no # Convert static/dynamic to yes to ease the check of subengines if test $engine_build = no; then subengine_filter=no else subengine_filter=yes fi # Check if the current engine should be shown for the current status if test $engine_build = $request_status ; then show=yes else # Test for disabled sub-engines if test $request_status = no ; then for subeng in `get_engine_subengines $engine` ; do if test `get_engine_build $subeng` = no ; then # In this case we to display _disabled_ subengines subengine_filter=no show=yes fi done fi # Test for enabled wip sub-engines if test $request_status = wip ; then for subeng in `get_engine_subengines $engine` ; do if test `get_engine_build $subeng` != no -a `get_engine_build_default $subeng` = no ; then show=yes fi done fi fi # Check if it is a wip engine if test "$request_status" = "wip" -a "$engine_build" != "no" -a "$engine_build_default" = no; then show=yes fi # The engine should be shown, build the string if test $show = yes ; then engine_string=`get_subengines_build_string $engine $subengine_filter $request_status` engine_string="`get_engine_name $engine` $engine_string" fi echo "$engine_string" } # Get the string about building subengines get_subengines_build_string() { parent_engine=$1 subengine_filter=$2 request_status=$3 parent_engine_build_default=`get_engine_build_default $parent_engine` subengine_string="" # If the base engine isn't built at all, no need to list subengines # in any of the possible categories. if test `get_engine_build $parent_engine` = no; then return fi all=yes # If there are no subengines, never display "[all games]" (for brevity). if test -z "`get_engine_subengines $parent_engine`"; then all=no fi # If the base engine does not fit the category we're displaying here # (WIP or Skipped), we should never show "[all games]" if test "$request_status" = wip; then if test $parent_engine_build_default = yes; then all=no fi fi if test "$request_status" = no; then # If we're here, the parent engine is built, so no need to check that. all=no fi # In the static/dynamic categories, also display the engine's base games. if test -n "`get_engine_subengines $parent_engine`" -a $request_status != no -a $request_status != wip; then subengine_string="[`get_engine_base $parent_engine`]" fi for subeng in `get_engine_subengines $parent_engine` ; do subengine_build=`get_engine_build $subeng` subengine_build_default=`get_engine_build_default $subeng` # Display this subengine if it matches the filter, unless it is # a stable subengine in the WIP request. if test $subengine_build = $subengine_filter -a \! \( "$request_status" = wip -a "$subengine_build_default" = yes \) ; then s="[`get_engine_name $subeng`]" if test -n "$subengine_string"; then subengine_string="$subengine_string $s" else subengine_string="$s" fi else all=no fi done # Summarize the full list, where applicable if test $all = yes ; then subengine_string="[all games]" fi echo "$subengine_string" } # # Greet user # echo "Running ScummVM configure..." echo "Configure run on" `date` > $TMPLOG cat >> $TMPLOG <= 7) linupy for Yopy PDA maemo for Nokia Maemo motoezx for MotoEZX motomagx for MotoMAGX n64 for Nintendo 64 openpandora for OpenPandora ouya for OUYA ps2 for PlayStation 2 ps3 for PlayStation 3 psp for PlayStation Portable samsungtv for Samsung TV tizen for Samsung Tizen webos for HP Palm WebOS wii for Nintendo Wii wince for Windows CE Game engines: --enable-all-engines enable all engines, including those which are broken or unsupported --disable-all-engines disable all engines --enable-engine=[,...] enable engine(s) listed --disable-engine=[,...] disable engine(s) listed --enable-engine-static=[,...] enable engine(s) listed as static builtin (when plugins are enabled) --enable-engine-dynamic=[,...] enable engine(s) listed as dynamic plugin (when plugins are enabled) The values of for these options are as follows: $engines_help Optional Features: --enable-c++11 build as C++11 if the compiler allows that --disable-debug disable building with debugging symbols --enable-Werror treat warnings as errors --enable-release enable building in release mode (this activates optimizations) --enable-release-mode enable building in release mode (without optimizations) --enable-optimizations enable optimizations --enable-profiling enable profiling --enable-plugins enable the support for dynamic plugins --default-dynamic make plugins dynamic by default --disable-mt32emu don't enable the integrated MT-32 emulator --disable-16bit don't enable 16bit color support --disable-highres don't enable support for high resolution engines >320x240 --disable-savegame-timestamp don't use timestamps for blank savegame descriptions --disable-scalers exclude scalers --disable-hq-scalers exclude HQ2x and HQ3x scalers --disable-translation don't build support for translated messages --disable-taskbar don't build support for taskbar and launcher integration --enable-vkeybd build virtual keyboard support --enable-keymapper build key mapper support --enable-eventrecorder enable event recording functionality --disable-eventrecorder disable event recording functionality --enable-updates build support for updates --enable-text-console use text console instead of graphical console --enable-verbose-build enable regular echoing of commands during build process --disable-bink don't build with Bink video support --opengl-mode=MODE OpenGL (ES) mode to use for OpenGL output [auto] available modes: auto for autodetection none for disabling any OpenGL usage any for runtime detection gl for forcing OpenGL gles for forcing OpenGL ES gles2 for forcing OpenGL ES 2 WARNING: only specify this manually if you know what you are doing! Optional Libraries: --with-alsa-prefix=DIR Prefix where alsa is installed (optional) --disable-alsa disable ALSA midi sound support [autodetect] --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-mpeg2-prefix=DIR Prefix where libmpeg2 is installed (optional) --enable-mpeg2 enable mpeg2 codec for cutscenes [autodetect] --with-jpeg-prefix=DIR Prefix where libjpeg is installed (optional) --disable-jpeg disable JPEG decoder [autodetect] --with-png-prefix=DIR Prefix where libpng is installed (optional) --disable-png disable PNG decoder [autodetect] --with-theoradec-prefix=DIR Prefix where libtheoradec is installed (optional) --disable-theoradec disable Theora decoder [autodetect] --with-faad-prefix=DIR Prefix where libfaad is installed (optional) --disable-faad disable AAC decoder [autodetect] --with-fluidsynth-prefix=DIR Prefix where libfluidsynth is installed (optional) --disable-fluidsynth disable fluidsynth MIDI driver [autodetect] --with-sparkle-prefix=DIR Prefix where sparkle is installed (Mac OS X only - optional) --disable-sparkle disable sparkle automatic update support [Mac OS X only - autodetect] --disable-osx-dock-plugin disable the NSDockTilePlugin support [Mac OS X only - autodetect] --with-sdl-prefix=DIR Prefix where the sdl-config script is installed (optional) --with-freetype2-prefix=DIR Prefix where the freetype-config script is installed (optional) --disable-freetype2 disable freetype2 TTF library usage [autodetect] --with-nasm-prefix=DIR Prefix where nasm executable is installed (optional) --disable-nasm disable assembly language optimizations [autodetect] --with-readline-prefix=DIR Prefix where readline is installed (optional) --disable-readline disable readline support in text console [autodetect] --with-libunity-prefix=DIR Prefix where libunity is installed (optional) --disable-libunity disable Unity launcher integration [autodetect] --with-sndio-prefix=DIR Prefix where sndio is installed (optional) --disable-sndio disable sndio MIDI driver [autodetect] Some influential environment variables: LDFLAGS linker flags, e.g. -L if you have libraries in a nonstandard directory CXX C++ compiler command CXXFLAGS C++ compiler flags CPPFLAGS C++ preprocessor flags, e.g. -I if you have headers in a nonstandard directory ASFLAGS assembler flags WINDRESFLAGS Windows resource compiler flags EOF exit 0 fi done # for parm in ... for ac_option in $@; do case "$ac_option" in --disable-16bit) _16bit=no ;; --enable-highres) _highres=yes ;; --disable-highres) _highres=no ;; --disable-savegame-timestamp) _savegame_timestamp=no ;; --disable-scalers) _build_scalers=no ;; --disable-hq-scalers) _build_hq_scalers=no ;; --enable-alsa) _alsa=yes ;; --disable-alsa) _alsa=no ;; --enable-seq-midi) _seq_midi=yes ;; --disable-seq-midi) _seq_midi=no ;; --enable-sndio) _sndio=yes ;; --disable-sndio) _sndio=no ;; --enable-timidity) _timidity=yes ;; --disable-timidity) _timidity=no ;; --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-sparkle) _sparkle=yes ;; --disable-sparkle) _sparkle=no ;; --enable-osx-dock-plugin) _osxdockplugin=yes;; --disable-osx-dock-plugin) _osxdockplugin=no;; --enable-nasm) _nasm=yes ;; --disable-nasm) _nasm=no ;; --enable-mpeg2) _mpeg2=yes ;; --disable-mpeg2) _mpeg2=no ;; --disable-jpeg) _jpeg=no ;; --enable-jpeg) _jpeg=yes ;; --disable-png) _png=no ;; --enable-png) _png=yes ;; --disable-theoradec) _theoradec=no ;; --enable-theoradec) _theoradec=yes ;; --disable-faad) _faad=no ;; --enable-faad) _faad=yes ;; --disable-fluidsynth) _fluidsynth=no ;; --enable-readline) _readline=yes ;; --disable-readline) _readline=no ;; --enable-freetype2) _freetype2=yes ;; --disable-freetype2) _freetype2=no ;; --enable-taskbar) _taskbar=yes ;; --disable-taskbar) _taskbar=no ;; --enable-updates) _updates=yes ;; --disable-updates) _updates=no ;; --enable-libunity) _libunity=yes ;; --disable-libunity) _libunity=no ;; --enable-bink) _bink=yes ;; --disable-bink) _bink=no ;; --opengl-mode=*) _opengl_mode=`echo $ac_option | cut -d '=' -f 2` ;; --enable-verbose-build) _verbose_build=yes ;; --enable-plugins) _dynamic_modules=yes ;; --default-dynamic) _plugins_default=dynamic ;; --enable-mt32emu) _mt32emu=yes ;; --disable-mt32emu) _mt32emu=no ;; --enable-translation) _translation=yes ;; --disable-translation) _translation=no ;; --enable-vkeybd) _vkeybd=yes ;; --disable-vkeybd) _vkeybd=no ;; --enable-keymapper) _keymapper=yes ;; --disable-keymapper) _keymapper=no ;; --enable-eventrecorder) _eventrec=yes ;; --disable-eventrecorder) _eventrec=no ;; --enable-text-console) _text_console=yes ;; --disable-text-console) _text_console=no ;; --with-fluidsynth-prefix=*) arg=`echo $ac_option | cut -d '=' -f 2` FLUIDSYNTH_CFLAGS="-I$arg/include" FLUIDSYNTH_LIBS="-L$arg/lib" ;; --with-mpeg2-prefix=*) arg=`echo $ac_option | cut -d '=' -f 2` MPEG2_CFLAGS="-I$arg/include" MPEG2_LIBS="-L$arg/lib" ;; --with-alsa-prefix=*) arg=`echo $ac_option | cut -d '=' -f 2` ALSA_CFLAGS="-I$arg/include" ALSA_LIBS="-L$arg/lib" ;; --with-sndio-prefix=*) arg=`echo $ac_option | cut -d '=' -f 2` SNDIO_CFLAGS="-I$arg/include" SNDIO_LIBS="-L$arg/lib" ;; --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-jpeg-prefix=*) arg=`echo $ac_option | cut -d '=' -f 2` JPEG_CFLAGS="-I$arg/include" JPEG_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-theoradec-prefix=*) arg=`echo $ac_option | cut -d '=' -f 2` THEORADEC_CFLAGS="-I$arg/include" THEORADEC_LIBS="-L$arg/lib" ;; --with-faad-prefix=*) arg=`echo $ac_option | cut -d '=' -f 2` FAAD_CFLAGS="-I$arg/include" FAAD_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-sparkle-prefix=*) arg=`echo $ac_option | cut -d '=' -f 2` _sparklepath=$arg ;; --with-readline-prefix=*) arg=`echo $ac_option | cut -d '=' -f 2` READLINE_CFLAGS="-I$arg/include" READLINE_LIBS="-L$arg/lib" ;; --with-libunity-prefix=*) arg=`echo $ac_option | cut -d '=' -f 2` LIBUNITY_CFLAGS="-I$arg/include" LIBUNITY_LIBS="-L$arg/lib" ;; --backend=*) _backend=`echo $ac_option | cut -d '=' -f 2` ;; --enable-c++11) _use_cxx11=yes ;; --disable-c++11) _use_cxx11=no ;; --enable-debug) _debug_build=yes ;; --disable-debug) _debug_build=no ;; --enable-Werror) append_var CXXFLAGS "-Werror" ;; --enable-release-mode) _release_build=yes ;; --disable-release-mode) _release_build=no ;; --enable-release) _release_build=yes _optimizations=yes ;; --disable-release) _release_build=no _optimizations=no ;; --enable-optimizations) _optimizations=yes ;; --disable-optimizations) _optimizations=no ;; --enable-profiling) _enable_prof=yes ;; --with-sdl-prefix=*) arg=`echo $ac_option | cut -d '=' -f 2` _sdlpath="$arg:$arg/bin" ;; --with-freetype2-prefix=*) arg=`echo $ac_option | cut -d '=' -f 2` _freetypepath="$arg:$arg/bin" ;; --with-nasm-prefix=*) arg=`echo $ac_option | cut -d '=' -f 2` _nasmpath="$arg:$arg/bin" ;; --with-staticlib-prefix=*) _staticlibpath=`echo $ac_option | cut -d '=' -f 2` ;; --with-xcodetools-path=*) _xcodetoolspath=`echo $ac_option | cut -d '=' -f 2` ;; --host=*) _host=`echo $ac_option | cut -d '=' -f 2` ;; --prefix=*) prefix=`echo $ac_option | cut -d '=' -f 2` ;; --exec-prefix=*) exec_prefix=`echo $ac_option | cut -d '=' -f 2` ;; --bindir=*) bindir=`echo $ac_option | cut -d '=' -f 2` ;; --libdir=*) libdir=`echo $ac_option | cut -d '=' -f 2` ;; --datarootdir=*) datarootdir=`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` ;; --docdir=*) docdir=`echo $ac_option | cut -d '=' -f 2` ;; --enable-all-engines) engine_enable_all ;; --disable-all-engines) engine_disable_all ;; --enable-engine=* | --enable-engines=*) for engine_name in `echo $ac_option | cut -d '=' -f 2- | tr ',' '\n'`; do engine_enable "${engine_name}" done ;; --enable-engine-static=* | --enable-engines-static=*) for engine_name in `echo $ac_option | cut -d '=' -f 2- | tr ',' '\n'`; do engine_enable "${engine_name}:static" done ;; --enable-engine-dynamic=* | --enable-engines-dynamic=*) for engine_name in `echo $ac_option | cut -d '=' -f 2- | tr ',' '\n'`; do engine_enable "${engine_name}:dynamic" done ;; --disable-engine=* | --disable-engines=*) for engine_name in `echo $ac_option | cut -d '=' -f 2 | tr ',' '\n'`; do engine_disable ${engine_name} done ;; *) option_error ;; esac; done; guessed_host=`$_srcdir/config.guess` get_system_exe_extension $guessed_host NATIVEEXEEXT=$_exeext case $_host in 3ds) _host_os=3ds _host_cpu=arm _host_alias=arm-none-eabi ;; android | android-arm | android-v7a | android-arm-v7a | ouya) _host_os=android _host_cpu=arm _host_alias=arm-linux-androideabi ;; android-mips) _host_os=android _host_cpu=mipsel _host_alias=mipsel-linux-android ;; android-x86) _host_os=android _host_cpu=i686 _host_alias=i686-linux-android ;; arm-riscos) _host_os=riscos _host_cpu=arm ;; 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 ;; caanoo) _host_os=gph-linux _host_cpu=arm _host_alias=arm-none-linux-gnueabi ;; dingux | gcw0) _host_os=linux _host_cpu=mipsel _host_alias=mipsel-linux ;; dreamcast) _host_os=dreamcast _host_cpu=sh _host_alias=sh-elf append_var CXXFLAGS "-ml -m4-single-only" append_var LDFLAGS "-ml -m4-single-only" ;; ds) _host_os=ds _host_cpu=arm _host_alias=arm-eabi ;; gamecube) _host_os=gamecube _host_cpu=powerpc _host_alias=powerpc-eabi ;; 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 ;; ios7) _host_os=iphone _host_cpu=arm _host_alias=arm-apple-darwin11 ;; 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=powerpc ;; ps2) _host_os=ps2 _host_cpu=mips64r5900el _host_alias=ee # PS2 bogus dirs: they actually depend on launch medium datadir='host:data' docdir='host:docs' ;; ps3) _host_os=ps3 _host_cpu=powerpc _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 ;; samsungtv) _host_os=linux _host_cpu=arm _host_alias=arm-linux-gnueabi ;; tizen) _host_os=tizen _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=powerpc _host_alias=powerpc-eabi ;; 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 # case $_host in caanoo | gp2x | gp2xwiz | openpandora | ps2) if test "$_debug_build" = auto; then # If you want to debug one of these platforms, use '--disable-optimizations --enable-debug' _debug_build=no fi if test "$_optimizations" = auto; then # Enable optimizations by default. _optimizations=yes fi ;; esac if test "$_debug_build" != no; then # debug mode not explicitly disabled -> compile with debug information case $_host_os in amigaos*) # AmigaOS debugger uses plain stabs, with no gdb extensions. append_var CXXFLAGS "-gstabs" ;; *) # Use the system default format for debug info. append_var CXXFLAGS "-g" esac fi if test "$_release_build" = yes; then # Add a define, which indicates we are doing # an build for a release version. append_var DEFINES "-DRELEASE_BUILD" fi # # Determine extension used for executables # get_system_exe_extension $_host_os HOSTEXEPRE= HOSTEXEEXT=$_exeext # # Determine separator used for $PATH # case $_host_os in os2-emx*) SEPARATOR=";" ;; *) SEPARATOR=":" ;; esac # # Platform specific sanity checks # case $_host_os in android) if test -z "$ANDROID_SDK"; then echo "Please set ANDROID_SDK in your environment. export ANDROID_SDK=" exit 1 fi if test -z "$ANDROID_NDK"; then echo "Please set ANDROID_NDK in your environment. export ANDROID_NDK=" exit 1 fi ;; 3ds | ds | gamecube | wii) if test -z "$DEVKITPRO"; then echo "Please set DEVKITPRO in your environment. export DEVKITPRO=" exit 1 fi ;; n64) if test -z "$N64SDK"; then echo "Please set N64SDK in your environment. export N64SDK=" exit 1 fi ;; ps2) if test -z "$PS2SDK"; then echo "Please set PS2SDK in your environment. export PS2SDK=" exit 1 fi ;; ps3) if test -z "$PS3DEV"; then echo "Please set PS3DEV in your environment. export PS3DEV=" exit 1 fi if test -z "$PSL1GHT"; then echo "Please set PSL1GHT in your environment. export PSL1GHT=" exit 1 fi ;; psp) if test -z "$PSPDEV"; then PSPDEV=`psp-config --pspdev-path` fi # TODO: Should we also insist on a valid PSPDEV value? if test -z "$PSPSDK"; then PSPSDK=`psp-config --pspsdk-path` fi if test -z "$PSPSDK"; then echo "Please set PSPSDK in your environment. export PSPSDK=" exit 1 fi ;; tizen) if test -z "$TIZEN_ROOTSTRAP"; then echo "Please set TIZEN_ROOTSTRAP in your environment. export TIZEN_ROOTSTRAP=" exit 1 fi ;; webos) if test -z "$WEBOS_SDK"; then echo "Please set WEBOS_SDK in your environment. export WEBOS_SDK=" exit 1 fi if test -z "$WEBOS_PDK"; then echo "Please set WEBOS_PDK in your environment. export WEBOS_PDK=" exit 1 fi ;; *) ;; 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 -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++" 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 # # 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-destructors # detection work correctly. append_var 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" elif test "$_cxx_major" -eq 2 && test "$_cxx_minor" -ge 95 || \ test "$_cxx_major" -gt 2 ; then cxx_version="$cxx_version, ok" cxx_verc_fail=no else cxx_version="$cxx_version, bad" cxx_verc_fail=yes 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" cxx_verc_fail=yes fi echo non-gcc compiler version ${cxx_version} else cxx_version="not found" cxx_verc_fail=yes echo found non-gcc compiler version ${cxx_version} fi case $_host_os in irix*) case $cxx_version in 7.4.4*) # We just assume this is SGI MIPSpro _cxx_major=7 _cxx_minor=4 cxx_verc_fail=no add_line_to_config_mk 'CXX_UPDATE_DEP_FLAG = -MDupdate "$(*D)/$(DEPDIR)/$(*F).d"' add_line_to_config_mk '-include Makedepend' ;; *) cxx_version="$cxx_version, bad" cxx_verc_fail=yes ;; esac ;; *) cxx_version="$cxx_version, bad" cxx_verc_fail=yes ;; esac 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" echo "Please ensure you are using GCC >= 2.95" exit 1 fi # # Check whether the 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 if test "$_use_cxx11" = "yes" ; then _use_cxx11=$have_cxx11 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 >= 3.0 and for ICC. # if test "$have_gcc" = yes ; then if test "$_cxx_major" -ge "3" ; then # Try to use ANSI mode when C++11 is disabled. if test "$_use_cxx11" = "no" ; then case $_host_os in # newlib-based system include files suppress non-C89 function # declarations under __STRICT_ANSI__ 3ds | amigaos* | android | dreamcast | ds | gamecube | mingw* | n64 | psp | ps2 | ps3 | tizen | wii | wince ) ;; *) append_var CXXFLAGS "-ansi" ;; esac fi append_var CXXFLAGS "-W -Wno-unused-parameter" add_line_to_config_mk 'HAVE_GCC3 = 1' add_line_to_config_mk 'CXX_UPDATE_DEP_FLAG = -MMD -MF "$(*D)/$(DEPDIR)/$(*F).d" -MQ "$@" -MP' fi; if test "$_cxx_major" -eq 4 && test "$_cxx_minor" -ge 3 || \ test "$_cxx_major" -gt 4 ; then append_var CXXFLAGS "-Wno-empty-body" else append_var CXXFLAGS "-Wconversion" fi; elif test "$have_icc" = yes ; then add_line_to_config_mk 'CXX_UPDATE_DEP_FLAG = -MMD -MF "$(*D)/$(DEPDIR)/$(*F).d" -MQ "$@" -MP' fi; # # Update status about C++11 mode # echo_n "Building as C++11... " if test "$_use_cxx11" = "yes" ; then append_var CXXFLAGS "-std=c++11" fi echo $_use_cxx11 # 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. case $_host_os in android | gamecube | psp | tizen | wii | webos) ;; *) # ICC does not support pedantic, while GCC and clang do. if test "$have_icc" = no ; then # We *do* want the 'long long' extension. append_var CXXFLAGS "-pedantic -Wno-long-long" fi ;; esac # If possible, we want to use -Wglobal-constructors # However, not all compilers support that, so check whether the active one does. echocheck "whether -Wglobal-constructors work" cat > $TMPC << EOF int main() { return 0; } EOF cc_check -Wglobal-constructors && _global_constructors=yes if test "$_global_constructors" = yes; then append_var CXXFLAGS "-Wglobal-constructors" fi echo $_global_constructors 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 # # 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" __int64 "long long int" 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 } # # Check whether the system is 32-bit # pointer_is_32bit() { cat > tmp_pointer_is_32bit.cpp << EOF int main() { static int test_array[1 - 2 * !(sizeof(void *) == 4)]; test_array[0] = 0; return 0; } EOF $CXX $CXXFLAGS -c -o $TMPO.o tmp_pointer_is_32bit.cpp 2>/dev/null status=$? cc_check_clean tmp_pointer_is_32bit.cpp return $status } echo_n "Checking 64-bitness... " pointer_is_32bit if test $? -eq 0; then type_ptr=int32 echo "no" add_line_to_config_h "/* #define SCUMM_64BITS */" else type_ptr=int64 echo "yes" add_line_to_config_h "#define SCUMM_64BITS" fi # # 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" if test $TMPR -eq 0; then _def_64bit_type_signed="typedef signed $type_8_byte int64;" _def_64bit_type_unsigned="typedef unsigned $type_8_byte uint64;" fi # force cleanup after check for 8 bytes type cc_check_clean tmp_find_type_with_size.cpp # # 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*) # 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' # # Check the CPU architecture # echo_n "Checking host CPU architecture... " case $_host_cpu in arm*) echo "ARM" case $_host_alias in # Apple's as does not support the syntax we use in our ARM # assembly. We simply do not enable it. arm-apple-darwin9) ;; arm-apple-darwin10) ;; arm-apple-darwin11) ;; *) define_in_config_if_yes yes 'USE_ARM_SCALER_ASM' # FIXME: The following feature exhibits a bug. It produces distorted # sound since 9003ce517ff9906b0288f9f7c02197fd091d4554. The ARM # assembly will need to be properly adapted to the changes to the C # code in 8f5a7cde2f99de9fef849b0ff688906f05f4643e. # See bug #6957: "AUDIO: ARM ASM sound code causes distorted audio on 32 bit armv6" #define_in_config_if_yes yes 'USE_ARM_SOUND_ASM' define_in_config_if_yes yes 'USE_ARM_SMUSH_ASM' define_in_config_if_yes yes 'USE_ARM_GFX_ASM' # FIXME: The following feature exhibits a bug during the intro scene of Indy 4 # (on Pandora and iPhone at least) #define_in_config_if_yes yes 'USE_ARM_COSTUME_ASM' ;; esac append_var DEFINES "-DARM_TARGET" ;; i[3-6]86) echo "x86" _have_x86=yes define_in_config_h_if_yes $_have_x86 'HAVE_X86' ;; mips*) echo "MIPS" append_var DEFINES "-DMIPS_TARGET" ;; powerpc*) echo "PowerPC" append_var DEFINES "-DPPC_TARGET" ;; amd64 | x86_64) echo "x86_64" ;; *) echo "unknown ($_host_cpu)" ;; esac # # Determine build settings # echo_n "Checking hosttype... " echo $_host_os case $_host_os in 3ds) _optimization_level=-O2 append_var DEFINES "-D__3DS__" append_var DEFINES "-DARM" append_var DEFINES "-DARM11" append_var CXXFLAGS "-march=armv6k" append_var CXXFLAGS "-mtune=mpcore" append_var CXXFLAGS "-mword-relocations" append_var CXXFLAGS "-mfloat-abi=hard" append_var CXXFLAGS "-ffunction-sections" append_var CXXFLAGS "-fomit-frame-pointer" append_var CXXFLAGS "-I$DEVKITPRO/libctru/include" append_var CXXFLAGS "-I$DEVKITPRO/portlibs/3ds/include" if test "$_dynamic_modules" = no ; then append_var LDFLAGS "-Wl,--gc-sections" else append_var LDFLAGS "-Wl,--no-gc-sections" fi append_var LDFLAGS "-L$DEVKITPRO/portlibs/3ds/lib" append_var LIBS "-lcitro3d -lctru" ;; amigaos*) append_var LDFLAGS "-Wl,--export-dynamic" append_var LDFLAGS "-L/sdk/local/newlib/lib" # We have to use 'long' for our 4 byte typedef because AmigaOS already typedefs (u)int32 # as (unsigned) long, and consequently we'd get a compiler error otherwise. type_4_byte='long' # Supress format warnings as the long 4 byte causes noisy warnings. append_var CXXFLAGS "-Wno-format" add_line_to_config_mk 'AMIGAOS = 1' _port_mk="backends/platform/sdl/amigaos/amigaos.mk" ;; android) case $_host in android | android-arm) append_var CXXFLAGS "-march=armv5te" append_var CXXFLAGS "-mtune=xscale" append_var CXXFLAGS "-msoft-float" ABI="armeabi" ANDROID_PLATFORM=4 ANDROID_PLATFORM_ARCH="arm" ;; android-v7a | android-arm-v7a) append_var CXXFLAGS "-march=armv7-a" append_var CXXFLAGS "-mfloat-abi=softfp" append_var CXXFLAGS "-mfpu=vfp" append_var LDFLAGS "-Wl,--fix-cortex-a8" ABI="armeabi-v7a" ANDROID_PLATFORM=4 ANDROID_PLATFORM_ARCH="arm" ;; android-mips) append_var CXXFLAGS "-march=mips32" append_var CXXFLAGS "-mtune=mips32" ABI="mips" # Platform version 9 is needed as earlier versions of platform do not support this arch. ANDROID_PLATFORM=9 ANDROID_PLATFORM_ARCH="mips" ;; android-x86) append_var CXXFLAGS "-march=i686" append_var CXXFLAGS "-mtune=i686" ABI="x86" # Platform version 9 is needed as earlier versions of platform do not support this arch. ANDROID_PLATFORM=9 ANDROID_PLATFORM_ARCH="x86" ;; ouya) append_var CXXFLAGS "-march=armv7-a" append_var CXXFLAGS "-mtune=cortex-a9" append_var CXXFLAGS "-mfloat-abi=softfp" append_var CXXFLAGS "-mfpu=neon" ABI="armeabi-v7a" ANDROID_PLATFORM=4 ANDROID_PLATFORM_ARCH="arm" ;; esac # Setup platform version and arch append_var CXXFLAGS "--sysroot=$ANDROID_NDK/platforms/android-$ANDROID_PLATFORM/arch-$ANDROID_PLATFORM_ARCH" append_var LDFLAGS "--sysroot=$ANDROID_NDK/platforms/android-$ANDROID_PLATFORM/arch-$ANDROID_PLATFORM_ARCH" append_var CXXFLAGS "-fpic" append_var CXXFLAGS "-ffunction-sections" append_var CXXFLAGS "-funwind-tables" if test "$_debug_build" = yes; then append_var CXXFLAGS "-fno-omit-frame-pointer" append_var CXXFLAGS "-fno-strict-aliasing" else append_var CXXFLAGS "-fomit-frame-pointer" append_var CXXFLAGS "-fstrict-aliasing" fi append_var CXXFLAGS "-finline-limit=300" _optimization_level=-Os if test "$_host" = android -o "$_host" = android-arm; then append_var CXXFLAGS "-mthumb-interwork" # FIXME: Why is the following in CXXFLAGS and not in DEFINES? Change or document this. append_var CXXFLAGS "-D__ARM_ARCH_5__" append_var CXXFLAGS "-D__ARM_ARCH_5T__" append_var CXXFLAGS "-D__ARM_ARCH_5E__" append_var CXXFLAGS "-D__ARM_ARCH_5TE__" fi # surpress 'mangling of 'va_list' has changed in GCC 4.4' warning append_var CXXFLAGS "-Wno-psabi" if test "$_host" = android -o "$_host" = android-arm; then append_var LDFLAGS "-mthumb-interwork" fi append_var LDFLAGS "-L$ANDROID_NDK/sources/cxx-stl/gnu-libstdc++/`$CXX -dumpversion`/libs/$ABI/" append_var LIBS "-lsupc++" add_line_to_config_mk "ANDROID_SDK = $ANDROID_SDK" if test -d "$ANDROID_SDK"/build-tools; then _build_tools_version=`cd "$ANDROID_SDK"/build-tools && ls -1 | sort -rn | head -1` add_line_to_config_mk "ANDROID_BTOOLS = build-tools/$_build_tools_version" else add_line_to_config_mk "ANDROID_BTOOLS = platform-tools" fi _seq_midi=no ;; beos*) append_var 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" append_var CXXFLAGS "-fhuge-objects" append_var LIBS "-lbind -lsocket" _seq_midi=no ;; cygwin*) echo ERROR: Cygwin building is not supported by ScummVM anymore. Consider using MinGW. exit 1 ;; darwin*) # Pass -mlongcall to gcc so that it emits long calls # which will allow for calls larger than 32MB. The linker # will discard the calls if they are not needed, but we # need to ensure the compiler emits them in the first place. case $_host_cpu in powerpc*) append_var CFLAGS "-mlongcall" append_var CXXFLAGS "-mlongcall" ;; esac append_var DEFINES "-DMACOSX" append_var LIBS "-framework AudioUnit -framework AudioToolbox -framework Carbon -framework CoreMIDI" # SDL2 doesn't seem to add Cocoa for us. append_var LIBS "-framework Cocoa" 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 ;; dreamcast) append_var DEFINES "-D__DC__" append_var DEFINES "-DNONSTANDARD_PORT" ;; ds) append_var DEFINES "-D__DS__" append_var DEFINES "-DNDS" append_var DEFINES "-DARM9" append_var DEFINES "-DARM" append_var DEFINES "-DNONSTANDARD_PORT" append_var CXXFLAGS "-isystem $DEVKITPRO/libnds/include" append_var CXXFLAGS "-isystem $DEVKITPRO/devkitARM/arm-eabi/include" append_var CXXFLAGS "-mcpu=arm9tdmi" append_var CXXFLAGS "-mtune=arm9tdmi" append_var CXXFLAGS "-fomit-frame-pointer" append_var CXXFLAGS "-mthumb-interwork" append_var CXXFLAGS "-ffunction-sections" append_var CXXFLAGS "-fdata-sections" append_var CXXFLAGS "-fno-strict-aliasing" append_var CXXFLAGS "-fuse-cxa-atexit" append_var LDFLAGS "-specs=ds_arm9.specs" append_var LDFLAGS "-mthumb-interwork" append_var LDFLAGS "-mno-fpu" append_var LDFLAGS "-Wl,-Map,map.txt" if test "$_dynamic_modules" = no ; then append_var LDFLAGS "-Wl,--gc-sections" else append_var LDFLAGS "-Wl,--no-gc-sections" # TODO automate this required 2 step linking phase # append_var LDFLAGS "-Wl,--retain-symbols-file,ds.syms" fi append_var LDFLAGS "-L$DEVKITPRO/libnds/lib" append_var LIBS "-lnds9" ;; freebsd*) append_var LDFLAGS "-L/usr/local/lib" append_var CXXFLAGS "-I/usr/local/include" ;; gamecube) _optimization_level=-Os append_var CXXFLAGS "-mogc" append_var CXXFLAGS "-mcpu=750" append_var CXXFLAGS "-meabi" append_var CXXFLAGS "-mhard-float" append_var CXXFLAGS "-ffunction-sections" append_var CXXFLAGS "-fdata-sections" append_var CXXFLAGS "-fmodulo-sched" append_var CXXFLAGS "-fuse-cxa-atexit" append_var CXXFLAGS "-I$DEVKITPRO/libogc/include" # libogc is required to link the cc tests (includes _start()) append_var LDFLAGS "-mogc" append_var LDFLAGS "-mcpu=750" append_var LDFLAGS "-L$DEVKITPRO/libogc/lib/cube" append_var LDFLAGS "-logc" if test "$_dynamic_modules" = "yes" ; then # retarded toolchain patch forces --gc-sections, overwrite it append_var LDFLAGS "-Wl,--no-gc-sections" fi ;; haiku*) append_var DEFINES "-DSYSTEM_NOT_SUPPORTING_D_TYPE" # Needs -lnetwork for the timidity MIDI driver append_var LIBS "-lnetwork" _seq_midi=no ;; irix*) append_var DEFINES "-DIRIX" append_var DEFINES "-DSYSTEM_NOT_SUPPORTING_D_TYPE" append_var 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 append_var CXXFLAGS "`getconf LFS_CFLAGS 2>/dev/null`" fi ;; maemo) append_var DEFINES "-DMAEMO" ;; mingw*) append_var DEFINES "-DWIN32" append_var DEFINES "-D__USE_MINGW_ANSI_STDIO=0" append_var LDFLAGS "-static-libgcc -static-libstdc++" append_var LIBS "-lmingw32 -lwinmm -lgdi32" append_var OBJS "scummvmwinres.o" add_line_to_config_mk 'WIN32 = 1' ;; mint*) append_var DEFINES "-DSYSTEM_NOT_SUPPORTING_D_TYPE" ;; msys) echo ERROR: Using the MSYS shell in msys mode is not supported. Please use the MSYS shell in mingw mode instead. exit 1 ;; n64) append_var DEFINES "-D__N64__" append_var DEFINES "-DLIMIT_FPS" append_var DEFINES "-DNONSTANDARD_PORT" append_var DEFINES "-DDISABLE_COMMAND_LINE" append_var DEFINES "-DDISABLE_DEFAULT_SAVEFILEMANAGER" append_var DEFINES "-DDISABLE_DOSBOX_OPL" append_var DEFINES "-DDISABLE_FANCY_THEMES" append_var DEFINES "-DDISABLE_NES_APU" append_var DEFINES "-DDISABLE_SID" append_var DEFINES "-DREDUCE_MEMORY_USAGE" ;; ps2) append_var CXXFLAGS "-G2" append_var DEFINES "-D_EE" append_var DEFINES "-D__PLAYSTATION2__" if test -z "$PS2SDK_OLD"; then append_var DEFINES "-D__NEW_PS2SDK__" fi ;; ps3) # Force use of SDL and freetype from the ps3 toolchain _sdlconfig=sdl2-config _sdlpath="$PS3DEV/portlibs/ppu:$PS3DEV/portlibs/ppu/bin" _freetypepath="$PS3DEV/portlibs/ppu:$PS3DEV/portlibs/ppu/bin" append_var DEFINES "-DPLAYSTATION3" append_var CXXFLAGS "-mcpu=cell -mminimal-toc -I$PSL1GHT/ppu/include -I$PS3DEV/portlibs/ppu/include" append_var LDFLAGS "-L$PSL1GHT/ppu/lib -L$PS3DEV/portlibs/ppu/lib" add_line_to_config_mk 'PLAYSTATION3 = 1' add_line_to_config_h "#define PREFIX \"${prefix}\"" ;; psp) if test -d "$PSPDEV/psp/lib"; then append_var LDFLAGS "-L$PSPDEV/psp/lib" fi append_var LDFLAGS "-L$PSPSDK/lib" append_var LDFLAGS "-specs=$_srcdir/backends/platform/psp/psp.spec" _optimization_level=-O3 append_var CXXFLAGS "-I$PSPSDK/include" # FIXME: Why is the following in CXXFLAGS and not in DEFINES? Change or document this. append_var CXXFLAGS "-D_PSP_FW_VERSION=150" ;; solaris*) append_var DEFINES "-DSOLARIS" append_var DEFINES "-DSYSTEM_NOT_SUPPORTING_D_TYPE" # Needs -lbind -lsocket for the timidity MIDI driver append_var LIBS "-lnsl -lsocket" ;; tizen) add_line_to_config_mk "TIZEN_ROOTSTRAP = $TIZEN_ROOTSTRAP" append_var LDFLAGS "--sysroot=${TIZEN_ROOTSTRAP}" append_var LDFLAGS "-L${TIZEN_LIBS}/lib" append_var CXXFLAGS "-I${TIZEN_LIBS}/include" ;; webos) append_var CXXFLAGS "--sysroot=$WEBOS_PDK/arm-gcc/sysroot" append_var CXXFLAGS "-I$WEBOS_PDK/include" append_var CXXFLAGS "-I$WEBOS_PDK/include/SDL" append_var CXXFLAGS "-I$WEBOS_PDK/device/usr/include" # These compiler options are needed to support the Palm Pixi append_var CXXFLAGS "-mcpu=arm1136jf-s" append_var CXXFLAGS "-mfpu=vfp " append_var CXXFLAGS "-mfloat-abi=softfp" append_var LDFLAGS "-L$WEBOS_PDK/device/lib" append_var LDFLAGS "-L$WEBOS_PDK/device/usr/lib" append_var LDFLAGS "-Wl,--allow-shlib-undefined" append_var LDFLAGS "--sysroot=$WEBOS_PDK/arm-gcc/sysroot" add_line_to_config_mk "WEBOS_SDK = $WEBOS_SDK" _seq_midi=no ;; wii) _optimization_level=-Os append_var CXXFLAGS "-mrvl" append_var CXXFLAGS "-mcpu=750" append_var CXXFLAGS "-meabi" append_var CXXFLAGS "-mhard-float" append_var CXXFLAGS "-ffunction-sections" append_var CXXFLAGS "-fdata-sections" append_var CXXFLAGS "-fmodulo-sched" append_var CXXFLAGS "-fuse-cxa-atexit" append_var CXXFLAGS "-I$DEVKITPRO/libogc/include" # libogc is required to link the cc tests (includes _start()) append_var LDFLAGS "-mrvl" append_var LDFLAGS "-mcpu=750" append_var LDFLAGS "-L$DEVKITPRO/libogc/lib/wii" append_var LDFLAGS "-logc" if test "$_dynamic_modules" = "yes" ; then # retarded toolchain patch forces --gc-sections, overwrite it append_var LDFLAGS "-Wl,--no-gc-sections" fi ;; wince) _optimization_level=-O3 append_var CXXFLAGS "-fno-inline-functions" append_var CXXFLAGS "-march=armv4" append_var CXXFLAGS "-mtune=xscale" append_var DEFINES "-D_WIN32_WCE=300" append_var DEFINES "-D__ARM__" append_var DEFINES "-D_ARM_" append_var DEFINES "-DUNICODE" append_var DEFINES "-DFPM_DEFAULT" append_var DEFINES "-DNONSTANDARD_PORT" append_var DEFINES "-DWRAP_MALLOC" append_var DEFINES "-DWIN32" append_var DEFINES "-Dcdecl=" append_var DEFINES "-D__cdecl__=" add_line_to_config_mk "WRAP_MALLOC = 1" ;; esac if test -n "$_host"; then # Cross-compiling mode - add your target here if needed echo "Cross-compiling to $_host" case "$_host" in 3ds) append_var DEFINES "-DDISABLE_FANCY_THEMES" append_var DEFINES "-DDISABLE_SID" append_var DEFINES "-DDISABLE_NES_APU" _backend="3ds" _build_scalers=no _vkeybd=yes _mt32emu=no # Should use Tremor instead of Vorbis _vorbis=no _port_mk="backends/platform/3ds/3ds.mk" ;; android | android-arm | android-v7a | android-arm-v7a | android-mips | android-x86 | ouya) # we link a .so as default append_var LDFLAGS "-shared" append_var LDFLAGS "-Wl,-Bsymbolic,--no-undefined" HOSTEXEPRE=lib HOSTEXEEXT=.so _backend="android" _port_mk="backends/platform/android/android.mk" _build_scalers=no _seq_midi=no _mt32emu=no _timidity=no ;; arm-linux|arm*-linux-gnueabi|arm-*-linux) ;; arm-riscos|linupy) append_var DEFINES "-DLINUPY" ;; bfin*) ;; caanoo) append_var DEFINES "-DCAANOO" if test "$_debug_build" = no; then # Use -O3 on the Caanoo for non-debug builds. _optimization_level=-O3 fi append_var CXXFLAGS "-mcpu=arm926ej-s" append_var CXXFLAGS "-mtune=arm926ej-s" _backend="gph" _build_hq_scalers=no _savegame_timestamp=no _vkeybd=yes _seq_midi=no _mt32emu=no _timidity=no _port_mk="backends/platform/gph/caanoo-bundle.mk" ;; *darwin*) _ranlib=$_host-ranlib _strip=$_host-strip ;; dingux) append_var DEFINES "-DDINGUX" append_var DEFINES "-DDISABLE_DOSBOX_OPL" append_var DEFINES "-DREDUCE_MEMORY_USAGE" append_var CXXFLAGS "-msoft-float" append_var CXXFLAGS "-mips32" _backend="dingux" _mt32emu=no _optimization_level=-O3 # Disable alsa midi to get the port build on OpenDingux toolchain _alsa=no _vkeybd=yes _build_hq_scalers=no _keymapper=no # Force disable vorbis on dingux, it has terrible performance compared to tremor _vorbis=no # Force disable seq on dingux, no way to use it and it would get enabled by default with configure _seq_midi=no _port_mk="backends/platform/dingux/dingux.mk" ;; 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. append_var LDFLAGS "--sysroot=$RPI_ROOT" append_var LDFLAGS "-B$RPI_ROOT/usr/lib/arm-linux-gnueabihf" append_var LDFLAGS "-Xlinker --rpath-link=$RPI_ROOT/usr/lib/arm-linux-gnueabihf" append_var LDFLAGS "-Xlinker --rpath-link=$RPI_ROOT/lib/arm-linux-gnueabihf" append_var LDFLAGS "-Xlinker --rpath-link=$RPI_ROOT/opt/vc/lib" append_var LDFLAGS "-L$RPI_ROOT/opt/vc/lib" # This is so optional OpenGL ES includes are found. append_var CXXFLAGS "-I$RPI_ROOT/opt/vc/include" _savegame_timestamp=no _eventrec=no _build_scalers=no _build_hq_scalers=no # We prefer SDL2 on the Raspberry Pi: acceleration now depends on it # since SDL2 manages dispmanx/GLES2 very well internally. # SDL1 is bit-rotten on this platform. _sdlconfig=sdl2-config # OpenGL ES support is mature enough as to be the best option on # the Raspberry Pi, so it's enabled by default. # The Raspberry Pi always supports OpenGL ES 2.0 contexts, thus we # take advantage of those. _opengl_mode=gles2 ;; dreamcast) append_var DEFINES "-DDISABLE_DEFAULT_SAVEFILEMANAGER" append_var DEFINES "-DDISABLE_TEXT_CONSOLE" append_var DEFINES "-DDISABLE_COMMAND_LINE" # Enable serial debugging output only when --enable-debug is passed if test "$_release_build" = yes -o "$_debug_build" != yes; then append_var DEFINES "-DNOSERIAL" fi _optimization_level=-O3 append_var CXXFLAGS "-funroll-loops" append_var CXXFLAGS "-fschedule-insns2" append_var CXXFLAGS "-fomit-frame-pointer" append_var CXXFLAGS "-fdelete-null-pointer-checks" # no-delayed-branch is a workaround for GCC bug #42841 - "SH: Assembler complains pcrel too far." append_var CXXFLAGS "-fno-delayed-branch" _backend="dc" _build_scalers=no _mad=yes _zlib=yes if test -z "$RONINDIR"; then add_line_to_config_mk "ronindir := /usr/local/ronin" else add_line_to_config_mk "ronindir := $RONINDIR" fi _port_mk="backends/platform/dc/dreamcast.mk" ;; ds) append_var DEFINES "-DDISABLE_COMMAND_LINE" append_var DEFINES "-DDISABLE_DEFAULT_SAVEFILEMANAGER" append_var DEFINES "-DDISABLE_DOSBOX_OPL" append_var DEFINES "-DDISABLE_FANCY_THEMES" append_var DEFINES "-DDISABLE_SID" append_var DEFINES "-DDISABLE_NES_APU" append_var DEFINES "-DDISABLE_TEXT_CONSOLE" append_var DEFINES "-DREDUCE_MEMORY_USAGE" append_var DEFINES "-DSTREAM_AUDIO_FROM_DISK" append_var DEFINES "-DVECTOR_RENDERER_FORMAT=1555" _backend="ds" _build_scalers=no _mt32emu=no _port_mk="backends/platform/ds/ds.mk" ;; gamecube) _backend="wii" _build_scalers=no _vkeybd=yes _mt32emu=no _port_mk="backends/platform/wii/wii.mk" add_line_to_config_mk 'GAMECUBE = 1' add_line_to_config_h '#define AUDIO_REVERSE_STEREO' add_line_to_config_h '#define GAMECUBE' add_line_to_config_h "/* #define DEBUG_WII_USBGECKO */" add_line_to_config_h "/* #define DEBUG_WII_MEMSTATS */" add_line_to_config_h "/* #define DEBUG_WII_GDB */" add_line_to_config_h "#define USE_WII_DI" ;; gcw0) _sysroot=`$CXX --print-sysroot` _sdlpath=$_sysroot/usr/bin append_var DEFINES "-DDINGUX -DGCW0 -DGUI_ONLY_FULLSCREEN" append_var DEFINES "-DREDUCE_MEMORY_USAGE" append_var CXXFLAGS "-mips32" _backend="dingux" _alsa=no _mt32emu=no _seq_midi=no _timidity=no _build_scalers=no _optimization_level=-O3 _vkeybd=yes _keymapper=yes _vorbis=no _port_mk="backends/platform/dingux/dingux.mk" ;; gp2x) append_var DEFINES "-DGP2X" append_var CXXFLAGS "-march=armv4t" append_var ASFLAGS "-mfloat-abi=soft" append_var LDFLAGS "-static" _backend="gph" _build_hq_scalers=no _savegame_timestamp=no _vkeybd=yes _seq_midi=no _mt32emu=no _timidity=no _port_mk="backends/platform/gph/gp2x-bundle.mk" ;; gp2xwiz) append_var DEFINES "-DGP2XWIZ" append_var CXXFLAGS "-mcpu=arm926ej-s" append_var CXXFLAGS "-mtune=arm926ej-s" append_var ASFLAGS "-mfloat-abi=soft" _backend="gph" _build_hq_scalers=no _savegame_timestamp=no _vkeybd=yes _seq_midi=no _mt32emu=no _timidity=no _port_mk="backends/platform/gph/gp2xwiz-bundle.mk" ;; iphone) append_var DEFINES "-DIPHONE" append_var ASFLAGS "-arch armv6" _backend="iphone" _build_scalers=no _mt32emu=no _seq_midi=no _timidity=no ;; ios7) append_var DEFINES "-DIPHONE" _backend="ios7" _build_scalers=no _seq_midi=no _timidity=no ;; m68k-atari-mint) append_var DEFINES "-DSYSTEM_NOT_SUPPORTING_D_TYPE" _ranlib=m68k-atari-mint-ranlib _ar="m68k-atari-mint-ar cru" _seq_midi=no ;; maemo) _optimization_level=-Os append_var CXXFLAGS "-mcpu=arm926ej-s" append_var CXXFLAGS "-fomit-frame-pointer" append_var INCLUDES "-I/usr/X11R6/include" append_var LIBS "-lX11" append_var LIBS "-L/usr/lib" _backend="maemo" _vkeybd=yes _keymapper=yes _build_hq_scalers=no _mt32emu=no _alsa=no _mad=yes _tremor=yes _zlib=yes ;; *mingw32*) _sdlconfig=$_host-sdl-config _windres=$_host-windres _ar="$_host-ar cru" _ranlib=$_host-ranlib ;; mips-sgi*) append_var LDFLAGS "-static-libgcc" append_var LIBS "-laudio" ;; motoezx) append_var DEFINES "-DMOTOEZX" append_var ASFLAGS "-mfpu=vfp" _backend="linuxmoto" _build_hq_scalers=no _mt32emu=no _vkeybd=yes _seq_midi=no _port_mk="backends/platform/linuxmoto/linuxmoto.mk" ;; motomagx) append_var DEFINES "-DMOTOMAGX" append_var ASFLAGS "-mfpu=vfp" _backend="linuxmoto" _build_hq_scalers=no _mt32emu=no _vkeybd=yes _seq_midi=no _port_mk="backends/platform/linuxmoto/linuxmoto.mk" ;; n64) append_var CXXFLAGS "-mno-extern-sdata" append_var CXXFLAGS "--param max-inline-insns-auto=20" append_var CXXFLAGS "-fomit-frame-pointer" append_var CXXFLAGS "-march=vr4300" append_var CXXFLAGS "-mtune=vr4300" append_var CXXFLAGS "-mhard-float" append_var LDFLAGS "-march=vr4300" append_var LDFLAGS "-mtune=vr4300" append_var LDFLAGS "-nodefaultlibs" append_var LDFLAGS "-nostartfiles" append_var LDFLAGS "-mno-crt0" append_var LDFLAGS "-L$N64SDK/hkz-libn64" append_var LDFLAGS "-L$N64SDK/lib" append_var LDFLAGS "-T n64ld_cpp.x -Xlinker -Map -Xlinker scummvm.map" _backend="n64" _mt32emu=no _build_scalers=no _savegame_timestamp=no _translation=no _keymapper=no _text_console=no _vkeybd=yes _dynamic_modules=no _plugins_default=static # Force use of libmad, libtremor and zlib _mad=no _tremor=yes _zlib=yes _port_mk="backends/platform/n64/n64.mk" ;; neuros) append_var DEFINES "-DNEUROS" _backend='null' _build_hq_scalers=no _mt32emu=no ;; openpandora) append_var DEFINES "-DOPENPANDORA" append_var DEFINES "-DREDUCE_MEMORY_USAGE" if test "$_release_build" = no; then append_var DEFINES "-DOP_DEBUG" fi # Use -O3 on the OpenPandora for optimized builds. if test "$_optimizations" = yes; then _optimization_level=-O3 fi define_in_config_if_yes yes 'USE_ARM_NEON_ASPECT_CORRECTOR' append_var CXXFLAGS "-march=armv7-a" append_var CXXFLAGS "-mtune=cortex-a8" append_var CXXFLAGS "-mfloat-abi=softfp" append_var CXXFLAGS "-mfpu=neon" append_var CXXFLAGS "-fsingle-precision-constant" append_var ASFLAGS "-mfloat-abi=softfp" _backend="openpandora" _build_hq_scalers=yes _vkeybd=no _mt32emu=no _seq_midi=no _port_mk="backends/platform/openpandora/op-bundle.mk" ;; ppc-amigaos) # PPC Linker requires this to fix relocation errors append_var CXXFLAGS "-mlongcall" # Only static builds link successfully on buildbot LDFLAGS=`echo $LDFLAGS | sed 's/-use-dynld//'` append_var LDFLAGS "-static" # toolchain binaries prefixed by host _ranlib=$_host-ranlib _strip=$_host-strip _ar="$_host-ar cru" _as="$_host-as" _windres=$_host-windres _port_mk="backends/platform/sdl/amigaos/amigaos.mk" ;; ps2) append_var DEFINES "-DDISABLE_TEXT_CONSOLE" append_var DEFINES "-DDISABLE_COMMAND_LINE" append_var DEFINES "-DDISABLE_DOSBOX_OPL" append_var DEFINES "-DDISABLE_SID" append_var DEFINES "-DDISABLE_NES_APU" append_var CXXFLAGS "-fno-exceptions" append_var CXXFLAGS "-fno-rtti" _backend="ps2" _build_scalers=no _mt32emu=no # HACK to enable mad & zlib (they are not properly detected due to linker issues). # This trick doesn't work for tremor right now, as the PS2 port the resulting library # libtremor, while our code later on expects it to be called libvorbisidec. # TODO: Enable tremor, e.g. by adding -ltremor or by renaming the lib. # Disable this for older SDK as this breaks the build otherwise... if test -z "$PS2SDK_OLD"; then _tremor=yes fi _mad=yes _zlib=yes # HACK to fix compilation of C source files for now. add_line_to_config_mk 'CC := ee-gcc' add_line_to_config_mk 'CFLAGS := -std=c99 -W -Wno-unused-parameter -Wconversion -pedantic -G2 -s -O2 -Wuninitialized' # HACK to fix linking for now. It seems ee-g++ does not handle linking correctly. LD=ee-gcc if test "$_debug_build" = yes; then # TODO: Setup debug build properly append_var DEFINES "-D__PS2_DEBUG__" #append_var INCLUDES "-I$(PS2GDB)/ee" #append_var LDFLAGS "-L$(PS2GDB)/lib" append_var LDFLAGS "-lps2gdbStub" append_var LDFLAGS "-lps2ip" append_var LDFLAGS "-ldebug" else # If not building for debug mode, strip binaries. append_var CXXFLAGS "-s" fi ;; ps3) _mt32emu=no _timidity=no _vkeybd=yes _eventrec=no _port_mk="backends/platform/sdl/ps3/ps3.mk" ;; psp) _backend="psp" _build_scalers=no _mt32emu=no _port_mk="backends/platform/psp/psp.mk" ;; samsungtv) append_var DEFINES "-DSAMSUNGTV" append_var DEFINES "-DDISABLE_COMMAND_LINE" append_var ASFLAGS "-mfpu=vfp" HOSTEXEEXT=".so" _backend="samsungtv" _mt32emu=no _vkeybd=yes ;; tizen) _unix=yes _backend="tizen" _port_mk="backends/platform/tizen/tizen.mk" _arm_asm=yes _build_scalers=no _seq_midi=no _mt32emu=no _timidity=no _vkeybd=yes # Tizen relies on the OpenGL ES output thus we always enable it. _opengl_mode=gles ;; webos) _backend="webos" _port_mk="backends/platform/webos/webos.mk" _build_scalers=yes _build_hq_scalers=no _timidity=no _mt32emu=no _seq_midi=no _vkeybd=no _keymapper=yes add_line_to_config_mk "HOST_COMPILER = `uname`" ;; wii) _backend="wii" _build_scalers=no _vkeybd=yes _port_mk="backends/platform/wii/wii.mk" add_line_to_config_mk 'GAMECUBE = 0' add_line_to_config_h '#define AUDIO_REVERSE_STEREO' add_line_to_config_h "#define DEBUG_WII_USBGECKO" add_line_to_config_h "/* #define DEBUG_WII_MEMSTATS */" add_line_to_config_h "/* #define DEBUG_WII_GDB */" add_line_to_config_h "#define USE_WII_DI" add_line_to_config_h "#define USE_WII_SMB" add_line_to_config_h "#define USE_WII_KBD" ;; wince) append_var LDFLAGS "-Wl,--stack,65536" _tremolo=yes _backend="wince" _detectlang=yes _mt32emu=no _port_mk="backends/platform/wince/wince.mk" ;; *) echo "WARNING: Unknown target, continuing with auto-detected values" ;; esac fi # # Backend related stuff # case $_backend in 3ds) ;; android) append_var DEFINES "-DREDUCE_MEMORY_USAGE" append_var CXXFLAGS "-Wa,--noexecstack" append_var LDFLAGS "-Wl,-z,noexecstack" append_var INCLUDES "-I$ANDROID_NDK/sources/cxx-stl/system/include" ;; dc) append_var INCLUDES '-I$(srcdir)/backends/platform/dc' append_var INCLUDES '-isystem $(ronindir)/include' append_var LDFLAGS "-Wl,-Ttext,0x8c010000" append_var LDFLAGS "-nostartfiles" append_var LDFLAGS '$(ronindir)/lib/crt0.o' append_var LDFLAGS '-L$(ronindir)/lib' # Enable serial debugging output only when --enable-debug is passed if test "$_release_build" = yes -o "$_debug_build" != yes; then append_var LIBS "-lronin-noserial -lm" else append_var LIBS "-lronin -lm" fi ;; dingux) append_var DEFINES "-DDINGUX" ;; ds) append_var INCLUDES '-I$(srcdir)/backends/platform/ds/arm9/source' append_var INCLUDES '-I$(srcdir)/backends/platform/ds/commoninclude' append_var INCLUDES '-Ibackends/platform/ds/arm9/data' ;; gph) # On the GPH devices we want fancy themes but do not want the load/save thumbnail grid. append_var DEFINES "-DDISABLE_SAVELOADCHOOSER_GRID" append_var DEFINES "-DGPH_DEVICE" append_var DEFINES "-DREDUCE_MEMORY_USAGE" if test "$_debug_build" = yes; then append_var DEFINES "-DGPH_DEBUG" fi ;; iphone) append_var LIBS "-lobjc -framework UIKit -framework CoreGraphics -framework OpenGLES" append_var LIBS "-framework QuartzCore -framework CoreFoundation -framework Foundation" append_var LIBS "-framework AudioToolbox -framework CoreAudio" ;; ios7) append_var LIBS "-lobjc -framework UIKit -framework CoreGraphics -framework OpenGLES" append_var LIBS "-framework QuartzCore -framework CoreFoundation -framework Foundation" append_var LIBS "-framework AudioToolbox -framework CoreAudio" append_var LDFLAGS "-miphoneos-version-min=7.1 -arch armv7" append_var CFLAGS "-miphoneos-version-min=7.1 -arch armv7" append_var CXXFLAGS "-miphoneos-version-min=7.1 -arch armv7" if test -n "$SDKROOT"; then append_var LDFLAGS "-mlinker-version=134.9 -B/usr/local/bin/arm-apple-darwin11-" append_var CFLAGS "-isysroot $SDKROOT -F$SDKROOT/System/Library/Frameworks" append_var CXXFLAGS "-isysroot $SDKROOT -I$SDKROOT/usr/include/c++/4.2.1 -F$SDKROOT/System/Library/Frameworks" fi ;; linuxmoto) append_var DEFINES "-DLINUXMOTO" ;; maemo) append_var DEFINES "-DMAEMO" ;; n64) append_var INCLUDES '-I$(N64SDK)/include' append_var INCLUDES '-I$(N64SDK)/mips64/include' append_var INCLUDES '-I$(N64SDK)/hkz-libn64' append_var INCLUDES '-I$(srcdir)/backends/platform/n64' append_var LIBS "-lpakfs -lframfs -ln64 -ln64utils -lromfs" append_var LIBS "-lm -lstdc++ -lz" ;; null) append_var DEFINES "-DUSE_NULL_DRIVER" ;; openpandora) ;; ps2) append_var DEFINES "-D_EE" append_var DEFINES "-DFORCE_RTL" append_var INCLUDES "-I$PS2SDK/ee/include" append_var INCLUDES "-I$PS2SDK/common/include" append_var INCLUDES "-I$PS2SDK/ports/include" if test "$_dynamic_modules" = no ; then append_var LDFLAGS "-mno-crt0" append_var LDFLAGS "$PS2SDK/ee/startup/crt0.o" append_var LDFLAGS "-T $PS2SDK/ee/startup/linkfile" fi append_var LDFLAGS "-L$PS2SDK/ee/lib" append_var LDFLAGS "-L$PS2SDK/ports/lib" append_var LIBS "-lmc -lpad -lmouse -lhdd -lpoweroff -lsjpcm" append_var LIBS "-lm -lc -lfileXio -lkernel -lstdc++" ;; psp) append_var DEFINES "-D__PSP__" append_var DEFINES "-DDISABLE_COMMAND_LINE" append_var DEFINES "-DDISABLE_DOSBOX_OPL" append_var LIBS "-lpng" append_var LIBS "-Wl,-Map,mapfile.txt" ;; samsungtv) append_var DEFINES "-DSAMSUNGTV" append_var LDFLAGS "-shared" append_var LDFLAGS "-fpic" ;; sdl) ;; tizen) # dirent.h not available. NONSTANDARD_PORT==ensure portdefs.h is included append_var DEFINES "-DTIZEN -DDISABLE_STDIO_FILESTREAM -DNONSTANDARD_PORT" append_var DEFINES "-DNO_STDERR_STDOUT" append_var DEFINES "-DDISABLE_COMMAND_LINE" append_var INCLUDES '-I$(srcdir)/backends/platform/tizen' append_var INCLUDES '-I$(TIZEN_ROOTSTRAP)/usr/include' append_var INCLUDES '-I$(TIZEN_ROOTSTRAP)/usr/include/osp' if test "$_debug_build" = yes; then append_var CXXFLAGS "-D_DEBUG -DBUILD_DLL -O0 -g3" fi # created a shared library for inclusion via the eclipse build append_var CXXFLAGS "-Wno-psabi" append_var CXXFLAGS "--sysroot=${TIZEN_ROOTSTRAP}" append_var CXXFLAGS "-fmessage-length=0" append_var CXXFLAGS "-fPIC" HOSTEXEPRE=lib HOSTEXEEXT=.a ;; webos) # There is no sdl-config in the WebOS PDK so we don't use find_sdlconfig here. # The PDL library acts as the WebOS device toolchain, and is required to control the virtual keyboard among other OS-level events. append_var LIBS "-lSDL -lpdl" append_var DEFINES "-DWEBOS" append_var DEFINES "-DSDL_BACKEND" add_line_to_config_mk "SDL_BACKEND = 1" append_var MODULES "backends/platform/sdl" ;; wii) append_var DEFINES "-D__WII__" append_var DEFINES "-DGEKKO" case $_host_os in gamecube) append_var LIBS "-lgxflux -liso9660 -lfat -logc -ldb" ;; *) append_var LIBS "-lgxflux -ldi -liso9660 -ltinysmb -lfat -lwiiuse -lbte -logc -lwiikeyboard -ldb" ;; esac ;; wince) append_var INCLUDES '-I$(srcdir)/backends/platform/wince' append_var INCLUDES '-I$(srcdir)/backends/platform/wince/CEgui' append_var INCLUDES '-I$(srcdir)/backends/platform/wince/CEkeys' append_var LIBS "-static -lSDL" append_var DEFINES "-DSDL_BACKEND" add_line_to_config_mk "SDL_BACKEND = 1" ;; *) echo "support for $_backend backend not implemented in configure script yet" exit 1 ;; esac append_var MODULES "backends/platform/$_backend" # # Setup SDL specifics for SDL based backends # case $_backend in dingux | gph | linuxmoto | maemo | openpandora | samsungtv | sdl) find_sdlconfig append_var INCLUDES "`$_sdlconfig --prefix="$_sdlpath" --cflags`" append_var LIBS "`$_sdlconfig --prefix="$_sdlpath" --libs`" append_var DEFINES "-DSDL_BACKEND" add_line_to_config_mk "SDL_BACKEND = 1" _sdlversion=`$_sdlconfig --version` case $_sdlversion in 2.0.*) add_line_to_config_mk "USE_SDL2 = 1" ;; *) ;; esac ;; esac # # Enable 16bit support only for backends which support it # case $_backend in 3ds | android | dingux | dc | gph | iphone | ios7 | maemo | openpandora | psp | samsungtv | sdl | tizen | webos | wii) if test "$_16bit" = auto ; then _16bit=yes else _16bit=no fi ;; *) _16bit=no ;; esac # # Enable High resolution engines (>320x240) support only for backends which support it # case $_host in gcw0) if test "$_highres" = yes ; then _highres=yes else _highres=no fi ;; *) if test "$_highres" = no ; then _highres=no else _highres=yes fi ;; esac # # Enable Event Recorder only for backends that support it # case $_backend in sdl) if test "$_eventrec" = auto ; then _eventrec=yes fi ;; *) _eventrec=no ;; esac # # Disable savegame timestamp support for backends which don't have a reliable real time clock # case $_backend in gph | n64) if test "$_savegame_timestamp" = auto ; then _savegame_timestamp=no else _savegame_timestamp=yes fi ;; *) if test "$_savegame_timestamp" = auto ; then _savegame_timestamp=yes else _savegame_timestamp=no fi ;; esac # # 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* | n64 | ps2 | ps3 | psp | wii | wince) _posix=no ;; 3ds | android | beos* | bsd* | darwin* | freebsd* | gnu* | gph-linux | haiku* | hpux* | iphone | ios7 | irix*| k*bsd*-gnu* | linux* | maemo | mint* | netbsd* | openbsd* | 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 append_var 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' # # If a specific optimization level was requested, enable optimizations # if test -n "$_optimization_level" ; then # Ports will specify an optimization level and expect that to be enabled if test "$_optimizations" != no ; then _optimizations=yes fi else _optimization_level=$_default_optimization_level fi # # Check whether to enable optimizations # if test "$_optimizations" = yes ; then # Enable optimizations. This also # makes it possible to use -Wuninitialized, so let's do that. append_var CXXFLAGS "$_optimization_level" append_var CXXFLAGS "-Wuninitialized" fi # # Check whether plugin support is requested and possible # echo_n "Checking whether building plugins was requested... " echo "$_dynamic_modules" _mak_plugins= if test "$_dynamic_modules" = yes ; then echo_n "Checking whether building plugins is supported... " case $_host_os in android) _plugin_prefix="lib" _plugin_suffix=".so" append_var CXXFLAGS "-fpic" append_var LIBS "-ldl" # Work around an Android 2.0+ run-time linker bug: # The linker doesn't actually look in previously # loaded libraries when trying to resolve symbols - # effectively turning all dlopen(RTLD_GLOBAL) calls # into dlopen(RTLD_LOCAL). It *does* look in # DT_NEEDED libraries, so the workaround is to add an # (otherwise unnecessary) dependency from plugins back # to the main libscummvm.so. _mak_plugins=' PLUGIN_EXTRA_DEPS = libscummvm.so PLUGIN_LDFLAGS += $(LDFLAGS) -L. -lscummvm PRE_OBJS_FLAGS := -Wl,-export-dynamic -Wl,-whole-archive POST_OBJS_FLAGS := -Wl,-no-whole-archive ' ;; darwin*) _plugin_prefix="" _plugin_suffix=".plugin" append_var LIBS "-ldl" _mak_plugins=' PLUGIN_EXTRA_DEPS = $(EXECUTABLE) PLUGIN_LDFLAGS += -bundle -bundle_loader $(EXECUTABLE) -exported_symbols_list "$(srcdir)/plugin.exp" PRE_OBJS_FLAGS := -all_load POST_OBJS_FLAGS := ' ;; dreamcast) _plugin_prefix="" _plugin_suffix=".plg" _mak_plugins=' PLUGIN_EXTRA_DEPS = $(abspath $(srcdir)/backends/platform/dc/plugin.x $(srcdir)/backends/platform/dc/plugin.syms) $(EXECUTABLE) backends/platform/dc/plugin_head.o PLUGIN_LDFLAGS = -ml -m4-single-only -nostartfiles -Wl,-q,-T$(srcdir)/backends/platform/dc/plugin.x,--just-symbols,$(EXECUTABLE),--retain-symbols-file,$(srcdir)/backends/platform/dc/plugin.syms backends/platform/dc/plugin_head.o PRE_OBJS_FLAGS := -Wl,--whole-archive POST_OBJS_FLAGS := -Wl,--no-whole-archive ' ;; ds) _elf_loader=yes append_var DEFINES "-DELF_LOADER_CXA_ATEXIT" append_var DEFINES "-DUNCACHED_PLUGINS" append_var DEFINES "-DELF_NO_MEM_MANAGER" _mak_plugins=' PLUGIN_LDFLAGS += -Wl,-T$(srcdir)/backends/plugins/ds/plugin.ld -mthumb-interwork -mno-fpu ' ;; freebsd*) _plugin_prefix="lib" _plugin_suffix=".so" append_var CXXFLAGS "-fPIC" _mak_plugins=' PLUGIN_EXTRA_DEPS = PLUGIN_LDFLAGS += -shared PRE_OBJS_FLAGS := -Wl,-export-dynamic -Wl,-whole-archive POST_OBJS_FLAGS := -Wl,-no-whole-archive ' ;; gamecube | wii) _elf_loader=yes append_var DEFINES "-DELF_LOADER_CXA_ATEXIT" append_var DEFINES "-DUNCACHED_PLUGINS" _mak_plugins=' PLUGIN_LDFLAGS += -Wl,-T$(srcdir)/backends/plugins/wii/plugin.ld ' ;; gph*) _plugin_prefix="" _plugin_suffix=".plugin" append_var CXXFLAGS "-fpic" append_var LIBS "-ldl" _mak_plugins=' PLUGIN_EXTRA_DEPS = $(EXECUTABLE) PLUGIN_LDFLAGS += -shared PRE_OBJS_FLAGS := -Wl,-export-dynamic -Wl,-whole-archive POST_OBJS_FLAGS := -Wl,-no-whole-archive ' ;; irix*) _plugin_prefix="lib" _plugin_suffix=".so" append_var CXXFLAGS "-fpic" append_var LIBS "-ldl" _mak_plugins=' PLUGIN_EXTRA_DEPS = PLUGIN_LDFLAGS += -shared -static-libgcc PRE_OBJS_FLAGS := -Wl,-export-dynamic -Wl,-whole-archive POST_OBJS_FLAGS := -Wl,-no-whole-archive ' ;; linux* | gnu* | k*bsd*-gnu*) _plugin_prefix="lib" _plugin_suffix=".so" append_var CXXFLAGS "-fPIC" append_var LIBS "-ldl" _mak_plugins=' PLUGIN_EXTRA_DEPS = PLUGIN_LDFLAGS += -shared PRE_OBJS_FLAGS := -Wl,-export-dynamic -Wl,-whole-archive POST_OBJS_FLAGS := -Wl,-no-whole-archive ' ;; *mingw32*) _plugin_prefix="" _plugin_suffix=".dll" _mak_plugins=' PLUGIN_EXTRA_DEPS = $(EXECUTABLE) PLUGIN_LDFLAGS := -Wl,--enable-auto-import -shared ./libscummvm.a PRE_OBJS_FLAGS := -Wl,--whole-archive POST_OBJS_FLAGS := -Wl,--export-all-symbols -Wl,--no-whole-archive -Wl,--out-implib,./libscummvm.a ' ;; wince) append_var DEFINES "-DUNCACHED_PLUGINS" HOSTEXEEXT=".dll" _plugin_prefix="" _plugin_suffix=".plugin" _mak_plugins=' PLUGIN_EXTRA_DEPS = $(EXECUTABLE) PLUGIN_LDFLAGS := -shared -lscummvm -L. PRE_OBJS_FLAGS := -Wl,--whole-archive POST_OBJS_FLAGS := -Wl,--export-all-symbols -Wl,--no-whole-archive -Wl,--out-implib,./libscummvm.a -shared ' ;; ps2) _elf_loader=yes append_var DEFINES "-DUNCACHED_PLUGINS" _mak_plugins=' LDFLAGS += -mno-crt0 $(PS2SDK)/ee/startup/crt0.o -Wl,-T$(srcdir)/backends/plugins/ps2/main_prog.ld PLUGIN_LDFLAGS += -mno-crt0 $(PS2SDK)/ee/startup/crt0.o -Wl,-T$(srcdir)/backends/plugins/ps2/plugin.ld -lstdc++ -lc ' ;; psp) _elf_loader=yes append_var DEFINES "-DUNCACHED_PLUGINS" _mak_plugins=' LDFLAGS += -Wl,-T$(srcdir)/backends/plugins/psp/main_prog.ld PLUGIN_LDFLAGS += -Wl,-T$(srcdir)/backends/plugins/psp/plugin.ld -lstdc++ -lc ' ;; webos) _plugin_prefix="lib" _plugin_suffix=".so" append_var CXXFLAGS "-fpic" append_var LIBS "-ldl" _mak_plugins=' PLUGIN_EXTRA_DEPS = PLUGIN_LDFLAGS += -shared $(LDFLAGS) PRE_OBJS_FLAGS := -Wl,-export-dynamic -Wl,-whole-archive POST_OBJS_FLAGS := -Wl,-no-whole-archive ' ;; *) _dynamic_modules=no _mak_plugins= ;; esac echo "$_dynamic_modules" fi # # Check whether integrated ELF loader support is requested # define_in_config_if_yes "$_elf_loader" 'USE_ELF_LOADER' if test "$_elf_loader" = yes; then _plugin_prefix="" _plugin_suffix=".plg" _mak_plugins=' PLUGIN_EXTRA_DEPS = $(EXECUTABLE) PLUGIN_LDFLAGS = -nostartfiles backends/plugins/elf/version.o -Wl,-q,--just-symbols,$(EXECUTABLE),--retain-symbols-file,$(srcdir)/backends/plugins/elf/plugin.syms PRE_OBJS_FLAGS := -Wl,--whole-archive POST_OBJS_FLAGS := -Wl,--no-whole-archive '"$_mak_plugins" fi # # Set up some common plugin settings in config.h and config.mk, if enabled # define_in_config_if_yes "$_dynamic_modules" 'DYNAMIC_MODULES' if test "$_dynamic_modules" = yes ; then add_line_to_config_h "#define PLUGIN_PREFIX \"$_plugin_prefix\"" add_line_to_config_h "#define PLUGIN_SUFFIX \"$_plugin_suffix\"" add_line_to_config_mk "PLUGIN_PREFIX := $_plugin_prefix" add_line_to_config_mk "PLUGIN_SUFFIX := $_plugin_suffix" fi # # Check whether integrated MT-32 emulator support is requested # define_in_config_if_yes "$_mt32emu" 'USE_MT32EMU' # # Check whether 16bit color support is requested # define_in_config_if_yes "$_16bit" 'USE_RGB_COLOR' # # Check whether High resolution graphics support is requested # define_in_config_if_yes "$_highres" 'USE_HIGHRES' # # Check whether save games use the current time as default description # define_in_config_if_yes "$_savegame_timestamp" 'USE_SAVEGAME_TIMESTAMP' # # Check whether to enable the (hq) scalers # if test "$_build_scalers" = no ; then _build_hq_scalers=no fi define_in_config_if_yes "$_build_scalers" 'USE_SCALERS' define_in_config_if_yes "$_build_hq_scalers" 'USE_HQ_SCALERS' # # Check for math lib # cat > $TMPC << EOF int main(void) { return 0; } EOF cc_check -lm && append_var LIBS "-lm" # # Check for Ogg Vorbis # echocheck "Ogg Vorbis" if test "$_vorbis" = auto ; then _vorbis=no cat > $TMPC << EOF #include 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 append_var LIBS "$OGG_LIBS $VORBIS_LIBS -lvorbisfile -lvorbis -logg" append_var INCLUDES "$OGG_CFLAGS $VORBIS_CFLAGS" fi define_in_config_if_yes "$_vorbis" 'USE_VORBIS' echo "$_vorbis" # # Check for Tremor # echocheck "Tremor" if test "$_tremolo" = yes ; then _tremor=yes fi if test "$_tremor" = auto ; then _tremor=no cat > $TMPC << EOF #include 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' if test "$_tremolo" = yes ; then add_line_to_config_h '#define USE_TREMOLO' append_var LIBS "$TREMOR_LIBS -ltremolo" elif test "$_host" = ps2 ; then LIBS="-ltremor $LIBS" else append_var LIBS "$TREMOR_LIBS -lvorbisidec" fi append_var 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.0.1" if test "$_flac" = auto ; then _flac=no cat > $TMPC << EOF #include 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 append_var LIBS "$FLAC_LIBS $OGG_LIBS -lFLAC -logg" else append_var LIBS "$FLAC_LIBS -lFLAC" fi append_var 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 int main(void) { return 0; } EOF cc_check $MAD_CFLAGS $MAD_LIBS -lmad && _mad=yes fi if test "$_mad" = yes ; then append_var LIBS "$MAD_LIBS -lmad" append_var INCLUDES "$MAD_CFLAGS" fi define_in_config_if_yes "$_mad" 'USE_MAD' echo "$_mad" # # Check for ALSA # echocheck "ALSA >= 0.9" if test "$_alsa" = auto ; then _alsa=no cat > $TMPC << EOF #include int main(void) { return (!(SND_LIB_MAJOR==0 && SND_LIB_MINOR==9)); } EOF cc_check $ALSA_CFLAGS $ALSA_LIBS -lasound && _alsa=yes fi if test "$_alsa" = yes ; then append_var LIBS "$ALSA_LIBS -lasound" append_var INCLUDES "$ALSA_CFLAGS" fi define_in_config_if_yes "$_alsa" 'USE_ALSA' echo "$_alsa" # # Check for libjpeg # echocheck "libjpeg >= v6b" if test "$_jpeg" = auto ; then _jpeg=no cat > $TMPC << EOF #include #include int main(void) { #if JPEG_LIB_VERSION >= 62 #else syntax error #endif return 0; } EOF cc_check $JPEG_CFLAGS $JPEG_LIBS -ljpeg && _jpeg=yes fi if test "$_jpeg" = yes ; then append_var LIBS "$JPEG_LIBS -ljpeg" append_var INCLUDES "$JPEG_CFLAGS" fi define_in_config_if_yes "$_jpeg" 'USE_JPEG' echo "$_jpeg" # # Check for PNG # echocheck "PNG >= 1.2.8" if test "$_png" = auto ; then _png=no cat > $TMPC << EOF #include int main(void) { #if PNG_LIBPNG_VER >= 10208 #else syntax error #endif return 0; } EOF cc_check $PNG_CFLAGS $PNG_LIBS -lpng -lz && _png=yes fi if test "$_png" = yes ; then append_var LIBS "$PNG_LIBS -lpng -lz" append_var INCLUDES "$PNG_CFLAGS" fi define_in_config_if_yes "$_png" 'USE_PNG' echo "$_png" # # Check for Theora Decoder # echocheck "libtheoradec >= 1.0" if test "$_vorbis" = no ; then echo "skipping. no vorbis" _theoradec=notsupported fi if test "$_theoradec" = auto ; then _theoradec=no cat > $TMPC << EOF #include #include int main(void) { th_ycbcr_buffer yuv; th_decode_ycbcr_out(NULL, yuv); } EOF cc_check $THEORADEC_CFLAGS $THEORADEC_LIBS -ltheoradec && _theoradec=yes fi if test "$_theoradec" = yes ; then append_var LIBS "$THEORADEC_LIBS -ltheoradec" append_var INCLUDES "$THEORADEC_CFLAGS" fi define_in_config_if_yes "$_theoradec" 'USE_THEORADEC' if test ! "$_theoradec" = notsupported ; then echo "$_theoradec" fi # # Check for the AAC decoder # echocheck "libfaad" if test "$_faad" = auto ; then _faad=no cat > $TMPC << EOF #include int main(void) { NeAACDecGetCapabilities(); return 0; } EOF cc_check $FAAD_CFLAGS $FAAD_LIBS -lfaad && _faad=yes fi if test "$_faad" = yes ; then append_var LIBS "$FAAD_LIBS -lfaad" append_var INCLUDES "$FAAD_CFLAGS" fi define_in_config_if_yes "$_faad" 'USE_FAAD' echo "$_faad" # # Check for SEQ MIDI # echocheck "SEQ MIDI" if test "$_seq_midi" = auto ; then # TODO: Test for /dev/sequencer presence? Or maybe just for /dev ? # For now, we just always enable it when "posix" mode is on (backends # that do not want it can disable it by setting _seq_midi=no). _seq_midi="$_posix" fi define_in_config_h_if_yes "$_seq_midi" 'USE_SEQ_MIDI' echo "$_seq_midi" # # Check for sndio # echocheck "sndio" if test "$_sndio" = auto ; then _sndio=no cat > $TMPC << EOF #include int main(void) { struct sio_par par; sio_initpar(&par); return 0; } EOF cc_check $SNDIO_CFLAGS $SNDIO_LIBS -lsndio && _sndio=yes fi if test "$_sndio" = yes ; then append_var LIBS "$SNDIO_LIBS -lsndio" append_var INCLUDES "$SNDIO_CFLAGS" fi define_in_config_h_if_yes "$_sndio" 'USE_SNDIO' echo "$_sndio" # # Check for TiMidity(++) # echocheck "TiMidity" if test "$_timidity" = auto ; then # TODO: Is there a good possibility of auto detecting whether we # should include TiMidity support? It can only be used on Unix # currently so we use that as "detection" for now. _timidity="$_posix" fi define_in_config_h_if_yes "$_timidity" 'USE_TIMIDITY' echo "$_timidity" # # Check for ZLib # echocheck "zlib" if test "$_zlib" = auto ; then _zlib=no cat > $TMPC << EOF #include #include int main(void) { return strcmp(ZLIB_VERSION, zlibVersion()); } EOF cc_check $ZLIB_CFLAGS $ZLIB_LIBS -lz && _zlib=yes fi if test "$_zlib" = yes ; then append_var LIBS "$ZLIB_LIBS -lz" append_var INCLUDES "$ZLIB_CFLAGS" fi define_in_config_if_yes "$_zlib" 'USE_ZLIB' echo "$_zlib" # # Check for LibMPEG2 # echocheck "libmpeg2 >= 0.4.0" if test "$_mpeg2" = auto ; then _mpeg2=no cat > $TMPC << EOF typedef signed $type_1_byte int8_t; typedef signed $type_2_byte int16_t; typedef signed $type_4_byte int32_t; typedef unsigned $type_1_byte uint8_t; typedef unsigned $type_2_byte uint16_t; typedef unsigned $type_4_byte uint32_t; extern "C" { #include } int main(void) { #if MPEG2_RELEASE < MPEG2_VERSION(0, 4, 0) #error libmpeg2 version too low #endif /* mpeg2_state_t first appears in 0.4.0 */ mpeg2_state_t state; return 0; } EOF if test -n "$_host"; then # don't execute while cross compiling cc_check $MPEG2_CFLAGS $MPEG2_LIBS -lmpeg2 && _mpeg2=yes else cc_check_no_clean $MPEG2_CFLAGS $MPEG2_LIBS -lmpeg2 && $TMPO$HOSTEXEEXT && _mpeg2=yes cc_check_clean fi fi if test "$_mpeg2" = yes ; then append_var INCLUDES "$MPEG2_CFLAGS" append_var LIBS "$MPEG2_LIBS -lmpeg2" fi define_in_config_if_yes "$_mpeg2" 'USE_MPEG2' echo "$_mpeg2" # # Check for Sparkle if updates support is enabled # # # Check is NSDockTilePlugIn protocol is supported # case $_host_os in darwin*) echocheck "Sparkle" if test "$_updates" = no; then _sparkle=no else if test ! -z $_sparklepath ; then SPARKLE_CFLAGS="-F$_sparklepath" SPARKLE_LIBS="-F$_sparklepath" fi if test "$_sparkle" = auto ; then _sparkle=no cat > $TMPC << EOF #include #include int main(void) { SUUpdater *updater = [SUUpdater sharedUpdater]; return 0; } EOF cc_check $SPARKLE_CFLAGS $SPARKLE_LIBS -framework Sparkle -ObjC++ -lobjc && _sparkle=yes fi if test "$_sparkle" = yes ; then append_var LIBS "$SPARKLE_LIBS -framework Sparkle" append_var INCLUDES "$SPARKLE_CFLAGS" fi define_in_config_if_yes "$_sparkle" 'USE_SPARKLE' fi echo "$_sparkle" ;; *) _sparkle=no ;; esac # # Check is NSDockTilePlugIn protocol is supported # case $_host_os in darwin*) # NSDockTilePlugIn was added in OS X 10.6, so will not be available when compiling on older OS X versions. echocheck "DockTilePlugin" if test "$_osxdockplugin" = auto ; then _osxdockplugin=no cat > $TMPC << EOF #include @interface ScummVMDockTilePlugIn : NSObject { } @end EOF cc_check -c -ObjC++ && _osxdockplugin=yes fi define_in_config_if_yes "$_osxdockplugin" 'USE_DOCKTILEPLUGIN' echo "$_osxdockplugin" ;; *) _osxdockplugin=no ;; esac # # Check for FluidSynth # echocheck "FluidSynth" append_var FLUIDSYNTH_LIBS "-lfluidsynth" case $_host_os in mingw*) FLUIDSYNTH_STATIC_LIBS="$FLUIDSYNTH_LIBS -lglib-2.0 -lintl -liconv -lws2_32 -lole32 -lshlwapi -lpcre -ldsound -lwinmm" ;; darwin*) FLUIDSYNTH_STATIC_LIBS="$FLUIDSYNTH_LIBS -framework Foundation -framework CoreMIDI -framework CoreAudio -lglib-2.0 -lintl -liconv -lreadline" ;; iphone) FLUIDSYNTH_STATIC_LIBS="$FLUIDSYNTH_LIBS -framework Foundation -framework CoreMIDI -lglib-2.0 -lintl -liconv" ;; *) FLUIDSYNTH_STATIC_LIBS="$FLUIDSYNTH_LIBS -lglib-2.0 -lintl -liconv" ;; esac if test "$_fluidsynth" = auto; then _fluidsynth=no cat > $TMPC << EOF #include int main(void) { delete_fluid_settings(new_fluid_settings()); return 0; } EOF cc_check_no_clean $FLUIDSYNTH_CFLAGS $FLUIDSYNTH_LIBS && _fluidsynth=yes if test "$_fluidsynth" != yes; then FLUIDSYNTH_LIBS="$FLUIDSYNTH_STATIC_LIBS" cc_check_no_clean $FLUIDSYNTH_CFLAGS $FLUIDSYNTH_LIBS && _fluidsynth=yes fi cc_check_clean fi if test "$_fluidsynth" = yes; then append_var LIBS "$FLUIDSYNTH_LIBS" append_var INCLUDES "$FLUIDSYNTH_CFLAGS" fi define_in_config_if_yes "$_fluidsynth" 'USE_FLUIDSYNTH' echo "$_fluidsynth" # # Check for readline if text_console is enabled # echocheck "readline" if test "$_text_console" = yes ; then _READLINE_LIBS="-lreadline" if test "$_readline" = auto ; then _readline=no cat > $TMPC << EOF #include #include #include int main(void) { char *x = readline(""); } EOF cc_check_no_clean $READLINE_CFLAGS $READLINE_LIBS $_READLINE_LIBS && _readline=yes if test "$_readline" = no ; then _READLINE_LIBS="-lreadline -ltermcap" cc_check_no_clean $READLINE_CFLAGS $READLINE_LIBS $_READLINE_LIBS && _readline=yes fi fi cc_check_clean echo "$_readline" else _readline=no echo "skipping (text console disabled)" fi if test "$_readline" = yes ; then append_var LIBS "$READLINE_LIBS $_READLINE_LIBS" append_var INCLUDES "$READLINE_CFLAGS" # # Check the type of rl_completion_entry_function. # It can be int(*)(const char *, int) or char *(*)(const char *, int). # cat > $TMPC << EOF #include #include #include int readline_completionFunction(const char *, int); int main(void) { char *x = readline(""); rl_completion_entry_function = &readline_completionFunction; } EOF cc_check -c && add_line_to_config_h '#define USE_READLINE_INT_COMPLETION' fi define_in_config_h_if_yes "$_readline" 'USE_READLINE' define_in_config_h_if_yes "$_text_console" 'USE_TEXT_CONSOLE_FOR_DEBUGGER' # # Check for Unity if taskbar integration is enabled # echocheck "libunity" if test "$_unix" = no || test "$_taskbar" = no; then _libunity=no else if test "$_libunity" = auto ; then case $_host_os in mingw*) # pkgconfig and unity are not supported on mingw _libunity=no ;; *) # Unity has a lots of dependencies, update the libs and cflags var with them LIBUNITY_LIBS="$LIBUNITY_LIBS `pkg-config --libs 'unity > 3.8.1' 2>> "$TMPLOG"`" LIBUNITY_CFLAGS="$LIBUNITY_CFLAGS `pkg-config --cflags 'unity > 3.8.1' 2>> "$TMPLOG"`" _libunity=no cat > $TMPC << EOF #include int main(void) { unity_launcher_entry_get_for_desktop_id("scummvm.desktop"); return 0; } EOF cc_check $LIBUNITY_CFLAGS $LIBUNITY_LIBS && _libunity=yes ;; esac fi if test "$_libunity" = yes ; then if test "$LIBUNITY_CFLAGS" = "" || test "$LIBUNITY_LIBS" = ""; then LIBUNITY_LIBS="$LIBUNITY_LIBS `pkg-config --libs 'unity > 3.8.1' 2>> "$TMPLOG"`" LIBUNITY_CFLAGS="$LIBUNITY_CFLAGS `pkg-config --cflags 'unity > 3.8.1' 2>> "$TMPLOG"`" fi append_var LIBS "$LIBUNITY_LIBS" append_var INCLUDES "$LIBUNITY_CFLAGS" fi define_in_config_h_if_yes "$_libunity" 'USE_UNITY' fi echo "$_libunity" # # Check for FreeType2 to be present # if test "$_freetype2" != "no"; then # Look for the freetype-config script find_freetypeconfig if test -z "$_freetypeconfig"; then _freetype2=no else FREETYPE2_LIBS=`$_freetypeconfig --prefix="$_freetypepath" --libs` FREETYPE2_CFLAGS=`$_freetypeconfig --prefix="$_freetypepath" --cflags` if test "$_freetype2" = "auto"; then _freetype2=no cat > $TMPC << EOF #include #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=`$_freetypeconfig --prefix="$_freetypepath" --static --libs 2>/dev/null` cc_check_no_clean $FREETYPE2_CFLAGS $FREETYPE2_LIBS && _freetype2=yes fi cc_check_clean fi if test "$_freetype2" = "yes"; then append_var LIBS "$FREETYPE2_LIBS" append_var INCLUDES "$FREETYPE2_CFLAGS" fi fi fi echocheck "FreeType2" echo "$_freetype2" define_in_config_if_yes "$_freetype2" "USE_FREETYPE2" # # Check for OpenGL (ES) # echocheck "OpenGL" case $_backend in openpandora) # Only enable OpenGL ES on the OpanPandora if --opengl-mode=gles is passed in explicitly. if test "$_opengl_mode" = "gles" ; then append_var LIBS "-lGLES_CM -lEGL -lX11" else _opengl_mode=none fi ;; esac if test "$_opengl_mode" = auto ; then case $_backend in sdl) case $_sdlversion in 1.2.*) # Stock SDL 1.2 only supports OpenGL contexts. _opengl_mode=gl ;; 2.0.*) # SDL2 supports both OpenGL + OpenGL ES contexts. # However, Mac OS X only allows OpenGL context creation at # this time, thus we limit us to OpenGL on that platform. case $_host_os in darwin*) _opengl_mode=gl ;; *) _opengl_mode=any ;; esac ;; esac ;; tizen) # Tizen always runs in GLES mode _opengl_mode=gles ;; *) _opengl_mode=none ;; esac fi _opengl=yes case $_opengl_mode in auto) # This case should never occur but better safe than sorry. echo "no" _opengl=no ;; none) echo "no" _opengl=no ;; any) echo "yes (runtime detection)" add_line_to_config_h "#undef USE_GLES_MODE" ;; gl) echo "yes (OpenGL)" add_line_to_config_h "#define USE_GLES_MODE 0" ;; gles) echo "yes (OpenGL ES)" add_line_to_config_h "#define USE_GLES_MODE 1" ;; gles2) echo "yes (OpenGL ES 2)" add_line_to_config_h "#define USE_GLES_MODE 2" ;; *) echo "invalid mode specification '$_opengl_mode'. Aborting." exit 1 ;; esac define_in_config_if_yes "$_opengl" "USE_OPENGL" # # Check for Linux CD-ROM support # case $_host_os in *linux*) echocheck "Linux CD-ROM" linuxcd=no cat > $TMPC << EOF #include #include int main(void) { int x = CDROMREADAUDIO; dev_t dev; return major(dev) + x; } EOF cc_check && linuxcd=yes define_in_config_if_yes "$linuxcd" 'USE_LINUXCD' echo "$linuxcd" ;; esac # # Check for nasm # if test "$_have_x86" = yes ; then echocheck "nasm" if test "$_nasm" = no ; then echo "disabled" else IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=$SEPARATOR for path_dir in $_nasmpath; do if test -x "$path_dir/nasm$NATIVEEXEEXT" ; then NASM="$path_dir/nasm$NATIVEEXEEXT" NASMFLAGS="-O1 -g" echo $NASM break fi done # fallback to the nasm compatible yasm if test x$NASM = x -o x$NASM = x'"$NASM"'; then for path_dir in $_nasmpath; do if test -x "$path_dir/yasm$NATIVEEXEEXT" ; then NASM="$path_dir/yasm$NATIVEEXEEXT" NASMFLAGS="-a x86 -m x86" echo $NASM break fi done fi IFS="$ac_save_ifs" if test x$NASM = x -o x$NASM = x'"$NASM"'; then echo "not found" _nasm=no else case $_host_os in darwin*) append_var NASMFLAGS "-f macho" ;; mingw*) append_var NASMFLAGS "-f win32" ;; os2-emx*) append_var NASMFLAGS "-f aout" ;; *) append_var NASMFLAGS "-f elf" ;; esac _nasm=yes fi fi fi define_in_config_if_yes $_nasm 'USE_NASM' # # Enable vkeybd / keymapper / event recorder # define_in_config_if_yes $_vkeybd 'ENABLE_VKEYBD' define_in_config_if_yes $_keymapper 'ENABLE_KEYMAPPER' define_in_config_if_yes $_eventrec 'ENABLE_EVENTRECORDER' # # Check if the keymapper and the event recorder are enabled simultaneously # if test "$_keymapper" = yes ; then if test "$_eventrec" = yes ; then echo "ERROR: The keymapper and the event recorder cannot be enabled simultaneously currently, please disable one of the two" exit 1 fi fi # Check whether to build translation support # echo_n "Building translation support... " define_in_config_if_yes $_translation 'USE_TRANSLATION' if test "$_translation" = no ; then echo "no" else echo_n "yes (" if test "$_detectlang" != yes ; then cat > $TMPC << EOF #include int main(void) { setlocale(LC_ALL, ""); return 0; } EOF _detectlang=no cc_check $LDFLAGS $CXXFLAGS && _detectlang=yes fi define_in_config_h_if_yes $_detectlang 'USE_DETECTLANG' if test "$_detectlang" = yes ; then echo "with runtime language detection)" else echo "without runtime language detection)" fi fi # # Check whether to build taskbar integration support # echo_n "Building taskbar integration support... " if test "$_taskbar" = "no"; then echo "no" else case $_host_os in mingw*) append_var LIBS "-lole32 -luuid" echo "win32" _taskbar=yes ;; darwin*) echo "osx" _taskbar=yes ;; *) if test "$_libunity" = yes; then echo "unity" _taskbar=yes else echo "no" _taskbar=no fi ;; esac fi define_in_config_if_yes $_taskbar 'USE_TASKBAR' # # Check whether to build Bink video support # echo_n "Building Bink video support... " define_in_config_if_yes $_bink 'USE_BINK' echo "$_bink" # # Check whether to build updates support # echo_n "Building updates support... " define_in_config_if_yes $_updates 'USE_UPDATES' if test "$_updates" = yes; then if test "$_sparkle" = yes; then echo "Sparkle" else echo "$_updates" fi else echo "$_updates" fi # # Figure out installation directories # test "x$prefix" = xNONE && prefix=/usr/local test "x$exec_prefix" = xNONE && exec_prefix='${prefix}' case $_host_os in mingw*) # Windows stores all the external data files in executable file. ;; *) append_var DEFINES "-DDATA_PATH=\\\"$datadir\\\"" ;; esac case $_backend in openpandora) # Add ../plugins as a path so plugins can be found when running from a .PND. append_var DEFINES "-DPLUGIN_DIRECTORY=\\\"../plugins\\\"" ;; maemo | webos) # The WebOS and Maemo apps want the plugins in the "lib" directory # without a scummvm sub directory. append_var DEFINES "-DPLUGIN_DIRECTORY=\\\"$libdir\\\"" ;; ps2) # PS2 bogus dir: it actually depends on launch medium append_var DEFINES "-DPLUGIN_DIRECTORY=\\\"host:plugins\\\"" ;; *) append_var DEFINES "-DPLUGIN_DIRECTORY=\\\"$libdir/scummvm\\\"" ;; esac # # 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 append_var CXXFLAGS "-pg" append_var LDFLAGS "-pg" append_var DEFINES "-DENABLE_PROFILING" fi echo_n "Backend... " echo_n "$_backend" if test "$_backend" = "sdl" -a -n "$_sdlversion"; then echo_n " ($_sdlversion)" fi if test "$_nasm" = yes ; then echo_n ", assembly routines" fi if test "$_16bit" = yes ; then echo_n ", 16bit color" fi if test "$_highres" = yes ; then echo_n ", high resolution" fi if test "$_savegame_timestamp" = yes ; then echo_n ", savegame timestamp" fi if test "$_build_scalers" = yes ; then if test "$_build_hq_scalers" = yes ; then echo_n ", HQ scalers" else echo_n ", scalers" fi fi if test "$_mt32emu" = yes ; then echo_n ", MT-32 emulator" fi if test "$_text_console" = yes ; then echo_n ", text console" fi if test "$_vkeybd" = yes ; then echo_n ", virtual keyboard" fi if test "$_keymapper" = yes ; then echo_n ", keymapper" fi if test "$_eventrec" = yes ; then echo ", event recorder" else echo fi # # Some last-minute backend specific stuff, executed # after all of CXXFLAGS, LDFLAGS, LIBS etc. have been setup # case $_backend in 3ds) if test "$_freetype2" = yes -a "$_png" = yes; then append_var LIBS "-lpng" fi if test "$_tremor" = yes -o "$_flac" = yes; then append_var LIBS "-logg" fi ;; android) # ssp at this point so the cxxtests link if test "$_debug_build" = yes; then append_var CXXFLAGS "-fstack-protector" else append_var CXXFLAGS "-fno-stack-protector" fi static_libs='' system_libs='' for lib in $LIBS; do case $lib in -lz|-lm|-ldl) system_libs="$system_libs $lib" ;; *) static_libs="$static_libs $lib" ;; esac done # -lgcc is carefully placed here - we want to catch # all toolchain symbols in *our* libraries rather # than pick up anything unhygenic from the Android libs. LIBS="-Wl,-Bstatic $static_libs -Wl,-Bdynamic -lgcc $system_libs -llog -lGLESv1_CM" ;; n64) # Move some libs down here, otherwise some symbols requires by libvorbis aren't found # during linking stage append_var LIBS "-lc -lgcc -lnosys" ;; esac # # Engine selection # _engines_built_static="" _engines_built_dynamic="" _engines_skipped="" # Show a message if looping over engines takes longer than 5 secs sh -c " touch config.gnomes sleep 5 if test -f config.gnomes; then printf 'Employing little gnomes...' rm -f config.gnomes fi" 2>/dev/null & for engine in $_engines; do # Check whether all dependencies are available check_engine_deps $engine if test "`get_engine_sub $engine`" = "no" ; then # It's a main engine if test `get_engine_build $engine` = no ; then isbuilt=no else # If dynamic plugins aren't supported, mark # all the engines as static if test $_dynamic_modules = no ; then set_var _engine_${engine}_build "static" else # If it wasn't explicitly marked as static or # dynamic, use the configured default if test `get_engine_build $engine` = yes ; then set_var _engine_${engine}_build "${_plugins_default}" fi fi # Prepare the defines if test `get_engine_build $engine` = dynamic ; then isbuilt=DYNAMIC_PLUGIN else set_var _engine_${engine}_build "static" isbuilt=STATIC_PLUGIN fi fi else # It's a subengine, just say yes or no if test "`get_engine_build $engine`" = "no" ; then isbuilt=no else isbuilt=1 fi fi # Save the settings defname="ENABLE_`echo $engine | tr '[a-z]' '[A-Z]'`" if test "$isbuilt" = "no" ; then add_line_to_config_mk "# $defname" else add_line_to_config_mk "$defname = $isbuilt" fi done # Sort engines to place our headline engine at start... # No technical reason, just historical convention headline_engine=scumm _sorted_engines="${headline_engine}" for engine in $_engines; do if test "${engine}" != "${headline_engine}" ; then _sorted_engines="${_sorted_engines} ${engine}" fi done # Prepare the information to be shown for engine in $_sorted_engines; do if test "`get_engine_sub $engine`" = "no" ; then # It's a main engine prepare_engine_build_strings $engine fi done # # Detection of WIP/unstable engines # for engine in $_engines; do engine_build=`get_engine_build $engine` engine_build_default=`get_engine_build_default $engine` if test $engine_build != no -a $engine_build_default = no ; then set_var _tainted_build "yes" fi done add_to_config_h_if_yes `get_var _tainted_build` '#define TAINTED_BUILD' # Complete the message on slow systems if test -f config.gnomes ; then # Kill does not work well here as it produces nasty 'Killed' message rm -rf config.gnomes else echo " work is done" fi # # Show which engines ("frontends") are to be built # echo if test -n "$_engines_built_static" ; then echo "Engines (builtin):" echo "$_engines_built_static" | sed 's/@/\ /g s/#/ /g' fi if test -n "$_engines_built_dynamic" ; then echo "Engines (plugins):" echo "$_engines_built_dynamic" | sed 's/@/\ /g s/#/ /g' fi if test -n "$_engines_skipped" ; then echo "Engines Skipped:" echo "$_engines_skipped" | sed 's/@/\ /g s/#/ /g' fi if test -n "$_engines_built_wip" ; then echo "WARNING: This ScummVM build contains the following UNSTABLE engines:" echo "$_engines_built_wip" | sed 's/@/\ /g s/#/ /g' fi 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 /* 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 signed $type_1_byte int8; typedef signed $type_2_byte int16; typedef signed $type_4_byte int32; EOF if test -n "$_def_64bit_type_unsigned" ; then cat >> config.h << EOF /* 64-bit stuff */ $_def_64bit_type_signed #if defined(__APPLE__) && !defined(__ppc__) #ifndef _UINT64 #define _UINT64 $_def_64bit_type_unsigned #endif #else $_def_64bit_type_unsigned #endif #define HAVE_INT64 EOF fi cat >> config.h << EOF #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 STAGINGPATH=$_stagingpath WIN32PATH=$_win32path AMIGAOSPATH=$_amigaospath STATICLIBPATH=$_staticlibpath XCODETOOLSPATH=$_xcodetoolspath SPARKLEPATH=$_sparklepath SDLCONFIG=$_sdlconfig ABI := $ABI BACKEND := $_backend MODULES += $MODULES MODULE_DIRS += $MODULE_DIRS EXEPRE := $HOSTEXEPRE EXEEXT := $HOSTEXEEXT NASM := $NASM NASMFLAGS := $NASMFLAGS prefix = $prefix exec_prefix = $exec_prefix bindir = $bindir libdir = $libdir datarootdir = $datarootdir datadir = $datadir mandir = $mandir docdir = $docdir $_config_mk_data INCLUDES += $INCLUDES OBJS += $OBJS DEFINES += $DEFINES LDFLAGS += $LDFLAGS $_mak_plugins port_mk = $_port_mk SAVED_CONFIGFLAGS := $SAVED_CONFIGFLAGS SAVED_LDFLAGS := $SAVED_LDFLAGS SAVED_CXX := $SAVED_CXX SAVED_CXXFLAGS := $SAVED_CXXFLAGS SAVED_CPPFLAGS := $SAVED_CPPFLAGS SAVED_ASFLAGS := $SAVED_ASFLAGS SAVED_WINDRESFLAGS := $SAVED_WINDRESFLAGS SAVED_SDL_CONFIG := $SAVED_SDL_CONFIG 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 # Ensure engines folder exists prior to trying to generate # files into it (used for out-of-tree-builds) mkdir -p engines echo "Creating engines/engines.mk" cat > engines/engines.mk << EOF # This file is automatically generated by configure # DO NOT EDIT MANUALLY # This file is being included by "Makefile.common" EOF for engine in $_sorted_engines; do j=`echo $engine | tr '[:lower:]' '[:upper:]'` if test "`get_engine_sub $engine`" = "no" ; then # main engine cat >> engines/engines.mk << EOF ifdef ENABLE_$j DEFINES += -DENABLE_$j=\$(ENABLE_$j) MODULES += engines/$engine EOF for subeng in `get_engine_subengines $engine` ; do k=`echo $subeng | tr '[:lower:]' '[:upper:]'` cat >> engines/engines.mk << EOF ifdef ENABLE_$k DEFINES += -DENABLE_$k endif EOF done cat >> engines/engines.mk << EOF endif EOF fi done echo "Creating engines/plugins_table.h" cat > engines/plugins_table.h << EOF /* This file is automatically generated by configure */ /* DO NOT EDIT MANUALLY */ // This file is being included by "base/plugins.cpp" EOF for engine in $_sorted_engines; do if test "`get_engine_sub $engine`" = "no" ; then j=`echo $engine | tr '[:lower:]' '[:upper:]'` cat >> engines/plugins_table.h << EOF #if PLUGIN_ENABLED_STATIC($j) LINK_PLUGIN($j) #endif EOF fi done