From 813ad9093f7d7d7a37af255bbe676b9988502b60 Mon Sep 17 00:00:00 2001 From: Robert Tari Date: Fri, 15 Oct 2021 00:28:09 +0200 Subject: Add CMake files --- CMakeLists.txt | 97 +++++++++++++++++ cmake/FindGObjectIntrospection.cmake | 61 +++++++++++ cmake/FindVala.cmake | 57 ++++++++++ cmake/GdbusCodegen.cmake | 36 ++++++ data/CMakeLists.txt | 40 +++++++ doc/CMakeLists.txt | 1 + doc/reference/CMakeLists.txt | 206 +++++++++++++++++++++++++++++++++++ libmessaging-menu/CMakeLists.txt | 106 ++++++++++++++++++ po/CMakeLists.txt | 2 + src/CMakeLists.txt | 50 +++++++++ tests/CMakeLists.txt | 78 +++++++++++++ 11 files changed, 734 insertions(+) create mode 100644 CMakeLists.txt create mode 100644 cmake/FindGObjectIntrospection.cmake create mode 100644 cmake/FindVala.cmake create mode 100644 cmake/GdbusCodegen.cmake create mode 100644 data/CMakeLists.txt create mode 100644 doc/CMakeLists.txt create mode 100644 doc/reference/CMakeLists.txt create mode 100644 libmessaging-menu/CMakeLists.txt create mode 100644 po/CMakeLists.txt create mode 100644 src/CMakeLists.txt create mode 100644 tests/CMakeLists.txt diff --git a/CMakeLists.txt b/CMakeLists.txt new file mode 100644 index 0000000..1e73a3b --- /dev/null +++ b/CMakeLists.txt @@ -0,0 +1,97 @@ +project(ayatana-indicator-messages C CXX) +cmake_minimum_required(VERSION 3.13) +list(APPEND CMAKE_MODULE_PATH ${CMAKE_SOURCE_DIR}/cmake) + +# Globals + +set(PROJECT_VERSION "0.9.0") +set(PACKAGE ${CMAKE_PROJECT_NAME}) +set(GETTEXT_PACKAGE ${CMAKE_PROJECT_NAME}) + +if(CMAKE_INSTALL_PREFIX_INITIALIZED_TO_DEFAULT) + SET(CMAKE_INSTALL_PREFIX "/usr" CACHE PATH "..." FORCE) +endif(CMAKE_INSTALL_PREFIX_INITIALIZED_TO_DEFAULT) + +if("${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang") + set(COMPILE_FLAGS "${COMPILE_FLAGS} -Weverything") + set(COMPILE_FLAGS "${COMPILE_FLAGS} -Wno-c++98-compat -Wno-padded") + set(COMPILE_FLAGS "${COMPILE_FLAGS} -Wno-documentation") +else() + set(COMPILE_FLAGS "${COMPILE_FLAGS} -Wall") +endif() + +# Options + +option(ENABLE_TESTS "Enable all tests and checks" OFF) +option(ENABLE_COVERAGE "Enable coverage reports (includes enabling all tests and checks)" OFF) +option(ENABLE_WERROR "Treat all build warnings as errors" OFF) + +if(ENABLE_COVERAGE) + set(ENABLE_TESTS ON) + set(CMAKE_BUILD_TYPE "Coverage") +else() + set(CMAKE_BUILD_TYPE "Release") +endif() + +if(ENABLE_WERROR) + set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Werror") + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Werror") +endif() + +# Check for prerequisites + +include (GNUInstallDirs) +find_package(PkgConfig REQUIRED) +include(FindPkgConfig) + +pkg_check_modules( + PROJECT_DEPS + REQUIRED + glib-2.0>=2.36 + gio-unix-2.0>=2.36 + accountsservice +) + +# Cppcheck + +add_custom_target( + cppcheck + COMMAND + cppcheck + --enable=all + -q + --error-exitcode=2 + --inline-suppr + ${CMAKE_SOURCE_DIR}/src + ${CMAKE_SOURCE_DIR}/tests +) + +# Build + +add_subdirectory(src) +add_subdirectory(libmessaging-menu) +add_subdirectory(data) +add_subdirectory(po) +add_subdirectory(doc) + +# Testing and coverage + +if (ENABLE_TESTS) + include(CTest) + enable_testing() + add_subdirectory(tests) + if (ENABLE_COVERAGE) + find_package(CoverageReport) + ENABLE_COVERAGE_REPORT( + TARGETS "messaging-menu" "indicator-messages-service" + TESTS ${COVERAGE_TEST_TARGETS} + FILTER /usr/include ${CMAKE_BINARY_DIR}/* + ) + endif () +endif () + +# Display config info + +message(STATUS "Install prefix: ${CMAKE_INSTALL_PREFIX}") +message(STATUS "Unit tests: ${ENABLE_TESTS}") +message(STATUS "Build with -Werror: ${ENABLE_WERROR}") diff --git a/cmake/FindGObjectIntrospection.cmake b/cmake/FindGObjectIntrospection.cmake new file mode 100644 index 0000000..2073c3c --- /dev/null +++ b/cmake/FindGObjectIntrospection.cmake @@ -0,0 +1,61 @@ +# - try to find gobject-introspection +# +# Once done this will define +# +# INTROSPECTION_FOUND - system has gobject-introspection +# INTROSPECTION_SCANNER - the gobject-introspection scanner, g-ir-scanner +# INTROSPECTION_COMPILER - the gobject-introspection compiler, g-ir-compiler +# INTROSPECTION_GENERATE - the gobject-introspection generate, g-ir-generate +# INTROSPECTION_GIRDIR +# INTROSPECTION_TYPELIBDIR +# INTROSPECTION_CFLAGS +# INTROSPECTION_LIBS +# +# Copyright (C) 2010, Pino Toscano, +# +# Redistribution and use is allowed according to the terms of the BSD license. +# For details see the accompanying COPYING-CMAKE-SCRIPTS file. + +macro(_GIR_GET_PKGCONFIG_VAR _outvar _varname) + execute_process( + COMMAND ${PKG_CONFIG_EXECUTABLE} --variable=${_varname} gobject-introspection-1.0 + OUTPUT_VARIABLE _result + RESULT_VARIABLE _null + ) + + if (_null) + else() + string(REGEX REPLACE "[\r\n]" " " _result "${_result}") + string(REGEX REPLACE " +$" "" _result "${_result}") + separate_arguments(_result) + set(${_outvar} ${_result} CACHE INTERNAL "") + endif() +endmacro(_GIR_GET_PKGCONFIG_VAR) + +find_package(PkgConfig) +if(PKG_CONFIG_FOUND) + if(PACKAGE_FIND_VERSION_COUNT GREATER 0) + set(_gir_version_cmp ">=${PACKAGE_FIND_VERSION}") + endif() + pkg_check_modules(_pc_gir gobject-introspection-1.0${_gir_version_cmp}) + if(_pc_gir_FOUND) + set(INTROSPECTION_FOUND TRUE) + _gir_get_pkgconfig_var(INTROSPECTION_SCANNER "g_ir_scanner") + _gir_get_pkgconfig_var(INTROSPECTION_COMPILER "g_ir_compiler") + _gir_get_pkgconfig_var(INTROSPECTION_GENERATE "g_ir_generate") + _gir_get_pkgconfig_var(INTROSPECTION_GIRDIR "girdir") + _gir_get_pkgconfig_var(INTROSPECTION_TYPELIBDIR "typelibdir") + set(INTROSPECTION_CFLAGS "${_pc_gir_CFLAGS}") + set(INTROSPECTION_LIBS "${_pc_gir_LIBS}") + endif() +endif() + +mark_as_advanced( + INTROSPECTION_SCANNER + INTROSPECTION_COMPILER + INTROSPECTION_GENERATE + INTROSPECTION_GIRDIR + INTROSPECTION_TYPELIBDIR + INTROSPECTION_CFLAGS + INTROSPECTION_LIBS +) diff --git a/cmake/FindVala.cmake b/cmake/FindVala.cmake new file mode 100644 index 0000000..a638735 --- /dev/null +++ b/cmake/FindVala.cmake @@ -0,0 +1,57 @@ +# - Find Vala +# This module looks for valac. +# This module defines the following values: +# VALA_FOUND +# VALA_COMPILER +# VALA_VERSION +# VAPI_GEN +# VAPI_GEN_VERSION + +#============================================================================= +# Copyright Přemysl Janouch 2011 +# All rights reserved. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions are met: +# * Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# * Redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in the +# documentation and/or other materials provided with the distribution. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ``AS IS'' +# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, +# THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +# PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS BE LIABLE +# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS +# OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) +# HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT +# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY +# OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY +# OF SUCH DAMAGE. +#============================================================================= + +find_program (VALA_COMPILER "valac") + +if (VALA_COMPILER) + execute_process (COMMAND ${VALA_COMPILER} --version + OUTPUT_VARIABLE VALA_VERSION) + string (REGEX MATCH "[.0-9]+" VALA_VERSION "${VALA_VERSION}") +endif (VALA_COMPILER) + +find_program (VAPI_GEN "vapigen") + +if (VAPI_GEN) + execute_process (COMMAND ${VAPI_GEN} --version + OUTPUT_VARIABLE VAPI_GEN_VERSION) + string (REGEX MATCH "[.0-9]+" VAPI_GEN_VERSION "${VAPI_GEN_VERSION}") +endif (VAPI_GEN) + +include (FindPackageHandleStandardArgs) +FIND_PACKAGE_HANDLE_STANDARD_ARGS (Vala + REQUIRED_VARS VALA_COMPILER + VERSION_VAR VALA_VERSION) + +mark_as_advanced (VALA_COMPILER VALA_VERSION VAPI_GEN) + diff --git a/cmake/GdbusCodegen.cmake b/cmake/GdbusCodegen.cmake new file mode 100644 index 0000000..5261ba8 --- /dev/null +++ b/cmake/GdbusCodegen.cmake @@ -0,0 +1,36 @@ +cmake_minimum_required(VERSION 3.13) +if(POLICY CMP0011) + cmake_policy(SET CMP0011 NEW) +endif(POLICY CMP0011) + +find_program(GDBUS_CODEGEN NAMES gdbus-codegen DOC "gdbus-codegen executable") +if(NOT GDBUS_CODEGEN) + message(FATAL_ERROR "Excutable gdbus-codegen not found") +endif() + +macro(add_gdbus_codegen outfiles name prefix service_xml) + add_custom_command( + OUTPUT "${CMAKE_CURRENT_BINARY_DIR}/${name}.h" "${CMAKE_CURRENT_BINARY_DIR}/${name}.c" + COMMAND "${GDBUS_CODEGEN}" + --interface-prefix "${prefix}" + --generate-c-code "${name}" + "${service_xml}" + WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR} + DEPENDS ${ARGN} "${service_xml}" + ) + list(APPEND ${outfiles} "${CMAKE_CURRENT_BINARY_DIR}/${name}.c") +endmacro(add_gdbus_codegen) + +macro(add_gdbus_codegen_with_namespace outfiles name prefix namespace service_xml) + add_custom_command( + OUTPUT "${CMAKE_CURRENT_BINARY_DIR}/${name}.h" "${CMAKE_CURRENT_BINARY_DIR}/${name}.c" + COMMAND "${GDBUS_CODEGEN}" + --interface-prefix "${prefix}" + --generate-c-code "${name}" + --c-namespace "${namespace}" + "${service_xml}" + WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR} + DEPENDS ${ARGN} "${service_xml}" + ) + list(APPEND ${outfiles} "${CMAKE_CURRENT_BINARY_DIR}/${name}.c") +endmacro(add_gdbus_codegen_with_namespace) diff --git a/data/CMakeLists.txt b/data/CMakeLists.txt new file mode 100644 index 0000000..03fba70 --- /dev/null +++ b/data/CMakeLists.txt @@ -0,0 +1,40 @@ +# org.ayatana.indicator.session.gschema.xml + +find_package(GSettings) +set(GSETTINGS_COMPILE ON) +add_schema("org.ayatana.indicator.messages.gschema.xml") + +# ayatana-indicator-messages.service + +pkg_check_modules(SYSTEMD systemd) + +if (${SYSTEMD_FOUND}) + pkg_get_variable(SYSTEMD_USER_DIR systemd systemduserunitdir) + set (pkglibexecdir "${CMAKE_INSTALL_FULL_LIBEXECDIR}/ayatana-indicator-messages")# Rewrite and drop once we've switched to CMake + configure_file("${CMAKE_CURRENT_SOURCE_DIR}/ayatana-indicator-messages.service.in" "${CMAKE_CURRENT_BINARY_DIR}/ayatana-indicator-messages.service") + install(FILES "${CMAKE_CURRENT_BINARY_DIR}/ayatana-indicator-messages.service" DESTINATION "${SYSTEMD_USER_DIR}") +endif() + +# ayatana-indicator-messages.desktop + +set(pkglibexecdir "${CMAKE_INSTALL_FULL_LIBEXECDIR}/ayatana-indicator-messages")# Rewrite and drop once we've switched to CMake +configure_file("${CMAKE_CURRENT_SOURCE_DIR}/ayatana-indicator-messages.desktop.in" "${CMAKE_CURRENT_BINARY_DIR}/ayatana-indicator-messages.desktop") +install(FILES "${CMAKE_CURRENT_BINARY_DIR}/ayatana-indicator-messages.desktop" DESTINATION "${CMAKE_INSTALL_FULL_SYSCONFDIR}/xdg/autostart") + +# org.ayatana.indicator.messages + +install(FILES "${CMAKE_CURRENT_SOURCE_DIR}/org.ayatana.indicator.messages" DESTINATION "${CMAKE_INSTALL_FULL_DATAROOTDIR}/ayatana/indicators") + +# icons/* + +install( + DIRECTORY + icons/16x16 + icons/22x22 + icons/24x24 + icons/32x32 + icons/48x48 + icons/scalable + DESTINATION "${CMAKE_INSTALL_FULL_DATADIR}/icons/hicolor" + FILES_MATCHING PATTERN "*.png" PATTERN "*.svg" +) diff --git a/doc/CMakeLists.txt b/doc/CMakeLists.txt new file mode 100644 index 0000000..90bb2b5 --- /dev/null +++ b/doc/CMakeLists.txt @@ -0,0 +1 @@ +add_subdirectory(reference) diff --git a/doc/reference/CMakeLists.txt b/doc/reference/CMakeLists.txt new file mode 100644 index 0000000..4688d41 --- /dev/null +++ b/doc/reference/CMakeLists.txt @@ -0,0 +1,206 @@ +# messaging-menu-docs.xml + +set(PACKAGE_VERSION ${PROJECT_VERSION})# Rewrite and drop once we've switched to CMake +configure_file("${CMAKE_CURRENT_SOURCE_DIR}/messaging-menu-docs.xml.in" "${CMAKE_CURRENT_BINARY_DIR}/messaging-menu-docs.xml" @ONLY) + +# messaging-menu-decl.txt +# messaging-menu-decl-list.txt +# messaging-menu-overrides.txt +# messaging-menu-sections.txt +# messaging-menu.types + +find_program(GTKDOC_SCAN gtkdoc-scan) + +add_custom_command( + OUTPUT "${CMAKE_CURRENT_BINARY_DIR}/messaging-menu-decl.txt" + OUTPUT "${CMAKE_CURRENT_BINARY_DIR}/messaging-menu-decl-list.txt" + OUTPUT "${CMAKE_CURRENT_BINARY_DIR}/messaging-menu-overrides.txt" + OUTPUT "${CMAKE_CURRENT_BINARY_DIR}/messaging-menu-sections.txt" + OUTPUT "${CMAKE_CURRENT_BINARY_DIR}/messaging-menu.types" + DEPENDS "messaging-menu" + WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR} + COMMAND + ${GTKDOC_SCAN} + --module=messaging-menu + --source-dir="${CMAKE_SOURCE_DIR}/libmessaging-menu" +) + +# scangobj.sh + +list(JOIN PROJECT_DEPS_INCLUDE_DIRS " -I" GTKDOC_SCANGOBJ_INCLUDE_DIRS) +list(JOIN PROJECT_DEPS_LIBRARIES " -l" GTKDOC_SCANGOBJ_LIBRARIES) +set_source_files_properties("${CMAKE_CURRENT_BINARY_DIR}/scangobj.sh" GENERATED) +file(WRITE "${CMAKE_CURRENT_BINARY_DIR}/scangobj.sh" "LD_LIBRARY_PATH=\"$LD_LIBRARY_PATH:${CMAKE_BINARY_DIR}/libmessaging-menu\" CFLAGS=\"-I${GTKDOC_SCANGOBJ_INCLUDE_DIRS}\" LDFLAGS=\"-l${GTKDOC_SCANGOBJ_LIBRARIES} -L${CMAKE_BINARY_DIR}/libmessaging-menu -lmessaging-menu\" gtkdoc-scangobj --module=messaging-menu") + +# messaging-menu.actions" +# messaging-menu.args" +# messaging-menu.hierarchy" +# messaging-menu.interfaces" +# messaging-menu.prerequisites" +# messaging-menu.signals" + +add_custom_command( + OUTPUT "${CMAKE_CURRENT_BINARY_DIR}/messaging-menu.actions" + OUTPUT "${CMAKE_CURRENT_BINARY_DIR}/messaging-menu.args" + OUTPUT "${CMAKE_CURRENT_BINARY_DIR}/messaging-menu.hierarchy" + OUTPUT "${CMAKE_CURRENT_BINARY_DIR}/messaging-menu.interfaces" + OUTPUT "${CMAKE_CURRENT_BINARY_DIR}/messaging-menu.prerequisites" + OUTPUT "${CMAKE_CURRENT_BINARY_DIR}/messaging-menu.signals" + DEPENDS "${CMAKE_CURRENT_BINARY_DIR}/messaging-menu-decl.txt" + DEPENDS "${CMAKE_CURRENT_BINARY_DIR}/messaging-menu-decl-list.txt" + DEPENDS "${CMAKE_CURRENT_BINARY_DIR}/messaging-menu-overrides.txt" + DEPENDS "${CMAKE_CURRENT_BINARY_DIR}/messaging-menu-sections.txt" + DEPENDS "${CMAKE_CURRENT_BINARY_DIR}/messaging-menu.types" + DEPENDS "${CMAKE_CURRENT_BINARY_DIR}/scangobj.sh" + WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR} + COMMAND sh scangobj.sh +) + +# messaging-menu-undeclared.txt +# messaging-menu-undocumented.txt +# messaging-menu-unused.txt +# sgml.stamp +# xml/annotation-glossary.xml +# xml/api-index-deprecated.xml +# xml/api-index-full.xml +# xml/messaging-menu-app.xml +# xml/messaging-menu-doc.bottom +# xml/messaging-menu-doc.top +# xml/messaging-menu-message.xml +# xml/object_index.sgml +# xml/tree_index.sgml + +find_program(GTKDOC_MKDB gtkdoc-mkdb) +list(JOIN PROJECT_DEPS_INCLUDE_DIRS ";-I" GTKDOC_SCANGOBJ_INCLUDE_DIRS) +list(JOIN PROJECT_DEPS_LIBRARIES ";-l" GTKDOC_SCANGOBJ_LIBRARIES) + +add_custom_command( + OUTPUT "${CMAKE_CURRENT_BINARY_DIR}/messaging-menu-undeclared.txt" + OUTPUT "${CMAKE_CURRENT_BINARY_DIR}/messaging-menu-undocumented.txt" + OUTPUT "${CMAKE_CURRENT_BINARY_DIR}/messaging-menu-unused.txt" + OUTPUT "${CMAKE_CURRENT_BINARY_DIR}/xml/annotation-glossary.xml" + OUTPUT "${CMAKE_CURRENT_BINARY_DIR}/xml/api-index-deprecated.xml" + OUTPUT "${CMAKE_CURRENT_BINARY_DIR}/xml/api-index-full.xml" + OUTPUT "${CMAKE_CURRENT_BINARY_DIR}/xml/messaging-menu-app.xml" + OUTPUT "${CMAKE_CURRENT_BINARY_DIR}/xml/messaging-menu-doc.bottom" + OUTPUT "${CMAKE_CURRENT_BINARY_DIR}/xml/messaging-menu-doc.top" + OUTPUT "${CMAKE_CURRENT_BINARY_DIR}/xml/xml/messaging-menu-message.xml" + OUTPUT "${CMAKE_CURRENT_BINARY_DIR}/xml/object_index.sgml" + OUTPUT "${CMAKE_CURRENT_BINARY_DIR}/xml/tree_index.sgml" + DEPENDS "${CMAKE_CURRENT_BINARY_DIR}/messaging-menu.actions" + DEPENDS "${CMAKE_CURRENT_BINARY_DIR}/messaging-menu.args" + DEPENDS "${CMAKE_CURRENT_BINARY_DIR}/messaging-menu.hierarchy" + DEPENDS "${CMAKE_CURRENT_BINARY_DIR}/messaging-menu.interfaces" + DEPENDS "${CMAKE_CURRENT_BINARY_DIR}/messaging-menu.prerequisites" + DEPENDS "${CMAKE_CURRENT_BINARY_DIR}/messaging-menu.signals" + WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR} + COMMAND + ${GTKDOC_MKDB} + --module=messaging-menu + --output-format=xml + --expand-content-files="" + --main-sgml-file=messaging-menu-docs.xml + --source-dir="${CMAKE_SOURCE_DIR}/libmessaging-menu" + --xml-mode +) + +# html + +file(MAKE_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/html") + +# html/annotation-glossary.html +# html/api-index-full.html +# html/ch01.html +# html/home.png +# html/index.html +# html/left.png +# html/left-insensitive.png +# html/messaging-menu.devhelp2 +# html/MessagingMenuApp.html +# html/MessagingMenuMessage.html +# html/object-tree.html +# html/right.png +# html/right-insensitive.png +# html/style.css +# html/up.png +# html/up-insensitive.png + +find_program(GTKDOC_MKHTML gtkdoc-mkhtml) + +add_custom_command( + OUTPUT "${CMAKE_CURRENT_BINARY_DIR}/html/annotation-glossary.html" + OUTPUT "${CMAKE_CURRENT_BINARY_DIR}/html/api-index-full.html" + OUTPUT "${CMAKE_CURRENT_BINARY_DIR}/html/ch01.html" + OUTPUT "${CMAKE_CURRENT_BINARY_DIR}/html/home.png" + OUTPUT "${CMAKE_CURRENT_BINARY_DIR}/html/index.html" + OUTPUT "${CMAKE_CURRENT_BINARY_DIR}/html/left.png" + OUTPUT "${CMAKE_CURRENT_BINARY_DIR}/html/left-insensitive.png" + OUTPUT "${CMAKE_CURRENT_BINARY_DIR}/html/messaging-menu.devhelp2" + OUTPUT "${CMAKE_CURRENT_BINARY_DIR}/html/MessagingMenuApp.html" + OUTPUT "${CMAKE_CURRENT_BINARY_DIR}/html/MessagingMenuMessage.html" + OUTPUT "${CMAKE_CURRENT_BINARY_DIR}/html/object-tree.html" + OUTPUT "${CMAKE_CURRENT_BINARY_DIR}/html/right.png" + OUTPUT "${CMAKE_CURRENT_BINARY_DIR}/html/right-insensitive.png" + OUTPUT "${CMAKE_CURRENT_BINARY_DIR}/html/style.css" + OUTPUT "${CMAKE_CURRENT_BINARY_DIR}/html/up.png" + OUTPUT "${CMAKE_CURRENT_BINARY_DIR}/html/up-insensitive.png" + DEPENDS "${CMAKE_CURRENT_BINARY_DIR}/messaging-menu-undeclared.txt" + DEPENDS "${CMAKE_CURRENT_BINARY_DIR}/messaging-menu-undocumented.txt" + DEPENDS "${CMAKE_CURRENT_BINARY_DIR}/messaging-menu-unused.txt" + DEPENDS "${CMAKE_CURRENT_BINARY_DIR}/xml/annotation-glossary.xml" + DEPENDS "${CMAKE_CURRENT_BINARY_DIR}/xml/api-index-deprecated.xml" + DEPENDS "${CMAKE_CURRENT_BINARY_DIR}/xml/api-index-full.xml" + DEPENDS "${CMAKE_CURRENT_BINARY_DIR}/xml/messaging-menu-app.xml" + DEPENDS "${CMAKE_CURRENT_BINARY_DIR}/xml/messaging-menu-doc.bottom" + DEPENDS "${CMAKE_CURRENT_BINARY_DIR}/xml/messaging-menu-doc.top" + DEPENDS "${CMAKE_CURRENT_BINARY_DIR}/xml/xml/messaging-menu-message.xml" + DEPENDS "${CMAKE_CURRENT_BINARY_DIR}/xml/object_index.sgml" + DEPENDS "${CMAKE_CURRENT_BINARY_DIR}/xml/tree_index.sgml" + WORKING_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/html" + COMMAND + ${GTKDOC_MKHTML} + --path=${CMAKE_CURRENT_BINARY_DIR} + messaging-menu + messaging-menu-docs.xml +) + +# html/annotation-glossary.html +# html/api-index-deprecated.html +# html/api-index-full.html +# html/ch01.html +# html/index.html +# html/object-tree.html +# html/style.css + +find_program(GTKDOC_FIXXREF gtkdoc-fixxref) + +add_custom_command( + OUTPUT "fixxref" + DEPENDS "${CMAKE_CURRENT_BINARY_DIR}/html/annotation-glossary.html" + DEPENDS "${CMAKE_CURRENT_BINARY_DIR}/html/api-index-full.html" + DEPENDS "${CMAKE_CURRENT_BINARY_DIR}/html/ch01.html" + DEPENDS "${CMAKE_CURRENT_BINARY_DIR}/html/home.png" + DEPENDS "${CMAKE_CURRENT_BINARY_DIR}/html/index.html" + DEPENDS "${CMAKE_CURRENT_BINARY_DIR}/html/left.png" + DEPENDS "${CMAKE_CURRENT_BINARY_DIR}/html/left-insensitive.png" + DEPENDS "${CMAKE_CURRENT_BINARY_DIR}/html/messaging-menu.devhelp2" + DEPENDS "${CMAKE_CURRENT_BINARY_DIR}/html/MessagingMenuApp.html" + DEPENDS "${CMAKE_CURRENT_BINARY_DIR}/html/MessagingMenuMessage.html" + DEPENDS "${CMAKE_CURRENT_BINARY_DIR}/html/object-tree.html" + DEPENDS "${CMAKE_CURRENT_BINARY_DIR}/html/right.png" + DEPENDS "${CMAKE_CURRENT_BINARY_DIR}/html/right-insensitive.png" + DEPENDS "${CMAKE_CURRENT_BINARY_DIR}/html/style.css" + DEPENDS "${CMAKE_CURRENT_BINARY_DIR}/html/up.png" + DEPENDS "${CMAKE_CURRENT_BINARY_DIR}/html/up-insensitive.png" + WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR} + COMMAND + ${GTKDOC_FIXXREF} + --module=messaging-menu + --module-dir=html + --html-dir="${CMAKE_INSTALL_FULL_DATADIR}/gtk-doc/html" +) + +set_source_files_properties("fixxref" PROPERTIES SYMBOLIC TRUE) +install(DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/html/" DESTINATION "${CMAKE_INSTALL_FULL_DATADIR}/gtk-doc/html/messaging-menu") + +add_custom_target("docs-references" ALL DEPENDS "fixxref") diff --git a/libmessaging-menu/CMakeLists.txt b/libmessaging-menu/CMakeLists.txt new file mode 100644 index 0000000..f2f9c24 --- /dev/null +++ b/libmessaging-menu/CMakeLists.txt @@ -0,0 +1,106 @@ +# messaging-menu.pc + +set(prefix "${CMAKE_INSTALL_PREFIX}")# Rewrite and drop once we've switched to CMake +set(exec_prefix "\${prefix}")# Rewrite and drop once we've switched to CMake +set(libdir "\${exec_prefix}/${CMAKE_INSTALL_LIBDIR}")# Rewrite and drop once we've switched to CMake +set(includedir "\${prefix}/${CMAKE_INSTALL_INCLUDEDIR}")# Rewrite and drop once we've switched to CMake +set(VERSION "${PROJECT_VERSION}")# Rewrite and drop once we've switched to CMake +configure_file("${CMAKE_CURRENT_SOURCE_DIR}/messaging-menu.pc.in" "${CMAKE_CURRENT_BINARY_DIR}/messaging-menu.pc" @ONLY) +install(FILES "${CMAKE_CURRENT_BINARY_DIR}/messaging-menu.pc" DESTINATION "${CMAKE_INSTALL_FULL_LIBDIR}/pkgconfig") + +# messaging-menu-app.h +# messaging-menu-message.h +# messaging-menu.h + +install(FILES "${CMAKE_CURRENT_SOURCE_DIR}/messaging-menu-app.h" DESTINATION "${CMAKE_INSTALL_FULL_INCLUDEDIR}/messaging-menu") +install(FILES "${CMAKE_CURRENT_SOURCE_DIR}/messaging-menu-message.h" DESTINATION "${CMAKE_INSTALL_FULL_INCLUDEDIR}/messaging-menu") +install(FILES "${CMAKE_CURRENT_SOURCE_DIR}/messaging-menu.h" DESTINATION "${CMAKE_INSTALL_FULL_INCLUDEDIR}/messaging-menu") + +# libmessaging-menu.so + +set( + SOURCES + messaging-menu-app.c + messaging-menu-message.c +) + +set( + SOURCES_GEN + ${CMAKE_BINARY_DIR}/src/indicator-messages-service.c + ${CMAKE_BINARY_DIR}/src/indicator-messages-application.c +) + +set_source_files_properties(${SOURCES_GEN} PROPERTIES GENERATED TRUE) +set_source_files_properties(${SOURCES} PROPERTIES COMPILE_FLAGS ${COMPILE_FLAGS}) +add_library("messaging-menu" SHARED ${SOURCES} ${SOURCES_GEN}) +set_target_properties("messaging-menu" PROPERTIES VERSION 0.0.0 SOVERSION 0) +target_include_directories("messaging-menu" PUBLIC ${PROJECT_DEPS_INCLUDE_DIRS} "${CMAKE_BINARY_DIR}/src") +target_link_libraries("messaging-menu" ${PROJECT_DEPS_LIBRARIES}) +add_dependencies("messaging-menu" "ayatana-indicator-messages-service") +install(TARGETS "messaging-menu" DESTINATION "${CMAKE_INSTALL_FULL_LIBDIR}") + +# MessagingMenu-1.0.gir + +find_package(GObjectIntrospection REQUIRED) + +set( + HEADERS + messaging-menu-app.h + messaging-menu-message.h +) + +add_custom_command( + OUTPUT "${CMAKE_CURRENT_BINARY_DIR}/MessagingMenu-1.0.gir" + DEPENDS "messaging-menu" + WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} + COMMAND + ${INTROSPECTION_SCANNER} + ${HEADERS} ${SOURCES} + --namespace=MessagingMenu + --nsversion=1.0 + --quiet + --warn-all + --include=GObject-2.0 + --include=Gio-2.0 + --pkg-export=messaging-menu + --library="messaging-menu" + --c-include="messaging-menu.h" + --library-path=${CMAKE_CURRENT_BINARY_DIR} + --output "${CMAKE_CURRENT_BINARY_DIR}/MessagingMenu-1.0.gir" +) + +install(FILES "${CMAKE_CURRENT_BINARY_DIR}/MessagingMenu-1.0.gir" DESTINATION "${CMAKE_INSTALL_FULL_DATADIR}/gir-1.0") + +# MessagingMenu-1.0.typelib + +add_custom_command( + OUTPUT "${CMAKE_CURRENT_BINARY_DIR}/MessagingMenu-1.0.typelib" + DEPENDS "${CMAKE_CURRENT_BINARY_DIR}/MessagingMenu-1.0.gir" + WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR} + COMMAND + ${INTROSPECTION_COMPILER} + --includedir=${CMAKE_CURRENT_BINARY_DIR} + ${CMAKE_CURRENT_BINARY_DIR}/MessagingMenu-1.0.gir + -o "${CMAKE_CURRENT_BINARY_DIR}/MessagingMenu-1.0.typelib" +) + +install(FILES "${CMAKE_CURRENT_BINARY_DIR}/MessagingMenu-1.0.typelib" DESTINATION "${CMAKE_INSTALL_FULL_LIBDIR}/girepository-1.0") + +# MessagingMenu-1.0.vapi + +find_package(Vala REQUIRED) + +add_custom_command( + OUTPUT "${CMAKE_CURRENT_BINARY_DIR}/MessagingMenu-1.0.vapi" + DEPENDS "${CMAKE_CURRENT_BINARY_DIR}/MessagingMenu-1.0.typelib" + WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR} + COMMAND + ${VAPI_GEN} + --library=MessagingMenu-1.0 + --pkg gio-2.0 + MessagingMenu-1.0.gir +) + +install(FILES "${CMAKE_CURRENT_BINARY_DIR}/MessagingMenu-1.0.vapi" DESTINATION "${CMAKE_INSTALL_FULL_DATADIR}/vala/vapi") + +add_custom_target("libmessaging-menu" ALL DEPENDS "${CMAKE_CURRENT_BINARY_DIR}/MessagingMenu-1.0.vapi") diff --git a/po/CMakeLists.txt b/po/CMakeLists.txt new file mode 100644 index 0000000..8435188 --- /dev/null +++ b/po/CMakeLists.txt @@ -0,0 +1,2 @@ +find_package(Intltool REQUIRED) +intltool_install_translations(ALL GETTEXT_PACKAGE ${GETTEXT_PACKAGE}) diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt new file mode 100644 index 0000000..c5cdc56 --- /dev/null +++ b/src/CMakeLists.txt @@ -0,0 +1,50 @@ +include(GdbusCodegen) +set(SOURCES_GEN) + +# indicator-messages-service.h +# indicator-messages-service.c + +add_gdbus_codegen_with_namespace( + SOURCES_GEN indicator-messages-service + org.ayatana.indicator.messages + IndicatorMessages + ${CMAKE_SOURCE_DIR}/common/org.ayatana.indicator.messages.service.xml +) + +# indicator-messages-application.h +# indicator-messages-application.c + +add_gdbus_codegen_with_namespace( + SOURCES_GEN indicator-messages-application + org.ayatana.indicator.messages + IndicatorMessages + ${CMAKE_SOURCE_DIR}/common/org.ayatana.indicator.messages.application.xml +) + +# ayatana-indicator-messages-service + +set( + SOURCES + gactionmuxer.c + gsettingsstrv.c + im-accounts-service.c + im-application-list.c + im-desktop-menu.c + im-menu.c + im-phone-menu.c + indicator-desktop-shortcuts.c + messages-service.c +) + +file(WRITE "${CMAKE_CURRENT_BINARY_DIR}/config.h" "")# Dummy file - drop all includes once we've switched to CMake +set_source_files_properties(${SOURCES} PROPERTIES COMPILE_FLAGS ${COMPILE_FLAGS}) +add_executable("ayatana-indicator-messages-service" ${SOURCES} ${SOURCES_GEN}) +target_compile_definitions( + "ayatana-indicator-messages-service" PUBLIC + G_LOG_DOMAIN="Ayatana-Indicator-Messages" + GETTEXT_PACKAGE="${GETTEXT_PACKAGE}" + LOCALEDIR="${CMAKE_INSTALL_FULL_LOCALEDIR}" +) +target_include_directories("ayatana-indicator-messages-service" PUBLIC ${PROJECT_DEPS_INCLUDE_DIRS} ${CMAKE_CURRENT_BINARY_DIR}) +target_link_libraries("ayatana-indicator-messages-service" ${PROJECT_DEPS_LIBRARIES}) +install(TARGETS "ayatana-indicator-messages-service" RUNTIME DESTINATION "${CMAKE_INSTALL_FULL_LIBEXECDIR}/ayatana-indicator-messages") diff --git a/tests/CMakeLists.txt b/tests/CMakeLists.txt new file mode 100644 index 0000000..bb5399e --- /dev/null +++ b/tests/CMakeLists.txt @@ -0,0 +1,78 @@ +# libindicator-messages-service + +find_package(GMock) + +set( + HEADERS + ${CMAKE_SOURCE_DIR}/src/gactionmuxer.h + ${CMAKE_SOURCE_DIR}/src/dbus-data.h +) + +set( + SOURCES + ${CMAKE_SOURCE_DIR}/src/gactionmuxer.c +) + +set( + HEADERS_GEN + ${CMAKE_BINARY_DIR}/src/indicator-messages-service.h +) + +set( + SOURCES_GEN + ${CMAKE_BINARY_DIR}/src/indicator-messages-service.c +) + +set_source_files_properties(${HEADERS_GEN} ${SOURCES_GEN} PROPERTIES GENERATED TRUE) +set_source_files_properties(${HEADERS} ${SOURCES} PROPERTIES COMPILE_FLAGS ${COMPILE_FLAGS}) +add_library("indicator-messages-service" STATIC ${HEADERS} ${HEADERS_GEN} ${SOURCES} ${SOURCES_GEN}) +target_include_directories("indicator-messages-service" PUBLIC ${PROJECT_DEPS_INCLUDE_DIRS}) +target_compile_definitions("indicator-messages-service" PUBLIC G_LOG_DOMAIN="Ayatana-Indicator-Messages") +target_link_libraries("indicator-messages-service") + +# test-gactionmuxer + +set_source_files_properties(gtest-menuitems.cpp PROPERTIES COMPILE_FLAGS ${COMPILE_FLAGS}) +add_executable("test-gactionmuxer" test-gactionmuxer.cpp) +target_link_options("test-gactionmuxer" PRIVATE -no-pie) +target_include_directories("test-gactionmuxer" PUBLIC ${PROJECT_DEPS_INCLUDE_DIRS} "${CMAKE_SOURCE_DIR}/src") +target_link_libraries("test-gactionmuxer" "indicator-messages-service" ${PROJECT_DEPS_LIBRARIES} ${GTEST_LIBRARIES} ${GTEST_BOTH_LIBRARIES} ${GMOCK_LIBRARIES}) +if (ENABLE_COVERAGE) + target_link_libraries("test-gactionmuxer" "-lgcov") +endif() +add_test("test-gactionmuxer" "test-gactionmuxer") +add_dependencies("test-gactionmuxer" "indicator-messages-service") +set(COVERAGE_TEST_TARGETS ${COVERAGE_TEST_TARGETS} "test-gactionmuxer" PARENT_SCOPE) + +# gschemas.compiled + +set_directory_properties(PROPERTIES ADDITIONAL_MAKE_CLEAN_FILES gschemas.compiled) +set_source_files_properties(gschemas.compiled GENERATED) +execute_process(COMMAND ${PKG_CONFIG_EXECUTABLE} gio-2.0 --variable glib_compile_schemas OUTPUT_VARIABLE COMPILE_SCHEMA_EXECUTABLE OUTPUT_STRIP_TRAILING_WHITESPACE) +add_custom_command(OUTPUT gschemas.compiled COMMAND cp -f ${CMAKE_SOURCE_DIR}/data/org.ayatana.indicator.messages.gschema.xml ${CMAKE_CURRENT_BINARY_DIR} COMMAND ${COMPILE_SCHEMA_EXECUTABLE} ${CMAKE_CURRENT_BINARY_DIR}) +add_custom_target("gschemas-compiled" ALL DEPENDS gschemas.compiled) + +# indicator-test + +pkg_check_modules(DBUSTEST REQUIRED dbustest-1) +set_source_files_properties(indicator-test.cpp PROPERTIES COMPILE_FLAGS ${COMPILE_FLAGS}) +add_executable("indicator-test" indicator-test.cpp) +target_link_options("indicator-test" PRIVATE -no-pie) +target_include_directories("indicator-test" PUBLIC ${PROJECT_DEPS_INCLUDE_DIRS} ${DBUSTEST_INCLUDE_DIRS} "${CMAKE_SOURCE_DIR}/libmessaging-menu") +target_link_libraries("indicator-test" "messaging-menu" ${PROJECT_DEPS_LIBRARIES} ${DBUSTEST_LIBRARIES} ${GTEST_LIBRARIES} ${GTEST_BOTH_LIBRARIES} ${GMOCK_LIBRARIES}) +target_compile_definitions( + "indicator-test" + PUBLIC + INDICATOR_MESSAGES_SERVICE_BINARY="${CMAKE_BINARY_DIR}/src/ayatana-indicator-messages-service" + SCHEMA_DIR="${CMAKE_CURRENT_BINARY_DIR}" + XDG_DATA_DIRS="${CMAKE_CURRENT_SOURCE_DIR}" +) +#add_test("indicator-test" "indicator-test") +add_dependencies("indicator-test" "messaging-menu" "gschemas-compiled") +set(COVERAGE_TEST_TARGETS ${COVERAGE_TEST_TARGETS} "indicator-test" PARENT_SCOPE) + +# test-client.sh + +set_source_files_properties("${CMAKE_CURRENT_BINARY_DIR}/test-client.sh" GENERATED) +file(WRITE "${CMAKE_CURRENT_BINARY_DIR}/test-client.sh" "export LD_LIBRARY_PATH=\"${CMAKE_BINARY_DIR}/libmessaging-menu\"; export GI_TYPELIB_PATH=\"${CMAKE_BINARY_DIR}/libmessaging-menu\"; export XDG_DATA_DIRS=\"${CMAKE_CURRENT_SOURCE_DIR}\"; python3 \"${CMAKE_CURRENT_SOURCE_DIR}/test-client.py\"") +add_test(NAME "test-client" COMMAND sh "${CMAKE_CURRENT_BINARY_DIR}/test-client.sh") -- cgit v1.2.3