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  | 
