view projects/generate @ 6097:0a7a812e54ea draft

(svn r8832) -Change: rewrite the solution file generator a little so it makes project files that look more like the ones generated by respectively MSVC2003 and MSVC2005. For some reason the internal formatting of the XML between MSVC2003 and MSVC2005 differs, so adding a file in MSVC2005 would result in basically adding the entire openttd_vs80.vcproj to the diff.
author rubidium <rubidium@openttd.org>
date Wed, 21 Feb 2007 17:59:34 +0000
parents 5b541e0c8c93
children ed54dc50aeaf
line wrap: on
line source

#!/bin/bash

# This file generates all project files based on sources.list, so everyone who
#  can start a bash process, can update the project files.

ROOT_DIR="`pwd`/.."
if ! [ -e "$ROOT_DIR/source.list" ]
then
	ROOT_DIR="`pwd`"
fi
if ! [ -e "$ROOT_DIR/source.list" ]
then
	echo "Can't find source.list, needed in order to make this run. Please go to either"
	echo " the project dir, or the root dir of a clean SVN checkout."
	exit 1
fi

# openttd_vs80.sln    is for MSVC 2005
# openttd_vs80.vcproj is for MSVC 2005
# langs_vs80.vcproj   is for MSVC 2005
# strgen_vs80.vcprojc is vor MSVC 2005

# openttd.sln         is for MSVC 2003
# openttd.vcproj      is for MSVC 2003
# langs.vcproj        is for MSVC 2003
# strgen.vcproj       is for MSVC 2003

# openttd.tgt         is for WatCom



# First, collect the list of Windows files
sdl_config="1"
os="MSVC"
enable_dedicated="0"
with_cocoa="0"
enable_directmusic="1"
file_prefix="..\\\\src\\\\"

load_main_data() {
	# Read the source.list and process it
	RES="`cat $1 | 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);
			gsub("^ ", "", $0);

			if (deep != skip) { deep += 1; next; }

			deep += 1;

			if ($0 == "SDL"         && "'$sdl_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 == "WINCE"       && "'$os'" != "WINCE")             { next; }
			if ($0 == "MSVC"        && "'$os'" != "MSVC")              { next; }
			if ($0 == "DIRECTMUSIC" && "'$enable_directmusic'" != "1") { next; }
			if ($0 == "LIBTIMIDITY" && "'$libtimidity'" == "" )        { next; }

			skip += 1;

			next;
		}
		/^(	*)#/ {
			if (deep == skip) {
				gsub("	", "", $0);
				gsub("^#", "", $0);
				gsub("^ ", "", $0);

				if (first_time != 0) {
					print "		</Filter>";
				} else {
					first_time = 1;
				}

				print "		<Filter";
				print "			Name=\\""$0"\\"";
				print "			Filter=\\"\\">";
			}

			next;
		}
		/^$/ { next }
		{
			if (deep == skip) {
				gsub("	", "", $0);
				gsub("/", "\\\\", $0);
				print "			<File";
				print "				RelativePath=\\".\\\\'$file_prefix'"$0"\\">";
				print "			</File>";
			}
		}
		END { print "		</Filter>"; }
	'`"

	eval "$2=\"\$RES\""
}

load_lang_data() {
	RES=""
	for i in `ls $1`
	do
		i=`basename $i | sed s/.txt$//g`
		RES="$RES
		<File
			RelativePath=\"..\\src\\lang\\"$i".txt\">
			<FileConfiguration
				Name=\"Debug|Win32\">
				<Tool
					Name=\"VCCustomBuildTool\"
					Description=\"Generating "$i" language file\"
					CommandLine=\"..\\objs\\strgen\\strgen.exe -s ..\\src\\lang -d ..\\bin\\lang &quot;\$(InputPath)&quot;&#x0D;&#x0A;\"
					AdditionalDependencies=\"\"
					Outputs=\"..\\bin\\lang\\"$i".lng\"/>
			</FileConfiguration>
		</File>"
	done

	eval "$2=\"\$RES\""
}

generate() {
	echo "Generating $2..."
	# Everything above the !!FILES!! marker
	RES="`cat \"$ROOT_DIR/projects/$2\".in | tr '\r' '\n' | awk '
		/^$/ { next }
		/!!FILES!!/ { stop = 1; }
		{
			if (stop == 0) { print $0 }
		}
	' > \"$ROOT_DIR/projects/$2\"`"

	# The files-list
	if [ "$3" = "msvc2003" ]; then
		echo "$1" | sed 's@\&#x0D;\&#x0A;@\n@' >> "$ROOT_DIR/projects/$2"
	else
		echo "$1" | sed '
			s@Filter="">@>@;
			s@^\([	]*\)\([^	<].*[^/]\)>$@\1\2\n\1>@g;
			s@^	\([	]*\)\([^	<].*\)/>$@	\1\2\n\1/>@g;
		' >> "$ROOT_DIR/projects/$2"
	fi

	# Everything below the !!FILES!! marker
	RES="`cat \"$ROOT_DIR/projects/$2\".in | tr '\r' '\n' | awk '
		BEGIN { stop = 1; }
		/^$/ { next }
		/!!FILES!!/ { stop = 2; }
		{
			if (stop == 0) { print $0 }
			if (stop == 2) { stop = 0 }
		}
	' >> \"$ROOT_DIR/projects/$2\"`"
}

load_main_data "$ROOT_DIR/source.list" openttd
load_lang_data "$ROOT_DIR/src/lang/*.txt" lang

generate "$openttd" "openttd.vcproj"      "msvc2003"
generate "$openttd" "openttd_vs80.vcproj" "msvc2005"
generate "$lang" "langs.vcproj"           "msvc2003"
generate "$lang" "langs_vs80.vcproj"      "msvc2005"