Hi Aurelien,
Let's try again to finally get this resolved. :)
Attached, the necessary cmake foo to have find_package(DBusMenuQt NO_MODULE)
work like other frameworks do.
The .diff should work, but someone had problems applying it during testing, so
I've attached the whole files as well. (Maybe I missed some bzr diff option.)
Could you get this merged? If you want to test: kde-
workspace/plasma/generic/dataengines/CMakeLists.txt uses this, builds fine in
both cases (with and without DBusMenuQt). I need this for the
statusnotifieritem portion of the systemtray.
Thanks,
--
sebas
http://www.kde.org | http://vizZzion.org | GPG Key ID: 9119 0EF9
=== modified file 'CMakeLists.txt'
--- CMakeLists.txt 2012-05-21 20:16:56 +0000
+++ CMakeLists.txt 2013-09-18 00:49:32 +0000
@@ -44,22 +44,47 @@
)
add_dependencies(distcheck dist)
+
find_package(Qt5Widgets QUIET)
if (Qt5Widgets_FOUND)
find_package(Qt5DBus REQUIRED)
include_directories(${Qt5Widgets_INCLUDE_DIRS} ${Qt5DBus_INCLUDE_DIRS})
- find_package(extra-cmake-modules 0.0.2 REQUIRED)
- set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} ${EXTRA_CMAKE_MODULES_MODULE_PATH})
+ find_package(ECM 0.0.4 REQUIRED)
+ set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} ${ECM_MODULE_PATH})
find_package(Qt5Transitional REQUIRED Core)
set(CMAKE_AUTOMOC ON)
set(CMAKE_AUTOMOC_RELAXED_MODE ON)
+
+ include(ECMSetupVersion)
+ ecm_setup_version(${dbusmenu_qt_VERSION_MAJOR} ${dbusmenu_qt_VERSION_MINOR} ${dbusmenu_qt_VERSION_PATCH} VARIABLE_PREFIX DBusMenuQt
+ VERSION_HEADER "${CMAKE_CURRENT_BINARY_DIR}/dbusmenu_version.h"
+ PACKAGE_VERSION_FILE "${CMAKE_CURRENT_BINARY_DIR}/DBusMenuQtConfigVersion.cmake")
+
+ find_package(KF5 5.0.0 REQUIRED MODULE COMPONENTS CMake Compiler InstallDirs)
+ set(CMAKECONFIG_INSTALL_DIR ${SHARE_INSTALL_PREFIX}/cmake/DBusMenuQt)
+ include(CMakePackageConfigHelpers)
+ message(" #### CMAKECONFIG_INSTALL_DIR ${CMAKECONFIG_INSTALL_DIR}")
+ set(INCLUDE_INSTALL_DIR "${CMAKE_INSTALL_PREFIX}/include")
+ configure_package_config_file("${CMAKE_CURRENT_SOURCE_DIR}/DBusMenuQtConfig.cmake.in"
+ "${CMAKE_CURRENT_BINARY_DIR}/DBusMenuQtConfig.cmake"
+ INSTALL_DESTINATION ${CMAKECONFIG_INSTALL_DIR}
+ PATH_VARS INCLUDE_INSTALL_DIR CMAKE_INSTALL_PREFIX )
+ install(FILES "${CMAKE_CURRENT_BINARY_DIR}/DBusMenuQtConfig.cmake"
+ "${CMAKE_CURRENT_BINARY_DIR}/DBusMenuQtConfigVersion.cmake"
+ #"${CMAKE_CURRENT_SOURCE_DIR}/DBusMenuQtMacros.cmake"
+ DESTINATION "${CMAKECONFIG_INSTALL_DIR}"
+ COMPONENT Devel )
+
+ install(EXPORT DBusMenuQtTargets DESTINATION "${CMAKECONFIG_INSTALL_DIR}"
+ FILE DBusMenuQtTargets.cmake COMPONENT Devel)
+
else()
-find_package(Qt4 REQUIRED)
-include_directories(
- ${QT_INCLUDE_DIR}
- ${QT_QTCORE_INCLUDE_DIR}
- ${QT_QTDBUS_INCLUDE_DIR}
- ${QT_QTGUI_INCLUDE_DIR}
+ find_package(Qt4 REQUIRED)
+ include_directories(
+ ${QT_INCLUDE_DIR}
+ ${QT_QTCORE_INCLUDE_DIR}
+ ${QT_QTDBUS_INCLUDE_DIR}
+ ${QT_QTGUI_INCLUDE_DIR}
)
endif()
=== added file 'DBusMenuQtConfig.cmake.in'
--- DBusMenuQtConfig.cmake.in 1970-01-01 00:00:00 +0000
+++ DBusMenuQtConfig.cmake.in 2013-09-18 00:51:34 +0000
@@ -0,0 +1,24 @@
+@PACKAGE_INIT@
+
+# Any changes in this ".cmake" file will be overwritten by CMake, the source is the ".cmake.in" file.
+
+set(DBusMenuQt_INSTALL_PREFIX "@PACKAGE_CMAKE_INSTALL_PREFIX@")
+set_and_check(DBusMenuQt_INCLUDE_DIR "@PACKAGE_INCLUDE_INSTALL_DIR@")
+
+include("${CMAKE_CURRENT_LIST_DIR}/DBusMenuQtTargets.cmake")
+
+set(DBusMenuQt_INCLUDE_DIR "${PACKAGE_PREFIX_DIR}/include/dbusmenu-qt/")
+
+
+set(DBusMenuQt_FOUND TRUE)
+set(DBusMenuQt_INCLUDE_DIRS ${DBusMenuQt_INCLUDE_DIR})
+
+set(DBusMenuQt_LIBRARY dbusmenu-qt)
+set(DBusMenuQt_LIBRARIES dbusmenu-qt)
+#set(DBusMenuQt_LIBRARIES DBusMenuQt)
+
+
+message(" XXXXXXXXXXXXXXXXXX DBUSMENU --- ${DBusMenuQt_INCLUDE_DIR} ${DBusMenuQt_LIBRARIES}")
+
+#get_target_property(KConfig_KCFGC_EXECUTABLE KF5::kconfig_compiler LOCATION)
+#include("${CMAKE_CURRENT_LIST_DIR}/KConfigMacros.cmake")
=== modified file 'src/CMakeLists.txt'
--- src/CMakeLists.txt 2012-05-21 20:16:56 +0000
+++ src/CMakeLists.txt 2013-09-18 00:49:13 +0000
@@ -17,6 +17,7 @@
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall")
endif (__DBUSMENU_HAVE_W_ALL)
+remove_definitions(-DQT_NO_CAST_FROM_ASCII -DQT_STRICT_ITERATORS -DQT_NO_CAST_FROM_BYTEARRAY -DQT_NO_KEYWORDS)
# Check whether QIcon::name() exists. It was added in late Qt 4.7 cycle, and is
# not present in betas.
set(CMAKE_REQUIRED_INCLUDES "${QT_INCLUDE_DIR}")
@@ -75,9 +76,12 @@
)
install(TARGETS dbusmenu-qt
+ EXPORT DBusMenuQtTargets
LIBRARY DESTINATION lib${LIB_SUFFIX}
RUNTIME DESTINATION bin)
+#install(TARGETS plasma EXPORT kdelibsLibraryTargets ${INSTALL_TARGETS_DEFAULT_ARGS})
+
install(DIRECTORY .
DESTINATION include/dbusmenu-qt
FILES_MATCHING PATTERN "*.h"
@PACKAGE_INIT@
# Any changes in this ".cmake" file will be overwritten by CMake, the source is
the ".cmake.in" file.
set(DBusMenuQt_INSTALL_PREFIX "@PACKAGE_CMAKE_INSTALL_PREFIX@")
set_and_check(DBusMenuQt_INCLUDE_DIR "@PACKAGE_INCLUDE_INSTALL_DIR@")
include("${CMAKE_CURRENT_LIST_DIR}/DBusMenuQtTargets.cmake")
set(DBusMenuQt_INCLUDE_DIR "${PACKAGE_PREFIX_DIR}/include/dbusmenu-qt/")
set(DBusMenuQt_FOUND TRUE)
set(DBusMenuQt_INCLUDE_DIRS ${DBusMenuQt_INCLUDE_DIR})
set(DBusMenuQt_LIBRARY dbusmenu-qt)
set(DBusMenuQt_LIBRARIES dbusmenu-qt)
#set(DBusMenuQt_LIBRARIES DBusMenuQt)
message(" XXXXXXXXXXXXXXXXXX DBUSMENU --- ${DBusMenuQt_INCLUDE_DIR}
${DBusMenuQt_LIBRARIES}")
#get_target_property(KConfig_KCFGC_EXECUTABLE KF5::kconfig_compiler LOCATION)
#include("${CMAKE_CURRENT_LIST_DIR}/KConfigMacros.cmake")
project(dbusmenu-qt)
cmake_minimum_required(VERSION 2.8.12)
set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${CMAKE_SOURCE_DIR}/cmake/modules")
# Build options
option(WITH_DOC "Build documentation (requires Doxygen)" ON)
# Versions
## Package version
set(dbusmenu_qt_VERSION_MAJOR 0)
set(dbusmenu_qt_VERSION_MINOR 9)
set(dbusmenu_qt_VERSION_PATCH 2)
set(dbusmenu_qt_VERSION ${dbusmenu_qt_VERSION_MAJOR}.${dbusmenu_qt_VERSION_MINOR}.${dbusmenu_qt_VERSION_PATCH})
## Lib version
### Bump this one when a binary-incompatible change is introduced
set(dbusmenu_qt_lib_SOVERSION 2)
### Bump this one when the API is extended in a binary-compatible way
set(dbusmenu_qt_lib_API_VERSION 6)
### Bump this one when changes do not extend the API
set(dbusmenu_qt_lib_PATCH_VERSION 0)
set(dbusmenu_qt_lib_VERSION ${dbusmenu_qt_lib_SOVERSION}.${dbusmenu_qt_lib_API_VERSION}.${dbusmenu_qt_lib_PATCH_VERSION})
# dist targets
set(ARCHIVE_NAME libdbusmenu-qt-${dbusmenu_qt_VERSION})
add_custom_target(dist
COMMAND bzr export --root=${ARCHIVE_NAME} ${CMAKE_BINARY_DIR}/${ARCHIVE_NAME}.tar.bz2
WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
)
add_custom_target(distcheck
COMMAND cd ${CMAKE_BINARY_DIR}
&& rm -rf ${ARCHIVE_NAME}
&& tar xf ${ARCHIVE_NAME}.tar.bz2
&& mkdir ${ARCHIVE_NAME}/build
&& cd ${ARCHIVE_NAME}/build
&& cmake -DCMAKE_INSTALL_PREFIX=../install ..
&& make
&& make install
&& make check
)
add_dependencies(distcheck dist)
find_package(Qt5Widgets QUIET)
if (Qt5Widgets_FOUND)
find_package(Qt5DBus REQUIRED)
include_directories(${Qt5Widgets_INCLUDE_DIRS} ${Qt5DBus_INCLUDE_DIRS})
find_package(ECM 0.0.4 REQUIRED)
set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} ${ECM_MODULE_PATH})
#find_package(Qt5Transitional REQUIRED Core)
set(CMAKE_AUTOMOC ON)
set(CMAKE_AUTOMOC_RELAXED_MODE ON)
message(" XXXXXX ${dbusmenu_qt_VERSION}")
include(ECMSetupVersion)
ecm_setup_version(${dbusmenu_qt_VERSION} VARIABLE_PREFIX DBusMenuQt
VERSION_HEADER "${CMAKE_CURRENT_BINARY_DIR}/dbusmenu_version.h"
PACKAGE_VERSION_FILE "${CMAKE_CURRENT_BINARY_DIR}/DBusMenuQtConfigVersion.cmake")
find_package(KF5 5.0.0 REQUIRED MODULE COMPONENTS CMake Compiler InstallDirs)
set(CMAKECONFIG_INSTALL_DIR ${SHARE_INSTALL_PREFIX}/cmake/DBusMenuQt)
include(CMakePackageConfigHelpers)
message(" #### CMAKECONFIG_INSTALL_DIR ${CMAKECONFIG_INSTALL_DIR}")
set(INCLUDE_INSTALL_DIR "${CMAKE_INSTALL_PREFIX}/include")
configure_package_config_file("${CMAKE_CURRENT_SOURCE_DIR}/DBusMenuQtConfig.cmake.in"
"${CMAKE_CURRENT_BINARY_DIR}/DBusMenuQtConfig.cmake"
INSTALL_DESTINATION ${CMAKECONFIG_INSTALL_DIR}
PATH_VARS INCLUDE_INSTALL_DIR CMAKE_INSTALL_PREFIX )
install(FILES "${CMAKE_CURRENT_BINARY_DIR}/DBusMenuQtConfig.cmake"
"${CMAKE_CURRENT_BINARY_DIR}/DBusMenuQtConfigVersion.cmake"
#"${CMAKE_CURRENT_SOURCE_DIR}/DBusMenuQtMacros.cmake"
DESTINATION "${CMAKECONFIG_INSTALL_DIR}"
COMPONENT Devel )
install(EXPORT DBusMenuQtTargets DESTINATION "${CMAKECONFIG_INSTALL_DIR}"
FILE DBusMenuQtTargets.cmake COMPONENT Devel)
else()
find_package(Qt4 REQUIRED)
include_directories(
${QT_INCLUDE_DIR}
${QT_QTCORE_INCLUDE_DIR}
${QT_QTDBUS_INCLUDE_DIR}
${QT_QTGUI_INCLUDE_DIR}
)
endif()
configure_file(dbusmenu-qt.pc.in ${CMAKE_BINARY_DIR}/dbusmenu-qt.pc @ONLY)
install(FILES ${CMAKE_BINARY_DIR}/dbusmenu-qt.pc
DESTINATION lib${LIB_SUFFIX}/pkgconfig
)
add_subdirectory(src)
if (NOT Qt5Widgets_FOUND) # TODO port tests to Qt5
add_subdirectory(tests)
endif()
add_subdirectory(tools)
if(WITH_DOC)
configure_file(Doxyfile.in ${CMAKE_BINARY_DIR}/Doxyfile @ONLY)
add_custom_target(doc ALL doxygen
WORKING_DIRECTORY ${CMAKE_BINARY_DIR}
)
install(DIRECTORY ${CMAKE_BINARY_DIR}/html/
DESTINATION share/doc/dbusmenu-qt
)
endif(WITH_DOC)
include(CheckCXXSourceCompiles)
include (CheckCXXCompilerFlag)
# Check some compiler flags
check_cxx_compiler_flag(-fvisibility=hidden __DBUSMENU_HAVE_GCC_VISIBILITY)
if (__DBUSMENU_HAVE_GCC_VISIBILITY AND NOT WIN32)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fvisibility=hidden")
endif (__DBUSMENU_HAVE_GCC_VISIBILITY AND NOT WIN32)
check_cxx_compiler_flag(-Woverloaded-virtual __DBUSMENU_HAVE_W_OVERLOADED_VIRTUAL)
if (__DBUSMENU_HAVE_W_OVERLOADED_VIRTUAL)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Woverloaded-virtual")
endif (__DBUSMENU_HAVE_W_OVERLOADED_VIRTUAL)
check_cxx_compiler_flag(-Wall __DBUSMENU_HAVE_W_ALL)
if (__DBUSMENU_HAVE_W_ALL)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall")
endif (__DBUSMENU_HAVE_W_ALL)
remove_definitions(-DQT_NO_CAST_FROM_ASCII -DQT_STRICT_ITERATORS -DQT_NO_CAST_FROM_BYTEARRAY -DQT_NO_KEYWORDS)
# Check whether QIcon::name() exists. It was added in late Qt 4.7 cycle, and is
# not present in betas.
set(CMAKE_REQUIRED_INCLUDES "${QT_INCLUDE_DIR}")
set(CMAKE_REQUIRED_LIBRARIES "${QT_QTGUI_LIBRARIES};${QT_QTCORE_LIBRARIES}")
check_cxx_source_compiles("
#include <QtGui/QIcon>
int main() {
QIcon icon;
icon.name();
return 0;
}
" HAVE_QICON_NAME)
if (NOT HAVE_QICON_NAME)
message(STATUS "QIcon::name() does not exist, DBusMenuExporter will not export icon names by itself")
endif()
configure_file(dbusmenu_config.h.in ${CMAKE_CURRENT_BINARY_DIR}/dbusmenu_config.h @ONLY)
set(dbusmenu_qt_SRCS
dbusmenu_p.cpp
dbusmenuexporter.cpp
dbusmenuexporterdbus_p.cpp
dbusmenuimporter.cpp
dbusmenutypes_p.cpp
dbusmenushortcut_p.cpp
utils.cpp
)
include_directories(
${CMAKE_SOURCE_DIR}/src
${CMAKE_BINARY_DIR}/src
)
if (Qt5Widgets_FOUND)
qt5_add_dbus_adaptor(dbusmenu_qt_SRCS
${CMAKE_CURRENT_SOURCE_DIR}/com.canonical.dbusmenu.xml
${CMAKE_CURRENT_SOURCE_DIR}/dbusmenuexporterdbus_p.h DBusMenuExporterDBus
)
else()
qt4_automoc(${dbusmenu_qt_SRCS})
qt4_add_dbus_adaptor(dbusmenu_qt_SRCS
${CMAKE_CURRENT_SOURCE_DIR}/com.canonical.dbusmenu.xml
${CMAKE_CURRENT_SOURCE_DIR}/dbusmenuexporterdbus_p.h DBusMenuExporterDBus
)
endif()
configure_file(dbusmenu_version.h.in
${CMAKE_CURRENT_BINARY_DIR}/dbusmenu_version.h
)
add_library(dbusmenu-qt SHARED ${dbusmenu_qt_SRCS})
set_target_properties(dbusmenu-qt PROPERTIES
VERSION ${dbusmenu_qt_lib_VERSION}
SOVERSION ${dbusmenu_qt_lib_SOVERSION}
)
if (Qt5Widgets_FOUND)
target_link_libraries(dbusmenu-qt
Qt5::Core
Qt5::DBus
Qt5::Widgets
)
else()
target_link_libraries(dbusmenu-qt
${QT_QTGUI_LIBRARIES}
${QT_QTDBUS_LIBRARIES}
${QT_QTCORE_LIBRARIES}
)
endif()
install(TARGETS dbusmenu-qt
EXPORT DBusMenuQtTargets
LIBRARY DESTINATION lib${LIB_SUFFIX}
RUNTIME DESTINATION bin)
#install(TARGETS plasma EXPORT kdelibsLibraryTargets ${INSTALL_TARGETS_DEFAULT_ARGS})
install(DIRECTORY .
DESTINATION include/dbusmenu-qt
FILES_MATCHING PATTERN "*.h"
PATTERN "*_p.h" EXCLUDE
)
install(FILES ${CMAKE_CURRENT_BINARY_DIR}/dbusmenu_version.h
DESTINATION include/dbusmenu-qt/
)
_______________________________________________
Kde-frameworks-devel mailing list
Kde-frameworks-devel@kde.org
https://mail.kde.org/mailman/listinfo/kde-frameworks-devel