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 127SET PATH=%FRAMEWORKDIR%;%PATH% 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 IF NOT DEFINED TCLKIT_PATCHLEVEL ( 197 SET TCLKIT_PATCHLEVEL=8.6.4 198 ) 199 SET TCLKIT_VERSION=%TCLKIT_PATCHLEVEL:.=% 200 SET TCLKIT_VERSION=%TCLKIT_VERSION:~0,2% 201 SET TCLKIT_EXE=tclkit-%TCLKIT_PATCHLEVEL%.exe 202 SET TCLKIT_LIB=libtclkit%TCLKIT_PATCHLEVEL:.=%.lib 203 SET TCLKIT_LIB_STUB=libtclstub%TCLKIT_VERSION:.=%.a 204 SET TCLKIT_SDK=libtclkit-sdk-x86-%TCLKIT_PATCHLEVEL% 205 SET TCLKIT_SDK_ZIP=%TCLKIT_SDK%.zip 206 SET TCLKIT_FILES=%TCLKIT_EXE% 207 IF NOT DEFINED TCLKIT_NOENV IF NOT DEFINED TCLKIT_NOSDK ( 208 SET TCLKIT_FILES=%TCLKIT_FILES% unzip.exe %TCLKIT_SDK_ZIP% 209 ) 210 GOTO :EOF 211 212:fn_TclKitX64Variables 213 IF NOT DEFINED TCLKIT_PATCHLEVEL ( 214 REM 215 REM NOTE: By default, use latest available version of the TclKit SDK 216 REM for x64. However, the "default" TclKit executable for x86 217 REM is still used here because it is the only one "well-known" 218 REM to be available for download. 219 REM 220 SET TCLKIT_PATCHLEVEL=8.6.3 221 SET TCLKIT_EXE=tclkit-8.6.4.exe 222 ) ELSE ( 223 SET TCLKIT_EXE=tclkit-%TCLKIT_PATCHLEVEL%.exe 224 ) 225 SET TCLKIT_VERSION=%TCLKIT_PATCHLEVEL:.=% 226 SET TCLKIT_VERSION=%TCLKIT_VERSION:~0,2% 227 SET TCLKIT_LIB=libtclkit%TCLKIT_PATCHLEVEL:.=%.lib 228 SET TCLKIT_LIB_STUB=libtclstub%TCLKIT_VERSION:.=%.a 229 SET TCLKIT_SDK=libtclkit-sdk-x64-%TCLKIT_PATCHLEVEL% 230 SET TCLKIT_SDK_ZIP=%TCLKIT_SDK%.zip 231 SET TCLKIT_FILES=%TCLKIT_EXE% 232 IF NOT DEFINED TCLKIT_NOENV IF NOT DEFINED TCLKIT_NOSDK ( 233 SET TCLKIT_FILES=%TCLKIT_FILES% unzip.exe %TCLKIT_SDK_ZIP% 234 ) 235 GOTO :EOF 236 237:fn_UnquoteVariable 238 IF NOT DEFINED %1 GOTO :EOF 239 SETLOCAL 240 SET __ECHO_CMD=ECHO %%%1%% 241 FOR /F "delims=" %%V IN ('%__ECHO_CMD%') DO ( 242 SET VALUE=%%V 243 ) 244 SET VALUE=%VALUE:"=% 245 REM " 246 ENDLOCAL && SET %1=%VALUE% 247 GOTO :EOF 248 249:fn_ResetErrorLevel 250 VERIFY > NUL 251 GOTO :EOF 252 253:fn_SetErrorLevel 254 VERIFY MAYBE 2> NUL 255 GOTO :EOF 256 257:usage 258 ECHO. 259 ECHO Usage: %~nx0 ^<processor^> 260 ECHO. 261 ECHO The only supported values for processor are "x86" and "x64". 262 GOTO errors 263 264:errors 265 CALL :fn_SetErrorLevel 266 ENDLOCAL 267 ECHO. 268 ECHO Failure, errors were encountered. 269 GOTO end_of_file 270 271:no_errors 272 CALL :fn_ResetErrorLevel 273 ENDLOCAL 274 ECHO. 275 ECHO Success, no errors were encountered. 276 GOTO end_of_file 277 278:end_of_file 279%__ECHO% EXIT /B %ERRORLEVEL% 280