2004-04-21 23:09:07 +04:00
##
## This module finds if wxWindows is installed and determines where the
## include files and libraries are. It also determines what the name of
## the library is. This code sets the following variables:
##
## ------------------------------------------------------------------
##
## WXWINDOWS_FOUND = system has WxWindows (in desired config. build)
##
## WXWINDOWS_LIBRARIES = full path to the wxWindows libraries
## on Unix/Linux with additional linker flags from
## "wx-config --libs"
##
## CMAKE_WXWINDOWS_CXX_FLAGS = Unix compiler flags for wxWindows, essentially
## "`wx-config --cxxflags`"
##
## WXWINDOWS_INCLUDE_DIR = where to find headers "wx/wx.h" "wx/setup.h"
##
## WXWINDOWS_LINK_DIRECTORIES = link directories, useful for rpath on Unix
##
## WXWINDOWS_DEFINITIONS = extra defines
##
## deprecated:
## * CMAKE_WX_CAN_COMPILE
## * WXWINDOWS_LIBRARY
## * CMAKE_WX_CXX_FLAGS
## * WXWINDOWS_INCLUDE_PATH
##
## ------------------------------------------------------------------
##
## USAGE:
## # for convenience include Use_wxWindows.cmake in your projects
## CMakeLists.txt:
##
## # if you need OpenGL support please
## SET(WXWINDOWS_USE_GL 1)
## # in your CMakeLists.txt *before* you include this file.
##
## # just include Use_wxWindows.cmake
## # in your projects CMakeLists.txt
## INCLUDE( ${CMAKE_ROOT}/Modules/Use_wxWindows.cmake)
##
## ------------------------------------------------------------------
## Author Jan Woetzel <http://www.mip.informatik.uni-kiel.de/~jw> (07/2003)
## ------------------------------------------------------------------
##
## -changed variable names to conventions from cmakes readme.txt (Jan Woetzel
## 07/07/2003)
## -added definition WINVER for WIN32 (Jan Woetzel 07/07//2003)
## -added IF(CMAKE_WXWINDOWS_CONFIG_EXECUTABLE) found and changed
## CMAKE_WX_CONFIG to CMAKE_WXWINDOWS_CONFIG_EXECUTABLE (Jan Woetzel
## 07/22/2003)
## -removed OPTION for CMAKE_WXWINDOWS_USE_GL. Force the developer to SET it.
##
## status:
## tested with:
## -cmake 1.6.7, Linux (Suse 7.3), wxWindows 2.4.0, gcc 2.95
## -cmake 1.6.7, Linux (Suse 8.2), wxWindows 2.4.0, gcc 3.3
## -cmake 1.6.7, Linux (Suse 8.2), wxWindows 2.4.1-patch1, gcc 3.3
## -cmake 1.6.7, MS Windows XP home, wxWindows 2.4.1, MS Visual Studio .net 7
## 2002 (static build)
##
## TODO:
## -OPTION for unicode builds
## -change WXWINDOWS_USE_GL to use FindOpenGL.cmake or let the user do it
## -testing of DLL linking under MS WIN32
##
IF ( WIN32 )
SET ( WIN32_STYLE_FIND 1 )
2004-04-22 19:12:04 +04:00
ENDIF ( WIN32 )
2004-04-21 23:09:07 +04:00
IF ( MINGW )
SET ( WIN32_STYLE_FIND 0 )
SET ( UNIX_STYLE_FIND 1 )
ENDIF ( MINGW )
IF ( UNIX )
SET ( UNIX_STYLE_FIND 1 )
2004-04-22 19:12:04 +04:00
ENDIF ( UNIX )
2004-04-21 23:09:07 +04:00
IF ( WIN32_STYLE_FIND )
## ######################################################################
##
## Windows specific:
##
## candidates for root/base directory of wxwindows
## should have subdirs include and lib containing include/wx/wx.h
## fix the root dir to avoid mixing of headers/libs from different
## versions/builds:
SET ( WXWINDOWS_POSSIBLE_ROOT_PATHS
$ E N V { W X W I N }
" [ H K E Y _ L O C A L _ M A C H I N E \ \ S O F T W A R E \ \ M i c r o s o f t \ \ W i n d o w s \ \ C u r r e n t V e r s i o n \ \ U n i n s t a l l \ \ w x W i n d o w s _ i s 1 ; I n n o S e t u p : A p p P a t h ] " )
FIND_PATH ( WXWINDOWS_ROOT_DIR include/wx/wx.h
$ { W X W I N D O W S _ P O S S I B L E _ R O O T _ P A T H S } )
## MESSAGE("DBG found WXWINDOWS_ROOT_DIR: ${WXWINDOWS_ROOT_DIR}")
## find libs for combination of static/shared with release/debug
SET ( WXWINDOWS_POSSIBLE_LIB_PATHS
" $ { W X W I N D O W S _ R O O T _ D I R } / l i b " )
FIND_LIBRARY ( WXWINDOWS_STATIC_LIBRARY
N A M E S w x w x m s w
P A T H S $ { W X W I N D O W S _ P O S S I B L E _ L I B _ P A T H S }
D O C " w x W i n d o w s s t a t i c r e l e a s e b u i l d l i b r a r y " )
FIND_LIBRARY ( WXWINDOWS_STATIC_DEBUG_LIBRARY
N A M E S w x d w x m s w d
P A T H S $ { W X W I N D O W S _ P O S S I B L E _ L I B _ P A T H S }
D O C " w x W i n d o w s s t a t i c d e b u g b u i l d l i b r a r y " )
FIND_LIBRARY ( WXWINDOWS_SHARED_LIBRARY
N A M E S w x m s w 2 4 w x m s w 2 4 1 w x m s w 2 4 0 w x 2 3 _ 2 w x 2 2 _ 9
P A T H S $ { W X W I N D O W S _ P O S S I B L E _ L I B _ P A T H S }
D O C " w x W i n d o w s s h a r e d r e l e a s e b u i l d l i b r a r y " )
FIND_LIBRARY ( WXWINDOWS_SHARED_DEBUG_LIBRARY
N A M E S w x m s w 2 4 d w x m s w 2 4 1 d w x m s w 2 4 0 d w x 2 3 _ 2 d w x 2 2 _ 9 d
P A T H S $ { W X W I N D O W S _ P O S S I B L E _ L I B _ P A T H S }
D O C " w x W i n d o w s s h a r e d d e b u g b u i l d l i b r a r y " )
## if there is at least one shared lib available
## let user choose wether to use shared or static wxwindows libs
IF ( WXWINDOWS_SHARED_LIBRARY OR WXWINDOWS_SHARED_DEBUG_LIBRARY )
## default value OFF because wxWindows MSVS default build is static
OPTION ( WXWINDOWS_USE_SHARED_LIBS
" U s e s h a r e d versions ( dll ) o f w x W i n d o w s l i b r a r i e s ? " O F F )
MARK_AS_ADVANCED ( WXWINDOWS_USE_SHARED_LIBS )
ENDIF ( WXWINDOWS_SHARED_LIBRARY OR WXWINDOWS_SHARED_DEBUG_LIBRARY )
## add system libraries wxwindows depends on
SET ( CMAKE_WXWINDOWS_LIBRARIES ${ CMAKE_WXWINDOWS_LIBRARIES }
c o m c t l 3 2
r p c r t 4
w s o c k 3 2
## presumably ctl3d32 is not neccesary (Jan Woetzel 07/2003)
# ctl3d32
# debug ${WXWINDOWS_ROOT_DIR}/lib/zlibd.lib optimized ${WXWINDOWS_ROOT_DIR}/lib/zlibd.lib
# debug ${WXWINDOWS_ROOT_DIR}/lib/regexd.lib optimized ${WXWINDOWS_ROOT_DIR}/lib/regexd.lib
# debug ${WXWINDOWS_ROOT_DIR}/lib/pngd.lib optimized ${WXWINDOWS_ROOT_DIR}/lib/pngd.lib
# debug ${WXWINDOWS_ROOT_DIR}/lib/jpegd.lib optimized ${WXWINDOWS_ROOT_DIR}/lib/jpegd.lib
# debug ${WXWINDOWS_ROOT_DIR}/lib/tiffd.lib optimized ${WXWINDOWS_ROOT_DIR}/lib/tiff.lib
)
# JW removed option and force the develper th SET it.
# OPTION(WXWINDOWS_USE_GL "use wxWindows with GL support (use additional
# opengl, glu libs)?" OFF)
## opengl/glu: (TODO/FIXME: better use FindOpenGL.cmake here
IF ( WXWINDOWS_USE_GL )
SET ( CMAKE_WXWINDOWS_LIBRARIES ${ CMAKE_WXWINDOWS_LIBRARIES }
o p e n g l 3 2
g l u 3 2
)
ENDIF ( WXWINDOWS_USE_GL )
##
## select between use of shared or static wxWindows lib then set libs to use
## for debug and optimized build. so the user can switch between debug and
## release build e.g. within MS Visual Studio without running cmake with a
## different build directory again.
##
## then add the build specific include dir for wx/setup.h
##
IF ( WXWINDOWS_USE_SHARED_LIBS )
##MESSAGE("DBG wxWindows use shared lib selected.")
## shared: both wx (debug and release) found?
IF ( WXWINDOWS_SHARED_DEBUG_LIBRARY AND WXWINDOWS_SHARED_LIBRARY )
##MESSAGE("DBG wx shared: debug and optimized found.")
SET ( WXWINDOWS_LIBRARIES ${ CMAKE_WXWINDOWS_LIBRARIES }
d e b u g $ { W X W I N D O W S _ S H A R E D _ D E B U G _ L I B R A R Y }
o p t i m i z e d $ { W X W I N D O W S _ S H A R E D _ L I B R A R Y } )
FIND_PATH ( WXWINDOWS_INCLUDE_DIR_SETUPH wx/setup.h
$ { W X W I N D O W S _ R O O T _ D I R } / l i b / m s w d l l d
$ { W X W I N D O W S _ R O O T _ D I R } / l i b / m s w d l l )
ENDIF ( WXWINDOWS_SHARED_DEBUG_LIBRARY AND WXWINDOWS_SHARED_LIBRARY )
## shared: only debug wx lib found?
IF ( WXWINDOWS_SHARED_DEBUG_LIBRARY )
IF ( NOT WXWINDOWS_SHARED_LIBRARY )
##MESSAGE("DBG wx shared: debug (but no optimized) found.")
SET ( WXWINDOWS_LIBRARIES ${ CMAKE_WXWINDOWS_LIBRARIES }
$ { W X W I N D O W S _ S H A R E D _ D E B U G _ L I B R A R Y } )
FIND_PATH ( WXWINDOWS_INCLUDE_DIR_SETUPH wx/setup.h
$ { W X W I N D O W S _ R O O T _ D I R } / l i b / m s w d l l d )
ENDIF ( NOT WXWINDOWS_SHARED_LIBRARY )
ENDIF ( WXWINDOWS_SHARED_DEBUG_LIBRARY )
## shared: only release wx lib found?
IF ( NOT WXWINDOWS_SHARED_DEBUG_LIBRARY )
IF ( WXWINDOWS_SHARED_LIBRARY )
##MESSAGE("DBG wx shared: optimized (but no debug) found.")
SET ( WXWINDOWS_LIBRARIES ${ CMAKE_WXWINDOWS_LIBRARIES }
$ { W X W I N D O W S _ S H A R E D _ D E B U G _ L I B R A R Y } )
FIND_PATH ( WXWINDOWS_INCLUDE_DIR_SETUPH wx/setup.h
$ { W X W I N D O W S _ R O O T _ D I R } / l i b / m s w d l l )
ENDIF ( WXWINDOWS_SHARED_LIBRARY )
ENDIF ( NOT WXWINDOWS_SHARED_DEBUG_LIBRARY )
## shared: none found?
IF ( NOT WXWINDOWS_SHARED_DEBUG_LIBRARY )
IF ( NOT WXWINDOWS_SHARED_LIBRARY )
MESSAGE ( SEND_ERROR
" N o s h a r e d w x W i n d o w s l i b f o u n d , b u t W X W I N D O W S _ U S E _ S H A R E D _ L I B S = $ { W X W I N D O W S _ U S E _ S H A R E D _ L I B S } . " )
ENDIF ( NOT WXWINDOWS_SHARED_LIBRARY )
ENDIF ( NOT WXWINDOWS_SHARED_DEBUG_LIBRARY )
ELSE ( WXWINDOWS_USE_SHARED_LIBS )
##MESSAGE("DBG wxWindows static lib selected.")
## static: both wx (debug and release) found?
IF ( WXWINDOWS_STATIC_DEBUG_LIBRARY AND WXWINDOWS_STATIC_LIBRARY )
##MESSAGE("DBG wx static: debug and optimized found.")
SET ( WXWINDOWS_LIBRARIES ${ CMAKE_WXWINDOWS_LIBRARIES }
d e b u g $ { W X W I N D O W S _ S T A T I C _ D E B U G _ L I B R A R Y }
o p t i m i z e d $ { W X W I N D O W S _ S T A T I C _ L I B R A R Y } )
FIND_PATH ( WXWINDOWS_INCLUDE_DIR_SETUPH wx/setup.h
$ { W X W I N D O W S _ R O O T _ D I R } / l i b / m s w d
$ { W X W I N D O W S _ R O O T _ D I R } / l i b / m s w )
ENDIF ( WXWINDOWS_STATIC_DEBUG_LIBRARY AND WXWINDOWS_STATIC_LIBRARY )
## static: only debug wx lib found?
IF ( WXWINDOWS_STATIC_DEBUG_LIBRARY )
IF ( NOT WXWINDOWS_STATIC_LIBRARY )
##MESSAGE("DBG wx static: debug (but no optimized) found.")
SET ( WXWINDOWS_LIBRARIES ${ CMAKE_WXWINDOWS_LIBRARIES }
$ { W X W I N D O W S _ S T A T I C _ D E B U G _ L I B R A R Y } )
FIND_PATH ( WXWINDOWS_INCLUDE_DIR_SETUPH wx/setup.h
$ { W X W I N D O W S _ R O O T _ D I R } / l i b / m s w d )
ENDIF ( NOT WXWINDOWS_STATIC_LIBRARY )
ENDIF ( WXWINDOWS_STATIC_DEBUG_LIBRARY )
## static: only release wx lib found?
IF ( NOT WXWINDOWS_STATIC_DEBUG_LIBRARY )
IF ( WXWINDOWS_STATIC_LIBRARY )
##MESSAGE("DBG wx static: optimized (but no debug) found.")
SET ( WXWINDOWS_LIBRARIES ${ CMAKE_WXWINDOWS_LIBRARIES }
$ { W X W I N D O W S _ S T A T I C _ D E B U G _ L I B R A R Y } )
FIND_PATH ( WXWINDOWS_INCLUDE_DIR_SETUPH wx/setup.h
$ { W X W I N D O W S _ R O O T _ D I R } / l i b / m s w )
ENDIF ( WXWINDOWS_STATIC_LIBRARY )
ENDIF ( NOT WXWINDOWS_STATIC_DEBUG_LIBRARY )
## static: none found?
IF ( NOT WXWINDOWS_STATIC_DEBUG_LIBRARY )
IF ( NOT WXWINDOWS_STATIC_LIBRARY )
MESSAGE ( SEND_ERROR
" N o s t a t i c w x W i n d o w s l i b f o u n d , b u t W X W I N D O W S _ U S E _ S H A R E D _ L I B S = $ { W X W I N D O W S _ U S E _ S H A R E D _ L I B S } . " )
ENDIF ( NOT WXWINDOWS_STATIC_LIBRARY )
ENDIF ( NOT WXWINDOWS_STATIC_DEBUG_LIBRARY )
ENDIF ( WXWINDOWS_USE_SHARED_LIBS )
## not neccessary in wxWindows 2.4.1
## but it may fix a previous bug, see
## http://lists.wxwindows.org/cgi-bin/ezmlm-cgi?8:mss:37574:200305:mpdioeneabobmgjenoap
OPTION ( WXWINDOWS_SET_DEFINITIONS "Set additional defines for wxWindows" OFF )
MARK_AS_ADVANCED ( WXWINDOWS_SET_DEFINITIONS )
IF ( WXWINDOWS_SET_DEFINITIONS )
SET ( WXWINDOWS_DEFINITIONS "-DWINVER=0x400" )
ELSE ( WXWINDOWS_SET_DEFINITIONS )
# clear:
SET ( WXWINDOWS_DEFINITIONS "" )
ENDIF ( WXWINDOWS_SET_DEFINITIONS )
## Find the include directories for wxwindows
## the first, build specific for wx/setup.h was determined before.
## add inc dir for general for "wx/wx.h"
SET ( WXWINDOWS_POSSIBLE_INCLUDE_PATHS
" $ { W X W I N D O W S _ R O O T _ D I R } / i n c l u d e "
)
FIND_PATH ( WXWINDOWS_INCLUDE_DIR wx/wx.h
$ { W X W I N D O W S _ P O S S I B L E _ I N C L U D E _ P A T H S }
)
# append the build specific include dir for wx/setup.h:
IF ( WXWINDOWS_INCLUDE_DIR_SETUPH )
SET ( WXWINDOWS_INCLUDE_DIR ${ WXWINDOWS_INCLUDE_DIR } ${ WXWINDOWS_INCLUDE_DIR_SETUPH } )
ENDIF ( WXWINDOWS_INCLUDE_DIR_SETUPH )
MARK_AS_ADVANCED (
W X W I N D O W S _ R O O T _ D I R
W X W I N D O W S _ I N C L U D E _ D I R
W X W I N D O W S _ I N C L U D E _ D I R _ S E T U P H
W X W I N D O W S _ S T A T I C _ L I B R A R Y
W X W I N D O W S _ S T A T I C _ D E B U G _ L I B R A R Y
W X W I N D O W S _ S H A R E D _ L I B R A R Y
W X W I N D O W S _ S H A R E D _ D E B U G _ L I B R A R Y
)
ELSE ( WIN32_STYLE_FIND )
IF ( UNIX_STYLE_FIND )
## ######################################################################
##
## UNIX/Linux specific:
##
## use backquoted wx-config to query and set flags and libs:
## 06/2003 Jan Woetzel
##
OPTION ( WXWINDOWS_USE_SHARED_LIBS "Use shared versions (.so) of wxWindows libraries" ON )
MARK_AS_ADVANCED ( WXWINDOWS_USE_SHARED_LIBS )
# JW removed option and force the develper th SET it.
# OPTION(WXWINDOWS_USE_GL "use wxWindows with GL support (use additional
# --gl-libs for wx-config)?" OFF)
# wx-config should be in your path anyhow, usually no need to set WXWIN or
# search in ../wx or ../../wx
FIND_PROGRAM ( CMAKE_WXWINDOWS_WXCONFIG_EXECUTABLE wx-config
$ E N V { W X W I N }
. . / w x / b i n
. . / . . / w x / b i n )
# check wether wx-config was found:
IF ( CMAKE_WXWINDOWS_WXCONFIG_EXECUTABLE )
# use shared/static wx lib?
# remember: always link shared to use systems GL etc. libs (no static
# linking, just link *against* static .a libs)
IF ( WXWINDOWS_USE_SHARED_LIBS )
SET ( WX_CONFIG_ARGS_LIBS "--libs" )
ELSE ( WXWINDOWS_USE_SHARED_LIBS )
SET ( WX_CONFIG_ARGS_LIBS "--static --libs" )
ENDIF ( WXWINDOWS_USE_SHARED_LIBS )
# do we need additionial wx GL stuff like GLCanvas ?
IF ( WXWINDOWS_USE_GL )
SET ( WX_CONFIG_ARGS_LIBS "${WX_CONFIG_ARGS_LIBS} --gl-libs" )
ENDIF ( WXWINDOWS_USE_GL )
##MESSAGE("DBG: WX_CONFIG_ARGS_LIBS=${WX_CONFIG_ARGS_LIBS}===")
# set CXXFLAGS to be fed into CMAKE_CXX_FLAGS by the user:
SET ( CMAKE_WXWINDOWS_CXX_FLAGS "`${CMAKE_WXWINDOWS_WXCONFIG_EXECUTABLE} --cxxflags`" )
##MESSAGE("DBG: for compilation:
##CMAKE_WXWINDOWS_CXX_FLAGS=${CMAKE_WXWINDOWS_CXX_FLAGS}===")
# keep the back-quoted string for clarity
SET ( WXWINDOWS_LIBRARIES "`${CMAKE_WXWINDOWS_WXCONFIG_EXECUTABLE} ${WX_CONFIG_ARGS_LIBS}`" )
##MESSAGE("DBG2: for linking:
##WXWINDOWS_LIBRARIES=${WXWINDOWS_LIBRARIES}===")
# evaluate wx-config output to separate linker flags and linkdirs for
# rpath:
EXEC_PROGRAM ( ${ CMAKE_WXWINDOWS_WXCONFIG_EXECUTABLE }
A R G S $ { W X _ C O N F I G _ A R G S _ L I B S }
O U T P U T _ V A R I A B L E W X _ C O N F I G _ L I B S )
## extract linkdirs (-L) for rpath
## use regular expression to match wildcard equivalent "-L*<endchar>"
## with <endchar> is a space or a semicolon
STRING ( REGEX MATCHALL "[-][L]([^ ;])+" WXWINDOWS_LINK_DIRECTORIES_WITH_PREFIX "${WX_CONFIG_LIBS}" )
#MESSAGE("DBG WXWINDOWS_LINK_DIRECTORIES_WITH_PREFIX=${WXWINDOWS_LINK_DIRECTORIES_WITH_PREFIX}")
## remove prefix -L because we need the pure directory for LINK_DIRECTORIES
## replace -L by ; because the separator seems to be lost otherwise (bug or
## feature?)
IF ( WXWINDOWS_LINK_DIRECTORIES_WITH_PREFIX )
STRING ( REGEX REPLACE "[-][L]" ";" WXWINDOWS_LINK_DIRECTORIES ${ WXWINDOWS_LINK_DIRECTORIES_WITH_PREFIX } )
#MESSAGE("DBG WXWINDOWS_LINK_DIRECTORIES=${WXWINDOWS_LINK_DIRECTORIES}")
ENDIF ( WXWINDOWS_LINK_DIRECTORIES_WITH_PREFIX )
## replace space separated string by semicolon separated vector to make it
## work with LINK_DIRECTORIES
SEPARATE_ARGUMENTS ( WXWINDOWS_LINK_DIRECTORIES )
MARK_AS_ADVANCED (
C M A K E _ W X W I N D O W S _ C X X _ F L A G S
W X W I N D O W S _ I N C L U D E _ D I R
W X W I N D O W S _ L I B R A R I E S
C M A K E _ W X W I N D O W S _ W X C O N F I G _ E X E C U T A B L E
)
# we really need wx-config...
ELSE ( CMAKE_WXWINDOWS_WXCONFIG_EXECUTABLE )
MESSAGE ( SEND_ERROR "Cannot find wx-config anywhere on the system. Please put the file into your path or specify it in CMAKE_WXWINDOWS_WXCONFIG_EXECUTABLE." )
MARK_AS_ADVANCED ( CMAKE_WXWINDOWS_WXCONFIG_EXECUTABLE )
ENDIF ( CMAKE_WXWINDOWS_WXCONFIG_EXECUTABLE )
ELSE ( UNIX_STYLE_FIND )
MESSAGE ( SEND_ERROR "FindwxWindows.cmake: Platform unknown/unsupported by FindwxWindows.cmake. It's neither WIN32 nor UNIX" )
ENDIF ( UNIX_STYLE_FIND )
ENDIF ( WIN32_STYLE_FIND )
IF ( WXWINDOWS_LIBRARIES )
IF ( WXWINDOWS_INCLUDE_DIR OR CMAKE_WXWINDOWS_CXX_FLAGS )
## found all we need.
SET ( WXWINDOWS_FOUND 1 )
## set deprecated variables for backward compatibility:
SET ( CMAKE_WX_CAN_COMPILE ${ WXWINDOWS_FOUND } )
SET ( WXWINDOWS_LIBRARY ${ WXWINDOWS_LIBRARIES } )
SET ( WXWINDOWS_INCLUDE_PATH ${ WXWINDOWS_INCLUDE_DIR } )
SET ( CMAKE_WX_CXX_FLAGS ${ CMAKE_WXWINDOWS_CXX_FLAGS } )
ENDIF ( WXWINDOWS_INCLUDE_DIR OR CMAKE_WXWINDOWS_CXX_FLAGS )
ENDIF ( WXWINDOWS_LIBRARIES )