blob: 84235cf97a0815902e5670e348b3f3b850142b75 [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%'
80%_VECHO% TclKitNoSdk = '%TCLKIT_NOSDK%'
81%_VECHO% TclKitExe = '%TCLKIT_EXE%'
82%_VECHO% TclKitLib = '%TCLKIT_LIB%'
mistachkin5b663502015-10-10 23:39:55 +000083%_VECHO% TclKitLibStub = '%TCLKIT_LIB_STUB%'
mistachkin80372ae2015-10-09 17:36:06 +000084%_VECHO% TclKitSdk = '%TCLKIT_SDK%'
85%_VECHO% TclKitSdkZip = '%TCLKIT_SDK_ZIP%'
86%_VECHO% TclKitFiles = '%TCLKIT_FILES%'
87
88CALL :fn_ResetErrorLevel
89
90FOR %%T IN (csc.exe) DO (
91 SET %%T_PATH=%%~dp$PATH:T
92)
93
94%_VECHO% Csc.exe_PATH = '%csc.exe_PATH%'
95
96IF DEFINED csc.exe_PATH (
97 GOTO skip_addToPath
98)
99
100IF DEFINED FRAMEWORKDIR (
101 REM Use the existing .NET Framework directory...
102) ELSE IF EXIST "%windir%\Microsoft.NET\Framework64\v2.0.50727" (
103 SET FRAMEWORKDIR=%windir%\Microsoft.NET\Framework64\v2.0.50727
104) ELSE IF EXIST "%windir%\Microsoft.NET\Framework64\v3.5" (
105 SET FRAMEWORKDIR=%windir%\Microsoft.NET\Framework64\v3.5
106) ELSE IF EXIST "%windir%\Microsoft.NET\Framework64\v4.0.30319" (
107 SET FRAMEWORKDIR=%windir%\Microsoft.NET\Framework64\v4.0.30319
108) ELSE IF EXIST "%windir%\Microsoft.NET\Framework\v2.0.50727" (
109 SET FRAMEWORKDIR=%windir%\Microsoft.NET\Framework\v2.0.50727
110) ELSE IF EXIST "%windir%\Microsoft.NET\Framework\v3.5" (
111 SET FRAMEWORKDIR=%windir%\Microsoft.NET\Framework\v3.5
112) ELSE IF EXIST "%windir%\Microsoft.NET\Framework\v4.0.30319" (
113 SET FRAMEWORKDIR=%windir%\Microsoft.NET\Framework\v4.0.30319
114) ELSE (
115 ECHO No suitable version of the .NET Framework appears to be installed.
116 GOTO errors
117)
118
119%_VECHO% FrameworkDir = '%FRAMEWORKDIR%'
120
121IF NOT EXIST "%FRAMEWORKDIR%\csc.exe" (
122 ECHO The file "%FRAMEWORKDIR%\csc.exe" is missing.
123 GOTO errors
124)
125
126SET PATH=%FRAMEWORKDIR%;%PATH%
127
128:skip_addToPath
129
mistachkin5b663502015-10-10 23:39:55 +0000130IF NOT EXIST "%TEMP%\GetFile.exe" (
131 %__ECHO% csc.exe "/out:%TEMP%\GetFile.exe" /target:exe "%TOOLS%\GetFile.cs"
mistachkin80372ae2015-10-09 17:36:06 +0000132
mistachkin5b663502015-10-10 23:39:55 +0000133 IF ERRORLEVEL 1 (
134 ECHO Compilation of "%TOOLS%\GetFile.cs" failed.
135 GOTO errors
136 )
mistachkin80372ae2015-10-09 17:36:06 +0000137)
138
139FOR %%F IN (%TCLKIT_FILES%) DO (
mistachkincc730482015-10-10 00:53:28 +0000140 IF NOT EXIST "%TEMP%\%%F" (
mistachkin80372ae2015-10-09 17:36:06 +0000141 %__ECHO% "%TEMP%\GetFile.exe" "%TCLKIT_URI%%%F"
142
143 IF ERRORLEVEL 1 (
144 ECHO Download of "%%F" from "%TCLKIT_URI%" failed.
145 GOTO errors
146 )
147 )
148)
149
150IF DEFINED TCLKIT_NOSDK GOTO skip_sdkUnZip
151
152IF NOT EXIST "%TEMP%\%TCLKIT_SDK%" (
153 %__ECHO% MKDIR "%TEMP%\%TCLKIT_SDK%"
154
155 IF ERRORLEVEL 1 (
156 ECHO Could not create directory "%TEMP%\%TCLKIT_SDK%".
157 GOTO errors
158 )
159)
160
mistachkincc730482015-10-10 00:53:28 +0000161%__ECHO% "%TEMP%\unzip.exe" -n "%TEMP%\%TCLKIT_SDK_ZIP%" -d "%TEMP%\%TCLKIT_SDK%"
mistachkin80372ae2015-10-09 17:36:06 +0000162
163IF ERRORLEVEL 1 (
164 ECHO Could not unzip "%TEMP%\%TCLKIT_SDK_ZIP%" to "%TEMP%\%TCLKIT_SDK%".
165 GOTO errors
166)
167
168:skip_sdkUnZip
169
170%__ECHO% ECHO SET TCLSH_CMD=%TEMP%\%TCLKIT_EXE%%OVERWRITE%"%ROOT%\SetTclKitEnv.bat"
171
172IF DEFINED TCLKIT_NOSDK GOTO skip_sdkVariables
173
174%__ECHO% ECHO SET TCLINCDIR=%TEMP%\%TCLKIT_SDK%\include%APPEND%"%ROOT%\SetTclKitEnv.bat"
175%__ECHO% ECHO SET TCLLIBDIR=%TEMP%\%TCLKIT_SDK%\lib%APPEND%"%ROOT%\SetTclKitEnv.bat"
mistachkin88739962015-10-14 23:04:08 +0000176%__ECHO% ECHO SET LIBTCLPATH=%TEMP%\%TCLKIT_SDK%\lib%APPEND%"%ROOT%\SetTclKitEnv.bat"
mistachkin80372ae2015-10-09 17:36:06 +0000177%__ECHO% ECHO SET LIBTCL=%TCLKIT_LIB%%APPEND%"%ROOT%\SetTclKitEnv.bat"
mistachkin5b663502015-10-10 23:39:55 +0000178%__ECHO% ECHO SET LIBTCLSTUB=%TCLKIT_LIB_STUB%%APPEND%"%ROOT%\SetTclKitEnv.bat"
mistachkin80372ae2015-10-09 17:36:06 +0000179
180:skip_sdkVariables
181
mistachkincc730482015-10-10 00:53:28 +0000182ECHO.
183ECHO Wrote "%ROOT%\SetTclKitEnv.bat".
184ECHO Please run it to set the necessary Tcl environment variables.
185ECHO.
186
mistachkin80372ae2015-10-09 17:36:06 +0000187GOTO no_errors
188
189:fn_TclKitX86Variables
190 IF NOT DEFINED TCLKIT_PATCHLEVEL (
191 SET TCLKIT_PATCHLEVEL=8.6.4
192 )
mistachkin5b663502015-10-10 23:39:55 +0000193 SET TCLKIT_VERSION=%TCLKIT_PATCHLEVEL:.=%
194 SET TCLKIT_VERSION=%TCLKIT_VERSION:~0,2%
mistachkin80372ae2015-10-09 17:36:06 +0000195 SET TCLKIT_EXE=tclkit-%TCLKIT_PATCHLEVEL%.exe
196 SET TCLKIT_LIB=libtclkit%TCLKIT_PATCHLEVEL:.=%.lib
mistachkin5b663502015-10-10 23:39:55 +0000197 SET TCLKIT_LIB_STUB=libtclstub%TCLKIT_VERSION:.=%.a
mistachkin80372ae2015-10-09 17:36:06 +0000198 SET TCLKIT_SDK=libtclkit-sdk-x86-%TCLKIT_PATCHLEVEL%
199 SET TCLKIT_SDK_ZIP=%TCLKIT_SDK%.zip
mistachkincf9fb7e2015-10-12 03:44:39 +0000200 SET TCLKIT_FILES=%TCLKIT_EXE%
201 IF NOT DEFINED TCLKIT_NOSDK (
202 SET TCLKIT_FILES=%TCLKIT_FILES% unzip.exe %TCLKIT_SDK_ZIP%
203 )
mistachkin80372ae2015-10-09 17:36:06 +0000204 GOTO :EOF
205
206:fn_TclKitX64Variables
207 IF NOT DEFINED TCLKIT_PATCHLEVEL (
208 REM
209 REM NOTE: By default, use latest available version of the TclKit SDK
210 REM for x64. However, the "default" TclKit executable for x86
211 REM is still used here because it is the only one "well-known"
212 REM to be available for download.
213 REM
214 SET TCLKIT_PATCHLEVEL=8.6.3
215 SET TCLKIT_EXE=tclkit-8.6.4.exe
216 ) ELSE (
217 SET TCLKIT_EXE=tclkit-%TCLKIT_PATCHLEVEL%.exe
218 )
mistachkin5b663502015-10-10 23:39:55 +0000219 SET TCLKIT_VERSION=%TCLKIT_PATCHLEVEL:.=%
220 SET TCLKIT_VERSION=%TCLKIT_VERSION:~0,2%
mistachkin80372ae2015-10-09 17:36:06 +0000221 SET TCLKIT_LIB=libtclkit%TCLKIT_PATCHLEVEL:.=%.lib
mistachkin5b663502015-10-10 23:39:55 +0000222 SET TCLKIT_LIB_STUB=libtclstub%TCLKIT_VERSION:.=%.a
mistachkin80372ae2015-10-09 17:36:06 +0000223 SET TCLKIT_SDK=libtclkit-sdk-x64-%TCLKIT_PATCHLEVEL%
224 SET TCLKIT_SDK_ZIP=%TCLKIT_SDK%.zip
mistachkincf9fb7e2015-10-12 03:44:39 +0000225 SET TCLKIT_FILES=%TCLKIT_EXE%
226 IF NOT DEFINED TCLKIT_NOSDK (
227 SET TCLKIT_FILES=%TCLKIT_FILES% unzip.exe %TCLKIT_SDK_ZIP%
228 )
mistachkin80372ae2015-10-09 17:36:06 +0000229 GOTO :EOF
230
231:fn_UnquoteVariable
232 IF NOT DEFINED %1 GOTO :EOF
233 SETLOCAL
234 SET __ECHO_CMD=ECHO %%%1%%
235 FOR /F "delims=" %%V IN ('%__ECHO_CMD%') DO (
236 SET VALUE=%%V
237 )
238 SET VALUE=%VALUE:"=%
239 REM "
240 ENDLOCAL && SET %1=%VALUE%
241 GOTO :EOF
242
243:fn_ResetErrorLevel
244 VERIFY > NUL
245 GOTO :EOF
246
247:fn_SetErrorLevel
248 VERIFY MAYBE 2> NUL
249 GOTO :EOF
250
251:usage
252 ECHO.
253 ECHO Usage: %~nx0 ^<processor^>
254 ECHO.
255 ECHO The only supported values for processor are "x86" and "x64".
256 GOTO errors
257
258:errors
259 CALL :fn_SetErrorLevel
260 ENDLOCAL
261 ECHO.
262 ECHO Failure, errors were encountered.
263 GOTO end_of_file
264
265:no_errors
266 CALL :fn_ResetErrorLevel
267 ENDLOCAL
268 ECHO.
269 ECHO Success, no errors were encountered.
270 GOTO end_of_file
271
272:end_of_file
273%__ECHO% EXIT /B %ERRORLEVEL%