| src/tools/msvc/README |
| |
| MSVC build |
| ========== |
| |
| This directory contains the tools required to build PostgreSQL using |
| Microsoft Visual Studio 2013 - 2022. This builds the whole backend, not just |
| the libpq frontend library. For more information, see the documentation |
| chapter "Installation on Windows" and the description below. |
| |
| |
| Notes about Visual Studio Express |
| --------------------------------- |
| To build PostgreSQL using Visual Studio Express, the Microsoft Windows SDK |
| has to be installed. Since this is not included in the product |
| originally, extra steps are needed to make it work. |
| |
| First, download and install a supported version of the Microsoft Windows SDK |
| from www.microsoft.com (v8.1a or greater). |
| |
| Locate the files vcprojectengine.dll.express.config and |
| vcprojectengine.dll.config in the vc\vcpackages directory of |
| the Visual C++ Express installation. In these files, add the paths |
| to the Platform SDK to the Include, Library and Path tags. Be sure |
| to add them to the beginning of the list. |
| |
| This should work for both GUI and commandline builds, but a restart |
| may be necessary. |
| |
| If you are using a recent version of the Microsoft Windows SDK that includes |
| the compilers and build tools you probably don't even need Visual Studio |
| Express to build PostgreSQL. |
| |
| |
| Structure of the build tools |
| ---------------------------- |
| The tools for building PostgreSQL using Microsoft Visual Studio currently |
| consist of the following files: |
| |
| - Configuration files - |
| config_default.pl default configuration arguments |
| |
| A typical build environment has two more files, buildenv.pl and config.pl |
| that contain the user's build environment settings and configuration |
| arguments. |
| |
| |
| - User tools - |
| build.pl tool to build the binaries |
| clean.bat batch file for cleaning up generated files |
| install.pl tool to install the generated files |
| mkvcbuild.pl tool to generate the Visual Studio build files |
| vcregress.pl tool to run the regression tests |
| |
| |
| - Internal tools - |
| gendef.pl internal tool to generate .DEF files |
| pgbison.pl internal tool to process .y files using bison |
| pgflex.pl internal tool to process .l files using flex |
| |
| Many of those .pl files also have a corresponding .bat-wrapper that doesn't |
| contain any additional logic. |
| |
| |
| - Internal modules - |
| Install.pm module containing the install logic |
| Mkvcbuild.pm module containing the code to generate the Visual |
| Studio build (project/solution) files |
| MSBuildProject.pm module containing the code to generate MSBuild based |
| project files (Visual Studio 2013 or greater) |
| Project.pm module containing the common code to generate the |
| Visual Studio project files. Also provides the |
| common interface of all project file generators |
| Solution.pm module containing the code to generate the Visual |
| Studio solution files. |
| VSObjectFactory.pm factory module providing the code to create the |
| appropriate project/solution files for the current |
| environment |
| |
| |
| Description of the internals of the Visual Studio build process |
| --------------------------------------------------------------- |
| By typing 'build' the user starts the build.bat wrapper which simply passes |
| its arguments to build.pl. |
| In build.pl the user's buildenv.pl is used to set up the build environment |
| (i. e. path to bison and flex). In addition his config.pl file is merged into |
| config_default.pl to create the configuration arguments. |
| These configuration arguments are passed over to Mkvcbuild::mkvcbuild |
| (Mkvcbuild.pm) which creates the Visual Studio project and solution files. |
| It does this by using VSObjectFactory::CreateSolution to create an object |
| implementing the Solution interface (this could be either VS2013Solution, |
| VS2015Solution, VS2017Solution, VS2019Solution or VS2022Solution, all in |
| Solution.pm, depending on the user's build environment) and adding objects |
| implementing the corresponding Project interface (VC2013Project, |
| VC2015Project, VC2017Project, VC2019Project or VC2022Project from |
| MSBuildProject.pm) to it. When Solution::Save is called, the implementations |
| of Solution and Project save their content in the appropriate format. |
| The final step of starting the appropriate build program (msbuild) is |
| performed in build.pl again. |