diff --git a/CMakeLists.txt b/CMakeLists.txt index 996960637..a688f1649 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -150,43 +150,27 @@ message (STATUS "******************************************************") # # install locations # -set (BIN_DESTINATION bin) -set (LIB_DESTINATION lib) -set (INCLUDE_DESTINATION include) -set (SHARE_DESTINATION share) -set (DOC_DESTINATION doc/${CMAKE_PROJECT_NAME}) -set (DATA_DESTINATION ${CMAKE_PROJECT_NAME}) -set (MANPAGE_DESTINATION ${SHARE_DESTINATION}) -set (PLUGIN_DESTINATION lib/plugins) -set (QT_CONF_DESTINATION bin) - -if (WIN32) - set (SHARE_DESTINATION bin) - set (DOC_DESTINATION doc) - set (DATA_DESTINATION data) - set (PLUGIN_DESTINATION plugins) -endif (WIN32) if (APPLE) - set (BIN_DESTINATION ${CMAKE_PROJECT_NAME}.app/Contents/MacOS) - set (SHARE_DESTINATION ${CMAKE_PROJECT_NAME}.app/Contents/Resources) - set (MANPAGE_DESTINATION ${CMAKE_PROJECT_NAME}.app/Contents/Resources) - set (DOC_DESTINATION doc) - set (DATA_DESTINATION data) - set (PLUGIN_DESTINATION ${CMAKE_PROJECT_NAME}.app/Contents/PlugIns) - set (QT_CONF_DESTINATION ${CMAKE_PROJECT_NAME}.app/Contents/Resources) -endif (APPLE) + set (CMAKE_INSTALL_BINDIR ${CMAKE_PROJECT_NAME}.app/Contents/MacOS) + set (CMAKE_INSTALL_DATAROOTDIR ${CMAKE_PROJECT_NAME}.app/Contents/Resources) +endif () + +include (GNUInstallDirs) + +set (PLUGIN_DESTINATION ${CMAKE_INSTALL_LIBDIR}/plugins) +set (QT_CONF_DESTINATION ${CMAKE_INSTALL_BINDIR}) +if (WIN32) + set (PLUGIN_DESTINATION plugins) +elseif (APPLE) + set (PLUGIN_DESTINATION ${CMAKE_INSTALL_BINDIR}/../PlugIns) + set (QT_CONF_DESTINATION ${CMAKE_INSTALL_DATAROOTDIR}) +endif () -set (WSJT_BIN_DESTINATION ${BIN_DESTINATION} CACHE PATH "Path for executables") -set (WSJT_LIB_DESTINATION ${LIB_DESTINATION} CACHE PATH "Path for libraries") -set (WSJT_INCLUDE_DESTINATION ${INCLUDE_DESTINATION} CACHE PATH "Path for library headers") -set (WSJT_SHARE_DESTINATION ${SHARE_DESTINATION} CACHE PATH "Path for shared content") -set (WSJT_DOC_DESTINATION ${DOC_DESTINATION} CACHE PATH "Path for documentation") -set (WSJT_DATA_DESTINATION ${DATA_DESTINATION} CACHE PATH "Path for shared RO data") -set (WSJT_MANPAGE_DESTINATION ${MANPAGE_DESTINATION} CACHE PATH "Path for manpages") set (WSJT_PLUGIN_DESTINATION ${PLUGIN_DESTINATION} CACHE PATH "Path for plugins") set (WSJT_QT_CONF_DESTINATION ${QT_CONF_DESTINATION} CACHE PATH "Path for the qt.conf file") + # # Project sources # @@ -759,6 +743,7 @@ message (STATUS "hamlib_INCLUDE_DIRS: ${hamlib_INCLUDE_DIRS}") message (STATUS "hamlib_LIBRARIES: ${hamlib_LIBRARIES}") message (STATUS "hamlib_LIBRARY_DIRS: ${hamlib_LIBRARY_DIRS}") + # # Qt5 setup # @@ -899,7 +884,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}/${CMAKE_INSTALL_LIBDIR}") # add the automaticaly determined parts of the RPATH which point to # directories outside of the build tree to the install RPATH @@ -907,9 +892,9 @@ 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) +# list (FIND CMAKE_PLATFORM_IMPLICIT_LINK_DIRECTORIES "${CMAKE_INSTALL_PREFIX}/${CMAKE_INSTALL_LIBDIR}" isSystemDir) # if ("${isSystemDir}" STREQUAL "-1") -# set (CMAKE_INSTALL_RPATH "${CMAKE_INSTALL_PREFIX}/${WSJT_LIB_DESTINATION}") +# set (CMAKE_INSTALL_RPATH "${CMAKE_INSTALL_PREFIX}/${CMAKE_INSTALL_LIBDIR}") # endif ("${isSystemDir}" STREQUAL "-1") set (QT_NEED_RPATH FALSE) @@ -1186,11 +1171,11 @@ qt5_use_modules (wsjtx SerialPort) # not sure why the interface link library syn add_library (wsjtx_udp-static STATIC ${UDP_library_CXXSRCS}) #target_include_directories (wsjtx_udp # INTERFACE -# $ +# $ # ) target_include_directories (wsjtx_udp-static INTERFACE - $ + $ ) #set_target_properties (wsjtx_udp PROPERTIES # PUBLIC_HEADER "${UDP_library_HEADERS}" @@ -1236,48 +1221,48 @@ endif (UNIX) # installation # install (TARGETS wsjtx - RUNTIME DESTINATION ${WSJT_BIN_DESTINATION} COMPONENT runtime + RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR} COMPONENT runtime BUNDLE DESTINATION . COMPONENT runtime ) # install (TARGETS wsjtx_udp EXPORT udp -# RUNTIME DESTINATION ${WSJT_BIN_DESTINATION} -# LIBRARY DESTINATION ${WSJT_LIB_DESTINATION} -# ARCHIVE DESTINATION ${WSJT_LIB_DESTINATION} -# PUBLIC_HEADER DESTINATION ${WSJT_INCLUDE_DESTINATION}/wsjtx +# RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR} +# LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} +# ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR} +# PUBLIC_HEADER DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/wsjtx # ) # install (TARGETS wsjtx_udp-static EXPORT udp-static -# DESTINATION ${WSJT_LIB_DESTINATION} +# DESTINATION ${CMAKE_INSTALL_LIBDIR} # ) # install (EXPORT udp NAMESPACE wsjtx:: -# DESTINATION ${WSJT_LIB_DESTINATION}/cmake/wsjtx +# DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/wsjtx # ) # install (EXPORT udp-static NAMESPACE wsjtx:: -# DESTINATION ${WSJT_LIB_DESTINATION}/cmake/wsjtx +# DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/wsjtx # ) install (TARGETS udp_daemon message_aggregator - RUNTIME DESTINATION ${WSJT_BIN_DESTINATION} COMPONENT runtime - BUNDLE DESTINATION ${WSJT_BIN_DESTINATION} COMPONENT runtime + RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR} COMPONENT runtime + BUNDLE DESTINATION ${CMAKE_INSTALL_BINDIR} COMPONENT runtime ) install (TARGETS jt9 jt65code qra64code qra64sim jt9code jt4code msk144code wsprd fmtave fcal fmeasure - RUNTIME DESTINATION ${WSJT_BIN_DESTINATION} COMPONENT runtime - BUNDLE DESTINATION ${WSJT_BIN_DESTINATION} COMPONENT runtime + RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR} COMPONENT runtime + BUNDLE DESTINATION ${CMAKE_INSTALL_BINDIR} COMPONENT runtime ) install (PROGRAMS ${RIGCTL_EXE} - DESTINATION ${WSJT_BIN_DESTINATION} + DESTINATION ${CMAKE_INSTALL_BINDIR} #COMPONENT runtime RENAME rigctl-wsjtx${CMAKE_EXECUTABLE_SUFFIX} ) install (PROGRAMS ${RIGCTLD_EXE} - DESTINATION ${WSJT_BIN_DESTINATION} + DESTINATION ${CMAKE_INSTALL_BINDIR} #COMPONENT runtime RENAME rigctld-wsjtx${CMAKE_EXECUTABLE_SUFFIX} ) @@ -1290,13 +1275,13 @@ install (FILES NEWS INSTALL BUGS - DESTINATION ${WSJT_SHARE_DESTINATION}/${WSJT_DOC_DESTINATION} + DESTINATION ${CMAKE_INSTALL_DOCDIR} #COMPONENT runtime ) install (FILES contrib/Ephemeris/JPLEPH - DESTINATION ${WSJT_SHARE_DESTINATION}/${WSJT_DATA_DESTINATION} + DESTINATION ${CMAKE_INSTALL_DATADIR}/${CMAKE_PROJECT_NAME} #COMPONENT runtime ) @@ -1395,7 +1380,7 @@ if (NOT is_debug_build) ) # if a system Qt is used (e.g. installed in /usr/lib/), it will not be included in the installation - set (fixup_exe "\$ENV{DESTDIR}\${CMAKE_INSTALL_PREFIX}/${WSJT_BIN_DESTINATION}/${CMAKE_PROJECT_NAME}${CMAKE_EXECUTABLE_SUFFIX}") + set (fixup_exe "\$ENV{DESTDIR}\${CMAKE_INSTALL_PREFIX}/${CMAKE_INSTALL_BINDIR}/${CMAKE_PROJECT_NAME}${CMAKE_EXECUTABLE_SUFFIX}") #get_filename_component (hamlib_lib_dir ${hamlib_LIBRARIES} PATH) diff --git a/Configuration.cpp b/Configuration.cpp index 0e2da3604..20c40bcb0 100644 --- a/Configuration.cpp +++ b/Configuration.cpp @@ -731,14 +731,48 @@ void Configuration::sync_transceiver (bool force_signal, bool enforce_mode_and_s } } +namespace +{ +#if defined (Q_OS_MAC) + char const * app_root = "/../../../"; +#else + char const * app_root = "/../"; +#endif + QString doc_path () + { +#if CMAKE_BUILD + if (QDir::isRelativePath (CMAKE_INSTALL_DOCDIR)) + { + return QApplication::applicationDirPath () + app_root + CMAKE_INSTALL_DOCDIR; + } + return CMAKE_INSTALL_DOCDIR; +#else + return QApplication::applicationDirPath (); +#endif + } + + QString data_path () + { +#if CMAKE_BUILD + if (QDir::isRelativePath (CMAKE_INSTALL_DATADIR)) + { + return QApplication::applicationDirPath () + app_root + CMAKE_INSTALL_DATADIR + QChar {'/'} + CMAKE_PROJECT_NAME; + } + return CMAKE_INSTALL_DATADIR; +#else + return QApplication::applicationDirPath (); +#endif + } +} + Configuration::impl::impl (Configuration * self, QDir const& temp_directory, QSettings * settings, QWidget * parent) : QDialog {parent} , self_ {self} , ui_ {new Ui::configuration_dialog} , settings_ {settings} - , doc_dir_ {QApplication::applicationDirPath ()} - , data_dir_ {QApplication::applicationDirPath ()} + , doc_dir_ {doc_path ()} + , data_dir_ {data_path ()} , temp_dir_ {temp_directory} , frequencies_ {&bands_} , next_frequencies_ {&bands_} @@ -763,63 +797,20 @@ Configuration::impl::impl (Configuration * self, QDir const& temp_directory, ui_->setupUi (this); // ui_->groupBox_6->setVisible(false); //### Temporary ??? ### -#if !defined (CMAKE_BUILD) -#define WSJT_SHARE_DESTINATION "." -#define WSJT_DOC_DESTINATION "." -#define WSJT_DATA_DESTINATION "." -#endif - -#if !defined (Q_OS_WIN) || QT_VERSION >= 0x050300 - auto doc_path = QStandardPaths::locate (QStandardPaths::DataLocation, WSJT_DOC_DESTINATION, QStandardPaths::LocateDirectory); - if (doc_path.isEmpty ()) - { - doc_dir_.cdUp (); -#if defined (Q_OS_MAC) - doc_dir_.cdUp (); - doc_dir_.cdUp (); -#endif - doc_dir_.cd (WSJT_SHARE_DESTINATION); - doc_dir_.cd (WSJT_DOC_DESTINATION); - } - else - { - doc_dir_.cd (doc_path); - } - - auto data_path = QStandardPaths::locate (QStandardPaths::DataLocation, WSJT_DATA_DESTINATION, QStandardPaths::LocateDirectory); - if (data_path.isEmpty ()) - { - data_dir_.cdUp (); -#if defined (Q_OS_MAC) - data_dir_.cdUp (); - data_dir_.cdUp (); -#endif - data_dir_.cd (WSJT_SHARE_DESTINATION); - data_dir_.cd (WSJT_DATA_DESTINATION); - } - else - { - data_dir_.cd (data_path); - } -#else - doc_dir_.cd (WSJT_DOC_DESTINATION); - data_dir_.cd (WSJT_DATA_DESTINATION); -#endif - { // Find a suitable data file location - QDir data_dir {QStandardPaths::writableLocation (QStandardPaths::DataLocation)}; - if (!data_dir.mkpath (".")) + QDir writeable_data_dir {QStandardPaths::writableLocation (QStandardPaths::DataLocation)}; + if (!writeable_data_dir.mkpath (".")) { MessageBox::critical_message (this, tr ("Failed to create data directory"), - tr ("path: \"%1\"").arg (data_dir.absolutePath ())); + tr ("path: \"%1\"").arg (writeable_data_dir.absolutePath ())); throw std::runtime_error {"Failed to create data directory"}; } // Make sure the default save directory exists QString save_dir {"save"}; - default_save_directory_ = data_dir; - default_azel_directory_ = data_dir; + default_save_directory_ = writeable_data_dir; + default_azel_directory_ = writeable_data_dir; if (!default_save_directory_.mkpath (save_dir) || !default_save_directory_.cd (save_dir)) { MessageBox::critical_message (this, tr ("Failed to create save directory"), diff --git a/debian/CMakeLists.txt b/debian/CMakeLists.txt index 8a2727356..27656d7fc 100644 --- a/debian/CMakeLists.txt +++ b/debian/CMakeLists.txt @@ -34,6 +34,6 @@ configure_file ( install (FILES ${CMAKE_CURRENT_BINARY_DIR}/${deb_changelog}.gz ${CMAKE_CURRENT_BINARY_DIR}/copyright - DESTINATION ${WSJT_SHARE_DESTINATION}/${WSJT_DOC_DESTINATION} + DESTINATION ${CMAKE_INSTALL_DOCDIR} #COMPONENT Debian ) diff --git a/doc/CMakeLists.txt b/doc/CMakeLists.txt index df30d521b..8ff95f14f 100644 --- a/doc/CMakeLists.txt +++ b/doc/CMakeLists.txt @@ -223,7 +223,7 @@ foreach (_html ${htmls}) string (REGEX REPLACE "_en$" "" _nwe ${_nwe}) install (FILES ${_html} - DESTINATION ${WSJT_SHARE_DESTINATION}/${WSJT_DOC_DESTINATION} + DESTINATION ${CMAKE_INSTALL_DOCDIR} RENAME ${_nwe}-${wsjtx_VERSION}${_ext} #COMPONENT runtime ) diff --git a/manpages/CMakeLists.txt b/manpages/CMakeLists.txt index 7b2a3ed93..f5ed53fba 100644 --- a/manpages/CMakeLists.txt +++ b/manpages/CMakeLists.txt @@ -75,8 +75,8 @@ if (A2X_EXECUTABLE AND GZIP_EXECUTABLE AND SED_EXECUTABLE) endforeach () install ( - DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/man - DESTINATION ${WSJT_MANPAGE_DESTINATION} + DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/man/ + DESTINATION ${CMAKE_INSTALL_MANDIR} PATTERN "*.orig" EXCLUDE #COMPONENT Runtime ) diff --git a/wsjtx_config.h.in b/wsjtx_config.h.in index 4abdbba01..dd30a4abb 100644 --- a/wsjtx_config.h.in +++ b/wsjtx_config.h.in @@ -5,15 +5,10 @@ #define WSJTX_VERSION_MINOR @WSJTX_VERSION_MINOR@ #define WSJTX_VERSION_PATCH @WSJTX_VERSION_PATCH@ -#define CONFIG_TEST_VERSION_MAJOR @CONFIG_TEST_VERSION_MAJOR@ -#define CONFIG_TEST_VERSION_MINOR @CONFIG_TEST_VERSION_MINOR@ -#define CONFIG_TEST_VERSION_PATCH @CONFIG_TEST_VERSION_PATCH@ - -#cmakedefine WSJT_BIN_DESTINATION "@WSJT_BIN_DESTINATION@" -#cmakedefine WSJT_SHARE_DESTINATION "@WSJT_SHARE_DESTINATION@" -#cmakedefine WSJT_LIB_DESTINATION "@WSJT_LIB_DESTINATION@" -#cmakedefine WSJT_DOC_DESTINATION "@WSJT_DOC_DESTINATION@" -#cmakedefine WSJT_DATA_DESTINATION "@WSJT_DATA_DESTINATION@" +#cmakedefine CMAKE_INSTALL_DATAROOTDIR "@CMAKE_INSTALL_DATAROOTDIR@" +#cmakedefine CMAKE_INSTALL_DOCDIR "@CMAKE_INSTALL_DOCDIR@" +#cmakedefine CMAKE_INSTALL_DATADIR "@CMAKE_INSTALL_DATADIR@" +#cmakedefine CMAKE_PROJECT_NAME "@CMAKE_PROJECT_NAME@" #cmakedefine PROJECT_MANUAL "@PROJECT_MANUAL@" #cmakedefine PROJECT_HOMEPAGE "@PROJECT_HOMEPAGE@" #cmakedefine PROJECT_MANUAL_DIRECTORY_URL "@PROJECT_MANUAL_DIRECTORY_URL@"