Strict Standards: date_default_timezone_get(): It is not safe to rely on the system's timezone settings. You are *required* to use the date.timezone setting or the date_default_timezone_set() function. In case you used any of those methods and you are still getting this warning, you most likely misspelled the timezone identifier. We selected 'America/New_York' for 'EDT/-4.0/DST' instead in /homepages/14/d176026529/htdocs/htdocs/wiki/wiki/includes/Setup.php on line 368
Tools - WinMerge Development Wiki


From WinMerge Development Wiki
Jump to: navigation, search

This page lists several tools we use with WinMerge development.



InnoSetup, available from is used for creating WinMerge installers.

Working with installer is expained in readme-InnoSetup.html.


Doxygen, available from is used to create code documentation.

Our basic rule is that every class, struct, enum, and function must be documented. Unfortunately we still have lots of undocumented old code.

Documentation format is explained in readme-developers.html.

Example function/variable documentation in .h file:

 * Current difference index.
 * This variable tells the current difference index
 * in the difference list.
 UINT m_index;

Example function documentation in .cpp file:

 * @brief Short description of the function.
 * Longer description of the function in next line.
 * @param [in] param1 Param going in, not returning value.
 * @param [in,out] param2 Parameter going in and returning value.
 * @return Return value(s).
int example_func(int param1, int * param2)


There are many scripts scattered around our folder structure. Scripts are used for things like:

  • create user manual
  • compile languages
  • build WinMerge
  • run some tests
  • create changelog

Most scripts are written in VBScript, couple are DOS batch files, etc.

/ (root folder)

Build Script:

  • buildall.bat compiles almost all WinMerge projects. Only works directly with VC6, later VS versions need all projects first converted.


Version set script:
SetResourceVersions.bat sets version to all .rc files. Must be run before compiling releases.


Scripts in this folder are related to building / generating / updating translations related files.

MergeLang.dll building:

  • BuildMergeLangDll.bat builds MergeLang.dll needed by translation system.

Creating PO template file:

  • CreateMasterPotFile.vbs creates PO template file used for translating.

Translation status generation:

  • GetTranslationsStatus.vbs generates translation status statistics.

Updating PO files:

  • UpdatePoFilesFromPotFile.vbs updates all PO files from POT file.


This folder should be default place for new scripts.

ChangeLog Script:

  • is a Python script creating a changelog from SVN log.

Build Script:

  • is a Python script taking care many tasks in creating a release.

Manual build scripts:

  • BuildManualChm.bat builds Windows HTML Help -formatted manual.
  • BuildManualWeb.bat builds HTML -formatted manual for web.

Resource scripts:

  • CheckMenuResources.vbs checks menu resources for missing mnemonics or description strings
  • CheckUnusedResources.vbs checks for resource IDs that are not used anymore

Translation update script:

  • UpdateTranslations.bat updates translation files

Sysinternals Tools

Sysinternals has many very good and useful tools:

  • Process Explorer is very handy tool for managing and examining processes
  • Process Monitor allows monitoring process, its resource usage (files, registry...), possible error codes...

Unicode Supporting Editor

Having a good Unicode-supporting editor is essential when working with Unicode files. Many editors support Unicode, but most of them don't allow selecting encoding etc. Window's Notepad supports Unicode, but it also always writes BOM bytes for UTF-8 files (see the BOM -article in Wikipedia).

NotePad++ is an excellent editor with lots of handy features.

Virtual Machines

Virtual Machines are very useful especially when testing installer.


Even though we use Subversion as our version control, Mercurial is very handy for working with patches locally.

Personal tools