rem | |
rem This script performs several maintenance functions prior to building | |
rem simh projects. Some of these funtions are optional and depend on the | |
rem needs of the project being built, and others are generic and are always | |
rem performed. | |
rem | |
rem The optional activities are invoked by passing parameters to this | |
rem procedure. The parameters are: | |
rem ROM To run the BuildROMs program prior to executing a project | |
rem build. This program verifies that the include files containing | |
rem ROM images are consistent with the ROM images from which they | |
rem are derived. | |
rem BUILD To validate that the required dependent libraries and include | |
rem files are available in the directory ..\..\windows-build\ | |
rem These libraries currently include winpcap and pthreads and | |
rem optionally SDL and LIBPCRE. | |
rem LIBSDL To validate that the required dependent SDL libraries and include | |
rem files are available in the directory ..\..\windows-build\ | |
rem LIBPCRE To validate that the required dependent PCRE libraries and include | |
rem files are available in the directory ..\..\windows-build\ | |
rem | |
rem In addition to the optional activities mentioned above, other activities | |
rem are also performed. These include: | |
rem - confirming that if the current source is a clone of the simh | |
rem git repository, then then git hooks which manage making the | |
rem git commit hash available during builds are properly installed | |
rem in the repository hooks directory. When the githooks are installed | |
rem the current commit id is generated if git.exe is available in the | |
rem current path. | |
rem - performing the activities which make the git repository commit id | |
rem available in an include file during compiles. | |
rem | |
rem | |
:_next_arg | |
if "%1" == "" goto _done_args | |
set _arg= | |
if /I "%1" == "ROM" set _arg=ROM | |
if /I "%1" == "BUILD" set _arg=BUILD | |
if /I "%1" == "LIBSDL" set _arg=LIBSDL | |
if /I "%1" == "LIBPCRE" set _arg=LIBPCRE | |
if "%_arg%" == "" echo *** warning *** unknown parameter %0 | |
if not "%_arg%" == "" set _X_%_arg%=%_arg% | |
shift | |
goto _next_arg | |
:_done_args | |
rem some arguments implicitly require BUILD to also be set to have | |
rem any meaning. These are LIBSDL and LIBPCRE | |
if not "%_X_LIBSDL%" == "" set _X_BUILD=BUILD | |
if not "%_X_LIBPCRE%" == "" set _X_BUILD=BUILD | |
:_do_rom | |
if "%_X_ROM%" == "" goto _done_rom | |
pushd .. | |
SET _BLD= | |
if exist BIN\NT\Win32-Debug\BuildROMs.exe SET _BLD=BIN\NT\Win32-Debug\BuildROMs.exe | |
if exist BIN\NT\Win32-Release\BuildROMs.exe SET _BLD=BIN\NT\Win32-Release\BuildROMs.exe | |
if "%_BLD%" == "" echo ************************************************ | |
if "%_BLD%" == "" echo ************************************************ | |
if "%_BLD%" == "" echo ** Project dependencies not correct. ** | |
if "%_BLD%" == "" echo ** This project should depend on BuildROMs. ** | |
if "%_BLD%" == "" echo ************************************************ | |
if "%_BLD%" == "" echo ************************************************ | |
if "%_BLD%" == "" exit 1 | |
%_BLD% | |
popd | |
:_done_rom | |
:_check_build | |
if "%_X_BUILD%" == "" goto _done_build | |
if not exist ../../windows-build-windows-build goto _check_files | |
rem This is a newly extracted windows-build.zip file with the | |
rem top level directory named as it existed in the zip file. | |
rem We rename that top level directory. If a previous one already | |
rem exists, that will be an older version, so we try to remove | |
rem that one first. | |
if exist ../../windows-build rmdir /s /q ../../windows-build | |
ren /Y ../../windows-build-windows-build windows-build | |
if errorlevel 1 goto _notice3 | |
if exist ../../windows-build-windows-build goto _notice3 | |
:_check_files | |
if not exist ../../windows-build/winpcap/Wpdpack/Include/pcap.h goto _notice1 | |
if not exist ../../windows-build/pthreads/pthread.h goto _notice1 | |
if "%_X_LIBSDL%" == "" goto _done_libsdl | |
if not exist ../../windows-build/libSDL/SDL2-2.0.3/include/SDL.h goto _notice2 | |
if not exist "../../windows-build/libSDL/Microsoft DirectX SDK (June 2010)/Lib/x86/dxguid.lib" goto _notice2 | |
:_done_libsdl | |
if "%_X_LIBPCRE%" == "" goto _done_libpcre | |
if not exist ../../windows-build/PCRE/include/pcreposix.h goto _notice2 | |
:_done_libpcre | |
goto _done_build | |
:_notice1 | |
echo ***************************************************** | |
echo ***************************************************** | |
echo ** The required build support is not available. ** | |
echo ***************************************************** | |
echo ***************************************************** | |
set _exit_reason=The required build support is not available. | |
goto _ProjectInfo | |
:_notice2 | |
echo ***************************************************** | |
echo ***************************************************** | |
echo ** The required build support is out of date. ** | |
echo ***************************************************** | |
echo ***************************************************** | |
set _exit_reason=The required build support is out of date. | |
goto _ProjectInfo | |
:_notice3 | |
echo ***************************************************** | |
echo ***************************************************** | |
echo ** Can't rename ../../windows-build-windows-build ** | |
echo ** to ../../windows-build ** | |
echo ***************************************************** | |
echo ***************************************************** | |
set _exit_reason=Can't rename ../../windows-build-windows-build to ../../windows-build | |
goto _ProjectInfo | |
:_ProjectInfo | |
type 0ReadMe_Projects.txt | |
echo error: %_exit_reason% | |
echo error: Review the Output Tab for more details. | |
exit 1 | |
:_done_build | |
:_GitHooks | |
if not exist ..\.git goto _done_hooks | |
if exist ..\.git\hooks\post-commit goto _done_hooks | |
echo ***************************************************** | |
echo ***************************************************** | |
echo ** Installing git hooks in newly cloned repository ** | |
echo ***************************************************** | |
echo ***************************************************** | |
copy /y git-hooks\post* ..\.git\hooks\ | |
call :WhereInPath git.exe > NUL 2>&1 | |
if %ERRORLEVEL% neq 0 goto _done_hooks | |
pushd .. | |
git log -1 "--pretty=%%H" >.git-commit-id | |
popd | |
:_done_hooks | |
:_SetId | |
rem | |
rem A race condition exists while creating the .git-commit-id.h file. | |
rem This race can happen at the beginning of a parallel build where | |
rem several projects can start execution at almost the same time. | |
rem | |
SET GIT_COMMIT_ID= | |
if not exist ..\.git-commit-id goto _NoId | |
for /F %%i in (..\.git-commit-id) do SET GIT_COMMIT_ID=%%i | |
:_NoId | |
SET OLD_GIT_COMMIT_ID= | |
if not exist .git-commit-id.h echo.>.git-commit-id.h | |
for /F "tokens=3" %%i in (.git-commit-id.h) do SET OLD_GIT_COMMIT_ID=%%i | |
if "%GIT_COMMIT_ID%" equ "%OLD_GIT_COMMIT_ID%" goto _IdGood | |
echo Generating updated .git-commit-id.h containing id %GIT_COMMIT_ID% | |
echo #define SIM_GIT_COMMIT_ID %GIT_COMMIT_ID% >.git-commit-id.h | |
if errorlevel 1 echo Retrying... | |
if errorlevel 1 goto _SetId | |
:_IdGood | |
:_done_id | |
goto :EOF | |
:WhereInPath | |
if "%~$PATH:1" NEQ "" exit /B 0 | |
exit /B 1 |