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