Check if MSYS2 is already present by looking for the bash executable, even if winget reports it's already installed. This allows the script to continue with GCC installation instead of failing. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
223 lines
6.2 KiB
Batchfile
223 lines
6.2 KiB
Batchfile
@echo off
|
|
setlocal enabledelayedexpansion
|
|
|
|
echo ================================================================
|
|
echo VideoTools Windows Build Script
|
|
echo ================================================================
|
|
echo.
|
|
|
|
REM ----------------------------
|
|
REM Detect Go
|
|
REM ----------------------------
|
|
where go >nul 2>&1
|
|
if %ERRORLEVEL% neq 0 (
|
|
echo [ERROR] Go is not installed or not in PATH.
|
|
echo Download Go from: https://go.dev/dl/
|
|
exit /b 1
|
|
)
|
|
|
|
echo [INFO] Go version:
|
|
go version
|
|
echo.
|
|
|
|
REM ----------------------------
|
|
REM Check for winget (required for auto-install)
|
|
REM ----------------------------
|
|
set WINGET_AVAILABLE=0
|
|
where winget >nul 2>&1
|
|
set WINGET_CHECK=!ERRORLEVEL!
|
|
if !WINGET_CHECK! equ 0 (
|
|
set WINGET_AVAILABLE=1
|
|
echo [OK] winget found ^(automatic installation available^)
|
|
) else (
|
|
echo [WARN] winget not found ^(manual installation will be required^)
|
|
echo To enable automatic installation, update to Windows 10 1809+ or Windows 11
|
|
)
|
|
echo.
|
|
|
|
REM ----------------------------
|
|
REM Check for Git (recommended for development)
|
|
REM ----------------------------
|
|
where git >nul 2>&1
|
|
set GIT_CHECK=!ERRORLEVEL!
|
|
if !GIT_CHECK! equ 0 (
|
|
echo [OK] Git found
|
|
git --version
|
|
) else (
|
|
echo [WARN] Git not found ^(recommended for development^)
|
|
|
|
if !WINGET_AVAILABLE! equ 1 (
|
|
echo.
|
|
echo Would you like to install Git automatically? ^(Y/N^):
|
|
set /p install_git=
|
|
|
|
if /I "!install_git!"=="Y" (
|
|
echo.
|
|
echo [INFO] Installing Git via winget...
|
|
winget install -e --id=Git.Git
|
|
set GIT_INSTALL_RESULT=!ERRORLEVEL!
|
|
|
|
if !GIT_INSTALL_RESULT! equ 0 (
|
|
echo [OK] Git installed successfully!
|
|
echo Please restart your terminal and run this script again.
|
|
exit /b 0
|
|
) else (
|
|
echo [ERROR] Failed to install Git automatically.
|
|
echo Please install manually from: https://git-scm.com/
|
|
)
|
|
)
|
|
) else (
|
|
echo Please install Git from: https://git-scm.com/
|
|
)
|
|
)
|
|
echo.
|
|
|
|
REM ----------------------------
|
|
REM Check for GCC (required for CGO)
|
|
REM ----------------------------
|
|
where gcc >nul 2>&1
|
|
set GCC_CHECK=!ERRORLEVEL!
|
|
if !GCC_CHECK! neq 0 (
|
|
echo [WARN] GCC not found. CGO requires a C compiler.
|
|
echo.
|
|
echo VideoTools requires MinGW-w64 to build on Windows.
|
|
echo.
|
|
|
|
if !WINGET_AVAILABLE! equ 1 (
|
|
echo Would you like to install MinGW-w64 automatically? ^(Y/N^):
|
|
set /p install_gcc=
|
|
|
|
if /I "!install_gcc!"=="Y" (
|
|
echo.
|
|
echo [INFO] Installing MinGW-w64 via winget...
|
|
echo This may take a few minutes...
|
|
winget install -e --id=MSYS2.MSYS2
|
|
set MSYS2_INSTALL_RESULT=!ERRORLEVEL!
|
|
|
|
REM Check if MSYS2 is installed (either newly installed or already present)
|
|
if exist "C:\msys64\usr\bin\bash.exe" (
|
|
set MSYS2_INSTALL_RESULT=0
|
|
)
|
|
|
|
if !MSYS2_INSTALL_RESULT! equ 0 (
|
|
echo [OK] MSYS2 installed successfully!
|
|
echo.
|
|
echo [INFO] Installing GCC toolchain...
|
|
C:\msys64\usr\bin\bash.exe -lc "pacman -S --noconfirm mingw-w64-x86_64-gcc"
|
|
set GCC_INSTALL_RESULT=!ERRORLEVEL!
|
|
|
|
if !GCC_INSTALL_RESULT! equ 0 (
|
|
echo [OK] GCC installed successfully!
|
|
echo.
|
|
echo [INFO] Adding MinGW to PATH for this session...
|
|
set "PATH=C:\msys64\mingw64\bin;!PATH!"
|
|
|
|
echo [OK] Setup complete! Continuing with build...
|
|
echo.
|
|
) else (
|
|
echo [ERROR] Failed to install GCC. Please install manually.
|
|
echo Visit: https://www.msys2.org/
|
|
exit /b 1
|
|
)
|
|
) else (
|
|
echo [ERROR] Failed to install MSYS2. Please install manually.
|
|
echo Visit: https://www.msys2.org/
|
|
exit /b 1
|
|
)
|
|
) else (
|
|
echo Skipping automatic installation.
|
|
)
|
|
) else (
|
|
echo winget is not available on this system.
|
|
)
|
|
|
|
REM Show manual installation instructions if we get here
|
|
echo.
|
|
echo [ERROR] GCC is required to build VideoTools on Windows.
|
|
echo.
|
|
echo Please install MinGW-w64 manually:
|
|
echo 1. Install MSYS2 from https://www.msys2.org/
|
|
echo 2. Run: pacman -S mingw-w64-x86_64-gcc
|
|
echo 3. Add C:\msys64\mingw64\bin to your PATH
|
|
echo 4. Restart your terminal and run this script again
|
|
echo.
|
|
exit /b 1
|
|
)
|
|
) else (
|
|
echo [OK] GCC found:
|
|
gcc --version | findstr /C:"gcc"
|
|
echo.
|
|
)
|
|
|
|
REM ----------------------------
|
|
REM Move to project root
|
|
REM ----------------------------
|
|
pushd "%~dp0\.."
|
|
|
|
REM ----------------------------
|
|
REM Clean previous build
|
|
REM ----------------------------
|
|
echo [INFO] Cleaning previous Windows build...
|
|
if exist VideoTools.exe del /f VideoTools.exe
|
|
echo [OK] Cache cleaned
|
|
echo.
|
|
|
|
REM ----------------------------
|
|
REM Download go dependencies
|
|
REM ----------------------------
|
|
echo [INFO] Downloading dependencies...
|
|
go mod download
|
|
if %ERRORLEVEL% neq 0 (
|
|
echo [ERROR] Failed to download dependencies.
|
|
exit /b 1
|
|
)
|
|
echo [OK] Dependencies downloaded
|
|
echo.
|
|
|
|
REM ----------------------------
|
|
REM Build VideoTools (Windows GUI mode)
|
|
REM Note: CGO is required for Fyne/OpenGL on Windows
|
|
REM ----------------------------
|
|
echo [INFO] Building VideoTools.exe...
|
|
|
|
REM Enable CGO for Windows build (required for Fyne)
|
|
set CGO_ENABLED=1
|
|
|
|
go build ^
|
|
-ldflags="-H windowsgui -s -w" ^
|
|
-o VideoTools.exe ^
|
|
.
|
|
|
|
if %ERRORLEVEL% neq 0 (
|
|
echo [ERROR] Build failed!
|
|
popd
|
|
exit /b 1
|
|
)
|
|
|
|
echo [OK] Build successful!
|
|
echo.
|
|
|
|
REM ----------------------------
|
|
REM Show file size
|
|
REM ----------------------------
|
|
for %%A in (VideoTools.exe) do set FILESIZE=%%~zA
|
|
echo Output: VideoTools.exe ^(Size: !FILESIZE! bytes^)
|
|
echo.
|
|
|
|
REM ----------------------------
|
|
REM Offer to run FFmpeg setup
|
|
REM ----------------------------
|
|
if exist "%~dp0setup-windows.ps1" (
|
|
echo Would you like to download FFmpeg now? ^(Y/N^):
|
|
set /p choice=
|
|
|
|
if /I "!choice!"=="Y" (
|
|
powershell -ExecutionPolicy Bypass -File "%~dp0setup-windows.ps1" -Portable
|
|
) else (
|
|
echo Skipping FFmpeg setup. You can run setup-windows.ps1 later.
|
|
)
|
|
)
|
|
|
|
popd
|
|
exit /b 0
|