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