diff options
author | Jörg Mayer <jmayer@loplof.de> | 2006-10-24 17:39:32 +0000 |
---|---|---|
committer | Jörg Mayer <jmayer@loplof.de> | 2006-10-24 17:39:32 +0000 |
commit | e8a5a41045ea1af89a2111701df3c03093b59373 (patch) | |
tree | 215b64b41fa646e48e166994be2401233b870af2 /cmake | |
parent | 493ee85cb01efb108d46bd61cca89487f10a3883 (diff) |
Parts of http://bugs.wireshark.org/bugzilla/show_bug.cgi?id=1179
Frederic Heem:
* More cmake system checks. It compiles dumpcap without running configure,
svn path=/trunk/; revision=19672
Diffstat (limited to 'cmake')
-rw-r--r-- | cmake/modules/Check64BitFormat.c.in | 12 | ||||
-rw-r--r-- | cmake/modules/Check64BitFormat.cmake | 55 | ||||
-rw-r--r-- | cmake/modules/FindADNS.cmake | 34 | ||||
-rw-r--r-- | cmake/modules/FindDBUS.cmake | 101 | ||||
-rw-r--r-- | cmake/modules/FindDBUSGLIB.cmake | 89 | ||||
-rw-r--r-- | cmake/modules/FindGCRYPT.cmake | 49 | ||||
-rw-r--r-- | cmake/modules/FindGLIB2.cmake | 313 | ||||
-rw-r--r-- | cmake/modules/FindGTK2.cmake | 40 | ||||
-rw-r--r-- | cmake/modules/FindLEX.cmake | 43 | ||||
-rw-r--r-- | cmake/modules/FindPCAP.cmake | 38 | ||||
-rw-r--r-- | cmake/modules/FindQt4.cmake | 1057 | ||||
-rw-r--r-- | cmake/modules/UsePkgConfig.cmake | 137 |
12 files changed, 1854 insertions, 114 deletions
diff --git a/cmake/modules/Check64BitFormat.c.in b/cmake/modules/Check64BitFormat.c.in new file mode 100644 index 0000000000..1175e9b638 --- /dev/null +++ b/cmake/modules/Check64BitFormat.c.in @@ -0,0 +1,12 @@ +#include <stdio.h> +#define LENGTH 16 +int main(int ac, char*av[]){ + unsigned long long t = 1; + char strbuf[LENGTH+1] = {0}; + sprintf(strbuf, "%016@FORMAT@x", t << 32); + if (strcmp(strbuf, "0000000100000000") == 0){ + exit(0); + } else { + exit(1); + } +} diff --git a/cmake/modules/Check64BitFormat.cmake b/cmake/modules/Check64BitFormat.cmake new file mode 100644 index 0000000000..4f8c843163 --- /dev/null +++ b/cmake/modules/Check64BitFormat.cmake @@ -0,0 +1,55 @@ +# - Check if the function exists. +# CHECK_64BIT_FORMAT(FORMAT VARIABLE) +# - macro which checks if the function exists +# FORMAT - the format, e.g ll, L, q or I64 +# VARIABLE - variable to store the format if it is a valdid format +# +# Example of use in a CMakeLists.txt +# +# include(Check64BitFormat) +# +# check_64bit_format(ll FORMAT_64BIT) +# check_64bit_format(L FORMAT_64BIT) +# check_64bit_format(q FORMAT_64BIT) +# check_64bit_format(I64 FORMAT_64BIT) +# +# if(NOT FORMAT_64BIT) +# message(FATAL " 64 bit formart missing") +# endif(NOT FORMAT_64BIT) +# +# set(PRIX64 "${FORMAT_64BIT}X") +# set(PRIx64 "${FORMAT_64BIT}x") +# set(PRId64 "${FORMAT_64BIT}d") +# set(PRIo64 "${FORMAT_64BIT}o") +# set(PRIu64 "${FORMAT_64BIT}u") + + + +MACRO(CHECK_64BIT_FORMAT FORMAT VARIABLE) + IF(NOT ${VARIABLE}) + SET(FORMAT ${FORMAT}) +#CONFIGURE_FILE("${CMAKE_ROOT}/Modules/Check64BitFormat.c.in" + CONFIGURE_FILE("${CMAKE_SOURCE_DIR}/cmake/modules/Check64BitFormat.c.in" + "${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeTmp/Check64BitFormat.c" IMMEDIATE @ONLY) + + TRY_RUN(RUN_RESULT_VAR COMPILE_RESULT_VAR + ${CMAKE_BINARY_DIR} + ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeTmp/Check64BitFormat.c + OUTPUT_VARIABLE OUTPUT) + + IF(${RUN_RESULT_VAR} STREQUAL "0") + SET(${VARIABLE} 1 CACHE INTERNAL "Have format ${FORMAT}") + MESSAGE(STATUS "Looking for 64bit format ${FORMAT} - found") + FILE(APPEND ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeOutput.log + "Determining if the format ${FORMAT} runs passed with the following output:\n" + "${OUTPUT}\n\n") + SET(${VARIABLE} ${FORMAT}) + ELSE(${RUN_RESULT_VAR} STREQUAL "0") + MESSAGE(STATUS "Looking for 64bit format ${FORMAT} - not found") + SET(${VARIABLE} "" CACHE INTERNAL "Have format ${FORMAT}") + FILE(APPEND ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeError.log + "Determining if the format ${FORMAT} runs with the following output:\n" + "${OUTPUT}\n\n") + ENDIF(${RUN_RESULT_VAR} STREQUAL "0") + ENDIF(NOT ${VARIABLE}) +ENDMACRO(CHECK_64BIT_FORMAT) diff --git a/cmake/modules/FindADNS.cmake b/cmake/modules/FindADNS.cmake new file mode 100644 index 0000000000..3a9aabe637 --- /dev/null +++ b/cmake/modules/FindADNS.cmake @@ -0,0 +1,34 @@ +# - Find adns +# Find the gnu adns includes and library +# http://www.chiark.greenend.org.uk/~ian/adns/ +# +# ADNS_INCLUDE_DIRS - where to find adns.h, etc. +# ADNS_LIBRARIES - List of libraries when using adns. +# ADNS_FOUND - True if adns found. + +#Includes +FIND_PATH(ADNS_INCLUDE_DIR adns.h + /usr/local/include + /usr/include +) + +SET(ADNS_INCLUDE_DIRS ${ADNS_INCLUDE_DIR}) + +#Library +FIND_LIBRARY(ADNS_LIBRARY + NAMES adns + PATHS /usr/lib /usr/local/lib +) + +SET(ADNS_LIBRARIES ${ADNS_LIBRARY}) + +#Is adns found ? +IF(ADNS_INCLUDE_DIR AND ADNS_LIBRARY) + SET( ADNS_FOUND "YES" ) +ENDIF(ADNS_INCLUDE_DIR AND ADNS_LIBRARY) + + +MARK_AS_ADVANCED( + ADNS_LIBRARY + ADNS_INCLUDE_DIR +) diff --git a/cmake/modules/FindDBUS.cmake b/cmake/modules/FindDBUS.cmake new file mode 100644 index 0000000000..8f1946e971 --- /dev/null +++ b/cmake/modules/FindDBUS.cmake @@ -0,0 +1,101 @@ +# - Locate D-Bus include paths and libraries. +# D-Bus can be found at http://www.freedesktop.org/wiki/Software/dbus. +# Written by Frederic Heem, frederic.heem _at_ telsey.it +# +# This module defines: +# DBUS_FOUND, true if D-Bus has been found +# DBUS_VERSION, the D-Bus version +# DBUS_INCLUDE_DIRS, where to find ptlib.h, etc. +# DBUS_LIBRARIES, library to link againt D-Bus +# DBUS_DEFINITIONS, the definitions used to compile D-Bus + +INCLUDE(UsePkgConfig) + +#Keep space in of $ENV{PKG_CONFIG_PATH} is empty +SET(PKG_CONFIG_PATH " $ENV{PKG_CONFIG_PATH}") + + +#Find the D-Bus package +PKGCONFIG_FOUND(dbus-1 ${PKG_CONFIG_PATH} DBUS_FOUND) + +IF(DBUS_FOUND) + MESSAGE(STATUS "D-Bus found") +ELSE(DBUS_FOUND) + MESSAGE(FATAL "D-Bus cannot be found") +ENDIF(DBUS_FOUND) + +#Include + +PKGCONFIG_INCLUDE_DIRS(dbus-1 ${PKG_CONFIG_PATH} DBUS_INCLUDE_DIRS_PKGCONFIG) + +MESSAGE(STATUS ${DBUS_INCLUDE_DIRS_PKGCONFIG}) + +FIND_PATH(DBUS_INCLUDE_DIR dbus/dbus.h + PATHS + ${DBUS_INCLUDE_DIRS_PKGCONFIG} + /usr/include/dbus-1.0 + DOC + "Path to dbus include file dbus/dbus.h" + NO_DEFAULT_PATH +) + +IF(DBUS_INCLUDE_DIR) + MESSAGE(STATUS "D-Bus include dir set to ${DBUS_INCLUDE_DIR}") +ELSE(DBUS_INCLUDE_DIR) + MESSAGE(FATAL "D-Bus include dirs cannot be found") +ENDIF(DBUS_INCLUDE_DIR) + +FIND_PATH(DBUS_INCLUDE_DIR_ARCH dbus/dbus-arch-deps.h + PATHS + ${DBUS_INCLUDE_DIRS_PKGCONFIG} + /usr/lib/dbus-1.0/include + DOC + "Path to dbus include file dbus/dbus-arch-deps.h" + NO_DEFAULT_PATH +) + +IF(DBUS_INCLUDE_DIR_ARCH) + MESSAGE(STATUS "D-Bus architecture include dir set to ${DBUS_INCLUDE_DIR_ARCH}") +ELSE(DBUS_INCLUDE_DIR_ARCH) + MESSAGE(FATAL " D-Bus architecture include dirs cannot be found") +ENDIF(DBUS_INCLUDE_DIR_ARCH) + +SET(DBUS_INCLUDE_DIRS ${DBUS_INCLUDE_DIR} ${DBUS_INCLUDE_DIR_ARCH}) + +#Library +PKGCONFIG_LIBRARY_DIR(dbus-1 ${PKG_CONFIG_PATH} DBUS_LIBRARY_DIR) + +SET(DBUS_LIB_PATH_DESCRIPTION "The directory containing the dbus library. E.g /home/fred/dbus/lib or c:\\dbus\\lib") + +FIND_LIBRARY(DBUS_LIBRARY + NAMES + dbus-1 + PATHS + ${DBUS_LIBRARY_DIR} + DOC + ${DBUS_LIB_PATH_DESCRIPTION} + NO_DEFAULT_PATH +) + +SET(DBUS_LIBRARIES ${DBUS_LIBRARY}) + +IF(DBUS_LIBRARIES) + MESSAGE(STATUS "D-Bus library set to ${DBUS_LIBRARIES}") +ELSE(DBUS_LIBRARIES) + MESSAGE(FATAL "D-Bus library cannot be found") +ENDIF(DBUS_LIBRARIES) + +#Version +PKGCONFIG_VERSION(dbus-1 ${PKG_CONFIG_PATH} DBUS_VERSION) +MESSAGE(STATUS "D-Bus version is ${DBUS_VERSION}") + +#Definition +PKGCONFIG_DEFINITION(dbus-1 ${PKG_CONFIG_PATH} DBUS_DEFINITIONS) +MESSAGE(STATUS "D-Bus definitions are ${DBUS_DEFINITIONS}") + + +MARK_AS_ADVANCED( + DBUS_INCLUDE_DIR + DBUS_INCLUDE_DIR_ARCH + DBUS_LIBRARY +) diff --git a/cmake/modules/FindDBUSGLIB.cmake b/cmake/modules/FindDBUSGLIB.cmake new file mode 100644 index 0000000000..644deb55ab --- /dev/null +++ b/cmake/modules/FindDBUSGLIB.cmake @@ -0,0 +1,89 @@ +# - Locate dbus-glib-1 include paths and libraries +# dbus-glib-1 can be found at http://www.freedesktop.org/wiki/Software/dbus +# Written by Frederic Heem, frederic.heem _at_ telsey.it + +# This module defines +# DBUSGLIBGLIB_FOUND, true if dbus-glib-1 has been found +# DBUSGLIBGLIB_VERSION, the dbus-glib-1 version +# DBUSGLIBGLIB_INCLUDE_DIRS, where to find dbus/dbus-glib.h, etc. +# DBUSGLIBGLIB_LIBRARIES, library to link againt libdbus-glib-1 +# DBUSGLIBGLIB_DEFINITIONS, the definitions used to compile dbus-glib-1 + +#D-Bus is required by dbus-glib-1 +FIND_PACKAGE(DBUS REQUIRED) + +#Keep space in of $ENV{PKG_CONFIG_PATH} is empty +SET(PKG_CONFIG_PATH " $ENV{PKG_CONFIG_PATH}") + +#Find the D-Bus package +PKGCONFIG_FOUND(dbus-1 ${PKG_CONFIG_PATH} DBUSGLIB_FOUND) + +IF(DBUSGLIB_FOUND) + MESSAGE(STATUS "D-Bus glib found") +ELSE(DBUSGLIB_FOUND) + MESSAGE(FATAL "D-Bus glib cannot be found") +ENDIF(DBUSGLIB_FOUND) + +#Includes +PKGCONFIG_INCLUDE_DIRS(dbus-glib-1 ${PKG_CONFIG_PATH} DBUSGLIB_INCLUDE_DIRS_PKGCONFIG) + +#TODO +FIND_PATH(DBUSGLIB_INCLUDE_DIR dbus/dbus-glib.h + PATHS + ${DBUSGLIB_INCLUDE_DIRS_PKGCONFIG} + /usr/include/dbus-1.0 + DOC + "Path to dbus glib include file dbus-glib.h" + NO_DEFAULT_PATH +) + +SET(DBUSGLIB_INCLUDE_DIRS ${DBUSGLIB_INCLUDE_DIR} ${DBUS_INCLUDE_DIRS}) + +IF(DBUSGLIB_INCLUDE_DIR) + MESSAGE(STATUS "D-Bus glib include dir set to ${DBUSGLIB_INCLUDE_DIR}") +ELSE(DBUSGLIB_INCLUDE_DIR) + MESSAGE(FATAL "D-Bus glib include dir cannot be found") +ENDIF(DBUSGLIB_INCLUDE_DIR) + +#Library +PKGCONFIG_LIBRARY_DIR(dbus-glib-1 ${PKG_CONFIG_PATH} DBUSGLIB_LIBRARY_DIR) + +SET(DBUSGLIB_LIB_PATH_DESCRIPTION "The directory containing the dbus glib library. E.g /home/fred/dbus-glib/lib or c:\\dbus-glib\\lib") + +FIND_LIBRARY(DBUSGLIB_LIBRARY + NAMES + dbus-glib-1 + PATHS + ${DBUSGLIB_LIBRARY_DIR} + DOC + ${DBUSGLIB_LIB_PATH_DESCRIPTION} + NO_DEFAULT_PATH +) + +SET(DBUSGLIB_LIBRARIES ${DBUSGLIB_LIBRARY} ${DBUS_LIBRARIES}) + +IF(DBUSGLIB_LIBRARIES) + MESSAGE(STATUS "D-Bus glib library set to ${DBUSGLIB_LIBRARIES}") +ELSE(DBUSGLIB_LIBRARIES) + MESSAGE(FATAL "D-Bus glib library cannot be found") +ENDIF(DBUSGLIB_LIBRARIES) + +#Version +PKGCONFIG_VERSION(dbus-glib-1 ${PKG_CONFIG_PATH} DBUSGLIB_VERSION) +MESSAGE(STATUS "D-Bus glib version is ${DBUSGLIB_VERSION}") + +#Definition +PKGCONFIG_DEFINITION(dbus-glib-1 ${PKG_CONFIG_PATH} DBUSGLIB_DEFINITIONS) +MESSAGE(STATUS "D-Bus glib definitions are ${DBUSGLIB_DEFINITIONS}") + +#binding tool +FIND_PROGRAM(DBUSGLIB_BINDING_TOOL_EXECUTABLE + NAMES + dbus-binding-tool +) + +MARK_AS_ADVANCED( + DBUSGLIB_INCLUDE_DIR + DBUSGLIB_LIBRARY + DBUSGLIB_BINDING_TOOL_EXECUTABLE +) diff --git a/cmake/modules/FindGCRYPT.cmake b/cmake/modules/FindGCRYPT.cmake new file mode 100644 index 0000000000..bd0da85eff --- /dev/null +++ b/cmake/modules/FindGCRYPT.cmake @@ -0,0 +1,49 @@ +# - Find pcap +# Find the PCAP includes and library +# +# PCAP_INCLUDE_DIRS - where to find pcap.h, etc. +# PCAP_LIBRARIES - List of libraries when using pcap. +# PCAP_FOUND - True if pcap found. + +#Includes +FIND_PATH(PCAP_INCLUDE_DIR pcap.h + /usr/local/include + /usr/include +) + +SET(PCAP_INCLUDE_DIRS ${PCAP_INCLUDE_DIR}) + +#Library +FIND_LIBRARY(PCAP_LIBRARY + NAMES pcap + PATHS /usr/lib /usr/local/lib +) + +SET(PCAP_LIBRARIES ${PCAP_LIBRARY}) + +#Functions +INCLUDE(CheckFunctionExists) +SET(CMAKE_REQUIRED_INCLUDES ${PCAP_INCLUDE_DIRS}) +SET(CMAKE_REQUIRED_LIBRARIES ${PCAP_LIBRARIES}) +CHECK_FUNCTION_EXISTS("pcap_breakloop" HAVE_PCAP_BREAKLOOP) +CHECK_FUNCTION_EXISTS("pcap_datalink_name_to_val" HAVE_PCAP_DATALINK_NAME_TO_VAL) +CHECK_FUNCTION_EXISTS("pcap_datalink_val_to_name" HAVE_PCAP_DATALINK_VAL_TO_NAME) +CHECK_FUNCTION_EXISTS("pcap_findalldevs" HAVE_PCAP_FINDALLDEVS) +CHECK_FUNCTION_EXISTS("pcap_freecode" HAVE_PCAP_FREECODE) +CHECK_FUNCTION_EXISTS("pcap_get_selectable_fd" HAVE_PCAP_GET_SELECTABLE_FD) +CHECK_FUNCTION_EXISTS("pcap_lib_version" HAVE_PCAP_LIB_VERSION) +CHECK_FUNCTION_EXISTS("pcap_list_datalinks" HAVE_PCAP_LIST_DATALINKS) +CHECK_FUNCTION_EXISTS("pcap_open_dead" HAVE_PCAP_OPEN_DEAD) +CHECK_FUNCTION_EXISTS("pcap_set_datalink" HAVE_PCAP_SET_DATALINK) + + +#Is pcap found ? +IF(PCAP_INCLUDE_DIR AND PCAP_LIBRARY) + SET( PCAP_FOUND "YES" ) +ENDIF(PCAP_INCLUDE_DIR AND PCAP_LIBRARY) + + +MARK_AS_ADVANCED( + PCAP_LIBRARY + PCAP_INCLUDE_DIR +) diff --git a/cmake/modules/FindGLIB2.cmake b/cmake/modules/FindGLIB2.cmake index 1dda572c62..19d4f8e87f 100644 --- a/cmake/modules/FindGLIB2.cmake +++ b/cmake/modules/FindGLIB2.cmake @@ -1,127 +1,244 @@ +# - Try to find GLIB2 +# Once done this will define # -# try to find GLIB2 (and glib) and GLIBGLArea +# GLIB2_FOUND - system has GLIB2 +# GLIB2_INCLUDE_DIRS - the GLIB2 include directory +# GLIB2_LIBRARIES - Link these to use GLIB2 +# GLIB2_DEFINITIONS - Compiler switches required for using GLIB2 # +# Copyright (c) 2006 Andreas Schneider <mail@cynapses.org> +# Copyright (c) 2006 Philippe Bernery <philippe.bernery@gmail.com> +# +# Redistribution and use is allowed according to the terms of the New +# BSD license. +# For details see the accompanying COPYING-CMAKE-SCRIPTS file. # -# Jan Woetzel 06/2004: added /opt/gnome/include/gtk-1.2 path and $ENV{GLIB2_HOME} -# Andreas Schneider 08/2006: added pkgconfig, added lib64 include dirs -# Joerg Mayer 2006-08-31: rename GLIB to GLIB2 - - -# GLIB2_INCLUDE_DIR - Directories to include to use GLIB -# GLIB2_LIBRARIES - Files to link against to use GLIB -# GLIB2_FOUND - If false, don't try to use GLIB -# don't even bother under WIN32 -IF(UNIX) +if (GLIB2_LIBRARIES AND GLIB2_INCLUDE_DIRS) + # in cache already + set(GLIB2_FOUND TRUE) +else (GLIB2_LIBRARIES AND GLIB2_INCLUDE_DIRS) # use pkg-config to get the directories and then use these values # in the FIND_PATH() and FIND_LIBRARY() calls - INCLUDE(UsePkgConfig) - - # Some Linux distributions (e.g. Red Hat) have glibconfig.h - # and glib.h in different directories, so we need to look - # for both. - # - Atanas Georgiev <atanas@cs.columbia.edu> - PKGCONFIG(glib-2.0 _GLIB2IncDir _GLIB2inkDir _GLIB2LinkFlags _GLIB2Cflags) - PKGCONFIG(gmodule-2.0 _GMODULE2IncDir _GMODULE2inkDir _GMODULE2LinkFlags _GMODULE2Cflags) - SET(GDIR /opt/gnome/lib/glib-2.0/include) - - FIND_PATH(GLIB2_glibconfig_INCLUDE_PATH glibconfig.h - ${_GLIB2IncDir} - /opt/gnome/lib64/glib-2.0/include - /opt/gnome/lib/glib-2.0/include - /usr/lib64/glib-2.0/include - /usr/lib/glib-2.0/include + include(UsePkgConfig) + + ## GLibConfig + find_path(GLIBCONFIG_INCLUDE_DIR + NAMES + glibconfig.h + PATHS + ${_GLIB2IncDir} + /opt/gnome/lib64/glib-2.0/include + /opt/gnome/lib/glib-2.0/include + /opt/lib/glib-2.0/include + /usr/lib64/glib-2.0/include + /usr/lib/glib-2.0/include + /sw/lib/glib-2.0/include + ) + ## + + ## Glib + pkgconfig(glib-2.0 _GLIB2IncDir _GLIB2LinkDir _GLIB2LinkFlags _GLIB2Cflags) + + set(GLIB2_DEFINITIONS ${_GLIB2Cflags}) + + find_path(GLIB2_INCLUDE_DIR + NAMES + glib.h + PATHS + ${_GLIB2IncDir} + /opt/gnome/include/glib-2.0 + /usr/include/glib-2.0 + /usr/local/include/glib-2.0 + /opt/local/include/glib-2.0 + /sw/include/glib-2.0 ) - FIND_PATH(GLIB2_glib_INCLUDE_PATH glib.h - ${_GLIB2IncDir} - /opt/gnome/include/glib-2.0 - /usr/include/glib-2.0 + find_library(GLIB2_LIBRARY + NAMES + glib-2.0 + PATHS + ${_GLIB2LinkDir} + /opt/gnome/lib + /usr/lib + /usr/local/lib + /opt/local/lib + /sw/lib ) - FIND_LIBRARY( GLIB2_gmodule_LIBRARY - NAMES gmodule-2.0 - PATHS ${_GMODULE2inkDir} - /usr/lib - /usr/local/lib - /usr/openwin/lib - /usr/X11R6/lib - /opt/gnome/lib + set(GLIB2_LIBRARIES ${GLIB2_LIBRARY}) + set(GLIB2_INCLUDE_DIRS ${GLIB2_INCLUDE_DIR}) + ## + + ## GModule + pkgconfig(gmodule-2.0 _GMODULE2IncDir _GMODULE2LinkDir _GMODULE2LinkFlags _GMODULE2Cflags) + + set(GMODULE2_DEFINITIONS ${_GMODULE2Cflags}) + + find_path(GMODULE2_INCLUDE_DIR + NAMES + gmodule.h + PATHS + ${_GMODULE2IncDir} + /opt/gnome/include/glib-2.0 + /usr/include/glib-2.0 + /usr/local/include/glib-2.0 + /opt/local/include/glib-2.0 + /sw/include/glib-2.0 + ) + + find_library(GMODULE2_LIBRARY + NAMES + gmodule-2.0 + PATHS + ${_GMODULE2LinkDir} + /opt/gnome/lib + /usr/lib + /usr/local/lib + /opt/local/lib + /sw/lib + ) + if (GMODULE2_LIBRARY AND GMODULE2_INCLUDE_DIR) + set(GMODULE2_FOUND TRUE) + endif (GMODULE2_LIBRARY AND GMODULE2_INCLUDE_DIR) + ## + + ## GThread + pkgconfig(gthread-2.0 _GTHREAD2IncDir _GTHREAD2LinkDir _GTHREAD2LinkFlags _GTHREAD2Cflags) + + set(GTHREAD2_DEFINITIONS ${_GTHREAD2Cflags}) + + find_path(GTHREAD2_INCLUDE_DIR + NAMES + gthread.h + PATHS + ${_GTHREAD2IncDir} + /opt/gnome/include/glib-2.0 + /usr/include/glib-2.0 + /usr/local/include/glib-2.0 + /opt/local/include/glib-2.0 + /sw/include/glib-2.0 + PATH_SUFFIXES + glib + ) + + find_library(GTHREAD2_LIBRARY + NAMES + gthread-2.0 + PATHS + ${_GTHREAD2LinkDir} + /opt/gnome/lib + /usr/lib + /usr/local/lib + /opt/local/lib + /sw/lib ) - FIND_LIBRARY( GLIB2_glib_LIBRARY - NAMES glib-2.0 - PATHS ${_GLIB2inkDir} - /usr/lib - /usr/local/lib - /usr/openwin/lib - /usr/X11R6/lib - /opt/gnome/lib + if (GTHREAD2_LIBRARY AND GTHREAD2_INCLUDE_DIR) + set(GTHREAD2_FOUND TRUE) + endif (GTHREAD2_LIBRARY AND GTHREAD2_INCLUDE_DIR) + ## + + ## libintl + find_path(LIBINTL_INCLUDE_DIR + NAMES + libintl.h + PATHS + /opt/gnome/include/glib-2.0 + /usr/include/glib-2.0 + /usr/local/include/glib-2.0 + /opt/local/include/glib-2.0 + /sw/include/glib-2.0 + ) + + find_library(LIBINTL_LIBRARY + NAMES + intl + PATHS + /opt/gnome/lib + /usr/lib + /usr/local/lib + /opt/local/lib + /sw/lib ) - FIND_LIBRARY( GLIB2_gthread_LIBRARY - NAMES gthread-2.0 - PATHS /usr/lib - /usr/local/lib - /usr/openwin/lib - /usr/X11R6/lib - /opt/gnome/lib + if (LIBINTL_LIBRARY AND LIBINTL_INCLUDE_DIR) + set(LIBINTL_FOUND TRUE) + endif (LIBINTL_LIBRARY AND LIBINTL_INCLUDE_DIR) + ## + + ## libiconv + find_path(LIBICONV_INCLUDE_DIR + NAMES + iconv.h + PATHS + /opt/gnome/include/glib-2.0 + /usr/include/glib-2.0 + /usr/local/include/glib-2.0 + /opt/local/include/glib-2.0 + /sw/include/glib-2.0 + ) + + find_library(LIBICONV_LIBRARY + NAMES + iconv + PATHS + /opt/gnome/lib + /usr/lib + /usr/local/lib + /opt/local/lib + /sw/lib ) - FIND_LIBRARY( GLIB2_gobject_LIBRARY - NAMES gobject-2.0 - PATHS - /opt/gnome/lib + if (LIBICONV_LIBRARY AND LIBICONV_INCLUDE_DIR) + set(LIBICONV_FOUND TRUE) + endif (LIBICONV_LIBRARY AND LIBICONV_INCLUDE_DIR) + ## + + set(GLIB2_INCLUDE_DIRS + ${GLIB_INCLUDE_DIR} + ${GLIBCONFIG_INCLUDE_DIR} + ) + set(GLIB2_LIBRARIES + ${GLIB_LIBRARY} ) - IF(GLIB2_glibconfig_INCLUDE_PATH) - IF(GLIB2_glib_INCLUDE_PATH) - IF(GLIB2_glib_LIBRARY) - - SET( GLIB2_FOUND TRUE ) - SET( GLIB2_INCLUDE_DIR - ${GLIB2_glibconfig_INCLUDE_PATH} - ${GLIB2_glib_INCLUDE_PATH}) - SET( GLIB2_LIBRARIES ${GLIB2_glib_LIBRARY} ) - - IF(GLIB2_gmodule_LIBRARY) - SET(GLIB2_LIBRARIES ${GLIB2_LIBRARIES} ${GLIB2_gmodule_LIBRARY}) - ENDIF(GLIB2_gmodule_LIBRARY) - IF(GLIB2_gthread_LIBRARY) - SET(GLIB2_LIBRARIES ${GLIB2_LIBRARIES} ${GLIB2_gthread_LIBRARY}) - ENDIF(GLIB2_gthread_LIBRARY) - - ELSE(GLIB2_glib_LIBRARY) - MESSAGE("Can not find glib lib") - ENDIF(GLIB2_glib_LIBRARY) - ELSE(GLIB2_glib_INCLUDE_PATH) - MESSAGE("Can not find glib includes") - ENDIF(GLIB2_glib_INCLUDE_PATH) - ELSE(GLIB2_glibconfig_INCLUDE_PATH) - MESSAGE("Can not find glibconfig") - ENDIF(GLIB2_glibconfig_INCLUDE_PATH) + if (GMODULE2_FOUND) + set(GLIB2_LIBRARIES ${GLIB2_LIBRARIES} ${GMODULE2_LIBRARY}) + set(GLIB2_INCLUDE_DIRS ${GLIB2_INCLUDE_DIRS} ${GMODULE2_INCLUDE_DIR}) + endif (GMODULE2_FOUND) + + if (GTHREAD2_FOUND) + set(GLIB2_LIBRARIES ${GLIB2_LIBRARIES} ${GTHREAD2_LIBRARY}) + set(GLIB2_INCLUDE_DIRS ${GLIB2_INCLUDE_DIRS} ${GTHREAD2_INCLUDE_DIR}) + endif (GTHREAD2_FOUND) + + if (LIBINTL_FOUND) + set(GLIB2_LIBRARIES ${GLIB2_LIBRARIES} ${LIBINTL_LIBRARY}) + set(GLIB2_INCLUDE_DIRS ${GLIB2_INCLUDE_DIRS} ${LIBINTL_INCLUDE_DIR}) + endif (LIBINTL_FOUND) + + if (LIBICONV_FOUND) + set(GLIB2_LIBRARIES ${GLIB2_LIBRARIES} ${LIBICONV_LIBRARY}) + set(GLIB2_INCLUDE_DIRS ${GLIB2_INCLUDE_DIRS} ${LIBICONV_INCLUDE_DIR}) + endif (LIBICONV_FOUND) + + if (GLIB2_INCLUDE_DIRS AND GLIB2_LIBRARIES) + set(GLIB2_FOUND TRUE) + endif (GLIB2_INCLUDE_DIRS AND GLIB2_LIBRARIES) if (GLIB2_FOUND) if (NOT GLIB2_FIND_QUIETLY) - message(STATUS "Found GLIB: ${GLIB2_LIBRARIES}") + message(STATUS "Found GLIB2: ${GLIB2_LIBRARIES}") endif (NOT GLIB2_FIND_QUIETLY) else (GLIB2_FOUND) if (GLIB2_FIND_REQUIRED) - message(FATAL_ERROR "Could NOT find GLIB") + message(FATAL_ERROR "Could not find GLIB2") endif (GLIB2_FIND_REQUIRED) endif (GLIB2_FOUND) + # show the GLIB2_INCLUDE_DIRS and GLIB2_LIBRARIES variables only in the advanced view + mark_as_advanced(GLIB2_INCLUDE_DIRS GLIB2_LIBRARIES) - MARK_AS_ADVANCED( - GLIB2_glib_INCLUDE_PATH - GLIB2_glib_LIBRARY - GLIB2_glibconfig_INCLUDE_PATH - GLIB2_gmodule_LIBRARY - GLIB2_gthread_LIBRARY - ) - -ELSE(UNIX) - # MESSAGE("FindGLIB2 is working on UNIX/LINUX, only!") -ENDIF(UNIX) - +endif (GLIB2_LIBRARIES AND GLIB2_INCLUDE_DIRS) diff --git a/cmake/modules/FindGTK2.cmake b/cmake/modules/FindGTK2.cmake index c426b24303..a7bc1d3a49 100644 --- a/cmake/modules/FindGTK2.cmake +++ b/cmake/modules/FindGTK2.cmake @@ -78,7 +78,9 @@ ELSE (GTK2_LIBRARIES AND GTK2_INCLUDE_DIRS) ${_GTK22IncDir} /usr/include/gtk-2.0 /usr/local/include/gtk-2.0 + /opt/include/gtk-2.0 /opt/gnome/include/gtk-2.0 + /sw/include/gtk-2.0 ) # Some Linux distributions (e.g. Red Hat) have glibconfig.h @@ -88,19 +90,24 @@ ELSE (GTK2_LIBRARIES AND GTK2_INCLUDE_DIRS) PKGCONFIG(glib-2.0 _GLIB2IncDir _GLIB2inkDir _GLIB2LinkFlags _GLIB2Cflags) PKGCONFIG(gmodule-2.0 _GMODULE2IncDir _GMODULE2inkDir _GMODULE2LinkFlags _GMODULE2Cflags) SET(GDIR /opt/gnome/lib/glib-2.0/include) + FIND_PATH(GTK2_GLIBCONFIG_INCLUDE_PATH glibconfig.h ${_GLIB2IncDir} /opt/gnome/lib64/glib-2.0/include /opt/gnome/lib/glib-2.0/include + /opt/lib/glib-2.0/include /usr/lib64/glib-2.0/include /usr/lib/glib-2.0/include + /sw/lib/glib-2.0/include ) #MESSAGE(STATUS "DEBUG: GTK2_GLIBCONFIG_INCLUDE_PATH = ${GTK2_GLIBCONFIG_INCLUDE_PATH}") FIND_PATH(GTK2_GLIB_INCLUDE_PATH glib.h ${_GLIB2IncDir} + /opt/include/glib-2.0 /opt/gnome/include/glib-2.0 /usr/include/glib-2.0 + /sw/include/glib-2.0 ) #MESSAGE(STATUS "DEBUG: GTK2_GLIBCONFIG_INCLUDE_PATH = ${GTK2_GLIBCONFIG_INCLUDE_PATH}") @@ -110,6 +117,8 @@ ELSE (GTK2_LIBRARIES AND GTK2_INCLUDE_DIRS) /usr/local/include /usr/openwin/share/include /opt/gnome/include + /opt/include + /sw/include ) PKGCONFIG(pango _PANGOIncDir _PANGOinkDir _PANGOLinkFlags _PANGOCflags) @@ -117,7 +126,9 @@ ELSE (GTK2_LIBRARIES AND GTK2_INCLUDE_DIRS) FIND_PATH(GTK2_PANGO_INCLUDE_PATH pango/pango.h ${_PANGOIncDir} /opt/gnome/include/pango-1.0 + /opt/include/pango-1.0 /usr/include/pango-1.0 + /sw/include/pango-1.0 ) PKGCONFIG(gdk-2.0 _GDK2IncDir _GDK2inkDir _GDK2LinkFlags _GDK2Cflags) @@ -126,8 +137,10 @@ ELSE (GTK2_LIBRARIES AND GTK2_INCLUDE_DIRS) ${_GDK2IncDir} /opt/gnome/lib/gtk-2.0/include /opt/gnome/lib64/gtk-2.0/include + /opt/lib/gtk-2.0/include /usr/lib/gtk-2.0/include /usr/lib64/gtk-2.0/include + /sw/lib/gtk-2.0/include ) PKGCONFIG(cairo _CAIROIncDir _CAIROinkDir _CAIROLinkFlags _CAIROCflags) @@ -137,6 +150,10 @@ ELSE (GTK2_LIBRARIES AND GTK2_INCLUDE_DIRS) /opt/gnome/include/cairo /usr/include /usr/include/cairo + /opt/include + /opt/include/cairo + /sw/include + /sw/include/cairo ) #MESSAGE(STATUS "DEBUG: GTK2_CAIRO_INCLUDE_PATH = ${GTK2_CAIRO_INCLUDE_PATH}") @@ -146,6 +163,8 @@ ELSE (GTK2_LIBRARIES AND GTK2_INCLUDE_DIRS) ${_ATKIncDir} /opt/gnome/include/atk-1.0 /usr/include/atk-1.0 + /opt/include/atk-1.0 + /sw/include/atk-1.0 ) #MESSAGE(STATUS "DEBUG: GTK2_ATK_INCLUDE_PATH = ${GTK2_ATK_INCLUDE_PATH}") @@ -159,6 +178,8 @@ ELSE (GTK2_LIBRARIES AND GTK2_INCLUDE_DIRS) /usr/openwin/lib /usr/X11R6/lib /opt/gnome/lib + /opt/lib + /sw/lib ) FIND_LIBRARY(GTK2_GTK_LIBRARY @@ -171,6 +192,8 @@ ELSE (GTK2_LIBRARIES AND GTK2_INCLUDE_DIRS) /usr/openwin/lib /usr/X11R6/lib /opt/gnome/lib + /opt/lib + /sw/lib ) FIND_LIBRARY(GTK2_GDK_LIBRARY @@ -183,6 +206,8 @@ ELSE (GTK2_LIBRARIES AND GTK2_INCLUDE_DIRS) /usr/openwin/lib /usr/X11R6/lib /opt/gnome/lib + /opt/lib + /sw/lib ) FIND_LIBRARY(GTK2_GMODULE_LIBRARY @@ -195,6 +220,8 @@ ELSE (GTK2_LIBRARIES AND GTK2_INCLUDE_DIRS) /usr/openwin/lib /usr/X11R6/lib /opt/gnome/lib + /opt/lib + /sw/lib ) FIND_LIBRARY(GTK2_GLIB_LIBRARY @@ -207,6 +234,8 @@ ELSE (GTK2_LIBRARIES AND GTK2_INCLUDE_DIRS) /usr/openwin/lib /usr/X11R6/lib /opt/gnome/lib + /opt/lib + /sw/lib ) FIND_LIBRARY(GTK2_Xi_LIBRARY @@ -218,6 +247,8 @@ ELSE (GTK2_LIBRARIES AND GTK2_INCLUDE_DIRS) /usr/openwin/lib /usr/X11R6/lib /opt/gnome/lib + /opt/lib + /sw/lib ) FIND_LIBRARY(GTK2_GTHREAD_LIBRARY @@ -229,6 +260,8 @@ ELSE (GTK2_LIBRARIES AND GTK2_INCLUDE_DIRS) /usr/openwin/lib /usr/X11R6/lib /opt/gnome/lib + /opt/lib + /sw/lib ) @@ -241,6 +274,8 @@ ELSE (GTK2_LIBRARIES AND GTK2_INCLUDE_DIRS) /usr/openwin/lib /usr/X11R6/lib /opt/gnome/lib + /opt/lib + /sw/lib ) IF(GTK2_GTK_INCLUDE_PATH) @@ -264,7 +299,6 @@ ELSE (GTK2_LIBRARIES AND GTK2_INCLUDE_DIRS) ${GTK2_GDKCONFIG_INCLUDE_PATH} ${GTK2_ATK_INCLUDE_PATH} ${GTK2_CAIRO_INCLUDE_PATH} - CACHE INTERNAL "The include directories for GTK2" ) SET(GTK2_LIBRARIES @@ -286,9 +320,7 @@ ELSE (GTK2_LIBRARIES AND GTK2_INCLUDE_DIRS) ${GTK2_LIBRARIES} ${GTK2_GTHREAD_LIBRARY} ) - SET(GTK2_LIBRARIES ${GTK2_LIBRARIES} - CACHE INTERNAL "The libraries for GTK2" - ) + SET(GTK2_LIBRARIES ${GTK2_LIBRARIES}) ENDIF(GTK2_GTHREAD_LIBRARY) ELSE(GTK2_CAIRO_INCLUDE_PATH) MESSAGE(STATUS "Can not find cairo") diff --git a/cmake/modules/FindLEX.cmake b/cmake/modules/FindLEX.cmake index 31033f23ca..2e307f3605 100644 --- a/cmake/modules/FindLEX.cmake +++ b/cmake/modules/FindLEX.cmake @@ -1,10 +1,9 @@ -# - Find unix commands from cygwin -# This module looks for some usual Unix commands. +# - Find lex executable # INCLUDE(FindCygwin) -FIND_PROGRAM(LEX +FIND_PROGRAM(LEX_EXECUTABLE NAMES lex flex @@ -16,5 +15,41 @@ FIND_PROGRAM(LEX /sbin ) MARK_AS_ADVANCED( - LEX + LEX_EXECUTABLE ) + +--------- +# flex a .ll file + +# search flex +MACRO(FIND_FLEX) + IF(NOT FLEX_EXECUTABLE) + FIND_PROGRAM(FLEX_EXECUTABLE flex) + IF (NOT FLEX_EXECUTABLE) + MESSAGE(FATAL_ERROR "flex not found - aborting") + ENDIF (NOT FLEX_EXECUTABLE) + ENDIF(NOT FLEX_EXECUTABLE) +ENDMACRO(FIND_FLEX) + +MACRO(ADD_FLEX_FILES _sources ) + FIND_FLEX() + + FOREACH (_current_FILE ${ARGN}) + GET_FILENAME_COMPONENT(_in ${_current_FILE} ABSOLUTE) + GET_FILENAME_COMPONENT(_basename ${_current_FILE} NAME_WE) + + SET(_out ${CMAKE_CURRENT_BINARY_DIR}/flex_${_basename}.cpp) + + ADD_CUSTOM_COMMAND( + OUTPUT ${_out} + COMMAND ${FLEX_EXECUTABLE} + ARGS + -o${_out} + ${_in} + DEPENDS ${_in} + ) + + SET(${_sources} ${${_sources}} ${_out} ) + ENDFOREACH (_current_FILE) +ENDMACRO(ADD_FLEX_FILES) + diff --git a/cmake/modules/FindPCAP.cmake b/cmake/modules/FindPCAP.cmake index 8eb537d9c7..bd0da85eff 100644 --- a/cmake/modules/FindPCAP.cmake +++ b/cmake/modules/FindPCAP.cmake @@ -1,27 +1,49 @@ # - Find pcap # Find the PCAP includes and library # -# PCAP_INCLUDE_DIR - where to find pcap.h, etc. +# PCAP_INCLUDE_DIRS - where to find pcap.h, etc. # PCAP_LIBRARIES - List of libraries when using pcap. # PCAP_FOUND - True if pcap found. +#Includes FIND_PATH(PCAP_INCLUDE_DIR pcap.h /usr/local/include /usr/include ) -FIND_LIBRARY(PCAP_LIBRARIES +SET(PCAP_INCLUDE_DIRS ${PCAP_INCLUDE_DIR}) + +#Library +FIND_LIBRARY(PCAP_LIBRARY NAMES pcap PATHS /usr/lib /usr/local/lib ) -IF(PCAP_INCLUDE_DIR) - IF(PCAP_LIBRARIES) - SET( PCAP_FOUND "YES" ) - ENDIF(PCAP_LIBRARIES) -ENDIF(PCAP_INCLUDE_DIR) +SET(PCAP_LIBRARIES ${PCAP_LIBRARY}) + +#Functions +INCLUDE(CheckFunctionExists) +SET(CMAKE_REQUIRED_INCLUDES ${PCAP_INCLUDE_DIRS}) +SET(CMAKE_REQUIRED_LIBRARIES ${PCAP_LIBRARIES}) +CHECK_FUNCTION_EXISTS("pcap_breakloop" HAVE_PCAP_BREAKLOOP) +CHECK_FUNCTION_EXISTS("pcap_datalink_name_to_val" HAVE_PCAP_DATALINK_NAME_TO_VAL) +CHECK_FUNCTION_EXISTS("pcap_datalink_val_to_name" HAVE_PCAP_DATALINK_VAL_TO_NAME) +CHECK_FUNCTION_EXISTS("pcap_findalldevs" HAVE_PCAP_FINDALLDEVS) +CHECK_FUNCTION_EXISTS("pcap_freecode" HAVE_PCAP_FREECODE) +CHECK_FUNCTION_EXISTS("pcap_get_selectable_fd" HAVE_PCAP_GET_SELECTABLE_FD) +CHECK_FUNCTION_EXISTS("pcap_lib_version" HAVE_PCAP_LIB_VERSION) +CHECK_FUNCTION_EXISTS("pcap_list_datalinks" HAVE_PCAP_LIST_DATALINKS) +CHECK_FUNCTION_EXISTS("pcap_open_dead" HAVE_PCAP_OPEN_DEAD) +CHECK_FUNCTION_EXISTS("pcap_set_datalink" HAVE_PCAP_SET_DATALINK) + + +#Is pcap found ? +IF(PCAP_INCLUDE_DIR AND PCAP_LIBRARY) + SET( PCAP_FOUND "YES" ) +ENDIF(PCAP_INCLUDE_DIR AND PCAP_LIBRARY) + MARK_AS_ADVANCED( - PCAP_LIBRARIES + PCAP_LIBRARY PCAP_INCLUDE_DIR ) diff --git a/cmake/modules/FindQt4.cmake b/cmake/modules/FindQt4.cmake new file mode 100644 index 0000000000..b836fd6273 --- /dev/null +++ b/cmake/modules/FindQt4.cmake @@ -0,0 +1,1057 @@ +# - 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 qdbuscpp2xml tool. +# QT_DBUSXML2CPP_EXECUTABLE Where to find the qdbusxml2cpp 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 +# +# Copyright (c) 2002 Kitware, Inc., Insight Consortium. All rights reserved. +# See Copyright.txt or http://www.cmake.org/HTML/Copyright.html for details. + + +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.") + SET(QT_QTTEST_LIBRARY_RELEASE "-framework QtTest" CACHE STRING "The QtTest library.") + SET(QT_QTTEST_LIBRARY_DEBUG "-framework QtTest" CACHE STRING "The QtTest 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.") + + 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 qdbuscpp2xml + PATHS ${QT_BINARY_DIR} + NO_DEFAULT_PATH + ) + + FIND_PROGRAM(QT_DBUSXML2CPP_EXECUTABLE + NAMES qdbusxml2cpp + 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}) + + SET_SOURCE_FILES_PROPERTIES(${outfile} PROPERTIES SKIP_AUTOMOC TRUE) # dont run automoc on this file + + 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) + IF ( NOT QT_LIBRARY_DIR ) + MESSAGE(STATUS "Qt libraries NOT found!") + ENDIF(NOT QT_LIBRARY_DIR ) + IF ( NOT QT_INCLUDE_DIR ) + MESSAGE(STATUS "Qt includes NOT found!") + ENDIF( NOT QT_INCLUDE_DIR ) + IF ( NOT QT_MOC_EXECUTABLE ) + MESSAGE(STATUS "Qt's moc NOT found!") + ENDIF( NOT QT_MOC_EXECUTABLE ) + IF ( NOT QT_UIC_EXECUTABLE ) + MESSAGE(STATUS "Qt's uic NOT found!") + ENDIF( NOT QT_UIC_EXECUTABLE ) + IF ( NOT QT_RCC_EXECUTABLE ) + MESSAGE(STATUS "Qt's rcc NOT found!") + ENDIF( NOT QT_RCC_EXECUTABLE ) + 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/UsePkgConfig.cmake b/cmake/modules/UsePkgConfig.cmake new file mode 100644 index 0000000000..9a15015e07 --- /dev/null +++ b/cmake/modules/UsePkgConfig.cmake @@ -0,0 +1,137 @@ +# - pkg-config module for CMake +# +# Defines the following macros: +# +# PKGCONFIG_FOUND(package found) +# PKGCONFIG(package includedir libdir linkflags cflags) +# PKGCONFIG_VERSION(package version) +# PKGCONFIG_DEFINITION(package definition) + +# Calling PKGCONFIG_FOUND will fill into the argument the value of the package search's result +# e.g. PKGCONFIG_FOUND(libart-2.0 LIBART_FOUND) +# +# Calling PKGCONFIG_VERSION will fill the desired version into the argument, +# e.g. PKGCONFIG_VERSION(libart-2.0 LIBART_VERSION) +# Calling PKGCONFIG will fill the desired information into the 4 given arguments, +# e.g. PKGCONFIG(libart-2.0 LIBART_INCLUDE_DIR LIBART_LINK_DIR LIBART_LINK_FLAGS LIBART_CFLAGS) +# if pkg-config was NOT found or the specified software package doesn't exist, the +# variable will be empty when the function returns, otherwise they will contain the respective information +# +# Calling PKGCONFIG_VERSION will fill the desired version into the argument, +# e.g. PKGCONFIG_VERSION(libart-2.0 LIBART_VERSION) +# +# Calling PKGCONFIG_DEFINITION will fill the definition (e.g -D_REENTRANT) into the argument, +# e.g. PKGCONFIG_DEFINITION(libart-2.0 LIBART_DEFINITION) + +FIND_PROGRAM(PKGCONFIG_EXECUTABLE NAMES pkg-config PATHS /usr/local/bin ) + +MACRO(PKGCONFIG _package _include_DIR _link_DIR _link_FLAGS _cflags) +# reset the variables at the beginning + SET(${_include_DIR}) + SET(${_link_DIR}) + SET(${_link_FLAGS}) + SET(${_cflags}) + +# if pkg-config has been found + IF(PKGCONFIG_EXECUTABLE) + + EXEC_PROGRAM(${PKGCONFIG_EXECUTABLE} ARGS ${_package} --exists RETURN_VALUE _return_VALUE OUTPUT_VARIABLE _pkgconfigDevNull ) + +# and if the package of interest also exists for pkg-config, then get the information + IF(NOT _return_VALUE) + + EXEC_PROGRAM(${PKGCONFIG_EXECUTABLE} ARGS ${_package} --variable=includedir OUTPUT_VARIABLE ${_include_DIR} ) + + EXEC_PROGRAM(${PKGCONFIG_EXECUTABLE} ARGS ${_package} --variable=libdir OUTPUT_VARIABLE ${_link_DIR} ) + + EXEC_PROGRAM(${PKGCONFIG_EXECUTABLE} ARGS ${_package} --libs OUTPUT_VARIABLE ${_link_FLAGS} ) + + EXEC_PROGRAM(${PKGCONFIG_EXECUTABLE} ARGS ${_package} --cflags OUTPUT_VARIABLE ${_cflags} ) + + ENDIF(NOT _return_VALUE) + + ENDIF(PKGCONFIG_EXECUTABLE) + +ENDMACRO(PKGCONFIG _include_DIR _link_DIR _link_FLAGS _cflags) + + + +MACRO(PKGCONFIG_FOUND _package _pkgpath _found) + # reset the variable at the beginning + SET(${_found}) + +# if pkg-config has been found + IF(PKGCONFIG_EXECUTABLE) + SET(ENV{PKG_CONFIG_PATH} ${_pkgpath}) + EXECUTE_PROCESS(COMMAND ${PKGCONFIG_EXECUTABLE} --print-errors --exists ${_package} RESULT_VARIABLE _return_VALUE OUTPUT_VARIABLE _pkgconfigDevNull ) + + IF(${_pkgconfigDevNull}) + MESSAGE(STATUS "${_pkgconfigDevNull}") + ENDIF(${_pkgconfigDevNull}) + + IF(NOT _return_VALUE) + SET(${_found} "TRUE") + ENDIF(NOT _return_VALUE) + ENDIF(PKGCONFIG_EXECUTABLE) + +ENDMACRO(PKGCONFIG_FOUND _package _pkgpath _found) + + +#TODO: doesn't work when pkgconfig returns multiples inlude path +MACRO(PKGCONFIG_INCLUDE_DIRS _package _pkgpath _include_dirs) +# reset the variable at the beginning + SET(${_include_dirs}) + IF(PKGCONFIG_EXECUTABLE) + SET(ENV{PKG_CONFIG_PATH} ${_pkgpath}) + EXECUTE_PROCESS(COMMAND ${PKGCONFIG_EXECUTABLE} --cflags-only-I ${_package} OUTPUT_VARIABLE include) + STRING(REGEX REPLACE "-I/" "/" _include_dirs_temp ${include}) + STRING(REGEX REPLACE "[\n\r]" "" ${_include_dirs} ${_include_dirs_temp}) + #When the include directory is /usr/include, pkgconfig returns a space and a new line + IF("${_include_dirs}" STREQUAL " ") + SET(${_include_dirs} "/usr/include") + ENDIF("${_include_dirs}" STREQUAL " ") + ENDIF(PKGCONFIG_EXECUTABLE) +ENDMACRO(PKGCONFIG_INCLUDE_DIRS _package _pkgpath _include_dirs) + +MACRO(PKGCONFIG_LIBRARY_DIR _package _pkgpath _library_dir) +# reset the variable at the beginning + SET(${_library_dir}) + IF(PKGCONFIG_EXECUTABLE) + SET(ENV{PKG_CONFIG_PATH} ${_pkgpath}) + EXECUTE_PROCESS(COMMAND ${PKGCONFIG_EXECUTABLE} --libs-only-L ${_package} OUTPUT_VARIABLE libraries) + STRING(REGEX REPLACE "-L/" "/" _library_dirs_temp ${libraries}) + MESSAGE(STATUS "lib dir ${_library_dirs_temp} end") + STRING(REGEX REPLACE "[\r\n]" "" ${_library_dir} ${_library_dirs_temp}) + #When the library directory is /usr/lib, pkgconfig returns an empty stringand a new line + IF("${_library_dir}" STREQUAL " ") + SET(${_library_dir} "/usr/lib") + ENDIF("${_library_dir}" STREQUAL " ") + MESSAGE(STATUS "lib dir ${${_library_dir}} end") + ENDIF(PKGCONFIG_EXECUTABLE) +ENDMACRO(PKGCONFIG_LIBRARY_DIR _package _pkgpath _library_dir) + +MACRO(PKGCONFIG_VERSION _package _pkgpath _version) +# reset the variable at the beginning + SET(${_version}) + + IF(PKGCONFIG_EXECUTABLE) + SET(ENV{PKG_CONFIG_PATH} ${_pkgpath}) + EXECUTE_PROCESS(COMMAND ${PKGCONFIG_EXECUTABLE} --modversion ${_package} OUTPUT_VARIABLE version) + STRING(REGEX REPLACE "[\n\r]" "" ${_version} ${version}) + ENDIF(PKGCONFIG_EXECUTABLE) + +ENDMACRO(PKGCONFIG_VERSION _package _pkgpath _version) + +MACRO(PKGCONFIG_DEFINITION _package _pkgpath _definition) +# reset the variable at the beginning + SET(${_definition}) + + IF(PKGCONFIG_EXECUTABLE) + SET(ENV{PKG_CONFIG_PATH} ${_pkgpath}) + EXECUTE_PROCESS(COMMAND ${PKGCONFIG_EXECUTABLE} --cflags-only-other ${_package} OUTPUT_VARIABLE definition) + STRING(REGEX REPLACE "[\n\r]" "" ${_definition} ${definition}) + ENDIF(PKGCONFIG_EXECUTABLE) + +ENDMACRO(PKGCONFIG_DEFINITION _package _pkgpath _definition) + +MARK_AS_ADVANCED(PKGCONFIG_EXECUTABLE) |