Compiling sources is usually the first thing you want to do. Source packages for different versions are available from SourceForge.net downloads or from Subversion repository. See readme-Subversion.html for more information about Subversion repository and using it.
Note that WinMerge uses MFC heavily. So free (Express) editions of Visual Studio cannot compile WinMerge, unless you have MFC installed separately.
WinMerge executable depends on Expat XML parser, SCEW and PCRE libraries.
All are in the source tree (in /Externals
-folder), and need to be
compiled before compiling WinMerge executable.
Visual Studio 2005 and later: You'll need to convert library workspace and project files to new format before compiling.
To convert workspace/project files, just open them into Visual Studio and let the Visual Studio to convert. Files are:
WinMerge.sln
Externals\expat\expat.sln
Externals\scew\win32\scew.vcproj
Externals\pcre\pcre.sln
With Feb 2003 Platform SDK (and VC6) following components are needed:
Basically same components are needed for Windows 2003 SP1 PSDK, but with a different name:
If you installed PSDK separately, don't forget to add the PSDK paths to Visual Studio's Include and Library directories. The easiest way is to use the "Visual Studio Registration\Register PSDK directories with Visual Studio" item from the "Platform SDK" start menu folder.
Project file for WinMerge executable (in /Src
) and other projects like
ShellExtension (in /ShellExtension
) have their own project files. There is no one
single project/workspace file to compile all projects.
The Visual Studio project and solution files for VS2003 come with the WinMerge sources. Newer versions of Visual Studio can open that file too, they just ask if one wants to convert to the new version. The reason we don't ship project files for all Visual Studio versions is we have no resources to keep all versions up to date. People can't test all versions themselves, and easily forget to update at least one file. So we easily end up in a situation where there is no properly working project file at all...
After opening the project file you need to add the HTML Help Workshop path as additional include- and library-path.
NOTE: There might be problems compiling/debugging with Visual Studio 2003 when using HTML Help WorkShop from the Platform SDK in Visual Studio directory. Download and install HTML Workshop as stand-alone and include headers and libraries from standalone directory. The probable cause is that including files from Platform SDK directories breaks things.
expat is in /Externals/expat
folder in source tree. To compile expat:
/Externals/expat/expat.sln
. If you are
using Visual Studio 2005 or later you need to convert the file to the new format when
Visual Studio opens the file.After build finishes, selected (debug or release) lib and dll files are in
/Build/expat
. WinMerge executable's project file picks them from there.
scew is in /Externals/scew
folder in source tree. To compile scew:
/Externals/scew/win32/scew.vcproj
If you are
using Visual Studio 2005 or later you need to convert the file to the new format when
Visual Studio opens the file.PCRE is in /Externals/pcre
folder in source tree. PCRE uses
CMake (http://www.cmake.org/) to create
project- and solution-files. There are ready-made files in our source tree.
To compile PCRE:
/Externals/pcre/Win32/pcre.sln
If you are
using Visual Studio 2005 or later you need to convert the file to the new format when
Visual Studio opens the file.MinSizeRel
-target.pcre
-project
After build finishes, lib and dll files are in /Build/pcre
. WinMerge
executable's project file picks them from there.
If you want to re-build PCRE from the scratch, including project files, see
file Externals/pcre/NON-UNIX-USE
. There are instructions for
running CMake and using it to configure PCRE.
When configuring PCRE, remember to set these two options:
ANYCRLF
or ANY
as linefeed style.
Current build uses ANY
.After CMake finishes, there are project files in the folder you selected as
a build folder. However all paths in the files are absolute, not relative. If
you want to make these files useful for other users you'll need to convert all
paths to relative paths. In addition you need to remove custom build rules for
building CMakeLists.txt
. That rule tries to run CMake to re-generate
some files.
There are several targets available for compiling different projects. Targets used
for compiling releases are:
WinMerge.exe
: ReleaseWinMergeU.exe
: UnicodeReleaseShellExtension.dll
: Release MinDependencyShellExtensionU.dll
: Unicode Release MinDependencyThis is a bit tricky, and needs some patience to setup.
We need to start Visual Studio from Platform SDK's 64-bit environment so that we get all needed environment variables and paths correctly set. So:
devenv /USEENV (uses open environment)
ShellExtensionX64.vcproj
from ShellExtension
project
folder.Make sure you have 64-bit target selected in Project Settings. Then check that paths are OK. You MUST build to separate directory than 32-bit targets so that files don't mix up.
Compiling should now succeed. If not, check that all needed PSDK components are installed and that paths are OK. If you are compiling in 32-bit Windows you get error about registering but that is expected to happen.
64-bit ShellExtension is registered to 64-bit Windows just like counterparts in 32-bit world:
regsvr ShellExtensionX64.dll
When the VC6 project file (.dsp) is converted to a Visual Studio 2005 or 2008 project, the visual styles do not get enabled. The problem is Visual Studio 2005 and 2008 automatically generates and embeds a manifest file for the executable, but that generated manifest does not include all needed properties to enable visual styles. The solution is to add WinMerge's manifest file as additional manifest.
From project properties, set
Manifest Tool / Input and Output / Additional Manifest Files
-property value to:
$(InputDir)\res\$(TargetFileName).manifest
See also Manifests in VS2005-- What are they? -thread in Microsoft forum.