From 28d96b104e14f30cfcb37680d77b31ce920c03ad Mon Sep 17 00:00:00 2001
From: izawartka <59137928+izawartka@users.noreply.github.com>
Date: Sun, 2 Aug 2026 20:59:17 +0200
Subject: [PATCH] Extract pre and post build scripts
- Extracted pre-build and post-build scripts to tools\
- Updated the pre-build script to overwrite git.h only if commit hash has changed
- Improved post build scripts error handling and debugging symbols support
---
GTA2.props | 1 +
gta2-seuko-mod.vcxproj | 302 ++---------------------------------
tools/post-build-asi.bat | 68 ++++++++
tools/post-build-dinput8.bat | 48 ++++++
tools/update-git-header.bat | 42 +++++
5 files changed, 169 insertions(+), 292 deletions(-)
create mode 100644 tools/post-build-asi.bat
create mode 100644 tools/post-build-dinput8.bat
create mode 100644 tools/update-git-header.bat
diff --git a/GTA2.props b/GTA2.props
index 970315d..6f33c4a 100644
--- a/GTA2.props
+++ b/GTA2.props
@@ -5,5 +5,6 @@
gta2.exe
$(GTA2_DIR)\scripts
gta2-seuko-mod.asi
+ gta2-seuko-mod.pdb
diff --git a/gta2-seuko-mod.vcxproj b/gta2-seuko-mod.vcxproj
index 4988b4f..4527dd9 100644
--- a/gta2-seuko-mod.vcxproj
+++ b/gta2-seuko-mod.vcxproj
@@ -127,62 +127,10 @@
src\dinput8.def
- @echo off
-
-echo Dinput8 proxy mode enabled
-
-if "$(GTA2_DIR)"=="" (
- echo ERROR: GTA2_DIR is not set. Make sure to set it in GTA2.props file.
- exit /b 1
-)
-
-if "$(GTA2_EXE)"=="" (
- echo ERROR: GTA2_EXE is not set. Make sure to set it in GTA2.props file.
- exit /b 1
-)
-
-if not exist "$(GTA2_DIR)\" (
- echo ERROR: GTA2_DIR "$(GTA2_DIR)" specified in GTA2.props does not exist.
- exit /b 1
-)
-
-if not exist "$(GTA2_DIR)\$(GTA2_EXE)" (
- echo ERROR: "$(GTA2_EXE)" not found in "$(GTA2_DIR)". Check GTA2.props file.
- exit /b 1
-)
-
-echo Copying "$(TargetPath)" to "$(GTA2_DIR)"
-
-copy /Y "$(TargetPath)" "$(GTA2_DIR)\"
-if errorlevel 1 exit /b 1
-
-if exist "$(TargetDir)$(TargetName).pdb" (
- copy /Y "$(TargetDir)$(TargetName).pdb" "$(GTA2_DIR)\"
-)
-
-exit /b 0
-
+ call "$(ProjectDir)tools\post-build-dinput8.bat" "$(GTA2_DIR)" "$(GTA2_EXE)" "$(TargetPath)" "$(TargetDir)" "$(TargetName)"
- set GIT_HASH=unknown
-set GIT_DIRTY=false
-
-for /f %%i in ('git rev-parse --short HEAD 2^>nul') do set GIT_HASH=%%i
-
-for /f %%i in ('git status --porcelain 2^>nul') do (
- set GIT_DIRTY=true
- goto :dirty_done
-)
-:dirty_done
-
-echo #pragma once> "$(ProjectDir)src\git.h"
-echo // Auto-generated. Do not edit.>> "$(ProjectDir)src\git.h"
-echo.>> "$(ProjectDir)src\git.h"
-echo #define GIT_COMMIT_HASH "%GIT_HASH%">> "$(ProjectDir)src\git.h"
-echo #define GIT_IS_DIRTY %GIT_DIRTY%>> "$(ProjectDir)src\git.h"
-
-echo Created $(ProjectDir)src\git.h with commit %GIT_HASH% (dirty=%GIT_DIRTY%)
-
+ call "$(ProjectDir)tools\update-git-header.bat" "$(ProjectDir)"
@@ -209,73 +157,10 @@ echo Created $(ProjectDir)src\git.h with commit %GIT_HASH% (dirty=%GIT_DIRTY%)
- @echo off
-
-echo ASI mode enabled
-
-if "$(GTA2_DIR)"=="" (
- echo ERROR: GTA2_DIR is not set. Make sure to set it in GTA2.props file.
- exit /b 1
-)
-
-if "$(GTA2_EXE)"=="" (
- echo ERROR: GTA2_EXE is not set. Make sure to set it in GTA2.props file.
- exit /b 1
-)
-
-if not exist "$(GTA2_DIR)\" (
- echo ERROR: GTA2_DIR "$(GTA2_DIR)" specified in GTA2.props does not exist.
- exit /b 1
-)
-
-if not exist "$(GTA2_DIR)\$(GTA2_EXE)" (
- echo ERROR: "$(GTA2_EXE)" not found in "$(GTA2_DIR)". Check GTA2.props file.
- exit /b 1
-)
-
-if "$(GTA2_ASI_DIR)"=="" (
- echo ERROR: GTA2_ASI_DIR is not set. To build in ASI mode, make sure to set it in GTA2.props file.
- exit /b 1
-)
-
-if "$(GTA2_ASI_FILENAME)"=="" (
- echo ERROR: GTA2_ASI_FILENAME is not set. To build in ASI mode, make sure to set it in GTA2.props file.
- exit /b 1
-)
-
-if not exist "$(GTA2_ASI_DIR)\" (
- echo ERROR: GTA2_ASI_DIR "$(GTA2_ASI_DIR)" does not exist. Check GTA2.props file.
- exit /b 1
-)
-
-echo Copying "$(TargetPath)" to "$(GTA2_ASI_DIR)\$(GTA2_ASI_FILENAME)"
-
-copy /Y "$(TargetPath)" "$(GTA2_ASI_DIR)\$(GTA2_ASI_FILENAME)"
-if errorlevel 1 exit /b 1
-
-exit /b 0
-
+ call "$(ProjectDir)tools\post-build-asi.bat" "$(GTA2_DIR)" "$(GTA2_EXE)" "$(GTA2_ASI_DIR)" "$(GTA2_ASI_FILENAME)" "$(GTA2_ASI_PDB_FILENAME)" "$(TargetPath)" "$(TargetDir)" "$(TargetName)"
- set GIT_HASH=unknown
-set GIT_DIRTY=false
-
-for /f %%i in ('git rev-parse --short HEAD 2^>nul') do set GIT_HASH=%%i
-
-for /f %%i in ('git status --porcelain 2^>nul') do (
- set GIT_DIRTY=true
- goto :dirty_done
-)
-:dirty_done
-
-echo #pragma once> "$(ProjectDir)src\git.h"
-echo // Auto-generated. Do not edit.>> "$(ProjectDir)src\git.h"
-echo.>> "$(ProjectDir)src\git.h"
-echo #define GIT_COMMIT_HASH "%GIT_HASH%">> "$(ProjectDir)src\git.h"
-echo #define GIT_IS_DIRTY %GIT_DIRTY%>> "$(ProjectDir)src\git.h"
-
-echo Created $(ProjectDir)src\git.h with commit %GIT_HASH% (dirty=%GIT_DIRTY%)
-
+ call "$(ProjectDir)tools\update-git-header.bat" "$(ProjectDir)"
@@ -303,62 +188,10 @@ echo Created $(ProjectDir)src\git.h with commit %GIT_HASH% (dirty=%GIT_DIRTY%)
src\dinput8.def
- @echo off
-
-echo Dinput8 proxy mode enabled
-
-if "$(GTA2_DIR)"=="" (
- echo ERROR: GTA2_DIR is not set. Make sure to set it in GTA2.props file.
- exit /b 1
-)
-
-if "$(GTA2_EXE)"=="" (
- echo ERROR: GTA2_EXE is not set. Make sure to set it in GTA2.props file.
- exit /b 1
-)
-
-if not exist "$(GTA2_DIR)\" (
- echo ERROR: GTA2_DIR "$(GTA2_DIR)" specified in GTA2.props does not exist.
- exit /b 1
-)
-
-if not exist "$(GTA2_DIR)\$(GTA2_EXE)" (
- echo ERROR: "$(GTA2_EXE)" not found in "$(GTA2_DIR)". Check GTA2.props file.
- exit /b 1
-)
-
-echo Copying "$(TargetPath)" to "$(GTA2_DIR)"
-
-copy /Y "$(TargetPath)" "$(GTA2_DIR)\"
-if errorlevel 1 exit /b 1
-
-if exist "$(TargetDir)$(TargetName).pdb" (
- copy /Y "$(TargetDir)$(TargetName).pdb" "$(GTA2_DIR)\"
-)
-
-exit /b 0
-
+ call "$(ProjectDir)tools\post-build-dinput8.bat" "$(GTA2_DIR)" "$(GTA2_EXE)" "$(TargetPath)" "$(TargetDir)" "$(TargetName)"
- set GIT_HASH=unknown
-set GIT_DIRTY=false
-
-for /f %%i in ('git rev-parse --short HEAD 2^>nul') do set GIT_HASH=%%i
-
-for /f %%i in ('git status --porcelain 2^>nul') do (
- set GIT_DIRTY=true
- goto :dirty_done
-)
-:dirty_done
-
-echo #pragma once> "$(ProjectDir)src\git.h"
-echo // Auto-generated. Do not edit.>> "$(ProjectDir)src\git.h"
-echo.>> "$(ProjectDir)src\git.h"
-echo #define GIT_COMMIT_HASH "%GIT_HASH%">> "$(ProjectDir)src\git.h"
-echo #define GIT_IS_DIRTY %GIT_DIRTY%>> "$(ProjectDir)src\git.h"
-
-echo Created $(ProjectDir)src\git.h with commit %GIT_HASH% (dirty=%GIT_DIRTY%)
-
+ call "$(ProjectDir)tools\update-git-header.bat" "$(ProjectDir)"
@@ -388,73 +221,10 @@ echo Created $(ProjectDir)src\git.h with commit %GIT_HASH% (dirty=%GIT_DIRTY%)
- @echo off
-
-echo ASI mode enabled
-
-if "$(GTA2_DIR)"=="" (
- echo ERROR: GTA2_DIR is not set. Make sure to set it in GTA2.props file.
- exit /b 1
-)
-
-if "$(GTA2_EXE)"=="" (
- echo ERROR: GTA2_EXE is not set. Make sure to set it in GTA2.props file.
- exit /b 1
-)
-
-if not exist "$(GTA2_DIR)\" (
- echo ERROR: GTA2_DIR "$(GTA2_DIR)" specified in GTA2.props does not exist.
- exit /b 1
-)
-
-if not exist "$(GTA2_DIR)\$(GTA2_EXE)" (
- echo ERROR: "$(GTA2_EXE)" not found in "$(GTA2_DIR)". Check GTA2.props file.
- exit /b 1
-)
-
-if "$(GTA2_ASI_DIR)"=="" (
- echo ERROR: GTA2_ASI_DIR is not set. To build in ASI mode, make sure to set it in GTA2.props file.
- exit /b 1
-)
-
-if "$(GTA2_ASI_FILENAME)"=="" (
- echo ERROR: GTA2_ASI_FILENAME is not set. To build in ASI mode, make sure to set it in GTA2.props file.
- exit /b 1
-)
-
-if not exist "$(GTA2_ASI_DIR)\" (
- echo ERROR: GTA2_ASI_DIR "$(GTA2_ASI_DIR)" does not exist. Check GTA2.props file.
- exit /b 1
-)
-
-echo Copying "$(TargetPath)" to "$(GTA2_ASI_DIR)\$(GTA2_ASI_FILENAME)"
-
-copy /Y "$(TargetPath)" "$(GTA2_ASI_DIR)\$(GTA2_ASI_FILENAME)"
-if errorlevel 1 exit /b 1
-
-exit /b 0
-
+ call "$(ProjectDir)tools\post-build-asi.bat" "$(GTA2_DIR)" "$(GTA2_EXE)" "$(GTA2_ASI_DIR)" "$(GTA2_ASI_FILENAME)" "$(GTA2_ASI_PDB_FILENAME)" "$(TargetPath)" "$(TargetDir)" "$(TargetName)"
- set GIT_HASH=unknown
-set GIT_DIRTY=false
-
-for /f %%i in ('git rev-parse --short HEAD 2^>nul') do set GIT_HASH=%%i
-
-for /f %%i in ('git status --porcelain 2^>nul') do (
- set GIT_DIRTY=true
- goto :dirty_done
-)
-:dirty_done
-
-echo #pragma once> "$(ProjectDir)src\git.h"
-echo // Auto-generated. Do not edit.>> "$(ProjectDir)src\git.h"
-echo.>> "$(ProjectDir)src\git.h"
-echo #define GIT_COMMIT_HASH "%GIT_HASH%">> "$(ProjectDir)src\git.h"
-echo #define GIT_IS_DIRTY %GIT_DIRTY%>> "$(ProjectDir)src\git.h"
-
-echo Created $(ProjectDir)src\git.h with commit %GIT_HASH% (dirty=%GIT_DIRTY%)
-
+ call "$(ProjectDir)tools\update-git-header.bat" "$(ProjectDir)"
@@ -483,62 +253,10 @@ echo Created $(ProjectDir)src\git.h with commit %GIT_HASH% (dirty=%GIT_DIRTY%)
src\dinput8.def
- @echo off
-
-echo Dinput8 proxy mode enabled
-
-if "$(GTA2_DIR)"=="" (
- echo ERROR: GTA2_DIR is not set. Make sure to set it in GTA2.props file.
- exit /b 1
-)
-
-if "$(GTA2_EXE)"=="" (
- echo ERROR: GTA2_EXE is not set. Make sure to set it in GTA2.props file.
- exit /b 1
-)
-
-if not exist "$(GTA2_DIR)\" (
- echo ERROR: GTA2_DIR "$(GTA2_DIR)" specified in GTA2.props does not exist.
- exit /b 1
-)
-
-if not exist "$(GTA2_DIR)\$(GTA2_EXE)" (
- echo ERROR: "$(GTA2_EXE)" not found in "$(GTA2_DIR)". Check GTA2.props file.
- exit /b 1
-)
-
-echo Copying "$(TargetPath)" to "$(GTA2_DIR)"
-
-copy /Y "$(TargetPath)" "$(GTA2_DIR)\"
-if errorlevel 1 exit /b 1
-
-if exist "$(TargetDir)$(TargetName).pdb" (
- copy /Y "$(TargetDir)$(TargetName).pdb" "$(GTA2_DIR)\"
-)
-
-exit /b 0
-
+ call "$(ProjectDir)tools\post-build-dinput8.bat" "$(GTA2_DIR)" "$(GTA2_EXE)" "$(TargetPath)" "$(TargetDir)" "$(TargetName)"
- set GIT_HASH=unknown
-set GIT_DIRTY=false
-
-for /f %%i in ('git rev-parse --short HEAD 2^>nul') do set GIT_HASH=%%i
-
-for /f %%i in ('git status --porcelain 2^>nul') do (
- set GIT_DIRTY=true
- goto :dirty_done
-)
-:dirty_done
-
-echo #pragma once> "$(ProjectDir)src\git.h"
-echo // Auto-generated. Do not edit.>> "$(ProjectDir)src\git.h"
-echo.>> "$(ProjectDir)src\git.h"
-echo #define GIT_COMMIT_HASH "%GIT_HASH%">> "$(ProjectDir)src\git.h"
-echo #define GIT_IS_DIRTY %GIT_DIRTY%>> "$(ProjectDir)src\git.h"
-
-echo Created $(ProjectDir)src\git.h with commit %GIT_HASH% (dirty=%GIT_DIRTY%)
-
+ call "$(ProjectDir)tools\update-git-header.bat" "$(ProjectDir)"
diff --git a/tools/post-build-asi.bat b/tools/post-build-asi.bat
new file mode 100644
index 0000000..97adb62
--- /dev/null
+++ b/tools/post-build-asi.bat
@@ -0,0 +1,68 @@
+@echo off
+setlocal
+
+set GTA2_DIR=%~1
+set GTA2_EXE=%~2
+set GTA2_ASI_DIR=%~3
+set GTA2_ASI_FILENAME=%~4
+set GTA2_ASI_PDB_FILENAME=%~5
+set TARGET_PATH=%~6
+set TARGET_DIR=%~7
+set TARGET_NAME=%~8
+
+echo ASI mode enabled
+
+if "%GTA2_DIR%"=="" (
+ echo ERROR: GTA2_DIR is not set.
+ exit /b 1
+)
+
+if "%GTA2_EXE%"=="" (
+ echo ERROR: GTA2_EXE is not set.
+ exit /b 1
+)
+
+if not exist "%GTA2_DIR%\" (
+ echo ERROR: GTA2_DIR "%GTA2_DIR%" does not exist.
+ exit /b 1
+)
+
+if not exist "%GTA2_DIR%\%GTA2_EXE%" (
+ echo ERROR: "%GTA2_EXE%" not found in "%GTA2_DIR%".
+ exit /b 1
+)
+
+if "%GTA2_ASI_DIR%"=="" (
+ echo ERROR: GTA2_ASI_DIR is not set.
+ exit /b 1
+)
+
+if "%GTA2_ASI_FILENAME%"=="" (
+ echo ERROR: GTA2_ASI_FILENAME is not set.
+ exit /b 1
+)
+
+if not exist "%GTA2_ASI_DIR%\" (
+ echo ERROR: GTA2_ASI_DIR "%GTA2_ASI_DIR%" does not exist.
+ exit /b 1
+)
+
+echo Copying "%TARGET_PATH%" to "%GTA2_ASI_DIR%\%GTA2_ASI_FILENAME%"
+copy /Y "%TARGET_PATH%" "%GTA2_ASI_DIR%\%GTA2_ASI_FILENAME%" >nul
+if errorlevel 1 (
+ echo ERROR: Failed to copy to "%GTA2_ASI_DIR%\%GTA2_ASI_FILENAME%"
+ exit /b 1
+)
+
+@REM if not "%GTA2_ASI_PDB_FILENAME%"=="" (
+@REM if exist "%TARGET_DIR%\%TARGET_NAME%.pdb" (
+@REM echo Copying "%TARGET_DIR%\%TARGET_NAME%.pdb" to "%GTA2_ASI_DIR%\%GTA2_ASI_PDB_FILENAME%"
+@REM copy /Y "%TARGET_DIR%\%TARGET_NAME%.pdb" "%GTA2_ASI_DIR%\%GTA2_ASI_PDB_FILENAME%" >nul
+@REM if errorlevel 1 (
+@REM echo ERROR: Failed to copy to "%GTA2_ASI_DIR%\%GTA2_ASI_PDB_FILENAME%"
+@REM exit /b 1
+@REM )
+@REM )
+@REM )
+
+exit /b 0
\ No newline at end of file
diff --git a/tools/post-build-dinput8.bat b/tools/post-build-dinput8.bat
new file mode 100644
index 0000000..6d52b29
--- /dev/null
+++ b/tools/post-build-dinput8.bat
@@ -0,0 +1,48 @@
+@echo off
+setlocal
+
+set GTA2_DIR=%~1
+set GTA2_EXE=%~2
+set TARGET_PATH=%~3
+set TARGET_DIR=%~4
+set TARGET_NAME=%~5
+
+echo Dinput8 proxy mode enabled
+
+if "%GTA2_DIR%"=="" (
+ echo ERROR: GTA2_DIR is not set.
+ exit /b 1
+)
+
+if "%GTA2_EXE%"=="" (
+ echo ERROR: GTA2_EXE is not set.
+ exit /b 1
+)
+
+if not exist "%GTA2_DIR%\" (
+ echo ERROR: GTA2_DIR "%GTA2_DIR%" does not exist.
+ exit /b 1
+)
+
+if not exist "%GTA2_DIR%\%GTA2_EXE%" (
+ echo ERROR: "%GTA2_EXE%" not found in "%GTA2_DIR%".
+ exit /b 1
+)
+
+echo Copying "%TARGET_PATH%" to "%GTA2_DIR%\%TARGET_NAME%.dll"
+copy /Y "%TARGET_PATH%" "%GTA2_DIR%\%TARGET_NAME%.dll" >nul
+if errorlevel 1 (
+ echo ERROR: Failed to copy to "%GTA2_DIR%\%TARGET_NAME%.dll"
+ exit /b 1
+)
+
+@REM if exist "%TARGET_DIR%\%TARGET_NAME%.pdb" (
+@REM echo Copying "%TARGET_DIR%\%TARGET_NAME%.pdb" to "%GTA2_DIR%\%TARGET_NAME%.pdb"
+@REM copy /Y "%TARGET_DIR%\%TARGET_NAME%.pdb" "%GTA2_DIR%\%TARGET_NAME%.pdb" >nul
+@REM if errorlevel 1 (
+@REM echo ERROR: Failed to copy to "%GTA2_DIR%\%TARGET_NAME%.pdb"
+@REM exit /b 1
+@REM )
+@REM )
+
+exit /b 0
diff --git a/tools/update-git-header.bat b/tools/update-git-header.bat
new file mode 100644
index 0000000..1dbd433
--- /dev/null
+++ b/tools/update-git-header.bat
@@ -0,0 +1,42 @@
+@echo off
+setlocal
+
+set PROJECT_DIR=%~1
+
+set HEADER=%PROJECT_DIR%src\git.h
+set TEMP=%TEMP%\git.h.tmp
+
+set GIT_HASH=unknown
+set GIT_DIRTY=false
+
+for /f %%i in ('git rev-parse --short HEAD 2^>nul') do set GIT_HASH=%%i
+
+for /f %%i in ('git status --porcelain 2^>nul') do (
+ set GIT_DIRTY=true
+ goto dirty_done
+)
+
+:dirty_done
+
+(
+echo #pragma once
+echo // Auto-generated. Do not edit.
+echo.
+echo #define GIT_COMMIT_HASH "%GIT_HASH%"
+echo #define GIT_IS_DIRTY %GIT_DIRTY%
+) > "%TEMP%"
+
+if exist "%HEADER%" (
+ fc /b "%HEADER%" "%TEMP%" >nul
+ if not errorlevel 1 (
+ del "%TEMP%"
+ echo git.h unchanged
+ exit /b 0
+ )
+)
+
+move /Y "%TEMP%" "%HEADER%" >nul
+
+echo Updated git.h (%GIT_HASH%, dirty=%GIT_DIRTY%)
+
+exit /b 0