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