configure
author rubidium
Tue, 24 Jun 2008 11:42:01 +0000
changeset 11064 7ebca843450b
parent 10437 0452e6a6feb7
permissions -rwxr-xr-x
(svn r13621) -Fix: building roadbits in the wrong direction on bridges or building roadbits from underneath the bridge to the bridgehead is impossible, so don't silently ignore that error when building over houses and industries is not ignored.
#!/bin/sh

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`"
ROOT_DIR="`cd $ROOT_DIR && pwd`"

PWD="`pwd`"
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"
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
	rm -f cache.tmp
	exit $?
fi

set_default
detect_params "$@"
check_params
save_params
make_cflags_and_ldflags

EXE=""
if [ "$os" = "MINGW" ] || [ "$os" = "CYGWIN" ] || [ "$os" = "OS2" ] || [ "$os" = "WINCE" ]; then
	EXE=".exe"
fi

TTD="openttd$EXE"
STRGEN="strgen$EXE"
ENDIAN_CHECK="endian_check$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
SRCS="`< $ROOT_DIR/source.list tr '\r' '\n' | $awk '
	{  }
	/^(	*)#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 == "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 == "COCOA"       && "'$with_cocoa'" == "0")         { next; }
		if ($0 == "BEOS"        && "'$os'" != "BEOS")              { 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;
		}
	}
' | $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.lang.in $ROOT_DIR/Makefile.src.in"

generate_main
generate_lang
generate_src