mirror of
https://github.com/saitohirga/WSJT-X.git
synced 2024-11-16 00:51:56 -05:00
245a6902c5
Sometimes parts of the application are not fully ready for release at release time. This option allows such features to be enabled conditionally at configure time. The CMake option WSJT_ENABLE_EXPERIMENTAL_FEATURES is used to control this ability. Normally you will not need to change it as it behaves in a reasonable way. The option is ON in debug build configurations and OFF in non-debug configuratiuons. The option is made available in all source modules via the WSJT_ENABLE_EXPERIMENTAL_FEATURES macro which is defined to 1 if the option is ON and to 0 if it is OFF. Since this default behavior is potentially dangerous because it can mean that release builds contain different code from debug builds; the option may be set to OFF in debug configurations in the normal way (cmake-gui, edit CMakeCache.txt, etc.) to achieve a debug build similar to a default release build. git-svn-id: svn+ssh://svn.code.sf.net/p/wsjt/wsjt/branches/wsjtx@4182 ab8295b8-cf94-4d9e-aec4-7959e3be5d79
916 lines
27 KiB
CMake
916 lines
27 KiB
CMake
cmake_minimum_required (VERSION 2.8.9 FATAL_ERROR)
|
|
|
|
project (wsjtx C CXX Fortran)
|
|
|
|
#
|
|
# project information
|
|
#
|
|
set (PROJECT_VENDOR "Joe Taylor, K1JT")
|
|
set (PROJECT_CONTACT "Joe Taylor <k1jt@arrl.net>")
|
|
set (PROJECT_COPYRIGHT "Copyright (C) 2001-2014 by Joe Taylor, K1JT")
|
|
set (PROJECT_HOMEPAGE "http://www.physics.princeton.edu/pulsar/K1JT/wsjtx.html")
|
|
set (PROJECT_MANUAL "http://www.physics.princeton.edu/pulsar/K1JT/wsjtx-doc/wsjtx-main-toc2.html")
|
|
set (PROJECT_SUMMARY_DESCRIPTION "WSJT-X - JT9 and JT65 Modes for LF, MF and HF Amateur Radio.")
|
|
set (PROJECT_DESCRIPTION "${PROJECT_SUMMARY_DESCRIPTION}
|
|
WSJT-X implements JT9, a new mode designed especially for the LF, MF,
|
|
and HF bands, as well as the popular mode JT65. Both modes were
|
|
designed for making reliable, confirmed QSOs under extreme weak-signal
|
|
conditions. They use nearly identical message structure and source
|
|
encoding. JT65 was designed for EME (“moonbounce”) on the VHF/UHF
|
|
bands and has also proved very effective for worldwide QRP
|
|
communication at HF; in contrast, JT9 is optimized for HF and lower
|
|
frequencies. JT9 is about 2 dB more sensitive than JT65A while using
|
|
less than 10% of the bandwidth. World-wide QSOs are possible with
|
|
power levels of a few watts and compromise antennas. A 2 kHz slice of
|
|
spectrum is essentially full when occupied by ten JT65 signals. As
|
|
many as 100 JT9 signals can fit into the same space, without overlap.
|
|
.
|
|
WSJT-X offers a “bi-lingual“ operating mode in which you can transmit
|
|
and receive JT65 and JT9 signals, switching between modes
|
|
automatically as needed. Displayed bandwidth can be as large as 5
|
|
kHz. If your receiver has as upper-sideband filter at least 4 kHz
|
|
wide, you can have all the typical JT65 and JT9 activity on screen at
|
|
once, available for making QSOs with a click of the mouse. Even with
|
|
standard SSB-width IF filters, switching between JT65 and JT9 modes is
|
|
quick and convenient. Be sure to read the online WSJT-X User's
|
|
Guide.")
|
|
|
|
set (CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} ${PROJECT_SOURCE_DIR}/CMake/Modules)
|
|
|
|
include (${PROJECT_SOURCE_DIR}/CMake/VersionCompute.cmake)
|
|
|
|
|
|
# make sure that the default configuration is a RELEASE
|
|
if (NOT CMAKE_BUILD_TYPE)
|
|
set (CMAKE_BUILD_TYPE RELEASE CACHE STRING
|
|
"Choose the type of build, options are: None Debug Release."
|
|
FORCE)
|
|
endif (NOT CMAKE_BUILD_TYPE)
|
|
if (CMAKE_BUILD_TYPE MATCHES "[Dd][Ee][Bb][Uu][Gg]")
|
|
set (is_debug_build 1)
|
|
endif ()
|
|
|
|
|
|
#
|
|
# Options & features
|
|
#
|
|
# Some of these directly effect compilation by being defined in
|
|
# wsjtx_config.h.in which makes them available to the C/C++
|
|
# pre-processor.
|
|
#
|
|
include (CMakeDependentOption)
|
|
|
|
option (UPDATE_TRANSLATIONS "Update source translation translations/*.ts
|
|
files (WARNING: make clean will delete the source .ts files! Danger!)")
|
|
option (WSJT_SHARED_RUNTIME "Debugging option that allows running from a shared Cloud directory.")
|
|
option (WSJT_QDEBUG_TO_FILE "Redirect Qt debuging messages to a trace file.")
|
|
option (WSJT_QDEBUG_IN_RELEASE "Leave Qt debugging statements in Release configuration.")
|
|
option (WSJT_TRACE_CAT "Debugging option that turns on CAT diagnostics.")
|
|
option (WSJT_TRACE_CAT_POLLS "Debugging option that turns on CAT diagnostics during polling.")
|
|
option (WSJT_HAMLIB_TRACE "Debugging option that turns on full Hamlib internal diagnostics.")
|
|
option (WSJT_STANDARD_FILE_LOCATIONS "All non-installation files located in \"Standard\" platfom specific locations." ON)
|
|
option (WSJT_SOFT_KEYING "Apply a ramp to CW keying envelope to reduce transients." ON)
|
|
option (WSJT_SKIP_MANPAGES "Skip *nix manpage generation")
|
|
|
|
CMAKE_DEPENDENT_OPTION (WSJT_ENABLE_EXPERIMENTAL_FEATURES "Enable features not fully ready for public releases." ON
|
|
"is_debug_build" OFF)
|
|
|
|
|
|
#
|
|
# install locations
|
|
#
|
|
set (WSJT_BIN_DESTINATION bin)
|
|
set (WSJT_LIB_DESTINATION lib)
|
|
set (WSJT_SHARE_DESTINATION share/wsjtx)
|
|
set (WSJT_DOC_DESTINATION share/doc/wsjtx)
|
|
set (WSJT_MANPAGE_DESTINATION share)
|
|
set (WSJT_PLUGIN_DESTINATION lib/plugins)
|
|
set (WSJT_QT_CONF_DESTINATION bin)
|
|
|
|
|
|
#
|
|
# Project sources
|
|
#
|
|
set (wsjt_qt_CXXSRCS
|
|
NetworkServerLookup.cpp
|
|
revision_utils.cpp
|
|
WFPalette.cpp
|
|
Radio.cpp
|
|
Bands.cpp
|
|
FrequencyList.cpp
|
|
StationList.cpp
|
|
FrequencyLineEdit.cpp
|
|
FrequencyItemDelegate.cpp
|
|
ForeignKeyDelegate.cpp
|
|
LiveFrequencyValidator.cpp
|
|
GetUserId.cpp
|
|
TraceFile.cpp
|
|
AudioDevice.cpp
|
|
Transceiver.cpp
|
|
TransceiverBase.cpp
|
|
EmulateSplitTransceiver.cpp
|
|
TransceiverFactory.cpp
|
|
PollingTransceiver.cpp
|
|
HamlibTransceiver.cpp
|
|
HRDTransceiver.cpp
|
|
DXLabSuiteCommanderTransceiver.cpp
|
|
)
|
|
|
|
set (ConfigTest_CXXSRCS
|
|
Configuration.cpp
|
|
TestConfiguration.cpp
|
|
ConfigTest.cpp
|
|
)
|
|
|
|
set (jt9_CXXSRCS
|
|
lib/ipcomm.cpp
|
|
)
|
|
|
|
set (wsjtx_CXXSRCS
|
|
logbook/adif.cpp
|
|
logbook/countrydat.cpp
|
|
logbook/countriesworked.cpp
|
|
logbook/logbook.cpp
|
|
psk_reporter.cpp
|
|
Modulator.cpp
|
|
Detector.cpp
|
|
logqso.cpp
|
|
displaytext.cpp
|
|
decodedtext.cpp
|
|
getfile.cpp
|
|
soundout.cpp
|
|
soundin.cpp
|
|
meterwidget.cpp
|
|
signalmeter.cpp
|
|
plotter.cpp
|
|
widegraph.cpp
|
|
about.cpp
|
|
astro.cpp
|
|
mainwindow.cpp
|
|
Configuration.cpp
|
|
main.cpp
|
|
)
|
|
|
|
if (WIN32)
|
|
set (ConfigTest_CXXSRCS
|
|
${ConfigTest_CXXSRCS}
|
|
OmniRigTransceiver.cpp
|
|
)
|
|
|
|
set (wsjt_CXXSRCS
|
|
${wsjt_CXXSRCS}
|
|
killbyname.cpp
|
|
)
|
|
|
|
set (wsjt_qt_CXXSRCS
|
|
${wsjt_qt_CXXSRCS}
|
|
OmniRigTransceiver.cpp
|
|
)
|
|
endif (WIN32)
|
|
|
|
set (wsjt_FSRCS
|
|
lib/afc65b.f90
|
|
lib/afc9.f90
|
|
lib/analytic.f90
|
|
lib/astro.f90
|
|
lib/astrosub.f90
|
|
lib/astro0.f90
|
|
lib/azdist.f90
|
|
lib/baddata.f90
|
|
lib/ccf2.f90
|
|
lib/ccf65.f90
|
|
lib/chkhist.f90
|
|
lib/chkss2.f90
|
|
lib/coord.f90
|
|
lib/db.f90
|
|
lib/dcoord.f90
|
|
lib/decode65a.f90
|
|
lib/decode65b.f90
|
|
lib/decode9.f90
|
|
lib/decoder.f90
|
|
lib/deg2grid.f90
|
|
lib/demod64a.f90
|
|
lib/determ.f90
|
|
lib/dot.f90
|
|
lib/downsam9.f90
|
|
lib/encode232.f90
|
|
lib/entail.f90
|
|
lib/extract.F90
|
|
lib/geocentric.f90
|
|
lib/f77_wisdom.f90
|
|
lib/fano232.f90
|
|
lib/fchisq.f90
|
|
lib/fchisq65.f90
|
|
lib/fil3.f90
|
|
lib/fil4.f90
|
|
lib/fil6521.f90
|
|
lib/filbig.f90
|
|
lib/fillcom.f90
|
|
lib/flat1.f90
|
|
lib/flat2.f90
|
|
lib/flat3.f90
|
|
lib/flat65.f90
|
|
lib/four2a.f90
|
|
lib/gen65.f90
|
|
lib/genjt9.f90
|
|
lib/geodist.f90
|
|
lib/getlags.f90
|
|
lib/getpfx1.f90
|
|
lib/getpfx2.f90
|
|
lib/graycode.f90
|
|
lib/graycode65.f90
|
|
lib/grid2deg.f90
|
|
lib/grid2k.f90
|
|
lib/grid2n.f90
|
|
lib/indexx.f90
|
|
lib/interleave63.f90
|
|
lib/interleave9.f90
|
|
lib/jt65a.f90
|
|
lib/k2grid.f90
|
|
lib/moon2.f90
|
|
lib/moondop.f90
|
|
lib/morse.f90
|
|
lib/move.f90
|
|
lib/n2grid.f90
|
|
lib/nchar.f90
|
|
lib/options.f90
|
|
lib/packbits.f90
|
|
lib/packcall.f90
|
|
lib/packgrid.f90
|
|
lib/packmsg.f90
|
|
lib/packtext.f90
|
|
lib/pctile.f90
|
|
lib/peakdt9.f90
|
|
lib/pfxdump.f90
|
|
lib/polfit.f90
|
|
lib/prog_args.f90
|
|
lib/sec_midn.f90
|
|
lib/setup65.f90
|
|
lib/sleep_msec.f90
|
|
lib/smo.f90
|
|
lib/smo121.f90
|
|
lib/softsym.f90
|
|
lib/sort.f90
|
|
lib/ssort.f90
|
|
lib/stdmsg.f90
|
|
lib/sun.f90
|
|
lib/symspec.f90
|
|
lib/symspec2.f90
|
|
lib/symspec65.f90
|
|
lib/sync9.f90
|
|
lib/timer.f90
|
|
lib/tm2.f90
|
|
lib/toxyz.f90
|
|
lib/twkfreq.f90
|
|
lib/twkfreq65.f90
|
|
lib/unpackbits.f90
|
|
lib/unpackcall.f90
|
|
lib/unpackgrid.f90
|
|
lib/unpackmsg.f90
|
|
lib/unpacktext.f90
|
|
lib/zplot9.f90
|
|
)
|
|
|
|
set (wsjt_CSRCS
|
|
lib/decode_rs.c
|
|
lib/encode_rs.c
|
|
lib/gran.c
|
|
lib/igray.c
|
|
lib/init_rs.c
|
|
lib/tmoonsub.c
|
|
lib/usleep.c
|
|
lib/wrapkarn.c
|
|
)
|
|
|
|
set (ConfigTest_UISRCS
|
|
TestConfiguration.ui
|
|
Configuration.ui
|
|
)
|
|
|
|
set (wsjt_qt_UISRCS
|
|
wf_palette_design_dialog.ui
|
|
)
|
|
|
|
set (wsjtx_UISRCS
|
|
mainwindow.ui
|
|
about.ui
|
|
astro.ui
|
|
widegraph.ui
|
|
logqso.ui
|
|
Configuration.ui
|
|
)
|
|
|
|
set (all_C_and_CXXSRCS
|
|
${wsjt_CSRCS}
|
|
${wsjt_CXXSRCS}
|
|
${wsjt_qt_CXXSRCS}
|
|
${jt9_CXXSRCS}
|
|
${ConfigTest_CXXSRCS}
|
|
${wsjtx_CXXSRCS}
|
|
)
|
|
|
|
if (APPLE)
|
|
set (WSJTX_ICON_FILE ${CMAKE_PROJECT_NAME}.icns)
|
|
set (ICONSRCS
|
|
icons/Darwin/${CMAKE_PROJECT_NAME}.iconset/icon_16x16.png
|
|
icons/Darwin/${CMAKE_PROJECT_NAME}.iconset/icon_16x16@2x.png
|
|
icons/Darwin/${CMAKE_PROJECT_NAME}.iconset/icon_32x32.png
|
|
icons/Darwin/${CMAKE_PROJECT_NAME}.iconset/icon_32x32@2x.png
|
|
icons/Darwin/${CMAKE_PROJECT_NAME}.iconset/icon_128x128.png
|
|
icons/Darwin/${CMAKE_PROJECT_NAME}.iconset/icon_128x128@2x.png
|
|
icons/Darwin/${CMAKE_PROJECT_NAME}.iconset/icon_256x256.png
|
|
icons/Darwin/${CMAKE_PROJECT_NAME}.iconset/icon_256x256@2x.png
|
|
icons/Darwin/${CMAKE_PROJECT_NAME}.iconset/icon_512x512.png
|
|
icons/Darwin/${CMAKE_PROJECT_NAME}.iconset/icon_512x512@2x.png
|
|
)
|
|
add_custom_command (
|
|
OUTPUT ${WSJTX_ICON_FILE}
|
|
COMMAND iconutil -c icns --output "${CMAKE_BINARY_DIR}/${WSJTX_ICON_FILE}" "${CMAKE_SOURCE_DIR}/icons/Darwin/${CMAKE_PROJECT_NAME}.iconset"
|
|
DEPENDS ${ICONSRCS}
|
|
COMMENT "Building Icons"
|
|
)
|
|
endif (APPLE)
|
|
|
|
set_source_files_properties (${WSJTX_ICON_FILE} PROPERTIES MACOSX_PACKAGE_LOCATION Resources)
|
|
|
|
if (NOT WSJT_QDEBUG_IN_RELEASE)
|
|
set_directory_properties (PROPERTIES COMPILE_DEFINITIONS_RELEASE "QT_NO_DEBUG_OUTPUT;QT_NO_WARNING_OUTPUT")
|
|
set_directory_properties (PROPERTIES COMPILE_DEFINITIONS_MINSIZEREL "QT_NO_DEBUG_OUTPUT;QT_NO_WARNING_OUTPUT")
|
|
endif (NOT WSJT_QDEBUG_IN_RELEASE)
|
|
|
|
set_property (SOURCE ${all_C_and_CXXSRCS} APPEND PROPERTY COMPILE_FLAGS "-include wsjtx_config.h")
|
|
set_property (SOURCE ${all_C_and_CXXSRCS} APPEND PROPERTY OBJECT_DEPENDS wsjtx_config.h)
|
|
|
|
if (WIN32)
|
|
# generate the OmniRig COM interface source
|
|
find_program (DUMPCPP dumpcpp)
|
|
if (DUMPCPP-NOTFOUND)
|
|
message (FATAL_ERROR "dumpcpp tool not found")
|
|
endif (DUMPCPP-NOTFOUND)
|
|
execute_process (
|
|
COMMAND ${DUMPCPP} -getfile {4FE359C5-A58F-459D-BE95-CA559FB4F270}
|
|
OUTPUT_VARIABLE AXSERVER
|
|
OUTPUT_STRIP_TRAILING_WHITESPACE
|
|
)
|
|
string (STRIP "${AXSERVER}" AXSERVER)
|
|
if (NOT AXSERVER)
|
|
message (FATAL_ERROR "You need to install OmniRig on this computer")
|
|
endif (NOT AXSERVER)
|
|
string (REPLACE "\"" "" AXSERVER ${AXSERVER})
|
|
file (TO_CMAKE_PATH ${AXSERVER} AXSERVERSRCS)
|
|
endif (WIN32)
|
|
|
|
if (POLICY CMP0020)
|
|
cmake_policy (SET CMP0020 NEW) # link to Qt winmain on Windows
|
|
endif (POLICY CMP0020)
|
|
|
|
|
|
#
|
|
# decide on platform specifc packing and fixing up
|
|
#
|
|
if (APPLE)
|
|
set (WSJTX_BUNDLE_VERSION ${wsjtx_VERSION})
|
|
|
|
# make sure CMAKE_INSTALL_PREFIX ends in /
|
|
string (LENGTH "${CMAKE_INSTALL_PREFIX}" LEN)
|
|
math (EXPR LEN "${LEN} -1" )
|
|
string (SUBSTRING "${CMAKE_INSTALL_PREFIX}" ${LEN} 1 ENDCH)
|
|
if (NOT "${ENDCH}" STREQUAL "/")
|
|
set (CMAKE_INSTALL_PREFIX "${CMAKE_INSTALL_PREFIX}/")
|
|
endif ()
|
|
# install inside bundle
|
|
# set (CMAKE_INSTALL_PREFIX "${CMAKE_INSTALL_PREFIX}wsjtx.app")
|
|
|
|
set (WSJT_PLUGIN_DESTINATION ${CMAKE_PROJECT_NAME}.app/Contents/PlugIns)
|
|
set (WSJT_QT_CONF_DESTINATION ${CMAKE_PROJECT_NAME}.app/Contents/Resources)
|
|
set (WSJT_SHARE_DESTINATION ${CMAKE_PROJECT_NAME}.app/Contents/Resources)
|
|
set (WSJT_DOC_DESTINATION ${CMAKE_PROJECT_NAME}.app/Contents/Resources)
|
|
set (WSJT_MANPAGE_DESTINATION ${CMAKE_PROJECT_NAME}.app/Contents/Resources)
|
|
set (WSJT_BIN_DESTINATION ${CMAKE_PROJECT_NAME}.app/Contents/MacOS)
|
|
endif (APPLE)
|
|
|
|
|
|
#
|
|
# C & C++ setup
|
|
#
|
|
set (CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wall -Wextra")
|
|
set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall -Wextra -std=c++11 -fexceptions -frtti")
|
|
if (WIN32)
|
|
set (CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fno-keep-inline-dllexport")
|
|
endif (WIN32)
|
|
if (APPLE)
|
|
set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -stdlib=libc++")
|
|
else (APPLE)
|
|
set (CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -pthread")
|
|
set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -pthread")
|
|
endif (APPLE)
|
|
|
|
|
|
#
|
|
# Fortran setup
|
|
#
|
|
set (General_FFLAGS "-fbounds-check -Wall -Wno-conversion -fno-second-underscore")
|
|
|
|
# FFLAGS depend on the compiler
|
|
get_filename_component (Fortran_COMPILER_NAME ${CMAKE_Fortran_COMPILER} NAME)
|
|
|
|
if (Fortran_COMPILER_NAME MATCHES "gfortran.*")
|
|
# gfortran
|
|
set (CMAKE_Fortran_FLAGS_RELEASE "-funroll-all-loops -fno-f2c -O3 ${General_FFLAGS}")
|
|
set (CMAKE_Fortran_FLAGS_DEBUG "-fno-f2c -O0 -g ${General_FFLAGS}")
|
|
elseif (Fortran_COMPILER_NAME MATCHES "ifort.*")
|
|
# ifort (untested)
|
|
set (CMAKE_Fortran_FLAGS_RELEASE "-f77rtl -O3 ${General_FFLAGS}")
|
|
set (CMAKE_Fortran_FLAGS_DEBUG "-f77rtl -O0 -g ${General_FFLAGS}")
|
|
elseif (Fortran_COMPILER_NAME MATCHES "g77")
|
|
# g77
|
|
set (CMAKE_Fortran_FLAGS_RELEASE "-funroll-all-loops -fno-f2c -O3 -m32 ${General_FFLAGS}")
|
|
set (CMAKE_Fortran_FLAGS_DEBUG "-fno-f2c -O0 -g -m32 ${General_FFLAGS}")
|
|
else (Fortran_COMPILER_NAME MATCHES "gfortran.*")
|
|
message ("CMAKE_Fortran_COMPILER full path: " ${CMAKE_Fortran_COMPILER})
|
|
message ("Fortran compiler: " ${Fortran_COMPILER_NAME})
|
|
message ("No optimized Fortran compiler flags are known, we just try -O2...")
|
|
set (CMAKE_Fortran_FLAGS_RELEASE "-O2 ${General_FFLAGS}")
|
|
set (CMAKE_Fortran_FLAGS_DEBUG "-O0 -g ${General_FFLAGS}")
|
|
endif (Fortran_COMPILER_NAME MATCHES "gfortran.*")
|
|
|
|
|
|
#
|
|
# setup and test Fortran C/C++ interaction
|
|
#
|
|
|
|
include (FortranCInterface)
|
|
FortranCInterface_VERIFY (CXX QUIET)
|
|
FortranCInterface_HEADER (FC.h MACRO_NAMESPACE "FC_" SYMBOL_NAMESPACE "FC_"
|
|
SYMBOLS )
|
|
|
|
|
|
#
|
|
# sort out pre-requisites
|
|
#
|
|
|
|
#
|
|
# Setup RPATH so that built executable targets will run in both the
|
|
# build tree and the install location without having to set a
|
|
# (DYLD|LD)_LIBRARY_PATH override.
|
|
#
|
|
|
|
# use the full RPATH of the build tree
|
|
set (CMAKE_SKIP_BUILD_RPATH FALSE)
|
|
|
|
# when building, don't use the install RPATH, it will still be used
|
|
# later on in the install phase
|
|
set (CMAKE_BUILD_WITH_INSTALL_RPATH FALSE)
|
|
|
|
# set (CMAKE_INSTALL_RPATH "${CMAKE_INSTALL_PREFIX}/${WSJT_LIB_DESTINATION}")
|
|
|
|
# add the automaticaly determined parts of the RPATH which point to
|
|
# directories outside of the build tree to the install RPATH
|
|
set (CMAKE_INSTALL_RPATH_USE_LINK_PATH TRUE)
|
|
|
|
# the RPATH to be used when installing, but only if it's not a system
|
|
# directory
|
|
# list (FIND CMAKE_PLATFORM_IMPLICIT_LINK_DIRECTORIES "${CMAKE_INSTALL_PREFIX}/${WSJT_LIB_DESTINATION}" isSystemDir)
|
|
# if ("${isSystemDir}" STREQUAL "-1")
|
|
# set (CMAKE_INSTALL_RPATH "${CMAKE_INSTALL_PREFIX}/${WSJT_LIB_DESTINATION}")
|
|
# endif ("${isSystemDir}" STREQUAL "-1")
|
|
|
|
set (QT_NEED_RPATH FALSE)
|
|
if (NOT "${QT_LIBRARY_DIR}" STREQUAL "/lib" AND NOT "${QT_LIBRARY_DIR}" STREQUAL "/usr/lib" AND NOT "${QT_LIBRARY_DIR}" STREQUAL "/lib64" AND NOT "${QT_LIBRARY_DIR}" STREQUAL "/usr/lib64")
|
|
set (QT_NEED_RPATH TRUE)
|
|
endif ()
|
|
|
|
|
|
#
|
|
# fftw3 single precsion library
|
|
#
|
|
find_package (FFTW3 COMPONENTS single REQUIRED)
|
|
include_directories (${FFTW3_INCLUDE_DIRS})
|
|
|
|
|
|
#
|
|
# libhamlib setup
|
|
#
|
|
find_package (hamlib 3 REQUIRED)
|
|
include_directories (${hamlib_INCLUDE_DIRS})
|
|
if (hamlib_STATIC_LIBRARY)
|
|
# static link hamlib if archive library available
|
|
set (hamlib_LIBRARY "${hamlib_STATIC_LIBRARY}")
|
|
set (hamlib_LIBRARIES "${hamlib_STATIC_LIBRARIES}")
|
|
endif ()
|
|
|
|
message (STATUS "hamlib_INCLUDE_DIRS: ${hamlib_INCLUDE_DIRS}")
|
|
message (STATUS "hamlib_LIBRARY: ${hamlib_LIBRARY}")
|
|
message (STATUS "hamlib_LIBRARIES: ${hamlib_LIBRARIES}")
|
|
message (STATUS "hamlib_STATIC_LIBRARY: ${hamlib_STATIC_LIBRARY}")
|
|
message (STATUS "hamlib_STATIC_LIBRARIES: ${hamlib_STATIC_LIBRARIES}")
|
|
|
|
# if (WIN32)
|
|
# find_library (hamlib_RUNTIME NAMES hamlib hamlib-2 PATH_SUFFIXES bin)
|
|
# get_filename_component (_hamlib_runtime_path "${hamlib_RUNTIME}" PATH)
|
|
# file (GLOB hamlib_BACKENDS ${_hamlib_runtime_path}/hamlib*.dll)
|
|
# find_library (usb_RUNTIME NAMES usb0 PATH_SUFFIXES bin)
|
|
# endif (WIN32)
|
|
|
|
|
|
#
|
|
# Qt5 setup
|
|
#
|
|
|
|
# Widgets finds its own dependencies.
|
|
find_package (Qt5Widgets 5 REQUIRED)
|
|
find_package (Qt5Multimedia 5 REQUIRED)
|
|
|
|
if (WIN32)
|
|
add_definitions (-DQT_NEEDS_QTMAIN)
|
|
find_package (Qt5AxContainer REQUIRED)
|
|
endif (WIN32)
|
|
|
|
#
|
|
# stuff only qmake can tell us
|
|
#
|
|
get_target_property (QMAKE_EXECUTABLE Qt5::qmake LOCATION)
|
|
function (QUERY_QMAKE VAR RESULT)
|
|
exec_program (${QMAKE_EXECUTABLE} ARGS "-query ${VAR}" RETURN_VALUE return_code OUTPUT_VARIABLE output)
|
|
if (NOT return_code)
|
|
file (TO_CMAKE_PATH "${output}" output)
|
|
set (${RESULT} ${output} PARENT_SCOPE)
|
|
endif (NOT return_code)
|
|
message (STATUS "Asking qmake for ${RESULT} and got ${output}")
|
|
endfunction (QUERY_QMAKE)
|
|
|
|
query_qmake (QT_INSTALL_PLUGINS QT_PLUGINS_DIR)
|
|
query_qmake (QT_INSTALL_IMPORTS QT_IMPORTS_DIR)
|
|
query_qmake (QT_HOST_DATA QT_DATA_DIR)
|
|
set (QT_MKSPECS_DIR ${QT_DATA_DIR}/mkspecs)
|
|
|
|
# Tell CMake to run moc when necessary
|
|
set (CMAKE_AUTOMOC ON)
|
|
|
|
# don't use Qt "keywords" signal, slot, emit in generated files to
|
|
# avoid compatability issue with other libraries
|
|
# ADD_DEFINITIONS (-DQT_NO_KEYWORDS)
|
|
# ADD_DEFINITIONS (-DUNICODE) #as per qmake
|
|
|
|
# As moc files are generated in the binary dir, tell CMake to always
|
|
# look for includes there:
|
|
set (CMAKE_INCLUDE_CURRENT_DIR ON)
|
|
|
|
# project definitions
|
|
add_definitions (-DQT5 -DCMAKE_BUILD -DBIGSYM=1)
|
|
if (CMAKE_HOST_UNIX)
|
|
add_definitions (-DUNIX)
|
|
elseif (CMAKE_HOST_WIN32)
|
|
add_definitions (-DWIN32)
|
|
endif ()
|
|
|
|
|
|
#
|
|
# fetch and validate kvasd
|
|
#
|
|
add_custom_command (
|
|
OUTPUT contrib/kvasd${CMAKE_EXECUTABLE_SUFFIX}
|
|
COMMAND ${CMAKE_COMMAND} -D SYSTEM_NAME=${CMAKE_SYSTEM_NAME} -D EXECUTABLE_SUFFIX=${CMAKE_EXECUTABLE_SUFFIX} -P ${CMAKE_SOURCE_DIR}/CMake/download_kvasd.cmake
|
|
DEPENDS CMake/download_kvasd.cmake
|
|
COMMENT "Downloading kvasd for ${CMAKE_SYSTEM_NAME}"
|
|
VERBATIM
|
|
)
|
|
|
|
|
|
# UI generation
|
|
qt5_wrap_ui (wsjt_qt_GENUISRCS ${wsjt_qt_UISRCS})
|
|
qt5_wrap_ui (ConfigTest_GENUISRCS ${ConfigTest_UISRCS})
|
|
qt5_wrap_ui (wsjtx_GENUISRCS ${wsjtx_UISRCS})
|
|
|
|
# Resource generation
|
|
qt5_add_resources (wsjtx_RESOURCES_RCC wsjtx.qrc)
|
|
|
|
# AX COM servers
|
|
if (WIN32)
|
|
include (QtAxMacros)
|
|
wrap_ax_server (GENAXSRCS ${AXSERVERSRCS})
|
|
endif (WIN32)
|
|
|
|
|
|
#
|
|
# targets
|
|
#
|
|
|
|
# build a library of package functionality
|
|
add_library (wsjt STATIC ${wsjt_CSRCS} ${wsjt_CXXSRCS} ${wsjt_FSRCS})
|
|
|
|
# build a library of package Qt functionality
|
|
add_library (wsjt_qt STATIC ${wsjt_qt_CXXSRCS} ${wsjt_qt_GENUISRCS} ${GENAXSRCS})
|
|
qt5_use_modules (wsjt_qt Widgets OpenGL Network)
|
|
if (WIN32)
|
|
qt5_use_modules (wsjt_qt AxContainer AxBase)
|
|
endif (WIN32)
|
|
|
|
add_executable (jt9sim lib/jt9sim.f90 wsjtx.rc)
|
|
target_link_libraries (jt9sim wsjt)
|
|
|
|
add_executable (jt9code lib/jt9code.f90 wsjtx.rc)
|
|
target_link_libraries (jt9code wsjt)
|
|
|
|
add_executable (jt9 lib/jt9.f90 lib/jt9a.f90 lib/jt9b.f90 lib/jt9c.f90 ${jt9_CXXSRCS} wsjtx.rc)
|
|
target_link_libraries (jt9 wsjt ${FFTW3_LIBRARIES})
|
|
qt5_use_modules (jt9 Core)
|
|
|
|
# build configuration dialog and transceiver interface test application
|
|
#add_executable (ConfigTest ${ConfigTest_CXXSRCS} ${ConfigTest_GENUISRCS} wsjtx.rc)
|
|
#target_link_libraries (ConfigTest wsjt wsjt_qt ${hamlib_LIBRARIES})
|
|
#qt5_use_modules (ConfigTest Widgets OpenGL Network Multimedia)
|
|
|
|
# build the main application
|
|
add_executable (wsjtx WIN32 MACOSX_BUNDLE
|
|
${wsjtx_CXXSRCS}
|
|
${wsjtx_GENUISRCS}
|
|
wsjtx.rc
|
|
${WSJTX_ICON_FILE}
|
|
${wsjtx_RESOURCES_RCC}
|
|
contrib/kvasd${CMAKE_EXECUTABLE_SUFFIX}
|
|
)
|
|
qt5_use_modules (wsjtx Widgets OpenGL Network Multimedia)
|
|
|
|
if (UNIX)
|
|
if (NOT WSJT_SKIP_MANPAGES)
|
|
add_subdirectory (manpages)
|
|
endif (NOT WSJT_SKIP_MANPAGES)
|
|
if (NOT APPLE)
|
|
add_subdirectory (debian)
|
|
endif (NOT APPLE)
|
|
add_dependencies (wsjtx manpages debian)
|
|
endif (UNIX)
|
|
|
|
set_target_properties (wsjtx PROPERTIES
|
|
MACOSX_BUNDLE_INFO_STRING "${WSJTX_DESCRIPTION_SUMMARY}"
|
|
MACOSX_BUNDLE_ICON_FILE "${WSJTX_ICON_FILE}"
|
|
MACOSX_BUNDLE_BUNDLE_VERSION ${wsjtx_VERSION}
|
|
MACOSX_BUNDLE_SHORT_VERSION_STRING "v${wsjtx_VERSION}"
|
|
MACOSX_BUNDLE_LONG_VERSION_STRING "Version ${wsjtx_VERSION}"
|
|
MACOSX_BUNDLE_BUNDLE_NAME "WSJT-X"
|
|
MACOSX_BUNDLE_COPYRIGHT "${PROJECT_COPYRIGHT}"
|
|
)
|
|
|
|
target_link_libraries (wsjtx wsjt wsjt_qt ${hamlib_LIBRARIES} ${FFTW3_LIBRARIES})
|
|
|
|
if (WIN32)
|
|
set_target_properties (
|
|
wsjtx
|
|
# ConfigTest
|
|
PROPERTIES LINK_FLAGS_RELEASE "${LINKER_FLAGS_RELEASE} -mwindows"
|
|
)
|
|
endif (WIN32)
|
|
|
|
|
|
#
|
|
# installation
|
|
#
|
|
install (TARGETS wsjtx
|
|
RUNTIME DESTINATION ${WSJT_BIN_DESTINATION}
|
|
LIBRARY DESTINATION ${WSJT_LIB_DESTINATION}
|
|
BUNDLE DESTINATION .
|
|
#COMPONENT Runtime
|
|
)
|
|
|
|
install (TARGETS jt9
|
|
RUNTIME DESTINATION ${WSJT_BIN_DESTINATION}
|
|
LIBRARY DESTINATION ${WSJT_LIB_DESTINATION}
|
|
BUNDLE DESTINATION ${WSJT_BIN_DESTINATION}
|
|
#COMPONENT Runtime
|
|
)
|
|
|
|
install (PROGRAMS
|
|
${CMAKE_BINARY_DIR}/contrib/kvasd${CMAKE_EXECUTABLE_SUFFIX}
|
|
DESTINATION ${WSJT_BIN_DESTINATION}
|
|
#COMPONENT Runtime
|
|
)
|
|
|
|
|
|
#
|
|
# uninstall support
|
|
#
|
|
configure_file (
|
|
"${CMAKE_CURRENT_SOURCE_DIR}/CMake/cmake_uninstall.cmake.in"
|
|
"${CMAKE_CURRENT_BINARY_DIR}/cmake_uninstall.cmake"
|
|
@ONLY)
|
|
add_custom_target (uninstall
|
|
"${CMAKE_COMMAND}" -P "${CMAKE_CURRENT_BINARY_DIR}/cmake_uninstall.cmake")
|
|
|
|
|
|
# creates svnversion.h using cmake script
|
|
add_custom_target (revisiontag
|
|
COMMAND ${CMAKE_COMMAND} -D SOURCE_DIR=${CMAKE_CURRENT_SOURCE_DIR} -D OUTPUT_DIR=${PROJECT_BINARY_DIR} -P ${CMAKE_CURRENT_SOURCE_DIR}/CMake/getsvn.cmake
|
|
COMMENT "Generating Subversion revision information"
|
|
VERBATIM
|
|
)
|
|
# explicitly say that the wsjt_qt depends on custom target, this is
|
|
# done indirectly so that the revisiontag target gets built exactly
|
|
# once per build
|
|
add_dependencies(wsjt_qt revisiontag)
|
|
|
|
|
|
#
|
|
# versioning and configuration
|
|
#
|
|
configure_file (
|
|
"${PROJECT_SOURCE_DIR}/wsjtx_config.h.in"
|
|
"${PROJECT_BINARY_DIR}/wsjtx_config.h"
|
|
)
|
|
include_directories ("${PROJECT_BINARY_DIR}")
|
|
|
|
|
|
if (NOT WIN32 AND NOT APPLE)
|
|
# install a desktop file so wsjtx appears in the application start
|
|
# menu with an icon
|
|
install (
|
|
FILES wsjtx.desktop
|
|
DESTINATION share/applications
|
|
#COMPONENT Runtime
|
|
)
|
|
install (
|
|
FILES icons/Unix/wsjtx_icon.png
|
|
DESTINATION share/pixmaps
|
|
#COMPONENT Runtime
|
|
)
|
|
endif (NOT WIN32 AND NOT APPLE)
|
|
|
|
|
|
#
|
|
# bundle fixup only done in Release or MinSizeRel configurations
|
|
#
|
|
if (NOT is_debug_build)
|
|
|
|
# get_target_property (QtCore_location Qt5::Core LOCATION)
|
|
# get_filename_component (QtCore_location ${QtCore_location} PATH)
|
|
# list (APPEND fixup_library_dirs ${QtCore_location})
|
|
|
|
if (APPLE)
|
|
set (CMAKE_POSTFLIGHT_SCRIPT
|
|
"${wsjtx_BINARY_DIR}/postflight.sh")
|
|
set (CMAKE_POSTUPGRADE_SCRIPT
|
|
"${wsjtx_BINARY_DIR}/postupgrade.sh")
|
|
configure_file ("${wsjtx_SOURCE_DIR}/postflight.sh.in"
|
|
"${wsjtx_BINARY_DIR}/postflight.sh")
|
|
configure_file ("${wsjtx_SOURCE_DIR}/postupgrade.sh.in"
|
|
"${wsjtx_BINARY_DIR}/postupgrade.sh")
|
|
endif ()
|
|
|
|
if (APPLE OR WIN32)
|
|
# install rules for including 3rd party libs such as Qt
|
|
|
|
# install a qt.conf file
|
|
install (CODE "
|
|
file (WRITE \"\$ENV{DESTDIR}\${CMAKE_INSTALL_PREFIX}/${WSJT_QT_CONF_DESTINATION}/qt.conf\"
|
|
\"[Paths]
|
|
\")
|
|
"
|
|
#COMPONENT Runtime
|
|
)
|
|
|
|
# if a system Qt is used (e.g. installed in /usr/lib/), it will not be included in the installation
|
|
set (fixup_exe "\${CMAKE_INSTALL_PREFIX}/${WSJT_BIN_DESTINATION}/${CMAKE_PROJECT_NAME}${CMAKE_EXECUTABLE_SUFFIX}")
|
|
#get_filename_component (hamlib_lib_dir ${hamlib_LIBRARIES} PATH)
|
|
|
|
if (APPLE)
|
|
# install required Qt plugins
|
|
install (
|
|
DIRECTORY
|
|
${QT_PLUGINS_DIR}/platforms
|
|
${QT_PLUGINS_DIR}/audio
|
|
DESTINATION ${WSJT_PLUGIN_DESTINATION}
|
|
CONFIGURATIONS Release MinSizeRel
|
|
#COMPONENT Runtime
|
|
FILES_MATCHING PATTERN "*${CMAKE_SHARED_LIBRARY_SUFFIX}"
|
|
PATTERN "*minimal*${CMAKE_SHARED_LIBRARY_SUFFIX}" EXCLUDE
|
|
PATTERN "*offscreen*${CMAKE_SHARED_LIBRARY_SUFFIX}" EXCLUDE
|
|
PATTERN "*_debug${CMAKE_SHARED_LIBRARY_SUFFIX}" EXCLUDE
|
|
)
|
|
# install (
|
|
# DIRECTORY
|
|
# ${QT_PLUGINS_DIR}/platforms
|
|
# ${QT_PLUGINS_DIR}/audio
|
|
# DESTINATION ${WSJT_PLUGIN_DESTINATION}
|
|
# CONFIGURATIONS Debug
|
|
# #COMPONENT Runtime
|
|
# FILES_MATCHING PATTERN "*_debug${CMAKE_SHARED_LIBRARY_SUFFIX}"
|
|
# PATTERN "*minimal*${CMAKE_SHARED_LIBRARY_SUFFIX}" EXCLUDE
|
|
# PATTERN "*offscreen*${CMAKE_SHARED_LIBRARY_SUFFIX}" EXCLUDE
|
|
# )
|
|
|
|
# add plugins path for Mac Bundle
|
|
install (CODE "
|
|
file (APPEND \"\$ENV{DESTDIR}\${CMAKE_INSTALL_PREFIX}/${WSJT_QT_CONF_DESTINATION}/qt.conf\"
|
|
\"Plugins = Plugins
|
|
\")
|
|
"
|
|
#COMPONENT Runtime
|
|
)
|
|
endif (APPLE)
|
|
|
|
if (WIN32)
|
|
# DLL directory
|
|
#set (hamlib_lib_dir ${hamlib_lib_dir}/../bin)
|
|
|
|
get_filename_component (fftw_lib_dir ${FFTW3F_LIBRARY} PATH)
|
|
list (APPEND fixup_library_dirs ${fftw_lib_dir})
|
|
|
|
# install required Qt plugins
|
|
install (
|
|
DIRECTORY
|
|
${QT_PLUGINS_DIR}/platforms
|
|
DESTINATION ${WSJT_PLUGIN_DESTINATION}
|
|
CONFIGURATIONS Release MinSizeRel
|
|
#COMPONENT Runtime
|
|
FILES_MATCHING PATTERN "*${CMAKE_SHARED_LIBRARY_SUFFIX}"
|
|
PATTERN "*minimal*${CMAKE_SHARED_LIBRARY_SUFFIX}" EXCLUDE
|
|
PATTERN "*offscreen*${CMAKE_SHARED_LIBRARY_SUFFIX}" EXCLUDE
|
|
PATTERN "*d${CMAKE_SHARED_LIBRARY_SUFFIX}" EXCLUDE
|
|
)
|
|
# install (
|
|
# DIRECTORY
|
|
# ${QT_PLUGINS_DIR}/platforms
|
|
# DESTINATION ${WSJT_PLUGIN_DESTINATION}
|
|
# CONFIGURATIONS Debug
|
|
# #COMPONENT Runtime
|
|
# FILES_MATCHING PATTERN "*d${CMAKE_SHARED_LIBRARY_SUFFIX}"
|
|
# PATTERN "*minimal*${CMAKE_SHARED_LIBRARY_SUFFIX}" EXCLUDE
|
|
# PATTERN "*offscreen*${CMAKE_SHARED_LIBRARY_SUFFIX}" EXCLUDE
|
|
# )
|
|
|
|
# add plugins path for WIN32
|
|
file (RELATIVE_PATH _plugins_path "${CMAKE_INSTALL_PREFIX}/${WSJT_QT_CONF_DESTINATION}" "${CMAKE_INSTALL_PREFIX}/${WSJT_PLUGIN_DESTINATION}")
|
|
install (CODE "
|
|
file (APPEND \"\$ENV{DESTDIR}\${CMAKE_INSTALL_PREFIX}/${WSJT_QT_CONF_DESTINATION}/qt.conf\"
|
|
\"Plugins = ${_plugins_path}
|
|
\")
|
|
"
|
|
#COMPONENT Runtime
|
|
)
|
|
|
|
# set (gp_tool "objdump") # we want MinGW tool - not MSVC (See GetPrerequisites.cmake)
|
|
endif (WIN32)
|
|
|
|
#list (APPEND fixup_library_dirs ${hamlib_lib_dir})
|
|
list (APPEND fixup_library_dirs ${hamlib_LIBRARY_DIRS})
|
|
|
|
install (CODE "
|
|
file (GLOB_RECURSE QTPLUGINS
|
|
\"\$ENV{DESTDIR}\${CMAKE_INSTALL_PREFIX}/${WSJT_PLUGIN_DESTINATION}/*${CMAKE_SHARED_LIBRARY_SUFFIX}\")
|
|
include (BundleUtilities)
|
|
set (BU_CHMOD_BUNDLE_ITEMS ON)
|
|
set (gp_tool ${gp_tool})
|
|
message (STATUS \"fixup_exe: ${fixup_exe}\")
|
|
fixup_bundle (\"${fixup_exe}\" \"\${QTPLUGINS}\" \"${fixup_library_dirs}\")
|
|
"
|
|
#COMPONENT Runtime
|
|
)
|
|
endif (APPLE OR WIN32)
|
|
|
|
endif (NOT is_debug_build)
|
|
|
|
|
|
#
|
|
# packaging
|
|
#
|
|
set (CPACK_PACKAGE_NAME "${CMAKE_PROJECT_NAME}")
|
|
set (CPACK_PACKAGE_VERSION_MAJOR ${WSJTX_VERSION_MAJOR})
|
|
set (CPACK_PACKAGE_VERSION_MINOR ${WSJTX_VERSION_MINOR})
|
|
set (CPACK_PACKAGE_VERSION_PATCH ${WSJTX_VERSION_PATCH})
|
|
|
|
if (WIN32)
|
|
set (CPACK_GENERATOR "NSIS")
|
|
elseif (APPLE)
|
|
set (CPACK_GENERATOR "DragNDrop" "PackageMaker")
|
|
else ()
|
|
#
|
|
# Derive the correct filename for a Debian package because the DEB
|
|
# generator doesn't do this correctly at present.
|
|
#
|
|
string (TOLOWER "${CPACK_PACKAGE_NAME}" CPACK_PACKAGE_NAME_LOWERCASE)
|
|
find_program (DPKG_PROGRAM dpkg DOC "dpkg program of Debian-based systems")
|
|
if (DPKG_PROGRAM)
|
|
execute_process (
|
|
COMMAND ${DPKG_PROGRAM} --print-architecture
|
|
OUTPUT_VARIABLE CPACK_DEBIAN_PACKAGE_ARCHITECTURE
|
|
OUTPUT_STRIP_TRAILING_WHITESPACE
|
|
)
|
|
set (DEBIAN_PACKAGE_FILE_NAME
|
|
"${CPACK_PACKAGE_NAME_LOWERCASE}_${wsjtx_VERSION}_${CPACK_DEBIAN_PACKAGE_ARCHITECTURE}")
|
|
|
|
else (DPKG_PROGRAM)
|
|
set (DEBIAN_PACKAGE_FILE_NAME
|
|
"${CPACK_PACKAGE_NAME_LOWERCASE}_${wsjtx_VERSION}_${CMAKE_SYSTEM_NAME}")
|
|
endif (DPKG_PROGRAM)
|
|
|
|
set (CPACK_DEBIAN_PACKAGE_PACKAGE_SHLIBDEPS ON)
|
|
|
|
set (CPACK_GENERATOR "DEB" "RPM" "TGZ")
|
|
endif ()
|
|
|
|
configure_file ("${PROJECT_SOURCE_DIR}/CMakeCPackOptions.cmake.in"
|
|
"${PROJECT_BINARY_DIR}/CMakeCPackOptions.cmake" @ONLY)
|
|
set (CPACK_PROJECT_CONFIG_FILE "${PROJECT_BINARY_DIR}/CMakeCPackOptions.cmake")
|
|
|
|
include (CPack)
|