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 _CECHO2 (SET _CECHO2=REM) 17IF NOT DEFINED _CECHO3 (SET _CECHO3=REM) 18IF NOT DEFINED _VECHO (SET _VECHO=REM) 19 20SET OVERWRITE=^> 21IF DEFINED __ECHO SET OVERWRITE=^^^> 22 23SET APPEND=^>^> 24IF DEFINED __ECHO SET APPEND=^^^>^^^> 25 26SET PROCESSOR=%1 27 28IF DEFINED PROCESSOR ( 29 CALL :fn_UnquoteVariable PROCESSOR 30) ELSE ( 31 GOTO usage 32) 33 34SET PROCESSOR=%PROCESSOR:AMD64=x64% 35 36%_VECHO% Processor = '%PROCESSOR%' 37 38SET DUMMY2=%2 39 40IF DEFINED DUMMY2 ( 41 GOTO usage 42) 43 44IF NOT DEFINED ENVDIR ( 45 SET ENVDIR=%CD% 46) 47 48%_VECHO% EnvDir = '%ENVDIR%' 49 50SET TOOLS=%~dp0 51SET TOOLS=%TOOLS:~0,-1% 52 53%_VECHO% Tools = '%TOOLS%' 54 55IF NOT DEFINED windir ( 56 ECHO The windir environment variable must be set first. 57 GOTO errors 58) 59 60%_VECHO% WinDir = '%windir%' 61 62IF NOT DEFINED TEMP ( 63 ECHO The TEMP environment variable must be set first. 64 GOTO errors 65) 66 67%_VECHO% Temp = '%TEMP%' 68 69IF NOT DEFINED TCLKIT_URI ( 70 SET TCLKIT_URI=https://urn.to/r/tclsh/ 71) 72 73%_VECHO% TclKitUri = '%TCLKIT_URI%' 74 75IF NOT DEFINED TCLKIT_PATCHLEVEL ( 76 SET TCLKIT_PATCHLEVEL=8.6.6 77) 78 79%_VECHO% TclKitPatchLevel = '%TCLKIT_PATCHLEVEL%' 80 81IF NOT DEFINED TCLKIT_EXE_PATCHLEVEL ( 82 SET TCLKIT_EXE_PATCHLEVEL=8.6.4 83) 84 85%_VECHO% TclKitExePatchLevel = '%TCLKIT_EXE_PATCHLEVEL%' 86 87IF /I "%PROCESSOR%" == "x86" ( 88 CALL :fn_TclKitX86Variables 89 90 IF ERRORLEVEL 1 ( 91 GOTO errors 92 ) 93) ELSE IF /I "%PROCESSOR%" == "x64" ( 94 CALL :fn_TclKitX64Variables 95 96 IF ERRORLEVEL 1 ( 97 GOTO errors 98 ) 99) ELSE ( 100 GOTO usage 101) 102 103%_VECHO% TclKitVersion = '%TCLKIT_VERSION%' 104%_VECHO% TclKitPatchLevel = '%TCLKIT_PATCHLEVEL%' 105%_VECHO% TclKitExePatchLevel = '%TCLKIT_EXE_PATCHLEVEL%' 106%_VECHO% TclKitNoEnv = '%TCLKIT_NOENV%' 107%_VECHO% TclKitNoSdk = '%TCLKIT_NOSDK%' 108%_VECHO% TclKitExe = '%TCLKIT_EXE%' 109%_VECHO% TclKitLib = '%TCLKIT_LIB%' 110%_VECHO% TclKitLibStub = '%TCLKIT_LIB_STUB%' 111%_VECHO% TclKitSdk = '%TCLKIT_SDK%' 112%_VECHO% TclKitSdkZip = '%TCLKIT_SDK_ZIP%' 113%_VECHO% TclKitFiles = '%TCLKIT_FILES%' 114 115CALL :fn_ResetErrorLevel 116 117FOR %%T IN (csc.exe) DO ( 118 SET %%T_PATH=%%~dp$PATH:T 119) 120 121%_VECHO% Csc.exe_PATH = '%csc.exe_PATH%' 122 123IF DEFINED csc.exe_PATH ( 124 GOTO skip_addToPath 125) 126 127IF DEFINED FRAMEWORKDIR ( 128 REM Use the existing .NET Framework directory... 129) ELSE IF EXIST "%windir%\Microsoft.NET\Framework64\v2.0.50727" ( 130 SET FRAMEWORKDIR=%windir%\Microsoft.NET\Framework64\v2.0.50727 131) ELSE IF EXIST "%windir%\Microsoft.NET\Framework64\v3.5" ( 132 SET FRAMEWORKDIR=%windir%\Microsoft.NET\Framework64\v3.5 133) ELSE IF EXIST "%windir%\Microsoft.NET\Framework64\v4.0.30319" ( 134 SET FRAMEWORKDIR=%windir%\Microsoft.NET\Framework64\v4.0.30319 135) ELSE IF EXIST "%windir%\Microsoft.NET\Framework\v2.0.50727" ( 136 SET FRAMEWORKDIR=%windir%\Microsoft.NET\Framework\v2.0.50727 137) ELSE IF EXIST "%windir%\Microsoft.NET\Framework\v3.5" ( 138 SET FRAMEWORKDIR=%windir%\Microsoft.NET\Framework\v3.5 139) ELSE IF EXIST "%windir%\Microsoft.NET\Framework\v4.0.30319" ( 140 SET FRAMEWORKDIR=%windir%\Microsoft.NET\Framework\v4.0.30319 141) ELSE ( 142 ECHO No suitable version of the .NET Framework appears to be installed. 143 GOTO errors 144) 145 146%_VECHO% FrameworkDir = '%FRAMEWORKDIR%' 147 148IF NOT EXIST "%FRAMEWORKDIR%\csc.exe" ( 149 ECHO The file "%FRAMEWORKDIR%\csc.exe" is missing. 150 GOTO errors 151) 152 153CALL :fn_PrependToPath FRAMEWORKDIR 154 155:skip_addToPath 156 157IF NOT EXIST "%TEMP%\GetFile.exe" ( 158 %__ECHO% csc.exe "/out:%TEMP%\GetFile.exe" /target:exe "%TOOLS%\GetFile.cs" 159 160 IF ERRORLEVEL 1 ( 161 ECHO Compilation of "%TOOLS%\GetFile.cs" failed. 162 GOTO errors 163 ) 164) 165 166FOR %%F IN (%TCLKIT_FILES%) DO ( 167 IF NOT EXIST "%TEMP%\%%F" ( 168 %__ECHO% "%TEMP%\GetFile.exe" "%TCLKIT_URI%%%F" 169 170 IF ERRORLEVEL 1 ( 171 ECHO Download of "%%F" from "%TCLKIT_URI%" failed. 172 GOTO errors 173 ) 174 ) 175) 176 177IF DEFINED TCLKIT_NOENV GOTO skip_sdkUnZip 178IF DEFINED TCLKIT_NOSDK GOTO skip_sdkUnZip 179 180IF NOT EXIST "%TEMP%\%TCLKIT_SDK%" ( 181 %__ECHO% MKDIR "%TEMP%\%TCLKIT_SDK%" 182 183 IF ERRORLEVEL 1 ( 184 ECHO Could not create directory "%TEMP%\%TCLKIT_SDK%". 185 GOTO errors 186 ) 187) 188 189%__ECHO% "%TEMP%\unzip.exe" -n "%TEMP%\%TCLKIT_SDK_ZIP%" -d "%TEMP%\%TCLKIT_SDK%" 190 191IF ERRORLEVEL 1 ( 192 ECHO Could not unzip "%TEMP%\%TCLKIT_SDK_ZIP%" to "%TEMP%\%TCLKIT_SDK%". 193 GOTO errors 194) 195 196:skip_sdkUnZip 197 198IF DEFINED TCLKIT_NOENV GOTO skip_sdkEnvironment 199 200%__ECHO% ECHO SET TCLSH_CMD=%TEMP%\%TCLKIT_EXE%%OVERWRITE%"%ENVDIR%\SetTclKitEnv.bat" 201 202IF DEFINED TCLKIT_NOSDK GOTO skip_sdkVariables 203 204%__ECHO% ECHO SET TCLINCDIR=%TEMP%\%TCLKIT_SDK%\include%APPEND%"%ENVDIR%\SetTclKitEnv.bat" 205%__ECHO% ECHO SET TCLLIBDIR=%TEMP%\%TCLKIT_SDK%\lib%APPEND%"%ENVDIR%\SetTclKitEnv.bat" 206%__ECHO% ECHO SET LIBTCLPATH=%TEMP%\%TCLKIT_SDK%\lib%APPEND%"%ENVDIR%\SetTclKitEnv.bat" 207%__ECHO% ECHO SET LIBTCL=%TCLKIT_LIB%%APPEND%"%ENVDIR%\SetTclKitEnv.bat" 208%__ECHO% ECHO SET LIBTCLSTUB=%TCLKIT_LIB_STUB%%APPEND%"%ENVDIR%\SetTclKitEnv.bat" 209 210:skip_sdkVariables 211 212ECHO. 213ECHO Wrote "%ENVDIR%\SetTclKitEnv.bat". 214ECHO Please run it to set the necessary Tcl environment variables. 215ECHO. 216 217:skip_sdkEnvironment 218 219GOTO no_errors 220 221:fn_TclKitX86Variables 222 REM 223 REM NOTE: By default, use latest available version of the TclKit SDK 224 REM for x86. 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 ECHO The TCLKIT_PATCHLEVEL environment variable must be set first. 230 CALL :fn_SetErrorLevel 231 GOTO :EOF 232 ) 233 SET TCLKIT_VERSION=%TCLKIT_PATCHLEVEL:.=% 234 SET TCLKIT_VERSION=%TCLKIT_VERSION:~0,2% 235 IF DEFINED TCLKIT_EXE_PATCHLEVEL ( 236 SET TCLKIT_EXE=tclkit-%TCLKIT_EXE_PATCHLEVEL%.exe 237 ) ELSE ( 238 SET TCLKIT_EXE=tclkit-%TCLKIT_PATCHLEVEL%.exe 239 ) 240 SET TCLKIT_LIB=libtclkit%TCLKIT_PATCHLEVEL:.=%.lib 241 SET TCLKIT_LIB_STUB=libtclstub%TCLKIT_VERSION:.=%.a 242 SET TCLKIT_SDK=libtclkit-sdk-x86-%TCLKIT_PATCHLEVEL% 243 SET TCLKIT_SDK_ZIP=%TCLKIT_SDK%.zip 244 SET TCLKIT_FILES=%TCLKIT_EXE% 245 IF NOT DEFINED TCLKIT_NOENV IF NOT DEFINED TCLKIT_NOSDK ( 246 SET TCLKIT_FILES=%TCLKIT_FILES% unzip.exe %TCLKIT_SDK_ZIP% 247 ) 248 GOTO :EOF 249 250:fn_TclKitX64Variables 251 REM 252 REM NOTE: By default, use latest available version of the TclKit SDK 253 REM for x64. However, the "default" TclKit executable for x86 254 REM is still used here because it is the only one "well-known" 255 REM to be available for download. 256 REM 257 IF NOT DEFINED TCLKIT_PATCHLEVEL ( 258 ECHO The TCLKIT_PATCHLEVEL environment variable must be set first. 259 CALL :fn_SetErrorLevel 260 GOTO :EOF 261 ) 262 SET TCLKIT_VERSION=%TCLKIT_PATCHLEVEL:.=% 263 SET TCLKIT_VERSION=%TCLKIT_VERSION:~0,2% 264 IF DEFINED TCLKIT_EXE_PATCHLEVEL ( 265 SET TCLKIT_EXE=tclkit-%TCLKIT_EXE_PATCHLEVEL%.exe 266 ) ELSE ( 267 SET TCLKIT_EXE=tclkit-%TCLKIT_PATCHLEVEL%.exe 268 ) 269 SET TCLKIT_LIB=libtclkit%TCLKIT_PATCHLEVEL:.=%.lib 270 SET TCLKIT_LIB_STUB=libtclstub%TCLKIT_VERSION:.=%.a 271 SET TCLKIT_SDK=libtclkit-sdk-x64-%TCLKIT_PATCHLEVEL% 272 SET TCLKIT_SDK_ZIP=%TCLKIT_SDK%.zip 273 SET TCLKIT_FILES=%TCLKIT_EXE% 274 IF NOT DEFINED TCLKIT_NOENV IF NOT DEFINED TCLKIT_NOSDK ( 275 SET TCLKIT_FILES=%TCLKIT_FILES% unzip.exe %TCLKIT_SDK_ZIP% 276 ) 277 GOTO :EOF 278 279:fn_UnquoteVariable 280 IF NOT DEFINED %1 GOTO :EOF 281 SETLOCAL 282 SET __ECHO_CMD=ECHO %%%1%% 283 FOR /F "delims=" %%V IN ('%__ECHO_CMD%') DO ( 284 SET VALUE=%%V 285 ) 286 SET VALUE=%VALUE:"=% 287 REM " 288 ENDLOCAL && SET %1=%VALUE% 289 GOTO :EOF 290 291:fn_PrependToPath 292 IF NOT DEFINED %1 GOTO :EOF 293 SETLOCAL 294 SET __ECHO_CMD=ECHO %%%1%% 295 FOR /F "delims=" %%V IN ('%__ECHO_CMD%') DO ( 296 SET VALUE=%%V 297 ) 298 SET VALUE=%VALUE:"=% 299 REM " 300 ENDLOCAL && SET PATH=%VALUE%;%PATH% 301 GOTO :EOF 302 303:fn_ResetErrorLevel 304 VERIFY > NUL 305 GOTO :EOF 306 307:fn_SetErrorLevel 308 VERIFY MAYBE 2> NUL 309 GOTO :EOF 310 311:usage 312 ECHO. 313 ECHO Usage: %~nx0 ^<processor^> 314 ECHO. 315 ECHO The only supported values for processor are "x86" and "x64". 316 GOTO errors 317 318:errors 319 CALL :fn_SetErrorLevel 320 ENDLOCAL 321 ECHO. 322 ECHO Failure, errors were encountered. 323 GOTO end_of_file 324 325:no_errors 326 CALL :fn_ResetErrorLevel 327 ENDLOCAL 328 ECHO. 329 ECHO Success, no errors were encountered. 330 GOTO end_of_file 331 332:end_of_file 333%__ECHO% EXIT /B %ERRORLEVEL% 334