AryaWu/sqlite
0
1@ECHO OFF
2
3::
4:: GetTclKit.bat --
5::
6:: TclKit Download Tool
7::
8
9SETLOCAL
10
11REM SET __ECHO=ECHO
12REM SET __ECHO2=ECHO
13REM SET __ECHO3=ECHO
14IF NOT DEFINED _AECHO (SET _AECHO=REM)
15IF NOT DEFINED _CECHO (SET _CECHO=REM)
16IF NOT DEFINED _CECHO2 (SET _CECHO2=REM)
17IF NOT DEFINED _CECHO3 (SET _CECHO3=REM)
18IF NOT DEFINED _VECHO (SET _VECHO=REM)
19
20SET OVERWRITE=^>
21IF DEFINED __ECHO SET OVERWRITE=^^^>
22
23SET APPEND=^>^>
24IF DEFINED __ECHO SET APPEND=^^^>^^^>
25
26SET PROCESSOR=%1
27
28IF DEFINED PROCESSOR (
29 CALL :fn_UnquoteVariable PROCESSOR
30) ELSE (
31 GOTO usage
32)
33
34SET PROCESSOR=%PROCESSOR:AMD64=x64%
35
36%_VECHO% Processor = '%PROCESSOR%'
37
38SET DUMMY2=%2
39
40IF DEFINED DUMMY2 (
41 GOTO usage
42)
43
44IF NOT DEFINED ENVDIR (
45 SET ENVDIR=%CD%
46)
47
48%_VECHO% EnvDir = '%ENVDIR%'
49
50SET TOOLS=%~dp0
51SET TOOLS=%TOOLS:~0,-1%
52
53%_VECHO% Tools = '%TOOLS%'
54
55IF NOT DEFINED windir (
56 ECHO The windir environment variable must be set first.
57 GOTO errors
58)
59
60%_VECHO% WinDir = '%windir%'
61
62IF NOT DEFINED TEMP (
63 ECHO The TEMP environment variable must be set first.
64 GOTO errors
65)
66
67%_VECHO% Temp = '%TEMP%'
68
69IF NOT DEFINED TCLKIT_URI (
70 SET TCLKIT_URI=https://urn.to/r/tclsh/
71)
72
73%_VECHO% TclKitUri = '%TCLKIT_URI%'
74
75IF NOT DEFINED TCLKIT_PATCHLEVEL (
76 SET TCLKIT_PATCHLEVEL=8.6.6
77)
78
79%_VECHO% TclKitPatchLevel = '%TCLKIT_PATCHLEVEL%'
80
81IF NOT DEFINED TCLKIT_EXE_PATCHLEVEL (
82 SET TCLKIT_EXE_PATCHLEVEL=8.6.4
83)
84
85%_VECHO% TclKitExePatchLevel = '%TCLKIT_EXE_PATCHLEVEL%'
86
87IF /I "%PROCESSOR%" == "x86" (
88 CALL :fn_TclKitX86Variables
89
90 IF ERRORLEVEL 1 (
91 GOTO errors
92 )
93) ELSE IF /I "%PROCESSOR%" == "x64" (
94 CALL :fn_TclKitX64Variables
95
96 IF ERRORLEVEL 1 (
97 GOTO errors
98 )
99) ELSE (
100 GOTO usage
101)
102
103%_VECHO% TclKitVersion = '%TCLKIT_VERSION%'
104%_VECHO% TclKitPatchLevel = '%TCLKIT_PATCHLEVEL%'
105%_VECHO% TclKitExePatchLevel = '%TCLKIT_EXE_PATCHLEVEL%'
106%_VECHO% TclKitNoEnv = '%TCLKIT_NOENV%'
107%_VECHO% TclKitNoSdk = '%TCLKIT_NOSDK%'
108%_VECHO% TclKitExe = '%TCLKIT_EXE%'
109%_VECHO% TclKitLib = '%TCLKIT_LIB%'
110%_VECHO% TclKitLibStub = '%TCLKIT_LIB_STUB%'
111%_VECHO% TclKitSdk = '%TCLKIT_SDK%'
112%_VECHO% TclKitSdkZip = '%TCLKIT_SDK_ZIP%'
113%_VECHO% TclKitFiles = '%TCLKIT_FILES%'
114
115CALL :fn_ResetErrorLevel
116
117FOR %%T IN (csc.exe) DO (
118 SET %%T_PATH=%%~dp$PATH:T
119)
120
121%_VECHO% Csc.exe_PATH = '%csc.exe_PATH%'
122
123IF DEFINED csc.exe_PATH (
124 GOTO skip_addToPath
125)
126
127IF DEFINED FRAMEWORKDIR (
128 REM Use the existing .NET Framework directory...
129) ELSE IF EXIST "%windir%\Microsoft.NET\Framework64\v2.0.50727" (
130 SET FRAMEWORKDIR=%windir%\Microsoft.NET\Framework64\v2.0.50727
131) ELSE IF EXIST "%windir%\Microsoft.NET\Framework64\v3.5" (
132 SET FRAMEWORKDIR=%windir%\Microsoft.NET\Framework64\v3.5
133) ELSE IF EXIST "%windir%\Microsoft.NET\Framework64\v4.0.30319" (
134 SET FRAMEWORKDIR=%windir%\Microsoft.NET\Framework64\v4.0.30319
135) ELSE IF EXIST "%windir%\Microsoft.NET\Framework\v2.0.50727" (
136 SET FRAMEWORKDIR=%windir%\Microsoft.NET\Framework\v2.0.50727
137) ELSE IF EXIST "%windir%\Microsoft.NET\Framework\v3.5" (
138 SET FRAMEWORKDIR=%windir%\Microsoft.NET\Framework\v3.5
139) ELSE IF EXIST "%windir%\Microsoft.NET\Framework\v4.0.30319" (
140 SET FRAMEWORKDIR=%windir%\Microsoft.NET\Framework\v4.0.30319
141) ELSE (
142 ECHO No suitable version of the .NET Framework appears to be installed.
143 GOTO errors
144)
145
146%_VECHO% FrameworkDir = '%FRAMEWORKDIR%'
147
148IF NOT EXIST "%FRAMEWORKDIR%\csc.exe" (
149 ECHO The file "%FRAMEWORKDIR%\csc.exe" is missing.
150 GOTO errors
151)
152
153CALL :fn_PrependToPath FRAMEWORKDIR
154
155:skip_addToPath
156
157IF NOT EXIST "%TEMP%\GetFile.exe" (
158 %__ECHO% csc.exe "/out:%TEMP%\GetFile.exe" /target:exe "%TOOLS%\GetFile.cs"
159
160 IF ERRORLEVEL 1 (
161 ECHO Compilation of "%TOOLS%\GetFile.cs" failed.
162 GOTO errors
163 )
164)
165
166FOR %%F IN (%TCLKIT_FILES%) DO (
167 IF NOT EXIST "%TEMP%\%%F" (
168 %__ECHO% "%TEMP%\GetFile.exe" "%TCLKIT_URI%%%F"
169
170 IF ERRORLEVEL 1 (
171 ECHO Download of "%%F" from "%TCLKIT_URI%" failed.
172 GOTO errors
173 )
174 )
175)
176
177IF DEFINED TCLKIT_NOENV GOTO skip_sdkUnZip
178IF DEFINED TCLKIT_NOSDK GOTO skip_sdkUnZip
179
180IF NOT EXIST "%TEMP%\%TCLKIT_SDK%" (
181 %__ECHO% MKDIR "%TEMP%\%TCLKIT_SDK%"
182
183 IF ERRORLEVEL 1 (
184 ECHO Could not create directory "%TEMP%\%TCLKIT_SDK%".
185 GOTO errors
186 )
187)
188
189%__ECHO% "%TEMP%\unzip.exe" -n "%TEMP%\%TCLKIT_SDK_ZIP%" -d "%TEMP%\%TCLKIT_SDK%"
190
191IF ERRORLEVEL 1 (
192 ECHO Could not unzip "%TEMP%\%TCLKIT_SDK_ZIP%" to "%TEMP%\%TCLKIT_SDK%".
193 GOTO errors
194)
195
196:skip_sdkUnZip
197
198IF DEFINED TCLKIT_NOENV GOTO skip_sdkEnvironment
199
200%__ECHO% ECHO SET TCLSH_CMD=%TEMP%\%TCLKIT_EXE%%OVERWRITE%"%ENVDIR%\SetTclKitEnv.bat"
201
202IF DEFINED TCLKIT_NOSDK GOTO skip_sdkVariables
203
204%__ECHO% ECHO SET TCLINCDIR=%TEMP%\%TCLKIT_SDK%\include%APPEND%"%ENVDIR%\SetTclKitEnv.bat"
205%__ECHO% ECHO SET TCLLIBDIR=%TEMP%\%TCLKIT_SDK%\lib%APPEND%"%ENVDIR%\SetTclKitEnv.bat"
206%__ECHO% ECHO SET LIBTCLPATH=%TEMP%\%TCLKIT_SDK%\lib%APPEND%"%ENVDIR%\SetTclKitEnv.bat"
207%__ECHO% ECHO SET LIBTCL=%TCLKIT_LIB%%APPEND%"%ENVDIR%\SetTclKitEnv.bat"
208%__ECHO% ECHO SET LIBTCLSTUB=%TCLKIT_LIB_STUB%%APPEND%"%ENVDIR%\SetTclKitEnv.bat"
209
210:skip_sdkVariables
211
212ECHO.
213ECHO Wrote "%ENVDIR%\SetTclKitEnv.bat".
214ECHO Please run it to set the necessary Tcl environment variables.
215ECHO.
216
217:skip_sdkEnvironment
218
219GOTO no_errors
220
221:fn_TclKitX86Variables
222 REM
223 REM NOTE: By default, use latest available version of the TclKit SDK
224 REM for x86. However, the "default" TclKit executable for x86
225 REM is still used here because it is the only one "well-known"
226 REM to be available for download.
227 REM
228 IF NOT DEFINED TCLKIT_PATCHLEVEL (
229 ECHO The TCLKIT_PATCHLEVEL environment variable must be set first.
230 CALL :fn_SetErrorLevel
231 GOTO :EOF
232 )
233 SET TCLKIT_VERSION=%TCLKIT_PATCHLEVEL:.=%
234 SET TCLKIT_VERSION=%TCLKIT_VERSION:~0,2%
235 IF DEFINED TCLKIT_EXE_PATCHLEVEL (
236 SET TCLKIT_EXE=tclkit-%TCLKIT_EXE_PATCHLEVEL%.exe
237 ) ELSE (
238 SET TCLKIT_EXE=tclkit-%TCLKIT_PATCHLEVEL%.exe
239 )
240 SET TCLKIT_LIB=libtclkit%TCLKIT_PATCHLEVEL:.=%.lib
241 SET TCLKIT_LIB_STUB=libtclstub%TCLKIT_VERSION:.=%.a
242 SET TCLKIT_SDK=libtclkit-sdk-x86-%TCLKIT_PATCHLEVEL%
243 SET TCLKIT_SDK_ZIP=%TCLKIT_SDK%.zip
244 SET TCLKIT_FILES=%TCLKIT_EXE%
245 IF NOT DEFINED TCLKIT_NOENV IF NOT DEFINED TCLKIT_NOSDK (
246 SET TCLKIT_FILES=%TCLKIT_FILES% unzip.exe %TCLKIT_SDK_ZIP%
247 )
248 GOTO :EOF
249
250:fn_TclKitX64Variables
251 REM
252 REM NOTE: By default, use latest available version of the TclKit SDK
253 REM for x64. However, the "default" TclKit executable for x86
254 REM is still used here because it is the only one "well-known"
255 REM to be available for download.
256 REM
257 IF NOT DEFINED TCLKIT_PATCHLEVEL (
258 ECHO The TCLKIT_PATCHLEVEL environment variable must be set first.
259 CALL :fn_SetErrorLevel
260 GOTO :EOF
261 )
262 SET TCLKIT_VERSION=%TCLKIT_PATCHLEVEL:.=%
263 SET TCLKIT_VERSION=%TCLKIT_VERSION:~0,2%
264 IF DEFINED TCLKIT_EXE_PATCHLEVEL (
265 SET TCLKIT_EXE=tclkit-%TCLKIT_EXE_PATCHLEVEL%.exe
266 ) ELSE (
267 SET TCLKIT_EXE=tclkit-%TCLKIT_PATCHLEVEL%.exe
268 )
269 SET TCLKIT_LIB=libtclkit%TCLKIT_PATCHLEVEL:.=%.lib
270 SET TCLKIT_LIB_STUB=libtclstub%TCLKIT_VERSION:.=%.a
271 SET TCLKIT_SDK=libtclkit-sdk-x64-%TCLKIT_PATCHLEVEL%
272 SET TCLKIT_SDK_ZIP=%TCLKIT_SDK%.zip
273 SET TCLKIT_FILES=%TCLKIT_EXE%
274 IF NOT DEFINED TCLKIT_NOENV IF NOT DEFINED TCLKIT_NOSDK (
275 SET TCLKIT_FILES=%TCLKIT_FILES% unzip.exe %TCLKIT_SDK_ZIP%
276 )
277 GOTO :EOF
278
279:fn_UnquoteVariable
280 IF NOT DEFINED %1 GOTO :EOF
281 SETLOCAL
282 SET __ECHO_CMD=ECHO %%%1%%
283 FOR /F "delims=" %%V IN ('%__ECHO_CMD%') DO (
284 SET VALUE=%%V
285 )
286 SET VALUE=%VALUE:"=%
287 REM "
288 ENDLOCAL && SET %1=%VALUE%
289 GOTO :EOF
290
291:fn_PrependToPath
292 IF NOT DEFINED %1 GOTO :EOF
293 SETLOCAL
294 SET __ECHO_CMD=ECHO %%%1%%
295 FOR /F "delims=" %%V IN ('%__ECHO_CMD%') DO (
296 SET VALUE=%%V
297 )
298 SET VALUE=%VALUE:"=%
299 REM "
300 ENDLOCAL && SET PATH=%VALUE%;%PATH%
301 GOTO :EOF
302
303:fn_ResetErrorLevel
304 VERIFY > NUL
305 GOTO :EOF
306
307:fn_SetErrorLevel
308 VERIFY MAYBE 2> NUL
309 GOTO :EOF
310
311:usage
312 ECHO.
313 ECHO Usage: %~nx0 ^<processor^>
314 ECHO.
315 ECHO The only supported values for processor are "x86" and "x64".
316 GOTO errors
317
318:errors
319 CALL :fn_SetErrorLevel
320 ENDLOCAL
321 ECHO.
322 ECHO Failure, errors were encountered.
323 GOTO end_of_file
324
325:no_errors
326 CALL :fn_ResetErrorLevel
327 ENDLOCAL
328 ECHO.
329 ECHO Success, no errors were encountered.
330 GOTO end_of_file
331
332:end_of_file
333%__ECHO% EXIT /B %ERRORLEVEL%
334 