@echo off setlocal enableextensions enabledelayedexpansion REM creates or updates version_auto.h set VERSION_EMPTY=%1 set VERSION_FILE=%2 set VERSION_NAME=%3 if "%~1" == "" set VERSION_EMPTY=false if "%~2" == "" set VERSION_FILE=version_auto.h if "%~3" == "" set VERSION_NAME=VGMSTREAM_VERSION set VERSION_DEFAULT=unknown if not "%VERSION%"=="" set VERSION=!VERSION:^:=_! cd /d "%~dp0" REM try get version from Git (dynamic), including lightweight tags :get_version_git for /f %%v in ('git describe --tags --always') do set VERSION=%%v if not "%VERSION%"=="" set VERSION=!VERSION:^:=_! if "%VERSION%"=="" goto :get_version_h if %VERSION%==%VERSION_DEFAULT% goto :get_version_h set LINE=#define %VERSION_NAME% "%VERSION%" /* autogenerated */ goto :got_version REM try to get version from version.h (static) :get_version_h echo Git version not found, can't autogenerate version (using default) REM option to output empty line instead of default version, so plugins can detect git-less builds if "%VERSION_EMPTY%"=="true" ( set LINE=/* ignored */ ) else ( set LINE=#define %VERSION_NAME% "%VERSION_DEFAULT%" /* autogenerated */ if exist "version.h" ( for /F "tokens=*" %%v in (version.h) do ( set TOKEN=%%v REM set COMP=#define %VERSION_NAME% #todo if /i "!TOKEN:~0,25!"=="#define VGMSTREAM_VERSION" set LINE=%%v /* default */ ) ) ) goto :got_version REM avoid overwritting if contents are the same, as some systems rebuild on timestamp :got_version set LINE_ORIGINAL=none if exist %VERSION_FILE% set /p LINE_ORIGINAL=<%VERSION_FILE% if not "%LINE%"=="%LINE_ORIGINAL%" ( REM no spaces! echo %LINE%>%VERSION_FILE% ) goto :exit REM * alt full file comp test REM echo %LINE% > %VERSION_FILE%_temp REM echo n | comp %VERSION_FILE%_temp %VERSION_FILE% > NUL 2> NUL REM if not errorlevel 1 goto :got_version_done REM copy /y %VERSION_FILE%_temp %VERSION_FILE% > NUL 2> NUL REM :got_version_done REM del %VERSION_FILE%_temp REM :exit REM done :exit