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 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 64IF NOT DEFINED TCLKIT_URI ( 65 SET TCLKIT_URI=https://tclsh.com/ 66) 67 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 78%_VECHO% TclKitVersion = '%TCLKIT_VERSION%' 79%_VECHO% TclKitPatchLevel = '%TCLKIT_PATCHLEVEL%' 80%_VECHO% TclKitNoEnv = '%TCLKIT_NOENV%' 81%_VECHO% TclKitNoSdk = '%TCLKIT_NOSDK%' 82%_VECHO% TclKitExe = '%TCLKIT_EXE%' 83%_VECHO% TclKitLib = '%TCLKIT_LIB%' 84%_VECHO% TclKitLibStub = '%TCLKIT_LIB_STUB%' 85%_VECHO% TclKitSdk = '%TCLKIT_SDK%' 86%_VECHO% TclKitSdkZip = '%TCLKIT_SDK_ZIP%' 87%_VECHO% TclKitFiles = '%TCLKIT_FILES%' 88 89CALL :fn_ResetErrorLevel 90 91FOR %%T IN (csc.exe) DO ( 92 SET %%T_PATH=%%~dp$PATH:T 93) 94 95%_VECHO% Csc.exe_PATH = '%csc.exe_PATH%' 96 97IF DEFINED csc.exe_PATH ( 98 GOTO skip_addToPath 99) 100 101IF DEFINED FRAMEWORKDIR ( 102 REM Use the existing .NET Framework directory... 103) ELSE IF EXIST "%windir%\Microsoft.NET\Framework64\v2.0.50727" ( 104 SET FRAMEWORKDIR=%windir%\Microsoft.NET\Framework64\v2.0.50727 105) ELSE IF EXIST "%windir%\Microsoft.NET\Framework64\v3.5" ( 106 SET FRAMEWORKDIR=%windir%\Microsoft.NET\Framework64\v3.5 107) ELSE IF EXIST "%windir%\Microsoft.NET\Framework64\v4.0.30319" ( 108 SET FRAMEWORKDIR=%windir%\Microsoft.NET\Framework64\v4.0.30319 109) ELSE IF EXIST "%windir%\Microsoft.NET\Framework\v2.0.50727" ( 110 SET FRAMEWORKDIR=%windir%\Microsoft.NET\Framework\v2.0.50727 111) ELSE IF EXIST "%windir%\Microsoft.NET\Framework\v3.5" ( 112 SET FRAMEWORKDIR=%windir%\Microsoft.NET\Framework\v3.5 113) ELSE IF EXIST "%windir%\Microsoft.NET\Framework\v4.0.30319" ( 114 SET FRAMEWORKDIR=%windir%\Microsoft.NET\Framework\v4.0.30319 115) ELSE ( 116 ECHO No suitable version of the .NET Framework appears to be installed. 117 GOTO errors 118) 119 120%_VECHO% FrameworkDir = '%FRAMEWORKDIR%' 121 122IF NOT EXIST "%FRAMEWORKDIR%\csc.exe" ( 123 ECHO The file "%FRAMEWORKDIR%\csc.exe" is missing. 124 GOTO errors 125) 126 127CALL :fn_PrependToPath FRAMEWORKDIR 128 129:skip_addToPath 130 131IF NOT EXIST "%TEMP%\GetFile.exe" ( 132 %__ECHO% csc.exe "/out:%TEMP%\GetFile.exe" /target:exe "%TOOLS%\GetFile.cs" 133 134 IF ERRORLEVEL 1 ( 135 ECHO Compilation of "%TOOLS%\GetFile.cs" failed. 136 GOTO errors 137 ) 138) 139 140FOR %%F IN (%TCLKIT_FILES%) DO ( 141 IF NOT EXIST "%TEMP%\%%F" ( 142 %__ECHO% "%TEMP%\GetFile.exe" "%TCLKIT_URI%%%F" 143 144 IF ERRORLEVEL 1 ( 145 ECHO Download of "%%F" from "%TCLKIT_URI%" failed. 146 GOTO errors 147 ) 148 ) 149) 150 151IF DEFINED TCLKIT_NOENV GOTO skip_sdkUnZip 152IF DEFINED TCLKIT_NOSDK GOTO skip_sdkUnZip 153 154IF NOT EXIST "%TEMP%\%TCLKIT_SDK%" ( 155 %__ECHO% MKDIR "%TEMP%\%TCLKIT_SDK%" 156 157 IF ERRORLEVEL 1 ( 158 ECHO Could not create directory "%TEMP%\%TCLKIT_SDK%". 159 GOTO errors 160 ) 161) 162 163%__ECHO% "%TEMP%\unzip.exe" -n "%TEMP%\%TCLKIT_SDK_ZIP%" -d "%TEMP%\%TCLKIT_SDK%" 164 165IF ERRORLEVEL 1 ( 166 ECHO Could not unzip "%TEMP%\%TCLKIT_SDK_ZIP%" to "%TEMP%\%TCLKIT_SDK%". 167 GOTO errors 168) 169 170:skip_sdkUnZip 171 172IF DEFINED TCLKIT_NOENV GOTO skip_sdkEnvironment 173 174%__ECHO% ECHO SET TCLSH_CMD=%TEMP%\%TCLKIT_EXE%%OVERWRITE%"%ROOT%\SetTclKitEnv.bat" 175 176IF DEFINED TCLKIT_NOSDK GOTO skip_sdkVariables 177 178%__ECHO% ECHO SET TCLINCDIR=%TEMP%\%TCLKIT_SDK%\include%APPEND%"%ROOT%\SetTclKitEnv.bat" 179%__ECHO% ECHO SET TCLLIBDIR=%TEMP%\%TCLKIT_SDK%\lib%APPEND%"%ROOT%\SetTclKitEnv.bat" 180%__ECHO% ECHO SET LIBTCLPATH=%TEMP%\%TCLKIT_SDK%\lib%APPEND%"%ROOT%\SetTclKitEnv.bat" 181%__ECHO% ECHO SET LIBTCL=%TCLKIT_LIB%%APPEND%"%ROOT%\SetTclKitEnv.bat" 182%__ECHO% ECHO SET LIBTCLSTUB=%TCLKIT_LIB_STUB%%APPEND%"%ROOT%\SetTclKitEnv.bat" 183 184:skip_sdkVariables 185 186ECHO. 187ECHO Wrote "%ROOT%\SetTclKitEnv.bat". 188ECHO Please run it to set the necessary Tcl environment variables. 189ECHO. 190 191:skip_sdkEnvironment 192 193GOTO no_errors 194 195:fn_TclKitX86Variables 196 REM 197 REM NOTE: By default, use latest available version of the TclKit SDK 198 REM for x86. However, the "default" TclKit executable for x86 199 REM is still used here because it is the only one "well-known" 200 REM to be available for download. 201 REM 202 IF NOT DEFINED TCLKIT_PATCHLEVEL ( 203 SET TCLKIT_PATCHLEVEL=8.6.6 204 ) 205 SET TCLKIT_VERSION=%TCLKIT_PATCHLEVEL:.=% 206 SET TCLKIT_VERSION=%TCLKIT_VERSION:~0,2% 207 REM SET TCLKIT_EXE=tclkit-%TCLKIT_PATCHLEVEL%.exe 208 SET TCLKIT_EXE=tclkit-8.6.4.exe 209 SET TCLKIT_LIB=libtclkit%TCLKIT_PATCHLEVEL:.=%.lib 210 SET TCLKIT_LIB_STUB=libtclstub%TCLKIT_VERSION:.=%.a 211 SET TCLKIT_SDK=libtclkit-sdk-x86-%TCLKIT_PATCHLEVEL% 212 SET TCLKIT_SDK_ZIP=%TCLKIT_SDK%.zip 213 SET TCLKIT_FILES=%TCLKIT_EXE% 214 IF NOT DEFINED TCLKIT_NOENV IF NOT DEFINED TCLKIT_NOSDK ( 215 SET TCLKIT_FILES=%TCLKIT_FILES% unzip.exe %TCLKIT_SDK_ZIP% 216 ) 217 GOTO :EOF 218 219:fn_TclKitX64Variables 220 REM 221 REM NOTE: By default, use latest available version of the TclKit SDK 222 REM for x64. 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 SET TCLKIT_PATCHLEVEL=8.6.6 228 ) 229 SET TCLKIT_VERSION=%TCLKIT_PATCHLEVEL:.=% 230 SET TCLKIT_VERSION=%TCLKIT_VERSION:~0,2% 231 REM SET TCLKIT_EXE=tclkit-%TCLKIT_PATCHLEVEL%.exe 232 SET TCLKIT_EXE=tclkit-8.6.4.exe 233 SET TCLKIT_LIB=libtclkit%TCLKIT_PATCHLEVEL:.=%.lib 234 SET TCLKIT_LIB_STUB=libtclstub%TCLKIT_VERSION:.=%.a 235 SET TCLKIT_SDK=libtclkit-sdk-x64-%TCLKIT_PATCHLEVEL% 236 SET TCLKIT_SDK_ZIP=%TCLKIT_SDK%.zip 237 SET TCLKIT_FILES=%TCLKIT_EXE% 238 IF NOT DEFINED TCLKIT_NOENV IF NOT DEFINED TCLKIT_NOSDK ( 239 SET TCLKIT_FILES=%TCLKIT_FILES% unzip.exe %TCLKIT_SDK_ZIP% 240 ) 241 GOTO :EOF 242 243:fn_UnquoteVariable 244 IF NOT DEFINED %1 GOTO :EOF 245 SETLOCAL 246 SET __ECHO_CMD=ECHO %%%1%% 247 FOR /F "delims=" %%V IN ('%__ECHO_CMD%') DO ( 248 SET VALUE=%%V 249 ) 250 SET VALUE=%VALUE:"=% 251 REM " 252 ENDLOCAL && SET %1=%VALUE% 253 GOTO :EOF 254 255:fn_PrependToPath 256 IF NOT DEFINED %1 GOTO :EOF 257 SETLOCAL 258 SET __ECHO_CMD=ECHO %%%1%% 259 FOR /F "delims=" %%V IN ('%__ECHO_CMD%') DO ( 260 SET VALUE=%%V 261 ) 262 SET VALUE=%VALUE:"=% 263 REM " 264 ENDLOCAL && SET PATH=%VALUE%;%PATH% 265 GOTO :EOF 266 267:fn_ResetErrorLevel 268 VERIFY > NUL 269 GOTO :EOF 270 271:fn_SetErrorLevel 272 VERIFY MAYBE 2> NUL 273 GOTO :EOF 274 275:usage 276 ECHO. 277 ECHO Usage: %~nx0 ^<processor^> 278 ECHO. 279 ECHO The only supported values for processor are "x86" and "x64". 280 GOTO errors 281 282:errors 283 CALL :fn_SetErrorLevel 284 ENDLOCAL 285 ECHO. 286 ECHO Failure, errors were encountered. 287 GOTO end_of_file 288 289:no_errors 290 CALL :fn_ResetErrorLevel 291 ENDLOCAL 292 ECHO. 293 ECHO Success, no errors were encountered. 294 GOTO end_of_file 295 296:end_of_file 297%__ECHO% EXIT /B %ERRORLEVEL% 298