1
0
mirror of https://github.com/simh/simh.git synced 2026-01-26 04:01:38 +00:00

Visual Studio Projects: Migration to normalized windows-build support

- All projects use identical include directories, library definitions and
   library directories.
- Remove attempts to add XP support to projects that were converted to
   .vcxproj for post VC2008 versions of Visual Studio.
- Require that git be available when building within a git repository
   working directory.
This commit is contained in:
Mark Pizzolato
2018-07-05 05:52:28 -07:00
parent 0bc5302513
commit 173e1bf073
65 changed files with 578 additions and 715 deletions

View File

@@ -12,8 +12,8 @@ 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 These libraries currently include winpcap, pthreads, SDL
rem 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
@@ -22,81 +22,21 @@ 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 git repository, then assuring that git hooks which manage making
rem the 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 current path. If it isn't, then report that fact and suggest how
rem to make sure that it is.
rem - performing the activities which make the git repository commit id
rem available in an include file during compiles.
rem - Converting Visual Studio Projects to a form which will produce
rem binaries which run on Windows XP if the current build environment
rem supports it and the correct components are installed.
rem This activity is triggered by the first argument being the name
rem of a the current Visual Studio project file. This argument MUST
rem only be provided on a single project which invokes this procedure
rem AND that project should be one which all other projects in a
rem solution are dependent on.
rem
rem
if "%~x1" == ".vcproj" goto _done_xp_check
if not "%~x1" == ".vcxproj" goto _done_project
if exist PlatformToolset.fix goto _project_cleanup
findstr PlatformToolset %1 >NUL
if ERRORLEVEL 1 goto _next_arg
findstr PlatformToolset %1 | findstr _xp >NUL
if not ERRORLEVEL 1 goto _done_xp_check
echo warning: The %~n1.exe binary can't run on windows XP.
set _XP_Support_Available=
for /r "%PROGRAMDATA%" %%z in (packages\XPSupport\Win_XPSupport.msi) do if exist "%%z" set _XP_Support_Available=1
if "" == "%_XP_Support_Available%" goto _done_xp_check
if exist PlatformToolset.fix exit /b 1
echo. >>PlatformToolset.fix
if ERRORLEVEL 1 exit /B 1
echo warning: Adding Windows XP suppport to all project files at %TIME%
rem Everything implicitly requires BUILD to also be set to have
rem any meaning, it always gets set.
set _X_BUILD=BUILD
call :FindVCVersion _VC_VER
echo Set objFSO = CreateObject("Scripting.FileSystemObject") >>%1.fix.vbs
echo Set objFile = objFSO.OpenTextFile(Wscript.Arguments(0), 1) >>%1.fix.vbs
echo. >>%1.fix.vbs
echo strText = objFile.ReadAll >>%1.fix.vbs
echo objFile.Close >>%1.fix.vbs
echo strText = Replace(strText, "</PlatformToolset>", "_xp</PlatformToolset>") >>%1.fix.vbs
echo. >>%1.fix.vbs
if %_VC_VER% GEQ 14 echo strText = Replace(strText, _>>%1.fix.vbs
if %_VC_VER% GEQ 14 echo "__CLEANUP_C</PreprocessorDefinitions>", _>>%1.fix.vbs
if %_VC_VER% GEQ 14 echo "__CLEANUP_C;_USING_V110_SDK71_</PreprocessorDefinitions>") _>>%1.fix.vbs
if %_VC_VER% GEQ 14 echo. >>%1.fix.vbs
echo Set objFile = objFSO.OpenTextFile(Wscript.Arguments(0), 2) >>%1.fix.vbs
echo objFile.Write strText >>%1.fix.vbs
echo objFile.Close >>%1.fix.vbs
call :_Fix_PlatformToolset %1 %1
for %%f in (*.vcxproj) do call :_Fix_PlatformToolset %1 %%f
call :_GitHooks
del %1.fix.vbs
rem wait a bit here to allow a parallel build of the to complete additional projects
echo Error: Reload the changed projects and start the build again
exit /B 1
:_Fix_PlatformToolset
findstr PlatformToolset %2 >NUL
if ERRORLEVEL 1 exit /B 0
findstr PlatformToolset %2 | findstr _xp >NUL
if not ERRORLEVEL 1 exit /B 0
echo Adding XP support to project %2
cscript %1.fix.vbs %2 > NUL 2>&1
exit /B 0
:_done_xp_check
shift
goto _done_project
:_project_cleanup
shift
del PlatformToolset.fix
:_done_project
if exist PlatformToolset.fix echo error: Reload any changed projects and rebuild again,
if exist PlatformToolset.fix exit /b 1
:_next_arg
if "%1" == "" goto _done_args
@@ -115,11 +55,6 @@ 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, LIBPCRE and FINDFONT
if not "%_X_FINDFONT%" == "" set _X_BUILD=BUILD
if not "%_X_LIBSDL%" == "" set _X_BUILD=BUILD
if not "%_X_LIBPCRE%" == "" set _X_BUILD=BUILD
:_do_rom
@@ -130,10 +65,11 @@ if exist BIN\NT\Win32-Debug\BuildROMs.exe SET _BLD=BIN\NT\Win32-Debug\BuildROMs.
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 ** Project dependencies are not correct. **
if "%_BLD%" == "" echo ** This project should depend on BuildROMs. **
if "%_BLD%" == "" echo ************************************************
if "%_BLD%" == "" echo ************************************************
if "%_BLD%" == "" echo error: Review the Output Tab for more details.
if "%_BLD%" == "" exit 1
%_BLD%
if not errorlevel 1 goto _done_rom
@@ -157,26 +93,25 @@ ren ..\..\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
findstr "/c:_MSC_VER >= 1900" ..\..\windows-build\pthreads\pthread.h >NUL
if ERRORLEVEL 1 goto _notice2
if "%_X_LIBSDL%" == "" goto _done_libsdl
if not exist ../../windows-build/libSDL/SDL2-2.0.5/include/SDL.h goto _notice2
if not exist "..\..\windows-build\libpng-1.6.18\projects\vstudio\Release Library\*" goto _notice2
if not exist "../../windows-build/libSDL/Microsoft DirectX SDK (June 2010)/Lib/x86/dxguid.lib" goto _notice2
findstr "/c:LIBSDL_FTOL2_SSE" ..\..\windows-build\Windows-Build_Versions.txt >NUL
if ERRORLEVEL 1 goto _notice2
findstr "/c:LIBSDL_ALLMUL" ..\..\windows-build\Windows-Build_Versions.txt >NUL
if ERRORLEVEL 1 goto _notice2
findstr "/c:LIBSDL_ALLSHR" ..\..\windows-build\Windows-Build_Versions.txt >NUL
if ERRORLEVEL 1 goto _notice2
call :FindVCVersion _VC_VER
if not exist ../../windows-build goto _notice1
if not exist ../../windows-build/lib goto _notice2
if not exist ../../windows-build/lib/VisualCVersionSupport.txt goto _find_vc_support
set _X_VC_VER=
for /F "usebackq tokens=2*" %%i in (`findstr /C:"_VC_VER=%_VC_VER% " ..\..\windows-build\lib\VisualCVersionSupport.txt`) do SET _X_VC_VER=%%i %%j
if "%_X_VC_VER%" neq "" echo Library support for %_X_VC_VER% is available
if "%_X_VC_VER%" neq "" goto _done_libsdl
:_find_vc_support
set _X_VC_VER_DIR=
for /d %%i in ("../../windows-build/lib/*") do call :CheckDirectoryVCSupport _X_VC_VER_DIR %%i "../../windows-build/lib/"
if "%_X_VC_VER_DIR%" equ "" goto _notice4
:_make_vc_support_active
for /F "usebackq tokens=2*" %%i in (`findstr /C:"_VC_VER=%_VC_VER% " "%_X_VC_VER_DIR%\VisualCVersionSupport.txt"`) do SET _X_VC_VER=%%i %%j
echo Enabling Library support for %_X_VC_VER%
call "%_X_VC_VER_DIR%\Install-Library-Support.cmd"
:_done_libsdl
if "%_X_LIBPCRE%" == "" goto _done_libpcre
if not exist ../../windows-build/PCRE/include/pcreposix.h goto _notice2
:_done_libpcre
if "%_X_FINDFONT%" == "" goto _done_findfont
if not exist ../../windows-build/libSDL/SDL2_ttf-2.0.12/SDL_ttf.h goto _notice2
if "%_X_FontName%" == "" goto _done_findfont
echo. >%_X_FontIncludeName%.temp
set FONTFILE=%windir%\Fonts\%_X_FontName%
@@ -238,6 +173,26 @@ echo *****************************************************
echo *****************************************************
set _exit_reason=Can't rename ../../windows-build-windows-build to ../../windows-build
goto _ProjectInfo
:_notice4
echo *********************************
echo *********************************
echo ** Visual Studio Version: %_VC_VER% **
echo ** Visual Studio Version: %_VC_VER% **
echo ** Visual Studio Version: %_VC_VER% **
echo ** Visual Studio Version: %_VC_VER% **
echo *****************************************************
echo *****************************************************
echo ** Windows Build support for your Microsoft **
echo ** Visual Studio version is not available yet. **
echo ** Please create a new issue at: **
echo ** https://github.com/simh/simh/issues describing **
echo ** what you've done and support should be added **
echo ** soon. Otherwise, you can install an earlier **
echo ** version of Microsoft Visual Studio and use **
echo ** that. **
echo *****************************************************
echo *****************************************************
goto _ProjectInfo
:_ProjectInfo
type 0ReadMe_Projects.txt
echo error: %_exit_reason%
@@ -247,6 +202,32 @@ exit 1
:_GitHooks
if not exist ..\.git goto _done_hooks
call :FindGit _GIT_GIT
if "%_GIT_GIT%" neq "" goto _check_hooks
echo ** ERROR ** ERROR ** ERROR ** ERROR ** ERROR ** ERROR **
echo ** ERROR ** ERROR ** ERROR ** ERROR ** ERROR ** ERROR **
echo ** **
echo ** Your local simh code is in a git repository, **
echo ** however, the git program executable can not be **
echo ** readily found on your system. **
echo ** **
echo ** You should download and install git from: **
echo ** **
echo ** https://git-scm.com/download/win **
echo ** **
echo ** while installing git for windows, be sure to **
echo ** select the option to "Use Git from the Windows **
echo ** Command Prompt" **
echo ** **
echo ** You should logout and login again after initally **
echo "" installing git to be sure that the installation **
echo ** location is properly visible in your search path.**
echo ** **
echo ** ERROR ** ERROR ** ERROR ** ERROR ** ERROR ** ERROR **
echo ** ERROR ** ERROR ** ERROR ** ERROR ** ERROR ** ERROR **
echo error: Review the Output Tab for more details.
exit 1
:_check_hooks
if not exist ..\.git\hooks\post-commit goto _initial_hooks
fc /b ..\.git\hooks\post-commit git-hooks\post-commit >nul
if %ERRORLEVEL% equ 0 goto _done_hooks
@@ -264,22 +245,9 @@ echo *****************************************************
echo *****************************************************
:_install_hooks
copy /y git-hooks\post* ..\.git\hooks\
call :WhereInPath git.exe > NUL 2>&1
if %ERRORLEVEL% equ 0 goto _do_hooks
echo ** WARNING ** WARNING ** WARNING ** WARNING ** WARNING **
echo ** WARNING ** WARNING ** WARNING ** WARNING ** WARNING **
echo ** **
echo ** Git Commit id invalid. You must perform a **
echo ** git checkout on the current branch to solve **
echo ** this problem. **
echo ** **
echo ** WARNING ** WARNING ** WARNING ** WARNING ** WARNING **
echo ** WARNING ** WARNING ** WARNING ** WARNING ** WARNING **
echo error: Review the Output Tab for more details.
exit 1
:_do_hooks
pushd ..
git log -1 --pretty="SIM_GIT_COMMIT_ID %%H%%nSIM_GIT_COMMIT_TIME %%aI" >.git-commit-id
"%_GIT_GIT%" log -1 --pretty="SIM_GIT_COMMIT_ID %%H%%nSIM_GIT_COMMIT_TIME %%aI" >.git-commit-id
popd
:_done_hooks
@@ -317,9 +285,24 @@ if "%~$PATH:1" EQU "" exit /B 1
set %2=%~$PATH:1
exit /B 0
:FindGit
set _GIT_TMP=%1
call :WhichInPath git.exe _GIT_TMP_
if "%_GIT_TMP_%" neq "" goto GitFound
call :WhichInPath cl.exe _VC_CL_
for /f "tokens=1-4 delims=\" %%a in ("%_VC_CL_%") do set _GIT_BASE_="%%a\%%b\%%c\%%d\"
for /r %_GIT_BASE_% %%a in (git.exe) do if exist "%%a" set _GIT_TMP_=%%a
:GitFound
set %_GIT_TMP%=%_GIT_TMP_%
set _VC_CL_=
set _GIT_BASE_=
set _GIT_TMP_=
set _GIT_TMP=
exit /B 0
:FindVCVersion
call :WhichInPath cl.exe _VC_CL_
for /f "tokens=2-8 delims=\" %%a in ("%_VC_CL_%") do call :VCCheck _VC_VER_NUM_ "%%a" "%%b" "%%c" "%%d" "%%e" "%%f" "%%g"
for /f "tokens=3-9 delims=\" %%a in ("%_VC_CL_%") do call :VCCheck _VC_VER_NUM_ "%%a" "%%b" "%%c" "%%d" "%%e" "%%f" "%%g"
for /f "delims=." %%a in ("%_VC_VER_NUM_%") do set %1=%%a
set _VC_CL=
exit /B 0
@@ -331,8 +314,38 @@ shift
set _VC_TMP_=%~1
if "%_VC_TMP_%" equ "" goto _VCCheck_Done
if "%_VC_TMP_:~0,24%" EQU "Microsoft Visual Studio " set %_VC_TMP%=%_VC_TMP_:Microsoft Visual Studio =%
call :IsNumeric _VC_NUM_ %_VC_TMP_%
if "%_VC_NUM_%" neq "" set %_VC_TMP%=%~1
if "%_VC_NUM_%" neq "" goto _VCCheck_Done
goto _VCCheck_Next
:_VCCheck_Done
set _VC_TMP_=
set _VC_TMP=
set _VC_NUM_=
exit /B 0
:CheckDirectoryVCSupport
set _VC_Check_Path=%~3%~2/
set _VC_Check_Path=%_VC_Check_Path:/=\%
if not exist "%_VC_Check_Path%VisualCVersionSupport.txt" exit /B 1
for /F "usebackq tokens=2*" %%k in (`findstr /C:"_VC_VER=%_VC_VER% " "%_VC_Check_Path%VisualCVersionSupport.txt"`) do set %1=%_VC_Check_Path%
exit /B 0
:IsNumeric
set _Numeric_TMP_=%~1
set _Numeric_Test_=%2
set _Numeric_Test_=%_Numeric_Test_:~0,1%
set %_Numeric_TMP_%=
if "%_Numeric_Test_%"=="0" set %_Numeric_TMP_%=1
if "%_Numeric_Test_%"=="1" set %_Numeric_TMP_%=1
if "%_Numeric_Test_%"=="2" set %_Numeric_TMP_%=1
if "%_Numeric_Test_%"=="3" set %_Numeric_TMP_%=1
if "%_Numeric_Test_%"=="4" set %_Numeric_TMP_%=1
if "%_Numeric_Test_%"=="5" set %_Numeric_TMP_%=1
if "%_Numeric_Test_%"=="6" set %_Numeric_TMP_%=1
if "%_Numeric_Test_%"=="7" set %_Numeric_TMP_%=1
if "%_Numeric_Test_%"=="8" set %_Numeric_TMP_%=1
if "%_Numeric_Test_%"=="9" set %_Numeric_TMP_%=1
set _Numeric_TMP_=
set _Numeric_Test_=
exit /B 0