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