author | truebrain |
Fri, 13 Jun 2008 19:57:25 +0000 | |
branch | noai |
changeset 10957 | 7a140b4cd91d |
parent 10355 | ee4b5f7a5bf2 |
permissions | -rwxr-xr-x |
9732 | 1 |
Option Explicit |
2 |
||
3 |
Dim FSO |
|
4 |
Set FSO = CreateObject("Scripting.FileSystemObject") |
|
5 |
||
6 |
' openttd_vs90.sln is for MSVC 2008 |
|
7 |
' openttd_vs90.vcproj is for MSVC 2008 |
|
8 |
' langs_vs90.vcproj is for MSVC 2008 |
|
9 |
' strgen_vs90.vcproj is for MSVC 2008 |
|
10 |
||
11 |
' openttd_vs80.sln is for MSVC 2005 |
|
12 |
' openttd_vs80.vcproj is for MSVC 2005 |
|
13 |
' langs_vs80.vcproj is for MSVC 2005 |
|
14 |
' strgen_vs80.vcproj is for MSVC 2005 |
|
15 |
||
16 |
Sub safety_check(filename) |
|
17 |
Dim file, line, regexp, list |
|
18 |
||
19 |
' Define regexp |
|
20 |
Set regexp = New RegExp |
|
21 |
regexp.Pattern = "#|ottdres.rc|win32.cpp|win32_v.cpp" |
|
22 |
regexp.Global = True |
|
23 |
||
24 |
' We use a dictionary to check duplicates |
|
25 |
Set list = CreateObject("Scripting.Dictionary") |
|
26 |
||
27 |
Set file = FSO.OpenTextFile(filename, 1, 0, 0) |
|
28 |
While Not file.AtEndOfStream |
|
29 |
line = Replace(file.ReadLine, Chr(9), "") ' Remove tabs |
|
30 |
If Len(line) > 0 And Not regexp.Test(line) Then |
|
31 |
line = FSO.GetFileName(line) |
|
32 |
if list.Exists(line) Then |
|
33 |
WScript.Echo " !! ERROR !!" _ |
|
34 |
& vbCrLf & "" _ |
|
35 |
& vbCrLf & "The filename '" & line & "' is already used in this project." _ |
|
36 |
& vbCrLf & "Because MSVC uses one single directory for all object files, it" _ |
|
37 |
& vbCrLf & "cannot handle filenames with the same name inside the same project." _ |
|
38 |
& vbCrLf & "Please rename either one of the file and try generating again." _ |
|
39 |
& vbCrLf & "" _ |
|
40 |
& vbCrLf & " !! ERROR !!" |
|
41 |
WScript.Quit(1) |
|
42 |
End If |
|
43 |
list.Add line, line |
|
44 |
End If |
|
45 |
Wend |
|
46 |
file.Close |
|
47 |
End Sub |
|
48 |
||
10249
58810805030e
(svn r12781) [NoAI] -Sync: with trunk r12711:12780.
rubidium
parents:
9859
diff
changeset
|
49 |
Sub get_files(srcdir, dir, list) |
58810805030e
(svn r12781) [NoAI] -Sync: with trunk r12711:12780.
rubidium
parents:
9859
diff
changeset
|
50 |
Dim file, filename |
58810805030e
(svn r12781) [NoAI] -Sync: with trunk r12711:12780.
rubidium
parents:
9859
diff
changeset
|
51 |
Dim rekeep, reskip |
58810805030e
(svn r12781) [NoAI] -Sync: with trunk r12711:12780.
rubidium
parents:
9859
diff
changeset
|
52 |
|
58810805030e
(svn r12781) [NoAI] -Sync: with trunk r12711:12780.
rubidium
parents:
9859
diff
changeset
|
53 |
' pattern for files to keep |
58810805030e
(svn r12781) [NoAI] -Sync: with trunk r12711:12780.
rubidium
parents:
9859
diff
changeset
|
54 |
Set rekeep = New RegExp |
10355
ee4b5f7a5bf2
(svn r12896) [NoAI] -Sync: with trunk r12824:r12895.
rubidium
parents:
10249
diff
changeset
|
55 |
rekeep.Pattern = "\.h(pp)?$" |
10249
58810805030e
(svn r12781) [NoAI] -Sync: with trunk r12711:12780.
rubidium
parents:
9859
diff
changeset
|
56 |
rekeep.Global = True |
58810805030e
(svn r12781) [NoAI] -Sync: with trunk r12711:12780.
rubidium
parents:
9859
diff
changeset
|
57 |
|
58810805030e
(svn r12781) [NoAI] -Sync: with trunk r12711:12780.
rubidium
parents:
9859
diff
changeset
|
58 |
' pattern for files to exclude |
58810805030e
(svn r12781) [NoAI] -Sync: with trunk r12711:12780.
rubidium
parents:
9859
diff
changeset
|
59 |
Set reskip = New RegExp |
10355
ee4b5f7a5bf2
(svn r12896) [NoAI] -Sync: with trunk r12824:r12895.
rubidium
parents:
10249
diff
changeset
|
60 |
reskip.Pattern = "\.svn" |
10249
58810805030e
(svn r12781) [NoAI] -Sync: with trunk r12711:12780.
rubidium
parents:
9859
diff
changeset
|
61 |
reskip.Global = True |
58810805030e
(svn r12781) [NoAI] -Sync: with trunk r12711:12780.
rubidium
parents:
9859
diff
changeset
|
62 |
|
58810805030e
(svn r12781) [NoAI] -Sync: with trunk r12711:12780.
rubidium
parents:
9859
diff
changeset
|
63 |
For Each file in dir.Files |
58810805030e
(svn r12781) [NoAI] -Sync: with trunk r12711:12780.
rubidium
parents:
9859
diff
changeset
|
64 |
filename = Replace(file.path, srcdir, "") ' Remove */src/ |
58810805030e
(svn r12781) [NoAI] -Sync: with trunk r12711:12780.
rubidium
parents:
9859
diff
changeset
|
65 |
filename = Replace(filename, "\", "/") ' Replace separators |
58810805030e
(svn r12781) [NoAI] -Sync: with trunk r12711:12780.
rubidium
parents:
9859
diff
changeset
|
66 |
If rekeep.Test(filename) And Not reskip.Test(filename) Then |
58810805030e
(svn r12781) [NoAI] -Sync: with trunk r12711:12780.
rubidium
parents:
9859
diff
changeset
|
67 |
list.Add filename, filename |
58810805030e
(svn r12781) [NoAI] -Sync: with trunk r12711:12780.
rubidium
parents:
9859
diff
changeset
|
68 |
End If |
58810805030e
(svn r12781) [NoAI] -Sync: with trunk r12711:12780.
rubidium
parents:
9859
diff
changeset
|
69 |
Next |
58810805030e
(svn r12781) [NoAI] -Sync: with trunk r12711:12780.
rubidium
parents:
9859
diff
changeset
|
70 |
End Sub |
58810805030e
(svn r12781) [NoAI] -Sync: with trunk r12711:12780.
rubidium
parents:
9859
diff
changeset
|
71 |
|
58810805030e
(svn r12781) [NoAI] -Sync: with trunk r12711:12780.
rubidium
parents:
9859
diff
changeset
|
72 |
Sub get_dir_files(srcdir, dir, list) |
58810805030e
(svn r12781) [NoAI] -Sync: with trunk r12711:12780.
rubidium
parents:
9859
diff
changeset
|
73 |
Dim folder |
58810805030e
(svn r12781) [NoAI] -Sync: with trunk r12711:12780.
rubidium
parents:
9859
diff
changeset
|
74 |
' Get files |
58810805030e
(svn r12781) [NoAI] -Sync: with trunk r12711:12780.
rubidium
parents:
9859
diff
changeset
|
75 |
get_files srcdir, dir, list |
58810805030e
(svn r12781) [NoAI] -Sync: with trunk r12711:12780.
rubidium
parents:
9859
diff
changeset
|
76 |
|
58810805030e
(svn r12781) [NoAI] -Sync: with trunk r12711:12780.
rubidium
parents:
9859
diff
changeset
|
77 |
' Recurse in subfolders |
58810805030e
(svn r12781) [NoAI] -Sync: with trunk r12711:12780.
rubidium
parents:
9859
diff
changeset
|
78 |
For Each folder in dir.SubFolders |
58810805030e
(svn r12781) [NoAI] -Sync: with trunk r12711:12780.
rubidium
parents:
9859
diff
changeset
|
79 |
get_dir_files srcdir, folder, list |
58810805030e
(svn r12781) [NoAI] -Sync: with trunk r12711:12780.
rubidium
parents:
9859
diff
changeset
|
80 |
Next |
58810805030e
(svn r12781) [NoAI] -Sync: with trunk r12711:12780.
rubidium
parents:
9859
diff
changeset
|
81 |
End Sub |
58810805030e
(svn r12781) [NoAI] -Sync: with trunk r12711:12780.
rubidium
parents:
9859
diff
changeset
|
82 |
|
58810805030e
(svn r12781) [NoAI] -Sync: with trunk r12711:12780.
rubidium
parents:
9859
diff
changeset
|
83 |
Sub headers_check(filename, dir) |
58810805030e
(svn r12781) [NoAI] -Sync: with trunk r12711:12780.
rubidium
parents:
9859
diff
changeset
|
84 |
Dim source_list_headers, src_dir_headers, regexp, line, file, str |
58810805030e
(svn r12781) [NoAI] -Sync: with trunk r12711:12780.
rubidium
parents:
9859
diff
changeset
|
85 |
|
58810805030e
(svn r12781) [NoAI] -Sync: with trunk r12711:12780.
rubidium
parents:
9859
diff
changeset
|
86 |
' Define regexp for source.list parsing |
58810805030e
(svn r12781) [NoAI] -Sync: with trunk r12711:12780.
rubidium
parents:
9859
diff
changeset
|
87 |
Set regexp = New RegExp |
58810805030e
(svn r12781) [NoAI] -Sync: with trunk r12711:12780.
rubidium
parents:
9859
diff
changeset
|
88 |
regexp.Pattern = "\.h" |
58810805030e
(svn r12781) [NoAI] -Sync: with trunk r12711:12780.
rubidium
parents:
9859
diff
changeset
|
89 |
regexp.Global = True |
58810805030e
(svn r12781) [NoAI] -Sync: with trunk r12711:12780.
rubidium
parents:
9859
diff
changeset
|
90 |
|
58810805030e
(svn r12781) [NoAI] -Sync: with trunk r12711:12780.
rubidium
parents:
9859
diff
changeset
|
91 |
' Parse source.list and store headers in a dictionary |
58810805030e
(svn r12781) [NoAI] -Sync: with trunk r12711:12780.
rubidium
parents:
9859
diff
changeset
|
92 |
Set source_list_headers = CreateObject("Scripting.Dictionary") |
58810805030e
(svn r12781) [NoAI] -Sync: with trunk r12711:12780.
rubidium
parents:
9859
diff
changeset
|
93 |
Set file = FSO.OpenTextFile(filename, 1, 0, 0) |
58810805030e
(svn r12781) [NoAI] -Sync: with trunk r12711:12780.
rubidium
parents:
9859
diff
changeset
|
94 |
While Not file.AtEndOfStream |
58810805030e
(svn r12781) [NoAI] -Sync: with trunk r12711:12780.
rubidium
parents:
9859
diff
changeset
|
95 |
line = Replace(file.ReadLine, Chr(9), "") ' Remove tabs |
58810805030e
(svn r12781) [NoAI] -Sync: with trunk r12711:12780.
rubidium
parents:
9859
diff
changeset
|
96 |
If Len(line) > 0 And regexp.Test(line) And line <> "../objs/langs/table/strings.h" Then |
58810805030e
(svn r12781) [NoAI] -Sync: with trunk r12711:12780.
rubidium
parents:
9859
diff
changeset
|
97 |
source_list_headers.Add line, line |
58810805030e
(svn r12781) [NoAI] -Sync: with trunk r12711:12780.
rubidium
parents:
9859
diff
changeset
|
98 |
End If |
58810805030e
(svn r12781) [NoAI] -Sync: with trunk r12711:12780.
rubidium
parents:
9859
diff
changeset
|
99 |
Wend |
58810805030e
(svn r12781) [NoAI] -Sync: with trunk r12711:12780.
rubidium
parents:
9859
diff
changeset
|
100 |
file.Close() |
58810805030e
(svn r12781) [NoAI] -Sync: with trunk r12711:12780.
rubidium
parents:
9859
diff
changeset
|
101 |
|
58810805030e
(svn r12781) [NoAI] -Sync: with trunk r12711:12780.
rubidium
parents:
9859
diff
changeset
|
102 |
' Get header files in /src/ |
58810805030e
(svn r12781) [NoAI] -Sync: with trunk r12711:12780.
rubidium
parents:
9859
diff
changeset
|
103 |
Set src_dir_headers = CreateObject("Scripting.Dictionary") |
58810805030e
(svn r12781) [NoAI] -Sync: with trunk r12711:12780.
rubidium
parents:
9859
diff
changeset
|
104 |
get_dir_files dir, FSO.GetFolder(dir), src_dir_headers |
58810805030e
(svn r12781) [NoAI] -Sync: with trunk r12711:12780.
rubidium
parents:
9859
diff
changeset
|
105 |
|
58810805030e
(svn r12781) [NoAI] -Sync: with trunk r12711:12780.
rubidium
parents:
9859
diff
changeset
|
106 |
' Finding files in source.list but not in /src/ |
58810805030e
(svn r12781) [NoAI] -Sync: with trunk r12711:12780.
rubidium
parents:
9859
diff
changeset
|
107 |
For Each line In source_list_headers |
58810805030e
(svn r12781) [NoAI] -Sync: with trunk r12711:12780.
rubidium
parents:
9859
diff
changeset
|
108 |
If Not src_dir_headers.Exists(line) Then |
58810805030e
(svn r12781) [NoAI] -Sync: with trunk r12711:12780.
rubidium
parents:
9859
diff
changeset
|
109 |
str = str & "< " & line & vbCrLf |
58810805030e
(svn r12781) [NoAI] -Sync: with trunk r12711:12780.
rubidium
parents:
9859
diff
changeset
|
110 |
End If |
58810805030e
(svn r12781) [NoAI] -Sync: with trunk r12711:12780.
rubidium
parents:
9859
diff
changeset
|
111 |
Next |
58810805030e
(svn r12781) [NoAI] -Sync: with trunk r12711:12780.
rubidium
parents:
9859
diff
changeset
|
112 |
|
58810805030e
(svn r12781) [NoAI] -Sync: with trunk r12711:12780.
rubidium
parents:
9859
diff
changeset
|
113 |
' Finding files in /src/ but not in source.list |
58810805030e
(svn r12781) [NoAI] -Sync: with trunk r12711:12780.
rubidium
parents:
9859
diff
changeset
|
114 |
For Each line In src_dir_headers |
58810805030e
(svn r12781) [NoAI] -Sync: with trunk r12711:12780.
rubidium
parents:
9859
diff
changeset
|
115 |
If Not source_list_headers.Exists(line) Then |
58810805030e
(svn r12781) [NoAI] -Sync: with trunk r12711:12780.
rubidium
parents:
9859
diff
changeset
|
116 |
str = str & "> " & line & vbCrLf |
58810805030e
(svn r12781) [NoAI] -Sync: with trunk r12711:12780.
rubidium
parents:
9859
diff
changeset
|
117 |
End If |
58810805030e
(svn r12781) [NoAI] -Sync: with trunk r12711:12780.
rubidium
parents:
9859
diff
changeset
|
118 |
Next |
58810805030e
(svn r12781) [NoAI] -Sync: with trunk r12711:12780.
rubidium
parents:
9859
diff
changeset
|
119 |
|
58810805030e
(svn r12781) [NoAI] -Sync: with trunk r12711:12780.
rubidium
parents:
9859
diff
changeset
|
120 |
' Display the missing files if any |
58810805030e
(svn r12781) [NoAI] -Sync: with trunk r12711:12780.
rubidium
parents:
9859
diff
changeset
|
121 |
If str <> "" Then |
58810805030e
(svn r12781) [NoAI] -Sync: with trunk r12711:12780.
rubidium
parents:
9859
diff
changeset
|
122 |
str = "The following headers are missing in source.list and not in /src/ or vice versa." _ |
58810805030e
(svn r12781) [NoAI] -Sync: with trunk r12711:12780.
rubidium
parents:
9859
diff
changeset
|
123 |
& vbCrLf & str |
58810805030e
(svn r12781) [NoAI] -Sync: with trunk r12711:12780.
rubidium
parents:
9859
diff
changeset
|
124 |
WScript.Echo str |
58810805030e
(svn r12781) [NoAI] -Sync: with trunk r12711:12780.
rubidium
parents:
9859
diff
changeset
|
125 |
End If |
58810805030e
(svn r12781) [NoAI] -Sync: with trunk r12711:12780.
rubidium
parents:
9859
diff
changeset
|
126 |
End Sub |
58810805030e
(svn r12781) [NoAI] -Sync: with trunk r12711:12780.
rubidium
parents:
9859
diff
changeset
|
127 |
|
9732 | 128 |
Function load_main_data(filename) |
129 |
Dim res, file, line, deep, skip, first_time |
|
130 |
res = "" |
|
131 |
' Read the source.list and process it |
|
132 |
Set file = FSO.OpenTextFile(filename, 1, 0, 0) |
|
133 |
While Not file.AtEndOfStream |
|
134 |
line = Replace(file.ReadLine, Chr(9), "") ' Remove tabs |
|
135 |
If Len(line) > 0 Then |
|
136 |
Select Case Split(line, " ")(0) |
|
137 |
Case "#end" |
|
138 |
If deep = skip Then skip = skip - 1 |
|
139 |
deep = deep - 1 |
|
140 |
Case "#else" |
|
141 |
If deep = skip Then |
|
142 |
skip = skip - 1 |
|
143 |
ElseIf deep - 1 = skip Then |
|
144 |
skip = skip + 1 |
|
145 |
End If |
|
146 |
Case "#if" |
|
147 |
line = Replace(line, "#if ", "") |
|
148 |
If deep = skip And ( _ |
|
149 |
line = "SDL" Or _ |
|
150 |
line = "PNG" Or _ |
|
151 |
line = "WIN32" Or _ |
|
152 |
line = "MSVC" Or _ |
|
9800 | 153 |
line = "DIRECTMUSIC" Or _ |
9859
81621c6ba0e9
(svn r12538) [NoAI] -Codechange: introducing fiber.hpp, a class to have fibers in your application via either Windows Fibers, or via thread.h
truebrain
parents:
9800
diff
changeset
|
154 |
line = "HAVE_THREAD" _ |
9732 | 155 |
) Then skip = skip + 1 |
156 |
deep = deep + 1 |
|
157 |
Case "#" |
|
158 |
if deep = skip Then |
|
159 |
line = Replace(line, "# ", "") |
|
160 |
if first_time <> 0 Then |
|
161 |
res = res & " </Filter>" & vbCrLf |
|
162 |
Else |
|
163 |
first_time = 1 |
|
164 |
End If |
|
165 |
res = res & _ |
|
166 |
" <Filter" & vbCrLf & _ |
|
167 |
" Name=" & Chr(34) & line & Chr(34) & vbCrLf & _ |
|
168 |
" >" & vbCrLf |
|
169 |
End If |
|
170 |
Case Else |
|
171 |
If deep = skip Then |
|
172 |
line = Replace(line, "/" ,"\") |
|
173 |
res = res & _ |
|
174 |
" <File" & vbCrLf & _ |
|
175 |
" RelativePath=" & Chr(34) & ".\..\src\" & line & Chr(34) & vbCrLf & _ |
|
176 |
" >" & vbCrLf & _ |
|
177 |
" </File>" & vbCrLf |
|
178 |
End If |
|
179 |
End Select |
|
180 |
End If |
|
181 |
Wend |
|
182 |
res = res & " </Filter>" |
|
183 |
file.Close() |
|
184 |
load_main_data = res |
|
185 |
End Function |
|
186 |
||
187 |
Function load_lang_data(dir) |
|
188 |
Dim res, folder, file |
|
189 |
res = "" |
|
190 |
Set folder = FSO.GetFolder(dir) |
|
191 |
For Each file In folder.Files |
|
192 |
file = FSO.GetFileName(file) |
|
193 |
If FSO.GetExtensionName(file) = "txt" Then |
|
194 |
file = Left(file, Len(file) - 4) |
|
195 |
res = res _ |
|
196 |
& vbCrLf & " <File" _ |
|
197 |
& vbCrLf & " RelativePath=" & Chr(34) & "..\src\lang\" & file & ".txt" & Chr(34) _ |
|
198 |
& vbCrLf & " >" _ |
|
199 |
& vbCrLf & " <FileConfiguration" _ |
|
200 |
& vbCrLf & " Name=" & Chr(34) & "Debug|Win32" & Chr(34) _ |
|
201 |
& vbCrLf & " >" _ |
|
202 |
& vbCrLf & " <Tool" _ |
|
203 |
& vbCrLf & " Name=" & Chr(34) & "VCCustomBuildTool" & Chr(34) _ |
|
204 |
& vbCrLf & " Description=" & Chr(34) & "Generating " & file & " language file" & Chr(34) _ |
|
205 |
& vbCrLf & " CommandLine=" & Chr(34) & "..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "$(InputPath)"
" & Chr(34) _ |
|
206 |
& vbCrLf & " AdditionalDependencies=" & Chr(34) & Chr(34) _ |
|
207 |
& vbCrLf & " Outputs=" & Chr(34) & "..\bin\lang\" & file & ".lng" & Chr(34) _ |
|
208 |
& vbCrLf & " />" _ |
|
209 |
& vbCrLf & " </FileConfiguration>" _ |
|
210 |
& vbCrLf & " </File>" |
|
211 |
End If |
|
212 |
Next |
|
213 |
load_lang_data = res |
|
214 |
End Function |
|
215 |
||
216 |
Sub generate(data, dest) |
|
217 |
Dim srcfile, destfile, line |
|
218 |
WScript.Echo "Generating " & FSO.GetFileName(dest) & "..." |
|
219 |
Set srcfile = FSO.OpenTextFile(dest & ".in", 1, 0, 0) |
|
220 |
Set destfile = FSO.CreateTextFile(dest, -1, 0) |
|
221 |
||
222 |
' Everything above the !!FILES!! marker |
|
223 |
line = srcfile.ReadLine() |
|
224 |
While line <> "!!FILES!!" |
|
225 |
If len(line) > 0 Then destfile.WriteLine(line) |
|
226 |
line = srcfile.ReadLine() |
|
227 |
Wend |
|
228 |
||
229 |
' Our generated content |
|
230 |
destfile.WriteLine(data) |
|
231 |
||
232 |
' Everything below the !!FILES!! marker |
|
233 |
While Not srcfile.AtEndOfStream |
|
234 |
line = srcfile.ReadLine() |
|
235 |
If len(line) > 0 Then destfile.WriteLine(line) |
|
236 |
Wend |
|
237 |
srcfile.Close() |
|
238 |
destfile.Close() |
|
239 |
End Sub |
|
240 |
||
241 |
Dim ROOT_DIR |
|
242 |
ROOT_DIR = FSO.GetFolder("..").Path |
|
243 |
If Not FSO.FileExists(ROOT_DIR & "/source.list") Then |
|
244 |
ROOT_DIR = FSO.GetFolder(".").Path |
|
245 |
End If |
|
246 |
If Not FSO.FileExists(ROOT_DIR & "/source.list") Then |
|
247 |
WScript.Echo "Can't find source.list, needed in order to make this run." _ |
|
248 |
& vbCrLf & "Please go to either the project dir, or the root dir of a clean SVN checkout." |
|
249 |
WScript.Quit(1) |
|
250 |
End If |
|
251 |
||
252 |
safety_check ROOT_DIR & "/source.list" |
|
10249
58810805030e
(svn r12781) [NoAI] -Sync: with trunk r12711:12780.
rubidium
parents:
9859
diff
changeset
|
253 |
headers_check ROOT_DIR & "/source.list", ROOT_DIR & "\src\" ' Backslashes needed for DoFiles |
9732 | 254 |
|
255 |
Dim openttd |
|
256 |
openttd = load_main_data(ROOT_DIR &"/source.list") |
|
257 |
generate openttd, ROOT_DIR & "/projects/openttd_vs80.vcproj" |
|
258 |
generate openttd, ROOT_DIR & "/projects/openttd_vs90.vcproj" |
|
259 |
||
260 |
Dim lang |
|
261 |
lang = load_lang_data(ROOT_DIR & "/src/lang") |
|
262 |
generate lang, ROOT_DIR & "/projects/langs_vs80.vcproj" |
|
263 |
generate lang, ROOT_DIR & "/projects/langs_vs90.vcproj" |