Beyond Compare


Installation on Linux is well documented.

wget https://www.scootersoftware.com/bcompare-4.2.4.22795.x86_64.rpm
su
rpm --import https://www.scootersoftware.com/RPM-GPG-KEY-scootersoftware
yum install bcompare-4.2.4.22795.x86_64.rpm

On my Fedora 27 box, I found the launcher bash /usr/bin/bcompare exits with a return code of 1, if the linker cannot resolve all dependencies.

BC_LIB=/usr/lib64/beyondcompare
export BC_LIB
EXEC=$BC_LIB/BCompare

#check to see if we have all of the shared libraries.
CHECK=`ldd $EXEC | grep "not found" | wc -l`

if [ "$CHECK" -ne  "0" ]; then
   echo Some Shared Libraries were not found
   ldd $EXEC
   exit 1
fi

Dumping out the shared libs BCompare depends on:

$ ldd /usr/lib64/beyondcompare/BCompare
    linux-vdso.so.1 (0x00007ffe9b023000)
    librt.so.1 => /lib64/librt.so.1 (0x00007f5da4fca000)
    libbz2.so.1.0 => not found
    lib7z.so => not found
    libpthread.so.0 => /lib64/libpthread.so.0 (0x00007f5da4dac000)
    libc.so.6 => /lib64/libc.so.6 (0x00007f5da49f6000)
    libdl.so.2 => /lib64/libdl.so.2 (0x00007f5da47f2000)
    libQt4Pas.so.5 => not found
    libX11.so.6 => /lib64/libX11.so.6 (0x00007f5da44b4000)
    libz.so.1 => /lib64/libz.so.1 (0x00007f5da429d000)
    /lib64/ld-linux-x86-64.so.2 (0x00007f5da51d2000)
    libxcb.so.1 => /lib64/libxcb.so.1 (0x00007f5da4075000)
    libXau.so.6 => /lib64/libXau.so.6 (0x00007f5da3e71000)

Out of the tree missing libs libbz2.so.1.0 seems to be the problem child, as lib7z.so and libQt4Pas.so.5 are distributed with bcompare and added to the LD_LIBRARY_PATH by the start script. It turns my Fedora box comes with libbz2.so.1.0.6, and can be symlinked as libbz2.so.1.0.

sudo dnf install bzip2-libs bzip2-devel
sudo ln -s `find /usr/lib64/ -type f -name "libbz2.so.1*"` /usr/lib64/libbz2.so.1.0

Git

Beyond Compare supports many version control systems. For Git simply bind the difftool and mergetool configurations (~/.gitconfig) to bcompare:

git config --global diff.tool bcompare
git config --global merge.tool bcompare

Now from Git, bcompare will be invoked with all the appropriate command line parameters:

git difftool myfile.ext
git mergetool myfile.ext

Extensions

Not always obvious to new users, there are several optional (but powerful) plug-ins tucked away for download. Some favourites, that have saved my bacon on many occassions:

  • XML Tidy Sorted will normalise both source and target files by, running XML Tidy and then ensuring that all elements and attributes alphabetically sorted. This is especially wonderful, if you are comparing XML produced by differing libraries/platforms/langs.
  • Java Formatted Class decompiles and formats class files into plain text (depends on the Jalopy and Java Class rules).
  • MS Excel Merge supports diff (read) and merge (write) operations. So good, in a world where Excel is pandemic.
  • PDF converts PDF into plain text for diffing. I mostly fire this up when non-technical folk (e.g. PMs or BAs) provide multiple versions of requirements, with no change log.
  • MS Word converts doc and docx into plain text for diffing. Again, I mostly fire this up when non-technical folk (e.g. PMs or BAs) provide multiple versions of requirements, with no change log.