1# Distributed under the OSI-approved BSD 3-Clause License.  See accompanying
2# file Copyright.txt or https://cmake.org/licensing for details.
3
4#[=======================================================================[.rst:
5FindQt3
6-------
7
8Locate Qt include paths and libraries
9
10This module defines:
11
12::
13
14  QT_INCLUDE_DIR    - where to find qt.h, etc.
15  QT_LIBRARIES      - the libraries to link against to use Qt.
16  QT_DEFINITIONS    - definitions to use when
17                      compiling code that uses Qt.
18  QT_FOUND          - If false, don't try to use Qt.
19  QT_VERSION_STRING - the version of Qt found
20
21
22
23If you need the multithreaded version of Qt, set QT_MT_REQUIRED to
24TRUE
25
26Also defined, but not for general use are:
27
28::
29
30  QT_MOC_EXECUTABLE, where to find the moc tool.
31  QT_UIC_EXECUTABLE, where to find the uic tool.
32  QT_QT_LIBRARY, where to find the Qt library.
33  QT_QTMAIN_LIBRARY, where to find the qtmain
34   library. This is only required by Qt3 on Windows.
35#]=======================================================================]
36
37# These are around for backwards compatibility
38# they will be set
39#  QT_WRAP_CPP, set true if QT_MOC_EXECUTABLE is found
40#  QT_WRAP_UI set true if QT_UIC_EXECUTABLE is found
41
42# If Qt4 has already been found, fail.
43if(QT4_FOUND)
44  if(Qt3_FIND_REQUIRED)
45    message( FATAL_ERROR "Qt3 and Qt4 cannot be used together in one project.")
46  else()
47    if(NOT Qt3_FIND_QUIETLY)
48      message( STATUS    "Qt3 and Qt4 cannot be used together in one project.")
49    endif()
50    return()
51  endif()
52endif()
53
54
55file(GLOB GLOB_PATHS /usr/lib/qt-3*)
56foreach(GLOB_PATH ${GLOB_PATHS})
57  list(APPEND GLOB_PATHS_BIN "${GLOB_PATH}/bin")
58endforeach()
59find_path(QT_INCLUDE_DIR
60  NAMES qt.h
61  PATHS
62  "[HKEY_CURRENT_USER\\Software\\Trolltech\\Qt3Versions\\3.2.1;InstallDir]/include/Qt"
63  "[HKEY_CURRENT_USER\\Software\\Trolltech\\Qt3Versions\\3.2.0;InstallDir]/include/Qt"
64  "[HKEY_CURRENT_USER\\Software\\Trolltech\\Qt3Versions\\3.1.0;InstallDir]/include/Qt"
65  $ENV{QTDIR}/include
66  ${GLOB_PATHS}
67  /usr/share/qt3/include
68  C:/Progra~1/qt/include
69  /usr/local/include/X11/qt3
70  PATH_SUFFIXES lib/qt/include lib/qt3/include include/qt include/qt3 qt/include qt3/include
71  )
72
73# if qglobal.h is not in the qt_include_dir then set
74# QT_INCLUDE_DIR to NOTFOUND
75if(NOT EXISTS ${QT_INCLUDE_DIR}/qglobal.h)
76  set(QT_INCLUDE_DIR QT_INCLUDE_DIR-NOTFOUND CACHE PATH "path to Qt3 include directory" FORCE)
77endif()
78
79if(QT_INCLUDE_DIR)
80  #extract the version string from qglobal.h
81  file(STRINGS ${QT_INCLUDE_DIR}/qglobal.h QGLOBAL_H REGEX "#define[\t ]+QT_VERSION_STR[\t ]+\"[0-9]+.[0-9]+.[0-9]+[a-z]*\"")
82  string(REGEX REPLACE ".*\"([0-9]+.[0-9]+.[0-9]+[a-z]*)\".*" "\\1" qt_version_str "${QGLOBAL_H}")
83  unset(QGLOBAL_H)
84
85  # Under windows the qt library (MSVC) has the format qt-mtXYZ where XYZ is the
86  # version X.Y.Z, so we need to remove the dots from version
87  string(REGEX REPLACE "\\." "" qt_version_str_lib "${qt_version_str}")
88  set(QT_VERSION_STRING "${qt_version_str}")
89endif()
90
91file(GLOB GLOB_PATHS_LIB /usr/lib/qt-3*/lib/)
92if (QT_MT_REQUIRED)
93  find_library(QT_QT_LIBRARY
94    NAMES
95    qt-mt qt-mt${qt_version_str_lib} qt-mtnc${qt_version_str_lib}
96    qt-mtedu${qt_version_str_lib} qt-mt230nc qt-mtnc321 qt-mt3
97    PATHS
98      "[HKEY_CURRENT_USER\\Software\\Trolltech\\Qt3Versions\\3.2.1;InstallDir]"
99      "[HKEY_CURRENT_USER\\Software\\Trolltech\\Qt3Versions\\3.2.0;InstallDir]"
100      "[HKEY_CURRENT_USER\\Software\\Trolltech\\Qt3Versions\\3.1.0;InstallDir]"
101      ENV QTDIR
102      ${GLOB_PATHS_LIB}
103      /usr/share/qt3
104      C:/Progra~1/qt
105    PATH_SUFFIXES
106      lib lib/qt lib/qt3 qt qt3 qt/lib qt3/lib
107    )
108
109else ()
110  find_library(QT_QT_LIBRARY
111    NAMES
112    qt qt-${qt_version_str_lib} qt-edu${qt_version_str_lib}
113    qt-mt qt-mt${qt_version_str_lib} qt-mtnc${qt_version_str_lib}
114    qt-mtedu${qt_version_str_lib} qt-mt230nc qt-mtnc321 qt-mt3
115    PATHS
116      "[HKEY_CURRENT_USER\\Software\\Trolltech\\Qt3Versions\\3.2.1;InstallDir]"
117      "[HKEY_CURRENT_USER\\Software\\Trolltech\\Qt3Versions\\3.2.0;InstallDir]"
118      "[HKEY_CURRENT_USER\\Software\\Trolltech\\Qt3Versions\\3.1.0;InstallDir]"
119      ENV QTDIR
120      ${GLOB_PATHS_LIB}
121      /usr/share/qt3
122      C:/Progra~1/qt/lib
123    PATH_SUFFIXES
124      lib lib/qt lib/qt3 qt qt3 qt/lib qt3/lib
125    )
126endif ()
127
128
129find_library(QT_QASSISTANTCLIENT_LIBRARY
130  NAMES qassistantclient
131  PATHS
132    "[HKEY_CURRENT_USER\\Software\\Trolltech\\Qt3Versions\\3.2.1;InstallDir]"
133    "[HKEY_CURRENT_USER\\Software\\Trolltech\\Qt3Versions\\3.2.0;InstallDir]"
134    "[HKEY_CURRENT_USER\\Software\\Trolltech\\Qt3Versions\\3.1.0;InstallDir]"
135    ENV QTDIR
136    ${GLOB_PATHS_LIB}
137    /usr/share/qt3
138    C:/Progra~1/qt
139  PATH_SUFFIXES
140    lib lib/qt lib/qt3 qt qt3 qt/lib qt3/lib
141  )
142
143# Qt 3 should prefer QTDIR over the PATH
144find_program(QT_MOC_EXECUTABLE
145  NAMES moc-qt3 moc3 moc3-mt moc
146  HINTS
147    ENV QTDIR
148  PATHS
149  "[HKEY_CURRENT_USER\\Software\\Trolltech\\Qt3Versions\\3.2.1;InstallDir]/include/Qt"
150  "[HKEY_CURRENT_USER\\Software\\Trolltech\\Qt3Versions\\3.2.0;InstallDir]/include/Qt"
151  "[HKEY_CURRENT_USER\\Software\\Trolltech\\Qt3Versions\\3.1.0;InstallDir]/include/Qt"
152  ${GLOB_PATHS_BIN}
153    /usr/share/qt3
154    C:/Progra~1/qt
155  PATH_SUFFIXES
156    bin lib/qt lib/qt3 qt qt3 qt/bin qt3/bin lib/qt/bin lib/qt3/bin
157  )
158
159if(QT_MOC_EXECUTABLE)
160  set ( QT_WRAP_CPP "YES")
161endif()
162
163# Qt 3 should prefer QTDIR over the PATH
164find_program(QT_UIC_EXECUTABLE
165  NAMES uic-qt3 uic3 uic3-mt uic
166  HINTS
167    ENV QTDIR
168  PATHS
169  "[HKEY_CURRENT_USER\\Software\\Trolltech\\Qt3Versions\\3.2.1;InstallDir]/include/Qt"
170  "[HKEY_CURRENT_USER\\Software\\Trolltech\\Qt3Versions\\3.2.0;InstallDir]/include/Qt"
171  "[HKEY_CURRENT_USER\\Software\\Trolltech\\Qt3Versions\\3.1.0;InstallDir]/include/Qt"
172  ${GLOB_PATHS_BIN}
173    /usr/share/qt3
174    C:/Progra~1/qt
175  PATH_SUFFIXES
176    bin lib/qt lib/qt3 qt qt3 qt/bin qt3/bin lib/qt/bin lib/qt3/bin
177  )
178
179if(QT_UIC_EXECUTABLE)
180  set ( QT_WRAP_UI "YES")
181endif()
182
183if (WIN32)
184  find_library(QT_QTMAIN_LIBRARY
185    NAMES qtmain
186    HINTS
187      ENV QTDIR
188      "[HKEY_CURRENT_USER\\Software\\Trolltech\\Qt3Versions\\3.2.1;InstallDir]"
189      "[HKEY_CURRENT_USER\\Software\\Trolltech\\Qt3Versions\\3.2.0;InstallDir]"
190      "[HKEY_CURRENT_USER\\Software\\Trolltech\\Qt3Versions\\3.1.0;InstallDir]"
191    PATHS
192      "$ENV{ProgramFiles}/qt"
193      "C:/Program Files/qt"
194    PATH_SUFFIXES
195      lib
196    DOC "This Library is only needed by and included with Qt3 on MSWindows. It should be NOTFOUND, undefined or IGNORE otherwise."
197    )
198endif ()
199
200#support old QT_MIN_VERSION if set, but not if version is supplied by find_package()
201if(NOT Qt3_FIND_VERSION AND QT_MIN_VERSION)
202  set(Qt3_FIND_VERSION ${QT_MIN_VERSION})
203endif()
204
205# if the include a library are found then we have it
206include(${CMAKE_CURRENT_LIST_DIR}/FindPackageHandleStandardArgs.cmake)
207if (CMAKE_FIND_PACKAGE_NAME STREQUAL "Qt")
208  # FindQt include()'s this module. It's an old pattern, but rather than trying
209  # to suppress this from outside the module (which is then sensitive to the
210  # contents, detect the case in this module and suppress it explicitly.
211  set(FPHSA_NAME_MISMATCHED 1)
212endif ()
213FIND_PACKAGE_HANDLE_STANDARD_ARGS(Qt3
214                                  REQUIRED_VARS QT_QT_LIBRARY QT_INCLUDE_DIR QT_MOC_EXECUTABLE
215                                  VERSION_VAR QT_VERSION_STRING)
216unset(FPHSA_NAME_MISMATCHED)
217set(QT_FOUND ${QT3_FOUND} )
218
219if(QT_FOUND)
220  set( QT_LIBRARIES ${QT_LIBRARIES} ${QT_QT_LIBRARY} )
221  set( QT_DEFINITIONS "")
222
223  if (WIN32 AND NOT CYGWIN)
224    if (QT_QTMAIN_LIBRARY)
225      # for version 3
226      set (QT_DEFINITIONS -DQT_DLL -DQT_THREAD_SUPPORT -DNO_DEBUG)
227      set (QT_LIBRARIES imm32.lib ${QT_QT_LIBRARY} ${QT_QTMAIN_LIBRARY} )
228      set (QT_LIBRARIES ${QT_LIBRARIES} winmm wsock32)
229    else ()
230      # for version 2
231      set (QT_LIBRARIES imm32.lib ws2_32.lib ${QT_QT_LIBRARY} )
232    endif ()
233  else ()
234    set (QT_LIBRARIES ${QT_QT_LIBRARY} )
235
236    set (QT_DEFINITIONS -DQT_SHARED -DQT_NO_DEBUG)
237    if(QT_QT_LIBRARY MATCHES "qt-mt")
238      set (QT_DEFINITIONS ${QT_DEFINITIONS} -DQT_THREAD_SUPPORT -D_REENTRANT)
239    endif()
240
241  endif ()
242
243  if (QT_QASSISTANTCLIENT_LIBRARY)
244    set (QT_LIBRARIES ${QT_QASSISTANTCLIENT_LIBRARY} ${QT_LIBRARIES})
245  endif ()
246
247  # Backwards compatibility for CMake1.4 and 1.2
248  set (QT_MOC_EXE ${QT_MOC_EXECUTABLE} )
249  set (QT_UIC_EXE ${QT_UIC_EXECUTABLE} )
250  # for unix add X11 stuff
251  if(UNIX)
252    find_package(X11)
253    if (X11_FOUND)
254      set (QT_LIBRARIES ${QT_LIBRARIES} ${X11_LIBRARIES})
255    endif ()
256    if (CMAKE_DL_LIBS)
257      set (QT_LIBRARIES ${QT_LIBRARIES} ${CMAKE_DL_LIBS})
258    endif ()
259  endif()
260  if(QT_QT_LIBRARY MATCHES "qt-mt")
261    find_package(Threads)
262    set(QT_LIBRARIES ${QT_LIBRARIES} ${CMAKE_THREAD_LIBS_INIT})
263  endif()
264endif()
265
266if(QT_MOC_EXECUTABLE)
267  execute_process(COMMAND ${QT_MOC_EXECUTABLE} "-v"
268                  OUTPUT_VARIABLE QTVERSION_MOC
269                  ERROR_QUIET)
270endif()
271if(QT_UIC_EXECUTABLE)
272  execute_process(COMMAND ${QT_UIC_EXECUTABLE} "-version"
273                  OUTPUT_VARIABLE QTVERSION_UIC
274                  ERROR_QUIET)
275endif()
276
277set(_QT_UIC_VERSION_3 FALSE)
278if("${QTVERSION_UIC}" MATCHES " 3.")
279  set(_QT_UIC_VERSION_3 TRUE)
280endif()
281
282set(_QT_MOC_VERSION_3 FALSE)
283if("${QTVERSION_MOC}" MATCHES " 3.")
284  set(_QT_MOC_VERSION_3 TRUE)
285endif()
286
287set(QT_WRAP_CPP FALSE)
288if (QT_MOC_EXECUTABLE AND _QT_MOC_VERSION_3)
289  set ( QT_WRAP_CPP TRUE)
290endif ()
291
292set(QT_WRAP_UI FALSE)
293if (QT_UIC_EXECUTABLE AND _QT_UIC_VERSION_3)
294  set ( QT_WRAP_UI TRUE)
295endif ()
296
297mark_as_advanced(
298  QT_INCLUDE_DIR
299  QT_QT_LIBRARY
300  QT_QTMAIN_LIBRARY
301  QT_QASSISTANTCLIENT_LIBRARY
302  QT_UIC_EXECUTABLE
303  QT_MOC_EXECUTABLE
304  QT_WRAP_CPP
305  QT_WRAP_UI
306  )
307