## Building WinMerge Installer

### Needed programs:

- Inno Setup version 5.1.7.
- ISTool recommended - great help managing Inno Setup installer scripts

There is download package called "QuickStart Pack" available in Inno Setup downloads. It contains all needed components in one installer.

### Installer script:

Installer script is in `Installer/InnoSetup` folder: `WinMerge.iss`

### Checklist:

- Installer reads version number from `WinMerge.exe`. So make sure you have version resource correctly set.
  You can use script to set version info into Merge.rc and all language.rc files: just run `Src/SetResourceVersions.bat` - it asks version number to set. Note that it needs four numbers, so if you are releasing 2.5.6 version, you need to set last number as zero: 2.5.6.0.
- Installer checks that files listed are present. But some files are included as folder (like `/Plugins/Dlls`) or as filemask (like `*.flt`) so take extra care to make sure all needed files are present in locations shown below.

### Folder structure and files needed:

These files are produced by compiling WinMerge, documentation etc, but that's not subject of this document, refer to readme-developers.html.

Copy or move the files into the following layout:

- `Build/`
  - `expat`
    - `libexpat.dll`
    - `libexpatw.dll`
  - `Languages`
    - `*.lang`
  - `Manual/htmlhelp`
    - `WinMerge.chm`
  - `MergeRelease/`
    - `ShellExtension.dll`
    - `WinMerge.exe`
  - `MergeUnicodeRelease/`
    - `ShellExtensionU.dll`
    - `WinMergeU.exe`
  - `pcre/`
    - `pcre.dll`
  - `ShellExtensionX64/`
    - `ShellExtensionX64.dll`
- `Docs/`
  - `Users`
    - Copy the entire `Docs/Users` folder to here
- `Filters/`
  - `FileFilter.tmpl`
  - `*.flt`
- `Installer/`
  - `InnoSetup/`
    - Copy the entire Installer/InnoSetup folder to here
  - `Runtimes/`
    - Copy the entire Installer/Runtimes folder to here
- `Plugins/`
  - `dlls/`
    - Copy the entire Plugins/dlls folder to here

NOTE
If you don't need or can't compile `ShellExtensionX64.dll` component, comment or remove line:

    ; 64-bit version of ShellExtension
    Source: ..\..\Build\ShellExtensionX64\ShellExtensionX64.dll; [...]

from `WinMerge.iss`

### Running Inno Setup to create installer

`WinMerge.iss` (in `InnoSetup` folder) is script used to create WinMerge installer.

Rest of this section assumes ISTool is used. If not, then refer to InnoSetup manual for creating installer from script.

1. Start ISTool and load `WinMerge.iss`
2. Select "Project->Verify Files..." from ISTool menu to verify all needed files are present and in correct directories. Copy missing files to correct directories before continuing.
3. Select "Project->Compile Setup" from ISTool menu to create installer. This takes a while...

If compile succeeds you have `WinMerge-[version]-Setup.exe` in folder `/Build`. You probably want to remove unnecessary zeros from the filename before uploading: if filename is `WinMerge-2.6.0.0-Setup.exe`, you may want to rename it to `WinMerge-2.6-Setup.exe`. Not a rule, but a recommendation.

Test installer!