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=http://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 LIBTCL=%TCLKIT_LIB%%APPEND%"%ROOT%\SetTclKitEnv.bat" 177%__ECHO% ECHO SET LIBTCLSTUB=%TCLKIT_LIB_STUB%%APPEND%"%ROOT%\SetTclKitEnv.bat" 178 179:skip_sdkVariables 180 181ECHO. 182ECHO Wrote "%ROOT%\SetTclKitEnv.bat". 183ECHO Please run it to set the necessary Tcl environment variables. 184ECHO. 185 186GOTO no_errors 187 188:fn_TclKitX86Variables 189 IF NOT DEFINED TCLKIT_PATCHLEVEL ( 190 SET TCLKIT_PATCHLEVEL=8.6.4 191 ) 192 SET TCLKIT_VERSION=%TCLKIT_PATCHLEVEL:.=% 193 SET TCLKIT_VERSION=%TCLKIT_VERSION:~0,2% 194 SET TCLKIT_EXE=tclkit-%TCLKIT_PATCHLEVEL%.exe 195 SET TCLKIT_LIB=libtclkit%TCLKIT_PATCHLEVEL:.=%.lib 196 SET TCLKIT_LIB_STUB=libtclstub%TCLKIT_VERSION:.=%.a 197 SET TCLKIT_SDK=libtclkit-sdk-x86-%TCLKIT_PATCHLEVEL% 198 SET TCLKIT_SDK_ZIP=%TCLKIT_SDK%.zip 199 SET TCLKIT_FILES=%TCLKIT_EXE% unzip.exe %TCLKIT_SDK_ZIP% 200 GOTO :EOF 201 202:fn_TclKitX64Variables 203 IF NOT DEFINED TCLKIT_PATCHLEVEL ( 204 REM 205 REM NOTE: By default, use latest available version of the TclKit SDK 206 REM for x64. However, the "default" TclKit executable for x86 207 REM is still used here because it is the only one "well-known" 208 REM to be available for download. 209 REM 210 SET TCLKIT_PATCHLEVEL=8.6.3 211 SET TCLKIT_EXE=tclkit-8.6.4.exe 212 ) ELSE ( 213 SET TCLKIT_EXE=tclkit-%TCLKIT_PATCHLEVEL%.exe 214 ) 215 SET TCLKIT_VERSION=%TCLKIT_PATCHLEVEL:.=% 216 SET TCLKIT_VERSION=%TCLKIT_VERSION:~0,2% 217 SET TCLKIT_LIB=libtclkit%TCLKIT_PATCHLEVEL:.=%.lib 218 SET TCLKIT_LIB_STUB=libtclstub%TCLKIT_VERSION:.=%.a 219 SET TCLKIT_SDK=libtclkit-sdk-x64-%TCLKIT_PATCHLEVEL% 220 SET TCLKIT_SDK_ZIP=%TCLKIT_SDK%.zip 221 SET TCLKIT_FILES=%TCLKIT_EXE% unzip.exe %TCLKIT_SDK_ZIP% 222 GOTO :EOF 223 224:fn_UnquoteVariable 225 IF NOT DEFINED %1 GOTO :EOF 226 SETLOCAL 227 SET __ECHO_CMD=ECHO %%%1%% 228 FOR /F "delims=" %%V IN ('%__ECHO_CMD%') DO ( 229 SET VALUE=%%V 230 ) 231 SET VALUE=%VALUE:"=% 232 REM " 233 ENDLOCAL && SET %1=%VALUE% 234 GOTO :EOF 235 236:fn_ResetErrorLevel 237 VERIFY > NUL 238 GOTO :EOF 239 240:fn_SetErrorLevel 241 VERIFY MAYBE 2> NUL 242 GOTO :EOF 243 244:usage 245 ECHO. 246 ECHO Usage: %~nx0 ^<processor^> 247 ECHO. 248 ECHO The only supported values for processor are "x86" and "x64". 249 GOTO errors 250 251:errors 252 CALL :fn_SetErrorLevel 253 ENDLOCAL 254 ECHO. 255 ECHO Failure, errors were encountered. 256 GOTO end_of_file 257 258:no_errors 259 CALL :fn_ResetErrorLevel 260 ENDLOCAL 261 ECHO. 262 ECHO Success, no errors were encountered. 263 GOTO end_of_file 264 265:end_of_file 266%__ECHO% EXIT /B %ERRORLEVEL% 267