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