diff options
Diffstat (limited to 'CMakeLists.txt')
-rw-r--r-- | CMakeLists.txt | 141 |
1 files changed, 100 insertions, 41 deletions
diff --git a/CMakeLists.txt b/CMakeLists.txt index 5e5b191e..29171e7e 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -3,9 +3,10 @@ cmake_minimum_required(VERSION 3.1) project(qmatrixclient CXX) include(CheckCXXCompilerFlag) +if (NOT WIN32) + include(GNUInstallDirs) +endif(NOT WIN32) -# Find includes in corresponding build directories -set(CMAKE_INCLUDE_CURRENT_DIR ON) # Instruct CMake to run moc automatically when needed. set(CMAKE_AUTOMOC ON) @@ -18,6 +19,18 @@ if(NOT CMAKE_BUILD_TYPE AND NOT CMAKE_CONFIGURATION_TYPES) "MinSizeRel" "RelWithDebInfo") endif() +if (NOT CMAKE_INSTALL_LIBDIR) + set(CMAKE_INSTALL_LIBDIR ".") +endif() + +if (NOT CMAKE_INSTALL_BINDIR) + set(CMAKE_INSTALL_BINDIR ".") +endif() + +if (NOT CMAKE_INSTALL_INCLUDEDIR) + set(CMAKE_INSTALL_INCLUDEDIR "include") +endif() + set(CMAKE_CXX_STANDARD 14) foreach (FLAG all "" pedantic extra error=return-type no-unused-parameter no-gnu-zero-variadic-macro-arguments) @@ -27,7 +40,7 @@ foreach (FLAG all "" pedantic extra error=return-type no-unused-parameter no-gnu endif () endforeach () -find_package(Qt5 5.6 REQUIRED Network Gui) +find_package(Qt5 5.5.1 REQUIRED Network Gui) get_filename_component(Qt5_Prefix "${Qt5_DIR}/../../../.." ABSOLUTE) message( STATUS ) @@ -49,33 +62,33 @@ message( STATUS ) # Set up source files set(libqmatrixclient_SRCS - networkaccessmanager.cpp - connectiondata.cpp - connection.cpp - logging.cpp - room.cpp - user.cpp - avatar.cpp - settings.cpp - networksettings.cpp - events/event.cpp - events/eventcontent.cpp - events/roommessageevent.cpp - events/roommemberevent.cpp - events/roomavatarevent.cpp - events/typingevent.cpp - events/receiptevent.cpp - events/directchatevent.cpp - jobs/requestdata.cpp - jobs/basejob.cpp - jobs/checkauthmethods.cpp - jobs/sendeventjob.cpp - jobs/setroomstatejob.cpp - jobs/joinroomjob.cpp - jobs/roommessagesjob.cpp - jobs/syncjob.cpp - jobs/mediathumbnailjob.cpp - jobs/downloadfilejob.cpp + lib/networkaccessmanager.cpp + lib/connectiondata.cpp + lib/connection.cpp + lib/logging.cpp + lib/room.cpp + lib/user.cpp + lib/avatar.cpp + lib/settings.cpp + lib/networksettings.cpp + lib/events/event.cpp + lib/events/eventcontent.cpp + lib/events/roommessageevent.cpp + lib/events/roommemberevent.cpp + lib/events/roomavatarevent.cpp + lib/events/typingevent.cpp + lib/events/receiptevent.cpp + lib/events/directchatevent.cpp + lib/jobs/requestdata.cpp + lib/jobs/basejob.cpp + lib/jobs/checkauthmethods.cpp + lib/jobs/sendeventjob.cpp + lib/jobs/setroomstatejob.cpp + lib/jobs/joinroomjob.cpp + lib/jobs/roommessagesjob.cpp + lib/jobs/syncjob.cpp + lib/jobs/mediathumbnailjob.cpp + lib/jobs/downloadfilejob.cpp ) set(API_DEF_PATH ${MATRIX_DOC_PATH}/api/client-server/) @@ -95,27 +108,73 @@ if (MATRIX_DOC_PATH AND GTAD_PATH) notifications.yaml- peeking_events.yaml- pushrules.yaml- rooms.yaml- search.yaml- WORKING_DIRECTORY ${PROJECT_SOURCE_DIR} - SOURCES jobs/gtad.yaml - jobs/{{base}}.h.mustache jobs/{{base}}.cpp.mustache + SOURCES lib/jobs/gtad.yaml + lib/jobs/{{base}}.h.mustache lib/jobs/{{base}}.cpp.mustache ${API_DEFS} VERBATIM ) endif() -aux_source_directory(jobs/generated libqmatrixclient_job_SRCS) +aux_source_directory(lib/jobs/generated libqmatrixclient_job_SRCS) set(example_SRCS examples/qmc-example.cpp) -add_library(qmatrixclient ${libqmatrixclient_SRCS} ${libqmatrixclient_job_SRCS}) -set_property(TARGET qmatrixclient PROPERTY VERSION "0.2.0") -set_property(TARGET qmatrixclient PROPERTY SOVERSION 0 ) - -target_link_libraries(qmatrixclient Qt5::Core Qt5::Network Qt5::Gui) +add_library(QMatrixClient ${libqmatrixclient_SRCS} ${libqmatrixclient_job_SRCS}) +set(API_VERSION "0.2") +set_property(TARGET QMatrixClient PROPERTY VERSION "${API_VERSION}.0") +set_property(TARGET QMatrixClient PROPERTY SOVERSION 0 ) +set_property(TARGET QMatrixClient PROPERTY + INTERFACE_QMatrixClient_MAJOR_VERSION ${API_VERSION}) +set_property(TARGET QMatrixClient APPEND PROPERTY + COMPATIBLE_INTERFACE_STRING QMatrixClient_MAJOR_VERSION) + +target_include_directories(QMatrixClient PUBLIC + $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/lib> + $<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}> +) +target_link_libraries(QMatrixClient Qt5::Core Qt5::Network Qt5::Gui) add_executable(qmc-example ${example_SRCS}) -target_link_libraries(qmc-example Qt5::Core qmatrixclient) +target_link_libraries(qmc-example Qt5::Core QMatrixClient) + +# Installation + +install(TARGETS QMatrixClient EXPORT QMatrixClientTargets + ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR} + LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} + INCLUDES DESTINATION ${CMAKE_INSTALL_INCLUDEDIR} +) +install(DIRECTORY lib/ DESTINATION ${CMAKE_INSTALL_INCLUDEDIR} + FILES_MATCHING PATTERN "*.h") + +include(CMakePackageConfigHelpers) +write_basic_package_version_file( + "${CMAKE_CURRENT_BINARY_DIR}/QMatrixClient/QMatrixClientConfigVersion.cmake" + VERSION ${API_VERSION} + COMPATIBILITY AnyNewerVersion +) + +export(PACKAGE QMatrixClient) +export(EXPORT QMatrixClientTargets + FILE "${CMAKE_CURRENT_BINARY_DIR}/QMatrixClient/QMatrixClientTargets.cmake") +configure_file(cmake/QMatrixClientConfig.cmake + "${CMAKE_CURRENT_BINARY_DIR}/QMatrixClient/QMatrixClientConfig.cmake" + COPYONLY +) + +set(ConfigFilesLocation "${CMAKE_INSTALL_LIBDIR}/cmake/QMatrixClient") +install(EXPORT QMatrixClientTargets + FILE QMatrixClientTargets.cmake DESTINATION ${ConfigFilesLocation}) + +install(FILES cmake/QMatrixClientConfig.cmake + "${CMAKE_CURRENT_BINARY_DIR}/QMatrixClient/QMatrixClientConfigVersion.cmake" + DESTINATION ${ConfigFilesLocation} +) +# Only available from CMake 3.7; reserved for future use +#install(EXPORT_ANDROID_MK QMatrixClientTargets DESTINATION share/ndk-modules) if (WIN32) - install (FILES mime/packages/freedesktop.org.xml - DESTINATION mime/packages) + install(FILES mime/packages/freedesktop.org.xml DESTINATION mime/packages) endif (WIN32) + +install(TARGETS qmc-example RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}) |