sqlite/tool/GetTclKit.bat

332 lines
8.3 KiB
Batchfile
Raw Normal View History

@ECHO OFF
::
:: GetTclKit.bat --
::
:: TclKit Download Tool
::
SETLOCAL
REM SET __ECHO=ECHO
REM SET __ECHO2=ECHO
REM SET __ECHO3=ECHO
IF NOT DEFINED _AECHO (SET _AECHO=REM)
IF NOT DEFINED _CECHO (SET _CECHO=REM)
IF NOT DEFINED _VECHO (SET _VECHO=REM)
SET OVERWRITE=^>
IF DEFINED __ECHO SET OVERWRITE=^^^>
SET APPEND=^>^>
IF DEFINED __ECHO SET APPEND=^^^>^^^>
SET PROCESSOR=%1
IF DEFINED PROCESSOR (
CALL :fn_UnquoteVariable PROCESSOR
) ELSE (
GOTO usage
)
SET PROCESSOR=%PROCESSOR:AMD64=x64%
%_VECHO% Processor = '%PROCESSOR%'
SET DUMMY2=%2
IF DEFINED DUMMY2 (
GOTO usage
)
IF NOT DEFINED ENVDIR (
SET ENVDIR=%CD%
)
%_VECHO% EnvDir = '%ENVDIR%'
SET TOOLS=%~dp0
SET TOOLS=%TOOLS:~0,-1%
%_VECHO% Tools = '%TOOLS%'
IF NOT DEFINED windir (
ECHO The windir environment variable must be set first.
GOTO errors
)
%_VECHO% WinDir = '%windir%'
IF NOT DEFINED TEMP (
ECHO The TEMP environment variable must be set first.
GOTO errors
)
%_VECHO% Temp = '%TEMP%'
IF NOT DEFINED TCLKIT_URI (
SET TCLKIT_URI=https://urn.to/r/tclsh/
)
%_VECHO% TclKitUri = '%TCLKIT_URI%'
IF NOT DEFINED TCLKIT_PATCHLEVEL (
SET TCLKIT_PATCHLEVEL=8.6.6
)
%_VECHO% TclKitPatchLevel = '%TCLKIT_PATCHLEVEL%'
IF NOT DEFINED TCLKIT_EXE_PATCHLEVEL (
SET TCLKIT_EXE_PATCHLEVEL=8.6.4
)
%_VECHO% TclKitExePatchLevel = '%TCLKIT_EXE_PATCHLEVEL%'
IF /I "%PROCESSOR%" == "x86" (
CALL :fn_TclKitX86Variables
IF ERRORLEVEL 1 (
GOTO errors
)
) ELSE IF /I "%PROCESSOR%" == "x64" (
CALL :fn_TclKitX64Variables
IF ERRORLEVEL 1 (
GOTO errors
)
) ELSE (
GOTO usage
)
%_VECHO% TclKitVersion = '%TCLKIT_VERSION%'
%_VECHO% TclKitPatchLevel = '%TCLKIT_PATCHLEVEL%'
%_VECHO% TclKitExePatchLevel = '%TCLKIT_EXE_PATCHLEVEL%'
%_VECHO% TclKitNoEnv = '%TCLKIT_NOENV%'
%_VECHO% TclKitNoSdk = '%TCLKIT_NOSDK%'
%_VECHO% TclKitExe = '%TCLKIT_EXE%'
%_VECHO% TclKitLib = '%TCLKIT_LIB%'
%_VECHO% TclKitLibStub = '%TCLKIT_LIB_STUB%'
%_VECHO% TclKitSdk = '%TCLKIT_SDK%'
%_VECHO% TclKitSdkZip = '%TCLKIT_SDK_ZIP%'
%_VECHO% TclKitFiles = '%TCLKIT_FILES%'
CALL :fn_ResetErrorLevel
FOR %%T IN (csc.exe) DO (
SET %%T_PATH=%%~dp$PATH:T
)
%_VECHO% Csc.exe_PATH = '%csc.exe_PATH%'
IF DEFINED csc.exe_PATH (
GOTO skip_addToPath
)
IF DEFINED FRAMEWORKDIR (
REM Use the existing .NET Framework directory...
) ELSE IF EXIST "%windir%\Microsoft.NET\Framework64\v2.0.50727" (
SET FRAMEWORKDIR=%windir%\Microsoft.NET\Framework64\v2.0.50727
) ELSE IF EXIST "%windir%\Microsoft.NET\Framework64\v3.5" (
SET FRAMEWORKDIR=%windir%\Microsoft.NET\Framework64\v3.5
) ELSE IF EXIST "%windir%\Microsoft.NET\Framework64\v4.0.30319" (
SET FRAMEWORKDIR=%windir%\Microsoft.NET\Framework64\v4.0.30319
) ELSE IF EXIST "%windir%\Microsoft.NET\Framework\v2.0.50727" (
SET FRAMEWORKDIR=%windir%\Microsoft.NET\Framework\v2.0.50727
) ELSE IF EXIST "%windir%\Microsoft.NET\Framework\v3.5" (
SET FRAMEWORKDIR=%windir%\Microsoft.NET\Framework\v3.5
) ELSE IF EXIST "%windir%\Microsoft.NET\Framework\v4.0.30319" (
SET FRAMEWORKDIR=%windir%\Microsoft.NET\Framework\v4.0.30319
) ELSE (
ECHO No suitable version of the .NET Framework appears to be installed.
GOTO errors
)
%_VECHO% FrameworkDir = '%FRAMEWORKDIR%'
IF NOT EXIST "%FRAMEWORKDIR%\csc.exe" (
ECHO The file "%FRAMEWORKDIR%\csc.exe" is missing.
GOTO errors
)
CALL :fn_PrependToPath FRAMEWORKDIR
:skip_addToPath
IF NOT EXIST "%TEMP%\GetFile.exe" (
%__ECHO% csc.exe "/out:%TEMP%\GetFile.exe" /target:exe "%TOOLS%\GetFile.cs"
IF ERRORLEVEL 1 (
ECHO Compilation of "%TOOLS%\GetFile.cs" failed.
GOTO errors
)
)
FOR %%F IN (%TCLKIT_FILES%) DO (
IF NOT EXIST "%TEMP%\%%F" (
%__ECHO% "%TEMP%\GetFile.exe" "%TCLKIT_URI%%%F"
IF ERRORLEVEL 1 (
ECHO Download of "%%F" from "%TCLKIT_URI%" failed.
GOTO errors
)
)
)
IF DEFINED TCLKIT_NOENV GOTO skip_sdkUnZip
IF DEFINED TCLKIT_NOSDK GOTO skip_sdkUnZip
IF NOT EXIST "%TEMP%\%TCLKIT_SDK%" (
%__ECHO% MKDIR "%TEMP%\%TCLKIT_SDK%"
IF ERRORLEVEL 1 (
ECHO Could not create directory "%TEMP%\%TCLKIT_SDK%".
GOTO errors
)
)
%__ECHO% "%TEMP%\unzip.exe" -n "%TEMP%\%TCLKIT_SDK_ZIP%" -d "%TEMP%\%TCLKIT_SDK%"
IF ERRORLEVEL 1 (
ECHO Could not unzip "%TEMP%\%TCLKIT_SDK_ZIP%" to "%TEMP%\%TCLKIT_SDK%".
GOTO errors
)
:skip_sdkUnZip
IF DEFINED TCLKIT_NOENV GOTO skip_sdkEnvironment
%__ECHO% ECHO SET TCLSH_CMD=%TEMP%\%TCLKIT_EXE%%OVERWRITE%"%ENVDIR%\SetTclKitEnv.bat"
IF DEFINED TCLKIT_NOSDK GOTO skip_sdkVariables
%__ECHO% ECHO SET TCLINCDIR=%TEMP%\%TCLKIT_SDK%\include%APPEND%"%ENVDIR%\SetTclKitEnv.bat"
%__ECHO% ECHO SET TCLLIBDIR=%TEMP%\%TCLKIT_SDK%\lib%APPEND%"%ENVDIR%\SetTclKitEnv.bat"
%__ECHO% ECHO SET LIBTCLPATH=%TEMP%\%TCLKIT_SDK%\lib%APPEND%"%ENVDIR%\SetTclKitEnv.bat"
%__ECHO% ECHO SET LIBTCL=%TCLKIT_LIB%%APPEND%"%ENVDIR%\SetTclKitEnv.bat"
%__ECHO% ECHO SET LIBTCLSTUB=%TCLKIT_LIB_STUB%%APPEND%"%ENVDIR%\SetTclKitEnv.bat"
:skip_sdkVariables
ECHO.
ECHO Wrote "%ENVDIR%\SetTclKitEnv.bat".
ECHO Please run it to set the necessary Tcl environment variables.
ECHO.
:skip_sdkEnvironment
GOTO no_errors
:fn_TclKitX86Variables
REM
REM NOTE: By default, use latest available version of the TclKit SDK
REM for x86. However, the "default" TclKit executable for x86
REM is still used here because it is the only one "well-known"
REM to be available for download.
REM
IF NOT DEFINED TCLKIT_PATCHLEVEL (
ECHO The TCLKIT_PATCHLEVEL environment variable must be set first.
CALL :fn_SetErrorLevel
GOTO :EOF
)
SET TCLKIT_VERSION=%TCLKIT_PATCHLEVEL:.=%
SET TCLKIT_VERSION=%TCLKIT_VERSION:~0,2%
IF DEFINED TCLKIT_EXE_PATCHLEVEL (
SET TCLKIT_EXE=tclkit-%TCLKIT_EXE_PATCHLEVEL%.exe
) ELSE (
SET TCLKIT_EXE=tclkit-%TCLKIT_PATCHLEVEL%.exe
)
SET TCLKIT_LIB=libtclkit%TCLKIT_PATCHLEVEL:.=%.lib
SET TCLKIT_LIB_STUB=libtclstub%TCLKIT_VERSION:.=%.a
SET TCLKIT_SDK=libtclkit-sdk-x86-%TCLKIT_PATCHLEVEL%
SET TCLKIT_SDK_ZIP=%TCLKIT_SDK%.zip
SET TCLKIT_FILES=%TCLKIT_EXE%
IF NOT DEFINED TCLKIT_NOENV IF NOT DEFINED TCLKIT_NOSDK (
SET TCLKIT_FILES=%TCLKIT_FILES% unzip.exe %TCLKIT_SDK_ZIP%
)
GOTO :EOF
:fn_TclKitX64Variables
REM
REM NOTE: By default, use latest available version of the TclKit SDK
REM for x64. However, the "default" TclKit executable for x86
REM is still used here because it is the only one "well-known"
REM to be available for download.
REM
IF NOT DEFINED TCLKIT_PATCHLEVEL (
ECHO The TCLKIT_PATCHLEVEL environment variable must be set first.
CALL :fn_SetErrorLevel
GOTO :EOF
)
SET TCLKIT_VERSION=%TCLKIT_PATCHLEVEL:.=%
SET TCLKIT_VERSION=%TCLKIT_VERSION:~0,2%
IF DEFINED TCLKIT_EXE_PATCHLEVEL (
SET TCLKIT_EXE=tclkit-%TCLKIT_EXE_PATCHLEVEL%.exe
) ELSE (
SET TCLKIT_EXE=tclkit-%TCLKIT_PATCHLEVEL%.exe
)
SET TCLKIT_LIB=libtclkit%TCLKIT_PATCHLEVEL:.=%.lib
SET TCLKIT_LIB_STUB=libtclstub%TCLKIT_VERSION:.=%.a
SET TCLKIT_SDK=libtclkit-sdk-x64-%TCLKIT_PATCHLEVEL%
SET TCLKIT_SDK_ZIP=%TCLKIT_SDK%.zip
SET TCLKIT_FILES=%TCLKIT_EXE%
IF NOT DEFINED TCLKIT_NOENV IF NOT DEFINED TCLKIT_NOSDK (
SET TCLKIT_FILES=%TCLKIT_FILES% unzip.exe %TCLKIT_SDK_ZIP%
)
GOTO :EOF
:fn_UnquoteVariable
IF NOT DEFINED %1 GOTO :EOF
SETLOCAL
SET __ECHO_CMD=ECHO %%%1%%
FOR /F "delims=" %%V IN ('%__ECHO_CMD%') DO (
SET VALUE=%%V
)
SET VALUE=%VALUE:"=%
REM "
ENDLOCAL && SET %1=%VALUE%
GOTO :EOF
:fn_PrependToPath
IF NOT DEFINED %1 GOTO :EOF
SETLOCAL
SET __ECHO_CMD=ECHO %%%1%%
FOR /F "delims=" %%V IN ('%__ECHO_CMD%') DO (
SET VALUE=%%V
)
SET VALUE=%VALUE:"=%
REM "
ENDLOCAL && SET PATH=%VALUE%;%PATH%
GOTO :EOF
:fn_ResetErrorLevel
VERIFY > NUL
GOTO :EOF
:fn_SetErrorLevel
VERIFY MAYBE 2> NUL
GOTO :EOF
:usage
ECHO.
ECHO Usage: %~nx0 ^<processor^>
ECHO.
ECHO The only supported values for processor are "x86" and "x64".
GOTO errors
:errors
CALL :fn_SetErrorLevel
ENDLOCAL
ECHO.
ECHO Failure, errors were encountered.
GOTO end_of_file
:no_errors
CALL :fn_ResetErrorLevel
ENDLOCAL
ECHO.
ECHO Success, no errors were encountered.
GOTO end_of_file
:end_of_file
%__ECHO% EXIT /B %ERRORLEVEL%