xref: /sqlite-3.40.0/tool/GetTclKit.bat (revision 7751deb3)
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  REM
197  REM NOTE: By default, use latest available version of the TclKit SDK
198  REM       for x86.  However, the "default" TclKit executable for x86
199  REM       is still used here because it is the only one "well-known"
200  REM       to be available for download.
201  REM
202  IF NOT DEFINED TCLKIT_PATCHLEVEL (
203    SET TCLKIT_PATCHLEVEL=8.6.6
204  )
205  SET TCLKIT_VERSION=%TCLKIT_PATCHLEVEL:.=%
206  SET TCLKIT_VERSION=%TCLKIT_VERSION:~0,2%
207  REM SET TCLKIT_EXE=tclkit-%TCLKIT_PATCHLEVEL%.exe
208  SET TCLKIT_EXE=tclkit-8.6.4.exe
209  SET TCLKIT_LIB=libtclkit%TCLKIT_PATCHLEVEL:.=%.lib
210  SET TCLKIT_LIB_STUB=libtclstub%TCLKIT_VERSION:.=%.a
211  SET TCLKIT_SDK=libtclkit-sdk-x86-%TCLKIT_PATCHLEVEL%
212  SET TCLKIT_SDK_ZIP=%TCLKIT_SDK%.zip
213  SET TCLKIT_FILES=%TCLKIT_EXE%
214  IF NOT DEFINED TCLKIT_NOENV IF NOT DEFINED TCLKIT_NOSDK (
215    SET TCLKIT_FILES=%TCLKIT_FILES% unzip.exe %TCLKIT_SDK_ZIP%
216  )
217  GOTO :EOF
218
219:fn_TclKitX64Variables
220  REM
221  REM NOTE: By default, use latest available version of the TclKit SDK
222  REM       for x64.  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    SET TCLKIT_PATCHLEVEL=8.6.6
228  )
229  SET TCLKIT_VERSION=%TCLKIT_PATCHLEVEL:.=%
230  SET TCLKIT_VERSION=%TCLKIT_VERSION:~0,2%
231  REM SET TCLKIT_EXE=tclkit-%TCLKIT_PATCHLEVEL%.exe
232  SET TCLKIT_EXE=tclkit-8.6.4.exe
233  SET TCLKIT_LIB=libtclkit%TCLKIT_PATCHLEVEL:.=%.lib
234  SET TCLKIT_LIB_STUB=libtclstub%TCLKIT_VERSION:.=%.a
235  SET TCLKIT_SDK=libtclkit-sdk-x64-%TCLKIT_PATCHLEVEL%
236  SET TCLKIT_SDK_ZIP=%TCLKIT_SDK%.zip
237  SET TCLKIT_FILES=%TCLKIT_EXE%
238  IF NOT DEFINED TCLKIT_NOENV IF NOT DEFINED TCLKIT_NOSDK (
239    SET TCLKIT_FILES=%TCLKIT_FILES% unzip.exe %TCLKIT_SDK_ZIP%
240  )
241  GOTO :EOF
242
243:fn_UnquoteVariable
244  IF NOT DEFINED %1 GOTO :EOF
245  SETLOCAL
246  SET __ECHO_CMD=ECHO %%%1%%
247  FOR /F "delims=" %%V IN ('%__ECHO_CMD%') DO (
248    SET VALUE=%%V
249  )
250  SET VALUE=%VALUE:"=%
251  REM "
252  ENDLOCAL && SET %1=%VALUE%
253  GOTO :EOF
254
255:fn_PrependToPath
256  IF NOT DEFINED %1 GOTO :EOF
257  SETLOCAL
258  SET __ECHO_CMD=ECHO %%%1%%
259  FOR /F "delims=" %%V IN ('%__ECHO_CMD%') DO (
260    SET VALUE=%%V
261  )
262  SET VALUE=%VALUE:"=%
263  REM "
264  ENDLOCAL && SET PATH=%VALUE%;%PATH%
265  GOTO :EOF
266
267:fn_ResetErrorLevel
268  VERIFY > NUL
269  GOTO :EOF
270
271:fn_SetErrorLevel
272  VERIFY MAYBE 2> NUL
273  GOTO :EOF
274
275:usage
276  ECHO.
277  ECHO Usage: %~nx0 ^<processor^>
278  ECHO.
279  ECHO The only supported values for processor are "x86" and "x64".
280  GOTO errors
281
282:errors
283  CALL :fn_SetErrorLevel
284  ENDLOCAL
285  ECHO.
286  ECHO Failure, errors were encountered.
287  GOTO end_of_file
288
289:no_errors
290  CALL :fn_ResetErrorLevel
291  ENDLOCAL
292  ECHO.
293  ECHO Success, no errors were encountered.
294  GOTO end_of_file
295
296:end_of_file
297%__ECHO% EXIT /B %ERRORLEVEL%
298