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