#!/bin/sh # $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 . check_path_characters() { if [ -n "`echo $ROOT_DIR | grep '[^-_A-Za-z0-9\/\\\.:]'`" ]; then echo "WARNING: The path contains a non-alphanumeric character that might cause" echo " failures in subsequent build stages. Any failures with the build" echo " will most likely be caused by this." fi } CONFIGURE_EXECUTABLE="$_" # On *nix systems those two are equal when ./configure is done if [ "$0" != "$CONFIGURE_EXECUTABLE" ]; then # On some systems, when ./configure is triggered from 'make' # the $_ is filled with 'make'. So if that is true, skip 'make' # and use $0 (and hope that is correct ;)) if [ -n "`echo $CONFIGURE_EXECUTABLE | grep make`" ]; then CONFIGURE_EXECUTABLE="$0" else CONFIGURE_EXECUTABLE="$CONFIGURE_EXECUTABLE $0" fi fi # Find out where configure is (in what dir) ROOT_DIR="`dirname $0`" # For MSYS/MinGW we want to know the FULL path. This as that path is generated # once you call an outside binary. Having the same path for the rest is needed # for dependency checking. # pwd -W returns said FULL path, but doesn't exist on others so fall back. ROOT_DIR="`cd $ROOT_DIR && (pwd -W 2>/dev/null || pwd 2>/dev/null)`" check_path_characters # Same here as for the ROOT_DIR above PWD="`pwd -W 2>/dev/null || pwd 2>/dev/null`" PREFIX="$PWD/bin" . $ROOT_DIR/config.lib # Set default dirs OBJS_DIR="$PWD/objs" BASE_SRC_OBJS_DIR="$OBJS_DIR" LANG_OBJS_DIR="$OBJS_DIR/lang" GRF_OBJS_DIR="$OBJS_DIR/extra_grf" SETTING_OBJS_DIR="$OBJS_DIR/setting" BIN_DIR="$PREFIX" SRC_DIR="$ROOT_DIR/src" LANG_DIR="$SRC_DIR/lang" MEDIA_DIR="$ROOT_DIR/media" SOURCE_LIST="$ROOT_DIR/source.list" if [ "$1" = "--reconfig" ] || [ "$1" = "--reconfigure" ]; then if [ ! -f "config.cache" ]; then echo "can't reconfigure, because never configured before" exit 1 fi # Make sure we don't lock config.cache cat config.cache | sed 's@\\ @\\\\ @g' > cache.tmp sh cache.tmp RET=$? rm -f cache.tmp exit $RET fi set_default detect_params "$@" check_params save_params make_cflags_and_ldflags EXE="" if [ "$os" = "MINGW" ] || [ "$os" = "CYGWIN" ] || [ "$os" = "OS2" ] || [ "$os" = "DOS" ] || [ "$os" = "WINCE" ]; then EXE=".exe" fi TTD="openttd$EXE" STRGEN="strgen$EXE" ENDIAN_CHECK="endian_check$EXE" DEPEND="depend$EXE" SETTINGSGEN="settings_gen$EXE" if [ -z "$sort" ]; then PIPE_SORT="sed s@a@a@" else PIPE_SORT="$sort" fi if [ ! -f "$LANG_DIR/english.txt" ]; then echo "Languages not found in $LANG_DIR. Can't continue without it." echo "Please make sure the dir exists and contains at least english.txt" fi # Read the source.list and process it AWKCOMMAND=' { } /^( *)#end/ { if (deep == skip) { skip -= 1; } deep -= 1; next; } /^( *)#else/ { if (deep == skip) { skip -= 1; } else if (deep - 1 == skip) { skip += 1; } next; } /^( *)#if/ { gsub(" ", "", $0); gsub("^#if ", "", $0); if (deep != skip) { deep += 1; next; } deep += 1; if ($0 == "ALLEGRO" && "'$allegro_config'" == "") { next; } if ($0 == "SDL" && "'$sdl_config'" == "") { next; } if ($0 == "PNG" && "'$png_config'" == "") { next; } if ($0 == "OSX" && "'$os'" != "OSX") { next; } if ($0 == "OS2" && "'$os'" != "OS2") { next; } if ($0 == "PSP" && "'$os'" != "PSP") { next; } if ($0 == "DEDICATED" && "'$enable_dedicated'" != "1") { next; } if ($0 == "AI" && "'$enable_ai'" == "0") { next; } if ($0 == "COCOA" && "'$with_cocoa'" == "0") { next; } if ($0 == "DOS" && "'$os'" != "DOS") { next; } if ($0 == "BEOS" && "'$os'" != "BEOS" && "'$os'" != "HAIKU") { next; } if ($0 == "WIN32" && "'$os'" != "MINGW" && "'$os'" != "CYGWIN" && "'$os'" != "MSVC") { next; } if ($0 == "MORPHOS" && "'$os'" != "MORPHOS") { next; } if ($0 == "WINCE" && "'$os'" != "WINCE") { next; } if ($0 == "MSVC" && "'$os'" != "MSVC") { next; } if ($0 == "DIRECTMUSIC" && "'$with_direct_music'" == "0") { next; } if ($0 == "LIBTIMIDITY" && "'$libtimidity'" == "" ) { next; } if ($0 == "HAVE_THREAD" && "'$with_threads'" == "0") { next; } skip += 1; next; } /^( *)#/ { next } /^$/ { next } /\.h$/ { next } /\.hpp$/ { next } { if (deep == skip) { gsub(" ", "", $0); print $0; } } ' # Read the source.list and process it # Please escape ALL " within ` because e.g. "" terminates the string in some sh implementations SRCS="`< $ROOT_DIR/source.list tr '\r' '\n' | $awk \"$AWKCOMMAND\" | $PIPE_SORT`" OBJS_C="` echo \"$SRCS\" | $awk ' { ORS = \" \" } /\.c$/ { gsub(\".c$\", \".o\", $0); print $0; }'`" OBJS_CPP="`echo \"$SRCS\" | $awk ' { ORS = \" \" } /\.cpp$/ { gsub(\".cpp$\", \".o\", $0); print $0; }'`" OBJS_MM="` echo \"$SRCS\" | $awk ' { ORS = \" \" } /\.mm$/ { gsub(\".mm$\", \".o\", $0); print $0; }'`" OBJS_RC="` echo \"$SRCS\" | $awk ' { ORS = \" \" } /\.rc$/ { gsub(\".rc$\", \".o\", $0); print $0; }'`" SRCS="` echo \"$SRCS\" | $awk ' { ORS = \" \" } { print $0; }'`" # In makefiles, we always use -u for sort if [ -z "$sort" ]; then sort="sed s@a@a@" else sort="$sort -u" fi CONFIGURE_FILES="$ROOT_DIR/configure $ROOT_DIR/config.lib $ROOT_DIR/Makefile.in $ROOT_DIR/Makefile.grf.in $ROOT_DIR/Makefile.lang.in $ROOT_DIR/Makefile.src.in $ROOT_DIR/Makefile.bundle.in $ROOT_DIR/Makefile.setting.in" generate_main generate_lang generate_settings generate_grf generate_src check_path_characters