Linux
=====

Debian style:

sudo apt install libboost-all-dev

RPM style:

sudo dnf install boost-devel


macOS
=====

Download the latest Boost sources from here: boost.org

Currently v 1.74.0 -
https://dl.bintray.com/boostorg/release/1.74.0/source/boost_1_74_0.tar.bz2

cd ~/Downloads
curl -L -O https://dl.bintray.com/boostorg/release/1.74.0/source/boost_1_74_0.tar.bz2
mkdir src
cd !$
tar --bzip2 -xf ~/Downloads/boost_1_74_0.tar.bz2
cd boost_1_74_0/tools/build
./bootstrap.sh
./b2 toolset=clang --prefix=$HOME/local/boost-build install
cd ../..
~/local/boost-build/bin/b2 -j8 toolset=clang cflags=-mmacosx-version-min=10.12 \
   cxxflags=-mmacosx-version-min=10.12 mflags=-mmacosx-version-min=10.12 \
   mmflags=-mmacosx-version-min=10.12 mflags=-mmacosx-version-min=10.12 \
   linkflags=-mmacosx-version-min=10.12 \
   architecture=x86 address-model=64 --prefix=$HOME/local/boost install

That will take a while, once  successful (warnings can be ignored) you
can clean the build tree to save some space:

~/local/boost-build/bin/b2 toolset=clang cflags=-mmacosx-version-min=10.12 \
   cxxflags=-mmacosx-version-min=10.12 mflags=-mmacosx-version-min=10.12 \
   mmflags=-mmacosx-version-min=10.12 mflags=-mmacosx-version-min=10.12 \
   linkflags=-mmacosx-version-min=10.12 \
   architecture=x86 address-model=64 --prefix=$HOME/local/boost clean

All that remains is to reconfigure  your WSJT-X build trees to include
~/local/boost in  your CMAKE_PREFIX_PATH,  maybe something  like these
(one each for  Debug and Release configuration builds  and assumes the
Macports GCC v7 tool-chain is being used):

FC=gfortran-mp-7 \
   cmake \
   -D CMAKE_PREFIX_PATH:PATH=~/local/boost\;~/Qt/5.15.0/clang_64\;~/local/hamlib/release\;/opt/local \
   -D CMAKE_INSTALL_PREFIX=~/local/wsjtx/release \
   -D CMAKE_OSX_SYSROOT=/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.14.sdk \
   -D CMAKE_BUILD_TYPE=Release \
   -B ~/build/wsjtx-release \
   ~/src/bitbucket.org/k1jt/wsjtx

FC=gfortran-mp-7 \
   cmake \
   -D CMAKE_PREFIX_PATH:PATH=~/local/boost\;~/Qt/5.15.0/clang_64\;~/local/hamlib/debug\;/opt/local \
   -D CMAKE_INSTALL_PREFIX=~/local/wsjtx/debug \
   -D CMAKE_OSX_SYSROOT=/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.14.sdk \
   -D CMAKE_BUILD_TYPE=Debug \
   -B ~/build/wsjtx-debug \
   ~/src/bitbucket.org/k1jt/wsjtx

Substitute you  installed SDK  version, Qt  version and  location, and
Hamlib install locations.


MS Windows
==========

Because 32-bit and 64-bit builds are possible and each use different
tool-chains, two separate builds are necessary if both architectures
are required.

Common steps
------------

Download and extract the latest Boost library sources, at the time of
writing that was
https://dl.bintray.com/boostorg/release/1.74.0/source/boost_1_74_0.7z
. Extract to some convenient location, I use %USERPROFILE%\src .

Download    and     extract    the    libbacktrace     sources    from
https://github.com/ianlancetaylor/libbacktrace as follows.

cd %USERPROFILE%\src
mkdir github.com
cd github.com
mkdir ianlancetaylor
cd ianlancetaylor
git clone git@github.com:ianlancetaylor/libbacktrace.git

I  install  third-party  tools   under  the  C:\Tools  directory,  the
following assumes that, adjust to taste. Note that it is OK to install
both 32- and  64-bit builds of Boost  to the same path  as the library
names are unique per architecture and  tool-chain. This saves a lot of
space as the boost header files are  quite big, and there's no need to
install multiple copies.

Create  a  new file  %USERPROFILE%\src\boost_1_74_0\project-config.jam
with the  following three lines  to specify how Boost.Build  finds the
libbacktrace library matched to your relevant C++ compliers:

import toolset ;

using gcc : : C:\\Qt\\Tools\\mingw730_32\\bin\\g++ : <compileflags>-I"C:\\Tools\\libbacktrace-1.0\\MinGW32\\include" <linkflags>-L"C:\\Tools\\libbacktrace-1.0\\MinGW32\\lib" ;

using gcc : 8~64 : C:\\Qt\\Tools\\mingw810_64\\bin\\g++ : <compileflags>-I"C:\\Tools\\libbacktrace-1.0\\MinGW64\\include" <linkflags>-L"C:\\Tools\\libbacktrace-1.0\\MinGW64\\lib" ;

Note  that it  may  need some  local adjustment  of  the C++  compiler
version  and path  depending on  the  exact tool-chains  from your  Qt
installation. Above  I am using  the Qt v5.12.9 MinGW32  v7 tool-chain
for 32-bit  (toolset=gcc), and  Qt v5.15.0  MinGW64 v8  tool-chain for
64-bit (toolchain=gcc-8~64).

32-bit
------

Start an  MSys or MSys2  shell with  the 32-bit C/C++  tool-chain from
your Qt installation on the PATH environment variable.

cd ~/src/github.com/ianlancetaylor/libbacktrace
./configure --prefix=/c/Tools/libbacktrace-1.0/MinGW32
make && make install
make clean

Start a  CMD window suitably  configured for  use of the  32-bit MinGW
tool-chain  bundled  with  your  Qt binary  installation.  Verify  the
correct compiler is in the PATH. i.e. it identifies (g++ --version) as
i686-posix-dwarf-rev0.

cd %USERPROFILE%\src\boost_1_74_0\tools\build
bootstrap.bat mingw
.\b2 --prefix=C:\Tools\boost-build\MinGW32 install
cd ..\..
C:\Tools\boost-build\MinGW32\bin\b2 -j8 toolset=gcc ^
  --build-dir=%USERPROFILE%\build\boost ^
  address-model=32 architecture=x86 variant=debug,release ^
  link=shared threading=multi ^
  --with-log --with-stacktrace --prefix=C:\Tools\boost install

If all is  well you should see  the following line about a  1/3 of the
way through the initial configuration steps.

   - libbacktrace builds      : yes

After some time it should complete with something like:

...failed updating 1574 targets...
...skipped 1112 targets...
...updated 3924 targets...

warnings can usually  be ignored. If successful; you  can release some
space by cleaning the build tree:

C:\Tools\boost-build\MinGW32\bin\b2 toolset=gcc ^
  --build-dir=%USERPROFILE%\build\boost ^
  --build-type=complete clean

64-bit
======

Start an  MSys or MSys2  shell with  the 64-bit C/C++  tool-chain from
your Qt installation on the PATH environment variable.

cd ~/src/github.com/ianlancetaylor/libbacktrace
./configure --prefix=/c/Tools/libbacktrace-1.0/MinGW64
make && make install
make clean

Start a  CMD window suitably  configured for  use of the  64-bit MinGW
tool-chain  bundled  with  your  Qt binary  installation.  Verify  the
correct compiler is in the PATH. i.e. it identifies (g++ --version) as
x86_64-posix-seh-rev0. Note  the toolchain  specified must  match your
compilers and the project-config.jam file you created above. With a v7
64-bit C++  compiler use gcc-7~64, with  a v8 64-bit C++  compiler use
gcc-8~64. My  example matches  my 64-bit Qt  v5.15.0 with  the bundled
MinGW64 v8.1.0.

cd %USERPROFILE%\src\boost_1_74_0\tools\build
bootstrap.bat mingw
.\b2 --prefix=C:\Tools\boost-build\MinGW64 install
cd ..\..
C:\Tools\boost-build\MinGW64\bin\b2 -j8 toolset=gcc-8~64 ^
  address-model=64 architecture=x86 variant=debug,release ^
  link=shared threading=multi ^
  --with-log --with-stacktrace ^
  --build-dir=%USERPROFILE%\build\boost ^
  --prefix=C:\Tools\boost install

If all is well you should see the following line about a 1/3 of the
way through the initial configuration steps.

   - libbacktrace builds      : yes

After some time it should complete with something like:

...failed updating 108 targets...
...skipped 32 targets...
...updated 3648 targets...

warnings can usually  be ignored. If successful; you  can release some
space by cleaning the build tree:

C:\Tools\boost-build\MinGW32\bin\b2 toolset=gcc-8~64 ^
  address-model=64 --build-dir=%USERPROFILE%\build\boost ^
  --build-type=complete clean
Run-time Environment
--------------------

You  will need  to  add C:\Tools\boost\lib  to  your PATH  environment
variable in order to run  installed Debug configurations of WSJT-X, or
to execute  build artefacts from a  build tree. It is  also needed for
teh install target of  release configuration builds. Installed Release
configurations will  move any  required DLLs  to the  installation bin
directory automatically.

Setting up WSJT-X builds
------------------------

All that  remains is  to add  C:\Tools\boost\ to  your 32-  and 64-bit
build  configurations CMAKE_PREFIX_PATH  variables.  I use  tool-chain
files for my WSJT-X builds on Windows, an extract from my 32-bit Debug
configuration tool-chain file:

# ...

set (BOOSTDIR C:/Tools/boost)
set (QTDIR C:/Qt/5.15.2/mingw81_32)
set (FFTWDIR C:/Tools/fftw-3.3.5-dll32)
set (HAMLIBDIR C:/test-install/hamlib/mingw32/debug)
set (LIBUSBDIR C:/Tools/libusb-1.0.23)

# where to find required packages
set (CMAKE_PREFIX_PATH ${BOOSTDIR} ${QTDIR} ${FFTWDIR} ${HAMLIBDIR} ${HAMLIBDIR}/bin ${LIBUSBDIR})

# ...
