1# - Locate Qt include paths and libraries 2# This module defines: 3# QT3_INCLUDE_DIR - where to find qt.h, etc. 4# QT3_LIBRARIES - the libraries to link against to use Qt. 5# QT3_DEFINITIONS - definitions to use when 6# compiling code that uses Qt. 7# QT3_FOUND - If false, don't try to use Qt. 8# 9# If you need the multithreaded version of Qt, set QT_MT_REQUIRED to TRUE 10# 11# Also defined, but not for general use are: 12# QT3_MOC_EXECUTABLE, where to find the moc tool. 13# QT3_UIC_EXECUTABLE, where to find the uic tool. 14# QT3_QT_LIBRARY, where to find the Qt library. 15# QT3_QTMAIN_LIBRARY, where to find the qtmain 16# library. This is only required by Qt3 on Windows. 17 18# These are around for backwards compatibility 19# they will be set 20# QT_WRAP_CPP, set true if QT3_MOC_EXECUTABLE is found 21# QT_WRAP_UI set true if QT3_UIC_EXECUTABLE is found 22 23FILE(GLOB GLOB_PATHS_BIN /usr/lib/qt-3*/bin/) 24FIND_PATH(QT3_INCLUDE_DIR qt.h 25 "[HKEY_CURRENT_USER\\Software\\Trolltech\\Qt3Versions\\3.2.1;InstallDir]/include/Qt" 26 "[HKEY_CURRENT_USER\\Software\\Trolltech\\Qt3Versions\\3.2.0;InstallDir]/include/Qt" 27 "[HKEY_CURRENT_USER\\Software\\Trolltech\\Qt3Versions\\3.1.0;InstallDir]/include/Qt" 28 $ENV{QTDIR}/include 29 ${GLOB_PATHS_BIN} 30 /usr/local/qt/include 31 /usr/lib/qt/include 32 /usr/lib/qt3/include 33 /usr/include/qt 34 /usr/share/qt3/include 35 C:/Progra~1/qt/include 36 /usr/include/qt3 37 /usr/X11R6/include 38 ) 39 40# if qglobal.h is not in the qt_include_dir then set 41# QT3_INCLUDE_DIR to NOTFOUND 42IF(NOT EXISTS ${QT3_INCLUDE_DIR}/qglobal.h) 43 SET(QT3_INCLUDE_DIR QT3_INCLUDE_DIR-NOTFOUND CACHE PATH "path to qt3 include directory" FORCE) 44ENDIF(NOT EXISTS ${QT3_INCLUDE_DIR}/qglobal.h) 45 46IF(QT3_INCLUDE_DIR) 47 #extract the version string from qglobal.h 48 FILE(READ ${QT3_INCLUDE_DIR}/qglobal.h QGLOBAL_H) 49 STRING(REGEX MATCH "#define[\t ]+QT_VERSION_STR[\t ]+\"([0-9]+.[0-9]+.[0-9]+)\"" QGLOBAL_H "${QGLOBAL_H}") 50 STRING(REGEX REPLACE ".*\"([0-9]+.[0-9]+.[0-9]+)\".*" "\\1" qt_version_str "${QGLOBAL_H}") 51 52 # Under windows the qt library (MSVC) has the format qt-mtXYZ where XYZ is the 53 # version X.Y.Z, so we need to remove the dots from version 54 STRING(REGEX REPLACE "\\." "" qt_version_str_lib "${qt_version_str}") 55ELSE(QT3_INCLUDE_DIR) 56ENDIF(QT3_INCLUDE_DIR) 57 58FILE(GLOB GLOB_PATHS_LIB /usr/lib/qt-3*/lib/) 59IF (QT_MT_REQUIRED) 60 FIND_LIBRARY(QT3_QT_LIBRARY 61 NAMES 62 qt-mt qt-mt${qt_version_str_lib} qt-mtnc${qt_version_str_lib} 63 qt-mtedu${qt_version_str_lib} qt-mt230nc qt-mtnc321 qt-mt3 64 PATHS 65 "[HKEY_CURRENT_USER\\Software\\Trolltech\\Qt3Versions\\3.2.1;InstallDir]/lib" 66 "[HKEY_CURRENT_USER\\Software\\Trolltech\\Qt3Versions\\3.2.0;InstallDir]/lib" 67 "[HKEY_CURRENT_USER\\Software\\Trolltech\\Qt3Versions\\3.1.0;InstallDir]/lib" 68 $ENV{QTDIR}/lib 69 ${GLOB_PATHS_LIB} 70 /usr/local/qt/lib 71 /usr/lib/qt/lib 72 /usr/lib/qt3/lib 73 /usr/lib/qt3/lib64 74 /usr/share/qt3/lib 75 C:/Progra~1/qt/lib 76 /usr/X11R6/lib 77 ) 78 79ELSE (QT_MT_REQUIRED) 80 FIND_LIBRARY(QT3_QT_LIBRARY 81 NAMES 82 qt qt-${qt_version_str_lib} qt-edu${qt_version_str_lib} 83 qt-mt qt-mt${qt_version_str_lib} qt-mtnc${qt_version_str_lib} 84 qt-mtedu${qt_version_str_lib} qt-mt230nc qt-mtnc321 qt-mt3 85 PATHS 86 "[HKEY_CURRENT_USER\\Software\\Trolltech\\Qt3Versions\\3.2.1;InstallDir]/lib" 87 "[HKEY_CURRENT_USER\\Software\\Trolltech\\Qt3Versions\\3.2.0;InstallDir]/lib" 88 "[HKEY_CURRENT_USER\\Software\\Trolltech\\Qt3Versions\\3.1.0;InstallDir]/lib" 89 $ENV{QTDIR}/lib 90 ${GLOB_PATHS_LIB} 91 /usr/local/qt/lib 92 /usr/lib/qt/lib 93 /usr/lib/qt3/lib 94 /usr/lib/qt3/lib64 95 /usr/share/qt3/lib 96 C:/Progra~1/qt/lib 97 /usr/X11R6/lib 98 ) 99ENDIF (QT_MT_REQUIRED) 100 101IF(QT3_QT_LIBRARY) 102ELSE(QT3_QT_LIBRARY) 103ENDIF(QT3_QT_LIBRARY) 104 105 106FIND_LIBRARY(QT_QASSISTANTCLIENT_LIBRARY 107 NAMES qassistantclient 108 PATHS 109 "[HKEY_CURRENT_USER\\Software\\Trolltech\\Qt3Versions\\3.2.1;InstallDir]/lib" 110 "[HKEY_CURRENT_USER\\Software\\Trolltech\\Qt3Versions\\3.2.0;InstallDir]/lib" 111 "[HKEY_CURRENT_USER\\Software\\Trolltech\\Qt3Versions\\3.1.0;InstallDir]/lib" 112 $ENV{QTDIR}/lib 113 ${GLOB_PATHS_LIB} 114 /usr/local/qt/lib 115 /usr/lib/qt3/lib 116 /usr/lib/qt3/lib64 117 /usr/share/qt3/lib 118 C:/Progra~1/qt/lib 119 /usr/X11R6/lib 120 ) 121 122# qt 3 should prefer QTDIR over the PATH 123FIND_PROGRAM(QT3_MOC_EXECUTABLE 124 NAMES moc moc-qt3 125 PATHS 126 $ENV{QTDIR}/bin 127 NO_DEFAULT_PATH 128) 129 130FIND_PROGRAM(QT3_MOC_EXECUTABLE 131 NAMES moc moc-qt3 132 PATHS 133 "[HKEY_CURRENT_USER\\Software\\Trolltech\\Qt3Versions\\3.2.1;InstallDir]/include/Qt" 134 "[HKEY_CURRENT_USER\\Software\\Trolltech\\Qt3Versions\\3.2.0;InstallDir]/include/Qt" 135 "[HKEY_CURRENT_USER\\Software\\Trolltech\\Qt3Versions\\3.1.0;InstallDir]/include/Qt" 136 $ENV{QTDIR}/bin 137 ${GLOB_PATHS_BIN} 138 /usr/local/qt/bin 139 /usr/lib/qt/bin 140 /usr/lib/qt3/bin 141 /usr/share/qt3/bin 142 C:/Progra~1/qt/bin 143 /usr/X11R6/bin 144 ) 145 146IF(QT3_MOC_EXECUTABLE) 147 SET ( QT_WRAP_CPP "YES") 148ELSE(QT3_MOC_EXECUTABLE) 149ENDIF(QT3_MOC_EXECUTABLE) 150 151# qt 3 should prefer QTDIR over the PATH 152FIND_PROGRAM(QT3_UIC_EXECUTABLE uic 153 PATHS 154 $ENV{QTDIR}/bin 155 NO_DEFAULT_PATH 156) 157FIND_PROGRAM(QT3_UIC_EXECUTABLE uic 158 "[HKEY_CURRENT_USER\\Software\\Trolltech\\Qt3Versions\\3.2.1;InstallDir]/include/Qt" 159 "[HKEY_CURRENT_USER\\Software\\Trolltech\\Qt3Versions\\3.2.0;InstallDir]/include/Qt" 160 "[HKEY_CURRENT_USER\\Software\\Trolltech\\Qt3Versions\\3.1.0;InstallDir]/include/Qt" 161 $ENV{QTDIR}/bin 162 ${GLOB_PATHS_BIN} 163 /usr/local/qt/bin 164 /usr/lib/qt/bin 165 /usr/lib/qt3/bin 166 /usr/share/qt3/bin 167 C:/Progra~1/qt/bin 168 /usr/X11R6/bin 169 ) 170 171IF(QT3_UIC_EXECUTABLE) 172 SET ( QT_WRAP_UI "YES") 173ELSE(QT3_UIC_EXECUTABLE) 174ENDIF(QT3_UIC_EXECUTABLE) 175 176IF (WIN32) 177 FIND_LIBRARY(QT3_QTMAIN_LIBRARY qtmain 178 "[HKEY_CURRENT_USER\\Software\\Trolltech\\Qt3Versions\\3.2.1;InstallDir]/lib" 179 "[HKEY_CURRENT_USER\\Software\\Trolltech\\Qt3Versions\\3.2.0;InstallDir]/lib" 180 "[HKEY_CURRENT_USER\\Software\\Trolltech\\Qt3Versions\\3.1.0;InstallDir]/lib" 181 "$ENV{ProgramFiles}/qt/lib" 182 $ENV{QTDIR}/lib "C:/Program Files/qt/lib" 183 DOC "This Library is only needed by and included with Qt3 on MSWindows. It should be NOTFOUND, undefined or IGNORE otherwise." 184 ) 185ENDIF (WIN32) 186 187 188IF (QT3_MIN_VERSION) 189 190 STRING(REGEX REPLACE "([0-9]+)\\.[0-9]+\\.[0-9]+" "\\1" qt_major_vers "${qt_version_str}") 191 STRING(REGEX REPLACE "[0-9]+\\.([0-9]+)\\.[0-9]+" "\\1" qt_minor_vers "${qt_version_str}") 192 STRING(REGEX REPLACE "[0-9]+\\.[0-9]+\\.([0-9]+)" "\\1" qt_patch_vers "${qt_version_str}") 193 194 #now parse the parts of the user given version string into variables 195 STRING(REGEX MATCH "^[0-9]+\\.[0-9]+\\.[0-9]+$" req_qt_major_vers "${QT3_MIN_VERSION}") 196 IF (NOT req_qt_major_vers) 197 MESSAGE( FATAL_ERROR "Invalid Qt version string given: \"${QT3_MIN_VERSION}\", expected e.g. \"3.1.5\"") 198 ENDIF (NOT req_qt_major_vers) 199 200 STRING(REGEX REPLACE "([0-9]+)\\.[0-9]+\\.[0-9]+" "\\1" req_qt_major_vers "${QT3_MIN_VERSION}") 201 STRING(REGEX REPLACE "[0-9]+\\.([0-9])+\\.[0-9]+" "\\1" req_qt_minor_vers "${QT3_MIN_VERSION}") 202 STRING(REGEX REPLACE "[0-9]+\\.[0-9]+\\.([0-9]+)" "\\1" req_qt_patch_vers "${QT3_MIN_VERSION}") 203 204 # req = "6.5.4", qt = "3.2.1" 205 206 IF (req_qt_major_vers GREATER qt_major_vers) # (6 > 3) ? 207 MESSAGE( FATAL_ERROR "Qt major version not matched (required: ${QT3_MIN_VERSION}, found: ${qt_version_str})") # yes 208 ELSE (req_qt_major_vers GREATER qt_major_vers) # no 209 IF (req_qt_major_vers LESS qt_major_vers) # (6 < 3) ? 210 SET( QT_VERSION_BIG_ENOUGH "YES" ) # yes 211 ELSE (req_qt_major_vers LESS qt_major_vers) # ( 6==3) ? 212 IF (req_qt_minor_vers GREATER qt_minor_vers) # (5>2) ? 213 MESSAGE( FATAL_ERROR "Qt minor version not matched (required: ${QT3_MIN_VERSION}, found: ${qt_version_str})") # yes 214 ELSE (req_qt_minor_vers GREATER qt_minor_vers) # no 215 IF (req_qt_minor_vers LESS qt_minor_vers) # (5<2) ? 216 SET( QT_VERSION_BIG_ENOUGH "YES" ) # yes 217 ELSE (req_qt_minor_vers LESS qt_minor_vers) # (5==2) 218 IF (req_qt_patch_vers GREATER qt_patch_vers) # (4>1) ? 219 MESSAGE( FATAL_ERROR "Qt patch level not matched (required: ${QT3_MIN_VERSION}, found: ${qt_version_str})") # yes 220 ELSE (req_qt_patch_vers GREATER qt_patch_vers) # (4>1) ? 221 SET( QT_VERSION_BIG_ENOUGH "YES" ) # yes 222 ENDIF (req_qt_patch_vers GREATER qt_patch_vers) # (4>1) ? 223 ENDIF (req_qt_minor_vers LESS qt_minor_vers) 224 ENDIF (req_qt_minor_vers GREATER qt_minor_vers) 225 ENDIF (req_qt_major_vers LESS qt_major_vers) 226 ENDIF (req_qt_major_vers GREATER qt_major_vers) 227ENDIF (QT3_MIN_VERSION) 228 229# if the include a library are found then we have it 230IF(QT3_INCLUDE_DIR) 231 IF(QT3_QT_LIBRARY) 232 SET( QT3_FOUND "YES" ) 233 ENDIF(QT3_QT_LIBRARY) 234ENDIF(QT3_INCLUDE_DIR) 235 236IF(QT3_FOUND) 237 SET( QT3_LIBRARIES ${QT3_LIBRARIES} ${QT3_QT_LIBRARY} ) 238 SET( QT3_DEFINITIONS "") 239 240 IF (WIN32 AND NOT CYGWIN) 241 IF (QT3_QTMAIN_LIBRARY) 242 # for version 3 243 SET (QT3_DEFINITIONS -DQT_DLL -DQT_THREAD_SUPPORT -DNO_DEBUG) 244 SET (QT3_LIBRARIES imm32.lib ${QT3_QT_LIBRARY} ${QT3_QTMAIN_LIBRARY} ) 245 SET (QT3_LIBRARIES ${QT3_LIBRARIES} winmm wsock32) 246 ELSE (QT3_QTMAIN_LIBRARY) 247 # for version 2 248 SET (QT3_LIBRARIES imm32.lib ws2_32.lib ${QT3_QT_LIBRARY} ) 249 ENDIF (QT3_QTMAIN_LIBRARY) 250 ELSE (WIN32 AND NOT CYGWIN) 251 SET (QT3_LIBRARIES ${QT3_QT_LIBRARY} ) 252 253 SET (QT3_DEFINITIONS -DQT_SHARED -DQT_NO_DEBUG) 254 IF(QT3_QT_LIBRARY MATCHES "qt-mt") 255 SET (QT3_DEFINITIONS ${QT3_DEFINITIONS} -DQT_THREAD_SUPPORT -D_REENTRANT) 256 ENDIF(QT3_QT_LIBRARY MATCHES "qt-mt") 257 258 ENDIF (WIN32 AND NOT CYGWIN) 259 260 IF (QT_QASSISTANTCLIENT_LIBRARY) 261 SET (QT3_LIBRARIES ${QT_QASSISTANTCLIENT_LIBRARY} ${QT3_LIBRARIES}) 262 ENDIF (QT_QASSISTANTCLIENT_LIBRARY) 263 264 # Backwards compatibility for CMake1.4 and 1.2 265 SET (QT_MOC_EXE ${QT3_MOC_EXECUTABLE} ) 266 SET (QT_UIC_EXE ${QT3_UIC_EXECUTABLE} ) 267 # for unix add X11 stuff 268 IF(UNIX) 269 FIND_PACKAGE(X11) 270 IF (X11_FOUND) 271 SET (QT3_LIBRARIES ${QT3_LIBRARIES} ${X11_LIBRARIES}) 272 ENDIF (X11_FOUND) 273 IF (CMAKE_DL_LIBS) 274 SET (QT3_LIBRARIES ${QT3_LIBRARIES} ${CMAKE_DL_LIBS}) 275 ENDIF (CMAKE_DL_LIBS) 276 ENDIF(UNIX) 277 IF(QT3_QT_LIBRARY MATCHES "qt-mt") 278 FIND_PACKAGE(Threads) 279 SET(QT3_LIBRARIES ${QT3_LIBRARIES} ${CMAKE_THREAD_LIBS_INIT}) 280 ENDIF(QT3_QT_LIBRARY MATCHES "qt-mt") 281ENDIF(QT3_FOUND) 282 283EXEC_PROGRAM(${QT3_MOC_EXECUTABLE} ARGS "-v" OUTPUT_VARIABLE QTVERSION_MOC) 284EXEC_PROGRAM(${QT3_UIC_EXECUTABLE} ARGS "-version" OUTPUT_VARIABLE QTVERSION_UI) 285 286SET(_QT_UIC_VERSION_3 FALSE) 287IF("${QTVERSION_UIC}" MATCHES ".* 3..*") 288 SET(_QT_UIC_VERSION_3 TRUE) 289ENDIF("${QTVERSION_UIC}" MATCHES ".* 3..*") 290 291SET(_QT_MOC_VERSION_3 FALSE) 292IF("${QTVERSION_MOC}" MATCHES ".* 3..*") 293 SET(_QT_MOC_VERSION_3 TRUE) 294ENDIF("${QTVERSION_MOC}" MATCHES ".* 3..*") 295 296SET(QT_WRAP_CPP FALSE) 297IF (QT3_MOC_EXECUTABLE) 298 IF(_QT_MOC_VERSION_3) 299 SET ( QT_WRAP_CPP TRUE) 300 ENDIF(_QT_MOC_VERSION_3) 301ENDIF (QT3_MOC_EXECUTABLE) 302 303SET(QT_WRAP_UI FALSE) 304IF (QT3_UIC_EXECUTABLE) 305 IF(_QT_UIC_VERSION_3) 306 SET ( QT_WRAP_UI TRUE) 307 ENDIF(_QT_UIC_VERSION_3) 308ENDIF (QT3_UIC_EXECUTABLE) 309 310MARK_AS_ADVANCED( 311 QT3_INCLUDE_DIR 312 QT3_QT_LIBRARY 313 QT3_QTMAIN_LIBRARY 314 QT_QASSISTANTCLIENT_LIBRARY 315 QT3_UIC_EXECUTABLE 316 QT3_MOC_EXECUTABLE 317 QT_WRAP_CPP 318 QT_WRAP_UI 319 ) 320