2 MESSAGE("${CMAKE_CURRENT_FILE} is deprecated, please use FindwxWidgets.cmake instead.")
8 # Based on work by Jorgen Bodde
10 # This module finds if wxWindows is installed and determines where the
11 # include files and libraries are. It also determines what the name of
12 # the library is. This code sets the following variables:
14 # WXWIDGETS_LINK_DIRECTORIES = link directories, useful for rpath on Unix
15 # WXWIDGETS_LIBRARIES = all the wxWindows libraries ( and linker flags on unix )
16 # WXWIDGETS_CXX_FLAGS = compiler flags for building wxWindows
17 # WXWIDGETS_INCLUDE_DIR = all include path of wxWindows
18 # WXWIDGETS_DEFINITIONS = all flags of wxWindows
21 # NOTE: This module REQUIRES that an environment variable named WXWIN
22 # be set to the base wxWidgets installation directory.
23 # Under Unix, you must also set and environment variable named WXWINCFG
24 # to the name of the active build subdirectory (eg buildgtk).
27 # These variable should be set before including this module
29 # WXWIDGETS_FILE_VERSION (26)
30 # WXWIDGETS_VERSION (2.6)
34 # Set WX_USE vars in CMakeLists if you don't want to default to all off
36 SET(WXWIDGETS_USE_DEBUG ${WXW_USE_DEBUG} CACHE BOOL "Use Debug versions of wxWindows libraries")
37 SET(WXWIDGETS_USE_UNICODE ${WXW_USE_UNICODE} CACHE BOOL "Use Unicode versions of wxWindows libraries")
38 SET(WXWIDGETS_USE_SHARED ${WXW_USE_SHARED} CACHE BOOL "Use shared versions of wxWindows libraries")
39 SET(WXWIDGETS_USE_UNIV ${WXW_USE_UNIV} CACHE BOOL "Use Universal versions of wxWindows libraries")
40 SET(WXWIDGETS_USE_MONO ${WXW_USE_MONO} CACHE BOOL "Use monolithic versions of wxWindows libraries")
43 # Style can be non-Win32 even under Windows when using MinGW
46 SET(WIN32_STYLE_FIND 1)
49 SET(WIN32_STYLE_FIND 0)
50 SET(UNIX_STYLE_FIND 1)
53 SET(UNIX_STYLE_FIND 1)
57 # Versions should be set before this file is included. If not,
61 SET( WXVERSIONSUFFIX ${WXW_FILE_VERSION})
62 ELSE(WXW_FILE_VERSION)
63 SET( WXVERSIONSUFFIX "26")
64 ENDIF(WXW_FILE_VERSION)
67 SET( WXVERSION ${WXW_VERSION})
73 # Find the base wxWidgets install path
74 # NOTE: WXWIN must be set
76 FIND_PATH( WXWIDGETS_INSTALL_PATH
80 IF(WXWIDGETS_INSTALL_PATH STREQUAL "WXWIDGETS_INSTALL_PATH-NOTFOUND")
81 MESSAGE( FATAL_ERROR "FATAL_ERROR: wx-config.in NOT found. Set WXWIN")
82 ENDIF(WXWIDGETS_INSTALL_PATH STREQUAL "WXWIDGETS_INSTALL_PATH-NOTFOUND")
83 SET(WXWIDGETS_CONFIG_PATH ${WXWIDGETS_INSTALL_PATH})
86 # Find library path (platform specific)
88 IF( WIN32_STYLE_FIND )
90 IF( WXWIDGETS_USE_SHARED )
91 SET(WXWIDGETS_LIB_PATH "${WXWIDGETS_INSTALL_PATH}/lib/vc_dll" )
92 ELSE( WXWIDGETS_USE_SHARED )
93 SET(WXWIDGETS_LIB_PATH "${WXWIDGETS_INSTALL_PATH}/lib/vc_lib" )
94 ENDIF( WXWIDGETS_USE_SHARED )
95 SET( WXWIDGETS_LINK_DIRECTORIES ${WXWIDGETS_LIB_PATH} )
97 ELSE( WIN32_STYLE_FIND )
101 # Unix uses a config specific directory under the install path
102 # specified in the WXWINCFG environment variable.
104 SET(WXWIDGETS_CONFIG_PATH "${WXWIDGETS_INSTALL_PATH}/$ENV{WXWINCFG}")
107 # Check wether wx-config can be found
109 SET(WX_WXCONFIG_EXECUTABLE "${WXWIDGETS_CONFIG_PATH}/wx-config" )
110 IF(NOT EXISTS ${WX_WXCONFIG_EXECUTABLE})
111 # we really need wx-config...
112 MESSAGE(FATAL_ERROR "FATAL_ERROR: Cannot find wx-config. Set WXWIN and WXWINCFG environment variables.")
113 ENDIF(NOT EXISTS ${WX_WXCONFIG_EXECUTABLE})
115 SET(WXWIDGETS_LIB_PATH "${WXWIDGETS_CONFIG_PATH}/lib" )
116 SET( WXWIDGETS_LINK_DIRECTORIES ${WXWIDGETS_LIB_PATH} )
118 ELSE(UNIX_STYLE_FIND)
119 MESSAGE(FATAL_ERROR "FATAL_ERROR: FindwxWindows.cmake: Platform unsupported by FindwxW.cmake. It's neither WIN32 nor UNIX")
120 ENDIF(UNIX_STYLE_FIND)
121 ENDIF( WIN32_STYLE_FIND )
124 # Check options against installed libraries
126 SET(WX_CONFIG_ARGS "")
127 SET( LIBRARYWANT "${WXWIDGETS_LIB_PATH}/msw" )
129 IF( WXWIDGETS_USE_UNIV )
130 SET( LIBRARYWANT "${LIBRARYWANT}univ")
132 SET(WX_CONFIG_ARGS "${WX_CONFIG_ARGS} --universal=yes")
133 ELSE( WXWIDGETS_USE_UNIV )
134 SET(WX_CONFIG_ARGS "${WX_CONFIG_ARGS} --universal=no")
135 ENDIF( WXWIDGETS_USE_UNIV )
137 IF( WXWIDGETS_USE_UNICODE )
138 SET( LIBRARYWANT "${LIBRARYWANT}u" )
140 SET(WX_CONFIG_ARGS "${WX_CONFIG_ARGS} --unicode=yes")
141 ELSE( WXWIDGETS_USE_UNICODE )
142 SET(WX_CONFIG_ARGS "${WX_CONFIG_ARGS} --unicode=no")
143 ENDIF( WXWIDGETS_USE_UNICODE )
145 IF( WXWIDGETS_USE_DEBUG )
146 SET( LIBRARYWANT "${LIBRARYWANT}d" )
148 SET(WX_CONFIG_ARGS "${WX_CONFIG_ARGS} --debug=yes")
149 ELSE( WXWIDGETS_USE_DEBUG )
151 SET(WX_CONFIG_ARGS "${WX_CONFIG_ARGS} --debug=no")
152 ENDIF( WXWIDGETS_USE_DEBUG )
154 IF( WXWIDGETS_USE_SHARED )
155 SET(WX_CONFIG_ARGS "${WX_CONFIG_ARGS} --static=no")
156 ELSE( WXWIDGETS_USE_SHARED )
157 SET(WX_CONFIG_ARGS "${WX_CONFIG_ARGS} --static=yes")
158 ENDIF( WXWIDGETS_USE_SHARED )
160 # Not sure how to check this yet!!!!!
161 IF( WXWIDGETS_USE_MONO )
162 SET(WX_CONFIG_ARGS "${WX_CONFIG_ARGS}")
163 ELSE( WXWIDGETS_USE_MONO )
164 SET(WX_CONFIG_ARGS "${WX_CONFIG_ARGS}")
165 ENDIF( WXWIDGETS_USE_MONO )
167 SET(WX_CONFIG_ARGS_LIBS "${WX_CONFIG_ARGS} --libs")
170 # Platform specific method for testing installed wx Builds
172 IF( WIN32_STYLE_FIND )
174 IF( NOT EXISTS "${LIBRARYWANT}/wx/setup.h" )
175 MESSAGE( SEND_ERROR "ERROR: WXWidgets config NOT found ${WX_CONFIG_ARGS}")
176 ENDIF( NOT EXISTS "${LIBRARYWANT}/wx/setup.h" )
178 ELSE( WIN32_STYLE_FIND )
180 EXEC_PROGRAM(${WX_WXCONFIG_EXECUTABLE}
181 ARGS ${WX_CONFIG_ARGS_LIBS}
182 OUTPUT_VARIABLE WXWIDGETS_LIBRARIES
183 RETURN_VALUE BAD_WXCONFIG )
185 MESSAGE( SEND_ERROR "ERROR: WXWidgets config NOT found ${WX_CONFIG_ARGS}")
188 ENDIF( WIN32_STYLE_FIND )
193 IF( WIN32_STYLE_FIND )
194 # Not used for Windows
195 SET( WXWIDGETS_CXX_FLAGS "" )
196 ELSE( WIN32_STYLE_FIND )
198 # Get CXXFLAGS from wx-config
200 EXEC_PROGRAM(${WX_WXCONFIG_EXECUTABLE}
202 OUTPUT_VARIABLE WXWIDGETS_CXX_FLAGS
203 RETURN_VALUE BAD_WXCONFIG )
205 MESSAGE( SEND_ERROR "ERROR: wx-config --cxxflags returned an error")
207 ENDIF( WIN32_STYLE_FIND )
210 # Find include directories (platform specific)
212 IF( WIN32_STYLE_FIND )
214 # Set non-build specific include directories
216 SET ( WX_INCLUDE_PATH ${WXWIDGETS_INSTALL_PATH}/include )
217 SET ( WXWIDGETS_INCLUDE_DIR ${WX_INCLUDE_PATH} )
218 SET( WXWIDGETS_INCLUDE_DIR ${WXWIDGETS_INCLUDE_DIR} ${WXWIDGETS_INCLUDE_DIR}/../contrib/include )
220 # Append the build specific include dir for wx/setup.h:
222 IF ( EXISTS ${LIBRARYWANT}/wx/setup.h )
223 SET( WX_INCLUDE_LIB_PATH ${LIBRARYWANT})
224 SET( WXWIDGETS_INCLUDE_DIR ${WXWIDGETS_INCLUDE_DIR} ${LIBRARYWANT} )
225 ELSE ( EXISTS ${LIBRARYWANT}/wx/setup.h )
226 SET( WX_INCLUDE_LIB_PATH, "")
227 MESSAGE(SEND_ERROR "ERROR: Can't find ${LIBRARYWANT}/wx/setup.h")
228 ENDIF ( EXISTS ${LIBRARYWANT}/wx/setup.h )
229 ELSE( WIN32_STYLE_FIND )
231 # Pull out -I options
232 # evaluate wx-config output to separate include dirs
233 SET(WX_INCLUDE_DIR ${WXWIDGETS_CXX_FLAGS})
234 # extract include dirs (-I)
235 # use regular expression to match wildcard equivalent "-I*<endchar>"
236 # with <endchar> is a space or a semicolon
237 STRING(REGEX MATCHALL "[-][I]([^ ;])+" WX_INCLUDE_DIRS_WITH_PREFIX "${WX_INCLUDE_DIR}" )
238 # remove prefix -I because we need the pure directory
239 IF(WX_INCLUDE_DIRS_WITH_PREFIX)
240 STRING(REGEX REPLACE "[-][I]" ";" WXWIDGETS_INCLUDE_DIR ${WX_INCLUDE_DIRS_WITH_PREFIX} )
241 ENDIF(WX_INCLUDE_DIRS_WITH_PREFIX)
242 # replace space separated string by semicolon separated vector
243 SEPARATE_ARGUMENTS(WXWIDGETS_INCLUDE_DIR)
244 # Remove the -I options from the CXX_FLAGS no need to duplicate
245 STRING(REGEX REPLACE "[-][I]([^ ;])+" "" WXWIDGETS_CXX_FLAGS ${WXWIDGETS_CXX_FLAGS} )
250 IF( NOT CYGWIN OR MINGW )
251 INCLUDE( ${CMAKE_ROOT}/Modules/FindX11.cmake )
252 SET( WXWIDGETS_INCLUDE_DIR ${WXWIDGETS_INCLUDE_DIR} ${X11_INCLUDE_DIR} )
253 ENDIF( NOT CYGWIN OR MINGW )
254 ENDIF( WIN32_STYLE_FIND )
257 # Find library list (platform specific)
259 IF( WIN32_STYLE_FIND )
261 #Misc vars used to build lib names
263 SET( PFLIBEXT ${CMAKE_STATIC_LIBRARY_SUFFIX} )
264 SET( WXPF "${WXPF}${WXVERSIONSUFFIX}" )
265 SET( PFVERSION ${WXVERSIONSUFFIX} )
269 # Build the libraries list
271 SET( WXWIDGETS_LIBRARIES "" )
272 SET( WXWIDGETS_MULTI_LIBRARIES "" )
273 SET( WXWIDGETS_MONO_LIBRARIES "" )
275 SET(WX_LIBRARIES ${WX_LIBRARIES} comctl32${PFLIBEXT} wsock32${PFLIBEXT} rpcrt4${PFLIBEXT})
276 #MESSAGE( "WX_LIBRARIES: ${WX_LIBRARIES}")
278 #start filling library string with needed libraries for the choosen configuration.
279 SET( WXWIDGETS_LIBRARIES ${WXWIDGETS_LIBRARIES} ${WX_LIBRARIES} )
281 SET( WXPF "${PFVERSION}${PFUNICODE}${PFDEBUG}" )
282 SET(WXWIDGETS_MULTI_LIBRARIES ${WXWIDGETS_MULTI_LIBRARIES}
283 wxbase${WXPF}${PFCOMPILER}${PFLIBEXT}
284 wxbase${WXPF}_net${PFCOMPILER}${PFLIBEXT} wxbase${WXPF}_xml${PFCOMPILER}${PFLIBEXT}
287 SET( WXPF "${PFVERSION}${PFUNICODE}${PFDEBUG}" )
288 SET(WXWIDGETS_MULTI_LIBRARIES ${WXWIDGETS_MULTI_LIBRARIES}
289 wxmsw${WXPF}_adv${PFCOMPILER}${PFLIBEXT}
290 wxmsw${WXPF}_core${PFCOMPILER}${PFLIBEXT}
291 wxmsw${WXPF}_html${PFCOMPILER}${PFLIBEXT}
292 wxmsw${WXPF}_xrc${PFCOMPILER}${PFLIBEXT}
293 # wxmsw${WXPF}_media${PFCOMPILER}${PFLIBEXT}
296 IF( NOT WXWIDGETS_USE_SHARED )
297 SET( WXPF "${PFVERSION}${PFUNICODE}${PFDEBUG}" )
299 #SET(WXWIDGETS_MULTI_LIBRARIES ${WXWIDGETS_MULTI_LIBRARIES} wxbase${WXPF}_odbc${PFCOMPILER}${PFLIBEXT} )
301 SET( WXPF "${PFVERSION}${PFUNICODE}${PFDEBUG}" )
302 #SET(WXWIDGETS_MULTI_LIBRARIES ${WXWIDGETS_MULTI_LIBRARIES}
303 # wxmsw${WXPF}_dbgrid${PFLIBEXT}
304 # wxmsw${WXPF}_gl${PFCOMPILER}${PFLIBEXT}
306 ENDIF( NOT WXWIDGETS_USE_SHARED )
308 IF ( WXWIDGETS_USE_UNIV )
309 SET( WXPF "${PFUNIV}${PFVERSION}${PFUNICODE}${PFDEBUG}" )
310 SET(WXWIDGETS_MULTI_LIBRARIES ${WXWIDGETS_MULTI_LIBRARIES}
311 wxmsw${WXPF}_core${PFCOMPILER}${PFLIBEXT}
313 ENDIF ( WXWIDGETS_USE_UNIV )
315 SET(WXWIDGETS_MONO_LIBRARIES ${WXWIDGETS_MONO_LIBRARIES}
316 wxmsw${WXPF}${PFCOMPILER}${PFLIBEXT}
319 IF ( WXWIDGETS_USE_MONO )
320 SET(WXWIDGETS_LIBRARIES ${WXWIDGETS_LIBRARIES} ${WXWIDGETS_MONO_LIBRARIES})
321 ELSE ( WXWIDGETS_USE_MONO )
322 SET(WXWIDGETS_LIBRARIES ${WXWIDGETS_LIBRARIES} ${WXWIDGETS_MULTI_LIBRARIES})
323 ENDIF ( WXWIDGETS_USE_MONO )
325 SET( WXPF "${PFUNICODE}${PFDEBUG}" )
326 SET(WXWIDGETS_LIBRARIES ${WXWIDGETS_LIBRARIES}
330 SET( WXPF "${PFDEBUG}" )
331 SET(WXWIDGETS_LIBRARIES ${WXWIDGETS_LIBRARIES}
339 ELSE( WIN32_STYLE_FIND )
341 # Get Library list from wx-config
343 # do we need additionial wx GL stuff like GLCanvas ?
345 SET(WX_CONFIG_ARGS_LIBS "${WX_CONFIG_ARGS_LIBS} --gl-libs" )
346 ENDIF(WXWIDGETS_USE_GL)
348 EXEC_PROGRAM(${WX_WXCONFIG_EXECUTABLE}
349 ARGS ${WX_CONFIG_ARGS_LIBS}
350 OUTPUT_VARIABLE WXWIDGETS_LIBRARIES
351 RETURN_VALUE BAD_WXCONFIG )
353 MESSAGE( SEND_ERROR "ERROR: Specified WXWidgets config NOT found")
356 # Pull out the -L options
357 # evaluate wx-config output to separate linker flags and linkdirs for
359 SET(WX_CONFIG_LIBS ${WXWIDGETS_LIBRARIES})
360 # extract linkdirs (-L) for rpath
361 # use regular expression to match wildcard equivalent "-L*<endchar>"
362 # with <endchar> is a space or a semicolon
363 STRING(REGEX MATCHALL "[-][L]([^ ;])+" WX_LINK_DIRECTORIES_WITH_PREFIX "${WX_CONFIG_LIBS}" )
364 #MESSAGE("DBG WX_LINK_DIRECTORIES_WITH_PREFIX=${WX_LINK_DIRECTORIES_WITH_PREFIX}")
365 # remove prefix -L because we need the pure directory for LINK_DIRECTORIES
366 # replace -L by ; because the separator seems to be lost otherwise (bug or
368 IF(WX_LINK_DIRECTORIES_WITH_PREFIX)
369 STRING(REGEX REPLACE "[-][L]" ";" WXWIDGETS_LINK_DIRECTORIES ${WX_LINK_DIRECTORIES_WITH_PREFIX} )
370 #MESSAGE("DBG WXWIDGETS_LINK_DIRECTORIES=${WXWIDGETS_LINK_DIRECTORIES}")
371 ENDIF(WX_LINK_DIRECTORIES_WITH_PREFIX)
372 # replace space separated string by semicolon separated vector to make it
373 # work with LINK_DIRECTORIES
374 SEPARATE_ARGUMENTS(WXWIDGETS_LINK_DIRECTORIES)
375 # Remove -L options from lib list, no need to duplicate
376 STRING(REGEX REPLACE "[-][L]([^ ;])+" "" WXWIDGETS_LIBRARIES ${WXWIDGETS_LIBRARIES} )
379 ENDIF( WIN32_STYLE_FIND )
385 SET( WXWIDGETS_RC ${WXWIDGETS_INSTALL_PATH}/include/wx/msw/wx.rc )
386 IF( NOT WIN32_STYLE_FIND )
387 IF( NOT CYGWIN OR MINGW )
388 SET( WXWIDGETS_RC "" )
389 ENDIF( NOT CYGWIN OR MINGW )
390 ENDIF( NOT WIN32_STYLE_FIND )
393 # Set preprocessor defs
395 STRING(TOUPPER ${CMAKE_SYSTEM_NAME} WX_SYSNAME)
396 SET( WXWIDGETS_DEFINITIONS ${WXWIDGETS_DEFINITIONS} "-D${WX_SYSNAME}" )
399 SET( WXWIDGETS_DEFINITIONS ${WXWIDGETS_DEFINITIONS} -DWIN32 -D__WXMSW__ )
400 ELSE(WIN32_STYLE_FIND)
402 SET( WXWIDGETS_DEFINITIONS ${WXWIDGETS_DEFINITIONS} -D__GNUWIN32__ -O2 -D_WIN32_IE=0x400 -MMD -Wall )
404 ENDIF(WIN32_STYLE_FIND)
406 IF( WXWIDGETS_USE_SHARED )
407 SET( WXWIDGETS_DEFINITIONS ${WXWIDGETS_DEFINITIONS} -DWXUSINGDLL )
408 ENDIF( WXWIDGETS_USE_SHARED )
410 IF( WXWIDGETS_USE_DEBUG )
411 SET( WXWIDGETS_DEFINITIONS ${WXWIDGETS_DEFINITIONS} -D_DEBUG_ -D__WXDEBUG__ -DWXDEBUG=1 )
412 ENDIF( WXWIDGETS_USE_DEBUG )
414 IF ( WXWIDGETS_USE_UNICODE )
415 SET( WXWIDGETS_DEFINITIONS ${WXWIDGETS_DEFINITIONS} -DwxUSE_UNICODE )
416 ENDIF ( WXWIDGETS_USE_UNICODE )
419 # Set the WXWIDGETS_FOUND var
421 IF(WXWIDGETS_LIBRARIES AND WXWIDGETS_INCLUDE_DIR)
422 SET(WXWIDGETS_FOUND 1)
423 ENDIF(WXWIDGETS_LIBRARIES AND WXWIDGETS_INCLUDE_DIR)
428 MARK_AS_ADVANCED(WXWIDGETS_INSTALL_PATH)
433 FILE( WRITE "${PROJECT_BINARY_DIR}/findwxw.log" "WXWIDGETS_FOUND: ${WXWIDGETS_FOUND}\n" )
434 FILE( APPEND "${PROJECT_BINARY_DIR}/findwxw.log" "WXWIDGETS_LINK_DIRECTORIES: ${WXWIDGETS_LINK_DIRECTORIES}\n" )
435 FILE( APPEND "${PROJECT_BINARY_DIR}/findwxw.log" "WXWIDGETS_LIBRARIES: ${WXWIDGETS_LIBRARIES}\n" )
436 FILE( APPEND "${PROJECT_BINARY_DIR}/findwxw.log" "WXWIDGETS_CXX_FLAGS: ${WXWIDGETS_CXX_FLAGS}\n" )
437 FILE( APPEND "${PROJECT_BINARY_DIR}/findwxw.log" "WXWIDGETS_INCLUDE_DIR: ${WXWIDGETS_INCLUDE_DIR}\n" )
438 FILE( APPEND "${PROJECT_BINARY_DIR}/findwxw.log" "WXWIDGETS_DEFINITIONS: ${WXWIDGETS_DEFINITIONS}\n" )