blob: 0cc62b3f8c7d4f278624d2458d55b06257cc0438 [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
42SET ROOT=%~dp0\..
43SET ROOT=%ROOT:\\=\%
44
45%_VECHO% Root = '%ROOT%'
46
47SET TOOLS=%~dp0
48SET TOOLS=%TOOLS:~0,-1%
49
50%_VECHO% Tools = '%TOOLS%'
51
52IF NOT DEFINED windir (
53 ECHO The windir environment variable must be set first.
54 GOTO errors
55)
56
57%_VECHO% WinDir = '%windir%'
58
59IF NOT DEFINED TEMP (
60 ECHO The TEMP environment variable must be set first.
61 GOTO errors
62)
63
64%_VECHO% Temp = '%TEMP%'
65
mistachkindfff1ff2015-10-09 18:48:47 +000066IF NOT DEFINED TCLKIT_URI (
mistachkina295d152015-12-08 00:47:32 +000067 SET TCLKIT_URI=https://tclsh.com/
mistachkindfff1ff2015-10-09 18:48:47 +000068)
mistachkin80372ae2015-10-09 17:36:06 +000069
70%_VECHO% TclKitUri = '%TCLKIT_URI%'
71
72IF /I "%PROCESSOR%" == "x86" (
73 CALL :fn_TclKitX86Variables
74) ELSE IF /I "%PROCESSOR%" == "x64" (
75 CALL :fn_TclKitX64Variables
76) ELSE (
77 GOTO usage
78)
79
mistachkin5b663502015-10-10 23:39:55 +000080%_VECHO% TclKitVersion = '%TCLKIT_VERSION%'
mistachkin80372ae2015-10-09 17:36:06 +000081%_VECHO% TclKitPatchLevel = '%TCLKIT_PATCHLEVEL%'
mistachkin598f7c52016-09-17 22:46:13 +000082%_VECHO% TclKitNoEnv = '%TCLKIT_NOENV%'
mistachkin80372ae2015-10-09 17:36:06 +000083%_VECHO% TclKitNoSdk = '%TCLKIT_NOSDK%'
84%_VECHO% TclKitExe = '%TCLKIT_EXE%'
85%_VECHO% TclKitLib = '%TCLKIT_LIB%'
mistachkin5b663502015-10-10 23:39:55 +000086%_VECHO% TclKitLibStub = '%TCLKIT_LIB_STUB%'
mistachkin80372ae2015-10-09 17:36:06 +000087%_VECHO% TclKitSdk = '%TCLKIT_SDK%'
88%_VECHO% TclKitSdkZip = '%TCLKIT_SDK_ZIP%'
89%_VECHO% TclKitFiles = '%TCLKIT_FILES%'
90
91CALL :fn_ResetErrorLevel
92
93FOR %%T IN (csc.exe) DO (
94 SET %%T_PATH=%%~dp$PATH:T
95)
96
97%_VECHO% Csc.exe_PATH = '%csc.exe_PATH%'
98
99IF DEFINED csc.exe_PATH (
100 GOTO skip_addToPath
101)
102
103IF DEFINED FRAMEWORKDIR (
104 REM Use the existing .NET Framework directory...
105) ELSE IF EXIST "%windir%\Microsoft.NET\Framework64\v2.0.50727" (
106 SET FRAMEWORKDIR=%windir%\Microsoft.NET\Framework64\v2.0.50727
107) ELSE IF EXIST "%windir%\Microsoft.NET\Framework64\v3.5" (
108 SET FRAMEWORKDIR=%windir%\Microsoft.NET\Framework64\v3.5
109) ELSE IF EXIST "%windir%\Microsoft.NET\Framework64\v4.0.30319" (
110 SET FRAMEWORKDIR=%windir%\Microsoft.NET\Framework64\v4.0.30319
111) ELSE IF EXIST "%windir%\Microsoft.NET\Framework\v2.0.50727" (
112 SET FRAMEWORKDIR=%windir%\Microsoft.NET\Framework\v2.0.50727
113) ELSE IF EXIST "%windir%\Microsoft.NET\Framework\v3.5" (
114 SET FRAMEWORKDIR=%windir%\Microsoft.NET\Framework\v3.5
115) ELSE IF EXIST "%windir%\Microsoft.NET\Framework\v4.0.30319" (
116 SET FRAMEWORKDIR=%windir%\Microsoft.NET\Framework\v4.0.30319
117) ELSE (
118 ECHO No suitable version of the .NET Framework appears to be installed.
119 GOTO errors
120)
121
122%_VECHO% FrameworkDir = '%FRAMEWORKDIR%'
123
124IF NOT EXIST "%FRAMEWORKDIR%\csc.exe" (
125 ECHO The file "%FRAMEWORKDIR%\csc.exe" is missing.
126 GOTO errors
127)
128
mistachkin6e5688d2017-02-27 17:16:27 +0000129CALL :fn_PrependToPath FRAMEWORKDIR
mistachkin80372ae2015-10-09 17:36:06 +0000130
131:skip_addToPath
132
mistachkin5b663502015-10-10 23:39:55 +0000133IF NOT EXIST "%TEMP%\GetFile.exe" (
134 %__ECHO% csc.exe "/out:%TEMP%\GetFile.exe" /target:exe "%TOOLS%\GetFile.cs"
mistachkin80372ae2015-10-09 17:36:06 +0000135
mistachkin5b663502015-10-10 23:39:55 +0000136 IF ERRORLEVEL 1 (
137 ECHO Compilation of "%TOOLS%\GetFile.cs" failed.
138 GOTO errors
139 )
mistachkin80372ae2015-10-09 17:36:06 +0000140)
141
142FOR %%F IN (%TCLKIT_FILES%) DO (
mistachkincc730482015-10-10 00:53:28 +0000143 IF NOT EXIST "%TEMP%\%%F" (
mistachkin80372ae2015-10-09 17:36:06 +0000144 %__ECHO% "%TEMP%\GetFile.exe" "%TCLKIT_URI%%%F"
145
146 IF ERRORLEVEL 1 (
147 ECHO Download of "%%F" from "%TCLKIT_URI%" failed.
148 GOTO errors
149 )
150 )
151)
152
mistachkin598f7c52016-09-17 22:46:13 +0000153IF DEFINED TCLKIT_NOENV GOTO skip_sdkUnZip
mistachkin80372ae2015-10-09 17:36:06 +0000154IF DEFINED TCLKIT_NOSDK GOTO skip_sdkUnZip
155
156IF NOT EXIST "%TEMP%\%TCLKIT_SDK%" (
157 %__ECHO% MKDIR "%TEMP%\%TCLKIT_SDK%"
158
159 IF ERRORLEVEL 1 (
160 ECHO Could not create directory "%TEMP%\%TCLKIT_SDK%".
161 GOTO errors
162 )
163)
164
mistachkincc730482015-10-10 00:53:28 +0000165%__ECHO% "%TEMP%\unzip.exe" -n "%TEMP%\%TCLKIT_SDK_ZIP%" -d "%TEMP%\%TCLKIT_SDK%"
mistachkin80372ae2015-10-09 17:36:06 +0000166
167IF ERRORLEVEL 1 (
168 ECHO Could not unzip "%TEMP%\%TCLKIT_SDK_ZIP%" to "%TEMP%\%TCLKIT_SDK%".
169 GOTO errors
170)
171
172:skip_sdkUnZip
173
mistachkin598f7c52016-09-17 22:46:13 +0000174IF DEFINED TCLKIT_NOENV GOTO skip_sdkEnvironment
175
mistachkin80372ae2015-10-09 17:36:06 +0000176%__ECHO% ECHO SET TCLSH_CMD=%TEMP%\%TCLKIT_EXE%%OVERWRITE%"%ROOT%\SetTclKitEnv.bat"
177
178IF DEFINED TCLKIT_NOSDK GOTO skip_sdkVariables
179
180%__ECHO% ECHO SET TCLINCDIR=%TEMP%\%TCLKIT_SDK%\include%APPEND%"%ROOT%\SetTclKitEnv.bat"
181%__ECHO% ECHO SET TCLLIBDIR=%TEMP%\%TCLKIT_SDK%\lib%APPEND%"%ROOT%\SetTclKitEnv.bat"
mistachkin88739962015-10-14 23:04:08 +0000182%__ECHO% ECHO SET LIBTCLPATH=%TEMP%\%TCLKIT_SDK%\lib%APPEND%"%ROOT%\SetTclKitEnv.bat"
mistachkin80372ae2015-10-09 17:36:06 +0000183%__ECHO% ECHO SET LIBTCL=%TCLKIT_LIB%%APPEND%"%ROOT%\SetTclKitEnv.bat"
mistachkin5b663502015-10-10 23:39:55 +0000184%__ECHO% ECHO SET LIBTCLSTUB=%TCLKIT_LIB_STUB%%APPEND%"%ROOT%\SetTclKitEnv.bat"
mistachkin80372ae2015-10-09 17:36:06 +0000185
186:skip_sdkVariables
187
mistachkincc730482015-10-10 00:53:28 +0000188ECHO.
189ECHO Wrote "%ROOT%\SetTclKitEnv.bat".
190ECHO Please run it to set the necessary Tcl environment variables.
191ECHO.
192
mistachkin598f7c52016-09-17 22:46:13 +0000193:skip_sdkEnvironment
194
mistachkin80372ae2015-10-09 17:36:06 +0000195GOTO no_errors
196
197:fn_TclKitX86Variables
mistachkin7751deb2017-07-28 22:22:15 +0000198 REM
199 REM NOTE: By default, use latest available version of the TclKit SDK
200 REM for x86. However, the "default" TclKit executable for x86
201 REM is still used here because it is the only one "well-known"
202 REM to be available for download.
203 REM
mistachkin80372ae2015-10-09 17:36:06 +0000204 IF NOT DEFINED TCLKIT_PATCHLEVEL (
mistachkin7751deb2017-07-28 22:22:15 +0000205 SET TCLKIT_PATCHLEVEL=8.6.6
mistachkin80372ae2015-10-09 17:36:06 +0000206 )
mistachkin5b663502015-10-10 23:39:55 +0000207 SET TCLKIT_VERSION=%TCLKIT_PATCHLEVEL:.=%
208 SET TCLKIT_VERSION=%TCLKIT_VERSION:~0,2%
mistachkin7751deb2017-07-28 22:22:15 +0000209 REM SET TCLKIT_EXE=tclkit-%TCLKIT_PATCHLEVEL%.exe
210 SET TCLKIT_EXE=tclkit-8.6.4.exe
mistachkin80372ae2015-10-09 17:36:06 +0000211 SET TCLKIT_LIB=libtclkit%TCLKIT_PATCHLEVEL:.=%.lib
mistachkin5b663502015-10-10 23:39:55 +0000212 SET TCLKIT_LIB_STUB=libtclstub%TCLKIT_VERSION:.=%.a
mistachkin80372ae2015-10-09 17:36:06 +0000213 SET TCLKIT_SDK=libtclkit-sdk-x86-%TCLKIT_PATCHLEVEL%
214 SET TCLKIT_SDK_ZIP=%TCLKIT_SDK%.zip
mistachkincf9fb7e2015-10-12 03:44:39 +0000215 SET TCLKIT_FILES=%TCLKIT_EXE%
mistachkin598f7c52016-09-17 22:46:13 +0000216 IF NOT DEFINED TCLKIT_NOENV IF NOT DEFINED TCLKIT_NOSDK (
mistachkincf9fb7e2015-10-12 03:44:39 +0000217 SET TCLKIT_FILES=%TCLKIT_FILES% unzip.exe %TCLKIT_SDK_ZIP%
218 )
mistachkin80372ae2015-10-09 17:36:06 +0000219 GOTO :EOF
220
221:fn_TclKitX64Variables
mistachkin7751deb2017-07-28 22:22:15 +0000222 REM
223 REM NOTE: By default, use latest available version of the TclKit SDK
224 REM for x64. 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
mistachkin80372ae2015-10-09 17:36:06 +0000228 IF NOT DEFINED TCLKIT_PATCHLEVEL (
mistachkin7751deb2017-07-28 22:22:15 +0000229 SET TCLKIT_PATCHLEVEL=8.6.6
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%
mistachkin7751deb2017-07-28 22:22:15 +0000233 REM SET TCLKIT_EXE=tclkit-%TCLKIT_PATCHLEVEL%.exe
234 SET TCLKIT_EXE=tclkit-8.6.4.exe
mistachkin80372ae2015-10-09 17:36:06 +0000235 SET TCLKIT_LIB=libtclkit%TCLKIT_PATCHLEVEL:.=%.lib
mistachkin5b663502015-10-10 23:39:55 +0000236 SET TCLKIT_LIB_STUB=libtclstub%TCLKIT_VERSION:.=%.a
mistachkin80372ae2015-10-09 17:36:06 +0000237 SET TCLKIT_SDK=libtclkit-sdk-x64-%TCLKIT_PATCHLEVEL%
238 SET TCLKIT_SDK_ZIP=%TCLKIT_SDK%.zip
mistachkincf9fb7e2015-10-12 03:44:39 +0000239 SET TCLKIT_FILES=%TCLKIT_EXE%
mistachkin598f7c52016-09-17 22:46:13 +0000240 IF NOT DEFINED TCLKIT_NOENV IF NOT DEFINED TCLKIT_NOSDK (
mistachkincf9fb7e2015-10-12 03:44:39 +0000241 SET TCLKIT_FILES=%TCLKIT_FILES% unzip.exe %TCLKIT_SDK_ZIP%
242 )
mistachkin80372ae2015-10-09 17:36:06 +0000243 GOTO :EOF
244
245:fn_UnquoteVariable
246 IF NOT DEFINED %1 GOTO :EOF
247 SETLOCAL
248 SET __ECHO_CMD=ECHO %%%1%%
249 FOR /F "delims=" %%V IN ('%__ECHO_CMD%') DO (
250 SET VALUE=%%V
251 )
252 SET VALUE=%VALUE:"=%
253 REM "
254 ENDLOCAL && SET %1=%VALUE%
255 GOTO :EOF
256
mistachkin6e5688d2017-02-27 17:16:27 +0000257:fn_PrependToPath
258 IF NOT DEFINED %1 GOTO :EOF
259 SETLOCAL
260 SET __ECHO_CMD=ECHO %%%1%%
261 FOR /F "delims=" %%V IN ('%__ECHO_CMD%') DO (
262 SET VALUE=%%V
263 )
264 SET VALUE=%VALUE:"=%
265 REM "
266 ENDLOCAL && SET PATH=%VALUE%;%PATH%
267 GOTO :EOF
268
mistachkin80372ae2015-10-09 17:36:06 +0000269:fn_ResetErrorLevel
270 VERIFY > NUL
271 GOTO :EOF
272
273:fn_SetErrorLevel
274 VERIFY MAYBE 2> NUL
275 GOTO :EOF
276
277:usage
278 ECHO.
279 ECHO Usage: %~nx0 ^<processor^>
280 ECHO.
281 ECHO The only supported values for processor are "x86" and "x64".
282 GOTO errors
283
284:errors
285 CALL :fn_SetErrorLevel
286 ENDLOCAL
287 ECHO.
288 ECHO Failure, errors were encountered.
289 GOTO end_of_file
290
291:no_errors
292 CALL :fn_ResetErrorLevel
293 ENDLOCAL
294 ECHO.
295 ECHO Success, no errors were encountered.
296 GOTO end_of_file
297
298:end_of_file
299%__ECHO% EXIT /B %ERRORLEVEL%