I am looking to implement a continuous unit test running system, something I have heard called a "smoketest" or "tinderbox", (a build server that does clean version control check-outs and full system builds of everything in a given source repository or project), and something like "continuous integration" for small teams, with Delphi.
I am loathe to commit to a commercial "build server" product and am hoping I can do a lot of this just with MS-Build support that is built into delphi.
I am looking for resources, ideas, and a place to get started. I do not know how to use MS Build for this purpose. Steve Trevethen has a blog post that leads to a little discussion on the old dcc32 command line build, and some comments mention ms-build which has been here since delphi 2007. I am using Delphi 2010. I am looking for guidance and insight, and experiences, that will tell me, is this a reasonable path to go down, and if not, what way should I go instead?
I found you can override the Unit (DCU) and EXE Output Directory from the msbuild command line with /p:DCU_DcuOutput=. Note that I looked at the XML inside my DPROJ files to figure out how to override stuff.
However, it only does a make, not a build, and /t:rebuild does not work (edit: yes it does. it works fine on DPROJ files, but not on GroupProjects.)
I wish there was more MSBuild-with-Delphi documentation out there anywhere? The MS-Build help in "Rad Studio 2010" product documentation shows one or two things about MS-Build but is really sketchy and incomplete.
Related questions:
MSBuild command lines
Delphi 2010 uses MSBuild as it's main build engine. That means that the IDE and the command line both do exactly the same thing. It also means that you can easily build existing projects with the command line. In fact, we on the Delphi team do this exact thing all the time. You need not worry about switches for the compiler itself -- the DProj file created by the IDE will
On the Start Menu is a command line for using MSBuild with an existing Delphi project. It sets up the environment correctly so that you can simply call:
msbuild myproject.dproj
You can also call specific build configurations from the command line, using the IDE to easily create said configurations using command line parameters for MSBuild.
If you want to create the environment yourself, you can run the rsvars.bat batch file to set things up. That file can be found in your \bin directory, and should be available from a default command line.
The file contains the following:
@SET BDS=<your BDS directory>
@SET BDSCOMMONDIR=C:\Users\Public\Documents\RAD Studio\7.0
@SET FrameworkDir=C:\Windows\Microsoft.NET\Framework\v2.0.50727
@SET FrameworkVersion=v2.0.50727
@SET FrameworkSDKDir=
@SET PATH=%FrameworkDir%;%FrameworkSDKDir%;%PATH%
@SET LANGDIR=EN
Thus, if you want to create your own continuous integration build, you can easily manage your Delphi build using MSBuild.
The dproj and groupproj are msbuild files and you can have a look inside them. The other parts of the information are to be find in the msbuild installation path (C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727). There you will find several Borland.*.targets files.
Inside the msbuild scripts you can see the different targets named with . For example the groupfile contains Make, Clean and Build targets which you can specify with the /t parameter. The same goes for the dproj files. dproj files also have a ReBuild target. It does a Clean and then a Build. If you want to have the same effect for groupfile you could specify two targets: /t:Clean;Build
You will also find lots of parameters in you can set with /p. Like for example Configuration to specify the configuration or DCC_Quiet to instruct dcc32 to stop outputting useless whitespaces.
So the doing a build with Release configuration from the command line is this command:
msbuild mygroup.groupproj /p:Configuration=Release /t:Build
disclaimer: I have looked at Delphi 2007's msbuild files. Later Delphi versions might have changed the name of the targets or parameters. Just have a look inside the msbuild scripts to find out which is which.
I'm not sure if this is what you need, but I have CruiseControl.NET setup for doing continuous integration - and DUnit tests - for Delphi 2009. CCNET has a specific set of tasks for MSBuild, and other than a few setup issues, it works perfectly for me.
I can let you know what I had to do get ths working if you need.
Mark