Clean up and fix data/CMakeLists.txt
[quassel.git] / cmake / FindDBusMenuQt.cmake
1 # - Try to find dbusmenu-qt
2 # This module helps finding an installation of the DBusMenuQt library (see https://launchpad.net/libdbusmenu-qt/)
3 # Once done this will define
4 #
5 #  DBUSMENUQT_FOUND - system has dbusmenu-qt
6 #  DBUSMENUQT_INCLUDE_DIR - the dbusmenu-qt include directory
7 #  DBUSMENUQT_LIBRARIES - the libraries needed to use dbusmenu-qt
8 #  DBUSMENUQT_DEFINITIONS - Compiler switches required for using dbusmenu-qt
9 #
10 # The minimum required version of DBusMenuQt can be specified using the
11 # standard syntax, e.g. find_package(DBusMenuQt 0.6)
12 #
13 # WARNING: versions below 0.4.0 cannot be checked for.
14 # So if you want to have a version check, require at least 0.4.0 of dbusmenuqt.
15
16 # Copyright (c) 2009, Canonical Ltd.
17 # - Author: Aurélien Gâteau <aurelien.gateau@canonical.com>
18 #
19 # Based on FindQCA2.cmake
20 # Copyright (c) 2006, Michael Larouche, <michael.larouche@kdemail.net>
21 #
22 # Redistribution and use is allowed according to the terms of the BSD license.
23 # For details see the accompanying COPYING-CMAKE-SCRIPTS file.
24
25 include(FindPackageHandleStandardArgs)
26
27 find_package(PkgConfig)
28 pkg_check_modules(PC_DBUSMENUQT QUIET dbusmenu-qt)
29
30
31 set(DBUSMENUQT_DEFINITIONS ${PC_DBUSMENUQT_CFLAGS_OTHER})
32
33 find_library(DBUSMENUQT_LIBRARIES
34     NAMES dbusmenu-qt dbusmenu-qtd
35     HINTS ${PC_DBUSMENUQT_LIBDIR} ${PC_DBUSMENUQT_LIBRARY_DIRS}
36     )
37
38 find_path(DBUSMENUQT_INCLUDE_DIR dbusmenuexporter.h
39     HINTS ${PC_DBUSMENUQT_INCLUDEDIR} ${PC_DBUSMENUQT_INCLUDE_DIRS}
40     PATH_SUFFIXES dbusmenu-qt
41     )
42
43
44 # dbusmenu_version.h is installed since 0.4.0, fail if a version below this is required:
45 if ((DBusMenuQt_FIND_VERSION)  AND ("${DBusMenuQt_FIND_VERSION}" VERSION_LESS "0.4.0"))
46   message(FATAL_ERROR "Cannot check reliably for a DBusMenuQt version below 0.4.0 (${DBusMenuQt_FIND_VERSION} was requested)")
47 endif ((DBusMenuQt_FIND_VERSION)  AND ("${DBusMenuQt_FIND_VERSION}" VERSION_LESS "0.4.0"))
48
49
50 # find the version number from dbusmenu_version.h and store it in the cache
51 if(DBUSMENUQT_INCLUDE_DIR  AND NOT DBUSMENUQT_VERSION)
52   # parse the version number out from dbusmenu_version:
53   if(EXISTS ${DBUSMENUQT_INCLUDE_DIR}/dbusmenu_version.h)
54     file(READ "${DBUSMENUQT_INCLUDE_DIR}/dbusmenu_version.h" DBUSMENUQT_VERSION_CONTENT)
55
56     if ("${DBUSMENUQT_VERSION_CONTENT}" MATCHES "DBUSMENUQT_VERSION_MAJOR") # introduced after 0.6.4, makes this code here more robust
57
58      string(REGEX MATCH "#define +DBUSMENUQT_VERSION_MAJOR +([0-9]+)"  _dummy "${DBUSMENUQT_VERSION_CONTENT}")
59      set(DBUSMENUQT_VERSION_MAJOR "${CMAKE_MATCH_1}")
60
61       string(REGEX MATCH "#define +DBUSMENUQT_VERSION_MINOR +([0-9]+)"  _dummy "${DBUSMENUQT_VERSION_CONTENT}")
62       set(DBUSMENUQT_VERSION_MINOR "${CMAKE_MATCH_1}")
63
64       string(REGEX MATCH "#define +DBUSMENUQT_VERSION_PATCH +([0-9]+)"  _dummy "${DBUSMENUQT_VERSION_CONTENT}")
65       set(DBUSMENUQT_VERSION_PATCH "${CMAKE_MATCH_1}")
66
67     else("${DBUSMENUQT_VERSION_CONTENT}" MATCHES "DBUSMENUQT_VERSION_MAJOR")
68       # In versions up to 0.6.4, the code for setting the version number in the header looked like
69       # shopw below. This made version checking quite un-obvious:
70       # #define DBUSMENUQT_VERSION \
71       #     ((0 << 16) \
72       #     |(6 << 8) \
73       #     |4)
74
75       string(REGEX MATCH "\\(\\( *([0-9]+) *<<"  _dummy "${DBUSMENUQT_VERSION_CONTENT}")
76       set(DBUSMENUQT_VERSION_MAJOR "${CMAKE_MATCH_1}")
77
78       string(REGEX MATCH "\\|\\( *([0-9]+) *<<"  _dummy "${DBUSMENUQT_VERSION_CONTENT}")
79       set(DBUSMENUQT_VERSION_MINOR "${CMAKE_MATCH_1}")
80
81       string(REGEX MATCH "\\| *([0-9]+) *\\)"  _dummy "${DBUSMENUQT_VERSION_CONTENT}")
82       set(DBUSMENUQT_VERSION_PATCH "${CMAKE_MATCH_1}")
83     endif("${DBUSMENUQT_VERSION_CONTENT}" MATCHES "DBUSMENUQT_VERSION_MAJOR")
84   endif(EXISTS ${DBUSMENUQT_INCLUDE_DIR}/dbusmenu_version.h)
85
86   set(DBUSMENUQT_VERSION "${DBUSMENUQT_VERSION_MAJOR}.${DBUSMENUQT_VERSION_MINOR}.${DBUSMENUQT_VERSION_PATCH}" CACHE STRING "Version number of DBusMenuQt" FORCE)
87 endif(DBUSMENUQT_INCLUDE_DIR  AND NOT DBUSMENUQT_VERSION)
88
89
90 find_package_handle_standard_args(DBusMenuQt REQUIRED_VARS DBUSMENUQT_LIBRARIES DBUSMENUQT_INCLUDE_DIR
91                                              VERSION_VAR DBUSMENUQT_VERSION)
92 #"Could not find dbusmenu-qt; available at https://launchpad.net/libdbusmenu-qt/" DBUSMENUQT_LIBRARIES DBUSMENUQT_INCLUDE_DIR)
93
94 mark_as_advanced(DBUSMENUQT_INCLUDE_DIR DBUSMENUQT_LIBRARIES DBUSMENUQT_VERSION)