2 # This module can be used to find Qt4.
3 # The most important issue is that the Qt4 qmake is available via the system path.
4 # This qmake is then used to detect basically everything else.
5 # This module defines a number of key variables and macros. First is
6 # QT_USE_FILE which is the path to a CMake file that can be included to compile
7 # Qt 4 applications and libraries. By default, the QtCore and QtGui
8 # libraries are loaded. This behavior can be changed by setting one or more
9 # of the following variables to true:
22 # All the libraries required are stored in a variable called QT_LIBRARIES.
23 # Add this variable to your TARGET_LINK_LIBRARIES.
25 # macro QT4_WRAP_CPP(outfiles inputfile ... )
26 # macro QT4_WRAP_UI(outfiles inputfile ... )
27 # macro QT4_ADD_RESOURCE(outfiles inputfile ... )
28 # macro QT4_AUTOMOC(inputfile ... )
29 # macro QT4_GENERATE_MOC(inputfile outputfile )
31 # macro QT4_ADD_DBUS_INTERFACE(outfiles interface basename)
32 # create a the interface header and implementation files with the
33 # given basename from the given interface xml file and add it to
36 # macro QT4_ADD_DBUS_INTERFACES(outfiles inputfile ... )
37 # create the interface header and implementation files
38 # for all listed interface xml files
39 # the name will be automatically determined from the name of the xml file
41 # macro QT4_ADD_DBUS_ADAPTOR(outfiles xmlfile parentheader parentclassname [basename] )
42 # create a dbus adaptor (header and implementation file) from the xml file
43 # describing the interface, and add it to the list of sources. The adaptor
44 # forwards the calls to a parent class, defined in parentheader and named
45 # parentclassname. The name of the generated files will be
46 # <basename>adaptor.{cpp,h} where basename is the basename of the xml file.
48 # macro QT4_GENERATE_DBUS_INTERFACE( header)
49 # generate the xml interface file from the given header
51 # QT_FOUND If false, don't try to use Qt.
52 # QT4_FOUND If false, don't try to use Qt 4.
54 # QT_QTCORE_FOUND True if QtCore was found.
55 # QT_QTGUI_FOUND True if QtGui was found.
56 # QT_QT3SUPPORT_FOUND True if Qt3Support was found.
57 # QT_QTASSISTANT_FOUND True if QtAssistant was found.
58 # QT_QTDBUS_FOUND True if QtDBus was found.
59 # QT_QTDESIGNER_FOUND True if QtDesigner was found.
60 # QT_QTMOTIF_FOUND True if QtMotif was found.
61 # QT_QTNETWORK_FOUND True if QtNetwork was found.
62 # QT_QTNSPLUGIN_FOUND True if QtNsPlugin was found.
63 # QT_QTOPENGL_FOUND True if QtOpenGL was found.
64 # QT_QTSQL_FOUND True if QtSql was found.
65 # QT_QTXML_FOUND True if QtXml was found.
66 # QT_QTSVG_FOUND True if QtSvg was found.
67 # QT_QTTEST_FOUND True if QtTest was found.
69 # QT_DEFINITIONS Definitions to use when compiling code that uses Qt.
71 # QT_INCLUDES List of paths to all include directories of
72 # Qt4 QT_INCLUDE_DIR and QT_QTCORE_INCLUDE_DIR are
73 # always in this variable even if NOTFOUND,
74 # all other INCLUDE_DIRS are
75 # only added if they are found.
77 # QT_INCLUDE_DIR Path to "include" of Qt4
78 # QT_QT_INCLUDE_DIR Path to "include/Qt"
79 # QT_QT3SUPPORT_INCLUDE_DIR Path to "include/Qt3Support"
80 # QT_QTASSISTANT_INCLUDE_DIR Path to "include/QtAssistant"
81 # QT_QTCORE_INCLUDE_DIR Path to "include/QtCore"
82 # QT_QTDESIGNER_INCLUDE_DIR Path to "include/QtDesigner"
83 # QT_QTDBUS_INCLUDE_DIR Path to "include/QtDBus"
84 # QT_QTGUI_INCLUDE_DIR Path to "include/QtGui"
85 # QT_QTMOTIF_INCLUDE_DIR Path to "include/QtMotif"
86 # QT_QTNETWORK_INCLUDE_DIR Path to "include/QtNetwork"
87 # QT_QTNSPLUGIN_INCLUDE_DIR Path to "include/QtNsPlugin"
88 # QT_QTOPENGL_INCLUDE_DIR Path to "include/QtOpenGL"
89 # QT_QTSQL_INCLUDE_DIR Path to "include/QtSql"
90 # QT_QTXML_INCLUDE_DIR Path to "include/QtXml"
91 # QT_QTSVG_INCLUDE_DIR Path to "include/QtSvg"
92 # QT_QTTEST_INCLUDE_DIR Path to "include/QtTest"
94 # QT_LIBRARY_DIR Path to "lib" of Qt4
96 # For every library of Qt there are three variables:
97 # QT_QTFOO_LIBRARY_RELEASE, which contains the full path to the release version
98 # QT_QTFOO_LIBRARY_DEBUG, which contains the full path to the debug version
99 # QT_QTFOO_LIBRARY, the full path to the release version if available, otherwise to the debug version
101 # So there are the following variables:
102 # The Qt3Support library: QT_QT3SUPPORT_LIBRARY
103 # QT_QT3SUPPORT_LIBRARY_RELEASE
104 # QT_QT3SUPPORT_DEBUG
106 # The QtAssistant library: QT_QTASSISTANT_LIBRARY
107 # QT_QTASSISTANT_LIBRARY_RELEASE
108 # QT_QTASSISTANT_LIBRARY_DEBUG
110 # The QtCore library: QT_QTCORE_LIBRARY
111 # QT_QTCORE_LIBRARY_RELEASE
112 # QT_QTCORE_LIBRARY_DEBUG
114 # The QtDBus library: QT_QTDBUS_LIBRARY
115 # QT_QTDBUS_LIBRARY_RELEASE
116 # QT_QTDBUS_LIBRARY_DEBUG
118 # The QtDesigner library: QT_QTDESIGNER_LIBRARY
119 # QT_QTDESIGNER_LIBRARY_RELEASE
120 # QT_QTDESIGNER_LIBRARY_DEBUG
122 # The QtGui library: QT_QTGUI_LIBRARY
123 # QT_QTGUI_LIBRARY_RELEASE
124 # QT_QTGUI_LIBRARY_DEBUG
126 # The QtMotif library: QT_QTMOTIF_LIBRARY
127 # QT_QTMOTIF_LIBRARY_RELEASE
128 # QT_QTMOTIF_LIBRARY_DEBUG
130 # The QtNetwork library: QT_QTNETWORK_LIBRARY
131 # QT_QTNETWORK_LIBRARY_RELEASE
132 # QT_QTNETWORK_LIBRARY_DEBUG
134 # The QtNsPLugin library: QT_QTNSPLUGIN_LIBRARY
135 # QT_QTNSPLUGIN_LIBRARY_RELEASE
136 # QT_QTNSPLUGIN_LIBRARY_DEBUG
138 # The QtOpenGL library: QT_QTOPENGL_LIBRARY
139 # QT_QTOPENGL_LIBRARY_RELEASE
140 # QT_QTOPENGL_LIBRARY_DEBUG
142 # The QtSql library: QT_QTSQL_LIBRARY
143 # QT_QTSQL_LIBRARY_RELEASE
144 # QT_QTSQL_LIBRARY_DEBUG
146 # The QtXml library: QT_QTXML_LIBRARY
147 # QT_QTXML_LIBRARY_RELEASE
148 # QT_QTXML_LIBRARY_DEBUG
150 # The QtSvg library: QT_QTSVG_LIBRARY
151 # QT_QTSVG_LIBRARY_RELEASE
152 # QT_QTSVG_LIBRARY_DEBUG
154 # The QtTest library: QT_QTTEST_LIBRARY
155 # QT_QTTEST_LIBRARY_RELEASE
156 # QT_QTTEST_LIBRARY_DEBUG
158 # The qtmain library for Windows QT_QTMAIN_LIBRARY
159 # QT_QTMAIN_LIBRARY_RELEASE
160 # QT_QTMAIN_LIBRARY_DEBUG
162 #The QtUiTools library: QT_QTUITOOLS_LIBRARY
163 # QT_QTUITOOLS_LIBRARY_RELEASE
164 # QT_QTUITOOLS_LIBRARY_DEBUG
166 # also defined, but NOT for general use are
167 # QT_MOC_EXECUTABLE Where to find the moc tool.
168 # QT_UIC_EXECUTABLE Where to find the uic tool.
169 # QT_UIC3_EXECUTABLE Where to find the uic3 tool.
170 # QT_RCC_EXECUTABLE Where to find the rcc tool
171 # QT_DBUSCPP2XML_EXECUTABLE Where to find the dbuscpp2xml tool.
172 # QT_DBUSXML2CPP_EXECUTABLE Where to find the dbusxml2cpp tool.
174 # QT_DOC_DIR Path to "doc" of Qt4
175 # QT_MKSPECS_DIR Path to "mkspecs" of Qt4
178 # These are around for backwards compatibility
180 # QT_WRAP_CPP Set true if QT_MOC_EXECUTABLE is found
181 # QT_WRAP_UI Set true if QT_UIC_EXECUTABLE is found
183 # These variables do _NOT_ have any effect anymore (compared to FindQt.cmake)
184 # QT_MT_REQUIRED Qt4 is now always multithreaded
186 # These variables are set to "" Because Qt structure changed
187 # (They make no sense in Qt4)
188 # QT_QT_LIBRARY Qt-Library is now split
190 INCLUDE(CheckSymbolExists)
191 INCLUDE(MacroAddFileDependencies)
193 SET(QT_USE_FILE ${CMAKE_ROOT}/Modules/UseQt4.cmake)
195 SET( QT_DEFINITIONS "")
198 SET(QT_DEFINITIONS -DQT_DLL)
202 FIND_PROGRAM(QT_QMAKE_EXECUTABLE NAMES qmake qmake-qt4 PATHS
203 "[HKEY_CURRENT_USER\\Software\\Trolltech\\Qt3Versions\\4.0.0;InstallDir]/bin"
204 "[HKEY_CURRENT_USER\\Software\\Trolltech\\Versions\\4.0.0;InstallDir]/bin"
208 SET(QT4_INSTALLED_VERSION_TOO_OLD FALSE)
211 IF (QT_QMAKE_EXECUTABLE)
213 SET(QT4_QMAKE_FOUND FALSE)
215 EXEC_PROGRAM(${QT_QMAKE_EXECUTABLE} ARGS "-query QT_VERSION" OUTPUT_VARIABLE QTVERSION)
217 # check that we found the Qt4 qmake, Qt3 qmake output won't match here
218 STRING(REGEX MATCH "^[0-9]+\\.[0-9]+\\.[0-9]+" qt_version_tmp "${QTVERSION}")
221 # we need at least version 4.0.0
222 IF (NOT QT_MIN_VERSION)
223 SET(QT_MIN_VERSION "4.0.0")
224 ENDIF (NOT QT_MIN_VERSION)
226 #now parse the parts of the user given version string into variables
227 STRING(REGEX MATCH "^[0-9]+\\.[0-9]+\\.[0-9]+" req_qt_major_vers "${QT_MIN_VERSION}")
228 IF (NOT req_qt_major_vers)
229 MESSAGE( FATAL_ERROR "Invalid Qt version string given: \"${QT_MIN_VERSION}\", expected e.g. \"4.0.1\"")
230 ENDIF (NOT req_qt_major_vers)
232 # now parse the parts of the user given version string into variables
233 STRING(REGEX REPLACE "^([0-9]+)\\.[0-9]+\\.[0-9]+" "\\1" req_qt_major_vers "${QT_MIN_VERSION}")
234 STRING(REGEX REPLACE "^[0-9]+\\.([0-9])+\\.[0-9]+" "\\1" req_qt_minor_vers "${QT_MIN_VERSION}")
235 STRING(REGEX REPLACE "^[0-9]+\\.[0-9]+\\.([0-9]+)" "\\1" req_qt_patch_vers "${QT_MIN_VERSION}")
237 IF (NOT req_qt_major_vers EQUAL 4)
238 MESSAGE( FATAL_ERROR "Invalid Qt version string given: \"${QT_MIN_VERSION}\", major version 4 is required, e.g. \"4.0.1\"")
239 ENDIF (NOT req_qt_major_vers EQUAL 4)
241 # and now the version string given by qmake
242 STRING(REGEX REPLACE "^([0-9]+)\\.[0-9]+\\.[0-9]+.*" "\\1" found_qt_major_vers "${QTVERSION}")
243 STRING(REGEX REPLACE "^[0-9]+\\.([0-9])+\\.[0-9]+.*" "\\1" found_qt_minor_vers "${QTVERSION}")
244 STRING(REGEX REPLACE "^[0-9]+\\.[0-9]+\\.([0-9]+).*" "\\1" found_qt_patch_vers "${QTVERSION}")
246 # compute an overall version number which can be compared at once
247 MATH(EXPR req_vers "${req_qt_major_vers}*10000 + ${req_qt_minor_vers}*100 + ${req_qt_patch_vers}")
248 MATH(EXPR found_vers "${found_qt_major_vers}*10000 + ${found_qt_minor_vers}*100 + ${found_qt_patch_vers}")
250 IF (found_vers LESS req_vers)
251 SET(QT4_QMAKE_FOUND FALSE)
252 SET(QT4_INSTALLED_VERSION_TOO_OLD TRUE)
253 ELSE (found_vers LESS req_vers)
254 SET(QT4_QMAKE_FOUND TRUE)
255 ENDIF (found_vers LESS req_vers)
257 ENDIF (qt_version_tmp)
259 ENDIF (QT_QMAKE_EXECUTABLE)
263 # ask qmake for the library dir
265 IF (NOT QT_LIBRARY_DIR)
266 EXEC_PROGRAM( ${QT_QMAKE_EXECUTABLE}
267 ARGS "-query QT_INSTALL_LIBS"
268 OUTPUT_VARIABLE QT_LIBRARY_DIR_TMP )
269 IF(EXISTS "${QT_LIBRARY_DIR_TMP}")
270 SET(QT_LIBRARY_DIR ${QT_LIBRARY_DIR_TMP} CACHE PATH "Qt library dir")
271 ELSE(EXISTS "${QT_LIBRARY_DIR_TMP}")
272 MESSAGE("Warning: QT_QMAKE_EXECUTABLE reported QT_INSTALL_LIBS as ${QT_LIBRARY_DIR_TMP}")
273 MESSAGE("Warning: ${QT_LIBRARY_DIR_TMP} does NOT exist, Qt must NOT be installed correctly.")
274 ENDIF(EXISTS "${QT_LIBRARY_DIR_TMP}")
275 ENDIF(NOT QT_LIBRARY_DIR)
278 IF (EXISTS ${QT_LIBRARY_DIR}/QtCore.framework)
279 SET(QT_USE_FRAMEWORKS ON
280 CACHE BOOL "Set to ON if Qt build uses frameworks.")
281 ELSE (EXISTS ${QT_LIBRARY_DIR}/QtCore.framework)
282 SET(QT_USE_FRAMEWORKS OFF
283 CACHE BOOL "Set to ON if Qt build uses frameworks.")
284 ENDIF (EXISTS ${QT_LIBRARY_DIR}/QtCore.framework)
286 MARK_AS_ADVANCED(QT_USE_FRAMEWORKS)
289 # ask qmake for the binary dir
290 IF (NOT QT_BINARY_DIR)
291 EXEC_PROGRAM(${QT_QMAKE_EXECUTABLE}
292 ARGS "-query QT_INSTALL_BINS"
293 OUTPUT_VARIABLE qt_bins )
294 SET(QT_BINARY_DIR ${qt_bins} CACHE INTERNAL "")
295 ENDIF (NOT QT_BINARY_DIR)
297 # ask qmake for the include dir
298 IF (NOT QT_HEADERS_DIR)
299 EXEC_PROGRAM( ${QT_QMAKE_EXECUTABLE}
300 ARGS "-query QT_INSTALL_HEADERS"
301 OUTPUT_VARIABLE qt_headers )
302 SET(QT_HEADERS_DIR ${qt_headers} CACHE INTERNAL "")
303 ENDIF(NOT QT_HEADERS_DIR)
306 # ask qmake for the documentation directory
308 EXEC_PROGRAM( ${QT_QMAKE_EXECUTABLE}
309 ARGS "-query QT_INSTALL_DOCS"
310 OUTPUT_VARIABLE qt_doc_dir )
311 SET(QT_DOC_DIR ${qt_doc_dir} CACHE PATH "The location of the Qt docs")
312 ENDIF (NOT QT_DOC_DIR)
314 # ask qmake for the mkspecs directory
315 IF (NOT QT_MKSPECS_DIR)
316 EXEC_PROGRAM( ${QT_QMAKE_EXECUTABLE}
317 ARGS "-query QMAKE_MKSPECS"
318 OUTPUT_VARIABLE qt_mkspecs_dir )
319 SET(QT_MKSPECS_DIR ${qt_mkspecs_dir} CACHE PATH "The location of the Qt mkspecs")
320 ENDIF (NOT QT_MKSPECS_DIR)
322 ########################################
324 # Setting the INCLUDE-Variables
326 ########################################
328 FIND_PATH(QT_QTCORE_INCLUDE_DIR QtGlobal
329 "[HKEY_CURRENT_USER\\Software\\Trolltech\\Qt3Versions\\4.0.0;InstallDir]/include/QtCore"
330 ${QT_HEADERS_DIR}/QtCore
331 ${QT_LIBRARY_DIR}/QtCore.framework/Headers
332 $ENV{QTDIR}/include/QtCore
333 "$ENV{ProgramFiles}/qt/include/Qt"
336 # Set QT_INCLUDE_DIR by removine "/QtCore" in the string ${QT_QTCORE_INCLUDE_DIR}
337 IF( QT_QTCORE_INCLUDE_DIR AND NOT QT_INCLUDE_DIR)
338 IF (QT_USE_FRAMEWORKS)
339 SET(QT_INCLUDE_DIR ${QT_HEADERS_DIR})
340 ELSE (QT_USE_FRAMEWORKS)
341 STRING( REGEX REPLACE "/QtCore$" "" qt4_include_dir ${QT_QTCORE_INCLUDE_DIR})
342 SET( QT_INCLUDE_DIR ${qt4_include_dir} CACHE PATH "")
343 ENDIF (QT_USE_FRAMEWORKS)
344 ENDIF( QT_QTCORE_INCLUDE_DIR AND NOT QT_INCLUDE_DIR)
346 IF( NOT QT_INCLUDE_DIR)
347 IF( NOT Qt4_FIND_QUIETLY AND Qt4_FIND_REQUIRED)
348 MESSAGE( FATAL_ERROR "Could NOT find QtGlobal header")
349 ENDIF( NOT Qt4_FIND_QUIETLY AND Qt4_FIND_REQUIRED)
350 ENDIF( NOT QT_INCLUDE_DIR)
352 #############################################
354 # Find out what window system we're using
356 #############################################
357 # Save required includes variable
358 SET(CMAKE_REQUIRED_INCLUDES_SAVE ${CMAKE_REQUIRED_INCLUDES})
359 # Add QT_INCLUDE_DIR to CMAKE_REQUIRED_INCLUDES
360 SET(CMAKE_REQUIRED_INCLUDES "${CMAKE_REQUIRED_INCLUDES};${QT_INCLUDE_DIR}")
361 # Check for Window system symbols (note: only one should end up being set)
362 CHECK_SYMBOL_EXISTS(Q_WS_X11 "QtCore/qglobal.h" Q_WS_X11)
363 CHECK_SYMBOL_EXISTS(Q_WS_MAC "QtCore/qglobal.h" Q_WS_MAC)
364 CHECK_SYMBOL_EXISTS(Q_WS_WIN "QtCore/qglobal.h" Q_WS_WIN)
366 IF (QT_QTCOPY_REQUIRED)
367 CHECK_SYMBOL_EXISTS(QT_IS_QTCOPY "QtCore/qglobal.h" QT_KDE_QT_COPY)
368 IF (NOT QT_IS_QTCOPY)
369 MESSAGE(FATAL_ERROR "qt-copy is required, but hasn't been found")
370 ENDIF (NOT QT_IS_QTCOPY)
371 ENDIF (QT_QTCOPY_REQUIRED)
373 # Restore CMAKE_REQUIRED_INCLUDES variable
374 SET(CMAKE_REQUIRED_INCLUDES ${CMAKE_REQUIRED_INCLUDES_SAVE})
376 #############################################
378 IF (QT_USE_FRAMEWORKS)
379 SET(QT_DEFINITIONS ${QT_DEFINITIONS} -F${QT_LIBRARY_DIR} -L${QT_LIBRARY_DIR} )
380 ENDIF (QT_USE_FRAMEWORKS)
382 # Set QT_QT3SUPPORT_INCLUDE_DIR
383 FIND_PATH(QT_QT3SUPPORT_INCLUDE_DIR Qt3Support
385 ${QT_INCLUDE_DIR}/Qt3Support
386 ${QT_LIBRARY_DIR}/Qt3Support.framework/Headers
390 # Set QT_QT_INCLUDE_DIR
391 FIND_PATH(QT_QT_INCLUDE_DIR qglobal.h
394 ${QT_LIBRARY_DIR}/QtCore.framework/Headers
398 # Set QT_QTGUI_INCLUDE_DIR
399 FIND_PATH(QT_QTGUI_INCLUDE_DIR QtGui
401 ${QT_INCLUDE_DIR}/QtGui
402 ${QT_LIBRARY_DIR}/QtGui.framework/Headers
406 # Set QT_QTSVG_INCLUDE_DIR
407 FIND_PATH(QT_QTSVG_INCLUDE_DIR QtSvg
409 ${QT_INCLUDE_DIR}/QtSvg
410 ${QT_LIBRARY_DIR}/QtSvg.framework/Headers
414 # Set QT_QTTEST_INCLUDE_DIR
415 FIND_PATH(QT_QTTEST_INCLUDE_DIR QtTest
417 ${QT_INCLUDE_DIR}/QtTest
418 ${QT_LIBRARY_DIR}/QtTest.framework/Headers
422 # Set QT_QTUITOOLS_INCLUDE_DIR
423 FIND_PATH(QT_QTUITOOLS_INCLUDE_DIR QtUiTools
425 ${QT_INCLUDE_DIR}/QtUiTools
426 ${QT_LIBRARY_DIR}/QtUiTools.framework/Headers
432 # Set QT_QTMOTIF_INCLUDE_DIR
434 FIND_PATH(QT_QTMOTIF_INCLUDE_DIR QtMotif PATHS ${QT_INCLUDE_DIR}/QtMotif NO_DEFAULT_PATH )
437 # Set QT_QTNETWORK_INCLUDE_DIR
438 FIND_PATH(QT_QTNETWORK_INCLUDE_DIR QtNetwork
440 ${QT_INCLUDE_DIR}/QtNetwork
441 ${QT_LIBRARY_DIR}/QtNetwork.framework/Headers
445 # Set QT_QTNSPLUGIN_INCLUDE_DIR
446 FIND_PATH(QT_QTNSPLUGIN_INCLUDE_DIR QtNsPlugin
448 ${QT_INCLUDE_DIR}/QtNsPlugin
449 ${QT_LIBRARY_DIR}/QtNsPlugin.framework/Headers
453 # Set QT_QTOPENGL_INCLUDE_DIR
454 FIND_PATH(QT_QTOPENGL_INCLUDE_DIR QtOpenGL
456 ${QT_INCLUDE_DIR}/QtOpenGL
457 ${QT_LIBRARY_DIR}/QtOpenGL.framework/Headers
461 # Set QT_QTSQL_INCLUDE_DIR
462 FIND_PATH(QT_QTSQL_INCLUDE_DIR QtSql
464 ${QT_INCLUDE_DIR}/QtSql
465 ${QT_LIBRARY_DIR}/QtSql.framework/Headers
469 # Set QT_QTXML_INCLUDE_DIR
470 FIND_PATH(QT_QTXML_INCLUDE_DIR QtXml
472 ${QT_INCLUDE_DIR}/QtXml
473 ${QT_LIBRARY_DIR}/QtXml.framework/Headers
477 # Set QT_QTASSISTANT_INCLUDE_DIR
478 FIND_PATH(QT_QTASSISTANT_INCLUDE_DIR QtAssistant
480 ${QT_INCLUDE_DIR}/QtAssistant
481 ${QT_HEADERS_DIR}/QtAssistant
485 # Set QT_QTDESIGNER_INCLUDE_DIR
486 FIND_PATH(QT_QTDESIGNER_INCLUDE_DIR QDesignerComponents
488 ${QT_INCLUDE_DIR}/QtDesigner
489 ${QT_HEADERS_DIR}/QtDesigner
493 # Set QT_QTDBUS_INCLUDE_DIR
494 FIND_PATH(QT_QTDBUS_INCLUDE_DIR QtDBus
496 ${QT_INCLUDE_DIR}/QtDBus
497 ${QT_HEADERS_DIR}/QtDBus
501 # Make variables changeble to the advanced user
502 MARK_AS_ADVANCED( QT_LIBRARY_DIR QT_INCLUDE_DIR QT_QT_INCLUDE_DIR QT_DOC_DIR)
505 SET( QT_INCLUDES ${QT_INCLUDE_DIR} ${QT_QT_INCLUDE_DIR} ${QT_MKSPECS_DIR}/default )
508 ########################################
510 # Setting the LIBRARY-Variables
512 ########################################
514 IF (QT_USE_FRAMEWORKS)
515 # If FIND_LIBRARY found libraries in Apple frameworks, we would NOT have
516 # to jump through these hoops.
517 SET(QT_QTCORE_LIBRARY_RELEASE "-F${QT_LIBRARY_DIR} -framework QtCore" CACHE STRING "The QtCore library.")
518 SET(QT_QTCORE_LIBRARY_DEBUG "-F${QT_LIBRARY_DIR} -framework QtCore" CACHE STRING "The QtCore library.")
519 SET(QT_QT3SUPPORT_LIBRARY_RELEASE "-framework Qt3Support" CACHE STRING "The Qt3Support library.")
520 SET(QT_QT3SUPPORT_LIBRARY_DEBUG "-framework Qt3Support" CACHE STRING "The Qt3Support library.")
521 SET(QT_QTGUI_LIBRARY_RELEASE "-framework QtGui" CACHE STRING "The QtGui library.")
522 SET(QT_QTGUI_LIBRARY_DEBUG "-framework QtGui" CACHE STRING "The QtGui library.")
523 SET(QT_QTNETWORK_LIBRARY_RELEASE "-framework QtNetwork" CACHE STRING "The QtNetwork library.")
524 SET(QT_QTNETWORK_LIBRARY_DEBUG "-framework QtNetwork" CACHE STRING "The QtNetwork library.")
525 SET(QT_QTOPENGL_LIBRARY_RELEASE "-framework QtOpenGL" CACHE STRING "The QtOpenGL library.")
526 SET(QT_QTOPENGL_LIBRARY_DEBUG "-framework QtOpenGL" CACHE STRING "The QtOpenGL library.")
527 SET(QT_QTSQL_LIBRARY_RELEASE "-framework QtSql" CACHE STRING "The QtSql library.")
528 SET(QT_QTSQL_LIBRARY_DEBUG "-framework QtSql" CACHE STRING "The QtSql library.")
529 SET(QT_QTXML_LIBRARY_RELEASE "-framework QtXml" CACHE STRING "The QtXml library.")
530 SET(QT_QTXML_LIBRARY_DEBUG "-framework QtXml" CACHE STRING "The QtXml library.")
531 SET(QT_QTSVG_LIBRARY_RELEASE "-framework QtSvg" CACHE STRING "The QtSvg library.")
532 SET(QT_QTSVG_LIBRARY_DEBUG "-framework QtSvg" CACHE STRING "The QtSvg library.")
533 SET(QT_QTDBUS_LIBRARY_RELEASE "-framework QtDBus" CACHE STRING "The QtDBus library.")
534 SET(QT_QTDBUS_LIBRARY_DEBUG "-framework QtDBus" CACHE STRING "The QtDBus library.")
537 # WTF? why don't we have frameworks? :P
538 SET(QT_QTUITOOLS_LIBRARY_RELEASE "-L${QT_LIBRARY_DIR} -lQtUiTools" CACHE STRING "The QtUiTools library.")
539 SET(QT_QTUITOOLS_LIBRARY_DEBUG "-L${QT_LIBRARY_DIR} -lQtUiTools" CACHE STRING "The QtUiTools library.")
540 SET(QT_QTTEST_LIBRARY_RELEASE "-L${QT_LIBRARY_DIR} -lQtTest" CACHE STRING "The QtTest library.")
541 SET(QT_QTTEST_LIBRARY_DEBUG "-L${QT_LIBRARY_DIR} -lQtTest_debug" CACHE STRING "The QtTest library.")
542 MARK_AS_ADVANCED(QT_QT3SUPPORT_LIBRARY QT_QTGUI_LIBRARY )
544 ELSE (QT_USE_FRAMEWORKS)
546 # Set QT_QTCORE_LIBRARY by searching for a lib with "QtCore." as part of the filename
547 FIND_LIBRARY(QT_QTCORE_LIBRARY_RELEASE NAMES QtCore QtCore4 PATHS ${QT_LIBRARY_DIR} NO_DEFAULT_PATH )
548 FIND_LIBRARY(QT_QTCORE_LIBRARY_DEBUG NAMES QtCore_debug QtCored4 PATHS ${QT_LIBRARY_DIR} NO_DEFAULT_PATH)
550 # Set QT_QT3SUPPORT_LIBRARY
551 FIND_LIBRARY(QT_QT3SUPPORT_LIBRARY_RELEASE NAMES Qt3Support Qt3Support4 PATHS ${QT_LIBRARY_DIR} NO_DEFAULT_PATH)
552 FIND_LIBRARY(QT_QT3SUPPORT_LIBRARY_DEBUG NAMES Qt3Support_debug Qt3Supportd4 PATHS ${QT_LIBRARY_DIR} NO_DEFAULT_PATH)
554 # Set QT_QTGUI_LIBRARY
555 FIND_LIBRARY(QT_QTGUI_LIBRARY_RELEASE NAMES QtGui QtGui4 PATHS ${QT_LIBRARY_DIR} NO_DEFAULT_PATH)
556 FIND_LIBRARY(QT_QTGUI_LIBRARY_DEBUG NAMES QtGui_debug QtGuid4 PATHS ${QT_LIBRARY_DIR} NO_DEFAULT_PATH)
558 # Set QT_QTMOTIF_LIBRARY
560 FIND_LIBRARY(QT_QTMOTIF_LIBRARY_RELEASE NAMES QtMotif PATHS ${QT_LIBRARY_DIR} NO_DEFAULT_PATH)
561 FIND_LIBRARY(QT_QTMOTIF_LIBRARY_DEBUG NAMES QtMotif_debug PATHS ${QT_LIBRARY_DIR} NO_DEFAULT_PATH)
564 # Set QT_QTNETWORK_LIBRARY
565 FIND_LIBRARY(QT_QTNETWORK_LIBRARY_RELEASE NAMES QtNetwork QtNetwork4 PATHS ${QT_LIBRARY_DIR} NO_DEFAULT_PATH)
566 FIND_LIBRARY(QT_QTNETWORK_LIBRARY_DEBUG NAMES QtNetwork_debug QtNetworkd4 PATHS ${QT_LIBRARY_DIR} NO_DEFAULT_PATH)
568 # Set QT_QTNSPLUGIN_LIBRARY
569 FIND_LIBRARY(QT_QTNSPLUGIN_LIBRARY_RELEASE NAMES QtNsPlugin PATHS ${QT_LIBRARY_DIR} NO_DEFAULT_PATH)
570 FIND_LIBRARY(QT_QTNSPLUGIN_LIBRARY_DEBUG NAMES QtNsPlugin_debug PATHS ${QT_LIBRARY_DIR} NO_DEFAULT_PATH)
572 # Set QT_QTOPENGL_LIBRARY
573 FIND_LIBRARY(QT_QTOPENGL_LIBRARY_RELEASE NAMES QtOpenGL QtOpenGL4 PATHS ${QT_LIBRARY_DIR} NO_DEFAULT_PATH)
574 FIND_LIBRARY(QT_QTOPENGL_LIBRARY_DEBUG NAMES QtOpenGL_debug QtOpenGLd4 PATHS ${QT_LIBRARY_DIR} NO_DEFAULT_PATH)
576 # Set QT_QTSQL_LIBRARY
577 FIND_LIBRARY(QT_QTSQL_LIBRARY_RELEASE NAMES QtSql QtSql4 PATHS ${QT_LIBRARY_DIR} NO_DEFAULT_PATH)
578 FIND_LIBRARY(QT_QTSQL_LIBRARY_DEBUG NAMES QtSql_debug QtSqld4 PATHS ${QT_LIBRARY_DIR} NO_DEFAULT_PATH)
580 # Set QT_QTXML_LIBRARY
581 FIND_LIBRARY(QT_QTXML_LIBRARY_RELEASE NAMES QtXml QtXml4 PATHS ${QT_LIBRARY_DIR} NO_DEFAULT_PATH)
582 FIND_LIBRARY(QT_QTXML_LIBRARY_DEBUG NAMES QtXml_debug QtXmld4 PATHS ${QT_LIBRARY_DIR} NO_DEFAULT_PATH)
584 # Set QT_QTSVG_LIBRARY
585 FIND_LIBRARY(QT_QTSVG_LIBRARY_RELEASE NAMES QtSvg QtSvg4 PATHS ${QT_LIBRARY_DIR} NO_DEFAULT_PATH)
586 FIND_LIBRARY(QT_QTSVG_LIBRARY_DEBUG NAMES QtSvg_debug QtSvgd4 PATHS ${QT_LIBRARY_DIR} NO_DEFAULT_PATH)
588 # Set QT_QTUITOOLS_LIBRARY
589 FIND_LIBRARY(QT_QTUITOOLS_LIBRARY_RELEASE NAMES QtUiTools QtUiTools4 PATHS ${QT_LIBRARY_DIR} NO_DEFAULT_PATH)
590 FIND_LIBRARY(QT_QTUITOOLS_LIBRARY_DEBUG NAMES QtUiTools_debug QtUiToolsd4 PATHS ${QT_LIBRARY_DIR} NO_DEFAULT_PATH)
592 # Set QT_QTTEST_LIBRARY
593 FIND_LIBRARY(QT_QTTEST_LIBRARY_RELEASE NAMES QtTest QtTest4 PATHS ${QT_LIBRARY_DIR} NO_DEFAULT_PATH)
594 FIND_LIBRARY(QT_QTTEST_LIBRARY_DEBUG NAMES QtTest_debug QtTest_debug4 QtTestd4 PATHS ${QT_LIBRARY_DIR} NO_DEFAULT_PATH)
596 FIND_LIBRARY(QT_QTDBUS_LIBRARY_RELEASE NAMES QtDBus QtDBus4 PATHS ${QT_LIBRARY_DIR} NO_DEFAULT_PATH)
597 FIND_LIBRARY(QT_QTDBUS_LIBRARY_DEBUG NAMES QtDBus_debug QtDBus_debug4 QtDBusd4 PATHS ${QT_LIBRARY_DIR} NO_DEFAULT_PATH)
599 MARK_AS_ADVANCED(QT_QT3SUPPORT_LIBRARY QT_QTGUI_LIBRARY )
601 ENDIF (QT_USE_FRAMEWORKS)
603 IF( NOT QT_QTCORE_LIBRARY_DEBUG AND NOT QT_QTCORE_LIBRARY_RELEASE )
604 IF( NOT Qt4_FIND_QUIETLY AND Qt4_FIND_REQUIRED)
605 MESSAGE( FATAL_ERROR "Could NOT find QtCore. Check CMakeFiles/CMakeError.log for more details.")
606 ENDIF( NOT Qt4_FIND_QUIETLY AND Qt4_FIND_REQUIRED)
607 ENDIF( NOT QT_QTCORE_LIBRARY_DEBUG AND NOT QT_QTCORE_LIBRARY_RELEASE )
609 # Set QT_QTASSISTANT_LIBRARY
610 FIND_LIBRARY(QT_QTASSISTANT_LIBRARY_RELEASE NAMES QtAssistantClient QtAssistant QtAssistant4 PATHS ${QT_LIBRARY_DIR} NO_DEFAULT_PATH)
611 FIND_LIBRARY(QT_QTASSISTANT_LIBRARY_DEBUG NAMES QtAssistantClientd QtAssistantClient_debug QtAssistant_debug QtAssistantd4 PATHS ${QT_LIBRARY_DIR} NO_DEFAULT_PATH)
613 # Set QT_QTDESIGNER_LIBRARY
614 FIND_LIBRARY(QT_QTDESIGNER_LIBRARY_RELEASE NAMES QtDesigner QtDesigner4 PATHS ${QT_LIBRARY_DIR} NO_DEFAULT_PATH)
615 FIND_LIBRARY(QT_QTDESIGNER_LIBRARY_DEBUG NAMES QtDesigner_debug QtDesignerd4 PATHS ${QT_LIBRARY_DIR} NO_DEFAULT_PATH)
617 ############################################
619 # Check the existence of the libraries.
621 ############################################
623 MACRO (_QT4_ADJUST_LIB_VARS basename)
624 IF (QT_${basename}_INCLUDE_DIR)
626 # if only the release version was found, set the debug variable also to the release version
627 IF (QT_${basename}_LIBRARY_RELEASE AND NOT QT_${basename}_LIBRARY_DEBUG)
628 SET(QT_${basename}_LIBRARY_DEBUG ${QT_${basename}_LIBRARY_RELEASE})
629 SET(QT_${basename}_LIBRARY ${QT_${basename}_LIBRARY_RELEASE})
630 SET(QT_${basename}_LIBRARIES ${QT_${basename}_LIBRARY_RELEASE})
631 ENDIF (QT_${basename}_LIBRARY_RELEASE AND NOT QT_${basename}_LIBRARY_DEBUG)
633 # if only the debug version was found, set the release variable also to the debug version
634 IF (QT_${basename}_LIBRARY_DEBUG AND NOT QT_${basename}_LIBRARY_RELEASE)
635 SET(QT_${basename}_LIBRARY_RELEASE ${QT_${basename}_LIBRARY_DEBUG})
636 SET(QT_${basename}_LIBRARY ${QT_${basename}_LIBRARY_DEBUG})
637 SET(QT_${basename}_LIBRARIES ${QT_${basename}_LIBRARY_DEBUG})
638 ENDIF (QT_${basename}_LIBRARY_DEBUG AND NOT QT_${basename}_LIBRARY_RELEASE)
640 IF (QT_${basename}_LIBRARY_DEBUG AND QT_${basename}_LIBRARY_RELEASE)
642 SET(QT_${basename}_LIBRARY ${QT_${basename}_LIBRARY_RELEASE})
644 SET(QT_${basename}_LIBRARY optimized ${QT_${basename}_LIBRARY_RELEASE} debug ${QT_${basename}_LIBRARY_DEBUG})
646 SET(QT_${basename}_LIBRARIES optimized ${QT_${basename}_LIBRARY_RELEASE} debug ${QT_${basename}_LIBRARY_DEBUG})
647 ENDIF (QT_${basename}_LIBRARY_DEBUG AND QT_${basename}_LIBRARY_RELEASE)
649 SET(QT_${basename}_LIBRARY ${QT_${basename}_LIBRARY} CACHE FILEPATH "The Qt ${basename} library")
651 IF (QT_${basename}_LIBRARY)
652 SET(QT_${basename}_FOUND 1)
653 ENDIF (QT_${basename}_LIBRARY)
655 #add the include directory to QT_INCLUDES
656 SET(QT_INCLUDES ${QT_INCLUDES} "${QT_${basename}_INCLUDE_DIR}")
657 ENDIF (QT_${basename}_INCLUDE_DIR )
659 # Make variables changeble to the advanced user
660 MARK_AS_ADVANCED(QT_${basename}_LIBRARY QT_${basename}_LIBRARY_RELEASE QT_${basename}_LIBRARY_DEBUG QT_${basename}_INCLUDE_DIR)
661 ENDMACRO (_QT4_ADJUST_LIB_VARS)
664 _QT4_ADJUST_LIB_VARS(QTMAIN)
668 _QT4_ADJUST_LIB_VARS(QTCORE)
669 _QT4_ADJUST_LIB_VARS(QTGUI)
670 _QT4_ADJUST_LIB_VARS(QT3SUPPORT)
671 _QT4_ADJUST_LIB_VARS(QTASSISTANT)
672 _QT4_ADJUST_LIB_VARS(QTDESIGNER)
674 _QT4_ADJUST_LIB_VARS(QTMOTIF)
676 _QT4_ADJUST_LIB_VARS(QTNETWORK)
677 _QT4_ADJUST_LIB_VARS(QTNSPLUGIN)
678 _QT4_ADJUST_LIB_VARS(QTOPENGL)
679 _QT4_ADJUST_LIB_VARS(QTSQL)
680 _QT4_ADJUST_LIB_VARS(QTXML)
681 _QT4_ADJUST_LIB_VARS(QTSVG)
682 _QT4_ADJUST_LIB_VARS(QTUITOOLS)
683 _QT4_ADJUST_LIB_VARS(QTTEST)
684 _QT4_ADJUST_LIB_VARS(QTDBUS)
686 #######################################
688 # Check the executables of Qt
691 #######################################
694 # find moc and uic using qmake
695 FILE(WRITE ${CMAKE_CURRENT_BINARY_DIR}/CMakeFiles/CMakeTmpQmake/tmp.pro
696 "message(MOC<$$QMAKE_MOC>)
697 message(UIC<$$QMAKE_UIC>)
700 EXECUTE_PROCESS(COMMAND ${QT_QMAKE_EXECUTABLE}
701 WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/CMakeFiles/CMakeTmpQmake
702 OUTPUT_VARIABLE _moc_OUTPUT
703 ERROR_VARIABLE _moc_OUTPUT )
704 FILE(REMOVE_RECURSE "${CMAKE_CURRENT_BINARY_DIR}/CMakeFiles/CMakeTmpQmake")
706 STRING(REGEX REPLACE ".*MOC<([^>]+).*" "\\1" QT_MOC_EXECUTABLE_INTERNAL "${_moc_OUTPUT}" )
707 STRING(REGEX REPLACE ".*UIC<([^>]+).*" "\\1" QT_UIC_EXECUTABLE_INTERNAL "${_moc_OUTPUT}" )
709 FILE(TO_CMAKE_PATH "${QT_MOC_EXECUTABLE_INTERNAL}" QT_MOC_EXECUTABLE_INTERNAL)
710 FILE(TO_CMAKE_PATH "${QT_UIC_EXECUTABLE_INTERNAL}" QT_UIC_EXECUTABLE_INTERNAL)
712 SET(QT_MOC_EXECUTABLE ${QT_MOC_EXECUTABLE_INTERNAL} CACHE FILEPATH "The moc executable")
713 SET(QT_UIC_EXECUTABLE ${QT_UIC_EXECUTABLE_INTERNAL} CACHE FILEPATH "The uic executable")
715 FIND_PROGRAM(QT_UIC3_EXECUTABLE
717 PATHS ${QT_BINARY_DIR}
721 FIND_PROGRAM(QT_RCC_EXECUTABLE
723 PATHS ${QT_BINARY_DIR}
727 FIND_PROGRAM(QT_DBUSCPP2XML_EXECUTABLE
729 PATHS ${QT_BINARY_DIR}
733 FIND_PROGRAM(QT_DBUSXML2CPP_EXECUTABLE
735 PATHS ${QT_BINARY_DIR}
739 IF (QT_MOC_EXECUTABLE)
740 SET(QT_WRAP_CPP "YES")
741 ENDIF (QT_MOC_EXECUTABLE)
743 IF (QT_UIC_EXECUTABLE)
744 SET(QT_WRAP_UI "YES")
745 ENDIF (QT_UIC_EXECUTABLE)
749 MARK_AS_ADVANCED( QT_UIC_EXECUTABLE QT_UIC3_EXECUTABLE QT_MOC_EXECUTABLE QT_RCC_EXECUTABLE )
751 ######################################
753 # Macros for building Qt files
755 ######################################
757 MACRO (QT4_GET_MOC_INC_DIRS _moc_INC_DIRS)
758 SET(${_moc_INC_DIRS})
759 GET_DIRECTORY_PROPERTY(_inc_DIRS INCLUDE_DIRECTORIES)
761 FOREACH(_current ${_inc_DIRS})
762 SET(${_moc_INC_DIRS} ${${_moc_INC_DIRS}} "-I" ${_current})
763 ENDFOREACH(_current ${_inc_DIRS})
764 ENDMACRO(QT4_GET_MOC_INC_DIRS)
767 MACRO (QT4_GENERATE_MOC infile outfile )
769 QT4_GET_MOC_INC_DIRS(moc_includes)
771 GET_FILENAME_COMPONENT(abs_infile ${infile} ABSOLUTE)
773 ADD_CUSTOM_COMMAND(OUTPUT ${outfile}
774 COMMAND ${QT_MOC_EXECUTABLE}
775 ARGS ${moc_includes} -o ${outfile} ${abs_infile}
776 DEPENDS ${abs_infile})
778 MACRO_ADD_FILE_DEPENDENCIES(${abs_infile} ${outfile})
779 ENDMACRO (QT4_GENERATE_MOC)
782 # QT4_WRAP_CPP(outfiles inputfile ... )
783 # TODO perhaps add support for -D, -U and other minor options
785 MACRO (QT4_WRAP_CPP outfiles )
787 QT4_GET_MOC_INC_DIRS(moc_includes)
790 GET_FILENAME_COMPONENT(it ${it} ABSOLUTE)
791 GET_FILENAME_COMPONENT(outfile ${it} NAME_WE)
793 SET(outfile ${CMAKE_CURRENT_BINARY_DIR}/moc_${outfile}.cxx)
794 ADD_CUSTOM_COMMAND(OUTPUT ${outfile}
795 COMMAND ${QT_MOC_EXECUTABLE}
796 ARGS ${moc_includes} -o ${outfile} ${it}
798 SET(${outfiles} ${${outfiles}} ${outfile})
801 ENDMACRO (QT4_WRAP_CPP)
804 # QT4_WRAP_UI(outfiles inputfile ... )
806 MACRO (QT4_WRAP_UI outfiles )
809 GET_FILENAME_COMPONENT(outfile ${it} NAME_WE)
810 GET_FILENAME_COMPONENT(infile ${it} ABSOLUTE)
811 SET(outfile ${CMAKE_CURRENT_BINARY_DIR}/ui_${outfile}.h)
812 ADD_CUSTOM_COMMAND(OUTPUT ${outfile}
813 COMMAND ${QT_UIC_EXECUTABLE}
814 ARGS -o ${outfile} ${infile}
815 MAIN_DEPENDENCY ${infile})
816 SET(${outfiles} ${${outfiles}} ${outfile})
819 ENDMACRO (QT4_WRAP_UI)
822 # QT4_ADD_RESOURCE(outfiles inputfile ... )
823 # TODO perhaps consider adding support for compression and root options to rcc
825 MACRO (QT4_ADD_RESOURCES outfiles )
828 GET_FILENAME_COMPONENT(outfilename ${it} NAME_WE)
829 GET_FILENAME_COMPONENT(infile ${it} ABSOLUTE)
830 SET(outfile ${CMAKE_CURRENT_BINARY_DIR}/qrc_${outfilename}.cxx)
831 ADD_CUSTOM_COMMAND(OUTPUT ${outfile}
832 COMMAND ${QT_RCC_EXECUTABLE}
833 ARGS -name ${outfilename} -o ${outfile} ${infile}
834 MAIN_DEPENDENCY ${infile} )
835 SET(${outfiles} ${${outfiles}} ${outfile})
838 ENDMACRO (QT4_ADD_RESOURCES)
841 MACRO(QT4_ADD_DBUS_INTERFACE _sources _interface _basename)
842 GET_FILENAME_COMPONENT(_infile ${_interface} ABSOLUTE)
843 SET(_header ${CMAKE_CURRENT_BINARY_DIR}/${_basename}.h)
844 SET(_impl ${CMAKE_CURRENT_BINARY_DIR}/${_basename}.cpp)
845 SET(_moc ${CMAKE_CURRENT_BINARY_DIR}/${_basename}.moc)
847 ADD_CUSTOM_COMMAND(OUTPUT ${_impl} ${_header}
848 COMMAND ${QT_DBUSXML2CPP_EXECUTABLE} -m -p ${_basename} ${_infile}
851 SET_SOURCE_FILES_PROPERTIES(${_impl} PROPERTIES SKIP_AUTOMOC TRUE)
853 QT4_GENERATE_MOC(${_header} ${_moc})
855 SET(${_sources} ${${_sources}} ${_impl} ${_header} ${_moc})
856 MACRO_ADD_FILE_DEPENDENCIES(${_impl} ${_moc})
858 ENDMACRO(QT4_ADD_DBUS_INTERFACE)
861 MACRO(QT4_ADD_DBUS_INTERFACES _sources)
862 FOREACH (_current_FILE ${ARGN})
863 GET_FILENAME_COMPONENT(_infile ${_current_FILE} ABSOLUTE)
865 # get the part before the ".xml" suffix
866 STRING(REGEX REPLACE "(.*[/\\.])?([^\\.]+)\\.xml" "\\2" _basename ${_current_FILE})
867 STRING(TOLOWER ${_basename} _basename)
869 QT4_ADD_DBUS_INTERFACE(${_sources} ${_infile} ${_basename}interface)
870 ENDFOREACH (_current_FILE)
871 ENDMACRO(QT4_ADD_DBUS_INTERFACES)
874 MACRO(QT4_GENERATE_DBUS_INTERFACE _header)
875 GET_FILENAME_COMPONENT(_in_file ${_header} ABSOLUTE)
876 GET_FILENAME_COMPONENT(_basename ${_header} NAME_WE)
877 SET(_target ${CMAKE_CURRENT_BINARY_DIR}/${_basename}.xml)
879 ADD_CUSTOM_COMMAND(OUTPUT ${_target}
880 COMMAND ${QT_DBUSCPP2XML_EXECUTABLE} ${_in_file} > ${_target}
883 ENDMACRO(QT4_GENERATE_DBUS_INTERFACE)
886 MACRO(QT4_ADD_DBUS_ADAPTOR _sources _xml_file _include _parentClass)
887 GET_FILENAME_COMPONENT(_infile ${_xml_file} ABSOLUTE)
889 SET(_optionalBasename "${ARGV4}")
890 IF (_optionalBasename)
891 SET(_basename ${_optionalBasename} )
892 ELSE (_optionalBasename)
893 STRING(REGEX REPLACE "(.*[/\\.])?([^\\.]+)\\.xml" "\\2adaptor" _basename ${_infile})
894 STRING(TOLOWER ${_basename} _basename)
895 ENDIF (_optionalBasename)
897 SET(_optionalClassName "${ARGV5}")
898 SET(_header ${CMAKE_CURRENT_BINARY_DIR}/${_basename}.h)
899 SET(_impl ${CMAKE_CURRENT_BINARY_DIR}/${_basename}.cpp)
900 SET(_moc ${CMAKE_CURRENT_BINARY_DIR}/${_basename}.moc)
902 IF(_optionalClassName)
903 ADD_CUSTOM_COMMAND(OUTPUT ${_impl} ${_header}
904 COMMAND ${QT_DBUSXML2CPP_EXECUTABLE} -m -a ${_basename} -c ${_optionalClassName} -i ${_include} -l ${_parentClass} ${_infile}
907 ELSE(_optionalClassName)
908 ADD_CUSTOM_COMMAND(OUTPUT ${_impl} ${_header}
909 COMMAND ${QT_DBUSXML2CPP_EXECUTABLE} -m -a ${_basename} -i ${_include} -l ${_parentClass} ${_infile}
912 ENDIF(_optionalClassName)
914 QT4_GENERATE_MOC(${_header} ${_moc})
915 SET_SOURCE_FILES_PROPERTIES(${_impl} PROPERTIES SKIP_AUTOMOC TRUE)
916 MACRO_ADD_FILE_DEPENDENCIES(${_impl} ${_moc})
918 SET(${_sources} ${${_sources}} ${_impl} ${_header} ${_moc})
919 ENDMACRO(QT4_ADD_DBUS_ADAPTOR)
921 MACRO(QT4_ADD_DBUS_ADAPTORS _sources)
922 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")
923 ENDMACRO(QT4_ADD_DBUS_ADAPTORS _sources)
926 QT4_GET_MOC_INC_DIRS(_moc_INCS)
928 SET(_matching_FILES )
929 FOREACH (_current_FILE ${ARGN})
931 GET_FILENAME_COMPONENT(_abs_FILE ${_current_FILE} ABSOLUTE)
932 # if "SKIP_AUTOMOC" is set to true, we will not handle this file here.
933 # here. this is required to make bouic work correctly:
934 # we need to add generated .cpp files to the sources (to compile them),
935 # but we cannot let automoc handle them, as the .cpp files don't exist yet when
936 # cmake is run for the very first time on them -> however the .cpp files might
937 # exist at a later run. at that time we need to skip them, so that we don't add two
938 # different rules for the same moc file
939 GET_SOURCE_FILE_PROPERTY(_skip ${_abs_FILE} SKIP_AUTOMOC)
941 IF ( NOT _skip AND EXISTS ${_abs_FILE} )
943 FILE(READ ${_abs_FILE} _contents)
945 GET_FILENAME_COMPONENT(_abs_PATH ${_abs_FILE} PATH)
947 STRING(REGEX MATCHALL "#include +[^ ]+\\.moc[\">]" _match "${_contents}")
949 FOREACH (_current_MOC_INC ${_match})
950 STRING(REGEX MATCH "[^ <\"]+\\.moc" _current_MOC "${_current_MOC_INC}")
952 GET_filename_component(_basename ${_current_MOC} NAME_WE)
953 # SET(_header ${CMAKE_CURRENT_SOURCE_DIR}/${_basename}.h)
954 SET(_header ${_abs_PATH}/${_basename}.h)
955 SET(_moc ${CMAKE_CURRENT_BINARY_DIR}/${_current_MOC})
956 ADD_CUSTOM_COMMAND(OUTPUT ${_moc}
957 COMMAND ${QT_MOC_EXECUTABLE}
958 ARGS ${_moc_INCS} ${_header} -o ${_moc}
962 MACRO_ADD_FILE_DEPENDENCIES(${_abs_FILE} ${_moc})
963 ENDFOREACH (_current_MOC_INC)
965 ENDIF ( NOT _skip AND EXISTS ${_abs_FILE} )
966 ENDFOREACH (_current_FILE)
967 ENDMACRO(QT4_AUTOMOC)
971 ######################################
973 # decide if Qt got found
975 ######################################
977 # if the includes,libraries,moc,uic and rcc are found then we have it
978 IF( QT_LIBRARY_DIR AND QT_INCLUDE_DIR AND QT_MOC_EXECUTABLE AND QT_UIC_EXECUTABLE AND QT_RCC_EXECUTABLE)
979 SET( QT4_FOUND "YES" )
980 IF( NOT Qt4_FIND_QUIETLY)
981 MESSAGE(STATUS "Found Qt-Version ${QTVERSION}")
982 ENDIF( NOT Qt4_FIND_QUIETLY)
983 ELSE( QT_LIBRARY_DIR AND QT_INCLUDE_DIR AND QT_MOC_EXECUTABLE AND QT_UIC_EXECUTABLE AND QT_RCC_EXECUTABLE)
985 SET(QT_QMAKE_EXECUTABLE "${QT_QMAKE_EXECUTABLE}-NOTFOUND" CACHE FILEPATH "Invalid qmake found" FORCE)
986 IF( Qt4_FIND_REQUIRED)
987 MESSAGE( FATAL_ERROR "Qt libraries, includes, moc, uic or/and rcc NOT found!")
988 ENDIF( Qt4_FIND_REQUIRED)
989 ENDIF( QT_LIBRARY_DIR AND QT_INCLUDE_DIR AND QT_MOC_EXECUTABLE AND QT_UIC_EXECUTABLE AND QT_RCC_EXECUTABLE)
990 SET(QT_FOUND ${QT4_FOUND})
993 #######################################
995 # System dependent settings
997 #######################################
998 # for unix add X11 stuff
1000 # on OS X X11 may not be required
1004 FIND_PACKAGE(Threads)
1005 SET(QT_QTCORE_LIBRARY ${QT_QTCORE_LIBRARY} ${CMAKE_THREAD_LIBS_INIT})
1009 #######################################
1011 # compatibility settings
1013 #######################################
1014 # Backwards compatibility for CMake1.4 and 1.2
1015 SET (QT_MOC_EXE ${QT_MOC_EXECUTABLE} )
1016 SET (QT_UIC_EXE ${QT_UIC_EXECUTABLE} )
1018 SET( QT_QT_LIBRARY "")
1020 ELSE(QT4_QMAKE_FOUND)
1022 SET(QT_QMAKE_EXECUTABLE "${QT_QMAKE_EXECUTABLE}-NOTFOUND" CACHE FILEPATH "Invalid qmake found" FORCE)
1023 IF(Qt4_FIND_REQUIRED)
1024 IF(QT4_INSTALLED_VERSION_TOO_OLD)
1025 MESSAGE(FATAL_ERROR "The installed Qt version ${QTVERSION} is too old, at least version ${QT_MIN_VERSION} is required")
1026 ELSE(QT4_INSTALLED_VERSION_TOO_OLD)
1027 MESSAGE( FATAL_ERROR "Qt qmake not found!")
1028 ENDIF(QT4_INSTALLED_VERSION_TOO_OLD)
1029 ELSE(Qt4_FIND_REQUIRED)
1030 IF(QT4_INSTALLED_VERSION_TOO_OLD AND NOT Qt4_FIND_QUIETLY)
1031 MESSAGE(STATUS "The installed Qt version ${QTVERSION} is too old, at least version ${QT_MIN_VERSION} is required")
1032 ENDIF(QT4_INSTALLED_VERSION_TOO_OLD AND NOT Qt4_FIND_QUIETLY)
1033 ENDIF(Qt4_FIND_REQUIRED)
1035 ENDIF (QT4_QMAKE_FOUND)