diff options
-rw-r--r-- | CMakeLists.txt | 72 | ||||
-rw-r--r-- | cmake/GdbusCodegen.cmake | 36 | ||||
-rw-r--r-- | data/CMakeLists.txt | 12 | ||||
-rw-r--r-- | po/CMakeLists.txt | 2 | ||||
-rw-r--r-- | src/CMakeLists.txt | 31 | ||||
-rw-r--r-- | test/CMakeLists.txt | 12 |
6 files changed, 165 insertions, 0 deletions
diff --git a/CMakeLists.txt b/CMakeLists.txt new file mode 100644 index 0000000..5a10d2c --- /dev/null +++ b/CMakeLists.txt @@ -0,0 +1,72 @@ +project (ayatana-indicator-printers C) +cmake_minimum_required (VERSION 3.13) + +if (CMAKE_INSTALL_PREFIX_INITIALIZED_TO_DEFAULT) + SET (CMAKE_INSTALL_PREFIX "/usr" CACHE PATH "..." FORCE) +endif (CMAKE_INSTALL_PREFIX_INITIALIZED_TO_DEFAULT) + +list (APPEND CMAKE_MODULE_PATH "${CMAKE_SOURCE_DIR}/cmake") + +set (PROJECT_VERSION "22.2.0") +set (PACKAGE ${CMAKE_PROJECT_NAME}) +set (GETTEXT_PACKAGE "ayatana-indicator-printers") + +# 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) + add_definitions ("-Werror") +endif () + +if ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang") + add_definitions ("-Weverything") +else () + add_definitions ("-Wall") +endif () + +# Check for prerequisites +include (GNUInstallDirs) +find_package (PkgConfig REQUIRED) +include (FindPkgConfig) +pkg_check_modules (SERVICE REQUIRED gtk+-3.0>=3.0 ayatana-indicator3-0.4>=0.2 dbusmenu-glib-0.4>=0.2 dbusmenu-gtk3-0.4) +find_program (CUPS_CONFIG cups-config REQUIRED) +execute_process (COMMAND ${CUPS_CONFIG} --cflags OUTPUT_VARIABLE CUPS_CFLAGS) +execute_process (COMMAND ${CUPS_CONFIG} --libs OUTPUT_VARIABLE CUPS_LIBS) +list (APPEND SERVICE_CFLAGS ${CUPS_CFLAGS}) +list (APPEND SERVICE_LDFLAGS ${CUPS_LIBS}) +list (APPEND SERVICE_LIBRARIES "cups") +include_directories (${CMAKE_SOURCE_DIR})# Drop this + +# Custom targets +set (ARCHIVE_NAME ${CMAKE_PROJECT_NAME}-${PROJECT_VERSION}) +add_custom_target (dist COMMAND bzr export --root=${ARCHIVE_NAME} ${CMAKE_BINARY_DIR}/${ARCHIVE_NAME}.tar.gz WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}) +add_custom_target (cppcheck COMMAND cppcheck --enable=all -q --error-exitcode=2 --inline-suppr ${CMAKE_SOURCE_DIR}/src ${CMAKE_SOURCE_DIR}/test) + +# Build +add_subdirectory (src) +add_subdirectory (data) +add_subdirectory (po) + +if (ENABLE_TESTS) + include (CTest) + enable_testing () + add_subdirectory (test) + if (ENABLE_COVERAGE) + find_package (CoverageReport) + ENABLE_COVERAGE_REPORT (TARGETS "ayatana-printersmenu" "ayatana-indicator-printers-service" TESTS "mock-cups-notifier" 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/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..20245cd --- /dev/null +++ b/data/CMakeLists.txt @@ -0,0 +1,12 @@ +# ayatana-indicator-printers.service +pkg_check_modules (SYSTEMD systemd) + +if (${SYSTEMD_FOUND}) + pkg_get_variable (SYSTEMD_USER_DIR systemd systemduserunitdir) + configure_file ("${CMAKE_CURRENT_SOURCE_DIR}/ayatana-indicator-printers.service.in" "${CMAKE_CURRENT_BINARY_DIR}/ayatana-indicator-printers.service" @ONLY) + install (FILES "${CMAKE_CURRENT_BINARY_DIR}/ayatana-indicator-printers.service" DESTINATION "${SYSTEMD_USER_DIR}") +endif () + +# ayatana-indicator-printers.desktop +configure_file ("${CMAKE_CURRENT_SOURCE_DIR}/ayatana-indicator-printers.desktop.in" "${CMAKE_CURRENT_BINARY_DIR}/ayatana-indicator-printers.desktop" @ONLY) +install (FILES "${CMAKE_CURRENT_BINARY_DIR}/ayatana-indicator-printers.desktop" DESTINATION "/etc/xdg/autostart") diff --git a/po/CMakeLists.txt b/po/CMakeLists.txt new file mode 100644 index 0000000..fce8216 --- /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..98af322 --- /dev/null +++ b/src/CMakeLists.txt @@ -0,0 +1,31 @@ +# libayatana-printersmenu.so +add_library (ayatana-printersmenu SHARED + indicator-printers.c + indicator-printers.h + indicator-menu-item.c + indicator-menu-item.h + dbus-names.h) +target_include_directories (ayatana-printersmenu PUBLIC ${SERVICE_INCLUDE_DIRS}) +target_compile_definitions (ayatana-printersmenu PUBLIC GETTEXT_PACKAGE="${GETTEXT_PACKAGE}" PACKAGE_NAME="${PACKAGE}") +install (TARGETS ayatana-printersmenu DESTINATION "${CMAKE_INSTALL_FULL_LIBDIR}/ayatana-indicators3/7/") + +# cups-notifier.h +# cups-notifier.c +include (GdbusCodegen) +add_gdbus_codegen_with_namespace (CUPS_NOTIFIER cups-notifier org.cups.cupsd Cups "${CMAKE_CURRENT_SOURCE_DIR}/org.cups.cupsd.Notifier.xml") + +# ayatana-indicator-printers-service +add_executable (ayatana-indicator-printers-service + indicator-printers-service.c + indicator-printers-menu.c + indicator-printers-menu.h + indicator-printer-state-notifier.c + indicator-printer-state-notifier.h + spawn-printer-settings.c + spawn-printer-settings.h + dbus-names.h + ${CUPS_NOTIFIER}) +target_include_directories (ayatana-indicator-printers-service PUBLIC ${SERVICE_INCLUDE_DIRS} ${CMAKE_CURRENT_BINARY_DIR}) +target_link_libraries (ayatana-indicator-printers-service ${SERVICE_LIBRARIES}) +target_compile_definitions (ayatana-indicator-printers-service PUBLIC GETTEXT_PACKAGE="${GETTEXT_PACKAGE}" LOCALEDIR="${CMAKE_INSTALL_FULL_LOCALEDIR}") +install (TARGETS ayatana-indicator-printers-service RUNTIME DESTINATION ${CMAKE_INSTALL_FULL_LIBEXECDIR}/${CMAKE_PROJECT_NAME}) diff --git a/test/CMakeLists.txt b/test/CMakeLists.txt new file mode 100644 index 0000000..78d8965 --- /dev/null +++ b/test/CMakeLists.txt @@ -0,0 +1,12 @@ +# cups-notifier.h +# cups-notifier.c +include (GdbusCodegen) +add_gdbus_codegen_with_namespace (CUPS_NOTIFIER cups-notifier org.cups.cupsd Cups "${CMAKE_SOURCE_DIR}/src/org.cups.cupsd.Notifier.xml") + +# mock-cups-notifier +add_executable (mock-cups-notifier mock-cups-notifier.c ${CUPS_NOTIFIER}) +target_include_directories (mock-cups-notifier PUBLIC ${SERVICE_INCLUDE_DIRS} ${CMAKE_CURRENT_BINARY_DIR}) +target_link_libraries (mock-cups-notifier ${SERVICE_LIBRARIES}) +add_test (mock-cups-notifier mock-cups-notifier) + + |