176 lines
		
	
	
		
			6.1 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			176 lines
		
	
	
		
			6.1 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable File
		
	
	
	
	
| #!/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 <http://www.gnu.org/licenses/>.
 | |
| 
 | |
| 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; }
 | |
| 		if ($0 == "SSE"         && "'$with_sse'" != "1")           { 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
 | 
