# $Id$ # This file is part of OpenTTD. # OpenTTD 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, version 2. # OpenTTD 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 OpenTTD. If not, see . log() { if [ $1 = "1" ]; then shift echo "$@" else shift fi echo "$@" >> $config_log } set_default() { ignore_extra_parameters="0" # We set all kinds of defaults for params. Later on the user can override # most of them; but if they don't, this default is used. build="" host="" cc_build="" cc_host="" cxx_build="" cxx_host="" windres="" strip="" lipo="" awk="awk" pkg_config="pkg-config" os="DETECT" cpu_type="DETECT" config_log="config.log" prefix_dir="/usr/local" binary_dir="games" data_dir="share/games/openttd" doc_dir="1" icon_dir="share/pixmaps" icon_theme_dir="1" personal_dir="1" shared_dir="1" install_dir="/" man_dir="1" menu_dir="1" menu_group="Game;" menu_name="OpenTTD" binary_name="openttd" enable_debug="0" enable_desync_debug="0" enable_profiling="0" enable_lto="0" enable_dedicated="0" enable_static="1" enable_translator="0" enable_unicode="1" enable_console="1"; enable_assert="1" enable_strip="0" enable_universal="0" enable_osx_g5="0" enable_cocoa_quartz="1" enable_cocoa_quickdraw="1" with_osx_sysroot="1" with_application_bundle="1" with_menu_entry="1" with_allegro="1" with_sdl="1" with_cocoa="1" with_zlib="1" with_lzma="1" with_lzo2="1" with_xdg_basedir="1" with_png="1" enable_builtin_depend="1" with_makedepend="0" with_direct_music="1" with_xaudio2="1" with_sort="1" with_iconv="1" with_midi="" with_midi_arg="" with_fluidsynth="1" with_freetype="1" with_fontconfig="1" with_icu_layout="1" with_icu_sort="1" static_icu="0" with_uniscribe="1" with_threads="1" with_distcc="1" with_ccache="1" with_nforenum="1" with_grfcodec="1" with_sse="1" with_libbfd="1" with_bfd_extra_debug="1" with_self_gdb_debug="1" with_self_lldb_debug="1" save_params_array=" build host cc_build cc_host cxx_build cxx_host windres strip lipo awk pkg_config os cpu_type config_log prefix_dir binary_dir data_dir doc_dir icon_dir icon_theme_dir man_dir menu_dir personal_dir shared_dir install_dir menu_group menu_name binary_name enable_debug enable_desync_debug enable_profiling enable_lto enable_dedicated enable_static enable_translator enable_unicode enable_console enable_assert enable_strip enable_universal enable_osx_g5 enable_cocoa_quartz enable_cocoa_quickdraw with_osx_sysroot with_application_bundle with_allegro with_sdl with_cocoa with_zlib with_lzma with_lzo2 with_xdg_basedir with_png enable_builtin_depend with_makedepend with_direct_music with_xaudio2 with_sort with_iconv with_midi with_midi_arg with_fluidsynth with_freetype with_fontconfig with_icu_layout with_icu_sort static_icu with_uniscribe with_threads with_distcc with_ccache with_grfcodec with_nforenum with_sse with_libbfd with_bfd_extra_debug with_self_gdb_debug with_self_lldb_debug CC CXX CFLAGS CXXFLAGS LDFLAGS CFLAGS_BUILD CXXFLAGS_BUILD LDFLAGS_BUILD PKG_CONFIG_PATH PKG_CONFIG_LIBDIR" } detect_params() { # Walk over all params from the user and override any default settings if # needed. This also handles any invalid option. for p in "$@"; do if [ -n "$prev_p" ]; then eval "$prev_p=\$p" prev_p= continue fi optarg=`expr "x$p" : 'x[^=]*=\(.*\)'` case "$p" in --help | -h | -\?) showhelp; exit 0;; --config-log) prev_p="config_log";; --config-log=*) config_log="$optarg";; --build) prev_p="build";; --build=*) build="$optarg";; --host) prev_p="host";; --host=*) host="$optarg";; --os) prev_p="os";; --os=*) os="$optarg";; --cpu-type) prev_p="cpu_type";; --cpu-type=*) cpu_type="$optarg";; --cc-build) prev_p="cc_build";; --cc-build=*) cc_build="$optarg";; --cc-host) prev_p="cc_host";; --cc-host=*) cc_host="$optarg";; --cxx-build) prev_p="cxx_build";; --cxx-build=*) cxx_build="$optarg";; --cxx-host) prev_p="cxx_host";; --cxx-host=*) cxx_host="$optarg";; --windres) prev_p="windres";; --windres=*) windres="$optarg";; --awk) prev_p="awk";; --awk=*) awk="$optarg";; --pkg-config) prev_p="pkg_config";; --pkg-config=*) pkg_config="$optarg";; --strip) prev_p="strip";; --strip=*) strip="$optarg";; --lipo) prev_p="lipo";; --lipo=*) lipo="$optarg";; # Alias --prefix with --prefix-dir, for compatibility with GNU autotools --prefix-dir | --prefix) prev_p="prefix_dir";; --prefix-dir=* | --prefix=*) prefix_dir="$optarg";; --binary-dir) prev_p="binary_dir";; --binary-dir=*) binary_dir="$optarg";; --data-dir) prev_p="data_dir";; --data-dir=*) data_dir="$optarg";; --doc-dir) prev_p="doc_dir";; --doc-dir=*) doc_dir="$optarg";; --icon-dir) prev_p="icon_dir";; --icon-dir=*) icon_dir="$optarg";; --icon-theme-dir) prev_p="icon_theme_dir";; --icon-theme-dir=*) icon_theme_dir="$optarg";; --without-icon-theme) icon_theme_dir="";; --menu-dir) prev_p="menu_dir";; --menu-dir=*) menu_dir="$optarg";; --without-menu-entry) menu_dir="";; --menu-name) prev_p="menu_name";; --menu-name=*) menu_name="$optarg";; --binary-name) prev_p="binary_name";; --binary-name=*) binary_name="$optarg";; --man-dir) prev_p="man_dir";; --man-dir=*) man_dir="$optarg";; --personal-dir) prev_p="personal_dir";; --personal-dir=*) personal_dir="$optarg";; --without-personal-dir) personal_dir="";; --shared-dir) prev_p="shared_dir";; --shared-dir=*) shared_dir="$optarg";; --without-shared-dir) shared_dir="";; --install-dir) prev_p="install_dir";; --install-dir=*) install_dir="$optarg";; --menu-group) prev_p="menu_group";; --menu-group=*) menu_group="$optarg";; --enable-debug) enable_debug="1";; --enable-debug=*) enable_debug="$optarg";; --enable-desync-debug) enable_desync_debug="1";; --enable-desync-debug=*) enable_desync_debug="$optarg";; --enable-profiling) enable_profiling="1";; --enable-profiling=*) enable_profiling="$optarg";; --enable-lto) enable_lto="1";; --enable-lto=*) enable_lto="$optarg";; --enable-ipo) enable_lto="1";; --enable-ipo=*) enable_lto="$optarg";; --enable-dedicated) enable_dedicated="1";; --enable-dedicated=*) enable_dedicated="$optarg";; --disable-static) enable_static="0";; --enable-static) enable_static="2";; --enable-static=*) enable_static="$optarg";; --disable-translator) enable_translator="0";; --enable-translator) enable_translator="2";; --enable-translator=*) enable_translator="$optarg";; --disable-assert) enable_assert="0";; --enable-assert) enable_assert="2";; --enable-assert=*) enable_assert="$optarg";; --disable-strip) enable_strip="0";; --enable-strip) enable_strip="2";; --enable-strip=*) enable_strip="$optarg";; --disable-universal) enable_universal="0";; --enable-universal) enable_universal="i386 ppc";; --enable-universal=*) enable_universal="$optarg";; --disable-osx-g5) enable_osx_g5="0";; --enable-osx-g5) enable_osx_g5="2";; --enable-osx-g5=*) enable_osx_g5="$optarg";; --disable-unicode) enable_unicode="0";; --enable-unicode) enable_unicode="2";; --enable-unicode=*) enable_unicode="$optarg";; --disable-console) enable_console="0";; --enable-console) enable_console="2";; --enable-console=*) enable_console="$optarg";; --disable-cocoa-quartz) enable_cocoa_quartz="0";; --enable-cocoa-quartz) enable_cocoa_quartz="2";; --enable-cocoa-quartz=*) enable_cocoa_quartz="$optarg";; --disable-cocoa-quickdraw) enable_cocoa_quickdraw="0";; --enable-cocoa-quickdraw) enable_cocoa_quickdraw="2";; --enable-cocoa-quickdraw=*) enable_cocoa_quickdraw="$optarg";; --with-allegro) with_allegro="2";; --without-allegro) with_allegro="0";; --with-allegro=*) with_allegro="$optarg";; --with-sdl) with_sdl="2";; --without-sdl) with_sdl="0";; --with-sdl=*) with_sdl="$optarg";; --with-cocoa) with_cocoa="2";; --without-cocoa) with_cocoa="0";; --with-cocoa=*) with_cocoa="$optarg";; --with-zlib) with_zlib="2";; --without-zlib) with_zlib="0";; --with-zlib=*) with_zlib="$optarg";; --with-lzma) with_lzma="2";; --without-lzma) with_lzma="0";; --with-lzma=*) with_lzma="$optarg";; --with-liblzma) with_lzma="2";; --without-liblzma) with_lzma="0";; --with-liblzma=*) with_lzma="$optarg";; --with-lzo2) with_lzo2="2";; --without-lzo2) with_lzo2="0";; --with-lzo2=*) with_lzo2="$optarg";; --with-liblzo2) with_lzo2="2";; --without-liblzo2) with_lzo2="0";; --with-liblzo2=*) with_lzo2="$optarg";; --with-xdg-basedir) with_xdg_basedir="2";; --without-xdg-basedir) with_xdg_basedir="0";; --with-xdg-basedir=*) with_xdg_basedir="$optarg";; --with-libxdg-basedir) with_xdg_basedir="2";; --without-libxdg-basedir) with_xdg_basedir="0";; --with-libxdg-basedir=*) with_xdg_basedir="$optarg";; --with-png) with_png="2";; --without-png) with_png="0";; --with-png=*) with_png="$optarg";; --with-libpng) with_png="2";; --without-libpng) with_png="0";; --with-libpng=*) with_png="$optarg";; --with-fluidsynth) with_fluidsynth="2";; --without-fluidsynth) with_fluidsynth="0";; --with-fluidsynth=*) with_fluidsynth="$optarg";; --with-freetype) with_freetype="2";; --without-freetype) with_freetype="0";; --with-freetype=*) with_freetype="$optarg";; --with-libfreetype) with_freetype="2";; --without-libfreetype) with_freetype="0";; --with-libfreetype=*) with_freetype="$optarg";; --with-fontconfig) with_fontconfig="2";; --without-fontconfig) with_fontconfig="0";; --with-fontconfig=*) with_fontconfig="$optarg";; --with-libfontconfig) with_fontconfig="2";; --without-libfontconfig) with_fontconfig="0";; --with-libfontconfig=*) with_fontconfig="$optarg";; --with-icu) with_icu_layout="2";with_icu_sort="2";; --without-icu) with_icu_layout="0";with_icu_sort="0";; --with-icu=*) with_icu_layout="$optarg";with_icu_sort="$optarg";; --with-libicu) with_icu_layout="2";with_icu_sort="2";; --without-libicu) with_icu_layout="0";with_icu_sort="0";; --with-libicu=*) with_icu_layout="$optarg";with_icu_sort="$optarg";; --with-icu-layout) with_icu_layout="2";; --without-icu-layout) with_icu_layout="0";; --with-icu-layout=*) with_icu_layout="$optarg";; --with-icu-sort) with_icu_sort="2";; --without-icu-sort) with_icu_sort="0";; --with-icu-sort=*) with_icu_sort="$optarg";; --static-icu) static_icu="1";; --static-icu=*) static_icu="$optarg";; --static-libicu) static_icu="1";; --static-libicu=*) static_icu="$optarg";; --with-uniscribe) with_uniscribe="2";; --without-uniscribe) with_uniscribe="0";; --with-uniscribe=*) with_uniscribe="$optarg";; --disable-builtin-depend) enable_builtin_depend="0";; --enable-builtin-depend) enable_builtin_depend="2";; --enable-builtin-depend=*) enable_builtin_depend="$optarg";; --with-makedepend) with_makedepend="2";; --without-makedepend) with_makedepend="0";; --with-makedepend=*) with_makedepend="$optarg";; --with-direct-music) with_direct_music="2";; --without-direct-music) with_direct_music="0";; --with-direct-music=*) with_direct_music="$optarg";; --with-xaudio2) with_xaudio2="2";; --without-xaudio2) with_xaudio2="0";; --with-xaudio2=*) with_xaudio2="$optarg";; --with-sort) with_sort="2";; --without-sort) with_sort="0";; --with-sort=*) with_sort="$optarg";; --with-iconv) with_iconv="2";; --without-iconv) with_iconv="0";; --with-iconv=*) with_iconv="$optarg";; --with-midi=*) with_midi="$optarg";; --with-midi-arg=*) with_midi_arg="$optarg";; --without-distcc) with_distcc="0";; --with-distcc) with_distcc="2";; --with-distcc=*) with_distcc="$optarg";; --without-ccache) with_ccache="0";; --with-ccache) with_ccache="2";; --with-ccache=*) with_ccache="$optarg";; --without-nforenum) with_nforenum="0";; --with-nforenum) with_nforenum="2";; --with-nforenum=*) with_nforenum="$optarg";; --without-grfcodec) with_grfcodec="0";; --with-grfcodec) with_grfcodec="2";; --with-grfcodec=*) with_grfcodec="$optarg";; --without-osx-sysroot) with_osx_sysroot="0";; --with-osx-sysroot) with_osx_sysroot="2";; --with-osx-sysroot=*) with_osx_sysroot="$optarg";; --without-application-bundle) with_application_bundle="0";; --with-application-bundle) with_application_bundle="1";; --with-application-bundle=*) with_application_bundle="$optarg";; --without-threads) with_threads="0";; --with-threads) with_threads="1";; --with-threads=*) with_threads="$optarg";; --without-sse) with_sse="0";; --with-sse) with_sse="1";; --with-sse=*) with_sse="$optarg";; --without-libbfd) with_libbfd="0";; --with-libbfd) with_libbfd="1";; --with-libbfd=*) with_libbfd="$optarg";; --without-bfd-extra-debug) with_bfd_extra_debug="0";; --with-bfd-extra-debug) with_bfd_extra_debug="1";; --with-bfd-extra-debug=*) with_bfd_extra_debug="$optarg";; --without-self-gdb-debug) with_self_gdb_debug="0";; --with-self-gdb-debug) with_self_gdb_debug="1";; --with-self-gdb-debug=*) with_self_gdb_debug="$optarg";; --without-self-lldb-debug) with_self_lldb_debug="0";; --with-self-lldb-debug) with_self_lldb_debug="1";; --with-self-lldb-debug=*) with_self_lldb_debug="$optarg";; CC=* | --CC=*) CC="$optarg";; CXX=* | --CXX=*) CXX="$optarg";; CFLAGS=* | --CFLAGS=*) CFLAGS="$optarg";; CXXFLAGS=* | --CXXFLAGS=*) CXXFLAGS="$optarg";; LDFLAGS=* | --LDFLAGS=*) LDFLAGS="$optarg";; CFLAGS_BUILD=* | --CFLAGS_BUILD=* | --CFLAGS-BUILD=*) CFLAGS_BUILD="$optarg";; CXXFLAGS_BUILD=* | --CXXFLAGS_BUILD=* | --CXXFLAGS-BUILD=*) CXXFLAGS_BUILD="$optarg";; LDFLAGS_BUILD=* | --LDFLAGS_BUILD=* | --LDFLAGS-BUILD=*) LDFLAGS_BUILD="$optarg";; PKG_CONFIG_PATH=* | --PKG_CONFIG_PATH=* | --PKG-CONFIG-PATH=*) PKG_CONFIG_PATH="$optarg";; PKG_CONFIG_LIBDIR=* | --PKG_CONFIG_LIBDIR=* | --PKG-CONFIG-LIBDIR=*) PKG_CONFIG_LIBDIR="$optarg";; --ignore-extra-parameters) ignore_extra_parameters="1";; --* | -*) if [ "$ignore_extra_parameters" = "0" ]; then log 1 "Unknown option $p" exit 1 else log 1 "Unknown option $p ignored" fi ;; esac done if [ -n "$prev_p" ]; then log 1 "configure: error: missing argument to --$prev_p" exit 1 fi # Clean the logfile echo "" > $config_log log 2 "Invocation: $0 $*" if [ "$ignore_extra_parameters" = "0" -o ! -f config.invocation ]; then echo "$0 $*" > config.invocation CONFIGURE_INVOCATION="$0 $*" else CONFIGURE_INVOCATION="`cat config.invocation`" fi } save_params() { # Here we save all params, so we can later on do an exact redo of this # configuration, without having the user to re-input stuff echo "Running configure with following options:" >> $config_log echo "" >> $config_log configure="$CONFIGURE_EXECUTABLE --ignore-extra-parameters" for p in $save_params_array; do eval "v=\"\$$p\"" p=`echo "$p" | sed 's@_@-@g;s@\n@@g;s@ @\\ @g'` # Only save those params that aren't empty configure="$configure --$p=\"$v\"" done echo "$configure" >> $config_log echo "$configure" > config.cache echo "" >> $config_log } # Export a variable so tools like pkg-config can see it when invoked. # If the variable contains an empty string then unset it. # $1 - name of the variable to export or unset export_or_unset() { eval local value=\$$1 if [ -n "$value" ]; then export $1; log 2 "using $1=$value"; else unset $1; log 2 "not using $1"; fi } check_params() { # Some params want to be in full uppercase, else they might not work as # expected.. fix that here os=`echo $os | tr '[a-z]' '[A-Z]'` cpu_type=`echo $cpu_type | tr '[a-z]' '[A-Z]'` # Export some variables to be used by pkg-config # # PKG_CONFIG_LIBDIR variable musn't be set if we are not willing to # override the default pkg-config search path, it musn't be an empty # string. If the variable is empty (e.g. when an empty string comes # from config.cache) then unset it. This way the "don't override" state # will be properly preserved when (re)configuring. export_or_unset PKG_CONFIG_PATH export_or_unset PKG_CONFIG_LIBDIR # Check if all params have valid values # OS only allows DETECT, UNIX, OSX, FREEBSD, DRAGONFLY, OPENBSD, NETBSD, HAIKU, SUNOS, CYGWIN, MINGW, and OS2 if [ -z "`echo $os | egrep '^(DETECT|UNIX|OSX|FREEBSD|DRAGONFLY|OPENBSD|NETBSD|HPUX|HAIKU|SUNOS|CYGWIN|MINGW|OS2)$'`" ]; then log 1 "configure: error: invalid option --os=$os" log 1 " Available options are: --os=[DETECT|UNIX|OSX|FREEBSD|DRAGONFLY|OPENBSD|NETBSD|HPUX|HAIKU|SUNOS|CYGWIN|MINGW|OS2]" exit 1 fi # cpu_type can be either 32 or 64 if [ -z "`echo $cpu_type | egrep '^(32|64|DETECT)$'`" ]; then log 1 "configure: error: invalid option --cpu-type=$cpu_type" log 1 " Available options are: --cpu-type[=DETECT|32|64]" exit 1 fi # enable_debug should be between 0 and 4 if [ -z "`echo $enable_debug | egrep '^[0123]$'`" ]; then log 1 "configure: error: invalid option --enable-debug=$enable_debug" log 1 " Available options are: --enable-debug[=0123]" exit 1 fi # enable_desync_debug should be between 0 and 3 if [ -z "`echo $enable_desync_debug | egrep '^[012]$'`" ]; then log 1 "configure: error: invalid option --enable-desync-debug=$enable_desync_debug" log 1 " Available options are: --enable-desync-debug[=012]" exit 1 fi detect_awk detect_os check_build check_host # Check for universal builds; they only make sense for OSX, so fail if enabled for another OS if [ "$enable_universal" = "0" ]; then log 1 "checking universal build... no" else if [ "$os" != "OSX" ]; then log 1 "configure: error: --enable-universal only works on OSX" exit 1 fi log 1 "checking universal build... yes, for: $enable_universal" fi # Already detected by check_build log 1 "checking build cc... $cc_build" log 1 "checking host cc... $cc_host" check_cxx_build check_cxx_host check_windres if [ "$enable_strip" != "0" ]; then check_strip else log 1 "checking strip... disabled" fi check_lipo if [ "$enable_builtin_depend" != "0" ]; then log 1 "checking builtin depend... yes" makedepend="\$(SRC_OBJS_DIR)/\$(DEPEND)" else log 1 "checking builtin depend... no" fi check_makedepend detect_cputype detect_sse_capable_architecture if [ "$enable_static" = "1" ]; then if [ "$os" = "MINGW" ] || [ "$os" = "CYGWIN" ]; then enable_static="2" else enable_static="0" fi fi if [ "$enable_static" != "0" ]; then log 1 "checking static... yes" if [ "$os" != "MINGW" ] && [ "$os" != "CYGWIN" ] && [ "$os" != "OSX" ]; then log 1 "WARNING: static is only known to work on Windows, and MacOSX" log 1 "WARNING: use static at your own risk on this platform" sleep 5 fi else log 1 "checking static... no" fi if [ "$enable_unicode" = "1" ]; then if [ "$os" = "MINGW" ] || [ "$os" = "CYGWIN" ]; then enable_unicode="2" else enable_unicode="0" fi fi if [ "$enable_unicode" != "0" ]; then log 1 "checking unicode... yes" else log 1 "checking unicode... no" fi # Show what we configured if [ "$enable_debug" = "0" ]; then log 1 "using debug level... no" elif [ "$enable_profiling" != "0" ]; then log 1 "using debug level... profiling (debug level $enable_debug)" else log 1 "using debug level... level $enable_debug" fi if [ "$enable_desync_debug" = "0" ]; then log 1 "using desync debug level... no" else log 1 "using desync debug level... level $enable_desync_debug" log 1 "WARNING: desync debug functions slow down the game considerably." log 1 "WARNING: use only when you are instructed to do so" log 1 " or when you know what you are doing." sleep 5 fi if [ "$enable_lto" != "0" ]; then # GCC 4.5 outputs '%{flto}', GCC 4.6 outputs '%{flto*}' has_lto=`($cxx_build -dumpspecs 2>&1 | grep '\%{flto') || ($cxx_build -help ipo 2>&1 | grep '\-ipo')` if [ -n "$has_lto" ]; then log 1 "using link time optimization... yes" else enable_lto="0" log 1 "using link time optimization... no" log 1 "WARNING: you selected link time optimization but it is not found." sleep 5 fi else log 1 "using link time optimization... no" fi if [ "$os" != "OSX" ] && [ "$with_osx_sysroot" != "0" ]; then if [ "$with_osx_sysroot" = "1" ]; then with_osx_sysroot="0" log 1 "checking OSX sysroot... not OSX, skipping" else log 1 "configure: error: --with-osx-sysroot only works if OSX is the target" exit 1 fi fi if [ "$with_osx_sysroot" != "0" ]; then if [ "$enable_universal" = "0" ] && [ "$with_osx_sysroot" != "1" ] && [ "$with_osx_sysroot" != "2" ]; then # Sysroot manually specified? Check for usability log 1 "checking OSX sysroot... $with_osx_sysroot" if ! check_osx_sdk "$with_osx_sysroot"; then log 1 "Passed sysroot not found/not functional" exit 1 fi else # If autodetect and no universal, use system default if [ "$with_osx_sysroot" = "1" ] && [ "$enable_universal" = "0" ]; then log 1 "checking OSX sysroot... no (use system default)" else log 1 "checking OSX sysroot... automatically" detect_osx_sdk fi fi if [ -n "$osx_sdk_path" ]; then if [ "$enable_universal" != "0" ]; then if [ -z "$osx_sdk_104_path" ]; then log 1 "WARNING: Could not find a usable 10.4u SDK, the resulting" log 1 "WARNING: binary will only run on OSX 10.5 or later" osx_sdk_104_path="$osx_sdk_path" fi OSX_SYSROOT="-isysroot $osx_sdk_104_path" OSX_LD_SYSROOT="-Wl,-syslibroot,$osx_sdk_104_path" else OSX_SYSROOT="-isysroot $osx_sdk_path" OSX_LD_SYSROOT="-Wl,-syslibroot,$osx_sdk_path" fi fi else if [ "$os" = "OSX" ]; then log 1 "checking OSX sysroot... no (use system default)" fi fi detect_allegro detect_sdl detect_cocoa if [ "$enable_dedicated" != "0" ]; then log 1 "checking GDI video driver... dedicated server, skipping" log 1 "checking dedicated... found" else if [ "$os" = "MINGW" ] || [ "$os" = "CYGWIN" ]; then log 1 "checking GDI video driver... found" else log 1 "checking GDI video driver... not Windows, skipping" fi if [ -z "$allegro_config" ] && [ -z "$sdl_config" ] && [ "$with_cocoa" = 0 ] && [ "$os" != "MINGW" ] && [ "$os" != "CYGWIN" ]; then log 1 "configure: error: no video driver development files found" log 1 " If you want a dedicated server use --enable-dedicated as parameter" exit 1 else log 1 "checking dedicated... not selected" fi fi if [ "$os" != "MINGW" ] && [ "$os" != "CYGWIN" ]; then log 1 "checking console application... not Windows, skipping" elif [ "$enable_console" = "1" ] && [ "$enable_dedicated" != "0" ]; then log 1 "checking console application... dedicated server, enabled" enable_console="2" elif [ "$enable_console" = "1" ]; then log 1 "checking console application... disabled (only used when forced)" enable_console="0" elif [ "$enable_console" = "0" ]; then log 1 "checking console application... disabled" else log 1 "checking console application... enabled" fi log 1 "checking squirrel... found" SCRIPT_SRC_DIR="$ROOT_DIR/src/3rdparty/squirrel/include" if [ "$enable_translator" != "0" ]; then log 1 "checking translator... debug" # -t shows TODO items, normally they are muted strgen_flags="-t" else log 1 "checking translator... no" strgen_flags="" fi if [ "$enable_assert" != "0" ]; then log 1 "checking assert... enabled" else log 1 "checking assert... disabled" fi pre_detect_with_zlib=$with_zlib detect_zlib if [ "$with_zlib" = "0" ] || [ -z "$zlib_config" ]; then log 1 "WARNING: zlib was not detected or disabled" log 1 "WARNING: OpenTTD doesn't require zlib, but it does mean that many features" log 1 "WARNING: (like loading most old savegames/scenarios, loading heightmaps," log 1 "WARNING: using PNG, or using fonts, ...) will be disabled." if [ "$pre_detect_with_zlib" = "0" ]; then log 1 "WARNING: We strongly suggest you to install zlib." else log 1 "configure: error: no zlib detected" log 1 " If you want to compile without zlib use --without-zlib as parameter" exit fi fi pre_detect_with_lzma=$with_lzma detect_lzma if [ "$with_lzma" = "0" ] || [ -z "$lzma_config" ]; then log 1 "WARNING: lzma was not detected or disabled" log 1 "WARNING: OpenTTD doesn't require lzma, but it does mean that many features" log 1 "WARNING: (like loading most savegames/scenarios and joining most servers)" log 1 "WARNING: will be disabled." if [ "$pre_detect_with_lzma" = "0" ]; then log 1 "WARNING: We strongly suggest you to install liblzma." log 1 "configure: error: no liblzma detected" else log 1 " If you want to compile without lzma use --without-lzma as parameter" exit fi fi pre_detect_with_lzo2=$with_lzo2 detect_lzo2 if [ "$with_lzo2" = "0" ] || [ -z "$lzo2" ]; then log 1 "WARNING: liblzo2 was not detected or disabled" log 1 "WARNING: OpenTTD doesn't require liblzo2, but it does mean that" log 1 "WARNING: loading old savegames/scenarios will be disabled." if [ "$pre_detect_with_lzo2" = "0" ]; then log 1 "WARNING: We strongly suggest you to install liblzo2." else log 1 "configure: error: no liblzo2 detected" log 1 " If you want to compile without liblzo2 use --without-liblzo2 as parameter" exit fi fi if [ "$with_uniscribe" != "0" ]; then if [ "$os" != "MINGW" ]; then if [ "$with_uniscribe" != "1" ]; then log 1 "configure: error: Uniscribe is only supported on native Win32 targets" exit 1 fi with_uniscribe="0" log 1 "checking Uniscribe text layout... not Windows, skipping" else log 1 "checking Uniscribe text layout... found" # Don't use ICU unless forced. if [ "$with_icu_layout" = "1" ]; then with_icu_layout="0" fi if [ "$with_icu_sort" = "1" ]; then with_icu_sort="0" fi fi fi detect_xdg_basedir detect_png detect_freetype detect_fontconfig detect_icu_layout detect_icu_sort detect_fluidsynth if [ "$with_direct_music" != "0" ]; then if [ "$os" != "MINGW" ] && [ "$os" != "CYGWIN" ]; then if [ "$with_direct_music" != "1" ]; then log 1 "configure: error: direct-music is only supported on Win32 targets" exit 1 fi with_direct_music="0" log 1 "checking direct-music... not Windows, skipping" else check_direct_music fi fi if [ "$with_xaudio2" != "0" ]; then if [ "$os" != "MINGW" ] && [ "$os" != "CYGWIN" ]; then if [ "$with_xaudio2" != "1" ]; then log 1 "configure: error: xaudio2 is only supported on Win32 targets" exit 1 fi with_xaudio2="0" log 1 "checking xaudio2... not Windows, skipping" else check_xaudio2 fi fi detect_sort # Suppress language errors when there is a version defined, indicating a release # It just isn't pretty if any release produces warnings in the languages. if [ -f "$ROOT_DIR/version" ]; then lang_suppress="yes" log 1 "suppress language errors... yes" else lang_suppress="" log 1 "suppress language errors... no" fi if [ "$enable_debug" = "0" ] && [ "$enable_profiling" = "0" ] && [ "$enable_strip" != "0" ]; then if [ "$os" = "OSX" ]; then strip_arg="" elif [ "$os" = "OS2" ]; then strip_arg="" # OS2 uses strip via gcc, because it needs to be feed to emxbind LDFLAGS="$LDFLAGS -s" elif [ "$os" = "SUNOS" ]; then # The GNU strip does know -s, the non-GNU doesn't # So try to detect it (in a bit of an ugly way) strip_arg="`$strip -s strip.test 2>/dev/null && echo \"-s\"`" else strip_arg="-s" fi log 1 "checking stripping... $strip $strip_arg" else strip="" log 1 "checking stripping... skipped" fi if [ "$with_distcc" = "0" ]; then log 1 "checking distcc... no" elif [ "$with_distcc" = "1" ]; then with_distcc="0" log 1 "checking distcc... no (only used when forced)" elif [ "$with_distcc" = "2" ]; then distcc="distcc" else distcc="$with_distcc" fi if [ "$with_distcc" != "0" ]; then res="`$distcc --version 2>/dev/null | head -n 1 | cut -b 1-6`" if [ "$res" != "distcc" ]; then distcc="" log 1 "checking distcc... no" if [ "$with_distcc" = "2" ]; then log 1 "configure: error: no distcc detected, but was forced to be used" exit 1 fi if [ "$with_distcc" != "1" ]; then log 1 "configure: error: '$with_distcc' doesn't seem a distcc to me" exit 1 fi fi log 1 "checking distcc... $distcc" fi if [ "$with_ccache" = "0" ]; then log 1 "checking ccache... no" elif [ "$with_ccache" = "1" ]; then with_ccache="0" log 1 "checking ccache... no (only used when forced)" elif [ "$with_ccache" = "2" ]; then ccache="ccache" else ccache="$with_ccache" fi if [ "$with_ccache" != "0" ]; then res="`$ccache --version 2>/dev/null | head -n 1 | cut -b 1-6`" if [ "$res" != "ccache" ]; then ccache="" log 1 "checking ccache... no" if [ "$with_ccache" = "2" ]; then log 1 "configure: error: no ccache detected, but was forced to be used" exit 1 fi if [ "$with_ccache" != "1" ]; then log 1 "configure: error: '$with_ccache' doesn't seem a ccache to me" exit 1 fi fi log 1 "checking ccache... $ccache" fi detect_grfcodec detect_nforenum if [ -z "$grfcodec" ] && [ -n "$nforenum" ]; then log 1 "checking nforenum/grfcodec... nforenum needs grfcodec enabled, disabling nforenum" nforenum="" fi if [ -z "$nforenum" ] && [ -n "$grfcodec" ]; then log 1 "checking nforenum/grfcodec... grfcodec needs nforenum enabled, disabling grfcodec" grfcodec="" fi if [ "$os" != "OSX" ] && [ "$with_application_bundle" != "0" ]; then if [ "$with_application_bundle" = "1" ]; then with_application_bundle="0" log 1 "checking OSX application bundle... not OSX, skipping" else log 1 "configure: error: --with-application-bundle only works if OSX is the target" exit 1 fi fi if [ "$os" = "OSX" ] && [ "$with_application_bundle" = "1" ]; then OSXAPP="OpenTTD.app" else OSXAPP="" fi if [ "$os" = "OSX" ]; then # Test on ppc970 (G5) - we can optimize there if [ "$enable_osx_g5" != "0" ]; then log 1 "detecting ppc970 (G5)... yes (forced)" else # First, are we a real OSX system, else we can't detect it native=`LC_ALL=C uname | tr '[A-Z]' '[a-z]' | grep darwin` # If $host doesn't match $build , we are cross-compiling if [ -n "$native" ] && [ "$build" = "$host" ]; then $cxx_build $SRC_DIR/os/macosx/G5_detector.cpp -o G5_detector res=`./G5_detector` rm -f G5_detector if [ -n "$res" ]; then # This is G5, add flags for it enable_osx_g5="2" log 1 "detecting ppc970 (G5)... yes" else enable_osx_g5="0" log 1 "detecting ppc970 (G5)... no" fi else enable_osx_g5="0" log 1 "detecting ppc970 (G5)... no (cross-compiling)" fi fi else if [ "$enable_osx_g5" != "0" ]; then log 1 "configure: error: ppc970 (OSX G5) selected, but not compiling for OSX" log 1 "configure: error: either select OSX as OS, or deselect ppc970" exit 1 fi fi if [ -d "$ROOT_DIR/.git" ] && [ -n "`git help 2>/dev/null`" ]; then log 1 "checking revision... git detection" elif [ -f "$ROOT_DIR/.ottdrev-vc" ]; then log 1 "checking revision... source release version" elif [ -d "$ROOT_DIR/.svn" ] && [ -n "`svn help 2>/dev/null`" ]; then log 1 "checking revision... svn detection" elif [ -d "$ROOT_DIR/../.svn" ] && [ -n "`svn help 2>/dev/null`" ] && [ -n "`LC_ALL=C svn info $ROOT_DIR/.. | grep '^URL:.*tags$'`" ]; then # subversion changed its behaviour; now not all folders have a .svn folder, # but only the root folder. Since making tags requires a (sparse) checkout # of the tags folder, the folder of the tag does not have a .svn folder # anymore and this fails to detect the subversion repository checkout. log 1 "checking revision... svn detection (tag)" elif [ -d "$ROOT_DIR/.hg" ] && [ -n "`HGPLAIN= hg help 2>/dev/null`" ]; then log 1 "checking revision... hg detection" elif [ -f "$ROOT_DIR/.ottdrev" ]; then log 1 "checking revision... source tarball" else log 1 "checking revision... no detection" log 1 "WARNING: there is no means to determine the version." log 1 "WARNING: please use a subversion, mercurial, or git checkout of OpenTTD." log 1 "WARNING: you can only join game servers that have been compiled without" log 1 "WARNING: version detection." log 1 "WARNING: there is a great chance you desync." log 1 "WARNING: USE WITH CAUTION!" sleep 5 fi if [ "$doc_dir" = "1" ]; then if [ "$os" = "UNIX" ] || [ "$os" = "FREEBSD" ] || [ "$os" = "DRAGONFLY" ] || [ "$os" = "OPENBSD" ] || [ "$os" = "NETBSD" ] || [ "$os" = "HPUX" ] || [ "$os" = "SUNOS" ]; then doc_dir="share/doc/openttd" else doc_dir="$data_dir/docs" fi else doc_dir="`echo $doc_dir | sed 's@\([^\]\)\\\\ @\1\\\\\\\\ @g;s@\([^\]\) @\1\\\\\\\\ @g'`" fi if [ "$icon_theme_dir" = "1" ]; then if [ "$os" = "UNIX" ] || [ "$os" = "FREEBSD" ] || [ "$os" = "DRAGONFLY" ] || [ "$os" = "OPENBSD" ] || [ "$os" = "NETBSD" ] || [ "$os" = "HPUX" ] || [ "$os" = "SUNOS" ]; then icon_theme_dir="share/icons/hicolor" else icon_theme_dir="" fi else icon_theme_dir="`echo $icon_theme_dir | sed 's@\([^\]\)\\\\ @\1\\\\\\\\ @g;s@\([^\]\) @\1\\\\\\\\ @g'`" fi if [ "$personal_dir" = "1" ]; then if [ "$os" = "MINGW" ] || [ "$os" = "CYGWIN" ] || [ "$os" = "HAIKU" ]; then personal_dir="OpenTTD" elif [ "$os" = "OSX" ]; then personal_dir="Documents/OpenTTD" else personal_dir=".openttd" fi else personal_dir="`echo $personal_dir | sed 's@\([^\]\)\\\\ @\1\\\\\\\\ @g;s@\([^\]\) @\1\\\\\\\\ @g'`" fi if [ "$shared_dir" = "1" ]; then # we are using default values if [ "$os" = "OSX" ]; then shared_dir="/Library/Application\\\\ Support/OpenTTD" else shared_dir="" fi else shared_dir="`echo $shared_dir | sed 's@\([^\]\)\\\\ @\1\\\\\\\\ @g;s@\([^\]\) @\1\\\\\\\\ @g'`" fi if [ "$man_dir" = "1" ]; then # add manpage on UNIX systems if [ "$os" = "UNIX" ] || [ "$os" = "FREEBSD" ] || [ "$os" = "DRAGONFLY" ] || [ "$os" = "OPENBSD" ] || [ "$os" = "NETBSD" ] || [ "$os" = "HPUX" ] || [ "$os" = "SUNOS" ] || [ "$os" = "OSX" ]; then man_dir="share/man/man6" else man_dir="" fi else man_dir="`echo $man_dir | sed 's@\([^\]\)\\\\ @\1\\\\\\\\ @g;s@\([^\]\) @\1\\\\\\\\ @g'`" fi if [ "$menu_dir" = "1" ]; then # add a freedesktop menu item only for some UNIX systems if [ "$os" = "UNIX" ] || [ "$os" = "FREEBSD" ] || [ "$os" = "DRAGONFLY" ] || [ "$os" = "OPENBSD" ] || [ "$os" = "NETBSD" ] || [ "$os" = "HPUX" ] || [ "$os" = "SUNOS" ]; then menu_dir="share/applications" else menu_dir="" fi else menu_dir="`echo $menu_dir | sed 's@\([^\]\)\\\\ @\1\\\\\\\\ @g;s@\([^\]\) @\1\\\\\\\\ @g'`" fi detect_iconv if [ -n "$personal_dir" ] then log 1 "personal home directory... $personal_dir" else log 1 "personal home directory... none" fi if [ -n "$shared_dir" ] then log 1 "shared data directory... $shared_dir" else log 1 "shared data directory... none" fi if [ -n "$install_dir" ] then log 1 "installation directory... $install_dir" else log 1 "installation directory... none" fi if [ -n "$icon_theme_dir" ] then log 1 "icon theme directory... $icon_theme_dir" else log 1 "icon theme directory... none" fi if [ -n "$man_dir" ] then log 1 "manual page directory... $man_dir" else log 1 "manual page directory... none" fi if [ -n "$menu_dir" ] then log 1 "menu item directory... $menu_dir" else log 1 "menu item directory... none" fi } make_compiler_cflags() { # Params: # $1 - compiler # $2 - name of the cflags variable # $3 - name of the cxxflags variable # $4 - name of the ldflags variable # $5 - name of the features variable # Get the compiler to tell us who it is version_line="`$1 --version | head -n1`" eval eval "flags=\\\$$2" eval eval "cxxflags=\\\$$3" eval eval "ldflags=\\\$$4" eval eval "features=\\\$$5" cppstd="-std=c++11" if [ `echo "$version_line" | cut -d' ' -f1` = "icc" ]; then # Enable some things only for certain ICC versions cc_version=`$1 -dumpversion | cut -c 1-4 | sed s@\\\.@@g` flags="$flags -rdynamic" ldflags="$ldflags -rdynamic" if [ -z "$first_time_icc_check" ]; then first_time_icc_check=no if [ $cc_version -lt 90 ]; then log 1 "WARNING: you seem to be using a very old version of ICC" log 1 "WARNING: OpenTTD hasn't been tested with this version" sleep 5 elif [ $cc_version -lt 120 ]; then log 1 "WARNING: you seem to be using an unsupported ICC version" log 1 "WARNING: ICC older than 12.0 is known to fail to compile OpenTTD" sleep 5 fi fi flags="$flags -Wall" # remark #111: statement is unreachable flags="$flags -wd111" # remark #181: argument is incompatible with corresponding format string conversion # ICC is very picky about signedness of operands, warnings provided by GCC are enough flags="$flags -wd181" # remark #271: trailing comma is nonstandard flags="$flags -wd271" # remark #280: selector expression is constant flags="$flags -wd280" # remark #304: access control not specified ("public" by default) flags="$flags -wd304" # remark #383: value copied to temporary, reference to temporary used flags="$flags -wd383" # remark #444: destructor for base class ... is not virtual flags="$flags -wd444" # remark #593: variable ... was set but never used flags="$flags -wd593" # warning #654: overloaded virtual function ... is only partially overridden in class ... flags="$flags -wd654" # remark #810: conversion from ... to ... may lose significant bits flags="$flags -wd810" # remark #869: parameter ... was never referenced flags="$flags -wd869" # warning #873: function ... ::operator new ... has no corresponding operator delete ... flags="$flags -wd873" # remark #981: operands are evaluated in unspecified order flags="$flags -wd981" # remark #1418: external function definition with no prior declaration flags="$flags -wd1418" # remark #1419: external declaration in primary source file flags="$flags -wd1419" # remark #1572: floating-point equality and inequality flags="$flags -wd1572" # remark #1599: declaration hides variable/parameter ... flags="$flags -wd1599" # remark #1720: function ... ::operator new ... has no corresponding member operator delete ... flags="$flags -wd1720" if [ $cc_version -lt 110 ]; then # warns about system headers with recent glibc: # warning #1292: attribute "__nonnull__" ignored flags="$flags -wd1292" fi if [ $cc_version -ge 100 ]; then # warning #1899: multicharacter character literal (potential portability problem) flags="$flags -wd1899" # vec report defaults to telling where it did loop vectorisation, which is not very important flags="$flags -vec-report=0 " fi if [ $cc_version -ge 110 ]; then # remark #2259: non-pointer conversion from ... to ... may lose significant bits flags="$flags -wd2259" fi if [ $cc_version -lt 140 ]; then log 1 "configure: error: ICC version is too old: `$1 -dumpversion`, minumum: 14.0" exit 1 fi if [ "$enable_lto" != "0" ]; then has_ipo=`$1 -help ipo | grep '\-ipo'` if [ -n "$has_ipo" ]; then # Use IPO (only if we see IPO exists and is requested) flags="$flags -ipo" features="$features lto" fi fi elif echo "$version_line" | grep -q "clang"; then # Enable some things only for certain clang versions # Need to try really hard to get the version line, because OSX clang likes to hide its true version cc_version="`$1 -v 2>&1 | grep -i version | head -n 1 | sed s@[^0-9.]@@g | $awk -F . '{printf "%d%02d\n", $1, $2}'`" # aliasing rules are not held in openttd code flags="$flags -fno-strict-aliasing" # -W alone doesn't enable all warnings enabled by -Wall; on the other hand, # -Weverything enables too many useless warnings that can't be disabled (as of 3.0) flags="$flags -Wall -W -Wextra" # warning: unused parameter '...' flags="$flags -Wno-unused-parameter" # warning: expression result unused flags="$flags -Wno-unused-value" # warning: multi-character character constant flags="$flags -Wno-multichar" # warning: explicitly assigning a variable of type '...' to itself # it happens when using the FOR_ALL_WINDOWS_FROM_BACK_FROM macro flags="$flags -Wno-self-assign" # warning: is a C++11 extension flags="$flags -Wno-c++11-extensions" if [ "$cc_version" -lt "300" ]; then # warning: equality comparison with extraneous parentheses flags="$flags -Wno-parentheses" # warning: operands of ? are integers of different signs: 'unsigned int' and 'int' flags="$flags -Wno-sign-compare" fi if [ "$cc_version" -ge "300" ]; then # warning: equality comparison with extraneous parentheses # this warning could be useful, but it warns about code in squirrel flags="$flags -Wno-parentheses-equality" fi if [ "$with_ccache" != "0" -o "$with_distcc" != "0" ]; then # ccache and distcc run separate preprocess and compile passes, # both are fed with the same CFLAGS. Unfortunately, clang # complains about -I when compiling preprocessed files: # "clang: warning: argument unused during compilation: '-I /usr/include'" flags="$flags -Qunused-arguments" fi if [ "$enable_assert" -eq "0" ]; then # do not warn about unused variables when building without asserts flags="$flags -Wno-unused-variable" fi if [ "$cc_version" -ge "303" ]; then # clang completed C++11 support in version 3.3 flags="$flags -DCUSTOM_ALLOCATOR" else log 1 "configure: error: clang version is too old: `$1 -v 2>&1 | grep -i version | head -n 1`, minumum: 3.3" exit 1 fi # rdynamic is used to get useful stack traces from crash reports. ldflags="$ldflags -rdynamic" # Assume gcc, since it just uses argv[0] in its --version output else # Enable some things only for certain GCC versions # cc_version = major_version * 100 + minor_version # For example: "3.3" -> 303, "4.9.2" -> 409, "6" -> 600, "23.5" -> 2305 cc_version=`$1 -dumpversion | $awk -F . '{printf "%d%02d", $1, $2}'` if [ $cc_version -lt 303 ]; then log 1 "configure: error: gcc older than 3.3 can't compile OpenTTD because of its poor template support" exit 1 fi flags="$flags -Wall -Wno-multichar -Wsign-compare -Wundef" flags="$flags -Wwrite-strings -Wpointer-arith" flags="$flags -W -Wno-unused-parameter -Wredundant-decls" flags="$flags -Wformat=2 -Wformat-security" cppstd="-std=gnu++11" if [ $enable_assert -eq 0 ]; then # Do not warn about unused variables when building without asserts flags="$flags -Wno-unused-variable" if [ $cc_version -ge 406 ]; then # GCC 4.6 gives more warnings, disable them too flags="$flags -Wno-unused-but-set-variable" flags="$flags -Wno-unused-but-set-parameter" fi fi if [ $cc_version -ge 304 ]; then # Warn when a variable is used to initialise itself: # int a = a; flags="$flags -Winit-self" fi if [ $cc_version -ge 400 ]; then # GCC 4.0+ complains about that we break strict-aliasing. # On most places we don't see how to fix it, and it doesn't # break anything. So disable strict-aliasing to make the # compiler all happy. flags="$flags -fno-strict-aliasing" # Warn about casting-out 'const' with regular C-style cast. # The preferred way is const_cast<>() which doesn't warn. flags="$flags -Wcast-qual" fi if [ $cc_version -ge 402 ]; then # GCC 4.2+ automatically assumes that signed overflows do # not occur in signed arithmetics, whereas we are not # sure that they will not happen. It furthermore complains # about its own optimized code in some places. flags="$flags -fno-strict-overflow" # GCC 4.2 no longer includes -Wnon-virtual-dtor in -Wall. # Enable it in order to be consistent with older GCC versions. flags="$flags -Wnon-virtual-dtor" fi if [ $cc_version -eq 405 ]; then # Prevent optimisation supposing enums are in a range specified by the standard # For details, see http://gcc.gnu.org/PR43680 flags="$flags -fno-tree-vrp" fi if [ $cc_version -eq 407 ]; then # Disable -Wnarrowing which gives many warnings, such as: # warning: narrowing conversion of '...' from 'unsigned int' to 'int' inside { } [-Wnarrowing] # They are valid according to the C++ standard, but useless. cxxflags="$cxxflags -Wno-narrowing" fi if [ $cc_version -ge 407 ]; then # Disable bogus 'attempt to free a non-heap object' warning flags="$flags -Wno-free-nonheap-object" else log 1 "configure: error: GCC version is too old: `$1 -dumpversion`, minumum: 4.7" exit 1 fi if [ $cc_version -ge 409 ]; then # Enable use of C++11 custom allocators CFLAGS="$CFLAGS -DCUSTOM_ALLOCATOR" fi if [ $cc_version -ge 600 ]; then # -flifetime-dse=2 (default since GCC 6) doesn't play # well with our custom pool item allocator cxxflags="$cxxflags -flifetime-dse=1" fi if [ "$enable_lto" != "0" ]; then # GCC 4.5 outputs '%{flto}', GCC 4.6 outputs '%{flto*}' has_lto=`$1 -dumpspecs | grep '\%{flto'` if [ -n "$has_lto" ]; then # Use LTO only if we see LTO exists and is requested if [ $cc_version -lt 406 ]; then flags="$flags -flto" else flags="$flags -flto=jobserver" fi ldflags="$ldflags -fwhole-program" features="$features lto" fi fi has_rdynamic=`$1 -dumpspecs | grep rdynamic` if [ -n "$has_rdynamic" ]; then # rdynamic is used to get useful stack traces from crash reports. flags="$flags -rdynamic" ldflags="$ldflags -rdynamic" fi fi eval "$2=\"$flags\"" eval "$3=\"$cxxflags $cppstd\"" eval "$4=\"$ldflags\"" eval "$5=\"$features\"" } test_compile_libbfd() { log 2 "executing $cc_host $CFLAGS $CFLAGS_ENV $LDFLAGS $LDFLAGS_ENV -o tmp.config.bfd -x c++ - $1" "$cc_host" $CFLAGS $CFLAGS_ENV $LDFLAGS $LDFLAGS_ENV -o tmp.config.bfd -x c++ - $1 2> /dev/null << EOL #define PACKAGE 1 #define PACKAGE_VERSION 1 #include #include int main() { bfd_init(); bfd *abfd = bfd_openr("test", "test"); bfd_check_format(abfd, bfd_object); bfd_get_file_flags(abfd); bfd_map_over_sections(abfd, (void (*)(bfd*, asection*, void*)) 0, (void *) 0); asymbol *syms = 0; long symcount = bfd_read_minisymbols(abfd, false, (void**) &syms, (unsigned int *) 0); bfd_get_section_flags(abfd, (asection*) 0); bfd_get_section_vma(abfd, (asection*) 0); bfd_section_size(abfd, (asection*) 0); bfd_find_nearest_line(abfd, (asection*) 0, (asymbol **) 0, (bfd_vma) 0, (const char **) 0, (const char **) 0, (unsigned int *) 0); return (int) symcount; } EOL ret=$? rm -f tmp.config.bfd log 2 " exit code $ret" return $ret } make_cflags_and_ldflags() { # General CFlags for BUILD CFLAGS_BUILD_ENV="$CFLAGS_BUILD" CFLAGS_BUILD="" # Special CXXFlags for BUILD CXXFLAGS_BUILD_ENV="$CXXFLAGS_BUILD" CXXFLAGS_BUILD="" # LDFLAGS for BUILD LDFLAGS_BUILD_ENV="$LDFLAGS_BUILD" LDFLAGS_BUILD="" # FEATURES for BUILD (lto) FEATURES_BUILD="" # General CFlags for HOST CFLAGS_ENV="$CFLAGS" CFLAGS="" # Special CXXFlags for HOST CXXFLAGS_ENV="$CXXFLAGS" CXXFLAGS="" # Libs to compile. In fact this is just LDFLAGS LIBS="" # LDFLAGS used for HOST LDFLAGS_ENV="$LDFLAGS" LDFLAGS="" # FEATURES for HOST (lto) FEATURES="" make_compiler_cflags "$cc_build" "CFLAGS_BUILD" "CXXFLAGS_BUILD" "LDFLAGS_BUILD" "FEATURES_BUILD" make_compiler_cflags "$cc_host" "CFLAGS" "CXXFLAGS" "LDFLAGS" "FEATURES" CFLAGS="$CFLAGS -D$os" CFLAGS_BUILD="$CFLAGS_BUILD -D$os" if [ "$enable_static" != "0" ]; then STATIC_FLAGS="--static" else STATIC_FLAGS="" fi if [ "$enable_debug" = "0" ]; then # No debug, add default stuff OBJS_SUBDIR="release" if [ "$enable_profiling" = "0" ]; then # -fomit-frame-pointer and -pg do not go well together (gcc errors they are incompatible) CFLAGS="-fomit-frame-pointer $CFLAGS" fi CFLAGS="-O2 $CFLAGS" else OBJS_SUBDIR="debug" # Each debug level reduces the optimization by a bit if [ $enable_debug -ge 1 ]; then CFLAGS="$CFLAGS -g -D_DEBUG" fi if [ $enable_debug -ge 2 ]; then CFLAGS="$CFLAGS -fno-inline" fi if [ $enable_debug -ge 3 ]; then CFLAGS="$CFLAGS -O0" else CFLAGS="$CFLAGS -O2" fi fi if [ $enable_debug -le 2 ]; then cc_host_is_gcc=`basename "$cc_host" | grep "gcc" 2>/dev/null` if [ -n "$cc_host_is_gcc" ]; then # Define only when compiling with GCC. Some GLIBC versions use GNU # extensions in a way that breaks build with at least ICC. # This requires -O1 or more, so debug level 3 (-O0) is excluded. CFLAGS="$CFLAGS -D_FORTIFY_SOURCE=2" fi cc_build_is_gcc=`basename "$cc_build" | grep "gcc" 2>/dev/null` if [ -n "$cc_build_is_gcc" ]; then # Add -O1 and fortify source to the tools needed for building, on gcc CFLAGS_BUILD="$CFLAGS_BUILD -D_FORTIFY_SOURCE=2 -O1" elif [ -n "`basename "$cc_build" | grep "clang" 2>/dev/null`" ]; then # Add -O1 to the tools needed for building, on clang CFLAGS_BUILD="$CFLAGS_BUILD -O1" fi fi if [ "$os" = "OSX" ] && [ $cc_version -eq 400 ]; then # Apple's GCC 4.0 has a compiler bug for x86_64 with (higher) optimization, # wrongly optimizing ^= in loops. This disables the failing optimisation. CFLAGS="$CFLAGS -fno-expensive-optimizations" fi if [ "$enable_profiling" != "0" ]; then CFLAGS="$CFLAGS -pg" LDFLAGS="$LDFLAGS -pg" fi if [ "$with_threads" = "0" ]; then CFLAGS="$CFLAGS -DNO_THREADS" fi if [ "$with_sse" = "1" ]; then CFLAGS="$CFLAGS -DWITH_SSE" fi if [ "`echo $1 | cut -c 1-3`" != "icc" ]; then if [ "$os" = "CYGWIN" ]; then flags="$flags -mwin32" LDFLAGS="$LDFLAGS -mwin32" fi if [ "$os" = "MINGW" ] || [ "$os" = "CYGWIN" ]; then if [ $cc_version -lt 406 ]; then flags="$flags -mno-cygwin" LDFLAGS="$LDFLAGS -mno-cygwin" fi if [ "$enable_console" != "0" ]; then LDFLAGS="$LDFLAGS -Wl,--subsystem,console" else LDFLAGS="$LDFLAGS -Wl,--subsystem,windows" fi LIBS="$LIBS -lws2_32 -lwinmm -lgdi32 -ldxguid -lole32 -limm32" if [ $cc_version -ge 404 ]; then LDFLAGS_BUILD="$LDFLAGS_BUILD -static-libgcc -static-libstdc++" fi if [ $cc_version -ge 407 ]; then CFLAGS="$CFLAGS -mno-ms-bitfields" fi fi fi if [ "$os" != "CYGWIN" ] && [ "$os" != "HAIKU" ] && [ "$os" != "OPENBSD" ] && [ "$os" != "MINGW" ] && [ "$os" != "OSX" ] && [ "$os" != "OS2" ]; then LIBS="$LIBS -lpthread" fi if [ "$os" != "CYGWIN" ] && [ "$os" != "HAIKU" ] && [ "$os" != "MINGW" ] && [ "$os" != "MORPHOS" ] && [ "$os" != "OSX" ] && [ "$os" != "DOS" ] && [ "$os" != "WINCE" ] && [ "$os" != "PSP" ] && [ "$os" != "OS2" ]; then log 2 "executing $cc_host $CFLAGS $CFLAGS_ENV $LDFLAGS $LDFLAGS_ENV -o tmp.config.libdl -x c++ - -ldl" "$cc_host" $CFLAGS $CFLAGS_ENV $LDFLAGS $LDFLAGS_ENV -o tmp.config.libdl -x c++ - -ldl 2> /dev/null << EOL #include int main() { Dl_info info; return dladdr(0, &info); } EOL ret=$? rm -f tmp.config.libdl log 2 " exit code $ret" if [ $ret -ne 0 ]; then log 1 "checking libdl... no" else log 1 "checking libdl... found" LIBS="$LIBS -ldl" CFLAGS="$CFLAGS -DWITH_DL" fi LIBBFD_LIBS= if [ "$with_libbfd" = "1" ]; then if test_compile_libbfd "-lbfd -lz"; then LIBBFD_LIBS="-lbfd -lz" elif test_compile_libbfd "-lbfd -liberty -lz"; then LIBBFD_LIBS="-lbfd -liberty -lz" elif test_compile_libbfd "-lbfd -liberty -lintl -lz"; then LIBBFD_LIBS="-lbfd -liberty -lintl -lz" fi if [ -n "$LIBBFD_LIBS" ]; then log 1 "checking libbfd... found" LIBS="$LIBS $LIBBFD_LIBS" CFLAGS="$CFLAGS -DWITH_BFD" else log 1 "checking libbfd... no" fi fi HAVE_GDB_DBG= if [ "$with_self_gdb_debug" = "1" ]; then log 2 "executing $cc_host $CFLAGS $CFLAGS_ENV $LDFLAGS $LDFLAGS_ENV $STATIC_FLAGS -o tmp.config.dbggdb -x c++ -" "$cc_host" $CFLAGS $CFLAGS_ENV $LDFLAGS $LDFLAGS_ENV $STATIC_FLAGS -o tmp.config.dbggdb -x c++ - 2> /dev/null << EOL #include #include #include #include #include #include int main() { pid_t tid = syscall(SYS_gettid); int status; waitpid((pid_t) 0, &status, 0); return WIFEXITED(status) && WEXITSTATUS(status); } EOL ret=$? rm -f tmp.config.dbggdb log 2 " exit code $ret" if [ $ret -ne 0 ]; then log 1 "checking dbg gdb... no" else log 1 "checking dbg gdb... found" CFLAGS="$CFLAGS -DWITH_DBG_GDB" HAVE_GDB_DBG=1 log 2 "executing $cc_host $CFLAGS $CFLAGS_ENV $LDFLAGS $LDFLAGS_ENV $STATIC_FLAGS -o tmp.config.dbggdbprctl -x c++ -" "$cc_host" $CFLAGS $CFLAGS_ENV $LDFLAGS $LDFLAGS_ENV $STATIC_FLAGS -o tmp.config.dbggdbprctl -x c++ - 2> /dev/null << EOL #include int main() { return prctl(PR_SET_PTRACER, PR_SET_PTRACER_ANY, 0, 0, 0); } EOL ret=$? rm -f tmp.config.dbggdbprctl log 2 " exit code $ret" if [ $ret -ne 0 ]; then log 1 "checking dbg gdb (prctl)... no" else log 1 "checking dbg gdb (prctl)... found" CFLAGS="$CFLAGS -DWITH_PRCTL_PT" fi fi fi if [ -n "$LIBBFD_LIBS" -o -n "$HAVE_GDB_DBG" ]; then if [ $enable_debug -lt 1 ] && [ "$with_bfd_extra_debug" = "1" ]; then if [ -n "`basename "$cc_host" | grep "clang" 2>/dev/null`" ]; then CFLAGS="$CFLAGS -gline-tables-only" else CFLAGS="$CFLAGS -g1" fi fi fi log 2 "executing $cc_host $CFLAGS $CFLAGS_ENV $LDFLAGS $LDFLAGS_ENV $STATIC_FLAGS -o tmp.config.sigaction -x c++ - -ldl" "$cc_host" $CFLAGS $CFLAGS_ENV $LDFLAGS $LDFLAGS_ENV $STATIC_FLAGS -o tmp.config.sigaction -x c++ - -ldl 2> /dev/null << EOL #include void *addr; int code; void handler(int sig, siginfo_t *si, void *context) { addr = si->si_addr; code = si->si_code; } int main() { struct sigaction sa; sa.sa_flags = SA_SIGINFO; sigemptyset(&sa.sa_mask); sa.sa_sigaction = handler; sigaction(SIGSEGV, &sa, 0); return 0; } EOL ret=$? rm -f tmp.config.sigaction log 2 " exit code $ret" if [ $ret -ne 0 ]; then log 1 "checking sigaction... no" else log 1 "checking sigaction... found" CFLAGS="$CFLAGS -DWITH_SIGACTION" fi log 2 "executing $cc_host $CFLAGS $CFLAGS_ENV $LDFLAGS $LDFLAGS_ENV $STATIC_FLAGS -o tmp.config.ucontext -x c++ - -ldl" "$cc_host" $CFLAGS $CFLAGS_ENV $LDFLAGS $LDFLAGS_ENV $STATIC_FLAGS -o tmp.config.ucontext -x c++ - -ldl 2> /dev/null << EOL #include int main() { ucontext_t context; #if defined(__x86_64__) void *ptr = (void *) context.uc_mcontext.gregs[REG_RIP]; #elif defined(__i386) void *ptr = (void *) context.uc_mcontext.gregs[REG_EIP]; #else #error Unknown arch #endif return 0; } EOL ret=$? rm -f tmp.config.ucontext log 2 " exit code $ret" if [ $ret -ne 0 ]; then log 1 "checking ucontext... no" else log 1 "checking ucontext... found" CFLAGS="$CFLAGS -DWITH_UCONTEXT" fi log 2 "executing $cc_host $CFLAGS $CFLAGS_ENV $LDFLAGS $LDFLAGS_ENV $STATIC_FLAGS -o tmp.config.sigaltstack -x c++ - -ldl" "$cc_host" $CFLAGS $CFLAGS_ENV $LDFLAGS $LDFLAGS_ENV $STATIC_FLAGS -o tmp.config.sigaltstack -x c++ - -ldl 2> /dev/null << EOL #include #include int main() { stack_t ss; ss.ss_sp = calloc(SIGSTKSZ, 1); ss.ss_size = SIGSTKSZ; ss.ss_flags = 0; sigaltstack(&ss, nullptr); return 0; } EOL ret=$? rm -f tmp.config.sigaltstack log 2 " exit code $ret" if [ $ret -ne 0 ]; then log 1 "checking sigaltstack... no" else log 1 "checking sigaltstack... found" CFLAGS="$CFLAGS -DWITH_SIGALTSTACK" fi fi if [ "$os" = "MINGW" ]; then log 2 "executing $cc_host $CFLAGS $CFLAGS_ENV $LDFLAGS $LDFLAGS_ENV -o tmp.config.dbghelp -x c++ -" "$cc_host" $CFLAGS $CFLAGS_ENV $LDFLAGS $LDFLAGS_ENV -o tmp.config.dbghelp -x c++ - 2> /dev/null << EOL #include #include int main() { STACKFRAME64 frame; IMAGEHLP_SYMBOL64 *sym_info; IMAGEHLP_MODULE64 module; IMAGEHLP_LINE64 line; return 0; } EOL ret=$? rm -f tmp.config.dbghelp log 2 " exit code $ret" if [ $ret -ne 0 ]; then log 1 "checking dbghelp... no" else log 1 "checking dbghelp... found" CFLAGS="$CFLAGS -DWITH_DBGHELP" if [ "$with_libbfd" = "1" ]; then test_compile_libbfd "-lbfd -liberty -lintl -lz" if [ $? -ne 0 ]; then log 1 "checking libbfd... no" else log 1 "checking libbfd... found" LIBS="$LIBS -lbfd -liberty -lintl -lz" CFLAGS="$CFLAGS -DWITH_BFD" if [ $enable_debug -lt 1 ] && [ "$with_bfd_extra_debug" = "1" ]; then CFLAGS="$CFLAGS -g1" fi fi fi fi fi log 2 "executing $cc_host $CFLAGS $LDFLAGS $STATIC_FLAGS -o tmp.config.bitmath-builtins -x c++ -" "$cc_host" $CFLAGS $LDFLAGS $STATIC_FLAGS -o tmp.config.bitmath-builtins -x c++ - 2> /dev/null << EOL int main() { return __builtin_popcountll(__builtin_popcountl(__builtin_popcount(__builtin_ctz(1)))); } EOL ret=$? rm -f tmp.config.bitmath-builtins log 2 " exit code $ret" if [ $ret -ne 0 ]; then log 1 "checking bitmath builtins... no" else log 1 "checking bitmath builtins... found" CFLAGS="$CFLAGS -DWITH_BITMATH_BUILTINS" fi if [ "$os" != "CYGWIN" ] && [ "$os" != "HAIKU" ] && [ "$os" != "MORPHOS" ] && [ "$os" != "OSX" ] && [ "$os" != "DOS" ] && [ "$os" != "WINCE" ] && [ "$os" != "PSP" ] && [ "$os" != "OS2" ]; then log 2 "executing $cc_host $CFLAGS $CFLAGS_ENV $LDFLAGS $LDFLAGS_ENV -o tmp.config.demangle -x c++ - -lstdc++" "$cc_host" $CFLAGS $CFLAGS_ENV $LDFLAGS $LDFLAGS_ENV -o tmp.config.demangle -x c++ - -lstdc++ 2> /dev/null << EOL #include int main() { int status = -1; char *demangled = abi::__cxa_demangle("test", 0, 0, &status); return 0; } EOL ret=$? rm -f tmp.config.demangle log 2 " exit code $ret" if [ $ret -ne 0 ]; then log 1 "checking abi::__cxa_demangle... no" else log 1 "checking abi::__cxa_demangle... found" CFLAGS="$CFLAGS -DWITH_DEMANGLE" fi fi if [ "$os" != "CYGWIN" ] && [ "$os" != "HAIKU" ] && [ "$os" != "MINGW" ]; then LIBS="$LIBS -lc" fi if [ "$os" = "OPENBSD" ]; then LIBS="$LIBS -pthread" fi if [ "$os" = "OSX" ]; then LDFLAGS="$LDFLAGS -framework Cocoa" # Add macports include dir which is not always set a default system dir. This avoids zillions of bogus warnings. CFLAGS="$CFLAGS -isystem/opt/local/include" if [ "$enable_dedicated" = "0" ] && ([ "$cpu_type" = "32" ] || [ "$enable_universal" != "0" ]); then LIBS="$LIBS -framework QuickTime" else CFLAGS="$CFLAGS -DNO_QUICKTIME" fi if [ "$enable_universal" = "0" ]; then # Universal builds set this elsewhere CFLAGS="$OSX_SYSROOT $CFLAGS" LDFLAGS="$OSX_LD_SYSROOT $LDFLAGS" fi if [ "$with_self_lldb_debug" = "0" ]; then log 1 "using dbg lldb... no" CFLAGS="$CFLAGS -DWITHOUT_DBG_LLDB" else log 1 "using dbg lldb... yes" if [ $enable_debug -lt 1 ]; then if [ -n "`"$cc_host" --version | head -n1 | grep "clang" 2>/dev/null`" ]; then CFLAGS="$CFLAGS -gline-tables-only" else CFLAGS="$CFLAGS -g1" fi fi fi log 2 "executing $cc_host $CFLAGS $CFLAGS_ENV $LDFLAGS $LDFLAGS_ENV $STATIC_FLAGS -o tmp.config.ucontext -x c++ - -ldl" "$cc_host" $CFLAGS $CFLAGS_ENV $LDFLAGS $LDFLAGS_ENV $STATIC_FLAGS -o tmp.config.ucontext -x c++ - -ldl 2> /dev/null << EOL #include int main() { ucontext_t context; #if defined(__x86_64__) void *ptr = (void *) context.uc_mcontext->__ss.__rip; #elif defined(__i386) void *ptr = (void *) context.uc_mcontext->__ss.__rip; #else #error Unknown arch #endif return 0; } EOL ret=$? rm -f tmp.config.ucontext log 2 " exit code $ret" if [ $ret -ne 0 ]; then log 1 "checking ucontext... no" else log 1 "checking ucontext... found" CFLAGS="$CFLAGS -DWITH_UCONTEXT" fi log 2 "executing $cc_host $CFLAGS $CFLAGS_ENV $LDFLAGS $LDFLAGS_ENV $STATIC_FLAGS -o tmp.config.sigaltstack -x c++ - -ldl" "$cc_host" $CFLAGS $CFLAGS_ENV $LDFLAGS $LDFLAGS_ENV $STATIC_FLAGS -o tmp.config.sigaltstack -x c++ - -ldl 2> /dev/null << EOL #include #include #include int main() { pthread_t self = pthread_self(); void *stacktop = pthread_get_stackaddr_np(self); size_t stack_size = pthread_get_stacksize_np(self); stack_t ss; ss.ss_sp = calloc(SIGSTKSZ, 1); ss.ss_size = SIGSTKSZ; ss.ss_flags = 0; sigaltstack(&ss, NULL); return 0; } EOL ret=$? rm -f tmp.config.sigaltstack log 2 " exit code $ret" if [ $ret -ne 0 ]; then log 1 "checking sigaltstack... no" else log 1 "checking sigaltstack... found" CFLAGS="$CFLAGS -DWITH_SIGALTSTACK" fi fi if [ "$os" = "HAIKU" ]; then LIBS="$LIBS -lmidi -lbe" fi # Most targets act like UNIX, just with some additions if [ "$os" = "HAIKU" ] || [ "$os" = "OSX" ] || [ "$os" = "FREEBSD" ] || [ "$os" = "DRAGONFLY" ] || [ "$os" = "OPENBSD" ] || [ "$os" = "NETBSD" ] || [ "$os" = "HPUX" ] || [ "$os" = "SUNOS" ] || [ "$os" = "OS2" ]; then CFLAGS="$CFLAGS -DUNIX" fi # And others like Windows if [ "$os" = "MINGW" ] || [ "$os" = "CYGWIN" ]; then CFLAGS="$CFLAGS -DWIN" fi if [ -n "$allegro_config" ]; then CFLAGS="$CFLAGS -DWITH_ALLEGRO" CFLAGS="$CFLAGS `$allegro_config --cflags`" if [ "$os" != "MINGW" ] && [ "$os" != "CYGWIN" ]; then if [ "$enable_static" != "0" ]; then LIBS="$LIBS `$allegro_config --static --libs`" else LIBS="$LIBS `$allegro_config --libs`" fi fi fi if [ -n "$sdl_config" ]; then CFLAGS="$CFLAGS -DWITH_SDL" # SDL must not add _GNU_SOURCE as it breaks many platforms CFLAGS="$CFLAGS `$sdl_config --cflags | sed 's@-D_GNU_SOURCE[^ ]*@@'`" if [ "$enable_static" != "0" ]; then LIBS="$LIBS `$sdl_config --static --libs`" else LIBS="$LIBS `$sdl_config --libs`" fi fi if [ "$with_cocoa" != "0" ]; then CFLAGS="$CFLAGS -DWITH_COCOA" LIBS="$LIBS -F/System/Library/Frameworks -framework Cocoa -framework Carbon -framework AudioUnit -framework AudioToolbox" if [ "$enable_cocoa_quartz" != "0" ]; then CFLAGS="$CFLAGS -DENABLE_COCOA_QUARTZ" fi if [ "$enable_cocoa_quickdraw" != "0" ]; then CFLAGS="$CFLAGS -DENABLE_COCOA_QUICKDRAW" fi fi if [ "$with_zlib" != "0" ]; then CFLAGS="$CFLAGS -DWITH_ZLIB" CFLAGS="$CFLAGS `$zlib_config --cflags | tr '\n\r' ' '`" if [ "$enable_static" != "0" ]; then LIBS="$LIBS `$zlib_config --libs --static | tr '\n\r' ' '`" else LIBS="$LIBS `$zlib_config --libs | tr '\n\r' ' '`" fi fi if [ -n "$lzma_config" ]; then CFLAGS="$CFLAGS -DWITH_LIBLZMA" CFLAGS="$CFLAGS `$lzma_config --cflags | tr '\n\r' ' '`" if [ "$enable_static" != "0" ]; then CFLAGS="$CFLAGS -DLZMA_API_STATIC" LIBS="$LIBS `$lzma_config --libs --static | tr '\n\r' ' '`" else LIBS="$LIBS `$lzma_config --libs | tr '\n\r' ' '`" fi fi if [ "$with_lzo2" != "0" ]; then if [ "$enable_static" != "0" ] && [ "$os" != "OSX" ]; then LIBS="$LIBS $lzo2" else LIBS="$LIBS -llzo2" fi CFLAGS="$CFLAGS -DWITH_LZO" fi if [ -n "$xdg_basedir_config" ]; then CFLAGS="$CFLAGS -DWITH_XDG_BASEDIR" CFLAGS="$CFLAGS `$xdg_basedir_config --cflags | tr '\n\r' ' '`" if [ "$enable_static" != "0" ]; then LIBS="$LIBS `$xdg_basedir_config --libs --static | tr '\n\r' ' '`" else LIBS="$LIBS `$xdg_basedir_config --libs | tr '\n\r' ' '`" fi fi # 64bit machines need -D_SQ64 if [ "$cpu_type" = "64" ] && [ "$enable_universal" = "0" ]; then CFLAGS="$CFLAGS -D_SQ64" fi CFLAGS="$CFLAGS -I$SCRIPT_SRC_DIR" if [ -n "$png_config" ]; then CFLAGS="$CFLAGS -DWITH_PNG" CFLAGS="$CFLAGS `$png_config --cflags | tr '\n\r' ' '`" if [ "$enable_static" != "0" ]; then LIBS="$LIBS `$png_config --libs --static | tr '\n\r' ' '`" else LIBS="$LIBS `$png_config --libs | tr '\n\r' ' '`" fi fi if [ -n "$fontconfig_config" ]; then CFLAGS="$CFLAGS -DWITH_FONTCONFIG" CFLAGS="$CFLAGS `$fontconfig_config --cflags | tr '\n\r' ' '`" if [ "$enable_static" != "0" ]; then LIBS="$LIBS `$fontconfig_config --libs --static | tr '\n\r' ' '`" else LIBS="$LIBS `$fontconfig_config --libs | tr '\n\r' ' '`" fi fi if [ -n "$freetype_config" ]; then CFLAGS="$CFLAGS -DWITH_FREETYPE" CFLAGS="$CFLAGS `$freetype_config --cflags | tr '\n\r' ' '`" if [ "$enable_static" != "0" ]; then LIBS="$LIBS `$freetype_config --libs --static | tr '\n\r' ' '` -lfreetype" else LIBS="$LIBS `$freetype_config --libs | tr '\n\r' ' '`" fi fi if [ -n "$icu_layout_config" ]; then CFLAGS="$CFLAGS -DWITH_ICU_LX" CFLAGS="$CFLAGS `$icu_layout_config --cflags | tr '\n\r' ' '`" if [ "$static_icu" != "0" ]; then LIBS="$LIBS `$icu_layout_config --libs --static | tr '\n\r' ' ' | sed s/-licu/-lsicu/g`" else LIBS="$LIBS `$icu_layout_config --libs | tr '\n\r' ' '`" fi fi if [ -n "$icu_sort_config" ]; then CFLAGS="$CFLAGS -DWITH_ICU_I18N" CFLAGS="$CFLAGS `$icu_sort_config --cflags | tr '\n\r' ' '`" if [ "$static_icu" != "0" ]; then LIBS="$LIBS `$icu_sort_config --libs --static | tr '\n\r' ' ' | sed s/-licu/-lsicu/g`" else LIBS="$LIBS `$icu_sort_config --libs | tr '\n\r' ' '`" fi fi if [ "$with_uniscribe" != "0" ]; then CFLAGS="$CFLAGS -DWITH_UNISCRIBE" LIBS="$LIBS -lusp10" fi if [ "$with_direct_music" != "0" ]; then CFLAGS="$CFLAGS -DWIN32_ENABLE_DIRECTMUSIC_SUPPORT" # GCC 4.0+ doesn't like the DirectX includes (gives tons of # warnings on it we won't be able to fix). For now just # suppress those warnings. if [ $cc_version -ge 400 ]; then CFLAGS="$CFLAGS -Wno-non-virtual-dtor" fi fi if [ "$with_xaudio2" != "0" ]; then CFLAGS="$CFLAGS -DWITH_XAUDIO2" fi if [ -n "$fluidsynth" ]; then LIBS="$LIBS -lfluidsynth" CFLAGS="$CFLAGS -DFLUIDSYNTH" fi if [ "$with_iconv" != "0" ]; then CFLAGS="$CFLAGS -DWITH_ICONV" if [ "$link_to_iconv" = "yes" ]; then LIBS="$LIBS -liconv" if [ "$with_iconv" != "2" ]; then CFLAGS="$CFLAGS -I$with_iconv/include" LIBS="$LIBS -L$with_iconv/lib" fi fi if [ "$os" != "OSX" ] && [ "$have_non_const_iconv" != "no" ]; then CFLAGS="$CFLAGS -DHAVE_NON_CONST_ICONV" fi fi if [ -n "$with_midi" ]; then CFLAGS="$CFLAGS -DEXTERNAL_PLAYER=\\\\\"$with_midi\\\\\"" fi if [ -n "$with_midi_arg" ]; then CFLAGS="$CFLAGS -DMIDI_ARG=\\\\\"$with_midi_arg\\\\\"" fi if [ "$enable_dedicated" != "0" ]; then CFLAGS="$CFLAGS -DDEDICATED" fi if [ "$enable_unicode" != "0" ]; then CFLAGS="$CFLAGS -DUNICODE -D_UNICODE" fi if [ "$os" = "HAIKU" ]; then LDFLAGS="$LDFLAGS -lnetwork" fi if [ "$os" = "SUNOS" ]; then LDFLAGS="$LDFLAGS -lnsl -lsocket" fi if [ "$enable_static" != "0" ]; then # OSX can't handle -static in LDFLAGS if [ "$os" != "OSX" ]; then LDFLAGS="$LDFLAGS -static" fi fi if [ "$enable_assert" = "0" ]; then CFLAGS="$CFLAGS -DNDEBUG" CFLAGS_BUILD="$CFLAGS_BUILD -DNDEBUG" fi if [ "$enable_desync_debug" != "0" ]; then CFLAGS="$CFLAGS -DRANDOM_DEBUG" fi if [ "$enable_osx_g5" != "0" ]; then CFLAGS="$CFLAGS -mcpu=G5 -mpowerpc64 -mtune=970 -mcpu=970 -mpowerpc-gpopt" fi if [ -n "$personal_dir" ]; then CFLAGS="$CFLAGS -DWITH_PERSONAL_DIR -DPERSONAL_DIR=\\\\\"$personal_dir\\\\\"" fi if [ -n "$shared_dir" ]; then CFLAGS="$CFLAGS -DWITH_SHARED_DIR -DSHARED_DIR=\\\\\"$shared_dir\\\\\"" fi CFLAGS="$CFLAGS -DGLOBAL_DATA_DIR=\\\\\"$prefix_dir/$data_dir\\\\\"" if [ "$enable_lto" != "0" ]; then lto_build=`echo "$FEATURES_BUILD" | grep "lto"` lto_host=`echo "$FEATURES" | grep "lto"` if [ -z "$lto_build$lto_host" ]; then log 1 "WARNING: you enabled LTO/IPO, but neither build nor host compiler supports it" log 1 "WARNING: LTO/IPO has been disabled" fi if [ -n "$lto_build" ]; then LDFLAGS_BUILD="$LDFLAGS_BUILD $CFLAGS_BUILD $CXXFLAGS_BUILD" fi if [ -n "$lto_host" ]; then LDFLAGS="$LDFLAGS $CFLAGS $CXXFLAGS" fi fi # All flags to be extended via the env CFLAGS_BUILD="$CFLAGS_BUILD $CFLAGS_BUILD_ENV" CXXFLAGS_BUILD="$CXXFLAGS_BUILD $CXXFLAGS_BUILD_ENV" LDFLAGS_BUILD="$LDFLAGS_BUILD $LDFLAGS_BUILD_ENV" CFLAGS="$CFLAGS $CFLAGS_ENV" CXXFLAGS="$CXXFLAGS $CXXFLAGS_ENV" LDFLAGS="$LDFLAGS $LDFLAGS_ENV" log 1 "using CFLAGS_BUILD... $CFLAGS_BUILD" log 1 "using CXXFLAGS_BUILD... $CXXFLAGS_BUILD" log 1 "using LDFLAGS_BUILD... $LDFLAGS_BUILD" log 1 "using CFLAGS... $CFLAGS" log 1 "using CXXFLAGS... $CXXFLAGS" log 1 "using LDFLAGS... $LIBS $LDFLAGS" # Makedepend doesn't like something like: -isysroot /OSX/blabla # so convert it to: -isysroot -OSX/blabla. makedepend just ignores # any - command it doesn't know, so we are pretty save. # Lovely hackish, not? # Btw, this almost always comes from outside the configure, so it is # not something we can control. # Also make makedepend aware of compiler's built-in defines. if [ "$with_makedepend" != "0" ] || [ "$enable_builtin_depend" != "0" ]; then # Append CXXFLAGS possibly containing -std=c++0x cflags_makedep="`echo | $cxx_host $CXXFLAGS -E -x c++ -dM - | sed 's@.define @-D@g;s@ .*@ @g;s@(.*)@@g' | tr -d '\r\n'`" # Please escape ALL " within ` because e.g. "" terminates the string in some sh implementations cflags_makedep="$cflags_makedep `echo \"$CFLAGS\" \"$CXXFLAGS\" | sed 's@ /@ -@g;s@-I[ ]*[^ ]*@@g;s@[ ]*-[^D][^ ]*@@g'`" else makedepend="" fi if [ "$with_distcc" != "0" ]; then cc_host="$distcc $cc_host" cxx_host="$distcc $cxx_host" log 1 "" log 1 " NOTICE: remind yourself to use 'make -jN' to make use of distcc" log 1 "" fi if [ "$with_ccache" != "0" ]; then cc_host="$ccache $cc_host" cxx_host="$ccache $cxx_host" fi } check_compiler() { # Params: # $1 - Type for message (build / host) # $2 - What to fill with the found compiler # $3 - System to try # $4 - Compiler to try # $5 - Env-setting to try # $6 - GCC alike to try (array) # $7 - CC alike to try # $8 - "0" gcc, "1" g++, "2" windres, "3" strip, "4" lipo # $9 - What the command is to check for if [ -n "$4" ]; then # Check for manual compiler machine=`$4 $9 2>/dev/null` ret=$? eval "$2=\"$4\"" log 2 "executing $4 $9" log 2 " returned $machine" log 2 " exit code $ret" if ( [ -z "$machine" ] && [ "$8" != "3" ] ) || [ "$ret" != "0" ]; then log 1 "checking $1... $4 not found" log 1 "the selected binary doesn't seem to be a $6 binary" exit 1 fi elif [ -n "$3" ]; then # Check for system for val in $6; do if [ -z "$6" ]; then compiler="$3" else compiler="$3-$val" fi machine=`eval $compiler $9 2>/dev/null` ret=$? eval "$2=\"$compiler\"" log 2 "executing $compiler $9" log 2 " returned $machine" log 2 " exit code $ret" if [ -n "$machine" ] && [ "$ret" = "0" ]; then break fi done if ( [ -z "$machine" ] && [ "$8" != "3" ] ) || [ "$ret" != "0" ]; then if [ -z "$5" ]; then log 1 "checking $1... $compiler not found" log 1 "I couldn't detect any '$6' binary for $3" exit 1 else compiler="$3-$5" fi machine=`eval $compiler $9 2>/dev/null` ret=$? eval "$2=\"$compiler\"" log 2 "executing $compiler $9" log 2 " returned $machine" log 2 " exit code $ret" if ( [ -z "$machine" ] && [ "$8" != "3" ] ) || [ "$ret" != "0" ]; then log 1 "checking $1... $compiler not found" log 1 "I couldn't detect any $5 binary for $3" exit 1 fi fi if [ "$machine" != "$3" ] && ( [ "$8" = "0" ] || [ "$8" = "1" ] ); then log 1 "checking $1... expected $3, found $machine" log 1 "the compiler suggests it doesn't build code for the machine you specified" exit 1 fi else # Nothing given, autodetect if [ -n "$5" ]; then machine=`$5 $9 2>/dev/null` ret=$? eval "$2=\"$5\"" log 2 "executing $5 $9" log 2 " returned $machine" log 2 " exit code $ret" # The user defined a GCC that doesn't reply to $9.. abort if ( [ -z "$machine" ] && [ "$8" != "3" ] ) || [ "$ret" != "0" ]; then log 1 "checking $1... $5 unusable" log 1 "the CC environment variable is set, but it doesn't seem to be a '$6' binary" log 1 "please redefine the CC/CXX environment to a $6 binary" exit 1 fi else log 2 "checking $1... CC/CXX not set (skipping)" for val in $6; do # No $5, so try next item in '$6' machine=`$val $9 2>/dev/null` ret=$? eval "$2=\"$val\"" log 2 "executing $val $9" log 2 " returned $machine" log 2 " exit code $ret" if [ -n "$machine" ] && [ "$ret" = "0" ]; then break fi done if ( [ -z "$machine" ] && [ "$8" != "3" ] ) || [ "$ret" != "0" ]; then # Maybe '$7'? machine=`$7 $9 2>/dev/null` ret=$? eval "$2=\"$7\"" log 2 "executing $7 $9" log 2 " returned $machine" log 2 " exit code $ret" # All failed, abort if [ -z "$machine" ]; then log 1 "checking $1... $6 not found" log 1 "I couldn't detect any '$6' binary on your system" log 1 "please define the CC/CXX environment to where it is located" exit 1 fi fi fi fi if [ "$8" != "0" ]; then eval "res=\$$2" log 1 "checking $1... $res" else log 1 "checking $1... $machine" fi } check_build() { check_compiler "build system type" "cc_build" "$build" "$cc_build" "$CC" "$default_cc" "cc" "0" "-dumpmachine" } check_host() { # By default the host is the build if [ -z "$host" ]; then host="$build"; fi check_compiler "host system type" "cc_host" "$host" "$cc_host" "$CC" "$default_cc" "cc" "0" "-dumpmachine" } check_cxx_build() { check_compiler "build c++" "cxx_build" "$build" "$cxx_build" "$CXX" "$default_cxx" "c++" 1 "-dumpmachine" } check_cxx_host() { # By default the host is the build if [ -z "$host" ]; then host="$build"; fi check_compiler "host c++" "cxx_host" "$host" "$cxx_host" "$CXX" "$default_cxx" "c++" 1 "-dumpmachine" } check_windres() { if [ "$os" = "MINGW" ] || [ "$os" = "CYGWIN" ]; then check_compiler "host windres" "windres" "$host" "$windres" "$WINDRES" "windres" "windres" "2" "-V" fi } check_strip() { if [ "$os" = "OS2" ]; then # OS2 via gcc is a bit weird.. stripping HAS to be done via emxbind, which is via gcc directly log 1 "checking host strip... using gcc -s option" elif [ "$os" = "OSX" ]; then # Most targets have -V in strip, to see if they exists... OSX doesn't.. so execute something echo "int main(int argc, char *argv[]) { }" > strip.test.c $cxx_host strip.test.c -o strip.test check_compiler "host strip" "strip" "$host" "$strip" "$STRIP" "strip" "strip" "3" "strip.test" rm -f strip.test.c strip.test else check_compiler "host strip" "strip" "$host" "$strip" "$STRIP" "strip" "strip" "3" "-V" fi } check_lipo() { if [ "$os" = "OSX" ] && [ "$enable_universal" != "0" ]; then echo "int main(int argc, char *argv[]) { }" > lipo.test.c $cxx_host lipo.test.c -o lipo.test check_compiler "host lipo" "lipo" "$host" "$lipo" "$LIPO" "lipo" "lipo" "4" "-info lipo.test" rm -f lipo.test.c lipo.test fi } check_osx_sdk() { local sysroot="" if [ -n "$1" ]; then if echo "$1" | grep -q / ; then # Seems to be a file system path osx_sdk_path="$1" else osx_sdk_path="/Developer/SDKs/MacOSX$1.sdk" fi if [ ! -d "$osx_sdk_path" ]; then # No directory, not present or garbage return 1 fi # Set minimum version to 10.4 as that's when kCGBitmapByteOrder32Host was introduced sysroot="-isysroot $osx_sdk_path -Wl,-syslibroot,$osx_sdk_path -mmacosx-version-min=10.4" fi cat > tmp.osx.mm << EOF #include int main() { kCGBitmapByteOrder32Host; return 0; } EOF execute="$cxx_host $sysroot $CFLAGS tmp.osx.mm -framework Cocoa -o tmp.osx 2>&1" eval $execute > /dev/null ret=$? log 2 "executing $execute" log 2 " exit code $ret" rm -f tmp.osx.mm tmp.osx return $ret } check_direct_music() { echo " #include #include #include int main(int argc, char *argv[]) { }" > direct_music.test.c $cxx_host $CFLAGS direct_music.test.c -o direct_music.test 2> /dev/null res=$? rm -f direct_music.test.c direct_music.test if [ "$res" != "0" ]; then if [ "$with_direct_music" != "1" ]; then log 1 "configure: error: direct-music is not available on this system" exit 1 fi with_direct_music="0" log 1 "checking direct-music... not found" else log 1 "checking direct-music... found" fi } check_xaudio2() { echo " #include #undef NTDDI_VERSION #undef _WIN32_WINNT #define NTDDI_VERSION NTDDI_WIN8 #define _WIN32_WINNT _WIN32_WINNT_WIN8 #include int main(int argc, char *argv[]) { }" > xaudio2.test.c $cxx_host $CFLAGS xaudio2.test.c -o xaudio2.test 2> /dev/null res=$? rm -f xaudio2.test.c xaudio2.test if [ "$res" != "0" ]; then if [ "$with_xaudio2" != "1" ]; then log 1 "configure: error: xaudio2 is not available on this system" exit 1 fi with_xaudio2="0" log 1 "checking xaudio2... not found" else log 1 "checking xaudio2... found" fi } check_makedepend() { if [ "$enable_builtin_depend" != "0" ]; then with_makedepend="0" fi if [ "$with_makedepend" = "0" ]; then log 1 "checking makedepend... disabled" return fi if [ "$with_makedepend" = "1" ] || [ "$with_makedepend" = "2" ]; then makedepend="makedepend" else makedepend="$with_makedepend" fi rm -f makedepend.tmp touch makedepend.tmp res=`$makedepend -fmakedepend.tmp 2>/dev/null` res=$? log 2 "executing $makedepend -f makedepend.tmp" log 2 " returned `cat makedepend.tmp`" log 2 " exit code $ret" if [ ! -s makedepend.tmp ]; then rm -f makedepend.tmp makedepend.tmp.bak if [ "$with_makedepend" = "2" ]; then log 1 "checking makedepend... not found" log 1 "I couldn't detect any makedepend on your system" log 1 "please locate it via --makedepend=[binary]" exit 1 elif [ "$with_makedepend" != "1" ]; then log 1 "checking makedepend... $makedepend not found" log 1 "the selected file doesn't seem to be a valid makedepend binary" exit 1 else log 1 "checking makedepend... not found" with_makedepend="0" return fi fi rm -f makedepend.tmp makedepend.tmp.bak log 1 "checking makedepend... $makedepend" } check_version() { # $1 - requested version (major.minor) # $2 - version we got (major.minor) if [ -z "$2" ]; then return 0 fi req_major=`echo $1 | cut -d. -f1` got_major=`echo $2 | cut -d. -f1` if [ $got_major -lt $req_major ]; then return 0 elif [ $got_major -gt $req_major ]; then return 1 fi req_minor=`echo $1 | cut -d. -f2` got_minor=`echo $2 | cut -d. -f2` if [ $got_minor -lt $req_minor ]; then return 0 fi return 1 } detect_awk() { # Not all awks allow gsub(), so we test for that here! It is in fact all we need... # These awks are known to work. Test for them explicit awks="gawk mawk nawk" awk_prefix="echo \"a.c b.c c.c\" | tr ' ' \\\\n | " awk_param="' { ORS = \" \" } /\.c$/ { gsub(\".c$\", \".o\", \$0); print \$0; }' 2>/dev/null" awk_result="a.o b.o c.o " log 2 "Detecing awk..." log 2 "Trying: $awk_prefix $awk $awk_param" res=`eval $awk_prefix $awk $awk_param` log 2 "Result: '$res'" if [ "$res" != "$awk_result" ] && [ "$awk" = "awk" ]; then # User didn't supply his own awk, so try to detect some other known working names for an awk for awk in $awks; do log 2 "Trying: $awk_prefix $awk $awk_param" res=`eval $awk_prefix $awk $awk_param` log 2 "Result: '$res'" if [ "$res" = "$awk_result" ]; then break; fi done if [ "$res" != "$awk_result" ]; then log 1 "checking awk... not found" log 1 "configure: error: no awk found" log 1 "configure: error: please install one of the following: $awks" exit 1 fi fi if [ "$res" != "$awk_result" ]; then log 1 "checking awk... not found" log 1 "configure: error: you supplied '$awk' but it doesn't seem a valid gawk or mawk" exit 1 fi log 1 "checking awk... $awk" } detect_os() { if [ "$os" = "DETECT" ]; then # Detect UNIX, OSX, FREEBSD, DRAGONFLY, OPENBSD, NETBSD, HPUX, SUNOS, CYGWIN, MINGW, and OS2 # Try first via dumpmachine, then via uname os=`echo "$host" | tr '[A-Z]' '[a-z]' | $awk ' /linux/ { print "UNIX"; exit} /darwin/ { print "OSX"; exit} /freebsd/ { print "FREEBSD"; exit} /dragonfly/ { print "DRAGONFLY"; exit} /openbsd/ { print "OPENBSD"; exit} /netbsd/ { print "NETBSD"; exit} /hp-ux/ { print "HPUX"; exit} /haiku/ { print "HAIKU"; exit} /sunos/ { print "SUNOS"; exit} /solaris/ { print "SUNOS"; exit} /cygwin/ { print "CYGWIN"; exit} /mingw/ { print "MINGW"; exit} /os2/ { print "OS2"; exit} '` if [ -z "$os" ]; then os=`LC_ALL=C uname | tr '[A-Z]' '[a-z]' | $awk ' /linux/ { print "UNIX"; exit} /darwin/ { print "OSX"; exit} /freebsd/ { print "FREEBSD"; exit} /dragonfly/ { print "DRAGONFLY"; exit} /openbsd/ { print "OPENBSD"; exit} /netbsd/ { print "NETBSD"; exit} /hp-ux/ { print "HPUX"; exit} /haiku/ { print "HAIKU"; exit} /sunos/ { print "SUNOS"; exit} /cygwin/ { print "CYGWIN"; exit} /mingw/ { print "MINGW"; exit} /os\/2/ { print "OS2"; exit} /gnu/ { print "UNIX"; exit} '` fi if [ -z "$os" ]; then log 1 "detecting OS... none detected" log 1 "I couldn't detect your OS. Please use --os=OS to force one" log 1 "Allowed values are: UNIX, OSX, FREEBSD, DRAGONFLY, OPENBSD, NETBSD, HPUX, HAIKU, SUNOS, CYGWIN, MINGW, and OS2" exit 1 fi log 1 "detecting OS... $os" else log 1 "forcing OS... $os" fi if [ "$os" = "OSX" ]; then default_cc="clang gcc" default_cxx="clang++ g++" else default_cc="gcc clang" default_cxx="g++ clang++" fi } detect_allegro() { # 0 means no, 1 is auto-detect, 2 is force if [ "$with_allegro" = "0" ]; then log 1 "checking Allegro... disabled" allegro_config="" return 0 fi if [ "$with_allegro" = "2" ] && [ "$with_cocoa" = "2" ]; then log 1 "configure: error: it is impossible to compile both Allegro and COCOA" log 1 "configure: error: please deselect one of them and try again" exit 1 fi if [ "$with_allegro" = "2" ] && [ "$enable_dedicated" != "0" ]; then log 1 "configure: error: it is impossible to compile a dedicated with Allegro" log 1 "configure: error: please deselect one of them and try again" exit 1 fi if [ "$enable_dedicated" != "0" ]; then log 1 "checking Allegro... dedicated server, skipping" allegro_config="" return 0 fi # By default on OSX we don't use Allegro. The rest is auto-detect if [ "$with_allegro" = "1" ] && [ "$os" = "OSX" ] && [ "$with_cocoa" != "0" ]; then log 1 "checking Allegro... OSX, skipping" allegro_config="" return 0 fi detect_pkg_config "$with_allegro" "allegro" "allegro_config" "4.4" } detect_sdl() { # 0 means no, 1 is auto-detect, 2 is force if [ "$with_sdl" = "0" ]; then log 1 "checking SDL... disabled" sdl_config="" return 0 fi if [ "$with_sdl" = "2" ] && [ "$with_cocoa" = "2" ]; then log 1 "configure: error: it is impossible to compile both SDL and COCOA" log 1 "configure: error: please deselect one of them and try again" exit 1 fi if [ "$with_sdl" = "2" ] && [ "$enable_dedicated" != "0" ]; then log 1 "configure: error: it is impossible to compile a dedicated with SDL" log 1 "configure: error: please deselect one of them and try again" exit 1 fi if [ "$enable_dedicated" != "0" ]; then log 1 "checking SDL... dedicated server, skipping" sdl_config="" return 0 fi # By default on OSX we don't use SDL. The rest is auto-detect if [ "$with_sdl" = "1" ] && [ "$os" = "OSX" ] && [ "$with_cocoa" != "0" ]; then log 1 "checking SDL... OSX, skipping" sdl_config="" return 0 fi if [ "$os" = "OSX" ]; then log 1 "WARNING: sdl is known to fail on some versions of Mac OS X" log 1 "WARNING: with some hardware configurations. Use at own risk!" sleep 5 fi detect_pkg_config "$with_sdl" "sdl" "sdl_config" "1.2" } detect_osx_sdk() { # Try to find the best SDK available. For a normal build this # is currently the 10.5 SDK as this is needed to compile all # optional code. Because such an executable won't run on 10.4 # or lower, also check for the 10.4u SDK when doing an universal # build. # Check for the 10.5 SDK, but try 10.6 if that fails check_osx_sdk "10.5" || check_osx_sdk "10.6" || osx_sdk_path="" if [ -z "$osx_sdk_path" ] || [ "$enable_universal" != "0" ]; then # No better SDK or universal build enabled? Check 10.4u SDK as well local old_sdk="$osx_sdk_path" if check_osx_sdk "10.4u"; then osx_sdk_104_path="$osx_sdk_path" else osx_sdk_104_path="" fi if [ -z "$old_sdk" ]; then osx_sdk_path="$osx_sdk_104_path" else osx_sdk_path="$old_sdk" fi fi if [ -z "$osx_sdk_path" ]; then log 1 "Your system SDK is probably too old" log 1 "Please install/upgrade your Xcode to >= 2.5" exit 1 fi } detect_cocoa() { # 0 means no, 1 is auto-detect, 2 is force if [ "$with_cocoa" = "0" ]; then log 1 "checking COCOA... disabled" return 0 fi if [ "$with_cocoa" = "2" ] && [ "$enable_dedicated" != "0" ]; then log 1 "configure: error: it is impossible to compile a dedicated with COCOA" log 1 "configure: error: please deselect one of them and try again" exit 1 fi if [ "$enable_dedicated" != "0" ]; then log 1 "checking COCOA... dedicated server, skipping" with_cocoa="0" return 0 fi # By default on OSX we use COCOA. The rest doesn't support it if [ "$with_cocoa" = "1" ] && [ "$os" != "OSX" ]; then log 1 "checking COCOA... not OSX, skipping" with_cocoa="0" return 0 fi if [ "$os" != "OSX" ]; then log 1 "checking COCOA... not OSX" log 1 "configure: error: COCOA video driver is only supported for OSX" exit 1 fi log 1 "checking COCOA... found" if [ "$enable_cocoa_quartz" != "0" ]; then log 1 "checking whether to enable the Quartz window subdriver... yes" else log 1 "checking whether to enable the Quartz window subdriver... no" fi detect_quickdraw } detect_quickdraw() { # 0 means no, 1 is auto-detect, 2 is force if [ "$enable_cocoa_quickdraw" = "0" ]; then log 1 "checking Quickdraw window subdriver... disabled" return 0 fi # Assume QuickDraw is available when doing an universal build if [ "$enable_universal" != "0" ]; then log 1 "checking Quickdraw window subdriver... found" return 0 fi # 64 bits doesn't have quickdraw if [ "$cpu_type" = "64" ]; then enable_cocoa_quickdraw="0" log 1 "checking Quickdraw window subdriver... disabled (64 bits)" return 0 fi cat > tmp.osx.mm << EOF #include #import int main(int argc, char *argv[]) { SetEmptyRgn(NULL); return 0; } EOF execute="$cxx_host $OSX_SYSROOT $OSX_LD_SYSROOT $CFLAGS -mmacosx-version-min=10.3 tmp.osx.mm -framework Cocoa -o tmp.osx 2>&1" eval $execute > /dev/null ret=$? log 2 "executing $execute" log 2 " exit code $ret" rm -f tmp.osx.mm tmp.osx if [ "$ret" != "0" ]; then log 1 "checking Quickdraw window subdriver... not found" # It was forced, so it should be found. if [ "$enable_cocoa_quickdraw" != "1" ]; then log 1 "configure: error: Quickdraw window driver could not be found" exit 1 fi enable_cocoa_quickdraw=0 return 0 fi enable_cocoa_quickdraw=1 log 1 "checking Quickdraw window subdriver... found" } detect_library() { # $1 - config-param ($with_zlib value) # $2 - library name ('zlib', sets $zlib) # $3 - static library name (libz.a) # $4 - header directory () # $5 - header name (zlib.h) # $6 - force static (if non-empty) if [ -n "$6" ]; then force_static="1"; fi # 0 means no, 1 is auto-detect, 2 is force if [ "$1" = "0" ]; then log 1 "checking $2... disabled" eval "$2=\"\"" return 0 fi log 2 "detecting $2" if [ "$1" = "1" ] || [ "$1" = "" ] || [ "$1" = "2" ]; then eval "$2=`ls -1 /usr/include/$4*.h 2>/dev/null | egrep \"\/$5\$\"`" eval "res=\$$2" if [ -z "$res" ]; then log 2 " trying /usr/include/$4$5... no" eval "$2=`ls -1 /usr/local/include/$4*.h 2>/dev/null | egrep \"\/$5\$\"`" fi eval "res=\$$2" if [ -z "$res" ]; then log 2 " trying /usr/local/include/$4$5... no" eval "$2=`ls -1 /mingw/include/$4*.h 2>/dev/null | egrep \"\/$5\$\"`" fi eval "res=\$$2" if [ -z "$res" ]; then log 2 " trying /mingw/include/$4$5... no" eval "$2=`ls -1 /mingw$cpu_type/include/$4*.h 2>/dev/null | egrep \"\/$5\$\"`" fi eval "res=\$$2" if [ -z "$res" ]; then log 2 " trying /mingw$cpu_type/include/$4$5... no" eval "$2=`ls -1 /opt/local/include/$4*.h 2>/dev/null | egrep \"\/$5\$\"`" fi eval "res=\$$2" if [ -z "$res" ]; then log 2 " trying /opt/local/include/$4$5... no" fi if [ -z "$res" ] && [ "$os" = "NETBSD" ]; then eval "$2=`ls -1 /usr/pkg/include/$4*.h 2>/dev/null | egrep \"\/$5\$\"`" eval "res=\$$2" if [ -z "$res" ]; then log 2 " trying /usr/pkg/include/$4$5... no" fi fi if [ -z "$res" ] && [ "$os" = "HAIKU" ]; then if [ -z "$includeDir" ]; then includeDir=`finddir B_SYSTEM_HEADERS_DIRECTORY` fi eval "$2=`ls -1 $includeDir/$4*.h 2>/dev/null | egrep \"\/$5\$\"`" eval "res=\$$2" if [ -z "$res" ]; then log 2 " trying $includeDir/$4$5... no" fi fi eval "res=\$$2" if [ -n "$res" ] && ( [ -n "$force_static" ] || ( [ "$enable_static" != "0" ] && [ "$os" != "OSX" ] ) ); then eval "res=\$$2" log 2 " trying $res... found" # Now find the static lib, if needed eval "$2=`ls /lib/*.a 2>/dev/null | egrep \"\/$3\$\"`" eval "res=\$$2" if [ -z "$res" ]; then log 2 " trying /lib/$3... no" eval "$2=`ls /usr/lib/*.a 2>/dev/null | egrep \"\/$3\$\"`" fi eval "res=\$$2" if [ -z "$res" ]; then log 2 " trying /usr/lib/$3... no" eval "$2=`ls /usr/local/lib/*.a 2>/dev/null | egrep \"\/$3\$\"`" fi eval "res=\$$2" if [ -z "$res" ]; then log 2 " trying /usr/local/lib/$3... no" eval "$2=`ls /mingw/lib/*.a 2>/dev/null | egrep \"\/$3\$\"`" fi eval "res=\$$2" if [ -z "$res" ]; then log 2 " trying /mingw/lib/$3... no" eval "$2=`ls /mingw$cpu_type/lib/*.a 2>/dev/null | egrep \"\/$3\$\"`" fi eval "res=\$$2" if [ -z "$res" ]; then log 2 " trying /mingw$cpu_type/lib/$3... no" log 1 "configure: error: $2 couldn't be found" log 1 "configure: error: you requested a static link, but I can't find $3" exit 1 fi fi else # Make sure it exists if [ -f "$1" ]; then eval "$2=`ls $1 2>/dev/null`" else eval "$2=`ls $1/$3 2>/dev/null`" fi fi eval "res=\$$2" if [ -z "$res" ]; then log 1 "checking $2... not found" if [ "$1" = "2" ]; then log 1 "configure: error: $2 couldn't be found" exit 1 elif [ "$1" != "1" ]; then log 1 "configure: error: $2 couldn't be found" log 1 "configure: error: you supplied '$1', but it seems invalid" exit 1 fi eval "with_$2=0" return 0 fi eval "res=\$$2" log 2 " trying $res... found" log 1 "checking $2... found" } detect_zlib() { detect_pkg_config "$with_zlib" "zlib" "zlib_config" "1.2" } detect_lzo2() { detect_library "$with_lzo2" "lzo2" "liblzo2.a" "lzo/" "lzo1x.h" } detect_fluidsynth() { detect_library "$with_fluidsynth" "fluidsynth" "" "" "fluidsynth.h" } detect_pkg_config() { # $1 - config-param ($with_lzma value) # $2 - package name ('liblzma') # $3 - config name ('lzma_config', sets $lzma_config) # $4 - minimum module version ('2.3') # $5 - check for dedicated, 1 is "skif if dedicated" # 0 means no, 1 is auto-detect, 2 is force if [ "$1" = "0" ]; then log 1 "checking $2... disabled" eval "$3=\"\"" return 0 fi if [ "$5" = "1" ] && [ "$1" = "1" ] && [ "$enable_dedicated" != "0" ]; then log 1 "checking $2... dedicated server, skipping" eval "$3=\"\"" return 0 fi log 2 "detecting $2" if [ "$1" = "1" ] || [ "$1" = "" ] || [ "$1" = "2" ]; then pkg_config_call="$pkg_config $2" else pkg_config_call="$1" fi version=`$pkg_config_call --modversion 2>/dev/null` ret=$? check_version "$4" "$version" version_ok=$? log 2 "executing $pkg_config_call --modversion" log 2 " returned $version" log 2 " exit code $ret" if [ -z "$version" ] || [ "$ret" != "0" ] || [ "$version_ok" != "1" ]; then if [ -n "$version" ] && [ "$version_ok" != "1" ]; then log 1 "checking $2... needs at least version $4, $2 NOT enabled" else log 1 "checking $2... not found" fi # It was forced, so it should be found. if [ "$1" != "1" ]; then log 1 "configure: error: $pkg_config $2 couldn't be found" log 1 "configure: error: you supplied '$1', but it seems invalid" exit 1 fi eval "$3=\"\"" return 0 fi eval "$3=\"$pkg_config_call\"" log 1 "checking $2... found" } detect_lzma() { detect_pkg_config "$with_lzma" "liblzma" "lzma_config" "5.0" } detect_xdg_basedir() { detect_pkg_config "$with_xdg_basedir" "libxdg-basedir" "xdg_basedir_config" "1.2" } detect_png() { detect_pkg_config "$with_png" "libpng" "png_config" "1.2" } detect_freetype() { if [ "$with_freetype" = "1" ] && ([ "$os" = "MINGW" ] || [ "$os" = "CYGWIN" ]); then log 1 "checking freetype2... WIN32, skipping" freetype_config="" return 0 fi detect_pkg_config "$with_freetype" "freetype2" "freetype_config" "2.2" "1" } detect_fontconfig() { # 0 means no, 1 is auto-detect, 2 is force if [ "$with_fontconfig" = "0" ]; then log 1 "checking libfontconfig... disabled" fontconfig_config="" return 0 fi if [ "$os" = "MINGW" ] || [ "$os" = "CYGWIN" ]; then log 1 "checking libfontconfig... WIN32, skipping" fontconfig_config="" return 0 fi if [ "$os" = "OSX" ]; then log 1 "checking libfontconfig... OSX, skipping" fontconfig_config="" return 0 fi detect_pkg_config "$with_fontconfig" "fontconfig" "fontconfig_config" "2.3" "1" } detect_icu_layout() { if [ "$with_cocoa" != "0" ] && [ "$with_icu_layout" = "1" ]; then log 1 "checking icu-lx... OSX, skipping" icu_layout_config="" return 0 fi detect_pkg_config "$with_icu_layout" "icu-lx" "icu_layout_config" "4.8" "1" } detect_icu_sort() { if [ "$with_cocoa" != "0" ] && [ "$with_icu_sort" = "1" ]; then log 1 "checking icu-i18n... OSX, skipping" icu_sort_config="" return 0 fi detect_pkg_config "$with_icu_sort" "icu-i18n" "icu_sort_config" "4.8" "1" } detect_iconv() { # 0 means no, 1 is auto-detect, 2 is force if [ "$with_iconv" = "0" ]; then log 1 "checking iconv... disabled" return 0 fi if [ "$with_iconv" = "1" ] && [ "$os" != "OSX" ]; then log 1 "checking iconv... not OSX, skipping" with_iconv="0" return 0 fi # Try to find iconv.h, seems to only thing to detect iconv with if [ "$with_iconv" = "1" ] || [ "$with_iconv" = "" ] || [ "$with_iconv" = "2" ]; then # Iterate over search paths iconv="" search_paths=`LC_ALL=C $cxx_host $OSX_SYSROOT $CFLAGS -E - -v &1 | \ $awk '/#include <...> search starts here:/{flag=1;next}/End of search list./{flag=0}flag'` for path in $search_paths; do iconv=`ls -1 $path 2>/dev/null | grep "iconv.h"` if [ -n "$iconv" ]; then break fi done else # Make sure it exists iconv=`ls $with_iconv/include/iconv.h 2>/dev/null` fi if [ -z "$iconv" ]; then log 1 "checking iconv... not found" if [ "$with_iconv" = "2" ]; then log 1 "configure: error: iconv couldn't be found" exit 1 elif [ "$with_iconv" != "1" ]; then log 1 "configure: error: iconv couldn't be found" log 1 "configure: error: you supplied '$with_iconv', but I couldn't detect iconv in it" exit 1 fi return 0 fi if [ "$with_iconv" = "1" ]; then with_iconv="2" fi log 2 "found iconv in $iconv" log 1 "checking iconv... found" # There are different implementations of iconv. The older ones, # e.g. SUSv2, pass a const pointer, whereas the newer ones, e.g. # IEEE 1003.1 (2004), pass a non-const pointer. cat > tmp.iconv.cpp << EOF #include "src/stdafx.h" #include int main() { static char buf[1024]; iconv_t convd = 0; const char *inbuf = ""; char *outbuf = buf; size_t outlen = 1023; size_t inlen = 0; return iconv(convd, &inbuf, &inlen, &outbuf, &outlen); } EOF execute="$cxx_host $OSX_SYSROOT $CFLAGS -c tmp.iconv.cpp -o tmp.iconv -DTESTING 2>&1" eval $execute > /dev/null ret=$? log 2 "executing $execute" log 2 " exit code $ret" if [ "$ret" = "0" ]; then have_non_const_iconv="no"; else have_non_const_iconv="yes"; fi log 1 "checking if iconv has non-const inbuf... $have_non_const_iconv" cat > tmp.iconv.cpp << EOF #include "src/stdafx.h" #include int main() { static char buf[1024]; iconv_t convd = 0; char *inbuf = ""; char *outbuf = buf; size_t outlen = 1023; size_t inlen = 0; return iconv(convd, &inbuf, &inlen, &outbuf, &outlen); } EOF execute="$cxx_host $OSX_SYSROOT $OSX_LD_SYSROOT $CFLAGS tmp.iconv.cpp -o tmp.iconv -DTESTING 2>&1" eval $execute > /dev/null ret=$? log 2 "executing $execute" log 2 " exit code $ret" if [ "$ret" = "0" ]; then link_to_iconv="no"; else link_to_iconv="yes"; fi log 1 "checking whether to link to iconv... $link_to_iconv" rm -f tmp.iconv tmp.iconv.cpp } _detect_sort() { sort_test_in="d a c b" sort_test_out="a b c d" log 2 "running echo | $1" if [ "`echo \"$sort_test_in\" | $1 2>/dev/null`" = "$sort_test_out" ]; then sort="$1" log 2 " result was valid" else log 2 " result was invalid" fi } detect_sort() { if [ "$with_sort" = "0" ]; then log 1 "checking sort... disabled" return fi if [ "$with_sort" = "1" ] || [ "$with_sort" = "2" ]; then _detect_sort "sort" if [ -z "$sort" ]; then _detect_sort "/sbin/sort"; fi if [ -z "$sort" ]; then _detect_sort "/usr/sbin/sort"; fi if [ -z "$sort" ]; then _detect_sort "/usr/local/sbin/sort"; fi if [ -z "$sort" ]; then _detect_sort "/bin/sort"; fi if [ -z "$sort" ]; then _detect_sort "/usr/bin/sort"; fi if [ -z "$sort" ]; then _detect_sort "/usr/local/bin/sort"; fi else _detect_sort "$with_sort" fi if [ -z "$sort" ]; then if [ "$with_sort" = "2" ]; then log 1 "checking sort... not found" log 1 "configure: error: couldn't detect sort on your system" exit 1 elif [ "$with_sort" != "1" ]; then log 1 "checking sort... $with_sort not found" log 1 "configure: error: '$with_sort' doesn't look like a sort to me" log 1 "configure: error: please verify its location and function and try again" exit 1 else log 1 "checking sort... not found" fi else log 1 "checking sort... $sort" fi } detect_grfcodec() { # 0 means no, 1 is auto-detect, 2 is force if [ "$with_grfcodec" = "0" ]; then log 1 "checking grfcodec... disabled" grfcodec="" return 0 fi if [ "$with_grfcodec" = "1" ] || [ "$with_grfcodec" = "" ] || [ "$with_grfcodec" = "2" ]; then grfcodec="grfcodec" else grfcodec="$with_grfcodec" fi version=`$grfcodec -v 2>/dev/null | $awk '{print $3}' | sed 's/[rM]//g;s/-/0/'` ret=$? log 2 "executing grfcodec -v" log 2 " returned $version" log 2 " exit code $ret" if [ -z "$version" ] || [ "$ret" != "0" ] || [ "$version" -lt "985" ]; then if [ -n "$version" ] && [ "$version" -lt "985" ]; then log 1 "checking grfcodec... needs at least version 6.0.5 (r985), disabled" else log 1 "checking grfcodec... not found" fi # It was forced, so it should be found. if [ "$with_grfcodec" != "1" ]; then log 1 "configure: error: grfcodec couldn't be found" log 1 "configure: error: you supplied '$with_grfcodec', but it seems invalid" exit 1 fi grfcodec="" return 0 fi log 1 "checking grfcodec... found" } detect_nforenum() { # 0 means no, 1 is auto-detect, 2 is force if [ "$with_nforenum" = "0" ]; then log 1 "checking nforenum... disabled" nforenum="" return 0 fi if [ "$with_nforenum" = "1" ] || [ "$with_nforenum" = "" ] || [ "$with_nforenum" = "2" ]; then nforenum="nforenum" else nforenum="$with_nforenum" fi version=`$nforenum -v 2>/dev/null | $awk '{print $3}' | sed 's/[rM]//g;s/-/0/'` ret=$? log 2 "executing nforenum -v" log 2 " returned $version" log 2 " exit code $ret" if [ -z "$version" ] || [ "$ret" != "0" ] || [ "$version" -lt "985" ]; then if [ -n "$version" ] && [ "$version" -lt "985" ]; then log 1 "checking nforenum... needs at least version 6.0.5 (r985), disabled" else log 1 "checking nforenum... not found" fi # It was forced, so it should be found. if [ "$with_nforenum" != "1" ]; then log 1 "configure: error: nforenum couldn't be found" log 1 "configure: error: you supplied '$with_nforenum', but it seems invalid" exit 1 fi nforenum="" return 0 fi log 1 "checking nforenum... found" } _detect_cputype_width() { echo "#define _SQ64 1" > $1.cpp echo "#include \"src/stdafx.h\"" >> $1.cpp echo "assert_compile(sizeof(size_t) == $2);" >> $1.cpp echo "int main() { return 0; }" >> $1.cpp execute="$cxx_host $CFLAGS -std=c++11 $1.cpp -o $1 -DTESTING 2>&1" cpu_type="`eval $execute 2>/dev/null`" ret=$? log 2 "executing $execute" log 2 " returned $cpu_type" log 2 " exit code $ret" rm -f $1 $1.cpp return $ret } detect_cputype() { if [ -n "$cpu_type" ] && [ "$cpu_type" != "DETECT" ]; then log 1 "forcing cpu-type... $cpu_type bits" return; fi _detect_cputype_width tmp.32bit 4 result32=$? _detect_cputype_width tmp.64bit 8 result64=$? if [ "$result32" = 0 ] && [ "$result64" != 0 ]; then cpu_type="32" elif [ "$result32" != 0 ] && [ "$result64" = 0 ]; then cpu_type="64" else log 1 "configure: unable to determine cpu-type (pointer width)" exit 1 fi log 1 "detecting cpu-type... $cpu_type bits" } detect_sse_capable_architecture() { # 0 means no, 1 is auto-detect, 2 is force if [ "$with_sse" = "0" ]; then log 1 "checking SSE... disabled" return fi echo "#define _SQ64 1" > tmp.sse.cpp echo "#include " >> tmp.sse.cpp echo "#include " >> tmp.sse.cpp echo "#include " >> tmp.sse.cpp echo "int main() { return 0; }" >> tmp.sse.cpp execute="$cxx_host -msse4.1 $CFLAGS tmp.sse.cpp -o tmp.sse 2>&1" sse="`eval $execute 2>/dev/null`" ret=$? log 2 "executing $execute" log 2 " returned $sse" log 2 " exit code $ret" if [ "$ret" = "0" ]; then log 1 "detecting SSE... found" else # It was forced, so it should be found. if [ "$with_sse" != "1" ]; then log 1 "configure: error: SSE couln't be found" log 1 "configure: error: you force enabled SSE, but it seems unavailable" exit 1 fi log 1 "detecting SSE... not found" with_sse="0" fi rm -f tmp.sse tmp.exe tmp.sse.cpp } make_sed() { T_CFLAGS="$CFLAGS" T_CXXFLAGS="$CXXFLAGS" T_LDFLAGS="$LDFLAGS" SRC_OBJS_DIR="$BASE_SRC_OBJS_DIR/$OBJS_SUBDIR" # All the data needed to compile a single target # Make sure if you compile multiple targets to # use multiple OBJS_DIR, because all in-between # binaries are stored in there, and nowhere else. SRC_REPLACE=" s@!!CC_HOST!!@$cc_host@g; s@!!CXX_HOST!!@$cxx_host@g; s@!!CC_BUILD!!@$cc_build@g; s@!!CXX_BUILD!!@$cxx_build@g; s@!!WINDRES!!@$windres@g; s@!!STRIP!!@$strip $strip_arg@g; s@!!LIPO!!@$lipo@g; s@!!CFLAGS!!@$T_CFLAGS@g; s@!!CFLAGS_BUILD!!@$CFLAGS_BUILD@g; s@!!CXXFLAGS!!@$T_CXXFLAGS@g; s@!!CXXFLAGS_BUILD!!@$CXXFLAGS_BUILD@g; s@!!STRGEN_FLAGS!!@$strgen_flags@g; s@!!LIBS!!@$LIBS@g; s@!!LDFLAGS!!@$T_LDFLAGS@g; s@!!LDFLAGS_BUILD!!@$LDFLAGS_BUILD@g; s@!!BIN_DIR!!@$BIN_DIR@g; s@!!ROOT_DIR!!@$ROOT_DIR@g; s@!!MEDIA_DIR!!@$MEDIA_DIR@g; s@!!SOURCE_LIST!!@$SOURCE_LIST@g; s@!!SRC_OBJS_DIR!!@$SRC_OBJS_DIR@g; s@!!LANG_OBJS_DIR!!@$LANG_OBJS_DIR@g; s@!!GRF_OBJS_DIR!!@$GRF_OBJS_DIR@g; s@!!SETTING_OBJS_DIR!!@$SETTING_OBJS_DIR@g; s@!!SRC_DIR!!@$SRC_DIR@g; s@!!SCRIPT_SRC_DIR!!@$SCRIPT_SRC_DIR@g; s@!!OSXAPP!!@$OSXAPP@g; s@!!LANG_DIR!!@$LANG_DIR@g; s@!!TTD!!@$TTD@g; s@!!BINARY_DIR!!@$prefix_dir/$binary_dir@g; s@!!DATA_DIR!!@$prefix_dir/$data_dir@g; s@!!DOC_DIR!!@$prefix_dir/$doc_dir@g; s@!!MAN_DIR!!@$prefix_dir/$man_dir@g; s@!!ICON_DIR!!@$prefix_dir/$icon_dir@g; s@!!ICON_THEME_DIR!!@$prefix_dir/$icon_theme_dir@g; s@!!PERSONAL_DIR!!@$personal_dir@g; s@!!SHARED_DIR!!@$shared_dir@g; s@!!INSTALL_DIR!!@$install_dir@g; s@!!BINARY_NAME!!@$binary_name@g; s@!!STRGEN!!@$STRGEN@g; s@!!DEPEND!!@$DEPEND@g; s@!!SETTINGSGEN!!@$SETTINGSGEN@g; s@!!STAGE!!@$STAGE@g; s@!!MAKEDEPEND!!@$makedepend@g; s@!!CFLAGS_MAKEDEP!!@$cflags_makedep@g; s@!!SORT!!@$sort@g; s@!!CONFIG_CACHE_COMPILER!!@config.cache.compiler@g; s@!!CONFIG_CACHE_LINKER!!@config.cache.linker@g; s@!!CONFIG_CACHE_SOURCE!!@config.cache.source@g; s@!!CONFIG_CACHE_VERSION!!@config.cache.version@g; s@!!CONFIG_CACHE_SOURCE_LIST!!@config.cache.source.list@g; s@!!CONFIG_CACHE_PWD!!@config.cache.pwd@g; s@!!CONFIG_CACHE_INVOCATION!!@config.cache.invocation@g; s@!!LANG_SUPPRESS!!@$lang_suppress@g; s@!!OBJS_C!!@$OBJS_C@g; s@!!OBJS_CPP!!@$OBJS_CPP@g; s@!!OBJS_MM!!@$OBJS_MM@g; s@!!OBJS_RC!!@$OBJS_RC@g; s@!!SRCS!!@$SRCS@g; s@!!OS!!@$os@g; s@!!CPU_TYPE!!@$cpu_type@g; s@!!CONFIGURE_FILES!!@$CONFIGURE_FILES@g; s@!!AWK!!@$awk@g; s@!!DISTCC!!@$distcc@g; s@!!NFORENUM!!@$nforenum@g; s@!!GRFCODEC!!@$grfcodec@g; s@!!CONFIGURE_INVOCATION!!@$CONFIGURE_INVOCATION@g; " if [ "$icon_theme_dir" != "" ]; then SRC_REPLACE="$SRC_REPLACE s@!!ICON_THEME_DIR!!@$prefix_dir/$icon_theme_dir@g; " else SRC_REPLACE="$SRC_REPLACE s@!!ICON_THEME_DIR!!@@g; " fi if [ "$man_dir" != "" ]; then SRC_REPLACE="$SRC_REPLACE s@!!MAN_DIR!!@$prefix_dir/$man_dir@g; " else SRC_REPLACE="$SRC_REPLACE s@!!MAN_DIR!!@@g; " fi if [ "$menu_dir" != "" ]; then SRC_REPLACE="$SRC_REPLACE s@!!MENU_DIR!!@$prefix_dir/$menu_dir@g; " else SRC_REPLACE="$SRC_REPLACE s@!!MENU_DIR!!@@g; " fi } generate_menu_item() { MENU_REPLACE=" s@!!TTD!!@$TTD@g; s@!!MENU_GROUP!!@$menu_group@g; s@!!MENU_NAME!!@$menu_name@g " log 1 "Generating menu item..." mkdir -p media < $ROOT_DIR/media/openttd.desktop.in sed "$MENU_REPLACE" > media/openttd.desktop } generate_main() { STAGE="[MAIN]" make_sed # Create the main Makefile log 1 "Generating Makefile..." echo "# Auto-generated file from 'Makefile.in' -- DO NOT EDIT" > Makefile < $ROOT_DIR/Makefile.in sed "$SRC_REPLACE" >> Makefile cp $ROOT_DIR/Makefile.bundle.in Makefile.bundle echo "# Auto-generated file -- DO NOT EDIT" > Makefile.am echo >> Makefile.am # Make the copy of the source-list, so we don't trigger an unwanted recompile cp $SOURCE_LIST config.cache.source.list # Add the current directory, so we don't trigger an unwanted recompile echo "`pwd`" > config.cache.pwd # Make sure config.cache is OLDER then config.cache.source.list touch config.cache touch config.pwd if [ "$menu_dir" != "" ]; then generate_menu_item fi } generate_lang() { STAGE="[LANG]" make_sed # Create the language file mkdir -p $LANG_OBJS_DIR log 1 "Generating lang/Makefile..." echo "# Auto-generated file from 'Makefile.lang.in' -- DO NOT EDIT" > $LANG_OBJS_DIR/Makefile < $ROOT_DIR/Makefile.lang.in sed "$SRC_REPLACE" >> $LANG_OBJS_DIR/Makefile echo "DIRS += $LANG_OBJS_DIR" >> Makefile.am echo "LANG_DIRS += $LANG_OBJS_DIR" >> Makefile.am } generate_settings() { STAGE="[SETTING]" make_sed # Create the language file mkdir -p $SETTING_OBJS_DIR log 1 "Generating setting/Makefile..." echo "# Auto-generated file from 'Makefile.settings.in' -- DO NOT EDIT" > $SETTING_OBJS_DIR/Makefile < $ROOT_DIR/Makefile.setting.in sed "$SRC_REPLACE" >> $SETTING_OBJS_DIR/Makefile echo "DIRS += $SETTING_OBJS_DIR" >> Makefile.am } generate_grf() { STAGE="[BASESET]" make_sed # Create the language file mkdir -p $GRF_OBJS_DIR log 1 "Generating grf/Makefile..." echo "# Auto-generated file from 'Makefile.grf.in' -- DO NOT EDIT" > $GRF_OBJS_DIR/Makefile < $ROOT_DIR/Makefile.grf.in sed "$SRC_REPLACE" >> $GRF_OBJS_DIR/Makefile echo "DIRS += $GRF_OBJS_DIR" >> Makefile.am } generate_src_normal() { STAGE=$1 make_sed # Create the source file mkdir -p $SRC_OBJS_DIR log 1 "Generating $2/Makefile..." echo "# Auto-generated file from 'Makefile.src.in' -- DO NOT EDIT" > $SRC_OBJS_DIR/Makefile < $ROOT_DIR/Makefile.src.in sed "$SRC_REPLACE" >> $SRC_OBJS_DIR/Makefile echo "DIRS += $SRC_OBJS_DIR" >> Makefile.am echo "SRC_DIRS += $SRC_OBJS_DIR" >> Makefile.am } generate_src_osx() { cc_host_orig="$cc_host" cxx_host_orig="$cxx_host" CFLAGS_orig="$CFLAGS" LDFLAGS_orig="$LDFLAGS" for type in $enable_universal; do if [ -n "$osx_sdk_104_path" ]; then # Use 10.4 SDK for 32-bit targets CFLAGS="-isysroot $osx_sdk_104_path $CFLAGS_orig" LDFLAGS="-Wl,-syslibroot,$osx_sdk_104_path $LDFLAGS_orig" fi # We don't want to duplicate the x86_64 stuff for each target, so do it once here if [ "$type" = "ppc64" ] || [ "$type" = "x86_64" ]; then # 64 bits is always 10.5 or higher. Furthermore it has a non const ICONV # and they also removed support for QuickTime/QuickDraw if [ -n "$osx_sdk_path" ]; then CFLAGS="-isysroot $osx_sdk_path $CFLAGS_orig" LDFLAGS="-Wl,-syslibroot,$osx_sdk_path $LDFLAGS_orig" fi CFLAGS="$CFLAGS -D_SQ64 -DNO_QUICKTIME -UENABLE_COCOA_QUICKDRAW" LIBS="`echo $LIBS | sed 's/-framework QuickTime//'`" fi case $type in ppc) BASE_SRC_OBJS_DIR="$OBJS_DIR/ppc" cc_host="$cc_host_orig -arch ppc -mmacosx-version-min=10.3" cxx_host="$cxx_host_orig -arch ppc -mmacosx-version-min=10.3" generate_src_normal "[ppc]" "objs/ppc";; ppc970) BASE_SRC_OBJS_DIR="$OBJS_DIR/ppc970" cc_host="$cc_host_orig -arch ppc970 -mmacosx-version-min=10.3 -mcpu=G5 -mpowerpc64 -mtune=970 -mcpu=970 -mpowerpc-gpopt" cxx_host="$cxx_host_orig -arch ppc970 -mmacosx-version-min=10.3 -mcpu=G5 -mpowerpc64 -mtune=970 -mcpu=970 -mpowerpc-gpopt" generate_src_normal "[ppc970]" "objs/ppc970";; i386) BASE_SRC_OBJS_DIR="$OBJS_DIR/i386" cc_host="$cc_host_orig -arch i386 -mmacosx-version-min=10.4" cxx_host="$cxx_host_orig -arch i386 -mmacosx-version-min=10.4" generate_src_normal "[i386]" "objs/i386";; ppc64) BASE_SRC_OBJS_DIR="$OBJS_DIR/ppc64" cc_host="$cc_host_orig -arch ppc64 -mmacosx-version-min=10.5" cxx_host="$cxx_host_orig -arch ppc64 -mmacosx-version-min=10.5" generate_src_normal "[ppc64]" "objs/ppc64";; x86_64) BASE_SRC_OBJS_DIR="$OBJS_DIR/x86_64" cc_host="$cc_host_orig -arch x86_64 -mmacosx-version-min=10.5" cxx_host="$cxx_host_orig -arch x86_64 -mmacosx-version-min=10.5" generate_src_normal "[x86_64]" "objs/x86_64";; *) log 1 "Unknown architecture requested for universal build: $type";; esac done } generate_src() { if [ "$os" = "OSX" ] && [ "$enable_universal" != "0" ]; then generate_src_osx else generate_src_normal "[SRC]" "objs" fi } showhelp() { echo "'configure' configures OpenTTD." echo "" echo "Usage: $0 [OPTION]... [VAR=VALUE]..." echo "" echo "To assign environment variables (e.g., CC, CFLAGS...), specify them as" echo "VAR=VALUE. See below for descriptions of some of the useful variables." echo "" echo "Defaults for the options are specified in brackets." echo "" echo "Configuration:" echo " -h, --help display this help and exit" echo "" echo "System types:" echo " --build=BUILD configure for building on BUILD [guessed]" echo " --host=HOST cross-compile to build programs to run" echo " on HOST [BUILD]" echo " --windres=WINDRES the windres to use [HOST-windres]" echo " --strip=STRIP the strip to use [HOST-strip]" echo " --awk=AWK the awk to use in configure [awk]" echo " --pkg-config=PKG-CONFIG the pkg-config to use in configure [pkg-config]" echo " --lipo=LIPO the lipo to use (OSX ONLY) [HOST-lipo]" echo " --os=OS the OS we are compiling for [DETECT]" echo " DETECT/UNIX/OSX/FREEBSD/DRAGONFLY/OPENBSD/" echo " NETBSD/HPUX/SUNOS/CYGWIN/" echo " MINGW/OS2/HAIKU" echo "" echo "Paths:" echo " --prefix-dir=dir specifies the prefix for all installed" echo " files [/usr/local]" echo " --binary-dir=dir location of the binary. Will be prefixed" echo " with the prefix-dir [games]" echo " --data-dir=dir location of data files (lang, data, gm)." echo " Will be prefixed with the prefix-dir" echo " [share/games/openttd]" echo " --doc-dir=dir location of the doc files" echo " Will be prefixed with the prefix-dir" echo " [$doc_dir]" echo " --icon-dir=dir location of icons. Will be prefixed" echo " with the prefix-dir [share/pixmaps]" echo " --icon-theme-dir=dir location of icon theme." echo " Will be prefixed with the prefix-dir" echo " and postfixed with size-dirs [$icon_theme_dir]" echo " --man-dir=dir location of the manual page (UNIX only)" echo " Will be prefixed with the prefix-dir" echo " [$man_dir]" echo " --menu-dir=dir location of the menu item. (UNIX only, except OSX)" echo " Will be prefixed with the prefix-dir" echo " [share/applications]" echo " --personal-dir=dir location of the personal directory" echo " [os-dependent default]" echo " --shared-dir=dir location of shared data files" echo " [os-dependent default]" echo " --install-dir=dir specifies the root to install to." echo " Useful to install into jails [/]" echo " --binary-name the name used for the binary, icons," echo " desktop file, etc. when installing [openttd]" echo "" echo "Features and packages:" echo " --enable-debug[=LVL] enable debug-mode (LVL=[0123], 0 is release)" echo " --enable-desync-debug=[LVL] enable desync debug options (LVL=[012], 0 is none" echo " --enable-profiling enables profiling" echo " --enable-lto enables GCC's Link Time Optimization (LTO)/ICC's" echo " Interprocedural Optimization if available" echo " --enable-dedicated compile a dedicated server (without video)" echo " --enable-static enable static compile (doesn't work for" echo " all HOSTs)" echo " --enable-translator enable extra output for translators" echo " --enable-universal[=ARCH] enable universal builds (OSX ONLY). Allowed is any combination" echo " of architectures: i386 ppc ppc970 ppc64 x86_64" echo " Default architectures are: i386 ppc" echo " --enable-osx-g5 enables optimizations for ppc970 (G5) (OSX ONLY)" echo " --disable-cocoa-quartz disable the quartz window mode driver for Cocoa (OSX ONLY)" echo " --disable-cocoa-quickdraw disable the quickdraw window mode driver for Cocoa (OSX ONLY)" echo " --disable-unicode disable unicode support to build win9x" echo " version (Win32 ONLY)" echo " --enable-console compile as a console application instead of as a GUI application." echo " If this setting is active, debug output will appear in the same" echo " console instead of opening a new window. (Win32 ONLY)" echo " --disable-assert disable asserts (continue on errors)" echo " --enable-strip enable any possible stripping" echo " --without-osx-sysroot disable the automatic adding of sysroot " echo " (OSX ONLY)" echo " --without-application-bundle disable generation of application bundle" echo " (OSX ONLY)" echo " --without-menu-entry Don't generate a menu item (Freedesktop based only)" echo " --menu-group=group Category in which the menu item will be placed (Freedesktop based only)" echo " --menu-name=name Name of the menu item when placed [OpenTTD]" echo " --with-direct-music enable direct music support (Win32 ONLY)" echo " --with-sort=sort define a non-default location for sort" echo " --with-midi=midi define which midi-player to use" echo " --with-midi-arg=arg define which args to use for the" echo " midi-player" echo " --with-fluidsynth enables fluidsynth support" echo " --with-allegro[=\"pkg-config allegro\"]" echo " enables Allegro video driver support" echo " --with-cocoa enables COCOA video driver (OSX ONLY)" echo " --with-sdl[=\"pkg-config sdl\"] enables SDL video driver support" echo " --with-zlib[=\"pkg-config zlib\"]" echo " enables zlib support" echo " --with-liblzma[=\"pkg-config liblzma\"]" echo " enables liblzma support" echo " --with-liblzo2[=liblzo2.a] enables liblzo2 support" echo " --with-png[=\"pkg-config libpng\"]" echo " enables libpng support" echo " --with-freetype[=\"pkg-config freetype2\"]" echo " enables libfreetype support" echo " --with-fontconfig[=\"pkg-config fontconfig\"]" echo " enables fontconfig support" echo " --with-xdg-basedir[=\"pkg-config libxdg-basedir\"]" echo " enables XDG base directory support" echo " --with-icu enables icu components for layout and sorting" echo " --with-icu-layout[=\"pkg-config icu-lx\"]" echo " enables icu components for layouting (right-to-left support)" echo " --with-icu-sort[=\"pkg-config icu-i18n\"]" echo " enables icu components for locale specific string sorting" echo " --static-icu try to link statically (libsicu instead of" echo " libicu; can fail as the new name is guessed)" echo " --with-iconv[=iconv-path] enables iconv support" echo " --disable-builtin-depend disable use of builtin deps finder" echo " --with-makedepend[=makedepend] enables makedepend support" echo " --with-ccache enables ccache support" echo " --with-distcc enables distcc support" echo " --without-grfcodec disable usage of grfcodec and re-generation of base sets" echo " --without-threads disable threading support" echo " --without-sse disable SSE support (x86/x86_64 only)" echo " --without-libbfd disable libbfd support, used for improved crash logs (MinGW and Unix/glibc only)" echo " --without-bfd-extra-debug disable extra debugging information when using libbfd (MinGW and Unix/glibc only)" echo " --without-self-gdb-debug disable improved crash logs using gdb (Linux only)" echo " --without-self-lldb-debug disable improved crash logs using lldb (OSX only)" echo "" echo "Some influential environment variables:" echo " CC C compiler command" echo " CXX C++ compiler command" echo " CFLAGS C compiler flags" echo " CXXFLAGS C++ compiler flags" echo " WINDRES windres command" echo " LDFLAGS linker flags, e.g. -L if you" echo " have libraries in a nonstandard" echo " directory " echo " CFLAGS_BUILD C compiler flags for build time tool generation" echo " CXXFLAGS_BUILD C++ compiler flags for build time tool generation" echo " LDFLAGS_BUILD linker flags for build time tool generation" echo " PKG_CONFIG_PATH additional library search paths (see \"man pkg-config\")" echo " PKG_CONFIG_LIBDIR replace the default library search path (see \"man pkg-config\")" echo "" echo "Use these variables to override the choices made by 'configure' or to help" echo "it to find libraries and programs with nonstandard names/locations." }