blob: e2be7c7f6c1317d0b2b96eafd94725acd309a2bd [file] [log] [blame]
mistachkin80372ae2015-10-09 17:36:06 +00001@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
mistachkin334d1632017-07-31 19:39:34 +000032SET PROCESSOR=%PROCESSOR:AMD64=x64%
33
mistachkin80372ae2015-10-09 17:36:06 +000034%_VECHO% Processor = '%PROCESSOR%'
35
36SET DUMMY2=%2
37
38IF DEFINED DUMMY2 (
39 GOTO usage
40)
41
mistachkind5157e02020-10-14 21:31:20 +000042IF NOT DEFINED ENVDIR (
43 SET ENVDIR=%CD%
44)
mistachkin80372ae2015-10-09 17:36:06 +000045
mistachkind5157e02020-10-14 21:31:20 +000046%_VECHO% EnvDir = '%ENVDIR%'
mistachkin80372ae2015-10-09 17:36:06 +000047
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
mistachkindfff1ff2015-10-09 18:48:47 +000067IF NOT DEFINED TCLKIT_URI (
mistachkind5157e02020-10-14 21:31:20 +000068 SET TCLKIT_URI=https://urn.to/r/tclsh/
mistachkindfff1ff2015-10-09 18:48:47 +000069)
mistachkin80372ae2015-10-09 17:36:06 +000070
71%_VECHO% TclKitUri = '%TCLKIT_URI%'
72
mistachkind5157e02020-10-14 21:31:20 +000073IF 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
mistachkin80372ae2015-10-09 17:36:06 +000085IF /I "%PROCESSOR%" == "x86" (
86 CALL :fn_TclKitX86Variables
mistachkind5157e02020-10-14 21:31:20 +000087
88 IF ERRORLEVEL 1 (
89 GOTO errors
90 )
mistachkin80372ae2015-10-09 17:36:06 +000091) ELSE IF /I "%PROCESSOR%" == "x64" (
92 CALL :fn_TclKitX64Variables
mistachkind5157e02020-10-14 21:31:20 +000093
94 IF ERRORLEVEL 1 (
95 GOTO errors
96 )
mistachkin80372ae2015-10-09 17:36:06 +000097) ELSE (
98 GOTO usage
99)
100
mistachkin5b663502015-10-10 23:39:55 +0000101%_VECHO% TclKitVersion = '%TCLKIT_VERSION%'
mistachkin80372ae2015-10-09 17:36:06 +0000102%_VECHO% TclKitPatchLevel = '%TCLKIT_PATCHLEVEL%'
mistachkind5157e02020-10-14 21:31:20 +0000103%_VECHO% TclKitExePatchLevel = '%TCLKIT_EXE_PATCHLEVEL%'
mistachkin598f7c52016-09-17 22:46:13 +0000104%_VECHO% TclKitNoEnv = '%TCLKIT_NOENV%'
mistachkin80372ae2015-10-09 17:36:06 +0000105%_VECHO% TclKitNoSdk = '%TCLKIT_NOSDK%'
106%_VECHO% TclKitExe = '%TCLKIT_EXE%'
107%_VECHO% TclKitLib = '%TCLKIT_LIB%'
mistachkin5b663502015-10-10 23:39:55 +0000108%_VECHO% TclKitLibStub = '%TCLKIT_LIB_STUB%'
mistachkin80372ae2015-10-09 17:36:06 +0000109%_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
mistachkin6e5688d2017-02-27 17:16:27 +0000151CALL :fn_PrependToPath FRAMEWORKDIR
mistachkin80372ae2015-10-09 17:36:06 +0000152
153:skip_addToPath
154
mistachkin5b663502015-10-10 23:39:55 +0000155IF NOT EXIST "%TEMP%\GetFile.exe" (
156 %__ECHO% csc.exe "/out:%TEMP%\GetFile.exe" /target:exe "%TOOLS%\GetFile.cs"
mistachkin80372ae2015-10-09 17:36:06 +0000157
mistachkin5b663502015-10-10 23:39:55 +0000158 IF ERRORLEVEL 1 (
159 ECHO Compilation of "%TOOLS%\GetFile.cs" failed.
160 GOTO errors
161 )
mistachkin80372ae2015-10-09 17:36:06 +0000162)
163
164FOR %%F IN (%TCLKIT_FILES%) DO (
mistachkincc730482015-10-10 00:53:28 +0000165 IF NOT EXIST "%TEMP%\%%F" (
mistachkin80372ae2015-10-09 17:36:06 +0000166 %__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
mistachkin598f7c52016-09-17 22:46:13 +0000175IF DEFINED TCLKIT_NOENV GOTO skip_sdkUnZip
mistachkin80372ae2015-10-09 17:36:06 +0000176IF 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
mistachkincc730482015-10-10 00:53:28 +0000187%__ECHO% "%TEMP%\unzip.exe" -n "%TEMP%\%TCLKIT_SDK_ZIP%" -d "%TEMP%\%TCLKIT_SDK%"
mistachkin80372ae2015-10-09 17:36:06 +0000188
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
mistachkin598f7c52016-09-17 22:46:13 +0000196IF DEFINED TCLKIT_NOENV GOTO skip_sdkEnvironment
197
mistachkind5157e02020-10-14 21:31:20 +0000198%__ECHO% ECHO SET TCLSH_CMD=%TEMP%\%TCLKIT_EXE%%OVERWRITE%"%ENVDIR%\SetTclKitEnv.bat"
mistachkin80372ae2015-10-09 17:36:06 +0000199
200IF DEFINED TCLKIT_NOSDK GOTO skip_sdkVariables
201
mistachkind5157e02020-10-14 21:31:20 +0000202%__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"
mistachkin80372ae2015-10-09 17:36:06 +0000207
208:skip_sdkVariables
209
mistachkincc730482015-10-10 00:53:28 +0000210ECHO.
mistachkind5157e02020-10-14 21:31:20 +0000211ECHO Wrote "%ENVDIR%\SetTclKitEnv.bat".
mistachkincc730482015-10-10 00:53:28 +0000212ECHO Please run it to set the necessary Tcl environment variables.
213ECHO.
214
mistachkin598f7c52016-09-17 22:46:13 +0000215:skip_sdkEnvironment
216
mistachkin80372ae2015-10-09 17:36:06 +0000217GOTO no_errors
218
219:fn_TclKitX86Variables
mistachkin7751deb2017-07-28 22:22:15 +0000220 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
mistachkin80372ae2015-10-09 17:36:06 +0000226 IF NOT DEFINED TCLKIT_PATCHLEVEL (
mistachkind5157e02020-10-14 21:31:20 +0000227 ECHO The TCLKIT_PATCHLEVEL environment variable must be set first.
228 CALL :fn_SetErrorLevel
229 GOTO :EOF
mistachkin80372ae2015-10-09 17:36:06 +0000230 )
mistachkin5b663502015-10-10 23:39:55 +0000231 SET TCLKIT_VERSION=%TCLKIT_PATCHLEVEL:.=%
232 SET TCLKIT_VERSION=%TCLKIT_VERSION:~0,2%
mistachkind5157e02020-10-14 21:31:20 +0000233 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 )
mistachkin80372ae2015-10-09 17:36:06 +0000238 SET TCLKIT_LIB=libtclkit%TCLKIT_PATCHLEVEL:.=%.lib
mistachkin5b663502015-10-10 23:39:55 +0000239 SET TCLKIT_LIB_STUB=libtclstub%TCLKIT_VERSION:.=%.a
mistachkin80372ae2015-10-09 17:36:06 +0000240 SET TCLKIT_SDK=libtclkit-sdk-x86-%TCLKIT_PATCHLEVEL%
241 SET TCLKIT_SDK_ZIP=%TCLKIT_SDK%.zip
mistachkincf9fb7e2015-10-12 03:44:39 +0000242 SET TCLKIT_FILES=%TCLKIT_EXE%
mistachkin598f7c52016-09-17 22:46:13 +0000243 IF NOT DEFINED TCLKIT_NOENV IF NOT DEFINED TCLKIT_NOSDK (
mistachkincf9fb7e2015-10-12 03:44:39 +0000244 SET TCLKIT_FILES=%TCLKIT_FILES% unzip.exe %TCLKIT_SDK_ZIP%
245 )
mistachkin80372ae2015-10-09 17:36:06 +0000246 GOTO :EOF
247
248:fn_TclKitX64Variables
mistachkin7751deb2017-07-28 22:22:15 +0000249 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
mistachkin80372ae2015-10-09 17:36:06 +0000255 IF NOT DEFINED TCLKIT_PATCHLEVEL (
mistachkind5157e02020-10-14 21:31:20 +0000256 ECHO The TCLKIT_PATCHLEVEL environment variable must be set first.
257 CALL :fn_SetErrorLevel
258 GOTO :EOF
mistachkin80372ae2015-10-09 17:36:06 +0000259 )
mistachkin5b663502015-10-10 23:39:55 +0000260 SET TCLKIT_VERSION=%TCLKIT_PATCHLEVEL:.=%
261 SET TCLKIT_VERSION=%TCLKIT_VERSION:~0,2%
mistachkind5157e02020-10-14 21:31:20 +0000262 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 )
mistachkin80372ae2015-10-09 17:36:06 +0000267 SET TCLKIT_LIB=libtclkit%TCLKIT_PATCHLEVEL:.=%.lib
mistachkin5b663502015-10-10 23:39:55 +0000268 SET TCLKIT_LIB_STUB=libtclstub%TCLKIT_VERSION:.=%.a
mistachkin80372ae2015-10-09 17:36:06 +0000269 SET TCLKIT_SDK=libtclkit-sdk-x64-%TCLKIT_PATCHLEVEL%
270 SET TCLKIT_SDK_ZIP=%TCLKIT_SDK%.zip
mistachkincf9fb7e2015-10-12 03:44:39 +0000271 SET TCLKIT_FILES=%TCLKIT_EXE%
mistachkin598f7c52016-09-17 22:46:13 +0000272 IF NOT DEFINED TCLKIT_NOENV IF NOT DEFINED TCLKIT_NOSDK (
mistachkincf9fb7e2015-10-12 03:44:39 +0000273 SET TCLKIT_FILES=%TCLKIT_FILES% unzip.exe %TCLKIT_SDK_ZIP%
274 )
mistachkin80372ae2015-10-09 17:36:06 +0000275 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
mistachkin6e5688d2017-02-27 17:16:27 +0000289: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
mistachkin80372ae2015-10-09 17:36:06 +0000301: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%