Many hyperlinks are disabled.
Use anonymous login
to enable hyperlinks.
Difference From b5ae536a3dfaf394
To 294c29fd211985b6
2013-11-15
| | |
21:01 |
|
check-in: 0adcab7b75 user: mistachkin tags: trunk
|
20:52 |
|
check-in: 294c29fd21 user: mistachkin tags: trunk
|
08:38 |
|
check-in: 5fc3695abf user: mistachkin tags: trunk
|
2013-09-13
| | |
01:38 |
|
check-in: 00b02c1aa6 user: mistachkin tags: trunk
|
00:58 |
|
check-in: 30e2ba0f43 user: mistachkin tags: tkt-f8dbab8baf
|
2013-09-12
| | |
21:30 |
|
check-in: b5ae536a3d user: mistachkin tags: trunk
|
2013-09-10
| | |
06:33 |
|
check-in: e7fa8c655e user: mistachkin tags: trunk
|
| | |
Changes to .fossil-settings/ignore-glob.
1
2
3
4
5
6
7
8
|
1
2
3
4
5
6
7
|
-
|
*.mistachkin.eagle
*.sln
Externals/Eagle/bin/Eagle*.pdb
Externals/Eagle/bin/x64/Spilornis.pdb
Externals/Eagle/bin/x86/Spilornis.pdb
SQLite.Interop/*.vcxproj
SQLite.Interop/*.vcxproj.filters
System.Data.SQLite/*.csproj
|
︙ | | |
Changes to Doc/Extra/dbfactorysupport.html.
︙ | | |
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
|
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
|
-
+
|
<configuration>
<system.data>
<DbProviderFactories>
<remove invariant="System.Data.SQLite"/>
<add name="SQLite Data Provider" invariant="System.Data.SQLite"
description=".Net Framework Data Provider for SQLite"
type="System.Data.SQLite.SQLiteFactory, System.Data.SQLite,
Version=1.0.89.0, Culture=neutral,
Version=1.0.90.0, Culture=neutral,
PublicKeyToken=db937bc2d44ff139"/>
</DbProviderFactories>
</system.data>
</configuration>
</pre>
</div>
<p>
|
︙ | | |
Changes to Doc/Extra/version.html.
︙ | | |
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
|
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
|
-
+
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
|
</td>
</tr>
</table>
</div>
<div id="mainSection">
<div id="mainBody">
<h1 class="heading">Version History</h1>
<p><b>1.0.89.0 - September XX, 2013 <font color="red">(release scheduled)</font></b></p>
<p><b>1.0.90.0 - January XX, 2014 <font color="red">(release scheduled)</font></b></p>
<ul>
<li>Updated to <a href="http://www.sqlite.org/src/info/trunk">SQLite 3.8.1</a>.</li>
<li>Updated to <a href="http://www.sqlite.org/src/info/trunk">SQLite 3.8.2</a>.</li>
<li>Add experimental support for the native regexp extension.</li>
<li>Never create a new connection wrapper in the SQLiteConnection.Shutdown method. <b>** Potentially Incompatible Change **</b></li>
<li>Add experimental GetMemoryStatistics, ReleaseMemory, and Shutdown methods to the SQLiteConnection class.</li>
<li>Add memory leak detection to the test project for the .NET Compact Framework.</li>
<li>Add SQLITE_ENABLE_MEMORY_MANAGEMENT compile-time option to the interop assembly.</li>
<li>Better handling of non-error log messages from the SQLite core library. Pursuant to <a href="http://system.data.sqlite.org/index.html/info/44df10ea90">[44df10ea90]</a>.</li>
</ul>
<p><b>1.0.89.0 - October 28, 2013</b></p>
<ul>
<li>Updated to <a href="http://www.sqlite.org/releaselog/3_8_1.html">SQLite 3.8.1</a>.</li>
<li>Add AutoCommit property to the SQLiteConnection class. Fix for <a href="http://system.data.sqlite.org/index.html/info/9ba9346f75">[9ba9346f75]</a>.</li>
<li>Use declared column sizes for the AnsiStringFixedLength and StringFixedLength mapped database types. Fix for <a href="http://system.data.sqlite.org/index.html/info/3113734605">[3113734605]</a>.</li>
<li>Check the result of sqlite3_column_name function against NULL.</li>
<li>Return false for the SQLiteParameterCollection.IsSynchronized property because it is not thread-safe.</li>
<li>Raise the static SQLiteConnection.Changed event when any SQLiteCommand, SQLiteDataReader, or CriticalHandle derived object instance is created. Fix for <a href="http://system.data.sqlite.org/index.html/info/aba4549801">[aba4549801]</a>.</li>
<li>Add SQLiteCommand.Execute, SQLiteCommand.ExecuteNonQuery, and SQLiteCommand.ExecuteScalar method overloads that take a CommandBehavior parameter.</li>
<li>Revise how the extra object data is passed to the static SQLiteConnection.Changed event. <b>** Potentially Incompatible Change **</b></li>
<li>Make sure the database cannot be changed by a query when the CommandBehavior.SchemaOnly flag is used. Fix for <a href="http://system.data.sqlite.org/index.html/info/f8dbab8baf">[f8dbab8baf]</a>. <b>** Potentially Incompatible Change **</b></li>
<li>Fix bug in <a href="http://sourceforge.net/projects/ndoc3/">NDoc3</a> that was preventing some of the MSDN documentation links from working.</li>
<li>Include the XML documentation files in the NuGet packages. Fix for <a href="http://system.data.sqlite.org/index.html/info/5970d5b0a6">[5970d5b0a6]</a>.</li>
<li>Add InteropVersion, InteropSourceId, ProviderVersion, and ProviderSourceId properties to the SQLiteConnection class.</li>
<li>Add experimental support for interfacing with the authorizer callback in the SQLite core library.</li>
<li>Add experimental support for the native totype extension.</li>
</ul>
<p><b>1.0.88.0 - August 7, 2013</b></p>
<ul>
<li>Various fixes to managed virtual table integration infrastructure.</li>
<li>Implement workaround for an incorrect PROCESSOR_ARCHITECTURE being reported. Fix for <a href="http://system.data.sqlite.org/index.html/info/9ac9862611">[9ac9862611]</a>.</li>
<li>Modify classes that implement the IDisposable pattern to set the disposed flag after their base classes have been disposed.</li>
<li>When automatically registering custom functions, use the executing assembly (i.e. System.Data.SQLite) for reference detection. Fix for <a href="http://system.data.sqlite.org/index.html/info/4e49a58c4c">[4e49a58c4c]</a>.</li>
|
︙ | | |
Changes to Doc/Extra/welcome.html.
︙ | | |
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
|
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
|
-
+
|
<font color="red">
Itanium processor support not currently included.
</font>
</p>
<h1 class="heading">Distributing the Binaries (Compact Framework)</h1>
<p>Both the <b>System.Data.SQLite.DLL </b>and <b>SQLite.Interop.XXX.DLL</b> files
must be deployed on the Compact Framework. The XXX is the build number of
the System.Data.SQLite library (e.g. "089"). The
the System.Data.SQLite library (e.g. "090"). The
<b>SQLite.Interop.XXX.DLL</b> file is a fully native assembly compiled for
the ARM processor, and System.Data.SQLite is the fully-managed Compact
Framework assembly.</p>
<hr />
<div id="footer">
<p>
<a href="mailto:sqlite-users@sqlite.org?subject=SQLite.NET%20Class%20Library%20Documentation%20Feedback:%20Welcome">
|
︙ | | |
Changes to Doc/SQLite.NET.chm.
cannot compute difference between binary files
Changes to Doc/buildChm.tcl.
︙ | | |
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
|
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
|
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
+
+
-
+
-
-
+
+
|
proc readFileAsSubSpec { fileName } {
set data [readFile $fileName]
regsub -all -- {&} $data {\\\&} data
regsub -all -- {\\(\d+)} $data {\\\\\1} data
return $data
}
proc getFileHash { fileName } {
if {[catch {
exec fossil.exe sha1sum [file nativename $fileName]
} result] == 0} then {
return [string trim [lindex [split $result " "] 0]]
}
return ""
}
#
# HACK: Copy our local [fixed] copy of the MSDN documenter assembly into the
# installed location of NDoc3, if necessary. Actually copying the file
# will require elevated administrator privileges; otherwise, it will
# fail. Any errors encountered while copying the file are reported via
# the console; however, they will not halt further processing (i.e. the
# CHM file will probably still get built, but it may contain some links
# to built-in types that are blank).
#
proc copyMsdnDocumenter { sourceDirectory destinationDirectory } {
set fileNameOnly NDoc3.Documenter.Msdn.dll
set sourceFileName [file join $sourceDirectory bin $fileNameOnly]
set destinationFileName [file join $destinationDirectory bin $fileNameOnly]
set sourceFileHash [getFileHash $sourceFileName]
# puts stdout "Hashed \"$sourceFileName\" ==> \"$sourceFileHash\""
set destinationFileHash [getFileHash $destinationFileName]
# puts stdout "Hashed \"$destinationFileName\" ==> \"$destinationFileHash\""
if {[string length $sourceFileHash] > 0 && \
[string length $destinationFileHash] > 0 && \
$sourceFileHash ne $destinationFileHash} then {
if {[catch {
file copy -force $destinationFileName $destinationFileName.bak
file copy -force $sourceFileName $destinationFileName
} result] == 0} then {
puts stdout \
"finished copying \"$sourceFileName\" to \"$destinationFileName\""
} else {
puts stdout $result
}
} else {
puts stdout \
"skipped copying \"$sourceFileName\" to \"$destinationFileName\""
}
}
set path [file dirname [info script]]
set path [file normalize [file dirname [info script]]]
set nDocExtPath [file join [file dirname $path] Externals NDoc3]
set nDocPath [file join $env(ProgramFiles) NDoc3]
set nDocInstPath [file join $env(ProgramFiles) NDoc3]
if {![file isdirectory $nDocPath]} then {
puts stdout "NDoc3 must be installed to: $nDocPath"
if {![file isdirectory $nDocInstPath]} then {
puts stdout "NDoc3 must be installed to: $nDocInstPath"
exit 1
}
set hhcPath [file join $env(ProgramFiles) "HTML Help Workshop"]
if {![file isdirectory $hhcPath]} then {
puts stdout "HTML Help Workshop must be installed to: $hhcPath"
|
︙ | | |
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
|
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
|
-
+
+
+
+
+
+
-
+
-
+
|
puts stdout "*WARNING* File \"$xmlDocFile\" does not match: $pattern"
}
#
# TODO: If the NDoc version number ever changes, the next line of code will
# probably need to be updated.
#
set outputPath [file join Output ndoc3_msdn_temp]
set outputPath [file join Output]
set temporaryPath [file join $outputPath ndoc3_msdn_temp]
if {[file isdirectory $nDocExtPath]} then {
copyMsdnDocumenter $nDocExtPath $nDocInstPath
}
set code [catch {exec [file join $nDocPath bin NDoc3Console.exe] \
set code [catch {exec [file join $nDocInstPath bin NDoc3Console.exe] \
"-project=[file nativename $projectFile]"} result]
puts stdout $result; if {$code != 0} then {exit $code}
set fileNames [list SQLite.NET.hhp SQLite.NET.hhc]
foreach fileName [glob -nocomplain [file join $outputPath *.html]] {
foreach fileName [glob -nocomplain [file join $temporaryPath *.html]] {
lappend fileNames [file tail $fileName]
}
set patterns(.hhc,1) {<!--This document contains Table of Contents information\
for the HtmlHelp compiler\.--><UL>}
set patterns(.hhp,1) {Default topic=~System\.Data\.SQLite\.html}
|
︙ | | |
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
|
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
|
-
+
|
set subSpecs(.html,4) {"\1~Overloads.html"}
set subSpecs(.html,5) {"\1~Overloads.html"}
set subSpecs(.html,6) {"\1~Overloads.html"}
set subSpecs(.html,7) {"\1~Overloads.html"}
set subSpecs(.html,8) {"\1~Overloads.html"}
foreach fileName $fileNames {
set fileName [file join $path $outputPath $fileName]
set fileName [file join $path $temporaryPath $fileName]
#
# NOTE: Make sure the file we need actually exists.
#
if {![file isfile $fileName]} then {
puts stdout "Cannot find file: $fileName"
exit 1
|
︙ | | |
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
|
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
|
-
+
-
+
|
#
if {$count > 0} then {
writeFile $fileName $data
}
}
set code [catch {exec [file join $hhcPath hhc.exe] \
[file nativename [file join $path $outputPath SQLite.NET.hhp]]} result]
[file nativename [file join $path $temporaryPath SQLite.NET.hhp]]} result]
#
# NOTE: For hhc.exe, zero means failure.
#
puts stdout $result; if {$code == 0} then {exit 1}
file copy -force [file join $path $outputPath SQLite.NET.chm] \
file copy -force [file join $path $temporaryPath SQLite.NET.chm] \
[file join $path SQLite.NET.chm]
puts stdout SUCCESS
exit 0
|
Changes to Externals/Eagle/bin/Eagle.dll.
cannot compute difference between binary files
Changes to Externals/Eagle/bin/EagleShell.exe.
cannot compute difference between binary files
Changes to Externals/Eagle/bin/EagleShell.exe.mda.config.
︙ | | |
8
9
10
11
12
13
14
15
16
17
18
19
20
21
|
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
|
+
+
+
+
+
+
+
+
+
+
+
+
|
* See the file "license.terms" for information on usage and redistribution of
* this file, and for a DISCLAIMER OF ALL WARRANTIES.
*
* RCS: @(#) $Id: $
*
-->
<mdaConfig xmlns="http://schemas.microsoft.com/CLR/2004/10/mda">
<!--
NOTE: The "jitCompilationStart" and "memberInfoCacheCreation" managed
debugging assistants are extremely noisy.
Using the "pInvokeLog" managed debugging assistant with no filter
shows the signature of all P/Invoke calls. Unfortunately, as of
the .NET Framework 4.5, it does not appear to support the standard
wildcard (i.e. "glob") syntax in the filter "dllName" attribute.
Also, it does not appear to monitor any native calls invoked via
managed delegates (i.e. those created via the Marshal class using
the GetDelegateForFunctionPointer method).
-->
<assistants>
<!--++
<asynchronousThreadAbort />
<bindingFailure />
<callbackOnCollectedDelegate listSize="50" />
<contextSwitchDeadlock enable="true" />
<dangerousThreadingAPI />
|
︙ | | |
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
|
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
|
+
-
|
</marshaling>
<memberInfoCacheCreation />
<moduloObjectHashcode modulus="1" />
<nonComVisibleBaseClass />
<notMarshalable />
<openGenericCERCall />
<overlappedFreeError />
<pInvokeLog />
<pInvokeLog>
<filter>
<match dllName="advapi32.dll" />
<match dllName="advpack.dll" />
<match dllName="kernel32.dll" />
<match dllName="mscoree.dll" />
<match dllName="msvcrt.dll" />
<match dllName="ntdll.dll" />
<match dllName="shell32.dll" />
<match dllName="spilornis.dll" />
<match dllName="user32.dll" />
<match dllName="wintrust.dll" />
</filter>
</pInvokeLog>
<pInvokeStackImbalance />
<raceOnRCWCleanup />
<reentrancy />
|
︙ | | |
Changes to Externals/Eagle/bin/x64/Spilornis.dll.
cannot compute difference between binary files
Changes to Externals/Eagle/bin/x86/Spilornis.dll.
cannot compute difference between binary files
Changes to Externals/Eagle/lib/Eagle1.0/init.eagle.
︙ | | |
1164
1165
1166
1167
1168
1169
1170
1171
1172
1173
1174
1175
1176
1177
1178
1179
1180
1181
1182
1183
1184
1185
1186
1187
1188
1189
1190
1191
1192
1193
1194
1195
1196
1197
1198
1199
1200
1201
1202
1203
1204
1205
1206
1207
1208
1209
1210
1211
1212
1213
1214
1215
1216
1217
1218
1219
1220
1221
1222
1223
1224
1225
1226
1227
1228
|
1164
1165
1166
1167
1168
1169
1170
1171
1172
1173
1174
1175
1176
1177
1178
1179
1180
1181
1182
1183
1184
1185
1186
1187
1188
1189
1190
1191
1192
1193
1194
1195
1196
1197
1198
1199
1200
1201
1202
1203
1204
1205
1206
1207
1208
1209
1210
1211
1212
1213
1214
1215
1216
1217
1218
1219
1220
1221
1222
1223
1224
1225
1226
1227
1228
1229
1230
1231
1232
1233
1234
1235
1236
1237
1238
1239
1240
1241
1242
1243
1244
1245
1246
|
-
-
-
-
-
-
-
-
-
-
-
-
+
-
-
+
+
-
+
-
-
+
+
-
-
-
+
+
+
+
+
+
+
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
+
-
+
+
+
+
+
+
|
set command [list exec -- \
[file join $directory Hippogriff.exe] -delay 2000]
eval $command &; exit -force
}
#
# NOTE: This proc is used to check for new versions of the runtime
# when the user executes the interactive "#check" command. To
# disable that functionality, redefine this proc to do nothing.
#
proc checkForUpdate {} {
#
# NOTE: This should work properly in Eagle only.
#
set uri [appendArgs [info engine Uri] [info engine UpdateFile]]
set fileName [file tempname]; # unique local temp file name.
proc getUpdateData { uri } {
#
# NOTE: Temporarily start trusting ONLY our self-signed certificate
# which is used primarily for "software updates".
# NOTE: Temporarily start trusting ONLY our own self-signed
# certificate which is used primarily for updates.
#
uri softwareupdates true
try {
#
# NOTE: Download the tag file from the web site.
#
uri download $uri $fileName; # synchronous.
return [uri download -inline $uri]; # synchronous.
} finally {
#
# NOTE: Stop trusting ONLY our self-signed certificate which is
# used primarily for "software updates".
# NOTE: Stop trusting ONLY our own self-signed certificate
# which is used primarily for updates.
#
uri softwareupdates false
}
#
# NOTE: Read all the data out of the downloaded text file.
}
proc getUpdateScriptData { uri } {
#
# NOTE: Temporarily start trusting ONLY our own self-signed
# certificate which is used primarily for updates.
#
uri softwareupdates true
set data [readFile $fileName]
#
# NOTE: Remove the downloaded temporary file. We no longer need
# it because we just read all the data from it.
#
file delete $fileName
#
# NOTE: Normalize to Unix line-endings.
try {
#
# NOTE: Download the script file from the web site.
#
return [interp readorgetscriptfile $uri]; # synchronous.
} finally {
#
# NOTE: Stop trusting ONLY our own self-signed certificate
# which is used primarily for updates.
#
uri softwareupdates false
}
}
#
# NOTE: This proc is used to check for new versions -OR- new update
# scripts for the runtime when a user executes the interactive
# "#check" command. To disable this functionality, simply
# redefine this procedure to do nothing.
#
proc checkForUpdate { {wantScripts false} } {
#
# NOTE: This should work properly in Eagle only.
#
set updateUri [appendArgs [info engine Uri] [info engine UpdateFile]]
#
# NOTE: Fetch the master update data from the distribution site
# and normalize to Unix-style line-endings.
#
set data [string map [list \r\n \n] $data]; # Unix.
set updateData [string map [list \r\n \n] [getUpdateData $updateUri]]
#
# NOTE: Split the data into lines.
#
set lines [split $data \n]
set lines [split $updateData \n]
#
# NOTE: Keep track of how many update scripts are processed.
#
set scriptCount 0
#
# NOTE: Check each line to find the build information...
#
foreach line $lines {
#
# NOTE: Remove excess whitespace.
|
︙ | | |
1236
1237
1238
1239
1240
1241
1242
1243
1244
1245
1246
1247
1248
1249
1250
1251
1252
1253
1254
|
1254
1255
1256
1257
1258
1259
1260
1261
1262
1263
1264
1265
1266
1267
1268
1269
1270
1271
1272
1273
|
-
+
-
-
-
+
+
+
+
|
#
# NOTE: Skip comment lines.
#
if {[string index $line 0] ne "#" && \
[string index $line 0] ne ";"} then {
#
# NOTE: Split the tab-delimited line into fields. The format
# of the lines must be as follows:
# of all lines in the data must be as follows:
#
# protocolId <tab> publicKeyToken <tab> name <tab> culture
# <tab> patchLevel <tab> timeStamp <tab> uri <tab> md5Hash
# <tab> sha1Hash <tab> sha512Hash <tab> notes <newLine>
# <startLine> protocolId <tab> publicKeyToken <tab> name
# <tab> culture <tab> patchLevel <tab> timeStamp <tab>
# baseUri <tab> md5Hash <tab> sha1Hash <tab> sha512Hash
# <tab> notes <newLine>
#
set fields [split $line \t]
#
# NOTE: Grab the protocol Id field.
#
set protocolId [lindex $fields 0]
|
︙ | | |
1264
1265
1266
1267
1268
1269
1270
1271
1272
1273
1274
1275
1276
1277
1278
1279
1280
1281
1282
1283
1284
1285
1286
1287
|
1283
1284
1285
1286
1287
1288
1289
1290
1291
1292
1293
1294
1295
1296
1297
1298
1299
1300
1301
1302
1303
1304
1305
1306
1307
1308
1309
1310
1311
1312
1313
1314
1315
1316
|
+
+
+
+
+
+
+
+
+
+
-
+
|
set name [lindex $fields 2]
#
# NOTE: Grab the culture field.
#
set culture [lindex $fields 3]
#
# NOTE: Figure out which protocol is in use for this line.
# The value "1" means this line specifies a build of
# the script engine. The value "2" means this line
# specifies an update script (via a URI) to evaluate.
# All other values are currently reserved and ignored.
#
set checkBuild [expr {!$wantScripts && $protocolId eq "1"}]
set checkScript [expr {$wantScripts && $protocolId eq "2"}]
#
# NOTE: We only want to find the first line that matches our
# engine. The public key token is being used here to
# make sure we get the same "flavor" of the engine.
# The lines are organized so that the "latest stable
# version" is on the first line (for a given public key
# token), followed by development builds, experimental
# builds, etc.
#
if {$protocolId eq "1" && \
if {($checkBuild || $checkScript) && \
[matchEnginePublicKeyToken $publicKeyToken] && \
[matchEngineName $name] && \
[matchEngineCulture $culture]} then {
#
# NOTE: Grab the patch level field.
#
set patchLevel [lindex $fields 4]
|
︙ | | |
1297
1298
1299
1300
1301
1302
1303
1304
1305
1306
1307
1308
1309
1310
1311
1312
1313
1314
1315
1316
1317
1318
1319
1320
1321
1322
1323
1324
1325
1326
1327
|
1326
1327
1328
1329
1330
1331
1332
1333
1334
1335
1336
1337
1338
1339
1340
1341
1342
1343
1344
1345
1346
1347
1348
1349
1350
1351
1352
1353
1354
1355
1356
1357
|
-
+
+
-
+
|
#
# NOTE: Compare the patch level from the line to the one we
# are currently using.
#
set compare [package vcompare $patchLevel $enginePatchLevel]
if {$compare > 0} then {
if {($checkBuild && $compare > 0) || \
($checkScript && $compare == 0)} then {
#
# NOTE: Grab the time-stamp field.
#
set timeStamp [lindex $fields 5]
if {[string length $timeStamp] == 0} then {
set timeStamp 0; #never?
}
#
# NOTE: Grab the base URI field (i.e. it may be a mirror
# site).
#
set baseUri [lindex $fields 6]
if {[string length $baseUri] == 0} then {
if {$checkBuild && [string length $baseUri] == 0} then {
set baseUri [info engine Uri]; # primary site.
}
#
# NOTE: Grab the notes field (which may be empty).
#
set notes [lindex $fields 10]
|
︙ | | |
1337
1338
1339
1340
1341
1342
1343
1344
1345
1346
1347
1348
1349
1350
1351
1352
1353
1354
1355
1356
1357
1358
1359
1360
1361
1362
1363
1364
1365
1366
1367
1368
1369
1370
1371
1372
1373
1374
1375
|
1367
1368
1369
1370
1371
1372
1373
1374
1375
1376
1377
1378
1379
1380
1381
1382
1383
1384
1385
1386
1387
1388
1389
1390
1391
1392
1393
1394
1395
1396
1397
1398
1399
1400
1401
1402
1403
1404
1405
1406
1407
1408
1409
1410
1411
1412
1413
1414
1415
1416
1417
1418
1419
1420
1421
1422
1423
1424
1425
1426
1427
1428
1429
1430
1431
1432
1433
1434
1435
1436
1437
1438
1439
1440
1441
1442
1443
1444
1445
1446
1447
1448
1449
1450
1451
1452
1453
1454
1455
1456
1457
1458
1459
1460
1461
1462
1463
1464
1465
1466
1467
1468
1469
1470
1471
1472
1473
1474
1475
1476
1477
1478
1479
1480
1481
1482
1483
1484
1485
1486
1487
1488
1489
1490
1491
1492
1493
1494
1495
1496
1497
1498
1499
1500
1501
1502
1503
1504
1505
1506
1507
1508
1509
1510
1511
1512
1513
1514
1515
1516
1517
1518
1519
1520
1521
1522
1523
1524
1525
1526
1527
1528
1529
1530
1531
1532
1533
1534
1535
1536
1537
1538
1539
1540
1541
1542
1543
1544
1545
1546
1547
1548
1549
1550
1551
1552
1553
1554
1555
1556
1557
1558
1559
1560
1561
1562
1563
1564
1565
1566
1567
1568
1569
1570
1571
1572
1573
1574
1575
1576
1577
1578
1579
1580
1581
1582
1583
1584
1585
1586
1587
1588
1589
1590
1591
1592
1593
1594
1595
1596
1597
1598
1599
1600
1601
1602
1603
1604
1605
1606
1607
1608
1609
1610
1611
|
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
+
+
|
if {[string is integer -strict $timeStamp]} then {
set dateTime [clock format $timeStamp]
} else {
set dateTime [clock format [clock scan $timeStamp]]
}
#
# NOTE: The patch level from the line is greater, we are
# out-of-date.
# NOTE: The engine patch level from the line is greater,
# we are out-of-date. Return the result of our
# checking now.
#
if {$checkBuild} then {
return [list [appendArgs "newer build " $patchLevel \
" is available as of " $dateTime] [list $baseUri \
$patchLevel] [list $notes]]
}
#
# NOTE: The script patch level from the line matches the
# current engine patch level exactly, this script
# should be evaluated if it can be authenticated.
#
if {$checkScript} then {
#
# NOTE: First, set the default channel for update script
# status messages. If the test channel has been
# set (i.e. by the test suite), it will be used
# instead.
#
if {![info exists channel]} then {
set channel [expr {[info exists ::test_channel] ? \
$::test_channel : "stdout"}]
}
return [list [appendArgs "newer build " $patchLevel \
" is available as of " $dateTime] [list $baseUri \
$patchLevel] [list $notes]]
} elseif {$compare < 0} then {
#
# NOTE: Next, verify the script has a valid base URI.
# For update scripts, this must be the location
# where the update script data can be downloaded.
#
if {[string length $baseUri] == 0} then {
tqputs $channel [appendArgs \
"---- invalid baseUri value for update script line: " \
$line \"\n]
continue
}
#
# NOTE: Next, grab the md5 field and see if it looks valid.
# Below, the value of this field will be compared to
# that of the actual MD5 hash of the downloaded script
# data.
#
set lineMd5 [lindex $fields 7]
if {[string length $lineMd5] == 0} then {
tqputs $channel [appendArgs \
"---- invalid md5 value for update script line: " \
$line \"\n]
continue
}
#
# NOTE: Next, grab the sha1 field and see if it looks valid.
# Below, the value of this field will be compared to
# that of the actual SHA1 hash of the downloaded script
# data.
#
set lineSha1 [lindex $fields 8]
if {[string length $lineSha1] == 0} then {
tqputs $channel [appendArgs \
"---- invalid sha1 value for update script line: " \
$line \"\n]
continue
}
#
# NOTE: Next, grab the sha512 field and see if it looks
# valid. Below, the value of this field will be
# compared to that of the actual SHA512 hash of the
# downloaded script data.
#
set lineSha512 [lindex $fields 9]
if {[string length $lineSha512] == 0} then {
tqputs $channel [appendArgs \
"---- invalid sha512 value for update script line: " \
$line \"\n]
continue
}
#
# NOTE: Next, show the extra information associated with
# this update script, if any.
#
tqputs $channel [appendArgs \
"---- fetching update script from \"" $baseUri "\" (" \
$dateTime ") with notes:\n"]
set trimNotes [string trim $notes]
tqputs $channel [appendArgs \
[expr {[string length $trimNotes] > 0 ? $trimNotes : \
"<none>"}] "\n---- end of update script notes\n"]
#
# NOTE: Next, attempt to fetch the update script data.
#
set code [catch {getUpdateScriptData $baseUri} result]
if {$code == 0} then {
#
# NOTE: Success, set the script data from the result.
#
set scriptData $result
} else {
#
# NOTE: Failure, report the error message to the log.
#
tqputs $channel [appendArgs \
"---- failed to fetch update script: " $result \n]
continue
}
#
# NOTE: Next, verify that the md5, sha1, and sha512
# hashes of the raw script data match what was
# specified in the md5, sha1, and sha512 fields.
#
set scriptMd5 [hash normal md5 $scriptData]
if {![string equal -nocase $lineMd5 $scriptMd5]} then {
tqputs $channel [appendArgs \
"---- wrong md5 value \"" $scriptMd5 \
"\" for update script line: " $line \"\n]
continue
}
set scriptSha1 [hash normal sha1 $scriptData]
if {![string equal -nocase $lineSha1 $scriptSha1]} then {
tqputs $channel [appendArgs \
"---- wrong sha1 value \"" $scriptSha1 \
"\" for update script line: " $line \"\n]
continue
}
set scriptSha512 [hash normal sha512 $scriptData]
if {![string equal -nocase $lineSha512 $scriptSha512]} then {
tqputs $channel [appendArgs \
"---- wrong sha512 value \"" $scriptSha512 \
"\" for update script line: " $line \"\n]
continue
}
#
# NOTE: Finally, everything looks good. Therefore, just
# evaluate the update script and print the result.
#
tqputs $channel [appendArgs \
"---- evaluating update script from \"" $baseUri \
\"...\n]
#
# NOTE: Reset the variables that will be used to contain
# the result of the update script.
#
set code 0; set result ""
#
# NOTE: Manually override file name to be returned by
# [info script] to refer back to the originally
# read script base URI.
#
object invoke -flags +NonPublic Interpreter.GetActive \
PushScriptLocation $baseUri true
try {
#
# NOTE: Evaluate the update script in the context of
# the caller.
#
set code [catch {uplevel 1 $scriptData} result]
} finally {
#
# NOTE: Reset manual override of the script file name
# to be returned by [info script].
#
object invoke -flags +NonPublic Interpreter.GetActive \
PopScriptLocation true
}
host result $code $result; incr scriptCount
tqputs $channel "\n---- end of update script results\n"
}
} elseif {$checkBuild && $compare < 0} then {
#
# NOTE: The patch level from the line is less, we are more
# up-to-date than the latest version?
#
return [list [appendArgs "running build " $enginePatchLevel \
" is newer than the latest build " $patchLevel]]
} else {
} elseif {$checkBuild} then {
#
# NOTE: The patch levels are equal, we are up-to-date.
#
return [list "running build is the latest"]
}
}
}
}
}
#
# NOTE: Figure out what the final result should be. If we get
# to this point when checking for a new build, something
# must have gone awry. Otherwise, report the number of
# update scripts that were successfully processed.
#
if {$wantScripts} then {
if {$scriptCount > 0} then {
return [list [appendArgs \
"processed " $scriptCount " update scripts"]]
} else {
return [list "no update scripts were processed"]
}
} else {
return [list "cannot determine if running build is the latest"]
return [list "cannot determine if running build is the latest"]
}
}
proc getReturnType { object member } {
if {[string length $object] == 0 || [string length $member] == 0} then {
return ""
}
|
︙ | | |
1413
1414
1415
1416
1417
1418
1419
1420
1421
1422
1423
1424
1425
1426
|
1649
1650
1651
1652
1653
1654
1655
1656
1657
1658
1659
1660
1661
1662
1663
1664
1665
1666
1667
1668
1669
1670
1671
1672
1673
|
+
+
+
+
+
+
+
+
+
+
+
|
if {[string length $type] == 0} then {
return ""
}
return [expr {[$type IsValueType] ? 0 : "null"}]
}
proc getHostSize {} {
#
# NOTE: Attempt to query the size from the host; failing that,
# return a reasonable default value.
#
if {[catch {host size} result] == 0} then {
return $result
}
return [list 80 25]; # TODO: Good default?
}
proc parray { a args } {
if {[llength $args] > 2} then {
error "wrong # args: should be \"parray a ?pattern?\""
}
upvar 1 $a array
|
︙ | | |
1437
1438
1439
1440
1441
1442
1443
1444
1445
1446
1447
1448
1449
1450
1451
|
1684
1685
1686
1687
1688
1689
1690
1691
1692
1693
1694
1695
1696
1697
1698
|
-
+
|
if {$length > $maxLength} {
set maxLength $length
}
}
set maxLength [expr {$maxLength + [string length $a] + 2}]
set hostLength [lindex [host size] 0]
set hostLength [lindex [getHostSize] 0]
set valueLength [expr {$hostLength - $maxLength - 5}]; # " ... "
foreach name $names {
#
# NOTE: Format the array element name for display.
#
set nameString [appendArgs $a ( $name )]
|
︙ | | |
1485
1486
1487
1488
1489
1490
1491
1492
1493
1494
1495
1496
1497
1498
1499
|
1732
1733
1734
1735
1736
1737
1738
1739
1740
1741
1742
1743
1744
1745
1746
|
-
+
|
set length [string length $name]
if {$length > $maxLength} {
set maxLength $length
}
}
set hostLength [lindex [host size] 0]
set hostLength [lindex [getHostSize] 0]
set valueLength [expr {$hostLength - $maxLength - 5}]; # " ... "
foreach {name value} $d {
#
# NOTE: If the value by itself is too long to fit on one host line,
# just truncate and ellipsis it.
#
|
︙ | | |
Changes to Externals/Eagle/lib/Eagle1.0/test.eagle.
︙ | | |
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
|
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
|
-
-
+
+
|
if {[string length $string] > 0} then {
appendSharedLogFile $fileName $string
}
}
}
proc getSoftwareRegistryKey { wow64 } {
if {$wow64 && [info exists ::tcl_platform(machine)] && \
$::tcl_platform(machine) eq "amd64"} then {
if {$wow64 && [info exists ::tcl_platform(machine)] && [lsearch -exact \
[list ia64 amd64] $::tcl_platform(machine)] != -1} then {
#
# NOTE: Return the WoW64 registry key name because we are running on a
# 64-bit operating system and the caller specifically requested
# the WoW64 registry key name.
#
return Software\\Wow6432Node
} else {
|
︙ | | |
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
|
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
|
+
+
+
+
+
+
-
+
-
+
+
|
if {[llength $options] > 0} then {eval lappend command $options}
lappend command -- $commandName
if {[llength $args] > 0} then {eval lappend command $args}
if {[info exists ::no(exec)]} then {
tputs $::test_channel [appendArgs "---- skipping command: " $command \n]
set procName [lindex [info level [info level]] 0]
error "test use of \[$procName\] has been disabled"
} else {
tputs $::test_channel [appendArgs "---- running command: " $command \n]
tputs $::test_channel [appendArgs "---- running command: " $command \n]
return [uplevel 1 $command]
return [uplevel 1 $command]
}
}
proc testClrExec { commandName options args } {
set command [list exec]
if {[llength $options] > 0} then {eval lappend command $options}
|
︙ | | |
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
|
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
|
+
+
+
+
+
+
-
+
-
+
+
+
-
-
+
+
+
+
+
+
+
+
+
-
-
+
-
+
+
|
[appendArgs \" [file nativename $commandName] \"]
} else {
lappend command $commandName
}
if {[llength $args] > 0} then {eval lappend command $args}
if {[info exists ::no(exec)]} then {
tputs $::test_channel [appendArgs "---- skipping command: " $command \n]
set procName [lindex [info level [info level]] 0]
error "test use of \[$procName\] has been disabled"
} else {
tputs $::test_channel [appendArgs "---- running command: " $command \n]
tputs $::test_channel [appendArgs "---- running command: " $command \n]
return [uplevel 1 $command]
return [uplevel 1 $command]
}
}
proc execTestShell { options args } {
if {[info exists ::no(exec)]} then {
tputs $::test_channel [appendArgs \
"---- running nested shell: exec " \
tputs $::test_channel [appendArgs \
"---- skipping nested shell: exec " [string trim [appendArgs \
$options " " -- " \"" [info nameofexecutable] "\" " $args]] \n]
set procName [lindex [info level [info level]] 0]
error "test use of \[$procName\] has been disabled"
} else {
tputs $::test_channel [appendArgs \
"---- running nested shell: exec " [string trim [appendArgs \
[string trim [appendArgs $options " " -- " \"" \
[info nameofexecutable] "\" " $args]] \n]
$options " " -- " \"" [info nameofexecutable] "\" " $args]] \n]
return [uplevel 1 execShell [list $options] $args]
return [uplevel 1 execShell [list $options] $args]
}
}
proc isRandomOrder {} {
return [expr {[info exists ::test_random_order] && \
[string is boolean -strict $::test_random_order] && \
$::test_random_order}]
}
|
︙ | | |
1316
1317
1318
1319
1320
1321
1322
1323
1324
1325
1326
1327
1328
1329
1330
1331
1332
1333
1334
1335
1336
1337
1338
|
1338
1339
1340
1341
1342
1343
1344
1345
1346
1347
1348
1349
1350
1351
1352
1353
1354
1355
1356
1357
1358
1359
1360
|
-
+
-
-
+
+
|
lappend result $fileName
}
}
return $result
}
proc formatDecimal { value {places 4} } {
proc formatDecimal { value {places 4} {zeros false} } {
if {[isEagle] && [llength [info commands object]] > 0} then {
#
# HACK: This works; however, in order to do this kind of thing cleanly,
# we really need the Tcl [format] command.
#
set result [object invoke String Format [appendArgs "{0:0." \
[string repeat # $places] "}"] [set object [object invoke \
-create Double Parse $value]]]
[string repeat [expr {$zeros ? "0" : "#"}] $places] "}"] \
[set object [object invoke -create Double Parse $value]]]
unset object; # dispose
} else {
#
# NOTE: See, nice and clean when done in Tcl?
#
set result [format [appendArgs %. $places f] $value]
|
︙ | | |
2161
2162
2163
2164
2165
2166
2167
2168
2169
2170
2171
2172
2173
2174
2175
2176
2177
2178
2179
2180
2181
2182
2183
2184
2185
2186
2187
2188
|
2183
2184
2185
2186
2187
2188
2189
2190
2191
2192
2193
2194
2195
2196
2197
2198
2199
2200
2201
2202
2203
2204
2205
2206
2207
2208
2209
2210
2211
2212
2213
2214
2215
2216
|
+
+
+
+
+
+
-
+
|
# NOTE: Delete the temporary file we used to query the machine
# type for the native Tcl shell.
#
catch {file delete $fileName}
}
}
}
proc getTclVersionForTclShell {} {
return [testExecTclScript {
puts -nonewline stdout [info tclversion]
}]
}
proc getCommandsForTclShell {} {
return [testExecTclScript {
puts -nonewline stdout [info commands]
}]
}
proc getMachineForTclShell {} {
return [testExecTclScript {
puts -nonewline stdout $tcl_platform(machine)
}]
}
proc getTkVersion {} {
proc getTkVersionForTclShell {} {
return [testExecTclScript {
puts -nonewline stdout [package require Tk]; exit
}]
}
proc getGarudaDll {} {
#
|
︙ | | |
2261
2262
2263
2264
2265
2266
2267
2268
2269
2270
2271
2272
2273
2274
2275
2276
2277
2278
2279
2280
2281
2282
2283
2284
2285
2286
2287
2288
2289
2290
2291
2292
2293
2294
2295
2296
2297
2298
2299
2300
2301
2302
2303
2304
2305
2306
2307
2308
2309
2310
2311
2312
2313
2314
2315
2316
2317
2318
2319
2320
2321
2322
2323
2324
2325
2326
2327
2328
2329
2330
2331
2332
2333
2334
2335
2336
2337
2338
2339
2340
|
2289
2290
2291
2292
2293
2294
2295
2296
2297
2298
2299
2300
2301
2302
2303
2304
2305
2306
2307
2308
2309
2310
2311
2312
2313
2314
2315
2316
2317
2318
2319
2320
2321
2322
2323
2324
2325
2326
2327
2328
2329
2330
2331
2332
2333
2334
2335
2336
2337
2338
2339
2340
2341
2342
2343
2344
2345
2346
2347
2348
2349
2350
2351
2352
2353
2354
2355
2356
2357
2358
2359
2360
2361
2362
2363
2364
2365
2366
2367
2368
2369
2370
2371
2372
2373
2374
2375
2376
2377
2378
2379
2380
2381
2382
2383
2384
2385
2386
2387
2388
2389
2390
2391
2392
2393
2394
2395
2396
2397
2398
2399
2400
2401
2402
2403
2404
2405
2406
2407
2408
2409
|
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
+
+
+
+
-
+
-
+
+
+
+
-
+
+
+
+
+
+
+
-
+
+
+
-
+
+
+
+
-
+
-
+
+
+
+
|
object unimport -importpattern System.Windows.Forms.Design
object unimport -importpattern System.Windows.Forms.Layout
object unimport -importpattern System.Windows.Forms.PropertyGridInternal
object unimport -importpattern System.Windows.Forms.VisualStyles
}
proc getTestLibraryDirectory {} {
#
# NOTE: First, query the location of the script library.
#
set result [info library]
#
# NOTE: Next, If the script library is embedded within the core
# library itself (i.e. the script library location refers
# to a file, not a directory), strip off the file name.
#
if {[file exists $result] && [file isfile $result]} then {
set result [file dirname $result]
}
#
# NOTE: Finally, return the resulting script library directory.
#
return $result
}
#
# NOTE: Setup the test path relative to the library path.
#
if {![interp issafe] && ![info exists ::test_path]} then {
#
# NOTE: Try the source release directory structure.
# NOTE: Try the source release directory structure. For this case,
# the final test path would be:
#
# $library/../../Library/Tests
#
set ::test_path [file join [file normalize [file dirname \
[file dirname [info library]]]] Library Tests]
[file dirname [getTestLibraryDirectory]]]] Library Tests]
if {![file exists $::test_path] || \
![file isdirectory $::test_path]} then {
#
# NOTE: Try the source release directory structure again; this time,
# assume only the embedded script library was used.
# assume only the embedded script library was used. For this
# case, the final test path would be:
#
# $base/Library/Tests
#
set ::test_path [file join [info base] Library Tests]
}
if {![file exists $::test_path] || \
![file isdirectory $::test_path]} then {
#
# NOTE: Try for the test package directory.
# NOTE: Try for the test package directory. For this case, the final
# test path would be:
#
# $script/../Test1.0
#
set ::test_path [file join [file normalize [file dirname \
[file dirname [info script]]]] [appendArgs Test \
[info engine Version]]]
}
if {![file exists $::test_path] || \
![file isdirectory $::test_path]} then {
#
# NOTE: Try for the test package directory again; this time, use the
# base path and assume the source release directory structure.
# For this case, the final test path would be:
#
# $base/lib/Test1.0
#
set ::test_path [file join [info base] lib [appendArgs Test \
[info engine Version]]]
}
if {![file exists $::test_path] || \
![file isdirectory $::test_path]} then {
#
# NOTE: Try for the test package directory again; this time, use the
# base path.
# base path. For this case, the final test path would be:
#
# $base/Test1.0
#
set ::test_path [file join [info base] [appendArgs Test \
[info engine Version]]]
}
if {![file exists $::test_path] || \
![file isdirectory $::test_path]} then {
#
# NOTE: This must be a binary release, no "Library" directory then.
# Also, binary releases have an upper-case "Tests" directory
# name that originates from the "update.bat" tool. This must
# match the casing used in "update.bat".
# match the casing used in "update.bat". For this case, the
# final test path would be:
#
# $library/../../Tests
#
set ::test_path [file join [file normalize [file dirname \
[file dirname [info library]]]] Tests]
[file dirname [getTestLibraryDirectory]]]] Tests]
}
if {![file exists $::test_path] || \
![file isdirectory $::test_path]} then {
#
# NOTE: Fallback to using the base directory and checking for a
# "Tests" directory beneath it.
# "Tests" directory beneath it. For this case, the final
# test path would be:
#
# $base/Tests
#
set ::test_path [file join [info base] Tests]
}
}
#
# NOTE: Fake having the tcltest package unless we are prevented.
|
︙ | | |
Changes to Externals/Eagle/lib/Eagle1.0/vendor.eagle.
︙ | | |
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
|
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
|
-
+
|
#
# NOTE: Check for any overridden settings that may have been specified via
# the command line, etc.
#
checkForTestOverrides stdout [expr {[info exists test_overrides] ? \
$test_overrides : [list binary_directory build_base_directory \
build_directory common_directory connection_flags database_directory \
datetime_format scratch_directory temporary_directory \
datetime_format release_version scratch_directory temporary_directory \
test_configuration test_configurations test_constraints \
test_machine test_overrides test_platform test_suite test_year \
test_years test_year_clr_v2 test_year_clr_v4 vendor_directory]}] false
#
# NOTE: Set the name of the running test suite, if necessary.
#
|
︙ | | |
Changes to Externals/Eagle/lib/Test1.0/constraints.eagle.
︙ | | |
26
27
28
29
30
31
32
33
34
35
36
37
38
39
|
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
|
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
|
# versions of Mono supported by the test suite infrastructure.
#
return [list \
[list 2 0] [list 2 2] [list 2 4] [list 2 6] [list 2 8] [list 2 10] \
[list 2 11] [list 2 12] [list 3 0] [list 3 1] [list 3 2] [list 3 3] \
[list 3 4] [list 3 5] [list 3 6]]
}
proc checkForTestSuiteFiles { channel } {
tputs $channel "---- checking for test suite files... "
#
# NOTE: Start out with no test suite files to check.
#
set fileNames [list]
#
# NOTE: Check if the base package path is available.
#
if {[info exists ::test_package_path]} then {
#
# TODO: If additional test suite files are added within the base
# package path, add them here as well.
#
foreach fileNameOnly [list \
embed.eagle init.eagle pkgIndex.eagle pkgIndex.tcl \
safe.eagle shell.eagle test.eagle vendor.eagle word.tcl] {
#
# NOTE: First, check if the file resides in the Eagle-specific
# package sub-directory. Failing that, fallback to using
# the base package path itself.
#
set fileName [file join \
$::test_package_path Eagle1.0 $fileNameOnly]
if {![file exists $fileName]} then {
set fileName [file join $::test_package_path $fileNameOnly]
}
#
# NOTE: If the test suite file exists, add it to the list of file
# names to process.
#
if {[file exists $fileName]} then {
lappend fileNames $fileName
}
}
}
#
# NOTE: Check if the test package path is available.
#
if {[info exists ::test_path]} then {
#
# TODO: If additional test suite files are added within the test
# package path, add them here as well.
#
foreach fileNameOnly [list \
all.eagle constraints.eagle epilogue.eagle pkgIndex.eagle \
pkgIndex.tcl prologue.eagle] {
#
# NOTE: Check if the file resides in the test package directory.
#
set fileName [file join $::test_path $fileNameOnly]
#
# NOTE: If the test suite file exists, add it to the list of file
# names to process.
#
if {[file exists $fileName]} then {
lappend fileNames $fileName
}
}
}
#
# NOTE: Did we find any test suite files?
#
if {[llength $fileNames] > 0} then {
#
# NOTE: Eagle has a built-in hashing command; however, Tcl requires
# a package. Make sure we can hash content before proceeding.
#
if {[isEagle] || [catch {package require sha1}] == 0} then {
tputs $channel yes\n
foreach fileName $fileNames {
if {[isEagle]} then {
set sha1 [hash normal sha1 [readFile $fileName]]
} else {
#
# BUGBUG: Apparently, the ActiveState tcllib sha1 package may
# have a bug that produces the wrong values here. No
# attempt is made here to work around any such bug.
#
set sha1 [sha1::sha1 -hex -filename $fileName]
}
tputs $channel [appendArgs \
"---- file \"" $fileName "\"... sha1 (" $sha1 ")\n"]
}
#
# NOTE: We are done here, return now.
#
return
}
}
tputs $channel no\n
}
proc checkForPlatform { channel } {
tputs $channel "---- checking for platform... "
if {[info exists ::tcl_platform(platform)]} then {
addConstraint $::tcl_platform(platform)
|
︙ | | |
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
|
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
|
-
+
|
}
}
tputs $channel no\n
}
proc checkForTclOptions { channel } {
tputs $channel "---- checking for Tcl options..."
tputs $channel "---- checking for Tcl options... "
if {![isEagle]} then {
set result [list]
#
# NOTE: This test constraint is needed by test "benchmark-1.22".
#
|
︙ | | |
649
650
651
652
653
654
655
656
657
658
659
660
661
662
|
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
|
+
+
+
+
+
+
+
+
+
+
+
+
|
addConstraint [appendArgs command. $name]
tputs $channel yes\n
} else {
tputs $channel no\n
}
}
proc checkForTestExec { channel } {
tputs $channel "---- checking for test use of \"exec\" command... "
if {![info exists ::no(testExec)]} then {
addConstraint testExec
tputs $channel yes\n
} else {
tputs $channel no\n
}
}
proc checkForTestMachine { channel } {
tputs $channel "---- checking for test machine... "
if {[info exists ::test_machine] && \
[string length $::test_machine] > 0} then {
addConstraint [appendArgs machine. $::test_machine]
|
︙ | | |
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
|
1066
1067
1068
1069
1070
1071
1072
1073
1074
1075
1076
1077
1078
1079
1080
1081
1082
1083
1084
1085
1086
1087
1088
1089
1090
1091
1092
1093
1094
|
-
+
+
-
+
-
+
-
+
|
} else {
tputs $channel no\n
}
}
proc checkForTiming {
channel threshold {constraint ""} {tries 1} {delay 1000}
{asynchronous false} } {
{average false} {asynchronous false} } {
tputs $channel [appendArgs \
"---- checking for precision timing (threshold of " $threshold \
" milliseconds" [expr {$average ? " average" : ""}] ", delay of " \
" milliseconds, delay of " $delay " milliseconds)... "]
$delay " milliseconds)... "]
#
# HACK: Sometimes the first try takes quite a bit longer than subsequent
# tries. We attempt to bypass this problem by retrying a set number
# of times (which can be overridden by the caller) before giving up.
#
set try 0
set total 0
set difference unknown
for {} {$try < $tries} {incr try} {
for {set try 0} {$try < $tries} {incr try} {
#
# NOTE: Create a script that will set the final clicks value. This must
# use a global variable due to the nature of [after].
#
set stopScript {
set ::stopClicks [expr {[clock clicks -milliseconds] & 0x7fffffff}]
}
|
︙ | | |
996
997
998
999
1000
1001
1002
1003
1004
1005
1006
1007
1008
1009
1010
1011
1012
1013
1014
1015
1016
1017
1018
1019
1020
1021
1022
1023
1024
1025
1026
1027
1028
1029
1030
1031
1032
1033
1034
1035
1036
|
1113
1114
1115
1116
1117
1118
1119
1120
1121
1122
1123
1124
1125
1126
1127
1128
1129
1130
1131
1132
1133
1134
1135
1136
1137
1138
1139
1140
1141
1142
1143
1144
1145
1146
1147
1148
1149
1150
1151
1152
1153
1154
1155
1156
1157
1158
1159
1160
1161
1162
1163
1164
1165
1166
1167
1168
1169
|
+
+
+
+
+
+
+
+
+
+
+
+
+
-
+
-
-
-
+
+
+
-
-
-
+
+
+
+
+
-
-
-
+
+
+
+
|
#
# NOTE: Calculate the difference between the actual and expected
# number of milliseconds.
#
set difference [expr {abs($stop - $start - $delay)}]
#
# NOTE: Keep track of the total number of milliseconds elapsed for
# all iterations of this loop.
#
incr total $difference
#
# NOTE: If we are using the average difference, handle that now.
#
if {$average && $tries > 1} then {
set difference [expr {$total / $tries}]
}
#
# NOTE: Are we within the threshold specified by the caller?
#
if {$difference >= 0 && $difference <= $threshold} then {
#
# NOTE: We appear to be capable of fairly precise timing.
#
if {[string length $constraint] > 0} then {
if {[string length $constraint] == 0} then {
addConstraint $constraint
} else {
addConstraint timing
set constraint timing
}
addConstraint $constraint
tputs $channel [appendArgs "yes (0 <= " $difference " <= " \
$threshold " milliseconds, tried " [expr {$try + 1}] \
" " [expr {$try + 1 > 1 ? "times" : "time"}] ")\n"]
tputs $channel [appendArgs \
"yes (0 <= " $difference " <= " $threshold " milliseconds" \
[expr {$average ? " average" : ""}] ", tried " [expr {$try + 1}] \
" out of " $tries " " [expr {$tries > 1 ? "times" : "time"}] \
", \"" $constraint "\")\n"]
#
# NOTE: We are done here, return now.
#
return
}
}
tputs $channel [appendArgs "no (0 <= " $difference " > " \
$threshold " milliseconds, tried " $try " " \
[expr {$try > 1 ? "times" : "time"}] ")\n"]
tputs $channel [appendArgs \
"no (0 <= " $difference " > " $threshold " milliseconds" \
[expr {$average ? " average" : ""}] ", tried " $try " out of " \
$tries " " [expr {$tries > 1 ? "times" : "time"}] ")\n"]
}
proc checkForPerformance { channel } {
tputs $channel "---- checking for performance testing... "
#
# NOTE: Are we allowed to do performance testing?
|
︙ | | |
1047
1048
1049
1050
1051
1052
1053
1054
1055
1056
1057
1058
1059
1060
1061
1062
1063
|
1180
1181
1182
1183
1184
1185
1186
1187
1188
1189
1190
1191
1192
1193
1194
1195
1196
1197
1198
1199
1200
1201
1202
1203
1204
1205
1206
1207
1208
1209
1210
1211
1212
1213
1214
1215
|
+
+
+
+
+
+
+
+
+
+
+
-
+
-
+
+
+
+
+
+
+
+
+
|
proc checkForStackIntensive { channel } {
tputs $channel "---- checking for stack intensive testing... "
#
# NOTE: Are we allowed to do stack intensive testing?
#
if {![info exists ::no(stackIntensive)]} then {
if {[isEagle]} then {
#
# NOTE: Attempt to query for native stack checking in Eagle.
#
if {[catch {object invoke -flags +NonPublic \
Eagle._Components.Private.NativeStack CanQueryThread} \
canQueryThread] == 0 && \
$canQueryThread} then {
#
# NOTE: Yes, it appears that it is available.
#
addConstraint stackIntensive
addConstraint stackIntensive
tputs $channel yes\n
tputs $channel yes\n
} else {
tputs $channel no\n
}
} else {
addConstraint stackIntensive
tputs $channel yes\n
}
} else {
tputs $channel no\n
}
}
proc checkForInteractive { channel } {
tputs $channel "---- checking for interactive user... "
|
︙ | | |
1124
1125
1126
1127
1128
1129
1130
1131
1132
1133
1134
1135
1136
1137
1138
1139
1140
1141
1142
1143
1144
1145
1146
1147
1148
1149
1150
1151
1152
1153
1154
1155
1156
1157
1158
1159
|
1276
1277
1278
1279
1280
1281
1282
1283
1284
1285
1286
1287
1288
1289
1290
1291
1292
1293
1294
1295
1296
1297
1298
1299
1300
1301
1302
1303
1304
1305
1306
1307
1308
1309
1310
1311
1312
1313
1314
1315
1316
1317
1318
1319
|
+
+
+
+
+
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
-
-
-
+
+
+
+
+
+
|
proc checkForNetwork { channel host timeout } {
tputs $channel [appendArgs \
"---- checking for network connectivity to host \"" $host "\"... "]
if {[isEagle]} then {
#
# NOTE: Running this check on the Mono 3.3.0 release build will lock
# up the process; therefore, attempt to skip it in that case.
#
if {![isMono] || ![haveConstraint mono33]} then {
#
# BUGBUG: Tcl 8.4 does not like this expression (and Tcl tries to
# compile it even though it will only actually ever be
# evaluated in Eagle).
#
set expr {[llength [info commands uri]] > 0 && \
[catch {uri ping $host $timeout} response] == 0 && \
[lindex $response 0] in [list Success TimedOut] && \
[string is integer -strict [lindex $response 1]] && \
[lindex $response 1] <= $timeout}
# BUGBUG: Tcl 8.4 does not like this expression (and Tcl tries to
# compile it even though it will only actually ever be
# evaluated in Eagle).
#
set expr {[llength [info commands uri]] > 0 && \
[catch {uri ping $host $timeout} response] == 0 && \
[lindex $response 0] in [list Success TimedOut] && \
[string is integer -strict [lindex $response 1]] && \
[lindex $response 1] <= $timeout}
#
# NOTE: Does it look like we are able to contact the network host?
#
if {[expr $expr]} then {
#
# NOTE: Yes, it appears that it is available.
#
addConstraint [appendArgs network_ $host]
#
# NOTE: Does it look like we are able to contact the network host?
#
if {[expr $expr]} then {
#
# NOTE: Yes, it appears that it is available.
#
addConstraint [appendArgs network_ $host]
tputs $channel [appendArgs "yes (" $response ")\n"]
} else {
tputs $channel no\n
tputs $channel [appendArgs "yes (" $response ")\n"]
} else {
tputs $channel no\n
}
} else {
tputs $channel "skipped, broken on Mono 3.3.0\n"
}
} else {
#
# HACK: Running in Tcl, just assume we have network access.
#
addConstraint [appendArgs network_ $host]
|
︙ | | |
1356
1357
1358
1359
1360
1361
1362
1363
1364
1365
1366
1367
1368
1369
|
1516
1517
1518
1519
1520
1521
1522
1523
1524
1525
1526
1527
1528
1529
1530
1531
1532
1533
1534
1535
1536
1537
1538
1539
1540
1541
|
+
+
+
+
+
+
+
+
+
+
+
+
|
tputs $channel [appendArgs "yes (" \
[object invoke $certificate Subject] ")\n"]
} else {
tputs $channel no\n
}
}
proc checkForCompileCSharp { channel } {
tputs $channel "---- checking for test use of C# compiler... "
if {![info exists ::no(compileCSharp)]} then {
addConstraint compileCSharp
tputs $channel yes\n
} else {
tputs $channel no\n
}
}
proc checkForAdministrator { channel } {
tputs $channel "---- checking for administrator... "
if {[isAdministrator]} then {
addConstraint administrator; # running as full admin.
|
︙ | | |
1665
1666
1667
1668
1669
1670
1671
1672
1673
1674
1675
1676
1677
1678
1679
1680
1681
1682
1683
1684
1685
1686
1687
1688
1689
1690
1691
1692
1693
1694
1695
1696
1697
|
1837
1838
1839
1840
1841
1842
1843
1844
1845
1846
1847
1848
1849
1850
1851
1852
1853
1854
1855
1856
1857
1858
1859
1860
1861
1862
1863
1864
1865
1866
1867
1868
1869
|
-
+
-
+
-
-
+
+
|
"-bit " $machine "\"... "]
#
# NOTE: What are the machine architecture and the
# number of bits for this operating system?
#
if {[info exists ::tcl_platform(machine)] && \
[info exists ::tcl_platform(osBits)]} then {
[info exists ::tcl_platform(processBits)]} then {
#
# NOTE: Does the machine and number of bits match
# what the caller specified?
#
if {$::tcl_platform(machine) eq $machine && \
$::tcl_platform(osBits) eq $bits} then {
$::tcl_platform(processBits) eq $bits} then {
#
# NOTE: Yes, it matches.
#
addConstraint [appendArgs $machine . $bits bit]
set result yes
} else {
set result no
}
tputs $channel [appendArgs $result ", " $::tcl_platform(osBits) -bit \
" " $::tcl_platform(machine) \n]
tputs $channel [appendArgs $result ", " $::tcl_platform(processBits) \
-bit " " $::tcl_platform(machine) \n]
} else {
tputs $channel "no, unknown\n"
}
}
proc checkForGarudaDll { channel } {
#
|
︙ | | |
2041
2042
2043
2044
2045
2046
2047
2048
2049
2050
2051
2052
2053
2054
2055
2056
2057
2058
2059
2060
2061
2062
2063
2064
2065
2066
2067
2068
2069
2070
2071
2072
2073
2074
2075
2076
2077
2078
2079
2080
2081
2082
2083
2084
2085
2086
2087
2088
2089
2090
2091
|
2213
2214
2215
2216
2217
2218
2219
2220
2221
2222
2223
2224
2225
2226
2227
2228
2229
2230
2231
2232
2233
2234
2235
2236
2237
2238
2239
2240
2241
2242
2243
2244
2245
2246
2247
2248
2249
2250
2251
2252
2253
2254
2255
2256
2257
2258
2259
2260
2261
2262
2263
2264
2265
2266
2267
2268
2269
|
-
-
-
-
+
+
+
+
+
-
+
+
+
+
+
-
-
+
+
-
+
+
+
-
+
-
+
-
-
+
|
} else {
tputs $channel no\n
}
}
proc checkForTclShell { channel } {
#
# HACK: We do not care about the machine type returned from this
# procedure, we only care if it returns "error" because that
# would indicate an error was caught during [exec] (i.e. the
# native Tcl shell could not be executed).
# HACK: If this returns "error" that normally indicates an error was
# caught during [exec] (i.e. the native Tcl shell could not be
# executed).
#
set prefix "---- checking for Tcl shell version... "
if {[catch {getMachineForTclShell} result] == 0 && \
if {[catch {getTclVersionForTclShell} result] == 0 && \
$result ne "error"} then {
#
# NOTE: Yes, a native Tcl shell appears to be available.
#
addConstraint tclShell
#
# NOTE: Now, add the version specific test constraint.
#
addConstraint [appendArgs tclShell [string map [list . ""] $result]]
tputs $channel [appendArgs "---- checking for Tcl shell... yes (" \
$result ")\n"]
tputs $channel [appendArgs $prefix "yes (" $result ")\n"]
} else {
tputs $channel "---- checking for Tcl shell... no\n"
tputs $channel [appendArgs $prefix no\n]
}
}
proc checkForTkPackage { channel } {
#
# HACK: We do not care about the Tk version returned from this
# procedure, we only care if it returns "error" because that
# would indicate an error was caught during [exec] (i.e. the
# native Tcl shell could not be executed).
#
set prefix "---- checking for Tk package version... "
if {[catch {getTkVersion} result] == 0 && \
if {[catch {getTkVersionForTclShell} result] == 0 && \
$result ne "error"} then {
#
# NOTE: Yes, a native Tk package appears to be available.
#
addConstraint tkPackage
tputs $channel [appendArgs "---- checking for Tk package... yes (" \
tputs $channel [appendArgs $prefix "yes (" $result ")\n"]
$result ")\n"]
} else {
tputs $channel "---- checking for Tk package... no\n"
tputs $channel [appendArgs $prefix no\n]
}
}
proc checkForPowerShell { channel } {
tputs $channel "---- checking for PowerShell... "
#
|
︙ | | |
2558
2559
2560
2561
2562
2563
2564
2565
2566
2567
2568
2569
2570
2571
2572
2573
2574
2575
2576
2577
2578
2579
2580
|
2736
2737
2738
2739
2740
2741
2742
2743
2744
2745
2746
2747
2748
2749
2750
2751
2752
2753
2754
2755
2756
2757
2758
2759
|
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
|
###########################################################################
#
# NOTE: We need several of our test constraint related commands in the
# global namespace.
#
exportAndImportPackageCommands [namespace current] [list \
getKnownMonoVersions checkForPlatform checkForWindowsVersion \
checkForScriptLibrary checkForVariable checkForTclOptions \
checkForWindowsCommandProcessor checkForFossil checkForEagle \
checkForSymbols checkForLogFile checkForGaruda checkForShell \
checkForDebug checkForTk checkForVersion checkForCommand \
checkForTestMachine checkForTestPlatform checkForTestConfiguration \
checkForTestSuffix checkForFile checkForPathFile checkForNativeCode \
checkForTip127 checkForTip194 checkForTip241 checkForTip285 \
checkForTip405 checkForTip426 checkForTiming checkForPerformance \
getKnownMonoVersions checkForTestSuiteFiles checkForPlatform \
checkForWindowsVersion checkForScriptLibrary checkForVariable \
checkForTclOptions checkForWindowsCommandProcessor checkForFossil \
checkForEagle checkForSymbols checkForLogFile checkForGaruda \
checkForShell checkForDebug checkForTk checkForVersion \
checkForCommand checkForTestExec checkForTestMachine \
checkForTestPlatform checkForTestConfiguration checkForTestSuffix \
checkForFile checkForPathFile checkForNativeCode checkForTip127 \
checkForTip194 checkForTip241 checkForTip285 checkForTip405 \
checkForTip426 checkForTiming checkForPerformance \
checkForStackIntensive checkForInteractive checkForInteractiveCommand \
checkForUserInteraction checkForNetwork checkForCompileOption] false \
false
###########################################################################
############################## END Tcl ONLY ###############################
###########################################################################
|
︙ | | |
Changes to Externals/Eagle/lib/Test1.0/epilogue.eagle.
︙ | | |
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
|
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
|
-
+
-
+
|
#
# NOTE: Show the current state of the memory.
#
catch {debug memory} memory
tputs $test_channel [appendArgs "---- ending memory: " \
[formatListAsDict $memory] \n]
[formatListAsDict $memory <none>] \n]
unset memory
#
# NOTE: Show the current state of the native stack.
#
catch {debug stack true} stack
tputs $test_channel [appendArgs "---- ending stack: " \
[formatListAsDict $stack] \n]
[formatListAsDict $stack <none>] \n]
unset stack
#
# NOTE: Check for and display any duplicate test names that we found. In
# theory, this checking may produce false positives if a test file
# (or the entire test suite) is run multiple times without resetting
|
︙ | | |
Changes to Externals/Eagle/lib/Test1.0/prologue.eagle.
︙ | | |
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
|
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
|
-
+
+
|
#############################################################################
#
# NOTE: Set the local root directory of the source checkout (i.e. of Eagle
# or whatever project the Eagle binaries are being used by) using a
# Fossil binary in the PATH, if available.
#
if {![info exists root_path] && ![info exists no(fossil)]} then {
if {![info exists root_path] && \
![info exists no(exec)] && ![info exists no(fossil)]} then {
set pattern {^local-root:\s+(.*?)\s+$}
if {[catch {set exec [exec -- fossil info]}] || \
[regexp -line -- $pattern $exec dummy directory] == 0} then {
#
# NOTE: We could not query local root directory of the source checkout
# from Fossil; therefore, attempt to make an educated guess. This
|
︙ | | |
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
|
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
|
-
+
-
+
-
+
-
+
|
tputs $test_channel [appendArgs "---- output encoding: " \
$encoding \n]
unset encoding
catch {host query} host
tputs $test_channel [appendArgs "---- host query: " \
[formatListAsDict $host] \n]
[formatListAsDict $host <none>] \n]
unset host
catch {debug memory} memory
tputs $test_channel [appendArgs "---- starting memory: " \
[formatListAsDict $memory] \n]
[formatListAsDict $memory <none>] \n]
unset memory
catch {debug stack true} stack
tputs $test_channel [appendArgs "---- starting stack: " \
[formatListAsDict $stack] \n]
[formatListAsDict $stack <none>] \n]
unset stack
catch {file drive} drive
tputs $test_channel [appendArgs "---- system drive: " \
[formatListAsDict $drive] \n]
[formatListAsDict $drive <none>] \n]
unset drive
}
tputs $test_channel [appendArgs "---- executable: \"" \
$bin_file \"\n]
|
︙ | | |
798
799
800
801
802
803
804
805
806
807
808
809
810
811
|
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
|
+
+
|
}
#
# NOTE: Has machine detection support been disabled?
#
if {![info exists no(machine)]} then {
checkForMachine $test_channel 32 intel; # (i.e. x86)
checkForMachine $test_channel 32 arm; # (i.e. arm)
checkForMachine $test_channel 64 ia64; # (i.e. ia64)
checkForMachine $test_channel 64 amd64; # (i.e. x64)
}
#
# NOTE: Has culture detection support been disabled?
#
if {![info exists no(culture)]} then {
|
︙ | | |
948
949
950
951
952
953
954
955
956
957
958
959
960
961
|
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
|
+
+
+
+
+
+
+
|
#
# NOTE: For tests "excel-*", "object-2.*", "object-7.1", "object-8.*",
# and "object-98.*".
#
checkForReferenceCountTracking $test_channel
}
#
# NOTE: Has testing using the C# compiler been disabled?
#
if {![info exists no(checkForCompileCSharp)]} then {
checkForCompileCSharp $test_channel
}
#
# NOTE: Has compile/runtime option testing support been disabled?
#
if {![info exists no(compileOptions)]} then {
#
# NOTE: Has callback queue support been enabled (at compile-time)?
#
|
︙ | | |
1070
1071
1072
1073
1074
1075
1076
1077
1078
1079
1080
1081
1082
1083
1084
1085
1086
1087
1088
1089
1090
1091
1092
1093
1094
1095
1096
1097
1098
1099
1100
1101
1102
1103
1104
|
1080
1081
1082
1083
1084
1085
1086
1087
1088
1089
1090
1091
1092
1093
1094
1095
1096
1097
1098
1099
1100
1101
1102
1103
1104
1105
1106
1107
1108
1109
1110
1111
1112
1113
1114
1115
1116
1117
1118
1119
1120
1121
1122
1123
1124
|
-
+
+
+
+
+
+
+
+
+
+
+
-
+
|
}
#
# NOTE: Has Windows support been enabled (at compile-time)?
#
if {![info exists no(compileWindows)]} then {
#
# NOTE: For test "garuda-1.1".
# NOTE: For tests "garuda-1.1" and "garuda-1.2".
#
checkForCompileOption $test_channel WINDOWS
}
#
# NOTE: Has Windows Forms support been enabled (at compile-time)?
#
if {![info exists no(compileWinForms)]} then {
#
# NOTE: For tests "object-10.21", "tclLoad-1.2", "winForms-*.*".
#
checkForCompileOption $test_channel WINFORMS
}
#
# NOTE: Has native code support been enabled (at compile-time)?
#
if {![info exists no(compileNative)]} then {
#
# NOTE: For tests "debug-3.2", "expr-3.2", and "host-1.1".
#
checkForCompileOption $test_channel NATIVE
}
#
# NOTE: Has native package support been enabled (at compile-time)?
#
if {![info exists no(compileNativePackage)]} then {
#
# NOTE: For test "garuda-1.1".
# NOTE: For tests "garuda-1.1" and "garuda-1.2".
#
checkForCompileOption $test_channel NATIVE_PACKAGE
}
#
# NOTE: Has network support been enabled (at compile-time)?
#
|
︙ | | |
1606
1607
1608
1609
1610
1611
1612
1613
1614
1615
1616
1617
1618
1619
|
1626
1627
1628
1629
1630
1631
1632
1633
1634
1635
1636
1637
1638
1639
1640
1641
1642
1643
1644
1645
1646
1647
1648
1649
1650
1651
1652
1653
1654
|
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
|
# NOTE: For test "object-2.8".
#
checkForObjectMember $test_channel Eagle._Tests.Default+Disposable \
*ToString* Eagle._Tests.Default.Disposable.ToString
}
}
#
# NOTE: Has MSBuild testing support been disabled?
#
if {![info exists no(msBuild)]} then {
#
# NOTE: For test "object-4.13".
#
checkForAssembly $test_channel Microsoft.Build.Framework
#
# NOTE: For test "object-6.1".
#
checkForAssembly $test_channel Microsoft.Build.Engine
}
#
# NOTE: Has Excel testing support been disabled?
#
if {![info exists no(excel)]} then {
#
# NOTE: For tests "excel-*.*".
#
|
︙ | | |
1778
1779
1780
1781
1782
1783
1784
1785
1786
1787
1788
1789
1790
1791
1792
|
1813
1814
1815
1816
1817
1818
1819
1820
1821
1822
1823
1824
1825
1826
1827
|
-
+
|
}
#
# NOTE: Has Garuda testing support been disabled?
#
if {![info exists no(garudaDll)]} then {
#
# NOTE: For test "garuda-1.1".
# NOTE: For tests "garuda-1.1" and "garuda-1.2".
#
checkForGarudaDll $test_channel
}
###########################################################################
########################## END Eagle Constraints ##########################
###########################################################################
|
︙ | | |
1838
1839
1840
1841
1842
1843
1844
1845
1846
1847
1848
1849
1850
1851
|
1873
1874
1875
1876
1877
1878
1879
1880
1881
1882
1883
1884
1885
1886
1887
1888
1889
1890
1891
1892
1893
1894
1895
1896
1897
1898
1899
1900
|
+
+
+
+
+
+
+
+
+
+
+
+
+
+
|
#############################################################################
####################### BEGIN Tcl & Eagle Constraints #######################
#############################################################################
tputs $test_channel [appendArgs \
"---- start of common (Tcl & Eagle) test constraints...\n"]
#
# NOTE: Check for the test suite infrastructure files...
#
if {![info exists no(testSuiteFiles)]} then {
checkForTestSuiteFiles $test_channel
}
#
# NOTE: Has all use of [exec] for tests been disabled?
#
if {![info exists no(checkForTestExec)]} then {
checkForTestExec $test_channel
}
#
# NOTE: Has checking for the test machine been disabled?
#
if {![info exists no(testMachine)]} then {
checkForTestMachine $test_channel
}
|
︙ | | |
2217
2218
2219
2220
2221
2222
2223
2224
2225
2226
2227
2228
2229
2230
2231
2232
2233
2234
2235
2236
2237
2238
2239
|
2266
2267
2268
2269
2270
2271
2272
2273
2274
2275
2276
2277
2278
2279
2280
2281
2282
2283
2284
2285
2286
2287
2288
2289
2290
2291
|
-
+
+
+
+
+
+
+
-
-
-
|
# NOTE: Has performance testing been disabled?
#
if {![info exists no(performance)]} then {
checkForPerformance $test_channel
}
#
# NOTE: Have precise timing tests been disabled?
# NOTE: Have any timing related constraints been disabled?
#
# BUGBUG: In Eagle, these checks for "precision" timing are not overly
# reliable. This may be due to the semi-random nature of the
# garbage collection. More research into the precise cause of
# timing issues is certainly warranted.
#
#
if {![info exists no(timing)]} then {
checkForTiming $test_channel 50; # 1/20th second.
}
#
# NOTE: Have very precise timing tests been disabled?
#
if {![info exists no(preciseTiming)]} then {
checkForTiming $test_channel 25 preciseTiming; # 1/40th second.
}
#
# NOTE: Has interactive testing been disabled?
#
|
︙ | | |
2327
2328
2329
2330
2331
2332
2333
2334
2335
2336
2337
2338
2339
2340
2341
|
2379
2380
2381
2382
2383
2384
2385
2386
2387
2388
2389
2390
2391
2392
2393
|
-
+
|
#
if {[isEagle]} then {
#
# NOTE: Get the source checkout and tags (i.e. of Eagle or whatever
# project the Eagle binaries are being used by) using a Fossil
# binary in the PATH, if available.
#
if {![info exists no(fossil)]} then {
if {![info exists no(exec)] && ![info exists no(fossil)]} then {
if {[catch {set exec [exec -- fossil info]}] == 0} then {
set pattern {^checkout:\s+(.*?)\s+$}
if {[regexp -line -- $pattern $exec dummy checkout] == 0} then {
#
# NOTE: We could not query the source checkout from Fossil.
#
|
︙ | | |
2439
2440
2441
2442
2443
2444
2445
2446
2447
2448
2449
2450
2451
2452
2453
|
2491
2492
2493
2494
2495
2496
2497
2498
2499
2500
2501
2502
2503
2504
2505
|
-
+
|
[expr {[info exists test_file] && [string length $test_file] > 0 ? \
$test_file : "<none>"}] \n]
#
# NOTE: Show the active test constraints.
#
tputs $test_channel [appendArgs "---- constraints: " \
[formatList [lsort [getConstraints]]] \n]
[formatList [lsort [getConstraints]] <none>] \n]
#
# NOTE: Show the starting command count (for both Tcl and Eagle).
#
tputs $test_channel [appendArgs "---- starting command count: " \
[info cmdcount] \n]
|
︙ | | |
Added Externals/NDoc3/bin/NDoc3.Documenter.Msdn.dll.
cannot compute difference between binary files
Added Externals/NDoc3/src/MsdnDocumenter.cs.