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
32SET PROCESSOR=%PROCESSOR:AMD64=x64%
33
34%_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
66IF NOT DEFINED TCLKIT_URI (
67  SET TCLKIT_URI=https://tclsh.com/
68)
69
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
80%_VECHO% TclKitVersion = '%TCLKIT_VERSION%'
81%_VECHO% TclKitPatchLevel = '%TCLKIT_PATCHLEVEL%'
82%_VECHO% TclKitNoEnv = '%TCLKIT_NOENV%'
83%_VECHO% TclKitNoSdk = '%TCLKIT_NOSDK%'
84%_VECHO% TclKitExe = '%TCLKIT_EXE%'
85%_VECHO% TclKitLib = '%TCLKIT_LIB%'
86%_VECHO% TclKitLibStub = '%TCLKIT_LIB_STUB%'
87%_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
129CALL :fn_PrependToPath FRAMEWORKDIR
130
131:skip_addToPath
132
133IF NOT EXIST "%TEMP%\GetFile.exe" (
134  %__ECHO% csc.exe "/out:%TEMP%\GetFile.exe" /target:exe "%TOOLS%\GetFile.cs"
135
136  IF ERRORLEVEL 1 (
137    ECHO Compilation of "%TOOLS%\GetFile.cs" failed.
138    GOTO errors
139  )
140)
141
142FOR %%F IN (%TCLKIT_FILES%) DO (
143  IF NOT EXIST "%TEMP%\%%F" (
144    %__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
153IF DEFINED TCLKIT_NOENV GOTO skip_sdkUnZip
154IF 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
165%__ECHO% "%TEMP%\unzip.exe" -n "%TEMP%\%TCLKIT_SDK_ZIP%" -d "%TEMP%\%TCLKIT_SDK%"
166
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
174IF DEFINED TCLKIT_NOENV GOTO skip_sdkEnvironment
175
176%__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"
182%__ECHO% ECHO SET LIBTCLPATH=%TEMP%\%TCLKIT_SDK%\lib%APPEND%"%ROOT%\SetTclKitEnv.bat"
183%__ECHO% ECHO SET LIBTCL=%TCLKIT_LIB%%APPEND%"%ROOT%\SetTclKitEnv.bat"
184%__ECHO% ECHO SET LIBTCLSTUB=%TCLKIT_LIB_STUB%%APPEND%"%ROOT%\SetTclKitEnv.bat"
185
186:skip_sdkVariables
187
188ECHO.
189ECHO Wrote "%ROOT%\SetTclKitEnv.bat".
190ECHO Please run it to set the necessary Tcl environment variables.
191ECHO.
192
193:skip_sdkEnvironment
194
195GOTO no_errors
196
197:fn_TclKitX86Variables
198  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
204  IF NOT DEFINED TCLKIT_PATCHLEVEL (
205    SET TCLKIT_PATCHLEVEL=8.6.6
206  )
207  SET TCLKIT_VERSION=%TCLKIT_PATCHLEVEL:.=%
208  SET TCLKIT_VERSION=%TCLKIT_VERSION:~0,2%
209  REM SET TCLKIT_EXE=tclkit-%TCLKIT_PATCHLEVEL%.exe
210  SET TCLKIT_EXE=tclkit-8.6.4.exe
211  SET TCLKIT_LIB=libtclkit%TCLKIT_PATCHLEVEL:.=%.lib
212  SET TCLKIT_LIB_STUB=libtclstub%TCLKIT_VERSION:.=%.a
213  SET TCLKIT_SDK=libtclkit-sdk-x86-%TCLKIT_PATCHLEVEL%
214  SET TCLKIT_SDK_ZIP=%TCLKIT_SDK%.zip
215  SET TCLKIT_FILES=%TCLKIT_EXE%
216  IF NOT DEFINED TCLKIT_NOENV IF NOT DEFINED TCLKIT_NOSDK (
217    SET TCLKIT_FILES=%TCLKIT_FILES% unzip.exe %TCLKIT_SDK_ZIP%
218  )
219  GOTO :EOF
220
221:fn_TclKitX64Variables
222  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
228  IF NOT DEFINED TCLKIT_PATCHLEVEL (
229    SET TCLKIT_PATCHLEVEL=8.6.6
230  )
231  SET TCLKIT_VERSION=%TCLKIT_PATCHLEVEL:.=%
232  SET TCLKIT_VERSION=%TCLKIT_VERSION:~0,2%
233  REM SET TCLKIT_EXE=tclkit-%TCLKIT_PATCHLEVEL%.exe
234  SET TCLKIT_EXE=tclkit-8.6.4.exe
235  SET TCLKIT_LIB=libtclkit%TCLKIT_PATCHLEVEL:.=%.lib
236  SET TCLKIT_LIB_STUB=libtclstub%TCLKIT_VERSION:.=%.a
237  SET TCLKIT_SDK=libtclkit-sdk-x64-%TCLKIT_PATCHLEVEL%
238  SET TCLKIT_SDK_ZIP=%TCLKIT_SDK%.zip
239  SET TCLKIT_FILES=%TCLKIT_EXE%
240  IF NOT DEFINED TCLKIT_NOENV IF NOT DEFINED TCLKIT_NOSDK (
241    SET TCLKIT_FILES=%TCLKIT_FILES% unzip.exe %TCLKIT_SDK_ZIP%
242  )
243  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
257: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
269: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%
300