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 42IF NOT DEFINED ENVDIR ( 43 SET ENVDIR=%CD% 44) 45 46%_VECHO% EnvDir = '%ENVDIR%' 47 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 67IF NOT DEFINED TCLKIT_URI ( 68 SET TCLKIT_URI=https://urn.to/r/tclsh/ 69) 70 71%_VECHO% TclKitUri = '%TCLKIT_URI%' 72 73IF 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 85IF /I "%PROCESSOR%" == "x86" ( 86 CALL :fn_TclKitX86Variables 87 88 IF ERRORLEVEL 1 ( 89 GOTO errors 90 ) 91) ELSE IF /I "%PROCESSOR%" == "x64" ( 92 CALL :fn_TclKitX64Variables 93 94 IF ERRORLEVEL 1 ( 95 GOTO errors 96 ) 97) ELSE ( 98 GOTO usage 99) 100 101%_VECHO% TclKitVersion = '%TCLKIT_VERSION%' 102%_VECHO% TclKitPatchLevel = '%TCLKIT_PATCHLEVEL%' 103%_VECHO% TclKitExePatchLevel = '%TCLKIT_EXE_PATCHLEVEL%' 104%_VECHO% TclKitNoEnv = '%TCLKIT_NOENV%' 105%_VECHO% TclKitNoSdk = '%TCLKIT_NOSDK%' 106%_VECHO% TclKitExe = '%TCLKIT_EXE%' 107%_VECHO% TclKitLib = '%TCLKIT_LIB%' 108%_VECHO% TclKitLibStub = '%TCLKIT_LIB_STUB%' 109%_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 151CALL :fn_PrependToPath FRAMEWORKDIR 152 153:skip_addToPath 154 155IF NOT EXIST "%TEMP%\GetFile.exe" ( 156 %__ECHO% csc.exe "/out:%TEMP%\GetFile.exe" /target:exe "%TOOLS%\GetFile.cs" 157 158 IF ERRORLEVEL 1 ( 159 ECHO Compilation of "%TOOLS%\GetFile.cs" failed. 160 GOTO errors 161 ) 162) 163 164FOR %%F IN (%TCLKIT_FILES%) DO ( 165 IF NOT EXIST "%TEMP%\%%F" ( 166 %__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 175IF DEFINED TCLKIT_NOENV GOTO skip_sdkUnZip 176IF 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 187%__ECHO% "%TEMP%\unzip.exe" -n "%TEMP%\%TCLKIT_SDK_ZIP%" -d "%TEMP%\%TCLKIT_SDK%" 188 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 196IF DEFINED TCLKIT_NOENV GOTO skip_sdkEnvironment 197 198%__ECHO% ECHO SET TCLSH_CMD=%TEMP%\%TCLKIT_EXE%%OVERWRITE%"%ENVDIR%\SetTclKitEnv.bat" 199 200IF DEFINED TCLKIT_NOSDK GOTO skip_sdkVariables 201 202%__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" 207 208:skip_sdkVariables 209 210ECHO. 211ECHO Wrote "%ENVDIR%\SetTclKitEnv.bat". 212ECHO Please run it to set the necessary Tcl environment variables. 213ECHO. 214 215:skip_sdkEnvironment 216 217GOTO no_errors 218 219:fn_TclKitX86Variables 220 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 226 IF NOT DEFINED TCLKIT_PATCHLEVEL ( 227 ECHO The TCLKIT_PATCHLEVEL environment variable must be set first. 228 CALL :fn_SetErrorLevel 229 GOTO :EOF 230 ) 231 SET TCLKIT_VERSION=%TCLKIT_PATCHLEVEL:.=% 232 SET TCLKIT_VERSION=%TCLKIT_VERSION:~0,2% 233 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 ) 238 SET TCLKIT_LIB=libtclkit%TCLKIT_PATCHLEVEL:.=%.lib 239 SET TCLKIT_LIB_STUB=libtclstub%TCLKIT_VERSION:.=%.a 240 SET TCLKIT_SDK=libtclkit-sdk-x86-%TCLKIT_PATCHLEVEL% 241 SET TCLKIT_SDK_ZIP=%TCLKIT_SDK%.zip 242 SET TCLKIT_FILES=%TCLKIT_EXE% 243 IF NOT DEFINED TCLKIT_NOENV IF NOT DEFINED TCLKIT_NOSDK ( 244 SET TCLKIT_FILES=%TCLKIT_FILES% unzip.exe %TCLKIT_SDK_ZIP% 245 ) 246 GOTO :EOF 247 248:fn_TclKitX64Variables 249 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 255 IF NOT DEFINED TCLKIT_PATCHLEVEL ( 256 ECHO The TCLKIT_PATCHLEVEL environment variable must be set first. 257 CALL :fn_SetErrorLevel 258 GOTO :EOF 259 ) 260 SET TCLKIT_VERSION=%TCLKIT_PATCHLEVEL:.=% 261 SET TCLKIT_VERSION=%TCLKIT_VERSION:~0,2% 262 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 ) 267 SET TCLKIT_LIB=libtclkit%TCLKIT_PATCHLEVEL:.=%.lib 268 SET TCLKIT_LIB_STUB=libtclstub%TCLKIT_VERSION:.=%.a 269 SET TCLKIT_SDK=libtclkit-sdk-x64-%TCLKIT_PATCHLEVEL% 270 SET TCLKIT_SDK_ZIP=%TCLKIT_SDK%.zip 271 SET TCLKIT_FILES=%TCLKIT_EXE% 272 IF NOT DEFINED TCLKIT_NOENV IF NOT DEFINED TCLKIT_NOSDK ( 273 SET TCLKIT_FILES=%TCLKIT_FILES% unzip.exe %TCLKIT_SDK_ZIP% 274 ) 275 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 289: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 301: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% 332