xref: /sqlite-3.40.0/tool/GetTclKit.bat (revision f5e7691e)
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