blob: 1c9f92bc120c0fed85e458afaa9b2401cf35d9d0 [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
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
mistachkindfff1ff2015-10-09 18:48:47 +000064IF NOT DEFINED TCLKIT_URI (
mistachkina295d152015-12-08 00:47:32 +000065 SET TCLKIT_URI=https://tclsh.com/
mistachkindfff1ff2015-10-09 18:48:47 +000066)
mistachkin80372ae2015-10-09 17:36:06 +000067
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
mistachkin5b663502015-10-10 23:39:55 +000078%_VECHO% TclKitVersion = '%TCLKIT_VERSION%'
mistachkin80372ae2015-10-09 17:36:06 +000079%_VECHO% TclKitPatchLevel = '%TCLKIT_PATCHLEVEL%'
mistachkin598f7c52016-09-17 22:46:13 +000080%_VECHO% TclKitNoEnv = '%TCLKIT_NOENV%'
mistachkin80372ae2015-10-09 17:36:06 +000081%_VECHO% TclKitNoSdk = '%TCLKIT_NOSDK%'
82%_VECHO% TclKitExe = '%TCLKIT_EXE%'
83%_VECHO% TclKitLib = '%TCLKIT_LIB%'
mistachkin5b663502015-10-10 23:39:55 +000084%_VECHO% TclKitLibStub = '%TCLKIT_LIB_STUB%'
mistachkin80372ae2015-10-09 17:36:06 +000085%_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
mistachkin6e5688d2017-02-27 17:16:27 +0000127CALL :fn_PrependToPath FRAMEWORKDIR
mistachkin80372ae2015-10-09 17:36:06 +0000128
129:skip_addToPath
130
mistachkin5b663502015-10-10 23:39:55 +0000131IF NOT EXIST "%TEMP%\GetFile.exe" (
132 %__ECHO% csc.exe "/out:%TEMP%\GetFile.exe" /target:exe "%TOOLS%\GetFile.cs"
mistachkin80372ae2015-10-09 17:36:06 +0000133
mistachkin5b663502015-10-10 23:39:55 +0000134 IF ERRORLEVEL 1 (
135 ECHO Compilation of "%TOOLS%\GetFile.cs" failed.
136 GOTO errors
137 )
mistachkin80372ae2015-10-09 17:36:06 +0000138)
139
140FOR %%F IN (%TCLKIT_FILES%) DO (
mistachkincc730482015-10-10 00:53:28 +0000141 IF NOT EXIST "%TEMP%\%%F" (
mistachkin80372ae2015-10-09 17:36:06 +0000142 %__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
mistachkin598f7c52016-09-17 22:46:13 +0000151IF DEFINED TCLKIT_NOENV GOTO skip_sdkUnZip
mistachkin80372ae2015-10-09 17:36:06 +0000152IF 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
mistachkincc730482015-10-10 00:53:28 +0000163%__ECHO% "%TEMP%\unzip.exe" -n "%TEMP%\%TCLKIT_SDK_ZIP%" -d "%TEMP%\%TCLKIT_SDK%"
mistachkin80372ae2015-10-09 17:36:06 +0000164
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
mistachkin598f7c52016-09-17 22:46:13 +0000172IF DEFINED TCLKIT_NOENV GOTO skip_sdkEnvironment
173
mistachkin80372ae2015-10-09 17:36:06 +0000174%__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"
mistachkin88739962015-10-14 23:04:08 +0000180%__ECHO% ECHO SET LIBTCLPATH=%TEMP%\%TCLKIT_SDK%\lib%APPEND%"%ROOT%\SetTclKitEnv.bat"
mistachkin80372ae2015-10-09 17:36:06 +0000181%__ECHO% ECHO SET LIBTCL=%TCLKIT_LIB%%APPEND%"%ROOT%\SetTclKitEnv.bat"
mistachkin5b663502015-10-10 23:39:55 +0000182%__ECHO% ECHO SET LIBTCLSTUB=%TCLKIT_LIB_STUB%%APPEND%"%ROOT%\SetTclKitEnv.bat"
mistachkin80372ae2015-10-09 17:36:06 +0000183
184:skip_sdkVariables
185
mistachkincc730482015-10-10 00:53:28 +0000186ECHO.
187ECHO Wrote "%ROOT%\SetTclKitEnv.bat".
188ECHO Please run it to set the necessary Tcl environment variables.
189ECHO.
190
mistachkin598f7c52016-09-17 22:46:13 +0000191:skip_sdkEnvironment
192
mistachkin80372ae2015-10-09 17:36:06 +0000193GOTO no_errors
194
195:fn_TclKitX86Variables
196 IF NOT DEFINED TCLKIT_PATCHLEVEL (
197 SET TCLKIT_PATCHLEVEL=8.6.4
198 )
mistachkin5b663502015-10-10 23:39:55 +0000199 SET TCLKIT_VERSION=%TCLKIT_PATCHLEVEL:.=%
200 SET TCLKIT_VERSION=%TCLKIT_VERSION:~0,2%
mistachkin80372ae2015-10-09 17:36:06 +0000201 SET TCLKIT_EXE=tclkit-%TCLKIT_PATCHLEVEL%.exe
202 SET TCLKIT_LIB=libtclkit%TCLKIT_PATCHLEVEL:.=%.lib
mistachkin5b663502015-10-10 23:39:55 +0000203 SET TCLKIT_LIB_STUB=libtclstub%TCLKIT_VERSION:.=%.a
mistachkin80372ae2015-10-09 17:36:06 +0000204 SET TCLKIT_SDK=libtclkit-sdk-x86-%TCLKIT_PATCHLEVEL%
205 SET TCLKIT_SDK_ZIP=%TCLKIT_SDK%.zip
mistachkincf9fb7e2015-10-12 03:44:39 +0000206 SET TCLKIT_FILES=%TCLKIT_EXE%
mistachkin598f7c52016-09-17 22:46:13 +0000207 IF NOT DEFINED TCLKIT_NOENV IF NOT DEFINED TCLKIT_NOSDK (
mistachkincf9fb7e2015-10-12 03:44:39 +0000208 SET TCLKIT_FILES=%TCLKIT_FILES% unzip.exe %TCLKIT_SDK_ZIP%
209 )
mistachkin80372ae2015-10-09 17:36:06 +0000210 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 )
mistachkin5b663502015-10-10 23:39:55 +0000225 SET TCLKIT_VERSION=%TCLKIT_PATCHLEVEL:.=%
226 SET TCLKIT_VERSION=%TCLKIT_VERSION:~0,2%
mistachkin80372ae2015-10-09 17:36:06 +0000227 SET TCLKIT_LIB=libtclkit%TCLKIT_PATCHLEVEL:.=%.lib
mistachkin5b663502015-10-10 23:39:55 +0000228 SET TCLKIT_LIB_STUB=libtclstub%TCLKIT_VERSION:.=%.a
mistachkin80372ae2015-10-09 17:36:06 +0000229 SET TCLKIT_SDK=libtclkit-sdk-x64-%TCLKIT_PATCHLEVEL%
230 SET TCLKIT_SDK_ZIP=%TCLKIT_SDK%.zip
mistachkincf9fb7e2015-10-12 03:44:39 +0000231 SET TCLKIT_FILES=%TCLKIT_EXE%
mistachkin598f7c52016-09-17 22:46:13 +0000232 IF NOT DEFINED TCLKIT_NOENV IF NOT DEFINED TCLKIT_NOSDK (
mistachkincf9fb7e2015-10-12 03:44:39 +0000233 SET TCLKIT_FILES=%TCLKIT_FILES% unzip.exe %TCLKIT_SDK_ZIP%
234 )
mistachkin80372ae2015-10-09 17:36:06 +0000235 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
mistachkin6e5688d2017-02-27 17:16:27 +0000249: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
mistachkin80372ae2015-10-09 17:36:06 +0000261: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%