Several improvements related to packaging on Linux.

Added a manpages sub-project to generate man pages for wsjtx from
AsciiDoc source.

Add items required by Debian packaging and Free Desktop Standards.

Add better command line processing to wsjtx including version and help
options.

Add a new command line option 'test-mode' that invokes the Qt test
mode where all writable file locations are moved to a common
directory.  This is to allow application testing from a repeatable
start point rather than have the test application sharing files with
normal operations.  See QStandardPaths::setTestModeEnabled() for
details of the test location.

git-svn-id: svn+ssh://svn.code.sf.net/p/wsjt/wsjt/branches/wsjtx@4046 ab8295b8-cf94-4d9e-aec4-7959e3be5d79
This commit is contained in:
Bill Somerville 2014-04-20 02:39:48 +00:00
parent d9532543b0
commit c99e564f1e
10 changed files with 342 additions and 41 deletions

View File

@ -2,10 +2,10 @@
# To pass variables to cpack from cmake, they must be configured
# in this file.
set (CPACK_PACKAGE_VENDOR "Joe Taylor, K1JT")
set (CPACK_PACKAGE_CONTACT "k1jt@arrl.net")
set (CPACK_PACKAGE_VENDOR "@PROJECT_VENDOR@")
set (CPACK_PACKAGE_CONTACT "@PROJECT_CONTACT@")
set (CPACK_PACKAGE_DESCRIPTION_FILE "@PROJECT_SOURCE_DIR@/Copyright.txt")
set (CPACK_PACKAGE_DESCRIPTION_SUMMARY "WSJT-X - JT9 and JT65 Modes for LF, MF and HF Amateur Radio")
set (CPACK_PACKAGE_DESCRIPTION_SUMMARY "@PROJECT_SUMMARY_DESCRIPTION@")
set (CPACK_RESOURCE_FILE_LICENSE "@PROJECT_SOURCE_DIR@/license.txt")
set (CPACK_PACKAGE_INSTALL_DIRECTORY ${CPACK_PACKAGE_NAME})
set (CPACK_PACKAGE_EXECUTABLES wsjtx "WSJT-X")
@ -15,6 +15,7 @@ set (CPACK_STRIP_FILES TRUE)
#
# components
#
set (CPACK_COMPONENTS_ALL Runtime)
#set (CPACK_COMPONENT_APPLICATIONS_DISPLAY_NAME "WSJT-X Application")
#set (CPACK_COMPONENT_APPLICATIONS_DESCRIPTION "@WSJTX_DESCRIPTION_SUMMARY@")
@ -74,8 +75,11 @@ if ("${CPACK_GENERATOR}" STREQUAL "WIX")
endif ()
if ("${CPACK_GENERATOR}" STREQUAL "DEB")
set (CPACK_DEBIAN_PACKAGE_DESCRIPTION "@PROJECT_DESCRIPTION@")
set (CPACK_PACKAGE_FILE_NAME "@DEBIAN_PACKAGE_FILE_NAME@")
set (CPACK_DEBIAN_PACKAGE_HOMEPAGE "@PROJECT_HOMEPAGE@")
set (CPACK_DEBIAN_PACKAGE_DEPENDS "libgfortran3 (>=4.8.2), libqt5multimedia5-plugins (>=5), libqt5widgets5 (>=5), libc6 (>=2.19)")
set (CPACK_COMPONENTS_ALL ${CPACK_COMPONENTS_ALL} Debian)
endif ("${CPACK_GENERATOR}" STREQUAL "DEB")
message (STATUS "CMAKE_INSTALL_PREFIX: ${CMAKE_INSTALL_PREFIX}")

View File

@ -2,7 +2,38 @@ cmake_minimum_required (VERSION 2.8.9 FATAL_ERROR)
project (wsjtx C CXX Fortran)
set (WSJTX_COPYRIGHT "Copyright (C) 2001-2014 by Joe Taylor, K1JT")
#
# 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)
@ -34,18 +65,12 @@ option (WSJT_SOFT_KEYING "Apply a ramp to CW keying envelope to reduce transient
set (WSJT_BIN_DESTINATION bin)
set (WSJT_LIB_DESTINATION lib)
set (WSJT_SHARE_DESTINATION share/wsjtx)
set (WSJT_DOC_DESTINATION share/wsjtx/doc)
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 information
#
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")
#
# Project sources
#
@ -349,14 +374,10 @@ if (APPLE)
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_BIN_DESTINATION ${CMAKE_PROJECT_NAME}.app/Contents/MacOS)
endif (APPLE)
#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 ()
#
# C & C++ setup
@ -430,7 +451,7 @@ set (CMAKE_SKIP_BUILD_RPATH FALSE)
# later on in the install phase
set (CMAKE_BUILD_WITH_INSTALL_RPATH FALSE)
set (CMAKE_INSTALL_RPATH "${CMAKE_INSTALL_PREFIX}/${WSJT_LIB_DESTINATION}")
# 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
@ -438,10 +459,15 @@ 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")
# 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 ()
#
@ -450,6 +476,7 @@ endif ("${isSystemDir}" STREQUAL "-1")
find_package (FFTW3 COMPONENTS single REQUIRED)
include_directories (${FFTW3_INCLUDE_DIRS})
#
# libhamlib setup
#
@ -584,9 +611,22 @@ qt5_use_modules (jt9 Core)
#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})
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)
add_subdirectory (manpages)
add_subdirectory (debian)
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}"
@ -594,7 +634,7 @@ set_target_properties (wsjtx PROPERTIES
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 "${WSJTX_COPYRIGHT}"
MACOSX_BUNDLE_COPYRIGHT "${PROJECT_COPYRIGHT}"
)
target_link_libraries (wsjtx wsjt wsjt_qt ${hamlib_LIBRARIES} ${FFTW3_LIBRARIES})
@ -615,20 +655,20 @@ install (TARGETS wsjtx
RUNTIME DESTINATION ${WSJT_BIN_DESTINATION}
LIBRARY DESTINATION ${WSJT_LIB_DESTINATION}
BUNDLE DESTINATION .
# COMPONENT Runtime
COMPONENT Runtime
)
install (TARGETS jt9
RUNTIME DESTINATION ${WSJT_BIN_DESTINATION}
LIBRARY DESTINATION ${WSJT_LIB_DESTINATION}
BUNDLE DESTINATION ${WSJT_BIN_DESTINATION}
# COMPONENT Runtime
COMPONENT Runtime
)
install (PROGRAMS
${CMAKE_BINARY_DIR}/contrib/kvasd${CMAKE_EXECUTABLE_SUFFIX}
DESTINATION ${WSJT_BIN_DESTINATION}
# COMPONENT Runtime
COMPONENT Runtime
)

0
artwork/make_graphics.sh Normal file → Executable file
View File

38
debian/CMakeLists.txt vendored Normal file
View File

@ -0,0 +1,38 @@
find_program (GZIP_EXECUTABLE NAMES gzip)
string (TIMESTAMP ts "%w, %d [%m] %Y %H:%M:%S +0000" UTC)
set (__days Sun Mon Tue Wed Thu Fri Sat)
string (SUBSTRING ${ts} 0 1 __index)
list (GET __days ${__index} __day)
string (REPLACE "${__index}," "${__day}," ts ${ts})
set (__months Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec)
string (SUBSTRING ${ts} 9 2 __month_index)
math (EXPR __index "${__month_index} - 1")
list (GET __months "${__index}" __month)
string (REPLACE "[${__month_index}]" "${__month}" ts ${ts})
configure_file (
"${CMAKE_CURRENT_SOURCE_DIR}/changelog.in"
"${CMAKE_CURRENT_BINARY_DIR}/changelog"
@ONLY)
add_custom_target (debian
COMMAND ${GZIP_EXECUTABLE} --keep --best --force changelog
DEPENDS changelog.in
WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}
COMMENT "Compressing Debian changelog"
)
configure_file (
"${CMAKE_CURRENT_SOURCE_DIR}/copyright.in"
"${CMAKE_CURRENT_BINARY_DIR}/copyright"
@ONLY)
install (FILES
${CMAKE_CURRENT_BINARY_DIR}/changelog.gz
${CMAKE_CURRENT_BINARY_DIR}/copyright
DESTINATION ${WSJT_DOC_DESTINATION}
COMPONENT Debian
)

6
debian/changelog.in vendored Normal file
View File

@ -0,0 +1,6 @@
@CMAKE_PROJECT_NAME@ (@wsjtx_VERSION@) experimental; urgency=low
* wsjtx Debian maintainer and upstream author are identical.
Therefore see also normal changelog file for Debian changes.
-- @PROJECT_CONTACT@ @ts@

10
debian/copyright.in vendored Normal file
View File

@ -0,0 +1,10 @@
Format-Specification: http://wiki.debian.org/Proposals/CopyrightFormat
Upstream-Name: @CMAKE_PROJECT_NAME@
Upstream-Maintainer: @PROJECT_CONTACT@
Upstream-Source: @PROJECT_HOMEPAGE@
Files: *
Copyright: @PROJECT_COPYRIGHT@.
License: GPL v3
The full text of the GPL is distributed in
/usr/share/common-licenses/GPL-3 on Debian systems.

View File

@ -18,6 +18,9 @@
#include <QSysInfo>
#include <QDir>
#include <QStandardPaths>
#include <QCommandLineParser>
#include <QCommandLineOption>
#include <QStringList>
#include "revision_utils.hpp"
@ -41,23 +44,44 @@ int main(int argc, char *argv[])
// Override programs executable basename as application name.
a.setApplicationName ("WSJT-X");
a.setApplicationVersion (WSJTX_STRINGIZE (WSJTX_VERSION_MAJOR)
"." WSJTX_STRINGIZE (WSJTX_VERSION_MINOR)
"." WSJTX_STRINGIZE (WSJTX_VERSION_PATCH) " " + revision ());
QCommandLineParser parser;
parser.setApplicationDescription ("\nJT65A & JT9 Weak Signal Communications Program.");
parser.addHelpOption ();
parser.addVersionOption ();
#if WSJT_STANDARD_FILE_LOCATIONS
// support for multiple instances running from a single installation
QCommandLineOption rig_option (QStringList {} << "r" << "rig-name"
, a.translate ("main", "Where <rig-name> is for multi-instance support.")
, a.translate ("main", "rig-name"));
parser.addOption (rig_option);
#endif
QCommandLineOption test_option (QStringList {} << "test-mode"
, a.translate ("main", "Writable files in test location. Use with caution, for testing only."));
parser.addOption (test_option);
parser.process (a);
QStandardPaths::setTestModeEnabled (parser.isSet (test_option));
bool multiple {false};
#if WSJT_STANDARD_FILE_LOCATIONS
// support for multiple instances running from a single installation
auto args = a.arguments ();
auto rig_arg_index = args.lastIndexOf (QRegularExpression {R"((-r)|(--r(i?(g?))))"});
if (rig_arg_index > 0 // not interested if somehow the exe is called -r or --rig
&& rig_arg_index + 1 < args.size ())
if (parser.isSet (rig_option))
{
auto temp_name = args.at (rig_arg_index + 1);
if ('-' != temp_name[0]
&& !temp_name.isEmpty ())
auto temp_name = parser.value (rig_option);
if (!temp_name.isEmpty ())
{
if (temp_name.contains (QRegularExpression {R"([\\/])"}))
{
throw std::runtime_error (QObject::tr ("Invalid rig name - \\ & / not allowed").toLocal8Bit ().data ());
std::cerr << QObject::tr ("Invalid rig name - \\ & / not allowed").toLocal8Bit ().data () << std::endl;
parser.showHelp (-1);
}
a.setApplicationName (a.applicationName () + " - " + temp_name);

59
manpages/CMakeLists.txt Normal file
View File

@ -0,0 +1,59 @@
set (ASCIIDOC_MANS
man1/wsjtx.1.txt
)
find_program (A2X_EXECUTABLE NAMES a2x a2x.py)
if (NOT A2X_EXECUTABLE)
message (SEND_ERROR "Failed to find a2x.")
endif ()
find_program (GZIP_EXECUTABLE NAMES gzip)
if (NOT GZIP_EXECUTABLE)
message (SEND_ERROR "Failed to find gzip.")
endif ()
find_program (SED_EXECUTABLE NAMES sed)
if (NOT SED_EXECUTABLE)
message (SEND_ERROR "Failed to find sed.")
endif ()
set (XSLTPROC_OPTS
"-param man.endnotes.list.enabled 0 -param man.endnotes.are.numbered 0"
)
set (A2X_OPTS
--format=manpage
--xsltproc-opts=${XSLTPROC_OPTS}
--doctype=manpage
--no-xmllint
)
set (MANPAGES)
if (A2X_EXECUTABLE AND GZIP_EXECUTABLE)
file (MAKE_DIRECTORY man)
foreach (f IN LISTS ASCIIDOC_MANS)
get_filename_component (d "${f}" PATH)
string (SUBSTRING "${d}" 3 -1 section)
if (NOT section MATCHES "[1-9]")
message (SEND_ERROR "Invalid man section ${section} in ${f}")
endif (NOT section MATCHES "[1-9]")
get_filename_component (filename "${f}" NAME_WE)
set (f "${CMAKE_CURRENT_SOURCE_DIR}/${f}")
set (d "man/${d}")
set (o "${d}/${filename}.${section}")
add_custom_command (OUTPUT "${o}.gz"
COMMAND ${CMAKE_COMMAND} ARGS -E make_directory "${d}"
COMMAND ${A2X_EXECUTABLE} ARGS ${A2X_OPTS} -D "${d}" "${f}"
COMMAND ${GZIP_EXECUTABLE} ARGS -r --force --best "${o}"
COMMAND ${SED_EXECUTABLE} ARGS --in-place "s@.so @.so man${section}/@" "${d}/*.${section}"
COMMAND ${GZIP_EXECUTABLE} ARGS -r --force --best "${d}/*.${section}"
DEPENDS "${f}"
COMMENT "Generating ${o}.gz"
)
list (APPEND MANPAGES "${o}.gz")
endforeach ()
install (
DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/man
DESTINATION ${WSJT_MANPAGE_DESTINATION}
)
endif (A2X_EXECUTABLE AND GZIP_EXECUTABLE)
add_custom_target (manpages DEPENDS ${MANPAGES})

120
manpages/man1/wsjtx.1.txt Normal file
View File

@ -0,0 +1,120 @@
:doctype: manpage
:man source: AsciiDoc
:man version: {revnumber}
:man manual: WSJT-X Manual
= wsjtx(1)
== NAME
wsjtx, jt9 - Weak signal communications program.
== SYNOPSIS
*wsjtx* [OPTIONS]
== DESCRIPTION
*wsjtx* is a weak signal communications program supporting two operating
modes: JT65 and JT9 (*wsjtx* version 1 supported JT9 only).
WSJT-X home page:: http://www.physics.princeton.edu/pulsar/K1JT/wsjtx.html
WSJT-X User's Guide:: http://www.physics.princeton.edu/pulsar/K1JT/wsjtx-doc/wsjtx-main-toc2.html
An alternative JT65 decoder executable *kvasd* for i386 Ubuntu is
available at http://www.physics.princeton.edu/pulsar/K1JT/kvasd .
This decoder is not open-source, is not included in the wsjtx package,
and is not required for JT65 decoding.
== OPTIONS
*-r, --rig-name*[=RIGNAME]::
Enable multiple instances of the wsjtx(1) application to run
concurrently. Each RIGNAME must be unique. One instance may use no
RIGNAME. If this option is not supplied then only one instance of
wsjtx(1) may be run at any time.
*-v, --version*:: Display the application version.
*-h,--help*:: Display usage information.
*--test-mode*::
When this option is provided all writable files will be placed in a
special test location (~/.qttest). This option is only for
application testing and is not designed for normal operations. **Use
with caution**.
== FILES
Most of the following files are in a directory path containing the
directory name *WSJT-X[ - RIGNAME]* which indicates the value of the
command line option *--rig=RIGNAME* to indicate multiple instances of
*wsjtx* running concurrently. All writable files listed below are
therefore unique to each concurrent instance of *wsjtx*. If the
*--rig* command line option is not supplied or the *RIGNAME* argument
is not supplied then the directory paths below will have the directory
*WSJT-X*.
~/.config/WSJT-X[ - RIGNAME].ini::
This file stores the application
configuration settings.
~/.local/share/WSJT-X[ - RIGNAME]/ALL.txt::
*ALL.txt* contains a record of transmitted and received messages and
other activity such as frequency or band changes.
~/.local/share/WSJT-X[ - RIGNAME]/save/::
Is the default location for saved .WAV files recorded by the
application. The .WAV file save location may be changed in the
applications settings dialog.
~/.local/share/WSJT-X[ - RIGNAME]/save/samples/::
Sample .WAV files suppied with the application are found in this
directory, they may be played back in the application and are referred
to in the user guide tutorial sections.
~/.local/share/WSJT-X[ -RIGNAME]/timer.out::
This is a diagnostic file that records decode performance profiling
information.
~/.local/share/WSJT-X[ - RIGNAME]/cty.dat::
This file is not required as a version of it is embedded in the
application, but if you wish an updated version can be placed here.
If present that version will be used in preference to the embedded
version.
~/.local/share/WSJT-X[ - RIGNAME]/wsjtx.log::
This is a plain text CSV record of logged QSOs.
~/.local/share/WSJT-X[ - RIGNAME]/wsjtx_log.adi::
This is a record of QSOs logged in the ADIF format which is suitable
for import into many Ham Radio logging programs.
== AUTHOR
Joe Taylor, K1JT.
== COPYING
*wsjtx* is Copyright (C) 2001 - 2014 by Joseph H. Taylor, Jr., K1JT,
with contributions from additional authors. WSJT-X is Open Source
software, licensed under the GNU General Public License (GPLv3).
*wsjtx* includes the ``**Hamlib - Ham Radio Control Libraries**''
software which is licensed under the GNU Lesser General Public License
(LGPL). Home page https://sourceforge.net/apps/mediawiki/hamlib,
sources from https://sourceforge.net/p/hamlib/code/ci/master/tree/.
This program is distributed in the hope that it will be useful, but
WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
General Public License for more details.

View File

@ -3,9 +3,9 @@ Version=1.0
Name=wsjtx
Comment=Amateur Radio Weak Signal Operating
Exec=wsjtx
Icon=wsjtx_icon.png
Icon=wsjtx_icon
Terminal=false
X-MultipleArgs=false
Type=Application
Categories=Amateur Radio;
Categories=AudioVideo;Audio;HamRadio;
StartupNotify=true