rubidium@5726: #!/bin/bash
rubidium@5726:
rubidium@5726: # This file generates all project files based on sources.list, so everyone who
rubidium@5726: # can start a bash process, can update the project files.
rubidium@5726:
rubidium@5726: ROOT_DIR="`pwd`/.."
rubidium@5726: if ! [ -e "$ROOT_DIR/source.list" ]
rubidium@5726: then
rubidium@5726: ROOT_DIR="`pwd`"
rubidium@5726: fi
rubidium@5726: if ! [ -e "$ROOT_DIR/source.list" ]
rubidium@5726: then
rubidium@5726: echo "Can't find source.list, needed in order to make this run. Please go to either"
rubidium@5726: echo " the project dir, or the root dir of a clean SVN checkout."
rubidium@5726: exit 1
rubidium@5726: fi
rubidium@5726:
glx@8393: # openttd_vs90.sln is for MSVC 2008
glx@8393: # openttd_vs90.vcproj is for MSVC 2008
glx@8393: # langs_vs90.vcproj is for MSVC 2008
glx@8393: # strgen_vs90.vcproj is for MSVC 2008
glx@8393:
rubidium@5726: # openttd_vs80.sln is for MSVC 2005
rubidium@5726: # openttd_vs80.vcproj is for MSVC 2005
rubidium@5726: # langs_vs80.vcproj is for MSVC 2005
glx@8390: # strgen_vs80.vcproj is for MSVC 2005
rubidium@5726:
rubidium@5726:
rubidium@5726:
rubidium@5726: # First, collect the list of Windows files
rubidium@5726: sdl_config="1"
truelight@7397: png_config="1"
rubidium@5726: os="MSVC"
rubidium@5726: enable_dedicated="0"
rubidium@5726: with_cocoa="0"
rubidium@5726: enable_directmusic="1"
rubidium@7790: with_threads="1"
rubidium@5726: file_prefix="..\\\\src\\\\"
rubidium@5726:
truelight@7432: safety_check() {
truelight@7432: li=""
truelight@7433: for i in `cat $1 | grep -v "#\|ottdres.rc\|win32.cpp\|win32_v.cpp" | xargs -n 1 basename | sort`; do
truelight@7432: if [ "$li" = "$i" ]; then
truelight@7432: echo " !! ERROR !!"
truelight@7432: echo ""
truelight@7432: echo "The filename '$i' is already used in this project."
truelight@7432: echo "Because MSVC uses one single directory for all object files, it"
truelight@7432: echo "cannot handle filenames with the same name inside the same project."
truelight@7432: echo "Please rename either one of the file and try generating again."
truelight@7432: echo ""
truelight@7432: echo " !! ERROR !!"
truelight@7432: exit 1
truelight@7432: fi
truelight@7432: li="$i"
truelight@7432: done
truelight@7432: }
truelight@7432:
rubidium@10232: grep '\.h' "$ROOT_DIR/source.list" | grep -v '../objs/langs/table/strings.h' | sort > tmp.headers.source.list
glx@10342: find "$ROOT_DIR/src" \( -iname "*.h" -or -iname "*.hpp" \) -and -not -ipath "*/.svn/*" | sed "s@$ROOT_DIR/src/@@" | sort > tmp.headers.src
rubidium@10232: if [ -n "`diff tmp.headers.source.list tmp.headers.src`" ]; then
rubidium@10232: echo "The following headers are missing in source.list and not in /src/ or vice versa."
rubidium@10232: diff tmp.headers.source.list tmp.headers.src | grep '[<>]' | sort
rubidium@10232: echo ""
rubidium@10232: fi
rubidium@10232: rm tmp.headers.*
rubidium@10232:
rubidium@5726: load_main_data() {
rubidium@5726: # Read the source.list and process it
glx@5763: RES="`cat $1 | tr '\r' '\n' | awk '
rubidium@5726: /^( *)#end/ { if (deep == skip) { skip -= 1; } deep -= 1; next; }
rubidium@5726: /^( *)#else/ { if (deep == skip) { skip -= 1; } else if (deep - 1 == skip) { skip += 1; } next; }
rubidium@5726: /^( *)#if/ {
rubidium@5726: gsub(" ", "", $0);
rubidium@5726: gsub("^#if", "", $0);
rubidium@5726: gsub("^ ", "", $0);
rubidium@5726:
rubidium@5726: if (deep != skip) { deep += 1; next; }
rubidium@5726:
rubidium@5726: deep += 1;
rubidium@5726:
rubidium@5726: if ($0 == "SDL" && "'$sdl_config'" == "") { next; }
truelight@7397: if ($0 == "PNG" && "'$png_config'" == "") { next; }
rubidium@5726: if ($0 == "OSX" && "'$os'" != "OSX") { next; }
truelight@6371: if ($0 == "OS2" && "'$os'" != "OS2") { next; }
truelight@6371: if ($0 == "PSP" && "'$os'" != "PSP") { next; }
rubidium@5726: if ($0 == "DEDICATED" && "'$enable_dedicated'" != "1") { next; }
rubidium@5726: if ($0 == "COCOA" && "'$with_cocoa'" == "0") { next; }
rubidium@5726: if ($0 == "BEOS" && "'$os'" != "BEOS") { next; }
rubidium@5726: if ($0 == "WIN32" && "'$os'" != "MINGW" &&
rubidium@5726: "'$os'" != "CYGWIN" && "'$os'" != "MSVC" ) { next; }
truelight@6025: if ($0 == "WINCE" && "'$os'" != "WINCE") { next; }
rubidium@5726: if ($0 == "MSVC" && "'$os'" != "MSVC") { next; }
rubidium@5726: if ($0 == "DIRECTMUSIC" && "'$enable_directmusic'" != "1") { next; }
truelight@6371: if ($0 == "LIBTIMIDITY" && "'$libtimidity'" == "" ) { next; }
rubidium@10175: if ($0 == "HAVE_THREAD" && "'$with_threads'" == "0") { next; }
rubidium@5726:
rubidium@5726: skip += 1;
rubidium@5726:
rubidium@5726: next;
rubidium@5726: }
rubidium@5726: /^( *)#/ {
rubidium@5726: if (deep == skip) {
rubidium@5726: gsub(" ", "", $0);
rubidium@5726: gsub("^#", "", $0);
rubidium@5726: gsub("^ ", "", $0);
rubidium@5726:
rubidium@5726: if (first_time != 0) {
rubidium@5726: print " ";
rubidium@5726: } else {
rubidium@5726: first_time = 1;
rubidium@5726: }
rubidium@5726:
rubidium@5726: print " ";
rubidium@5726: }
rubidium@5726:
rubidium@5726: next;
rubidium@5726: }
rubidium@5726: /^$/ { next }
rubidium@5726: {
rubidium@5726: if (deep == skip) {
rubidium@5726: gsub(" ", "", $0);
rubidium@5726: gsub("/", "\\\\", $0);
rubidium@5726: print " ";
rubidium@5726: print " ";
rubidium@5726: }
rubidium@5726: }
rubidium@5726: END { print " "; }
glx@5763: '`"
rubidium@5726:
rubidium@5726: eval "$2=\"\$RES\""
rubidium@5726: }
rubidium@5726:
rubidium@5726: load_lang_data() {
rubidium@5726: RES=""
rubidium@5726: for i in `ls $1`
rubidium@5726: do
rubidium@5726: i=`basename $i | sed s/.txt$//g`
rubidium@5726: RES="$RES
rubidium@5726:
rubidium@5726:
rubidium@5726:
rubidium@5726:
rubidium@5726: "
rubidium@5726: done
rubidium@5726:
rubidium@5726: eval "$2=\"\$RES\""
rubidium@5726: }
rubidium@5726:
rubidium@5726: generate() {
rubidium@5726: echo "Generating $2..."
rubidium@5726: # Everything above the !!FILES!! marker
glx@6503: cat "$ROOT_DIR/projects/$2".in | tr '\r' '\n' | awk '
glx@5763: /^$/ { next }
rubidium@5726: /!!FILES!!/ { stop = 1; }
rubidium@5726: {
rubidium@5726: if (stop == 0) { print $0 }
rubidium@5726: }
glx@6503: ' > "$ROOT_DIR/projects/$2"
rubidium@5726:
rubidium@8905: echo "$1" >> "$ROOT_DIR/projects/$2"
rubidium@5726:
rubidium@5726: # Everything below the !!FILES!! marker
glx@6503: cat "$ROOT_DIR/projects/$2".in | tr '\r' '\n' | awk '
rubidium@5726: BEGIN { stop = 1; }
glx@5763: /^$/ { next }
rubidium@5726: /!!FILES!!/ { stop = 2; }
rubidium@5726: {
rubidium@5726: if (stop == 0) { print $0 }
rubidium@5726: if (stop == 2) { stop = 0 }
rubidium@5726: }
glx@6503: ' >> "$ROOT_DIR/projects/$2"
rubidium@5726: }
rubidium@5726:
truelight@7432: safety_check "$ROOT_DIR/source.list"
truelight@7432:
rubidium@5726: load_main_data "$ROOT_DIR/source.list" openttd
rubidium@5726: load_lang_data "$ROOT_DIR/src/lang/*.txt" lang
rubidium@5726:
rubidium@8905: generate "$openttd" "openttd_vs80.vcproj"
rubidium@8905: generate "$openttd" "openttd_vs90.vcproj"
rubidium@8905: generate "$lang" "langs_vs80.vcproj"
rubidium@8905: generate "$lang" "langs_vs90.vcproj"