configure
branchcustombridgeheads
changeset 5643 3778051e8095
parent 5305 e07957fe871e
child 5645 72ebd9e4cd64
child 5731 adeae09edbea
--- a/configure	Wed Jan 03 08:32:17 2007 +0000
+++ b/configure	Wed Jan 03 08:49:36 2007 +0000
@@ -1,323 +1,121 @@
 #!/bin/sh
 
-# This 'configure' script is a very easy wrapper around 'make updateconf'
-#  It allows cross-compilers to do their job much more easy.
-
-function showhelp() {
-	echo "Configure for OpenTTD"
-	echo ""
-	echo "Usage:"
-	echo " $0 --your_options"
-	echo ""
-	echo "Params:"
-	echo " --debug             Create debug-release                [no]"
-	echo " --profile           Create profile-release              [no]"
-	echo " --dedicated         Make a dedicated build              [no]"
-	echo " --revision          Set the revision of the compilation [detected]"
-	echo " --target-cc         Sets the target-compiler            [\$CC]"
-	echo " --target-cxx        Sets the C++ target-compiler        []"
-	echo " --host-cc           Sets the host-compiler              [\$CC]"
-	echo " --host-cxx          Sets the C++ host-compiler          []"
-	echo " --os                Sets the OS. Listens to:            [detected]"
-	echo "                        UNIX, OSX, FREEBSD, MORPHOS"
-	echo "                        BEOS, SUNOS, CYGWIN, MINGW, OS2"
-	echo " --windres           Sets the windres (Windows)          [windres]"
-	echo " --force-le          Force LE platform                   [no]"
-	echo " --force-be          Force BE platform                   [no]"
-	echo ""
-	echo "Params that can be used with --with or --without"
-	echo "   (e.g.: --without-static disables static (default))"
-	echo " static              Do you want a static build?         [no]"
-	echo " directmusic         Do you want direct-music?           [no]"
-	echo " zlib                Do you want zlib-support?           [yes]"
-	echo " sdl                 Do you want SDL-support?            [yes]"
-	echo " png                 Do you want PNG-support?            [yes]"
-	echo " iconv               Do you want iconv-support?          [no]"
-	echo " network             Do you want network-support?        [yes]"
-	echo " cocoa               Do you want cocoa-support? (MacOSX) [no]"
-	echo " freetype            Do you want freetype-support?       [yes]"
-	echo " fontconfig          Do you want fontconfig-support?     [yes]"
-	echo ""
-	echo "Params used to configure external libs:"
-	echo " --static-zlib-path  Set the path to your static zlib    []"
-	echo " --sdl-config        Where is your sdl-config            [sdl-config]"
-	echo " --libpng-config     Where is your libpng-config         [libpng-config]"
-	echo " --freetype-config   Where is your freetype-config       [freetype-config]"
-	echo " --fontconfig-config Where is your fontconfig-config     [pkg-config fontconfig]"
-	echo " --with-iconv        Set the path to your iconv headers  []"
-	echo " "
-}
-
-function handle() {
-	PARAM="$PARAM \"$1=`awk 'BEGIN { FS="="; $0="'"$2"'"; print $2;}'`\""
-}
-
-# The things you can use inside this case:
-#  handle NAME VALUE - Sets the value to give the 'make upgradeconf'
-#                         Value is in form: tag=REAL_VALUE
-#  ITEM="NAME"       - Will set the value as above, only with the next param
-#  SITEM="NAME"      - Will set the var $NAME to the next param
-for n in "$@"
-do
-	case "$n" in
-		--help | -h)
-			showhelp
-			exit 0
-			;;
-
-		--debug)
-			DEBUG_SET=1
-			ITEM="DEBUG"
-			;;
-		--debug=*)
-			handle "DEBUG" "$n"
-			;;
-		--profile)
-			PARAM="$PARAM PROFILE=1"
-			;;
-		--dedicated)
-			PARAM="$PARAM DEDICATED=1"
-			;;
-		--revision=*)
-			RELEASE=`awk 'BEGIN { FS="="; $0="'"$n"'"; print $2;}'`
-			;;
-		--revision)
-			SITEM="RELEASE"
-			;;
-		--target-cc=*)
-			handle "CC_TARGET" "$n"
-			;;
-		--target-cc)
-			ITEM="CC_TARGET"
-			;;
-		--target-cxx=*)
-			handle "CXX_TARGET" "$n"
-			;;
-		--target-cxx)
-			SITEM="CXX_TARGET"
-			;;
-		--host-cc=*)
-			handle "CC_HOST" "$n"
-			;;
-		--host-cc)
-			ITEM="CC_HOST"
-			;;
-		--host-cxx=*)
-			handle "CXX_HOST" "$n"
-			;;
-		--host-cxx)
-			ITEM="CXX_HOST"
-			;;
-		--host-cflags=*)
-			handle CFLAGS_HOST "$n"
-			;;
-		--host-cflags)
-			ITEM="CFLAGS_HOST"
-			;;
-		--os=*)
-			TARGET_OS=`awk 'BEGIN { FS="="; $0="'"$n"'"; print $2;}'`
-			;;
-		--os)
-			SITEM="TARGET_OS"
-			;;
-		--windres=*)
-			handle WINDRES "$n"
-			;;
-		--windres)
-			ITEM="WINDRES"
-			;;
-		--force-le)
-			PARAM="$PARAM ENDIAN_FORCE=LE"
-			;;
-		--force-be)
-			PARAM="$PARAM ENDIAN_FORCE=BE"
-			;;
+# Find out where configure is (in what dir)
+ROOT_DIR="`dirname $0`"
+ROOT_DIR="`cd $ROOT_DIR && pwd`"
 
-		--with-static)
-			PARAM="$PARAM STATIC=1"
-			;;
-		--without-static)
-			PARAM="$PARAM STATIC="
-			;;
-		--with-directmusic)
-			PARAM="$PARAM WITH_DIRECTMUSIC=1"
-			;;
-		--without-directmusic)
-			PARAM="$PARAM WITH_DIRECTMUSIC="
-			;;
-		--with-zlib)
-			PARAM="$PARAM WITH_ZLIB=1"
-			;;
-		--without-zlib)
-			PARAM="$PARAM WITH_ZLIB="
-			;;
-		--with-sdl)
-			PARAM="$PARAM WITH_SDL=1"
-			;;
-		--without-sdl)
-			PARAM="$PARAM WITH_SDL="
-			;;
-		--with-png)
-			PARAM="$PARAM WITH_PNG=1"
-			;;
-		--without-png)
-			PARAM="$PARAM WITH_PNG="
-			;;
-		--with-iconv)
-			PARAM="$PARAM WITH_ICONV=1"
-			;;
-		--with-iconv=*)
-			PARAM="$PARAM WITH_ICONV=1"
-			handle WITH_ICONV_PATH "$n"
-			;;
-		--without-iconv)
-			PARAM="$PARAM WITH_ICONV="
-			;;
-		--with-cocoa)
-			PARAM="$PARAM WITH_COCOA=1"
-			;;
-		--with-network)
-			PARAM="$PARAM WITH_NETWORK=1"
-			;;
-		--without-network)
-			PARAM="$PARAM WITH_NETWORK="
-			;;
-		--without-cocoa)
-			PARAM="$PARAM WITH_COCOA="
-			;;
-		--with-freetype)
-			PARAM="$PARAM WITH_FREETYPE=1"
-			;;
-		--without-freetype)
-			PARAM="$PARAM WITH_FREETYPE="
-			;;
-		--with-fontconfig)
-			PARAM="$PARAM WITH_FONTCONFIG=1"
-			;;
-		--without-fontconfig)
-			PARAM="$PARAM WITH_FONTCONFIG="
-			;;
-		--static-zlib-path=*)
-			handle STATIC_ZLIB_PATH "$n"
-			;;
-		--static-zlib-path)
-			ITEM="STATIC_ZLIB_PATH"
-			;;
-		--sdl-config=*)
-			handle SDL_CONFIG "$n"
-			;;
-		--sdl-config)
-			ITEM="SDL_CONFIG"
-			;;
-		--libpng-config=*)
-			handle LIBPNG_CONFIG "$n"
-			;;
-		--libpng-config)
-			ITEM="LIBPNG_CONFIG"
-			;;
-		--freetype-config=*)
-			handle FREETYPE_CONFIG "$n"
-			;;
-		--freetype-config)
-			ITEM="FREETYPE_CONFIG"
-			;;
-		--fontconfig-config=*)
-			handle FONTCONFIG_CONFIG "$n"
-			;;
-		--fontconfig-config)
-			ITEM="FONTCONFIG_CONFIG"
-			;;
+PWD="`pwd`"
+PREFIX="`pwd`/bin"
 
-		--*=*)
-			echo -n "Unknown switch "
-			echo `awk 'BEGIN { FS="="; $0="'"$n"'"; print $1;}'`
-			exit 1
-			;;
-		-*)
-			echo "Unknown switch $n"
-			exit 1
-			;;
+. $ROOT_DIR/config.lib
 
-		*)
-			if ! test -z "$ITEM"
-			then
-				PARAM="$PARAM $ITEM=\"$n\""
-				ITEM="";
-			elif ! test -z "$SITEM"
-			then
-				export $SITEM="$n"
-				SITEM=""
-			else
-				echo "Unknown switch $n"
-				exit 1
-			fi
-			;;
-	esac
-done
+# 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 ! test -z "$TARGET_OS"
+if [ "$1" = "--reconfig" ]
 then
-	TARGET_OS=`echo $TARGET_OS | tr '[:lower:]' '[:upper:]'`
-	case "$TARGET_OS" in
-		WIN32)
-			PARAM="$PARAM WIN32=1"
-			;;
-		UNIX)
-			PARAM="$PARAM UNIX=1"
-			;;
-		OSX)
-			PARAM="$PARAM OSX=1 UNIX=1"
-			;;
-		FREEBSD)
-			PARAM="$PARAM FREEBSD=1"
-			;;
-		MORPHOS)
-			PARAM="$PARAM MORPHOS=1 UNIX=1"
-			;;
-		BEOS)
-			PARAM="$PARAM BEOS=1 UNIX=1"
-			;;
-		OS2)
-			PARAM="$PARAM OS2=1 UNIX=1"
-			;;
-		SUNOS)
-			PARAM="$PARAM SUNOS=1 UNIX=1"
-			;;
-		CYGWIN)
-			PARAM="$PARAM CYGWIN=1 WIN32=1"
-			;;
-		MINGW)
-			PARAM="$PARAM MINGW=1 WIN32=1"
-			;;
-		*)
-			echo "Unknown OS: $TARGET_OS"
-			exit 1
-			;;
-	esac
-	PARAM="$PARAM BYPASS_OS_DETECT=1"
+	if ! [ -f "config.cache" ]
+	then
+		echo "can't reconfigure, because never configured before"
+		exit 1
+	fi
+	# Make sure we don't lock config.cache
+	configure=`cat config.cache`
+	$configure
+	exit $?
 fi
 
-if ! test -z "$DEBUG_SET"
+set_default
+detect_params $@
+save_params
+check_params
+make_cflags_and_ldflags
+
+EXE=""
+if [ "$os" = "MINGW" ] || [ "$os" = "CYGWIN" ] || [ "$os" = "OS2" ]
 then
-	if test -z "`echo $PARAM | grep "DEBUG="`"
-	then
-		# Someone did --debug, without assigning a value, assume 1
-		PARAM="$PARAM DEBUG=1"
-	fi
+	EXE=".exe"
 fi
 
-# First remove the Makefile.config, else you can have double entries
-rm -f Makefile.config
+TTD="openttd$EXE"
+STRGEN="strgen$EXE"
+ENDIAN_CHECK="endian_check$EXE"
 
-echo "make upgradeconf $PARAM" > Makefile.run
-. Makefile.run
-rm -f Makefile.run
-
-# Makefile.config currently doesn't support custom RELEASE (revision), so, we add the line
-# yourself!
-
-if ! test -z "$RELEASE"
+if [ -z "$sort" ]
 then
-	echo "RELEASE=$RELEASE" >> Makefile.config
+	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="`cat $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 == "OSX"         && "'$os'" != "OSX")               { 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 == "MSVC"        && "'$os'" != "MSVC")              { next; }
+		if ($0 == "DIRECTMUSIC" && "'$with_direct_music'" != "1")  { 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_M="`  echo \"$SRCS\" | awk ' { ORS = " " } /\.m$/   { gsub(".m$",   ".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