
 __       __   ______      _____  ________      __    __ 
|  \  _  |  \ /      \    |     \|        \    |  \  |  \
| $$ / \ | $$|  $$$$$$\    \$$$$$ \$$$$$$$$    | $$  | $$
| $$/  $\| $$| $$___\$$      | $$   | $$ ______ \$$\/  $$
| $$  $$$\ $$ \$$    \  __   | $$   | $$|      \ >$$  $$ 
| $$ $$\$$\$$ _\$$$$$$\|  \  | $$   | $$ \$$$$$$/  $$$$\ 
| $$$$  \$$$$|  \__| $$| $$__| $$   | $$       |  $$ \$$\
| $$$    \$$$ \$$    $$ \$$    $$   | $$       | $$  | $$
 \$$      \$$  \$$$$$$   \$$$$$$     \$$        \$$   \$$
                                                         
                                                         
Copyright 2001 - 2023 by Joe Taylor, K1JT.


Installation
============

To  build WSJT-X  from sources  you need  some prerequisite  tools and
libraries.

On Linux:

   build-essential
   gcc-4.8.2 or clang-3.4 or newer
   g++-4.8.2 or clang-3.4 or newer
   gfortran-4.8.2 or newer
   CMake-2.8.9 or newer
   git
   asciidoc
   asciidoctor
   texinfo

   Also   qtmultimedia5-dev,    libqt5serialport5-dev,   qttools5-dev,
   qttools5-dev-tools,         libboost-all-dev,         libfftw3-dev,
   libreadline-dev,      libusb-1.0-0-dev,       libudev-dev,      and
   portaudio19-dev.   Note that  these are  Debian dpkg  style package
   names, other  distributions will  have different package  names and
   package contents.   For example  on RedHat RPM  style distributions
   the  packages   will  be  something   like  qt5-qtmultimedia-devel,
   qt5-qtserialpport-devel,  qt5-linguist,   boost-devel,  fftw-devel,
   readline-devel, systemd-devel, libusb-devel, and portaudio-devel.

Out of source builds are strongly recommended.

If you are  starting with the self-contained source  tarball then skip
straight  to  the  section  below headed  "Building  WSJT-X  from  the
Self-Contained Source Tarball".

The  following   steps  are   instructions  to  generate   the  WSJT-X
self-contained source tarball, you probably don't need to do that, see
the previous paragraph.


Configuring a Build Tree for Making the Self-Contained SOurce Tarball
=====================================================================

Create a  build directory somewhere  and cd  to it then  configure the
build as follows:

    $ mkdir <build-dir-path>
    $ cd <build-dir-path>
    $ cmake <source-dir-path>

By default the build will  install the application in '/usr/local', if
you want to install it somewhere else e.g. under your own account, you
can   specify  the   install  prefix   as  a   configuration  variable
(CMAKE_INSTALL_PREFIX):

    $ cmake -D CMAKE_INSTALL_PREFIX=~/.local <source-dir-path>

You may build  a specific version by specifying the  tag in the WSJT-X
repository  e.g.  wsjtx-2.3.0  by  specifying  it  as  a  variable  to
configure:

    $ cmake -D WSJTX_TAG=wsjtx-2.3.0 <source-dir-path>

Once configured the package can be built as follows:

    $ cmake --build <build-dir-path>

To install the application at the install prefix:

    $ cmake --build <build-dir-path> --target install


Making a Self-Contained Source Tarball
======================================

If you  are restricted  to local  files only on  your build  host, for
example  a build  server  with  restricted or  no  Internet access,  a
special source tarball can be  generated which contains all the source
files needed rather than fetching them from the VCS at build time.

In this mode you must augment  the source directory with the following
files:

1) src/hamlib.tgz      - GZIP compressed tarball of the hamlib sources,
2) src/wsjtx.tgz       - GZIP compressed tarball of the WSJT-X sources,

You should not do this  augmentation manually, the build script should
be used in advance  on a host with Internet access  to make a suitable
source  tarball for  use in  a  local build.   To do  this you  simply
configure as  for a  normal build  selecting the  version you  wish to
build using  the WSJTX_TAG variable  as above, then make  the 'source'
target.  This  does a  build to  verify the  validity of  the upstream
sources then packages  the project source along with  the extra source
files above.   If this completes  successfully, a tarball that  can be
used for a local build is automatically built. For example:

    $ mkdir ~/build/wsjtx
    $ cd ~/build/wsjtx
    $ cmake -D WSJTX_TAG=wsjtx-2.3.0 <source-dir-path>
    $ cmake --build . --target source

NOTE:  CMake assumes  an  out of  source  build, in  this  case it  is
mandatory as  the 'source' target  packages itself and  therefore must
not include any build artefacts.


Building WSJT-X from the Self-Contained Source Tarball
======================================================

The  above commands,  if  successful,  will produce  'wsjtx-2.3.0.tgz'
which is  a source  tarball ready for  use on another  system to  do a
local build, for example:

    $ mkdir ~/build
    $ cd ~/build
    $ tar xzf wsjtx-2.3.0.tgz
    $ mkdir build
    $ cd build
    $ cmake -DWSJT_SKIP_MANPAGES=ON -DWSJT_GENERATE_DOCS=OFF ../wsjtx-2.3.0
    $ cmake --build .
    $ sudo cmake --build . --target install

If successful this will install the built application into /usr/local,
if you  wish to install  it elsewhere,  simply set the  CMake variable
CMAKE_INSTALL_PREFIX in the configure step above.


Basic Package Building
======================

If you  are a  package maintainer  you will  probably use  the install
target  above  along   with  tools  and  utilities   specific  to  the
distribution you  are packaging  for. Alternatively, this  package can
generate basic installation packages using  the CPack utility. You can
specify an alternate target that  generates a suitable package for the
system you run the build on.  The alternate target is 'package' and is
built as follows:

    $ cmake --build <build-dir-path> --target package

If the build  is successful the location of the  built package(s) will
be displayed at the end of the output.

Other targets available include:

     hamlib   		- just build the hamlib intermediate library

     build		- stop after building WSJT-X (default target)

     install		- stop after installing WSJT-X

     package_source	- build source packages in several formats


Patching Sources
================

This build  script includes source patching  capabilities. The sources
for Hamlib and those for WSJT-X may have a patch applied automatically
prior to  configuration and  building.  Any  patches required  must be
contained in  one of  the files  hamlib.patch or  wsjtx.patch. Patches
must  be generated  with respect  to the  top level  directory of  the
respective source trees. Included in  the superbuild source tree are a
pair of empty patch files hamlib.patch and wsjtx.patch which should be
replaced by the  required patches, this may be done  prior to building
the source package  or after the source package has  been extracted on
the target build host.

For example the following is a sample patch file for WSJT-X:

commit ee27a8dafdfa54f3d4f4d786570e100944da33e5
Author: bsomervi <bsomervi@ab8295b8-cf94-4d9e-aec4-7959e3be5d79>
Date:   Mon Oct 26 23:42:26 2015 +0000

    Qt>=5.4 compatibility
    
    git-svn-id: svn+ssh://svn.code.sf.net/p/wsjt/wsjt/branches/wsjtx-1.5@6007 ab8295b8-cf94-4d9e-aec4-7959e3be5d79

diff --git a/WFPalette.hpp b/WFPalette.hpp
index 271ca53..69a2b85 100644
--- a/WFPalette.hpp
+++ b/WFPalette.hpp
@@ -1,6 +1,7 @@
 #ifndef W_F_PALETTE_HPP__
 #define W_F_PALETTE_HPP__
 
+#include <QMetaType>
 #include <QList>
 #include <QVector>
 #include <QColor>

which would be substituted for the empty wsjtx.patch in the superbuild
source tree.
