diff options
32 files changed, 3370 insertions, 0 deletions
@@ -1,3 +1,10 @@ +2007-03-03 Ralf Habacker <ralf.habacker@freenet.de> + + * cmake: new directory, contains cmake build support. + See http://www.cmake.org for more informations. + Currently only unix will be buildable because some + win32 required files are still missing. + 2007-03-03 Thiago Macieira <thiago@kde.org> * dbus/dbus-sysdeps-unix.c: capture the dbus-launch stderr diff --git a/cmake/CMakeLists.txt b/cmake/CMakeLists.txt new file mode 100644 index 00000000..ded5cb0c --- /dev/null +++ b/cmake/CMakeLists.txt @@ -0,0 +1,545 @@ +set (PACKAGE dbus) +set (VERSION_MAJOR "1") +set (VERSION_MINOR "0") +set (VERSION_PATCH "0") +set (VERSION ${VERSION_MAJOR}.${VERSION_MINOR}.${VERSION_PATCH} ) +project(${PACKAGE}) + +# we need to be up to date +CMAKE_MINIMUM_REQUIRED(VERSION 2.4.4 FATAL_ERROR) + +# where to look first for cmake modules, before ${CMAKE_ROOT}/Modules/ is checked +set(CMAKE_MODULE_PATH "${CMAKE_SOURCE_DIR}/modules") + + +#enable building of shared library +SET(BUILD_SHARED_LIBS ON) + +# search packages used by KDE +if (WIN32) + find_package(GNUWIN32) + find_package(LibIconv) +endif (WIN32) +find_package(LibXml2) +find_package(LibExpat) +find_package(X11) + +# do config checks +INCLUDE(ConfigureChecks.cmake) + +# @TODO: how to remove last dir from ${CMAKE_SOURCE_DIR} ? +SET(DBUS_SOURCE_DIR ${CMAKE_SOURCE_DIR}/..) + +# make some more macros available +include (MacroLibrary) + +if(VCS) + set(DBUS_VERBOSE_C_S 1 CACHE TYPE STRING FORCE) + set(DBUS_VERBOSE_C_S 1) +endif(VCS) + +if(MSVC) + # controll folders in msvc projects + include(ProjectSourceGroup) + if(NOT GROUP_CODE) + #set(GROUP_CODE split) #cmake default + set(GROUP_CODE flat) + endif(NOT GROUP_CODE) + ADD_DEFINITIONS(-D_CRT_SECURE_NO_DEPRECATE -D_CRT_NONSTDC_NO_DEPRECATE) + + + # Use the highest warning level + if (WALL) + set(WALL 1 CACHE TYPE STRING FORCE) + set(CMAKE_CXX_WARNING_LEVEL 4 CACHE TYPE STRING FORCE) + + if(CMAKE_CXX_FLAGS MATCHES "/W[0-4]") + STRING(REGEX REPLACE "/W[0-4]" "/W4" CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS}") + else(CMAKE_CXX_FLAGS MATCHES "/W[0-4]") + SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /W4") + endif(CMAKE_CXX_FLAGS MATCHES "/W[0-4]") + + if(CMAKE_C_FLAGS MATCHES "/W[0-4]") + STRING(REGEX REPLACE "/W[0-4]" "/W4" CMAKE_C_FLAGS "${CMAKE_C_FLAGS}") + else(CMAKE_C_FLAGS MATCHES "/W[0-4]") + SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} /W4") + endif(CMAKE_C_FLAGS MATCHES "/W[0-4]") + else (WALL) + set(CMAKE_CXX_WARNING_LEVEL 3 CACHE TYPE STRING FORCE) + endif (WALL) + + SET(MSVC_W_ERROR " /we4028 /we4013 /we4133 /we4047 /we4031 /we4002 /we4003 /we4114") + SET(MSVC_W_DISABLE " /wd4127 /wd4090 /wd4101 /wd4244") + + SET(CMAKE_C_FLAGS_DEBUG "${CMAKE_C_FLAGS_DEBUG} /FIconfig.h ${MSVC_W_ERROR} ${MSVC_W_DISABLE}") + SET(CMAKE_C_FLAGS_RELEASE "${CMAKE_C_FLAGS_RELEASE} /FIconfig.h ${MSVC_W_ERROR} ${MSVC_W_DISABLE}") +endif(MSVC) + + +######################################################################### +# Windows CE +# +# usage: +# cmake ..\trunk\cmake -Dwince=1 -Dwcelibcex=c:\wcelibcex +# +# change configuration in Visual Studio to 'Pocket PC 2003 (ARMV4)' +# +if(wince) + project(${PACKAGE}-wince) + # don't forget parameters + set(wince 1 CACHE TYPE STRING FORCE) + set(wcelibcex ${wcelibcex} CACHE TYPE STRING FORCE) + + include_directories(${wcelibcex}/include/wcelibcex ${wcelibcex}/src) + + add_definitions( + -DDBUS_WINCE + -DWINCE + -DWIN32_PLATFORM_PSPC + -D_WINDOWS + -D_UNICODE + -DUNICODE + -DPOCKETPC2003_UI_MODEL + ) + + # Windows CE Version + add_definitions( + -D_WIN32_WCE=0x420 + -DWIN32_PLATFORM_PSPC=0x420 + -DUNDER_CE=0x420 + ) + + # Architecture + add_definitions( + -DARM + -D_ARM_ + ) + + set(CMAKE_CXX_STANDARD_LIBRARIES "coredll.lib corelibc.lib ole32.lib oleaut32.lib uuid.lib commctrl.lib ws2.lib") + + set(CMAKE_SHARED_LINKER_FLAGS "/subsystem:windowsce,4.20 /machine:THUMB") + +endif(wince) +######################################################################### + + +ENABLE_TESTING() + +######################################################################### +# Disallow in-source build +#macro_ensure_out_of_source_build("dbus requires an out of source build. Please create a separate build directory and run 'cmake path_to_dbus [options]' there.") + +# ... and warn in case of an earlier in-source build +#set(generatedFileInSourceDir EXISTS ${dbus_SOURCE_DIR}/config.h) +#if(${generatedFileInSourceDir}) +# message(STATUS "config.h exists in your source directory.") +#endif(${generatedFileInSourceDir}) +######################################################################### + +if (WIN32) + set (LIBRARY_OUTPUT_PATH ${CMAKE_BINARY_DIR}/bin) +else (WIN32) + set (LIBRARY_OUTPUT_PATH ${CMAKE_BINARY_DIR}/lib) +endif (WIN32) + +set (EXECUTABLE_OUTPUT_PATH ${CMAKE_BINARY_DIR}/bin) + +# for including config.h and for includes like <dir/foo.h> +include_directories( ${CMAKE_SOURCE_DIR} ${CMAKE_BINARY_DIR} ) +include_directories( ${CMAKE_INCLUDE_PATH} ) + +# linker search directories +link_directories(${DBUS_LIB_DIR} ${LIBRARY_OUTPUT_PATH} ) +include_directories( ${CMAKE_LIBRARY_PATH} ) + +set(DBUS_INCLUDES) + +ENABLE_TESTING() + + +########### basic vars ############### + +if (DBUSDIR) + set(DBUS_INSTALL_DIR "${DBUSDIR}" CACHE TYPE STRING) +else (DBUSDIR) + set(DBUS_INSTALL_DIR "$ENV{DBUSDIR}" CACHE TYPE STRING) +endif (DBUSDIR) + +if (NOT DBUS_INSTALL_DIR) + set(DBUS_INSTALL_DIR "${CMAKE_INSTALL_PREFIX}" CACHE TYPE STRING) +endif (NOT DBUS_INSTALL_DIR) + +if (DBUS_INSTALL_SYSTEM_LIBS) + set(prefix ${DBUS_INSTALL_DIR}) + set(exec_prefix ${prefix}) + set(EXPANDED_LIBDIR ${DBUS_INSTALL_DIR}/lib) + set(EXPANDED_INCLUDEDIR ${DBUS_INSTALL_DIR}/include) + set(EXPANDED_BINDIR ${DBUS_INSTALL_DIR}/bin) + set(EXPANDED_SYSCONFDIR ${DBUS_INSTALL_DIR}/etc) + set(EXPANDED_DATADIR ${DBUS_INSTALL_DIR}/data) + set(DBUS_BINDIR ${EXPANDED_BINDIR}) + set(DBUS_MACHINE_UUID_FILE ${DBUS_INSTALL_DIR}/lib/dbus/machine-id) +else (DBUS_INSTALL_SYSTEM_LIBS) + set(EXPANDED_INCLUDEDIR ${CMAKE_SOURCE_DIR}/include) + set(EXPANDED_DATADIR ${CMAKE_BINARY_DIR}/test/data) + if (MSVC_IDE) + set(EXPANDED_BINDIR ${CMAKE_BINARY_DIR}/bin/debug) + else (MSVC_IDE) + set(EXPANDED_BINDIR ${CMAKE_BINARY_DIR}/bin) + endif (MSVC_IDE) + set(DBUS_BINDIR ${EXPANDED_BINDIR}) + set(DBUS_MACHINE_UUID_FILE ${CMAKE_BINARY_DIR}/lib/dbus/machine-id) +endif (DBUS_INSTALL_SYSTEM_LIBS) + +########### command line options ############### +# TODO: take check from configure.in + +#AC_ARG_ENABLE(tests, AS_HELP_STRING([--enable-tests],[enable unit test code]),enable_tests=$enableval,enable_tests=$USE_MAINTAINER_MODE) +OPTION(DBUS_BUILD_TESTS "enable unit test code" ON) +if (DBUS_BUILD_TESTS) + if(NOT MSVC AND NOT CMAKE_BUILD_TYPE MATCHES Release) + add_definitions(-g) + endif(NOT MSVC AND NOT CMAKE_BUILD_TYPE MATCHES Release) +endif (DBUS_BUILD_TESTS) + +# win32 dbus service support - this support is not complete +OPTION(DBUS_SERVICE "enable dbus service installer" OFF) + +#AC_ARG_ENABLE(ansi, AS_HELP_STRING([--enable-ansi],[enable -ansi -pedantic gcc flags]),enable_ansi=$enableval,enable_ansi=no) +OPTION(DBUS_ENABLE_ANSI "enable -ansi -pedantic gcc flags" OFF) +if(DBUS_ENABLE_ANSI) + if(NOT MSVC) + add_definitions(-ansi -D_POSIX_C_SOURCE=199309L -D_BSD_SOURCE -pedantic) + else(NOT MSVC) + add_definitions(-Za -D_POSIX_C_SOURCE=199309L -D_BSD_SOURCE -W4) + endif(NOT MSVC) +endif(DBUS_ENABLE_ANSI) + +#AC_ARG_ENABLE(verbose-mode, AS_HELP_STRING([--enable-verbose-mode],[support verbose debug mode]),enable_verbose_mode=$enableval,enable_verbose_mode=$USE_MAINTAINER_MODE) +OPTION(DBUS_ENABLE_VERBOSE_MODE "support verbose debug mode" ON) + +#AC_ARG_ENABLE(asserts, AS_HELP_STRING([--enable-asserts],[include assertion checks]),enable_asserts=$enableval,enable_asserts=$USE_MAINTAINER_MODE) +OPTION(DBUS_DISABLE_ASSERTS "Disable assertion checking" OFF) + +#AC_ARG_ENABLE(checks, AS_HELP_STRING([--enable-checks],[include sanity checks on public API]),enable_checks=$enableval,enable_checks=yes) +OPTION(DBUS_DISABLE_CHECKS "Disable public API sanity checking" OFF) + +#AC_ARG_ENABLE(xml-docs, AS_HELP_STRING([--enable-xml-docs],[build XML documentation (requires xmlto)]),enable_xml_docs=$enableval,enable_xml_docs=auto) +#xmldocs missing + +#AC_ARG_ENABLE(doxygen-docs, AS_HELP_STRING([--enable-doxygen-docs],[build DOXYGEN documentation (requires Doxygen)]),enable_doxygen_docs=$enableval,enable_doxygen_docs=auto) +if(DOXYGEN) + OPTION(DBUS_ENABLE_DOXYGEN_DOCS "build DOXYGEN documentation (requires Doxygen)" ON) +endif(DOXYGEN) + +#AC_ARG_ENABLE(gcov, AS_HELP_STRING([--enable-gcov],[compile with coverage profiling instrumentation (gcc only)]),enable_gcov=$enableval,enable_gcov=no) +OPTION(DBUS_GCOV_ENABLED "compile with coverage profiling instrumentation (gcc only)" OFF) +if(DBUS_GCOV_ENABLED) + if(NOT MSVC) + add_definitions(-fprofile-arcs -ftest-coverage) + # FIXME!!!! + ## remove optimization +# CFLAGS=`echo "$CFLAGS" | sed -e 's/-O[0-9]*//g'` + endif(NOT MSVC) +endif(DBUS_GCOV_ENABLED) + +#AC_ARG_ENABLE(abstract-sockets, AS_HELP_STRING([--enable-abstract-sockets],[use abstract socket namespace (linux only)]),enable_abstract_sockets=$enableval,enable_abstract_sockets=auto) +#abstract sockets missing + +#AC_ARG_ENABLE(selinux, AS_HELP_STRING([--enable-selinux],[build with SELinux support]),enable_selinux=$enableval,enable_selinux=auto) +#selinux missing + +#AC_ARG_ENABLE(dnotify, AS_HELP_STRING([--enable-dnotify],[build with dnotify support (linux only)]),enable_dnotify=$enableval,enable_dnotify=auto) +if("${CMAKE_SYSTEM_NAME}" STREQUAL "Linux") + OPTION(DBUS_BUS_ENABLE_DNOTIFY_ON_LINUX "build with dnotify support (linux only)" ON) # add a check ! +endif("${CMAKE_SYSTEM_NAME}" STREQUAL "Linux") + +#AC_ARG_ENABLE(kqueue, AS_HELP_STRING([--enable-kqueue],[build with kqueue support (FreeBSD only)]),enable_kqueue=$enableval,enable_kqueue=auto) +#missing + +#AC_ARG_ENABLE(console-owner-file, AS_HELP_STRING([--enable-console-owner-file],[enable console owner file]),enable_console_owner_file=$enableval,enable_console_owner_file=auto) +STRING(TOUPPER ${CMAKE_SYSTEM_NAME} sysname) +if("${sysname}" MATCHES ".*SOLARIS.*") + OPTION(HAVE_CONSOLE_OWNER_FILE "enable console owner file (solaris only)" ON) + if(HAVE_CONSOLE_OWNER_FILE) + SET(DBUS_CONSOLE_OWNER_FILE "/dev/console" CACHE STRING "Directory to check for console ownerhip") + endif(HAVE_CONSOLE_OWNER_FILE) +endif("${sysname}" MATCHES ".*SOLARIS.*") + +#AC_ARG_WITH(xml, AS_HELP_STRING([--with-xml=[libxml/expat]],[XML library to use])) +if(NOT LIBXML2_FOUND AND NOT LIBEXPAT_FOUND) + message(FATAL "Neither expat nor libxml2 found!") +endif(NOT LIBXML2_FOUND AND NOT LIBEXPAT_FOUND) + +if(LIBEXPAT_FOUND) + OPTION(DBUS_USE_EXPAT "Use expat (== ON) or libxml2 (==OFF)" ON) +else(LIBEXPAT_FOUND) + OPTION(DBUS_USE_EXPAT "Use expat (== ON) or libxml2 (==OFF)" OFF) +endif(LIBEXPAT_FOUND) + +if(DBUS_USE_EXPAT) + SET(XML_LIB "Expat") + SET(XML_LIBRARY ${LIBEXPAT_LIBRARIES}) + SET(XML_INCLUDE_DIR ${LIBEXPAT_INCLUDE_DIR}) +else(DBUS_USE_EXPAT) + SET(XML_LIB "LibXML2") + SET(XML_LIBRARY ${LIBXML2_LIBRARIES}) + SET(XML_INCLUDE_DIR ${LIBXML2_INCLUDE_DIR}) +endif(DBUS_USE_EXPAT) + + +#AC_ARG_WITH(init-scripts, AS_HELP_STRING([--with-init-scripts=[redhat]],[Style of init scripts to install])) +#AC_ARG_WITH(session-socket-dir, AS_HELP_STRING([--with-session-socket-dir=[dirname]],[Where to put sockets for the per-login-session message bus])) +#AC_ARG_WITH(test-socket-dir, AS_HELP_STRING([--with-test-socket-dir=[dirname]],[Where to put sockets for make check])) +#AC_ARG_WITH(system-pid-file, AS_HELP_STRING([--with-system-pid-file=[pidfile]],[PID file for systemwide daemon])) +#AC_ARG_WITH(system-socket, AS_HELP_STRING([--with-system-socket=[filename]],[UNIX domain socket for systemwide daemon])) +#AC_ARG_WITH(console-auth-dir, AS_HELP_STRING([--with-console-auth-dir=[dirname]],[directory to check for console ownerhip])) +#AC_ARG_WITH(console-owner-file, AS_HELP_STRING([--with-console-owner-file=[filename]],[file whose owner determines current console owner])) +#AC_ARG_WITH(dbus_user, AS_HELP_STRING([--with-dbus-user=<user>],[User for running the DBUS daemon (messagebus)])) +#AC_ARG_WITH(dbus_daemondir, AS_HELP_STRING([--with-dbus-daemondir=[dirname]],[Directory for installing the DBUS daemon])) +# all missing or hardcoded for now + +# 'hidden' ones +set(atomic_int OFF) +set(atomic_int486 OFF) +if(CMAKE_COMPILER_IS_GNUCC AND NOT DBUS_ENABLE_ANSI) + FIND_PROGRAM(UNAME_EXECUTABLE + NAMES uname + PATHS /bin /usr/bin /usr/local/bin c:/Programme/MSys/bin d:/Programme/MSys/bin) + + if(UNAME_EXECUTABLE) + EXECUTE_PROCESS(COMMAND ${UNAME_EXECUTABLE} "-m" + OUTPUT_VARIABLE UNAME_OUTPUT) + + if("UNAME_OUTPUT" MATCHES "^.*i[0123]86.*$") + set(atomic_int ON) + else("UNAME_OUTPUT" MATCHES "^.*i[0123]86.*$") + if("UNAME_OUTPUT" MATCHES "^.*i?86.*$") + set(atomic_int ON) + set(atomic_int_486 ON) + endif("UNAME_OUTPUT" MATCHES "^.*i?86.*$") + endif("UNAME_OUTPUT" MATCHES "^.*i[0123]86.*$") + endif(UNAME_EXECUTABLE) +endif(CMAKE_COMPILER_IS_GNUCC AND NOT DBUS_ENABLE_ANSI) + +OPTION(DBUS_HAVE_ATOMIC_INT "Some atomic integer implementation present" ${atomic_int}) +OPTION(DBUS_USE_ATOMIC_INT_486 "Use atomic integer implementation for 486" ${atomic_int_486}) + +if(X11_FOUND) + OPTION(DBUS_BUILD_X11 "Build X11-dependent code " ON) +endif(X11_FOUND) + +# test binary names +if (WIN32) + set (EXT ".exe") +endif(WIN32) + +# confirure.in: +#TEST_PATH(SERVICE_DIR, data/valid-service-files) +#TEST_PATH(SERVICE_BINARY, test-service) +#TEST_PATH(SHELL_SERVICE_BINARY, test-shell-service) +#TEST_PATH(EXIT_BINARY, test-exit) +#TEST_PATH(SEGFAULT_BINARY, test-segfault) +#TEST_PATH(SLEEP_FOREVER_BINARY, test-sleep-forever) + +set(TEST_SERVICE_DIR ${CMAKE_BINARY_DIR}/test/data/valid-service-files CACHE STRING "Full path to test file test/data/valid-service-files in builddir") +set(TEST_SERVICE_BINARY ${EXPANDED_BINDIR}/test-service${EXT} CACHE STRING "Full path to test file test/test-service in builddir") +set(TEST_SHELL_SERVICE_BINARY ${EXPANDED_BINDIR}/test-shell-service${EXT} CACHE STRING "Full path to test file test/test-shell-service in builddir") +set(TEST_EXIT_BINARY ${EXPANDED_BINDIR}/test-exit${EXT} CACHE STRING "Full path to test file test/test-exit in builddir") +set(TEST_SEGFAULT_BINARY ${EXPANDED_BINDIR}/test-segfault${EXT} CACHE STRING "Full path to test file test/test-segfault in builddir") +set(TEST_SLEEP_FOREVER_BINARY ${EXPANDED_BINDIR}/test-sleep-forever${EXT} CACHE STRING "Full path to test file test/test-sleep-forever in builddir") + +#### Find socket directories +if (NOT WIN32) + if (NOT $ENV{TMPDIR} STREQUAL "") + set (DBUS_SESSION_SOCKET_DIR $ENV{TMPDIR}) + else (NOT $ENV{TMPDIR} STREQUAL "") + if (NOT $ENV{TEMP} STREQUAL "") + set (DBUS_SESSION_SOCKET_DIR $ENV{TEMP}) + else (NOT $ENV{TEMP} STREQUAL "") + if (NOT $ENV{TMP} STREQUAL "") + set (DBUS_SESSION_SOCKET_DIR $ENV{TMP}) + else (NOT $ENV{TMP} STREQUAL "") + set (DBUS_SESSION_SOCKET_DIR /tmp) + endif (NOT $ENV{TMP} STREQUAL "") + endif (NOT $ENV{TEMP} STREQUAL "") + endif (NOT $ENV{TMPDIR} STREQUAL "") +endif (NOT WIN32) + +#AC_ARG_WITH(test-socket-dir, AS_HELP_STRING([--with-test-socket-dir=[dirname]],[Where to put sockets for make check])) + +#AC_ARG_WITH(system-pid-file, AS_HELP_STRING([--with-system-pid-file=[pidfile]],[PID file for systemwide daemon])) + +#if ! test -z "$with_system_pid_file"; then +# DBUS_SYSTEM_PID_FILE=$with_system_pid_file +#elif test x$operating_system = xredhat ; then +# DBUS_SYSTEM_PID_FILE=${EXPANDED_LOCALSTATEDIR}/run/messagebus.pid +#else +# DBUS_SYSTEM_PID_FILE=${EXPANDED_LOCALSTATEDIR}/run/dbus/pid +#fi +# TODO: fix redhet +if (WIN32) + # bus-test expects a non empty string + set (DBUS_SYSTEM_PID_FILE "/dbus-pid") +else (WIN32) + set (DBUS_SYSTEM_PID_FILE ${EXPANDED_LOCALSTATEDIR}/run/dbus/pid) +endif (WIN32) + +#AC_ARG_WITH(system-socket, AS_HELP_STRING([--with-system-socket=[filename]],[UNIX domain socket for systemwide daemon])) + +#AC_ARG_WITH(console-auth-dir, AS_HELP_STRING([--with-console-auth-dir=[dirname]],[directory to check for console ownerhip])) + +if (WIN32) + set (DBUS_CONSOLE_AUTH_DIR "") +else (WIN32) + set (DBUS_CONSOLE_AUTH_DIR "/var/run/console/") +endif (WIN32) + +#AC_ARG_WITH(dbus_user, AS_HELP_STRING([--with-dbus-user=<user>],[User for running the DBUS daemon (messagebus)])) + +set (DBUS_USER ) + + +if (WIN32) + set (DBUS_SESSION_BUS_DEFAULT_ADDRESS "tcp:host=localhost,port=12434") + set (DBUS_SYSTEM_BUS_DEFAULT_ADDRESS "tcp:host=localhost,port=12434") + set (DBUS_SYSTEM_CONFIG_FILE "etc/system.conf") + set (DBUS_SESSION_CONFIG_FILE "etc/session.conf") + # bus-test expects a non empty string + set (DBUS_USER "Administrator") + set (DBUS_DATADIR "data") +else (WIN32) + set (DBUS_SYSTEM_BUS_DEFAULT_ADDRESS unix:tmpdir=) + set (DBUS_SESSION_BUS_DEFAULT_ADDRESS unix:path=${DBUS_SESSION_SOCKET_DIR}) + set (sysconfdir "") + set (configdir ${sysconfdir}/dbus-1 ) + set (DBUS_SYSTEM_CONFIG_FILE ${configdir}/system.conf) + set (DBUS_SESSION_CONFIG_FILE ${configdir}/session.conf) + set (DBUS_USER "root") + set (DBUS_DATADIR ${EXPANDED_DATADIR}) +endif (WIN32) + +set (DAEMON_NAME dbus-daemon) + +########### create config.h ############### + +#include(ConfigureChecks.cmake) + +# better use flags for gcc +if (MINGW) + set (HAVE_GNUC_VARARGS 1) +endif(MINGW) + +configure_file(${CMAKE_CURRENT_SOURCE_DIR}/config.h.cmake ${CMAKE_CURRENT_BINARY_DIR}/config.h ) +configure_file(${CMAKE_CURRENT_SOURCE_DIR}/dbus-env.bat.cmake ${CMAKE_BINARY_DIR}/bin/dbus-env.bat ) +configure_file(${CMAKE_CURRENT_SOURCE_DIR}/dbus-launch.bat.cmake ${CMAKE_BINARY_DIR}/bin/dbus-launch.bat ) +install_files(/bin FILES ${CMAKE_BINARY_DIR}/bin/dbus-env.bat) +install_files(/bin FILES ${CMAKE_BINARY_DIR}/bin/dbus-launch.bat) + +# compiler definitions +add_definitions(-DHAVE_CONFIG_H=1) +add_definitions(${DBUS_BUS_CFLAGS} -DDBUS_API_SUBJECT_TO_CHANGE) + + +########### subdirs ############### + +add_subdirectory( dbus ) +add_subdirectory( bus ) +if (DBUS_BUILD_TESTS) + add_subdirectory( test ) +endif (DBUS_BUILD_TESTS) +add_subdirectory( tools ) +# small sized pkg-config emulation +add_subdirectory( pkg-config ) + + +OPTION(DBUS_INSTALL_SYSTEM_LIBS "install required system libraries" OFF) +MESSAGE(" ") +MESSAGE("set -DDBUS_INSTALL_SYSTEM_LIBS=1 to install runtime libraries too") +MESSAGE("set DBUSDIR (environment or cmake option) to overwrite the default install directory ") +MESSAGE(" ") +MESSAGE(" ") +GET_FILENAME_COMPONENT(C_COMPILER ${CMAKE_C_COMPILER} NAME) +GET_FILENAME_COMPONENT(CXX_COMPILER ${CMAKE_CXX_COMPILER} NAME) + +message(" D-BUS ${VERSION} ") +message(" ========== ") +message(" ") +message(" prefix: ${prefix} ") +message(" exec_prefix: ${exec_prefix} ") +message(" libdir: ${EXPANDED_LIBDIR} ") +message(" bindir: ${EXPANDED_BINDIR} ") +message(" sysconfdir: ${EXPANDED_SYSCONFDIR} ") +message(" localstatedir: ${EXPANDED_LOCALSTATEDIR} ") +message(" datadir: ${EXPANDED_DATADIR} ") +message(" source code location: ${DBUS_SOURCE_DIR} ") +message(" c compiler: ${C_COMPILER} ") +message(" cflags: ${CMAKE_C_FLAGS} ") +message(" cflags debug: ${CMAKE_C_FLAGS_DEBUG} ") +message(" cflags release: ${CMAKE_C_FLAGS_RELEASE} ") +message(" cxx compiler: ${CXX_COMPILER} ") +message(" cxxflags: ${CMAKE_CXX_FLAGS} ") +message(" cxxflags debug: ${CMAKE_CXX_FLAGS_DEBUG} ") +message(" cxxflags release: ${CMAKE_CXX_FLAGS_RELEASE} ") +message(" 64-bit int: ${DBUS_INT64_TYPE} ") +message(" 32-bit int: ${DBUS_INT32_TYPE} ") +message(" 16-bit int: ${DBUS_INT16_TYPE} ") +message(" Doxygen: ${DOXYGEN} ") +message(" xmlto: ${XMLTO} ") + + +#message(" Maintainer mode: ${USE_MAINTAINER_MODE} ") +message(" gcc coverage profiling: ${DBUS_GCOV_ENABLED} ") +message(" Building unit tests: ${DBUS_BUILD_TESTS} ") +message(" Building verbose mode: ${DBUS_ENABLE_VERBOSE_MODE} ") +message(" Building w/o assertions: ${DBUS_DISABLE_ASSERTS} ") +message(" Building w/o checks: ${DBUS_DISABLE_CHECKS} ") +message(" installing system libs: ${DBUS_INSTALL_SYSTEM_LIBS} ") +#message(" Building SELinux support: ${have_selinux} ") +#message(" Building dnotify support: ${have_dnotify} ") +message(" Building Doxygen docs: ${DBUS_ENABLE_DOXYGEN_DOCS} ") +#message(" Building XML docs: ${enable_xml_docs} ") +#message(" Gettext libs (empty OK): ${INTLLIBS} ") +message(" Using XML parser: ${XML_LIB} ") +if (WIN32) +message(" System bus address: ${DBUS_SYSTEM_BUS_DEFAULT_ADDRESS} ") +message(" Session bus address: ${DBUS_SESSION_BUS_DEFAULT_ADDRESS} ") +else (WIN32) +#message(" Init scripts style: ${with_init_scripts} ") +#message(" Abstract socket names: ${have_abstract_sockets} ") +message(" System bus socket: ${DBUS_SYSTEM_SOCKET} ") +message(" System bus address: ${DBUS_SYSTEM_BUS_DEFAULT_ADDRESS} ") +message(" System bus PID file: ${DBUS_SYSTEM_PID_FILE} ") +message(" Session bus socket dir: ${DBUS_SESSION_SOCKET_DIR} ") +message(" Console auth dir: ${DBUS_CONSOLE_AUTH_DIR} ") +message(" System bus user: ${DBUS_USER} ") +message(" 'make check' socket dir: ${TEST_SOCKET_DIR} ") +endif (WIN32) +MESSAGE(" ") +if (DBUS_BUILD_TESTS) + message("NOTE: building with unit tests increases the size of the installed library and renders it insecure.") +endif(DBUS_BUILD_TESTS) + +if (DBUS_BUILD_TESTS AND DBUS_DISABLE_ASSERTS) + message("NOTE: building with unit tests but without assertions means tests may not properly report failures (this configuration is only useful when doing something like profiling the tests)") +endif(DBUS_BUILD_TESTS AND DBUS_DISABLE_ASSERTS) + +if (DBUS_GCOV_ENABLED) + message("NOTE: building with coverage profiling is definitely for developers only.") +endif(DBUS_GCOV_ENABLED) + +if (DBUS_ENABLE_VERBOSE_MODE) + message("NOTE: building with verbose mode increases library size, may slightly increase security risk, and decreases performance.") +endif(DBUS_ENABLE_VERBOSE_MODE) + +if(NOT DBUS_DISABLE_ASSERTS) + message("NOTE: building with assertions increases library size and decreases performance.") +endif(NOT DBUS_DISABLE_ASSERTS) + +if (DBUS_DISABLE_CHECKS) + message("NOTE: building without checks for arguments passed to public API makes it harder to debug apps using D-BUS, but will slightly decrease D-BUS library size and _very_ slightly improve performance.") +endif(DBUS_DISABLE_CHECKS) +MESSAGE(" ") + + +INCLUDE(modules/CPackInstallConfig.cmake) diff --git a/cmake/ConfigureChecks.cmake b/cmake/ConfigureChecks.cmake new file mode 100644 index 00000000..ec80e74a --- /dev/null +++ b/cmake/ConfigureChecks.cmake @@ -0,0 +1,126 @@ +include(CheckIncludeFile) +include(CheckSymbolExists) +include(CheckStructMember) +include(CheckTypeSize) + +check_include_file(dirent.h HAVE_DIRENT_H) # dbus-sysdeps-util.c +check_include_file(io.h HAVE_IO_H) # internal +check_include_file(grp.h HAVE_GRP_H) # dbus-sysdeps-util-win.c +check_include_file(sys/poll.h HAVE_POLL) # dbus-sysdeps.c, dbus-sysdeps-win.c +check_include_file(sys/time.h HAVE_SYS_TIME_H)# dbus-sysdeps-win.c +check_include_file(sys/wait.h HAVE_SYS_WAIT_H)# dbus-sysdeps-win.c +check_include_file(time.h HAVE_TIME_H) # dbus-sysdeps-win.c +check_include_file(unistd.h HAVE_UNISTD_H) # dbus-sysdeps-util-win.c +check_include_file(stdio.h HAVE_STDIO_H) # dbus-sysdeps.h + + +check_symbol_exists(backtrace "execinfo.h" HAVE_BACKTRACE) # dbus-sysdeps.c, dbus-sysdeps-win.c +check_symbol_exists(getgrouplist "grp.h" HAVE_GETGROUPLIST) # dbus-sysdeps.c +check_symbol_exists(getpeerucred "ucred.h" HAVE_GETPEERUCRED) # dbus-sysdeps.c, dbus-sysdeps-win.c +check_symbol_exists(nanosleep "time.h" HAVE_NANOSLEEP) # dbus-sysdeps.c +check_symbol_exists(getpwnam_r "errno.h pwd.h" HAVE_POSIX_GETPWNAM_R) # dbus-sysdeps-util-unix.c +check_symbol_exists(setenv "stdlib.h" HAVE_SETENV) # dbus-sysdeps.c +check_symbol_exists(socketpair "sys/socket.h.h" HAVE_SOCKETPAIR) # dbus-sysdeps.c +check_symbol_exists(unsetenv "stdlib.h" HAVE_UNSETENV) # dbus-sysdeps.c +check_symbol_exists(writev "sys/uio.h" HAVE_WRITEV) # dbus-sysdeps.c, dbus-sysdeps-win.c + +check_struct_member(cmsgcred cmcred_pid "sys/types.h sys/socket.h" HAVE_CMSGCRED) # dbus-sysdeps.c + +# missing: +# HAVE_ABSTRACT_SOCKETS +# DBUS_HAVE_GCC33_GCOV + +check_type_size("short" SIZEOF_SHORT) +check_type_size("int" SIZEOF_INT) +check_type_size("long" SIZEOF_LONG) +check_type_size("long long" SIZEOF_LONG_LONG) +check_type_size("__int64" SIZEOF___INT64) + +# DBUS_INT64_TYPE +if(SIZEOF_INT EQUAL 8) + set (DBUS_HAVE_INT64 1) + set (DBUS_INT64_TYPE "int") +else(SIZEOF_INT EQUAL 8) + if(SIZEOF_LONG EQUAL 8) + set (DBUS_HAVE_INT64 1) + set (DBUS_INT64_TYPE "long") + else(SIZEOF_LONG EQUAL 8) + if(SIZEOF_LONG_LONG EQUAL 8) + set (DBUS_HAVE_INT64 1) + set (DBUS_INT64_TYPE "long long") + else(SIZEOF_LONG_LONG EQUAL 8) + if(SIZEOF___INT64 EQUAL 8) + set (DBUS_HAVE_INT64 1) + set (DBUS_INT64_TYPE "__int64") + endif(SIZEOF___INT64 EQUAL 8) + endif(SIZEOF_LONG_LONG EQUAL 8) + endif(SIZEOF_LONG EQUAL 8) +endif(SIZEOF_INT EQUAL 8) + +# DBUS_INT32_TYPE +if(SIZEOF_INT EQUAL 4) + set (DBUS_INT32_TYPE "int") +else(SIZEOF_INT EQUAL 4) + if(SIZEOF_LONG EQUAL 4) + set (DBUS_INT32_TYPE "long") + else(SIZEOF_LONG EQUAL 4) + if(SIZEOF_LONG_LONG EQUAL 4) + set (DBUS_INT32_TYPE "long long") + endif(SIZEOF_LONG_LONG EQUAL 4) + endif(SIZEOF_LONG EQUAL 4) +endif(SIZEOF_INT EQUAL 4) + +# DBUS_INT16_TYPE +if(SIZEOF_INT EQUAL 2) + set (DBUS_INT16_TYPE "int") +else(SIZEOF_INT EQUAL 2) + if(SIZEOF_SHORT EQUAL 2) + set (DBUS_INT16_TYPE "short") + endif(SIZEOF_SHORT EQUAL 2) +endif(SIZEOF_INT EQUAL 2) + +find_program(DOXYGEN doxygen) +find_program(XMLTO xmlto) + +write_file("${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeTmp/cmake_try_compile.c" "#include <stdarg.h> + void f (int i, ...) { + va_list args1, args2; + va_start (args1, i); + va_copy (args2, args1); + if (va_arg (args2, int) != 42 || va_arg (args1, int) != 42) + exit (1); + va_end (args1); va_end (args2); + } + int main() { + f (0, 42); + return 0; + } +") +try_compile(DBUS_HAVE_VA_COPY + ${CMAKE_BINARY_DIR} + ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeTmp/cmake_try_compile.c) + +if(DBUS_HAVE_VA_COPY) + SET(DBUS_VA_COPY va_copy CACHE STRING "va_copy function") +else(DBUS_HAVE_VA_COPY) + write_file("${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeTmp/cmake_try_compile.c" "#include <stdarg.h> + void f (int i, ...) { + va_list args1, args2; + va_start (args1, i); + __va_copy (args2, args1); + if (va_arg (args2, int) != 42 || va_arg (args1, int) != 42) + exit (1); + va_end (args1); va_end (args2); + } + int main() { + f (0, 42); + return 0; + } + ") + try_compile(DBUS_HAVE_VA_COPY + ${CMAKE_BINARY_DIR} + ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeTmp/cmake_try_compile.c) + if(DBUS_HAVE___VA_COPY) + SET(DBUS_VA_COPY __va_copy CACHE STRING "va_copy function") + endif(DBUS_HAVE___VA_COPY) +endif(DBUS_HAVE_VA_COPY) diff --git a/cmake/bus-test.bat.cmake b/cmake/bus-test.bat.cmake new file mode 100644 index 00000000..01688713 --- /dev/null +++ b/cmake/bus-test.bat.cmake @@ -0,0 +1,14 @@ +:: bus-test wrapper +@echo off + +:: session bus address +set DBUS_STARTER_BUS=tcp:host=localhost,port=1234 + +if NOT "%1" == "" ( + SET DATADIR=%1 +) else ( + SET DATADIR=test\data +) + +bin\bus-test.exe test\data + diff --git a/cmake/bus/CMakeLists.txt b/cmake/bus/CMakeLists.txt new file mode 100644 index 00000000..79629e96 --- /dev/null +++ b/cmake/bus/CMakeLists.txt @@ -0,0 +1,178 @@ + +include_directories(${CMAKE_SOURCE_DIR}/..) +include_directories( ${CMAKE_INCLUDE_PATH} ) + +add_definitions(-DDBUS_COMPILATION) + +SET(EFENCE "") +SET(BUS_DIR ${CMAKE_SOURCE_DIR}/../bus) + +set (config_DATA + session.conf + system.conf +) + +# config files for installation +FOREACH(file ${config_DATA}) + CONFIGURE_FILE( "${CMAKE_CURRENT_SOURCE_DIR}/${file}.cmake" "${CMAKE_CURRENT_BINARY_DIR}/${file}" IMMEDIATE @ONLY) +ENDFOREACH(file) + +# copy services for local daemon start to local service dir data/dbus-1/services +SET (SERVICE_FILES test/data/valid-service-files) +FILE(GLOB FILES "${CMAKE_SOURCE_DIR}/../${SERVICE_FILES}/*.service.in" ) +FOREACH(FILE ${FILES}) + GET_FILENAME_COMPONENT(FILENAME ${FILE} NAME_WE) + SET (TARGET ${CMAKE_BINARY_DIR}/data/dbus-1/services/${FILENAME}.service) + IF (CONFIG_VERBOSE) + MESSAGE("FROM: ${FILE}\nTO: ${TARGET}\n") + ENDIF (CONFIG_VERBOSE) + configure_file(${FILE} ${TARGET} ) +ENDFOREACH(FILE) + +if(DBUS_USE_EXPAT) + SET (XML_SOURCES ${BUS_DIR}/config-loader-expat.c) +else(DBUS_USE_EXPAT) + SET (XML_SOURCES ${BUS_DIR}/config-loader-libxml.c) +endif (DBUS_USE_EXPAT) + +# after next cvs update +#set (DIR_WATCH_SOURCE ${BUS_DIR}/dir-watch-default.c) +set (DIR_WATCH_SOURCE ) + +set (BUS_SOURCES + ${BUS_DIR}/activation.c + ${BUS_DIR}/activation.h + ${BUS_DIR}/bus.c + ${BUS_DIR}/bus.h + ${BUS_DIR}/config-parser.c + ${BUS_DIR}/config-parser.h + ${BUS_DIR}/connection.c + ${BUS_DIR}/connection.h + ${BUS_DIR}/desktop-file.c + ${BUS_DIR}/desktop-file.h + ${BUS_DIR}/dir-watch.c + ${BUS_DIR}/dir-watch.h + ${BUS_DIR}/dispatch.c + ${BUS_DIR}/dispatch.h + ${BUS_DIR}/driver.c + ${BUS_DIR}/driver.h + ${BUS_DIR}/expirelist.c + ${BUS_DIR}/expirelist.h + ${BUS_DIR}/policy.c + ${BUS_DIR}/policy.h + ${BUS_DIR}/selinux.h + ${BUS_DIR}/selinux.c + ${BUS_DIR}/services.c + ${BUS_DIR}/services.h + ${BUS_DIR}/signals.c + ${BUS_DIR}/signals.h + ${BUS_DIR}/test.c + ${BUS_DIR}/test.h + ${BUS_DIR}/utils.c + ${BUS_DIR}/utils.h + ${XML_SOURCES} + ${DIR_WATCH_SOURCE} +) + +set (dbus_daemon_SOURCES + ${BUS_SOURCES} + ${BUS_DIR}/main.c +) + +include_directories(${XML_INCLUDE_DIR}) +SET (LIBS ${XML_LIBRARY}) + +add_executable(dbus-daemon ${dbus_daemon_SOURCES}) +target_link_libraries(dbus-daemon dbus-1 ${LIBS}) +install_targets(/bin dbus-daemon ) +install_files(/etc FILES ${config_DATA}) + +if (DBUS_SERVICE) + set (dbus_service_SOURCES + ${BUS_DIR}/bus-service-win.c + # TODO: add additional files + # ${BUS_DIR}/service-main.c + # ${BUS_SOURCES} + ) + + add_executable(dbus-service ${dbus_service_SOURCES} ) + target_link_libraries(dbus-service dbus-1 ${LIBS}) + install_targets(/bin dbus-service ) + +endif (DBUS_SERVICE) + +## note that TESTS has special meaning (stuff to use in make check) +## so if adding tests not to be run in make check, don't add them to +## TESTS +#if DBUS_BUILD_TESTS +#TESTS_ENVIRONMENT=DBUS_TEST_DATA=$(top_builddir)/test/data DBUS_TEST_HOMEDIR=$(top_builddir)/dbus +#TESTS=bus-test +#else +#TESTS= +#endif + +## we use noinst_PROGRAMS not check_PROGRAMS so that we build +## even when not doing "make check" +#noinst_PROGRAMS=$(TESTS) + +set (bus_test_SOURCES + ${BUS_SOURCES} + ${BUS_DIR}/test-main.c +) + +if (DBUS_BUILD_TESTS) + add_executable(bus-test ${bus_test_SOURCES}) + target_link_libraries(bus-test dbus-1 ${LIBS} ) + install_targets(/bin bus-test) + add_test(bus-test ${EXECUTABLE_OUTPUT_PATH}/bus-test ${CMAKE_SOURCE_DIR}/../test/data) +endif (DBUS_BUILD_TESTS) + +if(MSVC) + project_source_group(${GROUP_CODE} bus_test_SOURCES dummy) +endif(MSVC) + +## mop up the gcov files +#clean-local: +# /bin/rm *.bb *.bbg *.da *.gcov || true + +#install-data-hook: +# $(mkinstalldirs) $(DESTDIR)/$(localstatedir)/run/dbus +# $(mkinstalldirs) $(DESTDIR)/$(configdir)/system.d +# $(mkinstalldirs) $(DESTDIR)/$(datadir)/dbus-1/services + +##install_file(${configdir}/system.d FILE + + + +#### Init scripts fun +#SCRIPT_IN_FILES=messagebus.in +# rc.messagebus.in + +## Red Hat start +#if DBUS_INIT_SCRIPTS_RED_HAT + +#initddir=$(sysconfdir)/rc.d/init.d + +#initd_SCRIPTS= +# messagebus + +#endif +# ## Red Hat end + +## Slackware start +#if DBUS_INIT_SCRIPTS_SLACKWARE + +#initddir=$(sysconfdir)/rc.d/ + +#initd_SCRIPTS= +# rc.messagebus + +#endif +## Slackware end + +#MAN_IN_FILES=dbus-daemon.1.in +#man_MANS = dbus-daemon.1 + +#### Extra dist + +#EXTRA_DIST=$(CONFIG_IN_FILES) $(SCRIPT_IN_FILES) $(man_MANS) $(MAN_IN_FILES) diff --git a/cmake/bus/service.cmake b/cmake/bus/service.cmake new file mode 100644 index 00000000..25d17ff1 --- /dev/null +++ b/cmake/bus/service.cmake @@ -0,0 +1,3 @@ +[D-BUS Service] +Name=org.freedektop.DBus.ServiceName +Exec=notepad diff --git a/cmake/bus/session.conf.cmake b/cmake/bus/session.conf.cmake new file mode 100644 index 00000000..6bba91e9 --- /dev/null +++ b/cmake/bus/session.conf.cmake @@ -0,0 +1,30 @@ +<!-- This configuration file controls the per-user-login-session message bus. + Add a session-local.conf and edit that rather than changing this + file directly. --> + +<!DOCTYPE busconfig PUBLIC "-//freedesktop//DTD D-BUS Bus Configuration 1.0//EN" + "http://www.freedesktop.org/standards/dbus/1.0/busconfig.dtd"> +<busconfig> + <!-- Our well-known bus type, don't change this --> + <type>session</type> + + <listen>@DBUS_SESSION_BUS_DEFAULT_ADDRESS@</listen> + + <standard_session_servicedirs /> + + <policy context="default"> + <!-- Allow everything to be sent --> + <allow send_destination="*"/> + <!-- Allow everything to be received --> + <allow eavesdrop="true"/> + <!-- Allow anyone to own anything --> + <allow own="*"/> + </policy> + + <!-- This is included last so local configuration can override what's + in this standard file --> + <include ignore_missing="yes">session-local.conf</include> + + <include if_selinux_enabled="yes" selinux_root_relative="yes">contexts/dbus_contexts</include> + +</busconfig> diff --git a/cmake/bus/system.conf.cmake b/cmake/bus/system.conf.cmake new file mode 100644 index 00000000..ee85ecc4 --- /dev/null +++ b/cmake/bus/system.conf.cmake @@ -0,0 +1,62 @@ +<!-- This configuration file controls the systemwide message bus. + Add a system-local.conf and edit that rather than changing this + file directly. --> + +<!-- Note that there are any number of ways you can hose yourself + security-wise by screwing up this file; in particular, you + probably don't want to listen on any more addresses, add any more + auth mechanisms, run as a different user, etc. --> + +<!DOCTYPE busconfig PUBLIC "-//freedesktop//DTD D-BUS Bus Configuration 1.0//EN" + "http://www.freedesktop.org/standards/dbus/1.0/busconfig.dtd"> +<busconfig> + + <!-- Our well-known bus type, do not change this --> + <type>system</type> + + <!-- Run as special user --> + <user>@DBUS_USER@</user> + + <!-- Fork into daemon mode --> + <fork/> + + <!-- Write a pid file --> + <pidfile>@DBUS_SYSTEM_PID_FILE@</pidfile> + + <!-- Only allow socket-credentials-based authentication --> + <auth>EXTERNAL</auth> + + <!-- Only listen on a local socket. (abstract=/path/to/socket + means use abstract namespace, don't really create filesystem + file; only Linux supports this. Use path=/whatever on other + systems.) --> + <listen>@DBUS_SYSTEM_BUS_DEFAULT_ADDRESS@</listen> + + <policy context="default"> + <!-- Deny everything then punch holes --> + <deny send_interface="*"/> + <deny receive_interface="*"/> + <deny own="*"/> + <!-- But allow all users to connect --> + <allow user="*"/> + <!-- Allow anyone to talk to the message bus --> + <!-- FIXME I think currently these allow rules are always implicit + even if they aren't in here --> + <allow send_destination="org.freedesktop.DBus"/> + <allow receive_sender="org.freedesktop.DBus"/> + <!-- valid replies are always allowed --> + <allow send_requested_reply="true"/> + <allow receive_requested_reply="true"/> + </policy> + + <!-- Config files are placed here that among other things, punch + holes in the above policy for specific services. --> + <includedir>system.d</includedir> + + <!-- This is included last so local configuration can override what's + in this standard file --> + <include ignore_missing="yes">system-local.conf</include> + + <include if_selinux_enabled="yes" selinux_root_relative="yes">contexts/dbus_contexts</include> + +</busconfig> diff --git a/cmake/config.h.cmake b/cmake/config.h.cmake new file mode 100644 index 00000000..7faffef4 --- /dev/null +++ b/cmake/config.h.cmake @@ -0,0 +1,156 @@ +/* config.h. Generated by cmake from config.h.cmake */ + +#ifndef _DBUS_CONFIG_H +#define _DBUS_CONFIG_H +/****************************/ + +#cmakedefine HAVE_GNUC_VARARGS 1 + +#cmakedefine DBUS_CONSOLE_AUTH_DIR "@DBUS_CONSOLE_AUTH_DIR@" +#cmakedefine DBUS_DATADIR "@DBUS_DATADIR@" +#cmakedefine DBUS_BINDIR "@DBUS_BINDIR@" +#cmakedefine DBUS_SYSTEM_CONFIG_FILE "@DBUS_SYSTEM_CONFIG_FILE@" +#cmakedefine DBUS_SESSION_CONFIG_FILE "@DBUS_SESSION_CONFIG_FILE@" +#cmakedefine DAEMON_NAME "@DAEMON_NAME@" +#cmakedefine DBUS_SYSTEM_BUS_DEFAULT_ADDRESS "@DBUS_SYSTEM_BUS_DEFAULT_ADDRESS@" +#cmakedefine DBUS_MACHINE_UUID_FILE "@DBUS_MACHINE_UUID_FILE@" +//#cmakedefine DBUS_SESSION_BUS_DEFAULT_ADDRESS "@DBUS_SESSION_BUS_DEFAULT_ADDRESS@" +#cmakedefine PACKAGE "@PACKAGE@" +/* Version number of package */ +#cmakedefine VERSION "@VERSION@" +// test binaries +/* Full path to test file test/test-exit in builddir */ +#define TEST_EXIT_BINARY "@TEST_EXIT_BINARY@" +/* Full path to test file test/test-segfault in builddir */ +#define TEST_SEGFAULT_BINARY "@TEST_SEGFAULT_BINARY@" +/* Full path to test file test/test-service in builddir */ +#define TEST_SERVICE_BINARY "@TEST_SERVICE_BINARY@" +/* Full path to test file test/test-shell-service in builddir */ +#define TEST_SHELL_SERVICE_BINARY "@TEST_SHELL_SERVICE_BINARY@" +/* Full path to test file test/test-sleep-forever in builddir */ +#define TEST_SLEEP_FOREVER_BINARY "@TEST_SLEEP_FOREVER_BINARY@" + +/* Some dbus features */ +#cmakedefine DBUS_BUILD_TESTS 1 +#cmakedefine DBUS_ENABLE_ANSI 1 +#cmakedefine DBUS_ENABLE_VERBOSE_MODE 1 +#cmakedefine DBUS_DISABLE_ASSERTS 1 +#cmakedefine DBUS_DISABLE_CHECKS 1 +/* xmldocs */ +/* doxygen */ +#cmakedefine DBUS_GCOV_ENABLED 1 +/* abstract-sockets */ +/* selinux */ +#cmakedefine DBUS_BUS_ENABLE_DNOTIFY_ON_LINUX 1 +/* kqueue */ +#cmakedefine HAVE_CONSOLE_OWNER_FILE 1 +#define DBUS_CONSOLE_OWNER_FILE "@DBUS_CONSOLE_OWNER_FILE@" + +#cmakedefine DBUS_HAVE_ATOMIC_INT 1 +#cmakedefine DBUS_USE_ATOMIC_INT_486 1 +#if (defined(__i386__) || defined(__x86_64__)) +# define DBUS_HAVE_ATOMIC_INT 1 +# define DBUS_USE_ATOMIC_INT_486 1 +#endif + +#cmakedefine DBUS_BUILD_X11 1 + +#cmakedefine DBUS_VA_COPY @DBUS_VA_COPY_FUNC@ + +// headers +/* Define to 1 if you have dirent.h */ +#cmakedefine HAVE_DIRENT_H 1 + +/* Define to 1 if you have io.h */ +#cmakedefine HAVE_IO_H 1 + +/* Define to 1 if you have grp.h */ +#cmakedefine HAVE_GRP_H 1 + +/* Define to 1 if you have sys/poll.h */ +#cmakedefine HAVE_POLL 1 + +/* Define to 1 if you have sys/time.h */ +#cmakedefine HAVE_SYS_TIME 1 + +/* Define to 1 if you have sys/wait.h */ +#cmakedefine HAVE_SYS_WAIT 1 + +/* Define to 1 if you have time.h */ +#cmakedefine HAVE_TIME_H 1 + +/* Define to 1 if you have unistd.h */ +#cmakedefine HAVE_UNISTD_H 1 + +/* Define to 1 if you have stdio.h */ +#cmakedefine HAVE_STDIO_H 1 + +// symbols +/* Define to 1 if you have backtrace */ +#cmakedefine HAVE_BACKTRACE 1 + +/* Define to 1 if you have getgrouplist */ +#cmakedefine HAVE_GETGROUPLIST 1 + +/* Define to 1 if you have getpeerucred */ +#cmakedefine HAVE_GETPEERUCRED 1 + +/* Define to 1 if you have nanosleep */ +#cmakedefine HAVE_NANOSLEEP 1 + +/* Define to 1 if you have getpwnam_r */ +#cmakedefine HAVE_POSIX_GETPWNAM_R 1 + +/* Define to 1 if you have socketpair */ +#cmakedefine HAVE_SOCKETPAIR 1 + +/* Define to 1 if you have setenv */ +#cmakedefine HAVE_SETENV 1 + +/* Define to 1 if you have unsetenv */ +#cmakedefine HAVE_UNSETENV 1 + +/* Define to 1 if you have writev */ +#cmakedefine HAVE_WRITEV 1 + +// structs +/* Define to 1 if you have struct cmsgred */ +#cmakedefine HAVE_CMSGCRED 1 + +#if defined(_WIN32) || defined(_WIN64) +# define DBUS_WIN +# define DBUS_WIN_FIXME 1 +// mingw mode_t +# ifdef HAVE_STDIO_H +# include <stdio.h> +# endif +# ifndef _MSC_VER +# define uid_t int +# define gid_t int +# else +# define snprintf _snprintf +# define strtoll _strtoi64 +# define strtoull _strtoui64 + typedef int mode_t; +# endif +# ifdef DBUS_VA_COPY +# undef DBUS_VA_COPY // DBUS_VA_COPY kills mingw's bus-test +# endif +#endif // defined(_WIN32) || defined(_WIN64) + +#ifdef interface +#undef interface +#endif + +#ifndef SIGHUP +#define SIGHUP 1 +#endif + +#cmakedefine DBUS_VERBOSE_C_S 1 +#ifdef DBUS_VERBOSE_C_S +#define _dbus_verbose_C_S printf +#else +#define _dbus_verbose_C_S _dbus_verbose +#endif + +#endif // _DBUS_CONFIG_H diff --git a/cmake/dbus-env.bat.cmake b/cmake/dbus-env.bat.cmake new file mode 100644 index 00000000..85f70051 --- /dev/null +++ b/cmake/dbus-env.bat.cmake @@ -0,0 +1,8 @@ +:: environment setting for dbus clients +@echo off + +:: session bus address +set DBUS_SESSION_BUS_ADDRESS=@DBUS_SESSION_BUS_DEFAULT_ADDRESS@ + +:: system bus address +set DBUS_SYSTEM_BUS_DEFAULT_ADDRESS=@DBUS_SYSTEM_BUS_DEFAULT_ADDRESS@
\ No newline at end of file diff --git a/cmake/dbus-launch.bat.cmake b/cmake/dbus-launch.bat.cmake new file mode 100644 index 00000000..ef08b5ac --- /dev/null +++ b/cmake/dbus-launch.bat.cmake @@ -0,0 +1,26 @@ +:: environment setting for dbus clients +@echo off + +:: session bus address +set DBUS_SESSION_BUS_ADDRESS=@DBUS_SESSION_BUS_DEFAULT_ADDRESS@ + +:: system bus address +set DBUS_SYSTEM_BUS_DEFAULT_ADDRESS=@DBUS_SYSTEM_BUS_DEFAULT_ADDRESS@ + +if exist bus\session.conf ( + @echo starting local dbus daemon + start "D-Bus daemon" "bin\dbus-daemon" "--config-file=bus\session.conf" +) else ( + if not "%DBUSDIR%"=="" ( + @echo starting dbus daemon identified by DBUSDIR=%DBUSDIR% + start "D-Bus daemon" "%DBUSDIR%\bin\dbus-daemon" "--session" + pause + ) else ( + if exist "%ProgramFiles%\dbus\bin\dbus-daemon.exe" ( + @echo starting global dbus daemon located in %ProgramFiles%\dbus + start "D-Bus daemon" "%ProgramFiles%\dbus\bin\dbus-daemon" "--session" + ) else ( + @echo please set DBUSDIR to your DBUS installation dir and restart this script + ) + ) +) diff --git a/cmake/dbus/CMakeLists.txt b/cmake/dbus/CMakeLists.txt new file mode 100644 index 00000000..754c5cb2 --- /dev/null +++ b/cmake/dbus/CMakeLists.txt @@ -0,0 +1,245 @@ +project(dbus) + +#INCLUDES=-I$(top_srcdir) $(DBUS_CLIENT_CFLAGS) -DDBUS_COMPILATION + +include_directories(${CMAKE_SOURCE_DIR}/..) +SET(DBUS_DIR ${CMAKE_SOURCE_DIR}/../dbus) + +configure_file(${CMAKE_CURRENT_SOURCE_DIR}/dbus-arch-deps.h.cmake ${CMAKE_CURRENT_BINARY_DIR}/dbus-arch-deps.h ) + +add_definitions(-DDBUS_COMPILATION) + +set (dbusinclude_HEADERS + ${DBUS_DIR}/dbus.h + ${DBUS_DIR}/dbus-address.h + ${DBUS_DIR}/dbus-bus.h + ${DBUS_DIR}/dbus-connection.h + ${DBUS_DIR}/dbus-errors.h + ${DBUS_DIR}/dbus-macros.h + ${DBUS_DIR}/dbus-memory.h + ${DBUS_DIR}/dbus-message.h + ${DBUS_DIR}/dbus-misc.h + ${DBUS_DIR}/dbus-pending-call.h + ${DBUS_DIR}/dbus-protocol.h + ${DBUS_DIR}/dbus-server.h + ${DBUS_DIR}/dbus-shared.h + ${DBUS_DIR}/dbus-signature.h + ${DBUS_DIR}/dbus-threads.h + ${DBUS_DIR}/dbus-types.h + dbus-arch-deps.h +) + +### source code that goes in the installed client library +### and is specific to library functionality +set (DBUS_LIB_SOURCES + ${DBUS_DIR}/dbus-address.c + ${DBUS_DIR}/dbus-auth.c + ${DBUS_DIR}/dbus-auth-script.c + ${DBUS_DIR}/dbus-bus.c + ${DBUS_DIR}/dbus-connection.c + ${DBUS_DIR}/dbus-errors.c + ${DBUS_DIR}/dbus-keyring.c + ${DBUS_DIR}/dbus-marshal-header.c + ${DBUS_DIR}/dbus-marshal-byteswap.c + ${DBUS_DIR}/dbus-marshal-recursive.c + ${DBUS_DIR}/dbus-marshal-validate.c + ${DBUS_DIR}/dbus-message.c + ${DBUS_DIR}/dbus-misc.c + ${DBUS_DIR}/dbus-object-tree.c + ${DBUS_DIR}/dbus-pending-call.c + ${DBUS_DIR}/dbus-resources.c + ${DBUS_DIR}/dbus-server.c + ${DBUS_DIR}/dbus-server-socket.c + ${DBUS_DIR}/dbus-server-debug-pipe.c + ${DBUS_DIR}/dbus-sha.c + ${DBUS_DIR}/dbus-signature.c + ${DBUS_DIR}/dbus-timeout.c + ${DBUS_DIR}/dbus-threads.c + ${DBUS_DIR}/dbus-transport.c + ${DBUS_DIR}/dbus-transport-socket.c + ${DBUS_DIR}/dbus-watch.c +#dbus-md5.c +# +# find a clean Windows implementation +# and move code to a *-win.c file + ${DBUS_DIR}/dbus-transport-unix.c + ${DBUS_DIR}/dbus-server-unix.c +) +set (DBUS_LIB_HEADERS + ${DBUS_DIR}/dbus-auth.h + ${DBUS_DIR}/dbus-auth-script.h + ${DBUS_DIR}/dbus-connection-internal.h + ${DBUS_DIR}/dbus-keyring.h + ${DBUS_DIR}/dbus-marshal-header.h + ${DBUS_DIR}/dbus-marshal-byteswap.h + ${DBUS_DIR}/dbus-marshal-recursive.h + ${DBUS_DIR}/dbus-marshal-validate.h + ${DBUS_DIR}/dbus-message-internal.h + ${DBUS_DIR}/dbus-message-private.h + ${DBUS_DIR}/dbus-misc.h + ${DBUS_DIR}/dbus-object-tree.h + ${DBUS_DIR}/dbus-protocol.h + ${DBUS_DIR}/dbus-resources.h + ${DBUS_DIR}/dbus-server-debug-pipe.h + ${DBUS_DIR}/dbus-server-protected.h + ${DBUS_DIR}/dbus-server-unix.h + ${DBUS_DIR}/dbus-sha.h + ${DBUS_DIR}/dbus-timeout.h + ${DBUS_DIR}/dbus-threads.h + ${DBUS_DIR}/dbus-threads-internal.h + ${DBUS_DIR}/dbus-transport.h + ${DBUS_DIR}/dbus-transport-protected.h + ${DBUS_DIR}/dbus-transport-unix.h + ${DBUS_DIR}/dbus-watch.h + ${CMAKE_BINARY_DIR}/config.h +##dbus-md5.h +) +### source code that goes in the installed client library +### AND is generic utility functionality used by the +### daemon or test programs (all symbols in here should +### be underscore-prefixed) +set (DBUS_SHARED_SOURCES + ${DBUS_DIR}/dbus-dataslot.c + ${DBUS_DIR}/dbus-hash.c + ${DBUS_DIR}/dbus-internals.c + ${DBUS_DIR}/dbus-list.c + ${DBUS_DIR}/dbus-marshal-basic.c + ${DBUS_DIR}/dbus-memory.c + ${DBUS_DIR}/dbus-mempool.c + ${DBUS_DIR}/dbus-string.c + ${DBUS_DIR}/dbus-sysdeps.c + ${DBUS_DIR}/dbus-sysdeps-util.c + ${DBUS_DIR}/dbus-userdb.c +) + +set (DBUS_SHARED_HEADERS + ${DBUS_DIR}/dbus-dataslot.h + ${DBUS_DIR}/dbus-hash.h + ${DBUS_DIR}/dbus-internals.h + ${DBUS_DIR}/dbus-list.h + ${DBUS_DIR}/dbus-marshal-basic.h + ${DBUS_DIR}/dbus-mempool.h + ${DBUS_DIR}/dbus-string.h + ${DBUS_DIR}/dbus-string-private.h + ${DBUS_DIR}/dbus-sysdeps.h + ${DBUS_DIR}/dbus-userdb.h +) + +### source code that is generic utility functionality used +### by the bus daemon or test apps, but is NOT included +### in the D-BUS client library (all symbols in here +### should be underscore-prefixed but don't really need +### to be unless they move to DBUS_SHARED_SOURCES later) +set (DBUS_UTIL_SOURCES + ${DBUS_DIR}/dbus-auth-util.c + ${DBUS_DIR}/dbus-mainloop.c + ${DBUS_DIR}/dbus-marshal-byteswap-util.c + ${DBUS_DIR}/dbus-marshal-recursive-util.c + ${DBUS_DIR}/dbus-marshal-validate-util.c + ${DBUS_DIR}/dbus-message-factory.c + ${DBUS_DIR}/dbus-message-util.c + ${DBUS_DIR}/dbus-shell.c + ${DBUS_DIR}/dbus-string-util.c + ${DBUS_DIR}/dbus-userdb-util.c +) + +if (DBUS_BUILD_TESTS) + set (DBUS_UTIL_SOURCES + ${DBUS_UTIL_SOURCES} + ${DBUS_DIR}/dbus-test.c + ) +endif (DBUS_BUILD_TESTS) + +set (DBUS_UTIL_HEADERS + ${DBUS_DIR}/dbus-mainloop.h + ${DBUS_DIR}/dbus-message-factory.h + ${DBUS_DIR}/dbus-shell.h + ${DBUS_DIR}/dbus-spawn.h + ${DBUS_DIR}/dbus-test.h +) + +### platform specific settings +if (WIN32) + set (DBUS_SHARED_SOURCES ${DBUS_SHARED_SOURCES} + ${DBUS_DIR}/dbus-sysdeps-win.c + ${DBUS_DIR}/dbus-sysdeps-win-thread.c + ${DBUS_DIR}/dbus-sysdeps-util-win.c + ${DBUS_DIR}/dbus-spawn-win.c + ) + set (DBUS_SHARED_HEADERS ${DBUS_SHARED_HEADERS} + ${DBUS_DIR}/dbus-sockets-win.h + ${DBUS_DIR}/dbus-sysdeps-win.h + ) + set (LIBS ${LIBS} ws2_32 advapi32 netapi32) + +else (WIN32) + set (DBUS_SHARED_SOURCES ${DBUS_SHARED_SOURCES} + ${DBUS_DIR}/dbus-sysdeps-unix.c + ${DBUS_DIR}/dbus-sysdeps-pthread.c + ${DBUS_DIR}/dbus-sysdeps-util-unix.c + ${DBUS_DIR}/dbus-spawn.c + ) + set (DBUS_SHARED_HEADERS ${DBUS_SHARED_HEADERS} + ${DBUS_DIR}/dbus-server-unix.h + ${DBUS_DIR}/dbus-transport-unix.h + ${DBUS_DIR}/dbus-sysdeps-unix.h + ) +endif (WIN32) + +set(libdbus_SOURCES + ${DBUS_LIB_SOURCES} + ${DBUS_SHARED_SOURCES} + # for debugging + ${DBUS_UTIL_SOURCES} +) + +set(libdbus_HEADERS + ${DBUS_LIB_HEADERS} + ${DBUS_SHARED_HEADERS} + # for debugging + ${DBUS_UTIL_HEADERS} +) + +if(MSVC) + set(CMAKE_DEBUG_POSTFIX "d") + add_library(dbus-1 STATIC ${libdbus_SOURCES} ${libdbus_HEADERS} ) + project_source_group(${GROUP_CODE} libdbus_SOURCES libdbus_HEADERS) +else(MSVC) + add_library(dbus-1 ${libdbus_SOURCES} ${libdbus_HEADERS} ) +endif(MSVC) + +target_link_libraries(dbus-1 ${LIBS} ) + +install_targets(/lib dbus-1 ) +install_files(/include/dbus FILES ${dbusinclude_HEADERS}) + +#ADD_EXECUTABLE(dbus-example dbus-example.c) +#target_link_libraries(${CMAKE_SOURCE_DIR}/../dbus/dbus-example dbus-1) +#install_targets(/bin dbus-example ) + +## note that TESTS has special meaning (stuff to use in make check) +## so if adding tests not to be run in make check, don't add them to +## TESTS +#if DBUS_BUILD_TESTS +#TESTS_ENVIRONMENT=DBUS_TEST_DATA=$(top_builddir)/test/data DBUS_TEST_HOMEDIR=$(top_builddir)/dbus +#TESTS=dbus-test +#else +#TESTS= +#endif + +if (DBUS_BUILD_TESTS) + set (TESTS_ENVIRONMENT "DBUS_TEST_DATA=${CMAKE_SOURCE_DIR}/test/data DBUS_TEST_HOMEDIR=${CMAKE_BUILD_DIR}/dbus") + ADD_EXECUTABLE(dbus-test ${CMAKE_SOURCE_DIR}/../dbus/dbus-test-main.c) + target_link_libraries(dbus-test dbus-1 ${LIBS}) + add_test(dbus-test ${EXECUTABLE_OUTPUT_PATH}/dbus-test ${CMAKE_SOURCE_DIR}/../test/data) + install_targets(/bin dbus-test) +ENDIF (DBUS_BUILD_TESTS) + +if (UNIX) +# set version info +ENDIF (UNIX) + + +## mop up the gcov files +#clean-local: +#/bin/rm *.bb *.bbg *.da *.gcov .libs/*.da .libs/*.bbg || true diff --git a/cmake/dbus/dbus-arch-deps.h.cmake b/cmake/dbus/dbus-arch-deps.h.cmake new file mode 100644 index 00000000..0389da1e --- /dev/null +++ b/cmake/dbus/dbus-arch-deps.h.cmake @@ -0,0 +1,56 @@ +/* -*- mode: C; c-file-style: "gnu" -*- */ +/* dbus-arch-deps.h Header with architecture/compiler specific information, installed to libdir + * + * Copyright (C) 2003 Red Hat, Inc. + * + * Licensed under the Academic Free License version 2.0 + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + */ +#if !defined (DBUS_INSIDE_DBUS_H) && !defined (DBUS_COMPILATION) +#error "Only <dbus/dbus.h> can be included directly, this file may disappear or change contents." +#endif + +#ifndef DBUS_ARCH_DEPS_H +#define DBUS_ARCH_DEPS_H + +#include <dbus/dbus-macros.h> + +DBUS_BEGIN_DECLS; + +#cmakedefine DBUS_HAVE_INT64 1 +#if DBUS_HAVE_INT64 +typedef @DBUS_INT64_TYPE@ dbus_int64_t; +typedef unsigned @DBUS_INT64_TYPE@ dbus_uint64_t; + +#define DBUS_INT64_CONSTANT(val) (val##LL) +#define DBUS_UINT64_CONSTANT(val) (val##ULL) + +#else +#undef DBUS_HAVE_INT64 +#undef DBUS_INT64_CONSTANT +#undef DBUS_UINT64_CONSTANT +#endif + +typedef @DBUS_INT32_TYPE@ dbus_int32_t; +typedef unsigned @DBUS_INT32_TYPE@ dbus_uint32_t; + +typedef @DBUS_INT16_TYPE@ dbus_int16_t; +typedef unsigned @DBUS_INT16_TYPE@ dbus_uint16_t; + +DBUS_END_DECLS; + +#endif /* DBUS_ARCH_DEPS_H */ diff --git a/cmake/modules/CPackInstallConfig.cmake b/cmake/modules/CPackInstallConfig.cmake new file mode 100644 index 00000000..f8073a25 --- /dev/null +++ b/cmake/modules/CPackInstallConfig.cmake @@ -0,0 +1,44 @@ + +if (DBUS_INSTALL_SYSTEM_LIBS) + if (MINGW) + if (DBUS_USE_EXPAT) + # expat + install_files(/bin FILES ${LIBEXPAT_LIBRARIES}) + else (DBUS_USE_EXPAT) + # xml2 + install_files(/bin FILES ${LIBXML2_LIBRARIES}) + install_files(/bin FILES ${LIBICONV_LIBRARIES}) + endif (DBUS_USE_EXPAT) + else (MINGW) + INCLUDE(InstallRequiredSystemLibraries) + endif (MINGW) +endif (DBUS_INSTALL_SYSTEM_LIBS) + +SET(CPACK_PACKAGE_DESCRIPTION_SUMMARY "D-BUS For Windows") +SET(CPACK_PACKAGE_VENDOR "D-BUS Windows Team") +SET(CPACK_PACKAGE_DESCRIPTION_FILE "${CMAKE_SOURCE_DIR}/../README") +SET(CPACK_RESOURCE_FILE_LICENSE "${CMAKE_SOURCE_DIR}/../COPYING") +# duplicated from VERSION +SET(CPACK_PACKAGE_VERSION_MAJOR ${VERSION_MAJOR}) +SET(CPACK_PACKAGE_VERSION_MINOR ${VERSION_MINOR}) +SET(CPACK_PACKAGE_VERSION_PATCH ${VERSION_PATCH}) +#SET(CPACK_PACKAGE_INSTALL_DIRECTORY "dbus ${CMake_VERSION_MAJOR}.${CMake_VERSION_MINOR}") +SET(CPACK_PACKAGE_INSTALL_DIRECTORY "dbus") +IF(WIN32 AND NOT UNIX) + SET(CPACK_GENERATOR NSIS ZIP) # can be NSIS, STGZ, TBZ2, TGZ, TZ and ZIP + SET(CPACK_NSIS_COMPRESSOR "/SOLID lzma") + # There is a bug in NSI that does not handle full unix paths properly. Make + # sure there is at least one set of four (4) backlasshes. +# SET(CPACK_PACKAGE_ICON "${CMake_SOURCE_DIR}/Utilities/Release\\\\InstallIcon.bmp") + SET(CPACK_NSIS_INSTALLED_ICON_NAME "bin\\\\dbus-launch.bat") + SET(CPACK_NSIS_DISPLAY_NAME "D-Bus for Windows") + SET(CPACK_NSIS_HELP_LINK "http:\\\\\\\\sourceforge.net/projects/windbus") + SET(CPACK_NSIS_URL_INFO_ABOUT "http:\\\\\\\\sourceforge.net/projects/windbus") + SET(CPACK_NSIS_CONTACT "me@my-personal-home-page.com") + SET(CPACK_NSIS_MODIFY_PATH ON) +ELSE(WIN32 AND NOT UNIX) + SET(CPACK_STRIP_FILES "bin/MyExecutable") + SET(CPACK_SOURCE_STRIP_FILES "") +ENDIF(WIN32 AND NOT UNIX) +SET(CPACK_PACKAGE_EXECUTABLES "dbus-launch" "D-Bus Daemon") +INCLUDE(CPack) diff --git a/cmake/modules/CheckPrototypeExists.cmake b/cmake/modules/CheckPrototypeExists.cmake new file mode 100644 index 00000000..da319f13 --- /dev/null +++ b/cmake/modules/CheckPrototypeExists.cmake @@ -0,0 +1,35 @@ +# - Check if the prototype for a function exists. +# CHECK_PROTOTYPE_EXISTS (FUNCTION HEADER VARIABLE) +# +# FUNCTION - the name of the function you are looking for +# HEADER - the header(s) where the prototype should be declared +# VARIABLE - variable to store the result +# +# The following variables may be set before calling this macro to +# modify the way the check is run: +# +# CMAKE_REQUIRED_FLAGS = string of compile command line flags +# CMAKE_REQUIRED_DEFINITIONS = list of macros to define (-DFOO=bar) +# CMAKE_REQUIRED_INCLUDES = list of include directories + +INCLUDE(CheckCXXSourceCompiles) + +MACRO (CHECK_PROTOTYPE_EXISTS _SYMBOL _HEADER _RESULT) + SET(_INCLUDE_FILES) + FOREACH (it ${_HEADER}) + SET(_INCLUDE_FILES "${_INCLUDE_FILES}#include <${it}>\n") + ENDFOREACH (it) + + SET(_CHECK_PROTO_EXISTS_SOURCE_CODE " +${_INCLUDE_FILES} +int main() +{ +#ifndef ${_SYMBOL} + int i = sizeof(&${_SYMBOL}); +#endif + return 0; +} +") + CHECK_CXX_SOURCE_COMPILES("${_CHECK_PROTO_EXISTS_SOURCE_CODE}" ${_RESULT}) +ENDMACRO (CHECK_PROTOTYPE_EXISTS _SYMBOL _HEADER _RESULT) + diff --git a/cmake/modules/CheckStructMember.cmake b/cmake/modules/CheckStructMember.cmake new file mode 100644 index 00000000..fd5d3461 --- /dev/null +++ b/cmake/modules/CheckStructMember.cmake @@ -0,0 +1,36 @@ +# - Check if the given struct or class has the specified member variable +# CHECK_STRUCT_MEMBER (STRUCT MEMBER HEADER VARIABLE) +# +# STRUCT - the name of the struct or class you are interested in +# MEMBER - the member which existence you want to check +# HEADER - the header(s) where the prototype should be declared +# VARIABLE - variable to store the result +# +# The following variables may be set before calling this macro to +# modify the way the check is run: +# +# CMAKE_REQUIRED_FLAGS = string of compile command line flags +# CMAKE_REQUIRED_DEFINITIONS = list of macros to define (-DFOO=bar) +# CMAKE_REQUIRED_INCLUDES = list of include directories + +INCLUDE(CheckCXXSourceCompiles) + +MACRO (CHECK_STRUCT_MEMBER _STRUCT _MEMBER _HEADER _RESULT) + SET(_INCLUDE_FILES) + FOREACH (it ${_HEADER}) + SET(_INCLUDE_FILES "${_INCLUDE_FILES}#include <${it}>\n") + ENDFOREACH (it) + + SET(_CHECK_STRUCT_MEMBER_SOURCE_CODE " +${_INCLUDE_FILES} +int main() +{ + ${_STRUCT}* tmp; + tmp->${_MEMBER}; + return 0; +} +") + CHECK_CXX_SOURCE_COMPILES("${_CHECK_STRUCT_MEMBER_SOURCE_CODE}" ${_RESULT}) + +ENDMACRO (CHECK_STRUCT_MEMBER) + diff --git a/cmake/modules/FindGLIB.cmake b/cmake/modules/FindGLIB.cmake new file mode 100644 index 00000000..1fdaee95 --- /dev/null +++ b/cmake/modules/FindGLIB.cmake @@ -0,0 +1,42 @@ +# - Try to find the GLIB library +# Once done this will define +# +# GLIB_FOUND - system has GLIB +# GLIB_INCLUDES - the GLIB include directories +# GLIB_LIBRARIES - The libraries needed to use GLIB + +if (WIN32) + +INCLUDE(MacroGetenvWinPath) + +MACRO_GETENV_WIN_PATH(_program_FILES_DIR PROGRAMFILES) + +FIND_PATH(GLIB_INCLUDE_DIR glib.h + ${_program_FILES_DIR}/glib/include/glib-2.0 +) + + +# search for GLIB in the default install directory for applications (default of (n)make install) +FIND_LIBRARY(GLIB_LIBRARY NAMES glib-2.0 + PATHS + ${_program_FILES_DIR}/glib/lib +) + +if (GLIB_LIBRARY AND GLIB_INCLUDE_DIR) + set(GLIB_FOUND TRUE) + set(CMAKE_INCLUDE_PATH ${CMAKE_INCLUDE_PATH} ${GLIB_INCLUDES}) + set(CMAKE_LIBRARY_PATH ${CMAKE_LIBRARY_PATH} ${GLIB_LIBRARIES}) + +endif (GLIB_LIBRARY AND GLIB_INCLUDE_DIR) + +if (GLIB_FOUND) + if (NOT GLIB_FIND_QUIETLY) + message(STATUS "Found GLIB: ${GLIB_LIBRARY}") + endif (NOT GLIB_FIND_QUIETLY) +else (GLIB_FOUND) + if (GLIB_FIND_REQUIRED) + message(FATAL_ERROR "Could NOT find GLIB library") + endif (GLIB_FIND_REQUIRED) +endif (GLIB_FOUND) + +endif (WIN32) diff --git a/cmake/modules/FindGNUWIN32.cmake b/cmake/modules/FindGNUWIN32.cmake new file mode 100644 index 00000000..4a2c6adc --- /dev/null +++ b/cmake/modules/FindGNUWIN32.cmake @@ -0,0 +1,42 @@ +if (WIN32) + +# check if GNUWIN32_DIR is already set +# (e.g. by command line argument or the calling script) +if(NOT GNUWIN32_DIR) + # check for enviroment variable + file(TO_CMAKE_PATH "$ENV{GNUWIN32_DIR}" GNUWIN32_DIR) + if(NOT GNUWIN32_DIR) + # search in the default program install folder + file(TO_CMAKE_PATH "$ENV{PROGRAMFILES}" _progFiles) + find_file(GNUWIN32_DIR_tmp gnuwin32 win32libs + PATHS + "${_progFiles}" + "C:/" "D:/" "E:/" "F:/" "G:/" + ) + set(GNUWIN32_DIR ${GNUWIN32_DIR_tmp}) + endif(NOT GNUWIN32_DIR) +endif(NOT GNUWIN32_DIR) + +if (GNUWIN32_DIR) + set(GNUWIN32_INCLUDE_DIR ${GNUWIN32_DIR}/include) + set(GNUWIN32_LIBRARY_DIR ${GNUWIN32_DIR}/lib) + set(GNUWIN32_BINARY_DIR ${GNUWIN32_DIR}/bin) + set(CMAKE_INCLUDE_PATH ${CMAKE_INCLUDE_PATH} ${GNUWIN32_INCLUDE_DIR}) + set(CMAKE_LIBRARY_PATH ${CMAKE_LIBRARY_PATH} ${GNUWIN32_LIBRARY_DIR}) + set(GNUWIN32_FOUND TRUE) +else (GNUWIN32_DIR) + set(GNUWIN32_FOUND) +endif (GNUWIN32_DIR) + +if (GNUWIN32_FOUND) + if (NOT GNUWIN32_FIND_QUIETLY) + message(STATUS "Found GNUWIN32: ${GNUWIN32_DIR}") + endif (NOT GNUWIN32_FIND_QUIETLY) +else (GNUWIN32_FOUND) + if (GNUWIN32_FIND_REQUIRED) + message(SEND_ERROR "Could NOT find GNUWIN32") + endif (GNUWIN32_FIND_REQUIRED) +endif (GNUWIN32_FOUND) + +endif (WIN32) + diff --git a/cmake/modules/FindKDEWIN32.cmake b/cmake/modules/FindKDEWIN32.cmake new file mode 100644 index 00000000..eb0bfbbf --- /dev/null +++ b/cmake/modules/FindKDEWIN32.cmake @@ -0,0 +1,84 @@ +# - Try to find the KDEWIN32 library +# Once done this will define +# +# KDEWIN32_FOUND - system has KDEWIN32 +# KDEWIN32_INCLUDES - the KDEWIN32 include directories +# KDEWIN32_LIBRARIES - The libraries needed to use KDEWIN32 + +if (WIN32) + +INCLUDE(MacroGetenvWinPath) + +MACRO_GETENV_WIN_PATH(_program_FILES_DIR PROGRAMFILES) + +IF(NOT QT4_FOUND) +FIND_PACKAGE(Qt4 REQUIRED) +ENDIF(NOT QT4_FOUND) + +FIND_PATH(KDEWIN32_INCLUDE_DIR winposix_export.h + ${_program_FILES_DIR}/kdewin32/include +) + + +# at first find the kdewin32 library, this has to be compiled and installed before kdelibs/ +# search for kdewin32 in the default install directory for applications (default of (n)make install) + +FIND_LIBRARY(KDEWIN32_LIBRARY_RELEASE NAMES kdewin32 + PATHS + ${_program_FILES_DIR}/kdewin32/lib +) + +# msvc makes a difference between debug and release +if(MSVC) + FIND_LIBRARY(KDEWIN32_LIBRARY_DEBUG NAMES kdewin32d + PATHS + ${_program_FILES_DIR}/kdewin32/lib + ) + if(MSVC_IDE) + # the ide needs the debug and release version + if( NOT KDEWIN32_LIBRARY_DEBUG OR NOT KDEWIN32_LIBRARY_RELEASE) + message(FATAL_ERROR "\nCould NOT find the debug AND release version of the KDEWIN32 library.\nYou need to have both to use MSVC projects.\nPlease build and install both kdelibs/win/ libraries first.\n") + endif( NOT KDEWIN32_LIBRARY_DEBUG OR NOT KDEWIN32_LIBRARY_RELEASE) + SET(KDEWIN32_LIBRARY optimized ${KDEWIN32_LIBRARY_RELEASE} debug ${KDEWIN32_LIBRARY_DEBUG}) + else(MSVC_IDE) + STRING(TOLOWER ${CMAKE_BUILD_TYPE} CMAKE_BUILD_TYPE_TOLOWER) + if(CMAKE_BUILD_TYPE_TOLOWER MATCHES debug) + set(KDEWIN32_LIBRARY ${KDEWIN32_LIBRARY_DEBUG}) + else(CMAKE_BUILD_TYPE_TOLOWER MATCHES debug) + set(KDEWIN32_LIBRARY ${KDEWIN32_LIBRARY_RELEASE}) + endif(CMAKE_BUILD_TYPE_TOLOWER MATCHES debug) + endif(MSVC_IDE) +else(MSVC) + set(KDEWIN32_LIBRARY ${KDEWIN32_LIBRARY_RELEASE}) +endif(MSVC) + +# kdelibs/win/ has to be built before the rest of kdelibs/ +# eventually it will be moved out from kdelibs/ +if (KDEWIN32_LIBRARY AND KDEWIN32_INCLUDE_DIR) + set(KDEWIN32_FOUND TRUE) + # add the winsock2 library, using find_library or something like this would probably be better + set(KDEWIN32_LIBRARIES ${KDEWIN32_LIBRARY} user32 shell32 ws2_32) + + if (MINGW) + #mingw compiler + set(KDEWIN32_INCLUDES ${KDEWIN32_INCLUDE_DIR} ${KDEWIN32_INCLUDE_DIR}/mingw ${QT_INCLUDES}) + else (MINGW) + # msvc compiler + # add the MS SDK include directory if available + MACRO_GETENV_WIN_PATH(MSSDK_DIR MSSDK) + set(KDEWIN32_INCLUDES ${KDEWIN32_INCLUDE_DIR} ${KDEWIN32_INCLUDE_DIR}/msvc ${QT_INCLUDES} ${MSSDK_DIR}) + endif (MINGW) + +endif (KDEWIN32_LIBRARY AND KDEWIN32_INCLUDE_DIR) + +if (KDEWIN32_FOUND) + if (NOT KDEWIN32_FIND_QUIETLY) + message(STATUS "Found KDEWIN32: ${KDEWIN32_LIBRARY}") + endif (NOT KDEWIN32_FIND_QUIETLY) +else (KDEWIN32_FOUND) + if (KDEWIN32_FIND_REQUIRED) + message(FATAL_ERROR "Could NOT find KDEWIN32 library\nPlease build and install kdelibs/win/ first") + endif (KDEWIN32_FIND_REQUIRED) +endif (KDEWIN32_FOUND) + +endif (WIN32) diff --git a/cmake/modules/FindLibExpat.cmake b/cmake/modules/FindLibExpat.cmake new file mode 100644 index 00000000..155083b5 --- /dev/null +++ b/cmake/modules/FindLibExpat.cmake @@ -0,0 +1,51 @@ +# - Try to find LIBEXPAT +# Once done this will define +# +# LIBEXPAT_FOUND - system has LIBEXPAT +# LIBEXPAT_INCLUDE_DIR - the LIBEXPAT include directory +# LIBEXPAT_LIBRARIES - the libraries needed to use LIBEXPAT +# LIBEXPAT_DEFINITIONS - Compiler switches required for using LIBEXPAT + +if (LIBEXPAT_INCLUDE_DIR AND LIBEXPAT_LIBRARIES) + + # in cache already + SET(LIBEXPAT_FOUND TRUE) + +else (LIBEXPAT_INCLUDE_DIR AND LIBEXPAT_LIBRARIES) + + IF (NOT WIN32) + # use pkg-config to get the directories and then use these values + # in the FIND_PATH() and FIND_LIBRARY() calls + INCLUDE(UsePkgConfig) + PKGCONFIG(LIBEXPAT-2.0 _LIBEXPATIncDir _LIBEXPATLinkDir _LIBEXPATLinkFlags _LiIconvCflags) + SET(LIBEXPAT_DEFINITIONS ${_LIBEXPATCflags}) + ENDIF (NOT WIN32) + + FIND_PATH(LIBEXPAT_INCLUDE_DIR expat.h + PATHS + ${_LIBEXPATIncDir} + PATH_SUFFIXES LIBEXPAT + ) + + FIND_LIBRARY(LIBEXPAT_LIBRARIES NAMES expat libexpat + PATHS + ${_LIBEXPATLinkDir} + ) + + if (LIBEXPAT_INCLUDE_DIR AND LIBEXPAT_LIBRARIES) + set(LIBEXPAT_FOUND TRUE) + endif (LIBEXPAT_INCLUDE_DIR AND LIBEXPAT_LIBRARIES) + + if (LIBEXPAT_FOUND) + if (NOT LIBEXPAT_FIND_QUIETLY) + message(STATUS "Found libexpat: ${LIBEXPAT_LIBRARIES}") + endif (NOT LIBEXPAT_FIND_QUIETLY) + else (LIBEXPAT_FOUND) + if (LIBEXPAT_FIND_REQUIRED) + message(SEND_ERROR "Could NOT find libexpat") + endif (LIBEXPAT_FIND_REQUIRED) + endif (LIBEXPAT_FOUND) + + MARK_AS_ADVANCED(LIBEXPAT_INCLUDE_DIR LIBEXPAT_LIBRARIES) + +endif (LIBEXPAT_INCLUDE_DIR AND LIBEXPAT_LIBRARIES) diff --git a/cmake/modules/FindLibIconv.cmake b/cmake/modules/FindLibIconv.cmake new file mode 100644 index 00000000..dac63449 --- /dev/null +++ b/cmake/modules/FindLibIconv.cmake @@ -0,0 +1,52 @@ +# - Try to find LibIconv +# Once done this will define +# +# LIBICONV_FOUND - system has LibIconv +# LIBICONV_INCLUDE_DIR - the LibIconv include directory +# LIBICONV_LIBRARIES - the libraries needed to use LibIconv +# LIBICONV_DEFINITIONS - Compiler switches required for using LibIconv + +if (LIBICONV_INCLUDE_DIR AND LIBICONV_LIBRARIES) + + # in cache already + SET(LIBICONV_FOUND TRUE) + +else (LIBICONV_INCLUDE_DIR AND LIBICONV_LIBRARIES) + + IF (NOT WIN32) + MESSAGE(FATAL_ERROR "Please set this to the correct values!") + # use pkg-config to get the directories and then use these values + # in the FIND_PATH() and FIND_LIBRARY() calls + INCLUDE(UsePkgConfig) + PKGCONFIG(libiconv-1.9 _LibIconvIncDir _LibIconvLinkDir _LibIconvLinkFlags _LiIconvCflags) + SET(LIBICONV_DEFINITIONS ${_LibIconvCflags}) + ENDIF (NOT WIN32) + + FIND_PATH(LIBICONV_INCLUDE_DIR iconv.h + PATHS + ${_LibIconvIncDir} + PATH_SUFFIXES libiconv + ) + + FIND_LIBRARY(LIBICONV_LIBRARIES NAMES iconv libiconv + PATHS + ${_LibIconvLinkDir} + ) + + if (LIBICONV_INCLUDE_DIR AND LIBICONV_LIBRARIES) + set(LIBICONV_FOUND TRUE) + endif (LIBICONV_INCLUDE_DIR AND LIBICONV_LIBRARIES) + + if (LIBICONV_FOUND) + if (NOT LibIconv_FIND_QUIETLY) + message(STATUS "Found LibIconv: ${LIBICONV_LIBRARIES}") + endif (NOT LibIconv_FIND_QUIETLY) + else (LIBICONV_FOUND) + if (LibIconv_FIND_REQUIRED) + message(SEND_ERROR "Could NOT find LibIconv") + endif (LibIconv_FIND_REQUIRED) + endif (LIBICONV_FOUND) + + MARK_AS_ADVANCED(LIBICONV_INCLUDE_DIR LIBICONV_LIBRARIES) + +endif (LIBICONV_INCLUDE_DIR AND LIBICONV_LIBRARIES) diff --git a/cmake/modules/FindQt4.cmake b/cmake/modules/FindQt4.cmake new file mode 100644 index 00000000..17d19a03 --- /dev/null +++ b/cmake/modules/FindQt4.cmake @@ -0,0 +1,1036 @@ +# - Find QT 4 +# This module can be used to find Qt4. +# The most important issue is that the Qt4 qmake is available via the system path. +# This qmake is then used to detect basically everything else. +# This module defines a number of key variables and macros. First is +# QT_USE_FILE which is the path to a CMake file that can be included to compile +# Qt 4 applications and libraries. By default, the QtCore and QtGui +# libraries are loaded. This behavior can be changed by setting one or more +# of the following variables to true: +# QT_DONT_USE_QTCORE +# QT_DONT_USE_QTGUI +# QT_USE_QT3SUPPORT +# QT_USE_QTASSISTANT +# QT_USE_QTDESIGNER +# QT_USE_QTMOTIF +# QT_USE_QTMAIN +# QT_USE_QTNETWORK +# QT_USE_QTNSPLUGIN +# QT_USE_QTOPENGL +# QT_USE_QTSQL +# QT_USE_QTXML +# All the libraries required are stored in a variable called QT_LIBRARIES. +# Add this variable to your TARGET_LINK_LIBRARIES. +# +# macro QT4_WRAP_CPP(outfiles inputfile ... ) +# macro QT4_WRAP_UI(outfiles inputfile ... ) +# macro QT4_ADD_RESOURCE(outfiles inputfile ... ) +# macro QT4_AUTOMOC(inputfile ... ) +# macro QT4_GENERATE_MOC(inputfile outputfile ) +# +# macro QT4_ADD_DBUS_INTERFACE(outfiles interface basename) +# create a the interface header and implementation files with the +# given basename from the given interface xml file and add it to +# the list of sources +# +# macro QT4_ADD_DBUS_INTERFACES(outfiles inputfile ... ) +# create the interface header and implementation files +# for all listed interface xml files +# the name will be automatically determined from the name of the xml file +# +# macro QT4_ADD_DBUS_ADAPTOR(outfiles xmlfile parentheader parentclassname [basename] ) +# create a dbus adaptor (header and implementation file) from the xml file +# describing the interface, and add it to the list of sources. The adaptor +# forwards the calls to a parent class, defined in parentheader and named +# parentclassname. The name of the generated files will be +# <basename>adaptor.{cpp,h} where basename is the basename of the xml file. +# +# macro QT4_GENERATE_DBUS_INTERFACE( header) +# generate the xml interface file from the given header +# +# QT_FOUND If false, don't try to use Qt. +# QT4_FOUND If false, don't try to use Qt 4. +# +# QT_QTCORE_FOUND True if QtCore was found. +# QT_QTGUI_FOUND True if QtGui was found. +# QT_QT3SUPPORT_FOUND True if Qt3Support was found. +# QT_QTASSISTANT_FOUND True if QtAssistant was found. +# QT_QTDBUS_FOUND True if QtDBus was found. +# QT_QTDESIGNER_FOUND True if QtDesigner was found. +# QT_QTMOTIF_FOUND True if QtMotif was found. +# QT_QTNETWORK_FOUND True if QtNetwork was found. +# QT_QTNSPLUGIN_FOUND True if QtNsPlugin was found. +# QT_QTOPENGL_FOUND True if QtOpenGL was found. +# QT_QTSQL_FOUND True if QtSql was found. +# QT_QTXML_FOUND True if QtXml was found. +# QT_QTSVG_FOUND True if QtSvg was found. +# QT_QTTEST_FOUND True if QtTest was found. +# +# QT_DEFINITIONS Definitions to use when compiling code that uses Qt. +# +# QT_INCLUDES List of paths to all include directories of +# Qt4 QT_INCLUDE_DIR and QT_QTCORE_INCLUDE_DIR are +# always in this variable even if NOTFOUND, +# all other INCLUDE_DIRS are +# only added if they are found. +# +# QT_INCLUDE_DIR Path to "include" of Qt4 +# QT_QT_INCLUDE_DIR Path to "include/Qt" +# QT_QT3SUPPORT_INCLUDE_DIR Path to "include/Qt3Support" +# QT_QTASSISTANT_INCLUDE_DIR Path to "include/QtAssistant" +# QT_QTCORE_INCLUDE_DIR Path to "include/QtCore" +# QT_QTDESIGNER_INCLUDE_DIR Path to "include/QtDesigner" +# QT_QTDBUS_INCLUDE_DIR Path to "include/QtDBus" +# QT_QTGUI_INCLUDE_DIR Path to "include/QtGui" +# QT_QTMOTIF_INCLUDE_DIR Path to "include/QtMotif" +# QT_QTNETWORK_INCLUDE_DIR Path to "include/QtNetwork" +# QT_QTNSPLUGIN_INCLUDE_DIR Path to "include/QtNsPlugin" +# QT_QTOPENGL_INCLUDE_DIR Path to "include/QtOpenGL" +# QT_QTSQL_INCLUDE_DIR Path to "include/QtSql" +# QT_QTXML_INCLUDE_DIR Path to "include/QtXml" +# QT_QTSVG_INCLUDE_DIR Path to "include/QtSvg" +# QT_QTTEST_INCLUDE_DIR Path to "include/QtTest" +# +# QT_LIBRARY_DIR Path to "lib" of Qt4 +# +# For every library of Qt there are three variables: +# QT_QTFOO_LIBRARY_RELEASE, which contains the full path to the release version +# QT_QTFOO_LIBRARY_DEBUG, which contains the full path to the debug version +# QT_QTFOO_LIBRARY, the full path to the release version if available, otherwise to the debug version +# +# So there are the following variables: +# The Qt3Support library: QT_QT3SUPPORT_LIBRARY +# QT_QT3SUPPORT_LIBRARY_RELEASE +# QT_QT3SUPPORT_DEBUG +# +# The QtAssistant library: QT_QTASSISTANT_LIBRARY +# QT_QTASSISTANT_LIBRARY_RELEASE +# QT_QTASSISTANT_LIBRARY_DEBUG +# +# The QtCore library: QT_QTCORE_LIBRARY +# QT_QTCORE_LIBRARY_RELEASE +# QT_QTCORE_LIBRARY_DEBUG +# +# The QtDBus library: QT_QTDBUS_LIBRARY +# QT_QTDBUS_LIBRARY_RELEASE +# QT_QTDBUS_LIBRARY_DEBUG +# +# The QtDesigner library: QT_QTDESIGNER_LIBRARY +# QT_QTDESIGNER_LIBRARY_RELEASE +# QT_QTDESIGNER_LIBRARY_DEBUG +# +# The QtGui library: QT_QTGUI_LIBRARY +# QT_QTGUI_LIBRARY_RELEASE +# QT_QTGUI_LIBRARY_DEBUG +# +# The QtMotif library: QT_QTMOTIF_LIBRARY +# QT_QTMOTIF_LIBRARY_RELEASE +# QT_QTMOTIF_LIBRARY_DEBUG +# +# The QtNetwork library: QT_QTNETWORK_LIBRARY +# QT_QTNETWORK_LIBRARY_RELEASE +# QT_QTNETWORK_LIBRARY_DEBUG +# +# The QtNsPLugin library: QT_QTNSPLUGIN_LIBRARY +# QT_QTNSPLUGIN_LIBRARY_RELEASE +# QT_QTNSPLUGIN_LIBRARY_DEBUG +# +# The QtOpenGL library: QT_QTOPENGL_LIBRARY +# QT_QTOPENGL_LIBRARY_RELEASE +# QT_QTOPENGL_LIBRARY_DEBUG +# +# The QtSql library: QT_QTSQL_LIBRARY +# QT_QTSQL_LIBRARY_RELEASE +# QT_QTSQL_LIBRARY_DEBUG +# +# The QtXml library: QT_QTXML_LIBRARY +# QT_QTXML_LIBRARY_RELEASE +# QT_QTXML_LIBRARY_DEBUG +# +# The QtSvg library: QT_QTSVG_LIBRARY +# QT_QTSVG_LIBRARY_RELEASE +# QT_QTSVG_LIBRARY_DEBUG +# +# The QtTest library: QT_QTTEST_LIBRARY +# QT_QTTEST_LIBRARY_RELEASE +# QT_QTTEST_LIBRARY_DEBUG +# +# The qtmain library for Windows QT_QTMAIN_LIBRARY +# QT_QTMAIN_LIBRARY_RELEASE +# QT_QTMAIN_LIBRARY_DEBUG +# +#The QtUiTools library: QT_QTUITOOLS_LIBRARY +# QT_QTUITOOLS_LIBRARY_RELEASE +# QT_QTUITOOLS_LIBRARY_DEBUG +# +# also defined, but NOT for general use are +# QT_MOC_EXECUTABLE Where to find the moc tool. +# QT_UIC_EXECUTABLE Where to find the uic tool. +# QT_UIC3_EXECUTABLE Where to find the uic3 tool. +# QT_RCC_EXECUTABLE Where to find the rcc tool +# QT_DBUSCPP2XML_EXECUTABLE Where to find the dbuscpp2xml tool. +# QT_DBUSXML2CPP_EXECUTABLE Where to find the dbusxml2cpp tool. +# +# QT_DOC_DIR Path to "doc" of Qt4 +# QT_MKSPECS_DIR Path to "mkspecs" of Qt4 +# +# +# These are around for backwards compatibility +# they will be set +# QT_WRAP_CPP Set true if QT_MOC_EXECUTABLE is found +# QT_WRAP_UI Set true if QT_UIC_EXECUTABLE is found +# +# These variables do _NOT_ have any effect anymore (compared to FindQt.cmake) +# QT_MT_REQUIRED Qt4 is now always multithreaded +# +# These variables are set to "" Because Qt structure changed +# (They make no sense in Qt4) +# QT_QT_LIBRARY Qt-Library is now split + +INCLUDE(CheckSymbolExists) +INCLUDE(MacroAddFileDependencies) + +SET(QT_USE_FILE ${CMAKE_ROOT}/Modules/UseQt4.cmake) + +SET( QT_DEFINITIONS "") + +IF (WIN32) + SET(QT_DEFINITIONS -DQT_DLL) +ENDIF(WIN32) + +# check for qmake +FIND_PROGRAM(QT_QMAKE_EXECUTABLE NAMES qmake qmake-qt4 PATHS + "[HKEY_CURRENT_USER\\Software\\Trolltech\\Qt3Versions\\4.0.0;InstallDir]/bin" + "[HKEY_CURRENT_USER\\Software\\Trolltech\\Versions\\4.0.0;InstallDir]/bin" + $ENV{QTDIR}/bin +) + +SET(QT4_INSTALLED_VERSION_TOO_OLD FALSE) + + +IF (QT_QMAKE_EXECUTABLE) + + SET(QT4_QMAKE_FOUND FALSE) + + EXEC_PROGRAM(${QT_QMAKE_EXECUTABLE} ARGS "-query QT_VERSION" OUTPUT_VARIABLE QTVERSION) + + # check that we found the Qt4 qmake, Qt3 qmake output won't match here + STRING(REGEX MATCH "^[0-9]+\\.[0-9]+\\.[0-9]+" qt_version_tmp "${QTVERSION}") + IF (qt_version_tmp) + + # we need at least version 4.0.0 + IF (NOT QT_MIN_VERSION) + SET(QT_MIN_VERSION "4.0.0") + ENDIF (NOT QT_MIN_VERSION) + + #now parse the parts of the user given version string into variables + STRING(REGEX MATCH "^[0-9]+\\.[0-9]+\\.[0-9]+" req_qt_major_vers "${QT_MIN_VERSION}") + IF (NOT req_qt_major_vers) + MESSAGE( FATAL_ERROR "Invalid Qt version string given: \"${QT_MIN_VERSION}\", expected e.g. \"4.0.1\"") + ENDIF (NOT req_qt_major_vers) + + # now parse the parts of the user given version string into variables + STRING(REGEX REPLACE "^([0-9]+)\\.[0-9]+\\.[0-9]+" "\\1" req_qt_major_vers "${QT_MIN_VERSION}") + STRING(REGEX REPLACE "^[0-9]+\\.([0-9])+\\.[0-9]+" "\\1" req_qt_minor_vers "${QT_MIN_VERSION}") + STRING(REGEX REPLACE "^[0-9]+\\.[0-9]+\\.([0-9]+)" "\\1" req_qt_patch_vers "${QT_MIN_VERSION}") + + IF (NOT req_qt_major_vers EQUAL 4) + MESSAGE( FATAL_ERROR "Invalid Qt version string given: \"${QT_MIN_VERSION}\", major version 4 is required, e.g. \"4.0.1\"") + ENDIF (NOT req_qt_major_vers EQUAL 4) + + # and now the version string given by qmake + STRING(REGEX REPLACE "^([0-9]+)\\.[0-9]+\\.[0-9]+.*" "\\1" found_qt_major_vers "${QTVERSION}") + STRING(REGEX REPLACE "^[0-9]+\\.([0-9])+\\.[0-9]+.*" "\\1" found_qt_minor_vers "${QTVERSION}") + STRING(REGEX REPLACE "^[0-9]+\\.[0-9]+\\.([0-9]+).*" "\\1" found_qt_patch_vers "${QTVERSION}") + + # compute an overall version number which can be compared at once + MATH(EXPR req_vers "${req_qt_major_vers}*10000 + ${req_qt_minor_vers}*100 + ${req_qt_patch_vers}") + MATH(EXPR found_vers "${found_qt_major_vers}*10000 + ${found_qt_minor_vers}*100 + ${found_qt_patch_vers}") + + IF (found_vers LESS req_vers) + SET(QT4_QMAKE_FOUND FALSE) + SET(QT4_INSTALLED_VERSION_TOO_OLD TRUE) + ELSE (found_vers LESS req_vers) + SET(QT4_QMAKE_FOUND TRUE) + ENDIF (found_vers LESS req_vers) + + ENDIF (qt_version_tmp) + +ENDIF (QT_QMAKE_EXECUTABLE) + +IF (QT4_QMAKE_FOUND) + + # ask qmake for the library dir + # Set QT_LIBRARY_DIR + IF (NOT QT_LIBRARY_DIR) + EXEC_PROGRAM( ${QT_QMAKE_EXECUTABLE} + ARGS "-query QT_INSTALL_LIBS" + OUTPUT_VARIABLE QT_LIBRARY_DIR_TMP ) + IF(EXISTS "${QT_LIBRARY_DIR_TMP}") + SET(QT_LIBRARY_DIR ${QT_LIBRARY_DIR_TMP} CACHE PATH "Qt library dir") + ELSE(EXISTS "${QT_LIBRARY_DIR_TMP}") + MESSAGE("Warning: QT_QMAKE_EXECUTABLE reported QT_INSTALL_LIBS as ${QT_LIBRARY_DIR_TMP}") + MESSAGE("Warning: ${QT_LIBRARY_DIR_TMP} does NOT exist, Qt must NOT be installed correctly.") + ENDIF(EXISTS "${QT_LIBRARY_DIR_TMP}") + ENDIF(NOT QT_LIBRARY_DIR) + + IF (APPLE) + IF (EXISTS ${QT_LIBRARY_DIR}/QtCore.framework) + SET(QT_USE_FRAMEWORKS ON + CACHE BOOL "Set to ON if Qt build uses frameworks.") + ELSE (EXISTS ${QT_LIBRARY_DIR}/QtCore.framework) + SET(QT_USE_FRAMEWORKS OFF + CACHE BOOL "Set to ON if Qt build uses frameworks.") + ENDIF (EXISTS ${QT_LIBRARY_DIR}/QtCore.framework) + + MARK_AS_ADVANCED(QT_USE_FRAMEWORKS) + ENDIF (APPLE) + + # ask qmake for the binary dir + IF (NOT QT_BINARY_DIR) + EXEC_PROGRAM(${QT_QMAKE_EXECUTABLE} + ARGS "-query QT_INSTALL_BINS" + OUTPUT_VARIABLE qt_bins ) + SET(QT_BINARY_DIR ${qt_bins} CACHE INTERNAL "") + ENDIF (NOT QT_BINARY_DIR) + + # ask qmake for the include dir + IF (NOT QT_HEADERS_DIR) + EXEC_PROGRAM( ${QT_QMAKE_EXECUTABLE} + ARGS "-query QT_INSTALL_HEADERS" + OUTPUT_VARIABLE qt_headers ) + SET(QT_HEADERS_DIR ${qt_headers} CACHE INTERNAL "") + ENDIF(NOT QT_HEADERS_DIR) + + + # ask qmake for the documentation directory + IF (NOT QT_DOC_DIR) + EXEC_PROGRAM( ${QT_QMAKE_EXECUTABLE} + ARGS "-query QT_INSTALL_DOCS" + OUTPUT_VARIABLE qt_doc_dir ) + SET(QT_DOC_DIR ${qt_doc_dir} CACHE PATH "The location of the Qt docs") + ENDIF (NOT QT_DOC_DIR) + + # ask qmake for the mkspecs directory + IF (NOT QT_MKSPECS_DIR) + EXEC_PROGRAM( ${QT_QMAKE_EXECUTABLE} + ARGS "-query QMAKE_MKSPECS" + OUTPUT_VARIABLE qt_mkspecs_dir ) + SET(QT_MKSPECS_DIR ${qt_mkspecs_dir} CACHE PATH "The location of the Qt mkspecs") + ENDIF (NOT QT_MKSPECS_DIR) + + ######################################## + # + # Setting the INCLUDE-Variables + # + ######################################## + + FIND_PATH(QT_QTCORE_INCLUDE_DIR QtGlobal + "[HKEY_CURRENT_USER\\Software\\Trolltech\\Qt3Versions\\4.0.0;InstallDir]/include/QtCore" + ${QT_HEADERS_DIR}/QtCore + ${QT_LIBRARY_DIR}/QtCore.framework/Headers + $ENV{QTDIR}/include/QtCore + "$ENV{ProgramFiles}/qt/include/Qt" + ) + + # Set QT_INCLUDE_DIR by removine "/QtCore" in the string ${QT_QTCORE_INCLUDE_DIR} + IF( QT_QTCORE_INCLUDE_DIR AND NOT QT_INCLUDE_DIR) + IF (QT_USE_FRAMEWORKS) + SET(QT_INCLUDE_DIR ${QT_HEADERS_DIR}) + ELSE (QT_USE_FRAMEWORKS) + STRING( REGEX REPLACE "/QtCore$" "" qt4_include_dir ${QT_QTCORE_INCLUDE_DIR}) + SET( QT_INCLUDE_DIR ${qt4_include_dir} CACHE PATH "") + ENDIF (QT_USE_FRAMEWORKS) + ENDIF( QT_QTCORE_INCLUDE_DIR AND NOT QT_INCLUDE_DIR) + + IF( NOT QT_INCLUDE_DIR) + IF( NOT Qt4_FIND_QUIETLY AND Qt4_FIND_REQUIRED) + MESSAGE( FATAL_ERROR "Could NOT find QtGlobal header") + ENDIF( NOT Qt4_FIND_QUIETLY AND Qt4_FIND_REQUIRED) + ENDIF( NOT QT_INCLUDE_DIR) + + ############################################# + # + # Find out what window system we're using + # + ############################################# + # Save required includes variable + SET(CMAKE_REQUIRED_INCLUDES_SAVE ${CMAKE_REQUIRED_INCLUDES}) + # Add QT_INCLUDE_DIR to CMAKE_REQUIRED_INCLUDES + SET(CMAKE_REQUIRED_INCLUDES "${CMAKE_REQUIRED_INCLUDES};${QT_INCLUDE_DIR}") + # Check for Window system symbols (note: only one should end up being set) + CHECK_SYMBOL_EXISTS(Q_WS_X11 "QtCore/qglobal.h" Q_WS_X11) + CHECK_SYMBOL_EXISTS(Q_WS_MAC "QtCore/qglobal.h" Q_WS_MAC) + CHECK_SYMBOL_EXISTS(Q_WS_WIN "QtCore/qglobal.h" Q_WS_WIN) + + IF (QT_QTCOPY_REQUIRED) + CHECK_SYMBOL_EXISTS(QT_IS_QTCOPY "QtCore/qglobal.h" QT_KDE_QT_COPY) + IF (NOT QT_IS_QTCOPY) + MESSAGE(FATAL_ERROR "qt-copy is required, but hasn't been found") + ENDIF (NOT QT_IS_QTCOPY) + ENDIF (QT_QTCOPY_REQUIRED) + + # Restore CMAKE_REQUIRED_INCLUDES variable + SET(CMAKE_REQUIRED_INCLUDES ${CMAKE_REQUIRED_INCLUDES_SAVE}) + # + ############################################# + + IF (QT_USE_FRAMEWORKS) + SET(QT_DEFINITIONS ${QT_DEFINITIONS} -F${QT_LIBRARY_DIR} -L${QT_LIBRARY_DIR} ) + ENDIF (QT_USE_FRAMEWORKS) + + # Set QT_QT3SUPPORT_INCLUDE_DIR + FIND_PATH(QT_QT3SUPPORT_INCLUDE_DIR Qt3Support + PATHS + ${QT_INCLUDE_DIR}/Qt3Support + ${QT_LIBRARY_DIR}/Qt3Support.framework/Headers + NO_DEFAULT_PATH + ) + + # Set QT_QT_INCLUDE_DIR + FIND_PATH(QT_QT_INCLUDE_DIR qglobal.h + PATHS + ${QT_INCLUDE_DIR}/Qt + ${QT_LIBRARY_DIR}/QtCore.framework/Headers + NO_DEFAULT_PATH + ) + + # Set QT_QTGUI_INCLUDE_DIR + FIND_PATH(QT_QTGUI_INCLUDE_DIR QtGui + PATHS + ${QT_INCLUDE_DIR}/QtGui + ${QT_LIBRARY_DIR}/QtGui.framework/Headers + NO_DEFAULT_PATH + ) + + # Set QT_QTSVG_INCLUDE_DIR + FIND_PATH(QT_QTSVG_INCLUDE_DIR QtSvg + PATHS + ${QT_INCLUDE_DIR}/QtSvg + ${QT_LIBRARY_DIR}/QtSvg.framework/Headers + NO_DEFAULT_PATH + ) + + # Set QT_QTTEST_INCLUDE_DIR + FIND_PATH(QT_QTTEST_INCLUDE_DIR QtTest + PATHS + ${QT_INCLUDE_DIR}/QtTest + ${QT_LIBRARY_DIR}/QtTest.framework/Headers + NO_DEFAULT_PATH + ) + + # Set QT_QTUITOOLS_INCLUDE_DIR + FIND_PATH(QT_QTUITOOLS_INCLUDE_DIR QtUiTools + PATHS + ${QT_INCLUDE_DIR}/QtUiTools + ${QT_LIBRARY_DIR}/QtUiTools.framework/Headers + NO_DEFAULT_PATH + ) + + + + # Set QT_QTMOTIF_INCLUDE_DIR + IF(Q_WS_X11) + FIND_PATH(QT_QTMOTIF_INCLUDE_DIR QtMotif PATHS ${QT_INCLUDE_DIR}/QtMotif NO_DEFAULT_PATH ) + ENDIF(Q_WS_X11) + + # Set QT_QTNETWORK_INCLUDE_DIR + FIND_PATH(QT_QTNETWORK_INCLUDE_DIR QtNetwork + PATHS + ${QT_INCLUDE_DIR}/QtNetwork + ${QT_LIBRARY_DIR}/QtNetwork.framework/Headers + NO_DEFAULT_PATH + ) + + # Set QT_QTNSPLUGIN_INCLUDE_DIR + FIND_PATH(QT_QTNSPLUGIN_INCLUDE_DIR QtNsPlugin + PATHS + ${QT_INCLUDE_DIR}/QtNsPlugin + ${QT_LIBRARY_DIR}/QtNsPlugin.framework/Headers + NO_DEFAULT_PATH + ) + + # Set QT_QTOPENGL_INCLUDE_DIR + FIND_PATH(QT_QTOPENGL_INCLUDE_DIR QtOpenGL + PATHS + ${QT_INCLUDE_DIR}/QtOpenGL + ${QT_LIBRARY_DIR}/QtOpenGL.framework/Headers + NO_DEFAULT_PATH + ) + + # Set QT_QTSQL_INCLUDE_DIR + FIND_PATH(QT_QTSQL_INCLUDE_DIR QtSql + PATHS + ${QT_INCLUDE_DIR}/QtSql + ${QT_LIBRARY_DIR}/QtSql.framework/Headers + NO_DEFAULT_PATH + ) + + # Set QT_QTXML_INCLUDE_DIR + FIND_PATH(QT_QTXML_INCLUDE_DIR QtXml + PATHS + ${QT_INCLUDE_DIR}/QtXml + ${QT_LIBRARY_DIR}/QtXml.framework/Headers + NO_DEFAULT_PATH + ) + + # Set QT_QTASSISTANT_INCLUDE_DIR + FIND_PATH(QT_QTASSISTANT_INCLUDE_DIR QtAssistant + PATHS + ${QT_INCLUDE_DIR}/QtAssistant + ${QT_HEADERS_DIR}/QtAssistant + NO_DEFAULT_PATH + ) + + # Set QT_QTDESIGNER_INCLUDE_DIR + FIND_PATH(QT_QTDESIGNER_INCLUDE_DIR QDesignerComponents + PATHS + ${QT_INCLUDE_DIR}/QtDesigner + ${QT_HEADERS_DIR}/QtDesigner + NO_DEFAULT_PATH + ) + + # Set QT_QTDBUS_INCLUDE_DIR + FIND_PATH(QT_QTDBUS_INCLUDE_DIR QtDBus + PATHS + ${QT_INCLUDE_DIR}/QtDBus + ${QT_HEADERS_DIR}/QtDBus + NO_DEFAULT_PATH + ) + + # Make variables changeble to the advanced user + MARK_AS_ADVANCED( QT_LIBRARY_DIR QT_INCLUDE_DIR QT_QT_INCLUDE_DIR QT_DOC_DIR) + + # Set QT_INCLUDES + SET( QT_INCLUDES ${QT_INCLUDE_DIR} ${QT_QT_INCLUDE_DIR} ${QT_MKSPECS_DIR}/default ) + + + ######################################## + # + # Setting the LIBRARY-Variables + # + ######################################## + + IF (QT_USE_FRAMEWORKS) + # If FIND_LIBRARY found libraries in Apple frameworks, we would NOT have + # to jump through these hoops. + SET(QT_QTCORE_LIBRARY_RELEASE "-F${QT_LIBRARY_DIR} -framework QtCore" CACHE STRING "The QtCore library.") + SET(QT_QTCORE_LIBRARY_DEBUG "-F${QT_LIBRARY_DIR} -framework QtCore" CACHE STRING "The QtCore library.") + SET(QT_QT3SUPPORT_LIBRARY_RELEASE "-framework Qt3Support" CACHE STRING "The Qt3Support library.") + SET(QT_QT3SUPPORT_LIBRARY_DEBUG "-framework Qt3Support" CACHE STRING "The Qt3Support library.") + SET(QT_QTGUI_LIBRARY_RELEASE "-framework QtGui" CACHE STRING "The QtGui library.") + SET(QT_QTGUI_LIBRARY_DEBUG "-framework QtGui" CACHE STRING "The QtGui library.") + SET(QT_QTNETWORK_LIBRARY_RELEASE "-framework QtNetwork" CACHE STRING "The QtNetwork library.") + SET(QT_QTNETWORK_LIBRARY_DEBUG "-framework QtNetwork" CACHE STRING "The QtNetwork library.") + SET(QT_QTOPENGL_LIBRARY_RELEASE "-framework QtOpenGL" CACHE STRING "The QtOpenGL library.") + SET(QT_QTOPENGL_LIBRARY_DEBUG "-framework QtOpenGL" CACHE STRING "The QtOpenGL library.") + SET(QT_QTSQL_LIBRARY_RELEASE "-framework QtSql" CACHE STRING "The QtSql library.") + SET(QT_QTSQL_LIBRARY_DEBUG "-framework QtSql" CACHE STRING "The QtSql library.") + SET(QT_QTXML_LIBRARY_RELEASE "-framework QtXml" CACHE STRING "The QtXml library.") + SET(QT_QTXML_LIBRARY_DEBUG "-framework QtXml" CACHE STRING "The QtXml library.") + SET(QT_QTSVG_LIBRARY_RELEASE "-framework QtSvg" CACHE STRING "The QtSvg library.") + SET(QT_QTSVG_LIBRARY_DEBUG "-framework QtSvg" CACHE STRING "The QtSvg library.") + SET(QT_QTDBUS_LIBRARY_RELEASE "-framework QtDBus" CACHE STRING "The QtDBus library.") + SET(QT_QTDBUS_LIBRARY_DEBUG "-framework QtDBus" CACHE STRING "The QtDBus library.") + + + # WTF? why don't we have frameworks? :P + SET(QT_QTUITOOLS_LIBRARY_RELEASE "-L${QT_LIBRARY_DIR} -lQtUiTools" CACHE STRING "The QtUiTools library.") + SET(QT_QTUITOOLS_LIBRARY_DEBUG "-L${QT_LIBRARY_DIR} -lQtUiTools" CACHE STRING "The QtUiTools library.") + SET(QT_QTTEST_LIBRARY_RELEASE "-L${QT_LIBRARY_DIR} -lQtTest" CACHE STRING "The QtTest library.") + SET(QT_QTTEST_LIBRARY_DEBUG "-L${QT_LIBRARY_DIR} -lQtTest_debug" CACHE STRING "The QtTest library.") + MARK_AS_ADVANCED(QT_QT3SUPPORT_LIBRARY QT_QTGUI_LIBRARY ) + + ELSE (QT_USE_FRAMEWORKS) + + # Set QT_QTCORE_LIBRARY by searching for a lib with "QtCore." as part of the filename + FIND_LIBRARY(QT_QTCORE_LIBRARY_RELEASE NAMES QtCore QtCore4 PATHS ${QT_LIBRARY_DIR} NO_DEFAULT_PATH ) + FIND_LIBRARY(QT_QTCORE_LIBRARY_DEBUG NAMES QtCore_debug QtCored4 PATHS ${QT_LIBRARY_DIR} NO_DEFAULT_PATH) + + # Set QT_QT3SUPPORT_LIBRARY + FIND_LIBRARY(QT_QT3SUPPORT_LIBRARY_RELEASE NAMES Qt3Support Qt3Support4 PATHS ${QT_LIBRARY_DIR} NO_DEFAULT_PATH) + FIND_LIBRARY(QT_QT3SUPPORT_LIBRARY_DEBUG NAMES Qt3Support_debug Qt3Supportd4 PATHS ${QT_LIBRARY_DIR} NO_DEFAULT_PATH) + + # Set QT_QTGUI_LIBRARY + FIND_LIBRARY(QT_QTGUI_LIBRARY_RELEASE NAMES QtGui QtGui4 PATHS ${QT_LIBRARY_DIR} NO_DEFAULT_PATH) + FIND_LIBRARY(QT_QTGUI_LIBRARY_DEBUG NAMES QtGui_debug QtGuid4 PATHS ${QT_LIBRARY_DIR} NO_DEFAULT_PATH) + + # Set QT_QTMOTIF_LIBRARY + IF(Q_WS_X11) + FIND_LIBRARY(QT_QTMOTIF_LIBRARY_RELEASE NAMES QtMotif PATHS ${QT_LIBRARY_DIR} NO_DEFAULT_PATH) + FIND_LIBRARY(QT_QTMOTIF_LIBRARY_DEBUG NAMES QtMotif_debug PATHS ${QT_LIBRARY_DIR} NO_DEFAULT_PATH) + ENDIF(Q_WS_X11) + + # Set QT_QTNETWORK_LIBRARY + FIND_LIBRARY(QT_QTNETWORK_LIBRARY_RELEASE NAMES QtNetwork QtNetwork4 PATHS ${QT_LIBRARY_DIR} NO_DEFAULT_PATH) + FIND_LIBRARY(QT_QTNETWORK_LIBRARY_DEBUG NAMES QtNetwork_debug QtNetworkd4 PATHS ${QT_LIBRARY_DIR} NO_DEFAULT_PATH) + + # Set QT_QTNSPLUGIN_LIBRARY + FIND_LIBRARY(QT_QTNSPLUGIN_LIBRARY_RELEASE NAMES QtNsPlugin PATHS ${QT_LIBRARY_DIR} NO_DEFAULT_PATH) + FIND_LIBRARY(QT_QTNSPLUGIN_LIBRARY_DEBUG NAMES QtNsPlugin_debug PATHS ${QT_LIBRARY_DIR} NO_DEFAULT_PATH) + + # Set QT_QTOPENGL_LIBRARY + FIND_LIBRARY(QT_QTOPENGL_LIBRARY_RELEASE NAMES QtOpenGL QtOpenGL4 PATHS ${QT_LIBRARY_DIR} NO_DEFAULT_PATH) + FIND_LIBRARY(QT_QTOPENGL_LIBRARY_DEBUG NAMES QtOpenGL_debug QtOpenGLd4 PATHS ${QT_LIBRARY_DIR} NO_DEFAULT_PATH) + + # Set QT_QTSQL_LIBRARY + FIND_LIBRARY(QT_QTSQL_LIBRARY_RELEASE NAMES QtSql QtSql4 PATHS ${QT_LIBRARY_DIR} NO_DEFAULT_PATH) + FIND_LIBRARY(QT_QTSQL_LIBRARY_DEBUG NAMES QtSql_debug QtSqld4 PATHS ${QT_LIBRARY_DIR} NO_DEFAULT_PATH) + + # Set QT_QTXML_LIBRARY + FIND_LIBRARY(QT_QTXML_LIBRARY_RELEASE NAMES QtXml QtXml4 PATHS ${QT_LIBRARY_DIR} NO_DEFAULT_PATH) + FIND_LIBRARY(QT_QTXML_LIBRARY_DEBUG NAMES QtXml_debug QtXmld4 PATHS ${QT_LIBRARY_DIR} NO_DEFAULT_PATH) + + # Set QT_QTSVG_LIBRARY + FIND_LIBRARY(QT_QTSVG_LIBRARY_RELEASE NAMES QtSvg QtSvg4 PATHS ${QT_LIBRARY_DIR} NO_DEFAULT_PATH) + FIND_LIBRARY(QT_QTSVG_LIBRARY_DEBUG NAMES QtSvg_debug QtSvgd4 PATHS ${QT_LIBRARY_DIR} NO_DEFAULT_PATH) + + # Set QT_QTUITOOLS_LIBRARY + FIND_LIBRARY(QT_QTUITOOLS_LIBRARY_RELEASE NAMES QtUiTools QtUiTools4 PATHS ${QT_LIBRARY_DIR} NO_DEFAULT_PATH) + FIND_LIBRARY(QT_QTUITOOLS_LIBRARY_DEBUG NAMES QtUiTools_debug QtUiToolsd4 PATHS ${QT_LIBRARY_DIR} NO_DEFAULT_PATH) + + # Set QT_QTTEST_LIBRARY + FIND_LIBRARY(QT_QTTEST_LIBRARY_RELEASE NAMES QtTest QtTest4 PATHS ${QT_LIBRARY_DIR} NO_DEFAULT_PATH) + FIND_LIBRARY(QT_QTTEST_LIBRARY_DEBUG NAMES QtTest_debug QtTest_debug4 QtTestd4 PATHS ${QT_LIBRARY_DIR} NO_DEFAULT_PATH) + + FIND_LIBRARY(QT_QTDBUS_LIBRARY_RELEASE NAMES QtDBus QtDBus4 PATHS ${QT_LIBRARY_DIR} NO_DEFAULT_PATH) + FIND_LIBRARY(QT_QTDBUS_LIBRARY_DEBUG NAMES QtDBus_debug QtDBus_debug4 QtDBusd4 PATHS ${QT_LIBRARY_DIR} NO_DEFAULT_PATH) + + MARK_AS_ADVANCED(QT_QT3SUPPORT_LIBRARY QT_QTGUI_LIBRARY ) + + ENDIF (QT_USE_FRAMEWORKS) + + IF( NOT QT_QTCORE_LIBRARY_DEBUG AND NOT QT_QTCORE_LIBRARY_RELEASE ) + IF( NOT Qt4_FIND_QUIETLY AND Qt4_FIND_REQUIRED) + MESSAGE( FATAL_ERROR "Could NOT find QtCore. Check CMakeFiles/CMakeError.log for more details.") + ENDIF( NOT Qt4_FIND_QUIETLY AND Qt4_FIND_REQUIRED) + ENDIF( NOT QT_QTCORE_LIBRARY_DEBUG AND NOT QT_QTCORE_LIBRARY_RELEASE ) + + # Set QT_QTASSISTANT_LIBRARY + FIND_LIBRARY(QT_QTASSISTANT_LIBRARY_RELEASE NAMES QtAssistantClient QtAssistant QtAssistant4 PATHS ${QT_LIBRARY_DIR} NO_DEFAULT_PATH) + FIND_LIBRARY(QT_QTASSISTANT_LIBRARY_DEBUG NAMES QtAssistantClientd QtAssistantClient_debug QtAssistant_debug QtAssistantd4 PATHS ${QT_LIBRARY_DIR} NO_DEFAULT_PATH) + + # Set QT_QTDESIGNER_LIBRARY + FIND_LIBRARY(QT_QTDESIGNER_LIBRARY_RELEASE NAMES QtDesigner QtDesigner4 PATHS ${QT_LIBRARY_DIR} NO_DEFAULT_PATH) + FIND_LIBRARY(QT_QTDESIGNER_LIBRARY_DEBUG NAMES QtDesigner_debug QtDesignerd4 PATHS ${QT_LIBRARY_DIR} NO_DEFAULT_PATH) + + ############################################ + # + # Check the existence of the libraries. + # + ############################################ + + MACRO (_QT4_ADJUST_LIB_VARS basename) + IF (QT_${basename}_INCLUDE_DIR) + + # if only the release version was found, set the debug variable also to the release version + IF (QT_${basename}_LIBRARY_RELEASE AND NOT QT_${basename}_LIBRARY_DEBUG) + SET(QT_${basename}_LIBRARY_DEBUG ${QT_${basename}_LIBRARY_RELEASE}) + SET(QT_${basename}_LIBRARY ${QT_${basename}_LIBRARY_RELEASE}) + SET(QT_${basename}_LIBRARIES ${QT_${basename}_LIBRARY_RELEASE}) + ENDIF (QT_${basename}_LIBRARY_RELEASE AND NOT QT_${basename}_LIBRARY_DEBUG) + + # if only the debug version was found, set the release variable also to the debug version + IF (QT_${basename}_LIBRARY_DEBUG AND NOT QT_${basename}_LIBRARY_RELEASE) + SET(QT_${basename}_LIBRARY_RELEASE ${QT_${basename}_LIBRARY_DEBUG}) + SET(QT_${basename}_LIBRARY ${QT_${basename}_LIBRARY_DEBUG}) + SET(QT_${basename}_LIBRARIES ${QT_${basename}_LIBRARY_DEBUG}) + ENDIF (QT_${basename}_LIBRARY_DEBUG AND NOT QT_${basename}_LIBRARY_RELEASE) + + IF (QT_${basename}_LIBRARY_DEBUG AND QT_${basename}_LIBRARY_RELEASE) + IF(NOT MSVC) + SET(QT_${basename}_LIBRARY ${QT_${basename}_LIBRARY_RELEASE}) + ELSE(NOT MSVC) + SET(QT_${basename}_LIBRARY optimized ${QT_${basename}_LIBRARY_RELEASE} debug ${QT_${basename}_LIBRARY_DEBUG}) + ENDIF(NOT MSVC) + SET(QT_${basename}_LIBRARIES optimized ${QT_${basename}_LIBRARY_RELEASE} debug ${QT_${basename}_LIBRARY_DEBUG}) + ENDIF (QT_${basename}_LIBRARY_DEBUG AND QT_${basename}_LIBRARY_RELEASE) + + SET(QT_${basename}_LIBRARY ${QT_${basename}_LIBRARY} CACHE FILEPATH "The Qt ${basename} library") + + IF (QT_${basename}_LIBRARY) + SET(QT_${basename}_FOUND 1) + ENDIF (QT_${basename}_LIBRARY) + + #add the include directory to QT_INCLUDES + SET(QT_INCLUDES ${QT_INCLUDES} "${QT_${basename}_INCLUDE_DIR}") + ENDIF (QT_${basename}_INCLUDE_DIR ) + + # Make variables changeble to the advanced user + MARK_AS_ADVANCED(QT_${basename}_LIBRARY QT_${basename}_LIBRARY_RELEASE QT_${basename}_LIBRARY_DEBUG QT_${basename}_INCLUDE_DIR) + ENDMACRO (_QT4_ADJUST_LIB_VARS) + + IF(WIN32) + _QT4_ADJUST_LIB_VARS(QTMAIN) + ENDIF(WIN32) + + + _QT4_ADJUST_LIB_VARS(QTCORE) + _QT4_ADJUST_LIB_VARS(QTGUI) + _QT4_ADJUST_LIB_VARS(QT3SUPPORT) + _QT4_ADJUST_LIB_VARS(QTASSISTANT) + _QT4_ADJUST_LIB_VARS(QTDESIGNER) + IF(Q_WS_X11) + _QT4_ADJUST_LIB_VARS(QTMOTIF) + ENDIF(Q_WS_X11) + _QT4_ADJUST_LIB_VARS(QTNETWORK) + _QT4_ADJUST_LIB_VARS(QTNSPLUGIN) + _QT4_ADJUST_LIB_VARS(QTOPENGL) + _QT4_ADJUST_LIB_VARS(QTSQL) + _QT4_ADJUST_LIB_VARS(QTXML) + _QT4_ADJUST_LIB_VARS(QTSVG) + _QT4_ADJUST_LIB_VARS(QTUITOOLS) + _QT4_ADJUST_LIB_VARS(QTTEST) + _QT4_ADJUST_LIB_VARS(QTDBUS) + + ####################################### + # + # Check the executables of Qt + # ( moc, uic, rcc ) + # + ####################################### + + + # find moc and uic using qmake + FILE(WRITE ${CMAKE_CURRENT_BINARY_DIR}/CMakeFiles/CMakeTmpQmake/tmp.pro + "message(MOC<$$QMAKE_MOC>) + message(UIC<$$QMAKE_UIC>) + ") + + EXECUTE_PROCESS(COMMAND ${QT_QMAKE_EXECUTABLE} + WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/CMakeFiles/CMakeTmpQmake + OUTPUT_VARIABLE _moc_OUTPUT + ERROR_VARIABLE _moc_OUTPUT ) + FILE(REMOVE_RECURSE "${CMAKE_CURRENT_BINARY_DIR}/CMakeFiles/CMakeTmpQmake") + + STRING(REGEX REPLACE ".*MOC<([^>]+).*" "\\1" QT_MOC_EXECUTABLE_INTERNAL "${_moc_OUTPUT}" ) + STRING(REGEX REPLACE ".*UIC<([^>]+).*" "\\1" QT_UIC_EXECUTABLE_INTERNAL "${_moc_OUTPUT}" ) + + FILE(TO_CMAKE_PATH "${QT_MOC_EXECUTABLE_INTERNAL}" QT_MOC_EXECUTABLE_INTERNAL) + FILE(TO_CMAKE_PATH "${QT_UIC_EXECUTABLE_INTERNAL}" QT_UIC_EXECUTABLE_INTERNAL) + + SET(QT_MOC_EXECUTABLE ${QT_MOC_EXECUTABLE_INTERNAL} CACHE FILEPATH "The moc executable") + SET(QT_UIC_EXECUTABLE ${QT_UIC_EXECUTABLE_INTERNAL} CACHE FILEPATH "The uic executable") + + FIND_PROGRAM(QT_UIC3_EXECUTABLE + NAMES uic3 + PATHS ${QT_BINARY_DIR} + NO_DEFAULT_PATH + ) + + FIND_PROGRAM(QT_RCC_EXECUTABLE + NAMES rcc + PATHS ${QT_BINARY_DIR} + NO_DEFAULT_PATH + ) + + FIND_PROGRAM(QT_DBUSCPP2XML_EXECUTABLE + NAMES dbuscpp2xml + PATHS ${QT_BINARY_DIR} + NO_DEFAULT_PATH + ) + + FIND_PROGRAM(QT_DBUSXML2CPP_EXECUTABLE + NAMES dbusxml2cpp + PATHS ${QT_BINARY_DIR} + NO_DEFAULT_PATH + ) + + IF (QT_MOC_EXECUTABLE) + SET(QT_WRAP_CPP "YES") + ENDIF (QT_MOC_EXECUTABLE) + + IF (QT_UIC_EXECUTABLE) + SET(QT_WRAP_UI "YES") + ENDIF (QT_UIC_EXECUTABLE) + + + + MARK_AS_ADVANCED( QT_UIC_EXECUTABLE QT_UIC3_EXECUTABLE QT_MOC_EXECUTABLE QT_RCC_EXECUTABLE ) + + ###################################### + # + # Macros for building Qt files + # + ###################################### + + MACRO (QT4_GET_MOC_INC_DIRS _moc_INC_DIRS) + SET(${_moc_INC_DIRS}) + GET_DIRECTORY_PROPERTY(_inc_DIRS INCLUDE_DIRECTORIES) + + FOREACH(_current ${_inc_DIRS}) + SET(${_moc_INC_DIRS} ${${_moc_INC_DIRS}} "-I" ${_current}) + ENDFOREACH(_current ${_inc_DIRS}) + ENDMACRO(QT4_GET_MOC_INC_DIRS) + + + MACRO (QT4_GENERATE_MOC infile outfile ) + # get include dirs + QT4_GET_MOC_INC_DIRS(moc_includes) + + GET_FILENAME_COMPONENT(abs_infile ${infile} ABSOLUTE) + + ADD_CUSTOM_COMMAND(OUTPUT ${outfile} + COMMAND ${QT_MOC_EXECUTABLE} + ARGS ${moc_includes} -o ${outfile} ${abs_infile} + DEPENDS ${abs_infile}) + + MACRO_ADD_FILE_DEPENDENCIES(${abs_infile} ${outfile}) + ENDMACRO (QT4_GENERATE_MOC) + + + # QT4_WRAP_CPP(outfiles inputfile ... ) + # TODO perhaps add support for -D, -U and other minor options + + MACRO (QT4_WRAP_CPP outfiles ) + # get include dirs + QT4_GET_MOC_INC_DIRS(moc_includes) + + FOREACH (it ${ARGN}) + GET_FILENAME_COMPONENT(it ${it} ABSOLUTE) + GET_FILENAME_COMPONENT(outfile ${it} NAME_WE) + + SET(outfile ${CMAKE_CURRENT_BINARY_DIR}/moc_${outfile}.cxx) + ADD_CUSTOM_COMMAND(OUTPUT ${outfile} + COMMAND ${QT_MOC_EXECUTABLE} + ARGS ${moc_includes} -o ${outfile} ${it} + DEPENDS ${it}) + SET(${outfiles} ${${outfiles}} ${outfile}) + ENDFOREACH(it) + + ENDMACRO (QT4_WRAP_CPP) + + + # QT4_WRAP_UI(outfiles inputfile ... ) + + MACRO (QT4_WRAP_UI outfiles ) + + FOREACH (it ${ARGN}) + GET_FILENAME_COMPONENT(outfile ${it} NAME_WE) + GET_FILENAME_COMPONENT(infile ${it} ABSOLUTE) + SET(outfile ${CMAKE_CURRENT_BINARY_DIR}/ui_${outfile}.h) + ADD_CUSTOM_COMMAND(OUTPUT ${outfile} + COMMAND ${QT_UIC_EXECUTABLE} + ARGS -o ${outfile} ${infile} + MAIN_DEPENDENCY ${infile}) + SET(${outfiles} ${${outfiles}} ${outfile}) + ENDFOREACH (it) + + ENDMACRO (QT4_WRAP_UI) + + + # QT4_ADD_RESOURCE(outfiles inputfile ... ) + # TODO perhaps consider adding support for compression and root options to rcc + + MACRO (QT4_ADD_RESOURCES outfiles ) + + FOREACH (it ${ARGN}) + GET_FILENAME_COMPONENT(outfilename ${it} NAME_WE) + GET_FILENAME_COMPONENT(infile ${it} ABSOLUTE) + SET(outfile ${CMAKE_CURRENT_BINARY_DIR}/qrc_${outfilename}.cxx) + ADD_CUSTOM_COMMAND(OUTPUT ${outfile} + COMMAND ${QT_RCC_EXECUTABLE} + ARGS -name ${outfilename} -o ${outfile} ${infile} + MAIN_DEPENDENCY ${infile} ) + SET(${outfiles} ${${outfiles}} ${outfile}) + ENDFOREACH (it) + + ENDMACRO (QT4_ADD_RESOURCES) + + + MACRO(QT4_ADD_DBUS_INTERFACE _sources _interface _basename) + GET_FILENAME_COMPONENT(_infile ${_interface} ABSOLUTE) + SET(_header ${CMAKE_CURRENT_BINARY_DIR}/${_basename}.h) + SET(_impl ${CMAKE_CURRENT_BINARY_DIR}/${_basename}.cpp) + SET(_moc ${CMAKE_CURRENT_BINARY_DIR}/${_basename}.moc) + + ADD_CUSTOM_COMMAND(OUTPUT ${_impl} ${_header} + COMMAND ${QT_DBUSXML2CPP_EXECUTABLE} -m -p ${_basename} ${_infile} + DEPENDS ${_infile}) + + SET_SOURCE_FILES_PROPERTIES(${_impl} PROPERTIES SKIP_AUTOMOC TRUE) + + QT4_GENERATE_MOC(${_header} ${_moc}) + + SET(${_sources} ${${_sources}} ${_impl} ${_header} ${_moc}) + MACRO_ADD_FILE_DEPENDENCIES(${_impl} ${_moc}) + + ENDMACRO(QT4_ADD_DBUS_INTERFACE) + + + MACRO(QT4_ADD_DBUS_INTERFACES _sources) + FOREACH (_current_FILE ${ARGN}) + GET_FILENAME_COMPONENT(_infile ${_current_FILE} ABSOLUTE) + + # get the part before the ".xml" suffix + STRING(REGEX REPLACE "(.*[/\\.])?([^\\.]+)\\.xml" "\\2" _basename ${_current_FILE}) + STRING(TOLOWER ${_basename} _basename) + + QT4_ADD_DBUS_INTERFACE(${_sources} ${_infile} ${_basename}interface) + ENDFOREACH (_current_FILE) + ENDMACRO(QT4_ADD_DBUS_INTERFACES) + + + MACRO(QT4_GENERATE_DBUS_INTERFACE _header) + GET_FILENAME_COMPONENT(_in_file ${_header} ABSOLUTE) + GET_FILENAME_COMPONENT(_basename ${_header} NAME_WE) + SET(_target ${CMAKE_CURRENT_BINARY_DIR}/${_basename}.xml) + + ADD_CUSTOM_COMMAND(OUTPUT ${_target} + COMMAND ${QT_DBUSCPP2XML_EXECUTABLE} ${_in_file} > ${_target} + DEPENDS ${_in_file} + ) + ENDMACRO(QT4_GENERATE_DBUS_INTERFACE) + + + MACRO(QT4_ADD_DBUS_ADAPTOR _sources _xml_file _include _parentClass) + GET_FILENAME_COMPONENT(_infile ${_xml_file} ABSOLUTE) + + SET(_optionalBasename "${ARGV4}") + IF (_optionalBasename) + SET(_basename ${_optionalBasename} ) + ELSE (_optionalBasename) + STRING(REGEX REPLACE "(.*[/\\.])?([^\\.]+)\\.xml" "\\2adaptor" _basename ${_infile}) + STRING(TOLOWER ${_basename} _basename) + ENDIF (_optionalBasename) + + SET(_optionalClassName "${ARGV5}") + SET(_header ${CMAKE_CURRENT_BINARY_DIR}/${_basename}.h) + SET(_impl ${CMAKE_CURRENT_BINARY_DIR}/${_basename}.cpp) + SET(_moc ${CMAKE_CURRENT_BINARY_DIR}/${_basename}.moc) + + IF(_optionalClassName) + ADD_CUSTOM_COMMAND(OUTPUT ${_impl} ${_header} + COMMAND ${QT_DBUSXML2CPP_EXECUTABLE} -m -a ${_basename} -c ${_optionalClassName} -i ${_include} -l ${_parentClass} ${_infile} + DEPENDS ${_infile} + ) + ELSE(_optionalClassName) + ADD_CUSTOM_COMMAND(OUTPUT ${_impl} ${_header} + COMMAND ${QT_DBUSXML2CPP_EXECUTABLE} -m -a ${_basename} -i ${_include} -l ${_parentClass} ${_infile} + DEPENDS ${_infile} + ) + ENDIF(_optionalClassName) + + QT4_GENERATE_MOC(${_header} ${_moc}) + SET_SOURCE_FILES_PROPERTIES(${_impl} PROPERTIES SKIP_AUTOMOC TRUE) + MACRO_ADD_FILE_DEPENDENCIES(${_impl} ${_moc}) + + SET(${_sources} ${${_sources}} ${_impl} ${_header} ${_moc}) + ENDMACRO(QT4_ADD_DBUS_ADAPTOR) + + MACRO(QT4_ADD_DBUS_ADAPTORS _sources) + message(FATAL_ERROR "There is a call to QT4_ADD_DBUS_ADAPTORS() in the CMakeLists.txt for '${ARGV0}', but this macro has been removed, please use QT4_ADD_DBUS_ADAPTOR and specify the include file and classname for the parent object implementing the code") + ENDMACRO(QT4_ADD_DBUS_ADAPTORS _sources) + + MACRO(QT4_AUTOMOC) + QT4_GET_MOC_INC_DIRS(_moc_INCS) + + SET(_matching_FILES ) + FOREACH (_current_FILE ${ARGN}) + + GET_FILENAME_COMPONENT(_abs_FILE ${_current_FILE} ABSOLUTE) + # if "SKIP_AUTOMOC" is set to true, we will not handle this file here. + # here. this is required to make bouic work correctly: + # we need to add generated .cpp files to the sources (to compile them), + # but we cannot let automoc handle them, as the .cpp files don't exist yet when + # cmake is run for the very first time on them -> however the .cpp files might + # exist at a later run. at that time we need to skip them, so that we don't add two + # different rules for the same moc file + GET_SOURCE_FILE_PROPERTY(_skip ${_abs_FILE} SKIP_AUTOMOC) + + IF ( NOT _skip AND EXISTS ${_abs_FILE} ) + + FILE(READ ${_abs_FILE} _contents) + + GET_FILENAME_COMPONENT(_abs_PATH ${_abs_FILE} PATH) + + STRING(REGEX MATCHALL "#include +[^ ]+\\.moc[\">]" _match "${_contents}") + IF(_match) + FOREACH (_current_MOC_INC ${_match}) + STRING(REGEX MATCH "[^ <\"]+\\.moc" _current_MOC "${_current_MOC_INC}") + + GET_filename_component(_basename ${_current_MOC} NAME_WE) + # SET(_header ${CMAKE_CURRENT_SOURCE_DIR}/${_basename}.h) + SET(_header ${_abs_PATH}/${_basename}.h) + SET(_moc ${CMAKE_CURRENT_BINARY_DIR}/${_current_MOC}) + ADD_CUSTOM_COMMAND(OUTPUT ${_moc} + COMMAND ${QT_MOC_EXECUTABLE} + ARGS ${_moc_INCS} ${_header} -o ${_moc} + DEPENDS ${_header} + ) + + MACRO_ADD_FILE_DEPENDENCIES(${_abs_FILE} ${_moc}) + ENDFOREACH (_current_MOC_INC) + ENDIF(_match) + ENDIF ( NOT _skip AND EXISTS ${_abs_FILE} ) + ENDFOREACH (_current_FILE) + ENDMACRO(QT4_AUTOMOC) + + + + ###################################### + # + # decide if Qt got found + # + ###################################### + + # if the includes,libraries,moc,uic and rcc are found then we have it + IF( QT_LIBRARY_DIR AND QT_INCLUDE_DIR AND QT_MOC_EXECUTABLE AND QT_UIC_EXECUTABLE AND QT_RCC_EXECUTABLE) + SET( QT4_FOUND "YES" ) + IF( NOT Qt4_FIND_QUIETLY) + MESSAGE(STATUS "Found Qt-Version ${QTVERSION}") + ENDIF( NOT Qt4_FIND_QUIETLY) + ELSE( QT_LIBRARY_DIR AND QT_INCLUDE_DIR AND QT_MOC_EXECUTABLE AND QT_UIC_EXECUTABLE AND QT_RCC_EXECUTABLE) + SET( QT4_FOUND "NO") + SET(QT_QMAKE_EXECUTABLE "${QT_QMAKE_EXECUTABLE}-NOTFOUND" CACHE FILEPATH "Invalid qmake found" FORCE) + IF( Qt4_FIND_REQUIRED) + MESSAGE( FATAL_ERROR "Qt libraries, includes, moc, uic or/and rcc NOT found!") + ENDIF( Qt4_FIND_REQUIRED) + ENDIF( QT_LIBRARY_DIR AND QT_INCLUDE_DIR AND QT_MOC_EXECUTABLE AND QT_UIC_EXECUTABLE AND QT_RCC_EXECUTABLE) + SET(QT_FOUND ${QT4_FOUND}) + + + ####################################### + # + # System dependent settings + # + ####################################### + # for unix add X11 stuff + IF(UNIX) + # on OS X X11 may not be required + IF (Q_WS_X11) + FIND_PACKAGE(X11) + ENDIF (Q_WS_X11) + FIND_PACKAGE(Threads) + SET(QT_QTCORE_LIBRARY ${QT_QTCORE_LIBRARY} ${CMAKE_THREAD_LIBS_INIT}) + ENDIF(UNIX) + + + ####################################### + # + # compatibility settings + # + ####################################### + # Backwards compatibility for CMake1.4 and 1.2 + SET (QT_MOC_EXE ${QT_MOC_EXECUTABLE} ) + SET (QT_UIC_EXE ${QT_UIC_EXECUTABLE} ) + + SET( QT_QT_LIBRARY "") + +ELSE(QT4_QMAKE_FOUND) + + SET(QT_QMAKE_EXECUTABLE "${QT_QMAKE_EXECUTABLE}-NOTFOUND" CACHE FILEPATH "Invalid qmake found" FORCE) + IF(Qt4_FIND_REQUIRED) + IF(QT4_INSTALLED_VERSION_TOO_OLD) + MESSAGE(FATAL_ERROR "The installed Qt version ${QTVERSION} is too old, at least version ${QT_MIN_VERSION} is required") + ELSE(QT4_INSTALLED_VERSION_TOO_OLD) + MESSAGE( FATAL_ERROR "Qt qmake not found!") + ENDIF(QT4_INSTALLED_VERSION_TOO_OLD) + ELSE(Qt4_FIND_REQUIRED) + IF(QT4_INSTALLED_VERSION_TOO_OLD AND NOT Qt4_FIND_QUIETLY) + MESSAGE(STATUS "The installed Qt version ${QTVERSION} is too old, at least version ${QT_MIN_VERSION} is required") + ENDIF(QT4_INSTALLED_VERSION_TOO_OLD AND NOT Qt4_FIND_QUIETLY) + ENDIF(Qt4_FIND_REQUIRED) + +ENDIF (QT4_QMAKE_FOUND) + diff --git a/cmake/modules/MacroGetenvWinPath.cmake b/cmake/modules/MacroGetenvWinPath.cmake new file mode 100644 index 00000000..b18f7f63 --- /dev/null +++ b/cmake/modules/MacroGetenvWinPath.cmake @@ -0,0 +1,5 @@ + +MACRO (MACRO_GETENV_WIN_PATH var name) + set(${var} $ENV{${name}}) + STRING(REGEX REPLACE "\\\\" "/" ${var} "${${var}}") +ENDMACRO (MACRO_GETENV_WIN_PATH var name) diff --git a/cmake/modules/MacroLibrary.cmake b/cmake/modules/MacroLibrary.cmake new file mode 100644 index 00000000..6523530c --- /dev/null +++ b/cmake/modules/MacroLibrary.cmake @@ -0,0 +1,9 @@ +# - include MacroLibrary offers a collection of macros which extend the built-in cmake commands +# OPTIONAL_FIND_PACKAGE( <name> [QUIT] ) + +INCLUDE(MacroOptionalFindPackage) +#INCLUDE(MacroAdditionalCleanFiles) +#INCLUDE(MacroAddFileDependencies) +#INCLUDE(MacroGetenvWinPath) +#INCLUDE(MacroEnsureOutOfSourceBuild) + diff --git a/cmake/modules/MacroOptionalFindPackage.cmake b/cmake/modules/MacroOptionalFindPackage.cmake new file mode 100644 index 00000000..70681312 --- /dev/null +++ b/cmake/modules/MacroOptionalFindPackage.cmake @@ -0,0 +1,22 @@ +# - MACRO_OPTIONAL_FIND_PACKAGE() combines FIND_PACKAGE() with an OPTION() +# MACRO_OPTIONAL_FIND_PACKAGE( <name> [QUIT] ) +# This macro is a combination of OPTION() and FIND_PACKAGE(), it +# works like FIND_PACKAGE(), but additionally it automatically creates +# an option name WITH_<name>, which can be disabled via the cmake GUI. +# or via -DWITH_<name>=OFF +# The standard <name>_FOUND variables can be used in the same way +# as when using the normal FIND_PACKAGE() + +MACRO (MACRO_OPTIONAL_FIND_PACKAGE _name ) + OPTION(WITH_${_name} "Search for ${_name} package" ON) + if (WITH_${_name}) + FIND_PACKAGE(${_name} ${ARGN}) + else (WITH_${_name}) + set(${_name}_FOUND) + set(${_name}_INCLUDE_DIR) + set(${_name}_INCLUDES) + set(${_name}_LIBRARY) + set(${_name}_LIBRARIES) + endif (WITH_${_name}) +ENDMACRO (MACRO_OPTIONAL_FIND_PACKAGE) + diff --git a/cmake/modules/ProjectSourceGroup.cmake b/cmake/modules/ProjectSourceGroup.cmake new file mode 100644 index 00000000..713a67a1 --- /dev/null +++ b/cmake/modules/ProjectSourceGroup.cmake @@ -0,0 +1,18 @@ +# folders in the msvc projects +# mode==flat : headers and ourses in no folders +# mode==split : standard behavior of cmake, split headers and sources +# mode== <other values" : code is in this folder +macro(project_source_group mode sources headers) + #message(STATUS ${mode}) + #message(STATUS ${sources} ${headers}) + if(${mode} MATCHES "flat") + source_group("Source Files" Files) + source_group("Header Files" Files) + source_group("cmake" FILES CMakeLists.txt) + else(${mode} MATCHES "flat") + if(NOT ${mode} MATCHES "split") + source_group("${mode}" FILES ${${sources}} ${${headers}}) + endif(NOT ${mode} MATCHES "split") + endif(${mode} MATCHES "flat") +endmacro(project_source_group mode sources headers) + diff --git a/cmake/readme-cmake.txt b/cmake/readme-cmake.txt new file mode 100644 index 00000000..93500737 --- /dev/null +++ b/cmake/readme-cmake.txt @@ -0,0 +1,54 @@ +This directory contains configuration files for the cmake build system + +Requirements +------------ +- cmake version >= 2.4.4 see http://www.cmake.org +- installed libxml2 or libexpat + +Building +-------- + +unix +1. install cmake and libxml or libexpat +2. get dbus sources +3. mkdir dbus-build +4. cd dbus-build +5. cmake <dbus-src-root>/cmake or cmake -DDBUS_USE_EXPAT=on <dbus-src-root>/cmake in case libexpat should de used +5. make +6. make install + +win32-mingw +1. install cmake and libxml or libexpat in <ProgramDir>\gnuwin32 +2. get dbus sources +3. mkdir dbus-build +4. cd dbus-build +5. cmake -G "MinGW Makefiles" <dbus-src-root>/cmake +6. make +7. make install + +win32-msvc +1. install cmake and libxml or libexpat in <ProgramDir>\gnuwin32 +2. get dbus sources +3. mkdir dbus-build +4. cd dbus-build +5. cmake -G <msvc available target, see cmake --help for a list" <dbus-src-root>/cmake +6. make +7. make install + + +Some build options (use -D<key>=<value> on command line) +------------------ + key description default value + --- ----------- ------------- +DBUS_USE_EXPAT "Use expat (== ON) or libxml2 (==OFF) OFF +DBUS_DISABLE_ASSERTS "Disable assertion checking" OFF +DBUS_BUILD_TESTS "enable unit test code" ON +DBUS_ENABLE_ANSI "enable -ansi -pedantic gcc flags" OFF +DBUS_ENABLE_GCOV "compile with coverage profiling + instrumentation (gcc only)" OFF +DBUS_ENABLE_VERBOSE_MODE "support verbose debug mode" ON +DBUS_DISABLE_CHECKS "Disable public API sanity checking" OFF +DBUS_INSTALL_SYSTEM_LIBS "install required system libraries + (mingw: libxml2, libiconv, mingw10)" OFF +CMAKE_BUILD_TYPE "build type (== debug) or (== release) release + diff --git a/cmake/test/CMakeLists.txt b/cmake/test/CMakeLists.txt new file mode 100644 index 00000000..65606bf7 --- /dev/null +++ b/cmake/test/CMakeLists.txt @@ -0,0 +1,250 @@ + +#if HAVE_GLIB +# GLIB_SUBDIR=glib +#endif +#if HAVE_PYTHON +# PYTHON_SUBDIR=python +#endif +#if HAVE_QTESTLIB +# QT_SUBDIR=qt +#endif + +add_subdirectory( name-test ) + +#SUBDIRS=name-test $(GLIB_SUBDIR) $(PYTHON_SUBDIR) $(QT_SUBDIR) +#DIST_SUBDIRS=glib python qt name-test + +#INCLUDES=-I$(top_srcdir) $(DBUS_test-CFLAGS) + +include_directories( ${CMAKE_SOURCE_DIR}/.. ) +include_directories( ${CMAKE_INCLUDE_PATH} ) + +if (WIN32) +add_definitions(-Dsleep=_sleep) +endif (WIN32) + +set (TEST_SOCKET_DIR "/") + +#if (DBUS_BUILD_TESTS) +## break-loader removed for now +#test-BINARIES=test-service test-names test-shell-service shell-test spawn-test test-segfault test-exit test-sleep-forever + +#enable stand alone make check test +#TESTS=shell-test +#else +#test-BINARIES= +#TESTS= +#endif + +#if DBUS_GCOV_ENABLED +#GCOV_BINARIES=decode-gcov +#else +#GCOV_BINARIES= +#endif + +set (test-service_SOURCES + ${CMAKE_SOURCE_DIR}/../test/test-service.c + ${CMAKE_SOURCE_DIR}/../test/test-utils.c + ${CMAKE_SOURCE_DIR}/../test/test-utils.h +) + +set (test-names_SOURCES + ${CMAKE_SOURCE_DIR}/../test/test-names.c + ${CMAKE_SOURCE_DIR}/../test/test-utils.c + ${CMAKE_SOURCE_DIR}/../test/test-utils.h +) + +set (break_loader_SOURCES + ${CMAKE_SOURCE_DIR}/../test/break-loader.c +) + +set (test-shell-service_SOURCES + ${CMAKE_SOURCE_DIR}/../test/test-shell-service.c + ${CMAKE_SOURCE_DIR}/../test/test-utils.c + ${CMAKE_SOURCE_DIR}/../test/test-utils.h +) + +set (test-shell_SOURCES + ${CMAKE_SOURCE_DIR}/../test/shell-test.c +) + +set (test-spawn_SOURCES + ${CMAKE_SOURCE_DIR}/../test/spawn-test.c +) + +set (test-exit_SOURCES + ${CMAKE_SOURCE_DIR}/../test/test-exit.c +) + +set (test-segfault_SOURCES + ${CMAKE_SOURCE_DIR}/../test/test-segfault.c +) + +set (test-sleep-forever_SOURCES + ${CMAKE_SOURCE_DIR}/../test/test-sleep-forever.c +) + +set (decode_gcov_SOURCES + ${CMAKE_SOURCE_DIR}/../test/decode-gcov.c +) + +add_executable(test-service ${test-service_SOURCES}) +target_link_libraries(test-service dbus-1) +install_targets(/bin test-service) + +# (rh) does not work at now +ADD_TEST(test-service ${EXECUTABLE_OUTPUT_PATH}/test-service${EXT}) + + + +add_executable(test-names ${test-names_SOURCES}) +target_link_libraries(test-names dbus-1) +install_targets(/bin test-names) +ADD_TEST(test-names ${EXECUTABLE_OUTPUT_PATH}/test-names${EXT}) + +add_executable(test-shell ${test-shell_SOURCES}) +target_link_libraries(test-shell dbus-1) +install_targets(/bin test-shell) +ADD_TEST(test-shell ${EXECUTABLE_OUTPUT_PATH}/test-shell${EXT}) + +add_executable(test-shell-service ${test-shell_SOURCES}) +target_link_libraries(test-shell-service dbus-1) +install_targets(/bin test-shell-service) +ADD_TEST(test-shell-service ${EXECUTABLE_OUTPUT_PATH}/test-shell-service${EXT}) + +add_executable(test-spawn ${test-spawn_SOURCES}) +target_link_libraries(test-spawn dbus-1) +# (rh) does not work now +#ADD_TEST(test-spawn ${EXECUTABLE_OUTPUT_PATH}/test-spawn${EXT}) + +add_executable(test-exit ${test-exit_SOURCES}) +target_link_libraries(test-exit dbus-1) +install_targets(/bin test-exit) +ADD_TEST(test-exit ${EXECUTABLE_OUTPUT_PATH}/test-exit${EXT}) + +add_executable(test-segfault ${test-segfault_SOURCES}) +target_link_libraries(test-segfault dbus-1) +install_targets(/bin test-segfault) +ADD_TEST(test-segfault ${EXECUTABLE_OUTPUT_PATH}/test-segfault${EXT}) + +add_executable(test-sleep-forever ${test-sleep-forever_SOURCES}) +target_link_libraries(test-sleep-forever dbus-1) +# (rh) don't know for what this test is good +#ADD_TEST(test-sleep-forever ${EXECUTABLE_OUTPUT_PATH}/test-sleep-forever${EXT}) + +#add_executable(decode-gcov ${decode_gcov_SOURCES}) +#target_link_libraries(decode-gcov dbus-1) + +#EXTRA_DIST= +# +### keep these in creation order, i.e. uppermost dirs first +set (TESTDIRS + test/data + test/data/valid-messages + test/data/invalid-messages + test/data/incomplete-messages + test/data/auth + test/data/sha-1 + test/data/valid-config-files + test/data/valid-config-files/basic.d + test/data/valid-config-files/system.d + test/data/valid-service-files + test/data/invalid-config-files + test/data/equiv-config-files + test/data/equiv-config-files/basic + test/data/equiv-config-files/basic/basic.d + test/data/equiv-config-files/entities + test/data/equiv-config-files/entities/basic.d +) +set (CONFIG_VERBOSE 0) + +### copy tests to builddir so that generated tests and static tests +### are all in one place. +FOREACH(FILE_TYPE *.message *.message-raw *.auth-script *.sha1 *.txt *.conf *.service) + FOREACH(DIR ${TESTDIRS}) + FILE(GLOB FILES "${CMAKE_SOURCE_DIR}/../${DIR}/${FILE_TYPE}" ) + FILE(MAKE_DIRECTORY ${CMAKE_BINARY_DIR}/${DIR}) + FOREACH(FILE ${FILES}) + GET_FILENAME_COMPONENT(FILENAME ${FILE} NAME) + SET (TARGET ${CMAKE_BINARY_DIR}/${DIR}/${FILENAME}) + configure_file(${FILE} ${TARGET} COPYONLY) + IF (CONFIG_VERBOSE) + MESSAGE("FROM: ${FILE}\nTO: ${TARGET}\n") + ENDIF (CONFIG_VERBOSE) + ENDFOREACH(FILE) + ENDFOREACH(DIR) +ENDFOREACH(FILE_TYPE) + +### generate test files +SET (CONFIG_FILES test/data/valid-config-files) +configure_file(${CMAKE_SOURCE_DIR}/${CONFIG_FILES}/debug-allow-all-sha1.conf.cmake ${CMAKE_BINARY_DIR}/${CONFIG_FILES}/debug-allow-all-sha1.conf ) +configure_file(${CMAKE_SOURCE_DIR}/${CONFIG_FILES}/debug-allow-all.conf.cmake ${CMAKE_BINARY_DIR}/${CONFIG_FILES}/debug-allow-all.conf ) + +# (rh) disabled copying because bus-test could not parse this files for unknown reasons +FILE(GLOB FILES "${CMAKE_BINARY_DIR}/bus/*.conf" ) +FOREACH(FILE ${FILES}) + GET_FILENAME_COMPONENT(FILENAME ${FILE} NAME) + SET (TARGET ${CMAKE_BINARY_DIR}/${CONFIG_FILES}/${FILENAME}) + configure_file(${FILE} ${TARGET}) + IF (CONFIG_VERBOSE) + MESSAGE("FROM: ${FILE}\nTO: ${TARGET}\n") + ENDIF (CONFIG_VERBOSE) +ENDFOREACH(FILE) + +# todo: for installation the TEST_..._BINARY variables must reflect the +# installation dir or has to be defined relative +# +SET (SERVICE_FILES test/data/valid-service-files) +FILE(GLOB FILES "${CMAKE_SOURCE_DIR}/../${SERVICE_FILES}/*.service.in" ) +FOREACH(FILE ${FILES}) + GET_FILENAME_COMPONENT(FILENAME ${FILE} NAME_WE) + SET (TARGET ${CMAKE_BINARY_DIR}/${SERVICE_FILES}/${FILENAME}.service) + IF (CONFIG_VERBOSE) + MESSAGE("FROM: ${FILE}\nTO: ${TARGET}\n") + ENDIF (CONFIG_VERBOSE) + configure_file(${FILE} ${TARGET} ) + install_files(/data/dbus-1/services FILES ${TARGET}) +ENDFOREACH(FILE) + +# +#FIND_TESTS=find -name "*.message" -o -name "*.message-raw" -o -name "*.auth-script" -o -name "*.sha1" -o -name "*.txt" -o -name "*.conf" -o -name "*.service" +# +### copy tests to builddir so that generated tests and static tests +### are all in one place. +#all-local: +# for D in $(TESTDIRS); do +# test -d $(top_builddir)/test/$$D || mkdir $(top_builddir)/test/$$D || exit 1 ; +# done ; +# if ! (test $(srcdir) = . || test $(srcdir) -ef .) ; then +# FILES=`(cd $(srcdir) && $(FIND_TESTS))` ; +# for F in $$FILES; do +# SRC=$(srcdir)/$$F ; +# DEST=$(top_builddir)/test/$$F ; +# echo '-- Copying test file '$$F ; +# cp $$SRC $$DEST || exit 1 ; +# chmod u+w $$DEST || exit 1 ; +# done ; +# else +# echo '-- No need to copy test data as srcdir = builddir' ; +# fi ; +# echo '-- Copying' $(top_builddir)/bus/*.conf 'to test directory' ; +# cp $(top_builddir)/bus/*.conf $(top_builddir)/test/data/valid-config-files || exit 1 ; +# chmod u+w $(top_builddir)/test/data/valid-config-files/*.conf || exit 1 +# +### this doesn't clean generated test data files when srcdir=builddir +#clean-local: +# if test $(srcdir) != . ; then +# FILES=`(cd $(top_builddir)/test && $(FIND_TESTS))` ; +# for F in $$FILES; do +# DEST=$(top_builddir)/test/$$F ; +# echo '-- Deleting test file '$$F ; +# rm $$DEST || exit 1 ; +# done ; +# REVERSEDIRS= ; +# for D in $(TESTDIRS); do +# REVERSEDIRS="$$D $$REVERSEDIRS" ; +# done ; +# for D in $$REVERSEDIRS; do +# rmdir $(top_builddir)/test/$$D || exit 1 ; +# done ; +# fi diff --git a/cmake/test/data/valid-config-files/debug-allow-all-sha1.conf.cmake b/cmake/test/data/valid-config-files/debug-allow-all-sha1.conf.cmake new file mode 100644 index 00000000..68f28228 --- /dev/null +++ b/cmake/test/data/valid-config-files/debug-allow-all-sha1.conf.cmake @@ -0,0 +1,16 @@ +<!-- Bus that listens on a debug pipe and requires SHA1 auth, used to test SHA1 --> + +<!DOCTYPE busconfig PUBLIC "-//freedesktop//DTD D-BUS Bus Configuration 1.0//EN" + "http://www.freedesktop.org/standards/dbus/1.0/busconfig.dtd"> +<busconfig> + <listen>debug-pipe:name=test-server</listen> + <listen>tcp:host=localhost,port=1234</listen> + <servicedir>@TEST_SERVICE_DIR@</servicedir> + <auth>DBUS_COOKIE_SHA1</auth> + <policy context="default"> + <allow send_interface="*"/> + <allow receive_interface="*"/> + <allow own="*"/> + <allow user="*"/> + </policy> +</busconfig> diff --git a/cmake/test/data/valid-config-files/debug-allow-all.conf.cmake b/cmake/test/data/valid-config-files/debug-allow-all.conf.cmake new file mode 100644 index 00000000..fd2844ad --- /dev/null +++ b/cmake/test/data/valid-config-files/debug-allow-all.conf.cmake @@ -0,0 +1,15 @@ +<!-- Bus that listens on a debug pipe and doesn't create any restrictions --> + +<!DOCTYPE busconfig PUBLIC "-//freedesktop//DTD D-BUS Bus Configuration 1.0//EN" + "http://www.freedesktop.org/standards/dbus/1.0/busconfig.dtd"> +<busconfig> + <listen>debug-pipe:name=test-server</listen> + <listen>tcp:host=localhost,port=1234</listen> + <servicedir>@TEST_SERVICE_DIR@</servicedir> + <policy context="default"> + <allow send_interface="*"/> + <allow receive_interface="*"/> + <allow own="*"/> + <allow user="*"/> + </policy> +</busconfig> diff --git a/cmake/test/name-test/CMakeLists.txt b/cmake/test/name-test/CMakeLists.txt new file mode 100644 index 00000000..3b8f39ec --- /dev/null +++ b/cmake/test/name-test/CMakeLists.txt @@ -0,0 +1,25 @@ +if (DBUS_BUILD_TESTS) + +set (NAMEtest-DIR ../../../test/name-test) + +include_directories( ${CMAKE_SOURCE_DIR}/.. ) +include_directories( ${CMAKE_INCLUDE_PATH} ) +add_definitions(-DDBUS_COMPILATION) + +# there is also a test-names executable, don't know if this is the same +add_executable(test-names1 ${NAMEtest-DIR}/test-names.c) +target_link_libraries(test-names1 dbus-1) +install_targets(/bin test-names1) +ADD_TEST(test-names ${EXECUTABLE_OUTPUT_PATH}/test-names1) + +add_executable(test-pending-call-dispatch ${NAMEtest-DIR}/test-pending-call-dispatch.c) +target_link_libraries(test-pending-call-dispatch dbus-1) +install_targets(/bin test-pending-call-dispatch) +ADD_TEST(test-pending-call-dispatch ${EXECUTABLE_OUTPUT_PATH}/test-pending_call-dispatch) + +add_executable(test-thread-init ${NAMEtest-DIR}/test-threads-init.c) +target_link_libraries(test-thread-init dbus-1) +install_targets(/bin test-thread-init) +ADD_TEST(test-names ${EXECUTABLE_OUTPUT_PATH}/test-thread-init) + +endif (DBUS_BUILD_TESTS) diff --git a/cmake/tools/CMakeLists.txt b/cmake/tools/CMakeLists.txt new file mode 100644 index 00000000..214d19b1 --- /dev/null +++ b/cmake/tools/CMakeLists.txt @@ -0,0 +1,78 @@ + +include_directories(${CMAKE_SOURCE_DIR}/..) + +#nodist_libdbus_glib_HEADERS = dbus-glib-bindings.h +#libdbus_glibdir = $(includedir)/dbus-1.0/dbus + +#dbus-glib-bindings.h: dbus-bus-introspect.xml $(top_builddir)/glib/dbus-binding-tool$(EXEEXT) +# $(top_builddir)/glib/dbus-binding-tool --mode=glib-client --output=dbus-glib-bindings.h dbus-bus-introspect.xml + +#BUILT_SOURCES = dbus-glib-bindings.h dbus-bus-introspect.xml + +#else +#GLIB_TOOLS= +#endif + +#if HAVE_GTK +#GTK_TOOLS=dbus-viewer +#else +#GTK_TOOLS= +#endif + +#if HAVE_GLIB +#dbus-bus-introspect.xml: $(top_builddir)/bus/dbus-daemon$(EXEEXT) dbus-launch$(EXEEXT) dbus-send$(EXEEXT) $(top_builddir)/bus/dbus-daemon$(EXEEXT) Makefile +# DBUS_TOP_BUILDDIR=$(top_builddir) $(srcdir)/run-with-tmp-session-bus.sh ./dbus-send --print-reply=literal --dest=org.freedesktop.DBus /org/freedesktop/DBus org.freedesktop.DBus.Introspectable.Introspect > dbus-bus-introspect.xml.tmp && mv dbus-bus-introspect.xml.tmp dbus-bus-introspect.xml +#endif + +#bin_PROGRAMS=dbus-send $(GLIB_TOOLS) dbus-launch dbus-cleanup-sockets $(GTK_TOOLS) + +set (dbus_send_SOURCES + ../../tools/dbus-print-message.c + ../../tools/dbus-print-message.h + ../../tools/dbus-send.c +) + +set (dbus_monitor_SOURCES + ../../tools/dbus-monitor.c + ../../tools/dbus-print-message.c + ../../tools/dbus-print-message.h +) + +set (dbus_launch_SOURCES + ../../tools/dbus-launch.c +) + +set (dbus_cleanup_sockets_SOURCES + ../../tools/dbus-cleanup-sockets.c +) + +set (dbus_viewer_SOURCES + ../../tools/dbus-names-model.c + ../../tools/dbus-names-model.h + ../../tools/dbus-tree-view.c + ../../tools/dbus-tree-view.h + ../../tools/dbus-viewer.c +) + +add_executable(dbus-send ${dbus_send_SOURCES}) +target_link_libraries(dbus-send dbus-1) +install_targets(/bin dbus-send ) + +# glib required +#add_executable(dbus_launch ${dbus_launch_SOURCES}) + +add_executable(dbus-monitor ${dbus_monitor_SOURCES}) +target_link_libraries(dbus-monitor dbus-1) +install_targets(/bin dbus-monitor ) + +#dbus_send_LDADD= $(top_builddir)/dbus/libdbus-1.la +#dbus_monitor_LDADD= $(top_builddir)/glib/libdbus-glib-1.la +#dbus_launch_LDADD= $(DBUS_X_LIBS) +#dbus_viewer_LDADD= $(top_builddir)/glib/libdbus-gtool.la $(DBUS_GTK_THREADS_LIBS) $(DBUS_GLIB_TOOL_LIBS) + +#man_MANS = dbus-send.1 dbus-monitor.1 dbus-launch.1 dbus-cleanup-sockets.1 +#EXTRA_DIST = $(man_MANS) run-with-tmp-session-bus.sh +#CLEANFILES = +# run-with-tmp-session-bus.conf +# dbus-bus-introspect.xml +# dbus-glib-bindings.h |