Skip to content
This repository was archived by the owner on Mar 20, 2025. It is now read-only.

Commit bd781c0

Browse files
committed
cmake: Use generate_export_header() instead of doing manually
This is going to make it easier for us to maintain things. It's also consistent with the new QXmppOmemo module. This requires CMake 3.7 now. Closes #523.
1 parent 6fcc144 commit bd781c0

File tree

6 files changed

+48
-26
lines changed

6 files changed

+48
-26
lines changed

CMakeLists.txt

+1-1
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
#
33
# SPDX-License-Identifier: CC0-1.0
44

5-
cmake_minimum_required(VERSION 3.3)
5+
cmake_minimum_required(VERSION 3.7)
66
project(qxmpp VERSION 1.5.0)
77

88
set(SO_VERSION 4)

examples/CMakeLists.txt

+1-1
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ endmacro()
1010
include_directories(${PROJECT_SOURCE_DIR}/src/base)
1111
include_directories(${PROJECT_SOURCE_DIR}/src/client)
1212
include_directories(${PROJECT_SOURCE_DIR}/src/server)
13-
include_directories(${PROJECT_BINARY_DIR}/src/base)
13+
include_directories(${PROJECT_BINARY_DIR}/src)
1414

1515
add_simple_example(0_connected)
1616
add_simple_example(1_echoClient)

src/CMakeLists.txt

+22-12
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,8 @@
22
#
33
# SPDX-License-Identifier: CC0-1.0
44

5+
include(GenerateExportHeader)
6+
57
option(BUILD_SHARED "Build SHARED library" ON)
68

79
add_definitions(-DQXMPP_BUILD)
@@ -10,18 +12,7 @@ include_directories(${CMAKE_CURRENT_SOURCE_DIR}/base)
1012
include_directories(${CMAKE_CURRENT_SOURCE_DIR}/client)
1113
include_directories(${CMAKE_CURRENT_SOURCE_DIR}/server)
1214

13-
# Configure QXmppBuildConstants.h.in
14-
if(BUILD_SHARED)
15-
set(QXMPP_BUILD_SHARED true)
16-
else()
17-
set(QXMPP_BUILD_SHARED false)
18-
endif()
19-
configure_file(${CMAKE_CURRENT_SOURCE_DIR}/base/QXmppBuildConstants.h.in ${CMAKE_CURRENT_BINARY_DIR}/base/QXmppBuildConstants.h @ONLY)
20-
include_directories(${CMAKE_CURRENT_BINARY_DIR}/base)
21-
2215
set(INSTALL_HEADER_FILES
23-
${CMAKE_CURRENT_BINARY_DIR}/base/QXmppBuildConstants.h
24-
2516
# Base
2617
base/QXmppArchiveIq.h
2718
base/QXmppBindIq.h
@@ -317,6 +308,23 @@ set_target_properties(qxmpp PROPERTIES
317308
EXPORT_NAME QXmpp
318309
)
319310

311+
if(BUILD_SHARED)
312+
set(QXMPP_BUILD_SHARED true)
313+
else()
314+
set(QXMPP_BUILD_SHARED false)
315+
endif()
316+
317+
set(QXMPP_CUSTOM_EXPORT_CONTENT "
318+
#define QXMPP_BUILD_SHARED ${QXMPP_BUILD_SHARED}
319+
#define QXMPP_VERSION_MAJOR ${PROJECT_VERSION_MAJOR}
320+
#define QXMPP_VERSION_MINOR ${PROJECT_VERSION_MINOR}
321+
#define QXMPP_VERSION_PATCH ${PROJECT_VERSION_PATCH}
322+
")
323+
324+
generate_export_header(qxmpp
325+
CUSTOM_CONTENT_FROM_VARIABLE QXMPP_CUSTOM_EXPORT_CONTENT
326+
)
327+
320328
target_include_directories(qxmpp
321329
PUBLIC
322330
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/base>
@@ -327,6 +335,8 @@ target_include_directories(qxmpp
327335
${GLIB2_INCLUDE_DIR}
328336
${GOBJECT_INCLUDE_DIR}
329337
${GSTREAMER_INCLUDE_DIRS}
338+
PRIVATE
339+
${CMAKE_CURRENT_BINARY_DIR}
330340
)
331341

332342
target_link_libraries(qxmpp
@@ -372,7 +382,7 @@ export(
372382
)
373383

374384
install(
375-
FILES ${INSTALL_HEADER_FILES}
385+
FILES ${INSTALL_HEADER_FILES} ${CMAKE_CURRENT_BINARY_DIR}/qxmpp_export.h
376386
DESTINATION "${CMAKE_INSTALL_INCLUDEDIR}/qxmpp"
377387
)
378388

src/base/QXmppGlobal.h

+22-10
Original file line numberDiff line numberDiff line change
@@ -8,20 +8,32 @@
88
#ifndef QXMPPGLOBAL_H
99
#define QXMPPGLOBAL_H
1010

11-
#include "QXmppBuildConstants.h"
11+
#include "qxmpp_export.h"
1212

13-
#if QXMPP_BUILD_SHARED
14-
#if defined(QXMPP_BUILD)
15-
#define QXMPP_EXPORT Q_DECL_EXPORT
16-
#else
17-
#define QXMPP_EXPORT Q_DECL_IMPORT
18-
#endif
19-
#else
20-
#define QXMPP_EXPORT
21-
#endif
13+
#include <QString>
2214

2315
#define QXMPP_AUTOTEST_EXPORT
2416

17+
///
18+
/// This macro expands a numeric value of the form 0xMMNNPP (MM =
19+
/// major, NN = minor, PP = patch) that specifies QXmpp's version
20+
/// number. For example, if you compile your application against
21+
/// QXmpp 1.2.3, the QXMPP_VERSION macro will expand to 0x010203.
22+
///
23+
/// You can use QXMPP_VERSION to use the latest QXmpp features where
24+
/// available.
25+
///
26+
#define QXMPP_VERSION QT_VERSION_CHECK(QXMPP_VERSION_MAJOR, QXMPP_VERSION_MINOR, QXMPP_VERSION_PATCH)
27+
28+
///
29+
/// Returns the version of QXmpp used at compile time as a string.
30+
///
31+
inline QLatin1String QXmppVersion()
32+
{
33+
return QLatin1String(
34+
QT_STRINGIFY(QXMPP_VERSION_MAJOR) "." QT_STRINGIFY(QXMPP_VERSION_MINOR) "." QT_STRINGIFY(QXMPP_VERSION_PATCH));
35+
}
36+
2537
// This sets which deprecated functions should still be usable
2638
// It works exactly like QT_DISABLE_DEPRECATED_BEFORE
2739
#ifndef QXMPP_DISABLE_DEPRECATED_BEFORE

src/omemo/CMakeLists.txt

+1-1
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,6 @@
33
# SPDX-License-Identifier: CC0-1.0
44

55
include(CMakePackageConfigHelpers)
6-
include(GenerateExportHeader)
76

87
set(OMEMO_CMAKE_DIR "${CMAKE_INSTALL_LIBDIR}/cmake/QXmppOmemo")
98
set(OMEMO_HEADER_DIR "${CMAKE_INSTALL_FULL_INCLUDEDIR}/qxmpp/omemo")
@@ -37,6 +36,7 @@ target_include_directories(QXmppOmemo
3736
PRIVATE
3837
${CMAKE_CURRENT_LIST_DIR}
3938
${CMAKE_CURRENT_BINARY_DIR}
39+
${PROJECT_BINARY_DIR}/src
4040
)
4141

4242
generate_export_header(QXmppOmemo)

tests/CMakeLists.txt

+1-1
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ include_directories(${PROJECT_SOURCE_DIR}/src/base)
1919
include_directories(${PROJECT_SOURCE_DIR}/src/client)
2020
include_directories(${PROJECT_SOURCE_DIR}/src/omemo)
2121
include_directories(${PROJECT_SOURCE_DIR}/src/server)
22-
include_directories(${PROJECT_BINARY_DIR}/src/base)
22+
include_directories(${PROJECT_BINARY_DIR}/src)
2323
include_directories(${PROJECT_BINARY_DIR}/src/omemo)
2424
include_directories(${CMAKE_CURRENT_BINARY_DIR})
2525

0 commit comments

Comments
 (0)