From b4ba75c719657ec7bd16e9b4f2addc58a102d077 Mon Sep 17 00:00:00 2001 From: Armin Novak Date: Wed, 8 Oct 2025 08:45:56 +0200 Subject: [PATCH 1/4] FreeStandingSingleApplication improvements * Allow building as shared library * Fix missing GNUInstallDirs (for CMAKE_INSTALL_INCLUDEDIR) --- CMakeLists.txt | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 092e5fc..4cbd48b 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -2,9 +2,10 @@ cmake_minimum_required(VERSION 3.12.0) project(SingleApplication VERSION 3.6.0 LANGUAGES CXX DESCRIPTION "Replacement for QtSingleApplication") +option(BUILD_SHARED_LIBS "Build shared libraries" OFF) set(CMAKE_AUTOMOC ON) -add_library(${PROJECT_NAME} STATIC +add_library(${PROJECT_NAME} singleapplication.cpp singleapplication_p.cpp ) @@ -98,6 +99,8 @@ if(DOXYGEN_FOUND) endif() if(SINGLEAPPLICATION_INSTALL) + include(GNUInstallDirs) + # Create a header veriant where QAPPLICATION_CLASS is replaced with FreeStandingSingleApplication file(READ "${CMAKE_CURRENT_SOURCE_DIR}/singleapplication.h" SINGLEAPPLICATION_H_CONTENT) From e2705aef314a9069af71eab4b7b516322fc78042 Mon Sep 17 00:00:00 2001 From: Armin Novak Date: Wed, 8 Oct 2025 11:54:12 +0200 Subject: [PATCH 2/4] Use CMAKE_INSTALL_LIBDIR for cmake files --- CMakeLists.txt | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 4cbd48b..465f07a 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -138,13 +138,13 @@ if(SINGLEAPPLICATION_INSTALL) install(FILES "${CMAKE_CURRENT_BINARY_DIR}/SingleApplicationConfig.cmake" "${CMAKE_CURRENT_BINARY_DIR}/SingleApplicationConfigVersion.cmake" - DESTINATION "lib/cmake/SingleApplication") + DESTINATION "${CMAKE_INSTALL_LIBDIR}/cmake/SingleApplication") install(TARGETS SingleApplication EXPORT SingleApplicationTargets) install(EXPORT SingleApplicationTargets FILE "SingleApplicationTargets.cmake" NAMESPACE "SingleApplication::" - DESTINATION "lib/cmake/SingleApplication") + DESTINATION "${CMAKE_INSTALL_LIBDIR}/cmake/SingleApplication") else() add_library(${PROJECT_NAME}::${PROJECT_NAME} ALIAS ${PROJECT_NAME}) endif() From 80daba1fd41f22b1b3c51d9d2eeaf1aff0f641f7 Mon Sep 17 00:00:00 2001 From: Armin Novak Date: Wed, 8 Oct 2025 12:55:40 +0200 Subject: [PATCH 3/4] install: add SOVERSION --- CMakeLists.txt | 1 + 1 file changed, 1 insertion(+) diff --git a/CMakeLists.txt b/CMakeLists.txt index 465f07a..314ddf7 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -9,6 +9,7 @@ add_library(${PROJECT_NAME} singleapplication.cpp singleapplication_p.cpp ) +set_target_properties(${PROJECT_NAME} PROPERTIES VERSION ${PROJECT_VERSION} SOVERSION ${PROJECT_VERSION_MAJOR}) # User configurable options if(NOT QT_DEFAULT_MAJOR_VERSION) From be6dd2b5f44efefcc8ebbc10c929deb724882865 Mon Sep 17 00:00:00 2001 From: akallabeth Date: Fri, 10 Oct 2025 11:58:37 +0200 Subject: [PATCH 4/4] add-export-header --- CMakeLists.txt | 11 +++++++++-- singleapplication.h | 6 ++++-- 2 files changed, 13 insertions(+), 4 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 314ddf7..53b2f88 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -4,6 +4,7 @@ project(SingleApplication VERSION 3.6.0 LANGUAGES CXX DESCRIPTION "Replacement f option(BUILD_SHARED_LIBS "Build shared libraries" OFF) set(CMAKE_AUTOMOC ON) +set(CMAKE_INCLUDE_CURRENT_DIR ON) add_library(${PROJECT_NAME} singleapplication.cpp @@ -11,6 +12,9 @@ add_library(${PROJECT_NAME} ) set_target_properties(${PROJECT_NAME} PROPERTIES VERSION ${PROJECT_VERSION} SOVERSION ${PROJECT_VERSION_MAJOR}) +include(GenerateExportHeader) +generate_export_header(${PROJECT_NAME}) + # User configurable options if(NOT QT_DEFAULT_MAJOR_VERSION) set(QT_DEFAULT_MAJOR_VERSION 5 CACHE STRING "Qt version to use (5 or 6), defaults to 5") @@ -126,7 +130,9 @@ if(SINGLEAPPLICATION_INSTALL) file(WRITE "${CMAKE_CURRENT_BINARY_DIR}/singleapplication.h" "${SINGLEAPPLICATION_H_CONTENT}") # CMake install - install(FILES "${CMAKE_CURRENT_BINARY_DIR}/singleapplication.h" "SingleApplication" "FreeStandingSingleApplication" + install(FILES "${CMAKE_CURRENT_BINARY_DIR}/singleapplication.h" + "${CMAKE_CURRENT_BINARY_DIR}/singleapplication_export.h" + "SingleApplication" "FreeStandingSingleApplication" DESTINATION "${CMAKE_INSTALL_INCLUDEDIR}") include(CMakePackageConfigHelpers) @@ -141,7 +147,8 @@ if(SINGLEAPPLICATION_INSTALL) "${CMAKE_CURRENT_BINARY_DIR}/SingleApplicationConfigVersion.cmake" DESTINATION "${CMAKE_INSTALL_LIBDIR}/cmake/SingleApplication") - install(TARGETS SingleApplication EXPORT SingleApplicationTargets) + install(TARGETS SingleApplication + EXPORT SingleApplicationTargets) install(EXPORT SingleApplicationTargets FILE "SingleApplicationTargets.cmake" NAMESPACE "SingleApplication::" diff --git a/singleapplication.h b/singleapplication.h index 17e3b25..a2772dd 100644 --- a/singleapplication.h +++ b/singleapplication.h @@ -24,6 +24,8 @@ #ifndef SINGLE_APPLICATION_H #define SINGLE_APPLICATION_H +#include "singleapplication_export.h" + #include #include @@ -40,7 +42,7 @@ class SingleApplicationPrivate; * Application * @see QCoreApplication */ -class SingleApplication : public QAPPLICATION_CLASS +class SINGLEAPPLICATION_EXPORT SingleApplication : public QAPPLICATION_CLASS { Q_OBJECT @@ -181,6 +183,6 @@ class SingleApplication : public QAPPLICATION_CLASS void abortSafely(); }; -Q_DECLARE_OPERATORS_FOR_FLAGS(SingleApplication::Options) +SINGLEAPPLICATION_EXPORT Q_DECLARE_OPERATORS_FOR_FLAGS(SingleApplication::Options) #endif // SINGLE_APPLICATION_H