Let's build a Delphi application!

Overview

ActionChain is a tool designed to help you automizing tasks. The initial focus of it was and still is in application development, but including generic usage actions as well.

The current list of supported actions includes 259 different actions in various categories.

Customization

Standard actions never suffice when it comes to huge projects, so it’s important that a build chain can be extended by the user beyond the scope of the included actions.

Command line parameters

Parameters in Action Editor

Wherever we support external tools, we made sure to map all documented command line parameters to GUI elements, so that you can comfortably set up actions without having to read up the command line help of these tools (which, by the way, is displayed on an additional Help page so that you would not have to open a command processor to do just that).

Scripts

Scripts in Action Editor

Each action can be enhanced using scripts, written in PascalScript (Windows Scripting Host languages are currently being added) with access to parameters and variables.

Plugins

By using XML files, you can extend ActionChain with custom actions written in the supported script languages, or by defining command line parameters for external helper applications.

Features

Delphi-related

Versioning

ActionChain aims at supporting many version control systems so that you have real control over the exact revision you are building.

Compiling

Various compilers

ActionChain supports the Delphi command line compiler as well as FreePascal, plus MSBuild for Delphi project files, giving you a wide range of options to get your final binaries.

Adjust the PE Header of executables and libraries

Fix empty section addresses

The Vista SDK introduces a SignTool version that supports page hashes. This option requires optimized PE headers, where the physical section address has to be zero wherever the physical section size is zero.

This conforms with Microsofts description of the PE format:

When a section contains only uninitialized data, this field [PointerToRawData] should be zero.

Delphi linkers including Delphi XE write incorrect headers that need to be patched using this option before codesigning.

Dynamic base

This allows the file to be relocated at runtime, offering more security against memory address based attacks on software.

Force integrity

Enforces code integrity checks.

Update Delphi project files

If you develop software that consists of multiple Delphi projects, or even with a single one tend to change build settings, or even stumble across tools like madExcept automatically changing build settings, you need to update these.

Adjust version settings

It’s useful to have the major and minor version numbers stored within your global build script, which can then update each project accordingly. ActionChain allows you to update version information, copyright, trademarks and product name all from the build chaun

Adjust build configurations

If you tend to change the existing build configurations for testing purposes, or have software like madExcept which does it even without you noticing it, it’s important for a stable release to have reproducable settings. ActionChain allows you to update paths as well as various compiler and linker options.

Update resource files

Neutralize or update resource locales

If you want to make your Delphi application localizable using MUI, you need a neutral or just one fixed language code on all resources of a file. But many third party components do link resources into your executable that have the locale of their developers, cerating mixed resources that the MUI tools won’t accept. You can use this to neutralize the languague code, or fix it to your main language code.

Code-signing

Once you’ve applied all changes to the final PE file, you should code-sign it, so customers can verify that exact file is originating from you.