xref: /sqlite-3.40.0/tool/GetTclKit.bat (revision f5e7691e)
180372ae2Smistachkin@ECHO OFF
280372ae2Smistachkin
380372ae2Smistachkin::
480372ae2Smistachkin:: GetTclKit.bat --
580372ae2Smistachkin::
680372ae2Smistachkin:: TclKit Download Tool
780372ae2Smistachkin::
880372ae2Smistachkin
980372ae2SmistachkinSETLOCAL
1080372ae2Smistachkin
1180372ae2SmistachkinREM SET __ECHO=ECHO
1280372ae2SmistachkinREM SET __ECHO2=ECHO
1380372ae2SmistachkinREM SET __ECHO3=ECHO
1480372ae2SmistachkinIF NOT DEFINED _AECHO (SET _AECHO=REM)
1580372ae2SmistachkinIF NOT DEFINED _CECHO (SET _CECHO=REM)
16*f5e7691eSmistachkinIF NOT DEFINED _CECHO2 (SET _CECHO2=REM)
17*f5e7691eSmistachkinIF NOT DEFINED _CECHO3 (SET _CECHO3=REM)
1880372ae2SmistachkinIF NOT DEFINED _VECHO (SET _VECHO=REM)
1980372ae2Smistachkin
2080372ae2SmistachkinSET OVERWRITE=^>
2180372ae2SmistachkinIF DEFINED __ECHO SET OVERWRITE=^^^>
2280372ae2Smistachkin
2380372ae2SmistachkinSET APPEND=^>^>
2480372ae2SmistachkinIF DEFINED __ECHO SET APPEND=^^^>^^^>
2580372ae2Smistachkin
2680372ae2SmistachkinSET PROCESSOR=%1
2780372ae2Smistachkin
2880372ae2SmistachkinIF DEFINED PROCESSOR (
2980372ae2Smistachkin  CALL :fn_UnquoteVariable PROCESSOR
3080372ae2Smistachkin) ELSE (
3180372ae2Smistachkin  GOTO usage
3280372ae2Smistachkin)
3380372ae2Smistachkin
34334d163eSmistachkinSET PROCESSOR=%PROCESSOR:AMD64=x64%
35334d163eSmistachkin
3680372ae2Smistachkin%_VECHO% Processor = '%PROCESSOR%'
3780372ae2Smistachkin
3880372ae2SmistachkinSET DUMMY2=%2
3980372ae2Smistachkin
4080372ae2SmistachkinIF DEFINED DUMMY2 (
4180372ae2Smistachkin  GOTO usage
4280372ae2Smistachkin)
4380372ae2Smistachkin
44d5157e01SmistachkinIF NOT DEFINED ENVDIR (
45d5157e01Smistachkin  SET ENVDIR=%CD%
46d5157e01Smistachkin)
4780372ae2Smistachkin
48d5157e01Smistachkin%_VECHO% EnvDir = '%ENVDIR%'
4980372ae2Smistachkin
5080372ae2SmistachkinSET TOOLS=%~dp0
5180372ae2SmistachkinSET TOOLS=%TOOLS:~0,-1%
5280372ae2Smistachkin
5380372ae2Smistachkin%_VECHO% Tools = '%TOOLS%'
5480372ae2Smistachkin
5580372ae2SmistachkinIF NOT DEFINED windir (
5680372ae2Smistachkin  ECHO The windir environment variable must be set first.
5780372ae2Smistachkin  GOTO errors
5880372ae2Smistachkin)
5980372ae2Smistachkin
6080372ae2Smistachkin%_VECHO% WinDir = '%windir%'
6180372ae2Smistachkin
6280372ae2SmistachkinIF NOT DEFINED TEMP (
6380372ae2Smistachkin  ECHO The TEMP environment variable must be set first.
6480372ae2Smistachkin  GOTO errors
6580372ae2Smistachkin)
6680372ae2Smistachkin
6780372ae2Smistachkin%_VECHO% Temp = '%TEMP%'
6880372ae2Smistachkin
69dfff1ffeSmistachkinIF NOT DEFINED TCLKIT_URI (
70d5157e01Smistachkin  SET TCLKIT_URI=https://urn.to/r/tclsh/
71dfff1ffeSmistachkin)
7280372ae2Smistachkin
7380372ae2Smistachkin%_VECHO% TclKitUri = '%TCLKIT_URI%'
7480372ae2Smistachkin
75d5157e01SmistachkinIF NOT DEFINED TCLKIT_PATCHLEVEL (
76d5157e01Smistachkin  SET TCLKIT_PATCHLEVEL=8.6.6
77d5157e01Smistachkin)
78d5157e01Smistachkin
79d5157e01Smistachkin%_VECHO% TclKitPatchLevel = '%TCLKIT_PATCHLEVEL%'
80d5157e01Smistachkin
81d5157e01SmistachkinIF NOT DEFINED TCLKIT_EXE_PATCHLEVEL (
82d5157e01Smistachkin  SET TCLKIT_EXE_PATCHLEVEL=8.6.4
83d5157e01Smistachkin)
84d5157e01Smistachkin
85d5157e01Smistachkin%_VECHO% TclKitExePatchLevel = '%TCLKIT_EXE_PATCHLEVEL%'
86d5157e01Smistachkin
8780372ae2SmistachkinIF /I "%PROCESSOR%" == "x86" (
8880372ae2Smistachkin  CALL :fn_TclKitX86Variables
89d5157e01Smistachkin
90d5157e01Smistachkin  IF ERRORLEVEL 1 (
91d5157e01Smistachkin    GOTO errors
92d5157e01Smistachkin  )
9380372ae2Smistachkin) ELSE IF /I "%PROCESSOR%" == "x64" (
9480372ae2Smistachkin  CALL :fn_TclKitX64Variables
95d5157e01Smistachkin
96d5157e01Smistachkin  IF ERRORLEVEL 1 (
97d5157e01Smistachkin    GOTO errors
98d5157e01Smistachkin  )
9980372ae2Smistachkin) ELSE (
10080372ae2Smistachkin  GOTO usage
10180372ae2Smistachkin)
10280372ae2Smistachkin
1035b66350aSmistachkin%_VECHO% TclKitVersion = '%TCLKIT_VERSION%'
10480372ae2Smistachkin%_VECHO% TclKitPatchLevel = '%TCLKIT_PATCHLEVEL%'
105d5157e01Smistachkin%_VECHO% TclKitExePatchLevel = '%TCLKIT_EXE_PATCHLEVEL%'
106598f7c59Smistachkin%_VECHO% TclKitNoEnv = '%TCLKIT_NOENV%'
10780372ae2Smistachkin%_VECHO% TclKitNoSdk = '%TCLKIT_NOSDK%'
10880372ae2Smistachkin%_VECHO% TclKitExe = '%TCLKIT_EXE%'
10980372ae2Smistachkin%_VECHO% TclKitLib = '%TCLKIT_LIB%'
1105b66350aSmistachkin%_VECHO% TclKitLibStub = '%TCLKIT_LIB_STUB%'
11180372ae2Smistachkin%_VECHO% TclKitSdk = '%TCLKIT_SDK%'
11280372ae2Smistachkin%_VECHO% TclKitSdkZip = '%TCLKIT_SDK_ZIP%'
11380372ae2Smistachkin%_VECHO% TclKitFiles = '%TCLKIT_FILES%'
11480372ae2Smistachkin
11580372ae2SmistachkinCALL :fn_ResetErrorLevel
11680372ae2Smistachkin
11780372ae2SmistachkinFOR %%T IN (csc.exe) DO (
11880372ae2Smistachkin  SET %%T_PATH=%%~dp$PATH:T
11980372ae2Smistachkin)
12080372ae2Smistachkin
12180372ae2Smistachkin%_VECHO% Csc.exe_PATH = '%csc.exe_PATH%'
12280372ae2Smistachkin
12380372ae2SmistachkinIF DEFINED csc.exe_PATH (
12480372ae2Smistachkin  GOTO skip_addToPath
12580372ae2Smistachkin)
12680372ae2Smistachkin
12780372ae2SmistachkinIF DEFINED FRAMEWORKDIR (
12880372ae2Smistachkin  REM Use the existing .NET Framework directory...
12980372ae2Smistachkin) ELSE IF EXIST "%windir%\Microsoft.NET\Framework64\v2.0.50727" (
13080372ae2Smistachkin  SET FRAMEWORKDIR=%windir%\Microsoft.NET\Framework64\v2.0.50727
13180372ae2Smistachkin) ELSE IF EXIST "%windir%\Microsoft.NET\Framework64\v3.5" (
13280372ae2Smistachkin  SET FRAMEWORKDIR=%windir%\Microsoft.NET\Framework64\v3.5
13380372ae2Smistachkin) ELSE IF EXIST "%windir%\Microsoft.NET\Framework64\v4.0.30319" (
13480372ae2Smistachkin  SET FRAMEWORKDIR=%windir%\Microsoft.NET\Framework64\v4.0.30319
13580372ae2Smistachkin) ELSE IF EXIST "%windir%\Microsoft.NET\Framework\v2.0.50727" (
13680372ae2Smistachkin  SET FRAMEWORKDIR=%windir%\Microsoft.NET\Framework\v2.0.50727
13780372ae2Smistachkin) ELSE IF EXIST "%windir%\Microsoft.NET\Framework\v3.5" (
13880372ae2Smistachkin  SET FRAMEWORKDIR=%windir%\Microsoft.NET\Framework\v3.5
13980372ae2Smistachkin) ELSE IF EXIST "%windir%\Microsoft.NET\Framework\v4.0.30319" (
14080372ae2Smistachkin  SET FRAMEWORKDIR=%windir%\Microsoft.NET\Framework\v4.0.30319
14180372ae2Smistachkin) ELSE (
14280372ae2Smistachkin  ECHO No suitable version of the .NET Framework appears to be installed.
14380372ae2Smistachkin  GOTO errors
14480372ae2Smistachkin)
14580372ae2Smistachkin
14680372ae2Smistachkin%_VECHO% FrameworkDir = '%FRAMEWORKDIR%'
14780372ae2Smistachkin
14880372ae2SmistachkinIF NOT EXIST "%FRAMEWORKDIR%\csc.exe" (
14980372ae2Smistachkin  ECHO The file "%FRAMEWORKDIR%\csc.exe" is missing.
15080372ae2Smistachkin  GOTO errors
15180372ae2Smistachkin)
15280372ae2Smistachkin
1536e5688d3SmistachkinCALL :fn_PrependToPath FRAMEWORKDIR
15480372ae2Smistachkin
15580372ae2Smistachkin:skip_addToPath
15680372ae2Smistachkin
1575b66350aSmistachkinIF NOT EXIST "%TEMP%\GetFile.exe" (
15880372ae2Smistachkin  %__ECHO% csc.exe "/out:%TEMP%\GetFile.exe" /target:exe "%TOOLS%\GetFile.cs"
15980372ae2Smistachkin
16080372ae2Smistachkin  IF ERRORLEVEL 1 (
16180372ae2Smistachkin    ECHO Compilation of "%TOOLS%\GetFile.cs" failed.
16280372ae2Smistachkin    GOTO errors
16380372ae2Smistachkin  )
1645b66350aSmistachkin)
16580372ae2Smistachkin
16680372ae2SmistachkinFOR %%F IN (%TCLKIT_FILES%) DO (
167cc730488Smistachkin  IF NOT EXIST "%TEMP%\%%F" (
16880372ae2Smistachkin    %__ECHO% "%TEMP%\GetFile.exe" "%TCLKIT_URI%%%F"
16980372ae2Smistachkin
17080372ae2Smistachkin    IF ERRORLEVEL 1 (
17180372ae2Smistachkin      ECHO Download of "%%F" from "%TCLKIT_URI%" failed.
17280372ae2Smistachkin      GOTO errors
17380372ae2Smistachkin    )
17480372ae2Smistachkin  )
17580372ae2Smistachkin)
17680372ae2Smistachkin
177598f7c59SmistachkinIF DEFINED TCLKIT_NOENV GOTO skip_sdkUnZip
17880372ae2SmistachkinIF DEFINED TCLKIT_NOSDK GOTO skip_sdkUnZip
17980372ae2Smistachkin
18080372ae2SmistachkinIF NOT EXIST "%TEMP%\%TCLKIT_SDK%" (
18180372ae2Smistachkin  %__ECHO% MKDIR "%TEMP%\%TCLKIT_SDK%"
18280372ae2Smistachkin
18380372ae2Smistachkin  IF ERRORLEVEL 1 (
18480372ae2Smistachkin    ECHO Could not create directory "%TEMP%\%TCLKIT_SDK%".
18580372ae2Smistachkin    GOTO errors
18680372ae2Smistachkin  )
18780372ae2Smistachkin)
18880372ae2Smistachkin
189cc730488Smistachkin%__ECHO% "%TEMP%\unzip.exe" -n "%TEMP%\%TCLKIT_SDK_ZIP%" -d "%TEMP%\%TCLKIT_SDK%"
19080372ae2Smistachkin
19180372ae2SmistachkinIF ERRORLEVEL 1 (
19280372ae2Smistachkin  ECHO Could not unzip "%TEMP%\%TCLKIT_SDK_ZIP%" to "%TEMP%\%TCLKIT_SDK%".
19380372ae2Smistachkin  GOTO errors
19480372ae2Smistachkin)
19580372ae2Smistachkin
19680372ae2Smistachkin:skip_sdkUnZip
19780372ae2Smistachkin
198598f7c59SmistachkinIF DEFINED TCLKIT_NOENV GOTO skip_sdkEnvironment
199598f7c59Smistachkin
200d5157e01Smistachkin%__ECHO% ECHO SET TCLSH_CMD=%TEMP%\%TCLKIT_EXE%%OVERWRITE%"%ENVDIR%\SetTclKitEnv.bat"
20180372ae2Smistachkin
20280372ae2SmistachkinIF DEFINED TCLKIT_NOSDK GOTO skip_sdkVariables
20380372ae2Smistachkin
204d5157e01Smistachkin%__ECHO% ECHO SET TCLINCDIR=%TEMP%\%TCLKIT_SDK%\include%APPEND%"%ENVDIR%\SetTclKitEnv.bat"
205d5157e01Smistachkin%__ECHO% ECHO SET TCLLIBDIR=%TEMP%\%TCLKIT_SDK%\lib%APPEND%"%ENVDIR%\SetTclKitEnv.bat"
206d5157e01Smistachkin%__ECHO% ECHO SET LIBTCLPATH=%TEMP%\%TCLKIT_SDK%\lib%APPEND%"%ENVDIR%\SetTclKitEnv.bat"
207d5157e01Smistachkin%__ECHO% ECHO SET LIBTCL=%TCLKIT_LIB%%APPEND%"%ENVDIR%\SetTclKitEnv.bat"
208d5157e01Smistachkin%__ECHO% ECHO SET LIBTCLSTUB=%TCLKIT_LIB_STUB%%APPEND%"%ENVDIR%\SetTclKitEnv.bat"
20980372ae2Smistachkin
21080372ae2Smistachkin:skip_sdkVariables
21180372ae2Smistachkin
212cc730488SmistachkinECHO.
213d5157e01SmistachkinECHO Wrote "%ENVDIR%\SetTclKitEnv.bat".
214cc730488SmistachkinECHO Please run it to set the necessary Tcl environment variables.
215cc730488SmistachkinECHO.
216cc730488Smistachkin
217598f7c59Smistachkin:skip_sdkEnvironment
218598f7c59Smistachkin
21980372ae2SmistachkinGOTO no_errors
22080372ae2Smistachkin
22180372ae2Smistachkin:fn_TclKitX86Variables
2227751deb3Smistachkin  REM
2237751deb3Smistachkin  REM NOTE: By default, use latest available version of the TclKit SDK
2247751deb3Smistachkin  REM       for x86.  However, the "default" TclKit executable for x86
2257751deb3Smistachkin  REM       is still used here because it is the only one "well-known"
2267751deb3Smistachkin  REM       to be available for download.
2277751deb3Smistachkin  REM
22880372ae2Smistachkin  IF NOT DEFINED TCLKIT_PATCHLEVEL (
229d5157e01Smistachkin    ECHO The TCLKIT_PATCHLEVEL environment variable must be set first.
230d5157e01Smistachkin    CALL :fn_SetErrorLevel
231d5157e01Smistachkin    GOTO :EOF
23280372ae2Smistachkin  )
2335b66350aSmistachkin  SET TCLKIT_VERSION=%TCLKIT_PATCHLEVEL:.=%
2345b66350aSmistachkin  SET TCLKIT_VERSION=%TCLKIT_VERSION:~0,2%
235d5157e01Smistachkin  IF DEFINED TCLKIT_EXE_PATCHLEVEL (
236d5157e01Smistachkin    SET TCLKIT_EXE=tclkit-%TCLKIT_EXE_PATCHLEVEL%.exe
237d5157e01Smistachkin  ) ELSE (
238d5157e01Smistachkin    SET TCLKIT_EXE=tclkit-%TCLKIT_PATCHLEVEL%.exe
239d5157e01Smistachkin  )
24080372ae2Smistachkin  SET TCLKIT_LIB=libtclkit%TCLKIT_PATCHLEVEL:.=%.lib
2415b66350aSmistachkin  SET TCLKIT_LIB_STUB=libtclstub%TCLKIT_VERSION:.=%.a
24280372ae2Smistachkin  SET TCLKIT_SDK=libtclkit-sdk-x86-%TCLKIT_PATCHLEVEL%
24380372ae2Smistachkin  SET TCLKIT_SDK_ZIP=%TCLKIT_SDK%.zip
244cf9fb7ebSmistachkin  SET TCLKIT_FILES=%TCLKIT_EXE%
245598f7c59Smistachkin  IF NOT DEFINED TCLKIT_NOENV IF NOT DEFINED TCLKIT_NOSDK (
246cf9fb7ebSmistachkin    SET TCLKIT_FILES=%TCLKIT_FILES% unzip.exe %TCLKIT_SDK_ZIP%
247cf9fb7ebSmistachkin  )
24880372ae2Smistachkin  GOTO :EOF
24980372ae2Smistachkin
25080372ae2Smistachkin:fn_TclKitX64Variables
25180372ae2Smistachkin  REM
25280372ae2Smistachkin  REM NOTE: By default, use latest available version of the TclKit SDK
25380372ae2Smistachkin  REM       for x64.  However, the "default" TclKit executable for x86
25480372ae2Smistachkin  REM       is still used here because it is the only one "well-known"
25580372ae2Smistachkin  REM       to be available for download.
25680372ae2Smistachkin  REM
2577751deb3Smistachkin  IF NOT DEFINED TCLKIT_PATCHLEVEL (
258d5157e01Smistachkin    ECHO The TCLKIT_PATCHLEVEL environment variable must be set first.
259d5157e01Smistachkin    CALL :fn_SetErrorLevel
260d5157e01Smistachkin    GOTO :EOF
26180372ae2Smistachkin  )
2625b66350aSmistachkin  SET TCLKIT_VERSION=%TCLKIT_PATCHLEVEL:.=%
2635b66350aSmistachkin  SET TCLKIT_VERSION=%TCLKIT_VERSION:~0,2%
264d5157e01Smistachkin  IF DEFINED TCLKIT_EXE_PATCHLEVEL (
265d5157e01Smistachkin    SET TCLKIT_EXE=tclkit-%TCLKIT_EXE_PATCHLEVEL%.exe
266d5157e01Smistachkin  ) ELSE (
267d5157e01Smistachkin    SET TCLKIT_EXE=tclkit-%TCLKIT_PATCHLEVEL%.exe
268d5157e01Smistachkin  )
26980372ae2Smistachkin  SET TCLKIT_LIB=libtclkit%TCLKIT_PATCHLEVEL:.=%.lib
2705b66350aSmistachkin  SET TCLKIT_LIB_STUB=libtclstub%TCLKIT_VERSION:.=%.a
27180372ae2Smistachkin  SET TCLKIT_SDK=libtclkit-sdk-x64-%TCLKIT_PATCHLEVEL%
27280372ae2Smistachkin  SET TCLKIT_SDK_ZIP=%TCLKIT_SDK%.zip
273cf9fb7ebSmistachkin  SET TCLKIT_FILES=%TCLKIT_EXE%
274598f7c59Smistachkin  IF NOT DEFINED TCLKIT_NOENV IF NOT DEFINED TCLKIT_NOSDK (
275cf9fb7ebSmistachkin    SET TCLKIT_FILES=%TCLKIT_FILES% unzip.exe %TCLKIT_SDK_ZIP%
276cf9fb7ebSmistachkin  )
27780372ae2Smistachkin  GOTO :EOF
27880372ae2Smistachkin
27980372ae2Smistachkin:fn_UnquoteVariable
28080372ae2Smistachkin  IF NOT DEFINED %1 GOTO :EOF
28180372ae2Smistachkin  SETLOCAL
28280372ae2Smistachkin  SET __ECHO_CMD=ECHO %%%1%%
28380372ae2Smistachkin  FOR /F "delims=" %%V IN ('%__ECHO_CMD%') DO (
28480372ae2Smistachkin    SET VALUE=%%V
28580372ae2Smistachkin  )
28680372ae2Smistachkin  SET VALUE=%VALUE:"=%
28780372ae2Smistachkin  REM "
28880372ae2Smistachkin  ENDLOCAL && SET %1=%VALUE%
28980372ae2Smistachkin  GOTO :EOF
29080372ae2Smistachkin
2916e5688d3Smistachkin:fn_PrependToPath
2926e5688d3Smistachkin  IF NOT DEFINED %1 GOTO :EOF
2936e5688d3Smistachkin  SETLOCAL
2946e5688d3Smistachkin  SET __ECHO_CMD=ECHO %%%1%%
2956e5688d3Smistachkin  FOR /F "delims=" %%V IN ('%__ECHO_CMD%') DO (
2966e5688d3Smistachkin    SET VALUE=%%V
2976e5688d3Smistachkin  )
2986e5688d3Smistachkin  SET VALUE=%VALUE:"=%
2996e5688d3Smistachkin  REM "
3006e5688d3Smistachkin  ENDLOCAL && SET PATH=%VALUE%;%PATH%
3016e5688d3Smistachkin  GOTO :EOF
3026e5688d3Smistachkin
30380372ae2Smistachkin:fn_ResetErrorLevel
30480372ae2Smistachkin  VERIFY > NUL
30580372ae2Smistachkin  GOTO :EOF
30680372ae2Smistachkin
30780372ae2Smistachkin:fn_SetErrorLevel
30880372ae2Smistachkin  VERIFY MAYBE 2> NUL
30980372ae2Smistachkin  GOTO :EOF
31080372ae2Smistachkin
31180372ae2Smistachkin:usage
31280372ae2Smistachkin  ECHO.
31380372ae2Smistachkin  ECHO Usage: %~nx0 ^<processor^>
31480372ae2Smistachkin  ECHO.
31580372ae2Smistachkin  ECHO The only supported values for processor are "x86" and "x64".
31680372ae2Smistachkin  GOTO errors
31780372ae2Smistachkin
31880372ae2Smistachkin:errors
31980372ae2Smistachkin  CALL :fn_SetErrorLevel
32080372ae2Smistachkin  ENDLOCAL
32180372ae2Smistachkin  ECHO.
32280372ae2Smistachkin  ECHO Failure, errors were encountered.
32380372ae2Smistachkin  GOTO end_of_file
32480372ae2Smistachkin
32580372ae2Smistachkin:no_errors
32680372ae2Smistachkin  CALL :fn_ResetErrorLevel
32780372ae2Smistachkin  ENDLOCAL
32880372ae2Smistachkin  ECHO.
32980372ae2Smistachkin  ECHO Success, no errors were encountered.
33080372ae2Smistachkin  GOTO end_of_file
33180372ae2Smistachkin
33280372ae2Smistachkin:end_of_file
33380372ae2Smistachkin%__ECHO% EXIT /B %ERRORLEVEL%
334