diff options
-rw-r--r-- | projects/generate.vbs | 182 |
1 files changed, 182 insertions, 0 deletions
diff --git a/projects/generate.vbs b/projects/generate.vbs new file mode 100644 index 000000000..cab3b84ed --- /dev/null +++ b/projects/generate.vbs @@ -0,0 +1,182 @@ +Option Explicit + +Dim FSO +Set FSO = CreateObject("Scripting.FileSystemObject") + +' openttd_vs90.sln is for MSVC 2008 +' openttd_vs90.vcproj is for MSVC 2008 +' langs_vs90.vcproj is for MSVC 2008 +' strgen_vs90.vcproj is for MSVC 2008 + +' openttd_vs80.sln is for MSVC 2005 +' openttd_vs80.vcproj is for MSVC 2005 +' langs_vs80.vcproj is for MSVC 2005 +' strgen_vs80.vcproj is for MSVC 2005 + +Sub safety_check(filename) + Dim file, line, regexp, list + + ' Define regexp + Set regexp = New RegExp + regexp.Pattern = "#|ottdres.rc|win32.cpp|win32_v.cpp" + regexp.Global = True + + ' We use a dictionary to check duplicates + Set list = CreateObject("Scripting.Dictionary") + + Set file = FSO.OpenTextFile(filename, 1, 0, 0) + While Not file.AtEndOfStream + line = Replace(file.ReadLine, Chr(9), "") ' Remove tabs + If Len(line) > 0 And Not regexp.Test(line) Then + line = FSO.GetFileName(line) + if list.Exists(line) Then + WScript.Echo " !! ERROR !!" _ + & vbCrLf & "" _ + & vbCrLf & "The filename '" & line & "' is already used in this project." _ + & vbCrLf & "Because MSVC uses one single directory for all object files, it" _ + & vbCrLf & "cannot handle filenames with the same name inside the same project." _ + & vbCrLf & "Please rename either one of the file and try generating again." _ + & vbCrLf & "" _ + & vbCrLf & " !! ERROR !!" + WScript.Quit(1) + End If + list.Add line, line + End If + Wend + file.Close +End Sub + +Function load_main_data(filename) + Dim res, file, line, deep, skip, first_time + res = "" + ' Read the source.list and process it + Set file = FSO.OpenTextFile(filename, 1, 0, 0) + While Not file.AtEndOfStream + line = Replace(file.ReadLine, Chr(9), "") ' Remove tabs + If Len(line) > 0 Then + Select Case Split(line, " ")(0) + Case "#end" + If deep = skip Then skip = skip - 1 + deep = deep - 1 + Case "#else" + If deep = skip Then + skip = skip - 1 + ElseIf deep - 1 = skip Then + skip = skip + 1 + End If + Case "#if" + line = Replace(line, "#if ", "") + If deep = skip And ( _ + line = "SDL" Or _ + line = "PNG" Or _ + line = "WIN32" Or _ + line = "MSVC" Or _ + line = "DIRECTMUSIC" _ + ) Then skip = skip + 1 + deep = deep + 1 + Case "#" + if deep = skip Then + line = Replace(line, "# ", "") + if first_time <> 0 Then + res = res & " </Filter>" & vbCrLf + Else + first_time = 1 + End If + res = res & _ + " <Filter" & vbCrLf & _ + " Name=" & Chr(34) & line & Chr(34) & vbCrLf & _ + " >" & vbCrLf + End If + Case Else + If deep = skip Then + line = Replace(line, "/" ,"\") + res = res & _ + " <File" & vbCrLf & _ + " RelativePath=" & Chr(34) & ".\..\src\" & line & Chr(34) & vbCrLf & _ + " >" & vbCrLf & _ + " </File>" & vbCrLf + End If + End Select + End If + Wend + res = res & " </Filter>" + file.Close() + load_main_data = res +End Function + +Function load_lang_data(dir) + Dim res, folder, file + res = "" + Set folder = FSO.GetFolder(dir) + For Each file In folder.Files + file = FSO.GetFileName(file) + If FSO.GetExtensionName(file) = "txt" Then + file = Left(file, Len(file) - 4) + res = res _ + & vbCrLf & " <File" _ + & vbCrLf & " RelativePath=" & Chr(34) & "..\src\lang\" & file & ".txt" & Chr(34) _ + & vbCrLf & " >" _ + & vbCrLf & " <FileConfiguration" _ + & vbCrLf & " Name=" & Chr(34) & "Debug|Win32" & Chr(34) _ + & vbCrLf & " >" _ + & vbCrLf & " <Tool" _ + & vbCrLf & " Name=" & Chr(34) & "VCCustomBuildTool" & Chr(34) _ + & vbCrLf & " Description=" & Chr(34) & "Generating " & file & " language file" & Chr(34) _ + & vbCrLf & " CommandLine=" & Chr(34) & "..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "$(InputPath)"
" & Chr(34) _ + & vbCrLf & " AdditionalDependencies=" & Chr(34) & Chr(34) _ + & vbCrLf & " Outputs=" & Chr(34) & "..\bin\lang\" & file & ".lng" & Chr(34) _ + & vbCrLf & " />" _ + & vbCrLf & " </FileConfiguration>" _ + & vbCrLf & " </File>" + End If + Next + load_lang_data = res +End Function + +Sub generate(data, dest) + Dim srcfile, destfile, line + WScript.Echo "Generating " & FSO.GetFileName(dest) & "..." + Set srcfile = FSO.OpenTextFile(dest & ".in", 1, 0, 0) + Set destfile = FSO.CreateTextFile(dest, -1, 0) + + ' Everything above the !!FILES!! marker + line = srcfile.ReadLine() + While line <> "!!FILES!!" + If len(line) > 0 Then destfile.WriteLine(line) + line = srcfile.ReadLine() + Wend + + ' Our generated content + destfile.WriteLine(data) + + ' Everything below the !!FILES!! marker + While Not srcfile.AtEndOfStream + line = srcfile.ReadLine() + If len(line) > 0 Then destfile.WriteLine(line) + Wend + srcfile.Close() + destfile.Close() +End Sub + +Dim ROOT_DIR +ROOT_DIR = FSO.GetFolder("..").Path +If Not FSO.FileExists(ROOT_DIR & "/source.list") Then + ROOT_DIR = FSO.GetFolder(".").Path +End If +If Not FSO.FileExists(ROOT_DIR & "/source.list") Then + WScript.Echo "Can't find source.list, needed in order to make this run." _ + & vbCrLf & "Please go to either the project dir, or the root dir of a clean SVN checkout." + WScript.Quit(1) +End If + +safety_check ROOT_DIR & "/source.list" + +Dim openttd +openttd = load_main_data(ROOT_DIR &"/source.list") +generate openttd, ROOT_DIR & "/projects/openttd_vs80.vcproj" +generate openttd, ROOT_DIR & "/projects/openttd_vs90.vcproj" + +Dim lang +lang = load_lang_data(ROOT_DIR & "/src/lang") +generate lang, ROOT_DIR & "/projects/langs_vs80.vcproj" +generate lang, ROOT_DIR & "/projects/langs_vs90.vcproj" |