From 3c9744f406d85a293fc504368d32ba34b5ed3332 Mon Sep 17 00:00:00 2001 From: Brad King Date: Fri, 21 Jul 2006 15:43:19 -0400 Subject: ENH: Applying patch from bug#3443 to implement FindwxWidgets.cmake properly. It also updates the UseWX test and WXDialog sources to use the new find script. --- Modules/FindwxWidgets.cmake | 655 +++++++++++++++++++++++++++++++++++- Modules/FindwxWindows.cmake | 419 ++++++++++++----------- Modules/Use_wxWindows.cmake | 45 +-- Modules/UsewxWidgets.cmake | 67 +++- Source/CMakeLists.txt | 19 +- Source/WXDialog/CMakeLists.txt | 149 ++++---- Source/WXDialog/bin/FindUPX.cmake | 11 +- Source/WXDialog/bin/FindwxW.cmake | 4 + Source/WXDialog/bin/FindwxWin.cmake | 5 + Source/WXDialog/bin/UsewxW.cmake | 4 + Tests/UseWX/CMakeLists.txt | 10 +- Tests/UseWX/WX.cxx | 6 +- 12 files changed, 1067 insertions(+), 327 deletions(-) diff --git a/Modules/FindwxWidgets.cmake b/Modules/FindwxWidgets.cmake index 4557d9a..7e0fb33 100644 --- a/Modules/FindwxWidgets.cmake +++ b/Modules/FindwxWidgets.cmake @@ -1 +1,654 @@ -INCLUDE(FindwxWindows) +# - Find a wxWidgets (a.k.a., wxWindows) installation. +# This module finds if wxWidgets is installed and selects a default +# configuration to use. +# +# The following variables are searched for and set to defaults in case +# of multiple choices. Change them if the defaults are not desired: +# +# wxWidgets_ROOT_DIR - Base wxWidgets directory +# (e.g., C:/wxWidgets-2.6.3). +# wxWidgets_LIB_DIR - Path to wxWidgets libraries +# (e.g., C:/wxWidgets-2.6.3/lib/vc_lib). +# wxWidgets_CONFIGURATION - Configuration to use +# (e.g., msw, mswd, mswu, mswunivud, etc.) +# wxWidgets_USE_LIBS - Libraries to use besides the common +# required ones; set to base and core by +# default. You couls also list them in +# FIND_PACKAGE(wxWidgets REQUIRED +# ) +# +# HAVE_ISYSTEM - if true wx warnings are suppressed on g++ +# by replacing -I with -isystem +# +# The following are set after configuration is done: +# +# wxWidgets_FOUND - Set to TRUE if wxWidgets was found. +# wxWidgets_INCLUDE_DIRS - Include directories for WIN32 +# i.e., where to find "wx/wx.h" and +# "wx/setup.h"; possibly empty for unices. +# wxWidgets_LIBRARIES - Path to the wxWidgets libraries. +# wxWidgets_LIBRARY_DIRS - compile time link dirs, useful for +# rpath on UNIX. Typically an empty string +# in WIN32 environment. +# wxWidgets_DEFINITIONS - Contains defines required to compile/link +# against WX, e.g. -DWXUSINGDLL +# wxWidgets_CXX_FLAGS - Include dirs and ompiler flags for +# unices, empty on WIN32. Esentially +# "`wx-config --cxxflags`". +# wxWidgets_USE_FILE - convenience include file +# +# Sample usage: +# +# SET(wxWidgets_USE_LIBS base core gl net) +# FIND_PACKAGE(wxWidgets) +# IF(wxWidgets_FOUND) +# INCLUDE(${wxWidgets_USE_FILE}) +# # and for each of your dependant executable/library targets: +# TARGET_LINK_LIBRARIES( ${wxWidgets_LIBRARIES}) +# ENDIF(wxWidgets_FOUND) +# +# Sample usage with monolithic wx build: +# SET(wxWidgets_USE_LIBS msw26 expat jpeg gl png regex tiff zlib) +# ... + +# NOTES +# +# This module has been tested on the WIN32 platform with wxWidgets +# 2.6.2, 2.6.3, and 2.5.3. However, it has been designed to +# easily extend support to all possible builds, e.g., static/shared, +# debug/release, unicode, universal, multilib/monolithic, etc.. +# +# If you want to use the module and your build type is not supported +# out-of-the-box, please contact me to exchange information on how +# your system is setup and I'll try to add support for it. +# +# AUTHOR +# +# Miguel A. Figueroa-Villanueva (miguelf at ieee dot org). +# Jan Woetzel (jw at mip.informatik.uni-kiel.de). +# +# Based on previous works of: +# Jan Woetzel (FindwxWindows.cmake), +# Jorgen Bodde and Jerry Fath (FindwxWin.cmake). + +# +# TODO/ideas +# +# (1) Option/Setting to use all available wx libs +# In contrast to expert developer who lists the +# minimal set of required libs in wxWidgets_USE_LIBS +# there is the newbie user: +# - who just wants to link against WX with more 'magic' +# - doesn't know the internal structure of WX or how it was built, +# in particular if it is monolithic or not +# - want to link against all available WX libs +# Basically, the intent here is to mimic what wx-config would do by +# default (i.e., `wx-config --libs`). +# +# Possible solution: +# Add a reserved keyword "std" that initializes to what wx-config +# would default to. If the user has not set the wxWidgets_USE_LIBS, +# default to "std" instead of "base core" as it is now. To implement +# "std" will basically boil down to a FOR_EACH lib-FOUND, but maybe +# checking whether a minimal set was found. +# + + +# +# Helper macro to control the debugging output globally. +# - NOTE: This and all the DBG_MSG calls should be removed after the +# module stabilizes. +# +MACRO(DBG_MSG _MSG) + # MESSAGE(STATUS "${CMAKE_CURRENT_LIST_FILE}(${CMAKE_CURRENT_LIST_LINE}): ${_MSG}") +ENDMACRO(DBG_MSG) + +# for compatibility with CMake 2.4.2 +# emulate wxWidgets_FIND_COMPONENTS +IF (NOT wxWidgets_FIND_COMPONENTS) + SET(wxWidgets_FIND_COMPONENTS "") + FOREACH(COMPONENT + base + core + adv + dbgrid + expat + gl + jpeg + html + media + msw msw26 msw27 msw28 + mono + net + odbc + png + qa + regex + tiff + # std # no true lib/component - list for compatibility with _USE_LIBS ? + xml + xrc + zlib + ) + IF (${wxWidgets_FIND_REQUIRED_${COMPONENT}}) + SET(wxWidgets_FIND_COMPONENTS ${wxWidgets_FIND_COMPONENTS} ${COMPONENT}) + ENDIF(${wxWidgets_FIND_REQUIRED_${COMPONENT}}) + ENDFOREACH(COMPONENT) +ENDIF (NOT wxWidgets_FIND_COMPONENTS) + +DBG_MSG("wxWidgets_FIND_COMPONENTS=${wxWidgets_FIND_COMPONENTS}") + +# +# Clear return values in case the module is loaded more than once. +# +SET(wxWidgets_FOUND FALSE) +# +SET(wxWidgets_INCLUDE_DIRS "") +SET(wxWidgets_LIBRARIES "") +SET(wxWidgets_LIBRARY_DIRS "") +SET(wxWidgets_CXX_FLAGS "") + +#===================================================================== +#===================================================================== +IF(WIN32) + SET(WIN32_STYLE_FIND 1) +ENDIF(WIN32) +IF(MINGW) + SET(WIN32_STYLE_FIND 0) + SET(UNIX_STYLE_FIND 1) +ENDIF(MINGW) +IF(UNIX) + SET(UNIX_STYLE_FIND 1) +ENDIF(UNIX) + + +IF(WIN32_STYLE_FIND) + + # global settings for std and common wx libs + # logic could determine _USE_MONOLITHIC automatically + # but let the user decide for now. + IF (wxWidgets_USE_MONOLITHIC) + SET(wxWidgets_STD_LIBRARIES mono ) + ELSE (wxWidgets_USE_MONOLITHIC) + SET(wxWidgets_STD_LIBRARIES base core ) # this is default + ENDIF(wxWidgets_USE_MONOLITHIC) + + #useful common wx libs needed by almost all components + SET(wxWidgets_COMMON_LIBRARIES png tiff jpeg zlib regex expat) + + #--------------------------------------------------------------------- + # WIN32: Helper MACROS + #--------------------------------------------------------------------- + # Get filename components for a configuration. For example, + # if _CONFIGURATION = mswunivud, then _UNV=univ, _UCD=u _DBG=d + # if _CONFIGURATION = mswu, then _UNV="", _UCD=u _DBG="" + # + MACRO(WX_GET_NAME_COMPONENTS _CONFIGURATION _UNV _UCD _DBG) + STRING(REGEX MATCH "univ" ${_UNV} "${_CONFIGURATION}") + STRING(REGEX REPLACE "msw.*(u)[d]*$" "u" ${_UCD} "${_CONFIGURATION}") + IF(${_UCD} STREQUAL ${_CONFIGURATION}) + SET(${_UCD} "") + ENDIF(${_UCD} STREQUAL ${_CONFIGURATION}) + STRING(REGEX MATCH "d$" ${_DBG} "${_CONFIGURATION}") + ENDMACRO(WX_GET_NAME_COMPONENTS) + + # + # Find libraries associated to a configuration. + # + MACRO(WX_FIND_LIBS _UNV _UCD _DBG) + DBG_MSG("m_unv = ${_UNV}") + DBG_MSG("m_ucd = ${_UCD}") + DBG_MSG("m_dbg = ${_DBG}") + + # Find wxWidgets common libraries + FOREACH(LIB png tiff jpeg zlib regex expat) + FIND_LIBRARY(WX_${LIB}${_DBG} + NAMES + wx${LIB}${_UCD}${_DBG} # for regex + wx${LIB}${_DBG} + PATHS ${WX_LIB_DIR} + NO_DEFAULT_PATH + ) + MARK_AS_ADVANCED(WX_${LIB}${_DBG}) + ENDFOREACH(LIB) + + # Find wxWidgets multilib base libraries + FIND_LIBRARY(WX_base${_DBG} + NAMES + wxbase26${_UCD}${_DBG} + wxbase25${_UCD}${_DBG} + PATHS ${WX_LIB_DIR} + NO_DEFAULT_PATH + ) + MARK_AS_ADVANCED(WX_base${_DBG}) + FOREACH(LIB net odbc xml) + FIND_LIBRARY(WX_${LIB}${_DBG} + NAMES + wxbase26${_UCD}${_DBG}_${LIB} + wxbase25${_UCD}${_DBG}_${LIB} + PATHS ${WX_LIB_DIR} + NO_DEFAULT_PATH + ) + MARK_AS_ADVANCED(WX_${LIB}${_DBG}) + ENDFOREACH(LIB) + + # Find wxWidgets monolithic library + FIND_LIBRARY(WX_mono${_DBG} + NAMES + wxmsw${_UNV}26${_UCD}${_DBG} + wxmsw${_UNV}25${_UCD}${_DBG} + PATHS ${WX_LIB_DIR} + NO_DEFAULT_PATH + ) + MARK_AS_ADVANCED(WX_mono${_DBG}) + + # Find wxWidgets multilib libraries + FOREACH(LIB core adv html media xrc dbgrid gl qa) + FIND_LIBRARY(WX_${LIB}${_DBG} + NAMES + wxmsw${_UNV}26${_UCD}${_DBG}_${LIB} + wxmsw${_UNV}25${_UCD}${_DBG}_${LIB} + PATHS ${WX_LIB_DIR} + NO_DEFAULT_PATH + ) + MARK_AS_ADVANCED(WX_${LIB}${_DBG}) + ENDFOREACH(LIB) + ENDMACRO(WX_FIND_LIBS) + + # + # Clear all library paths, so that FIND_LIBRARY refinds them. + # + # Clear a lib, reset its found flag, and mark as advanced. + MACRO(WX_CLEAR_LIB _LIB) + SET(${_LIB} "${_LIB}-NOTFOUND" CACHE FILEPATH "Cleared." FORCE) + SET(${_LIB}_FOUND FALSE) + MARK_AS_ADVANCED(${_LIB}) + ENDMACRO(WX_CLEAR_LIB) + # Clear all debug or release library paths (arguments are "d" or ""). + MACRO(WX_CLEAR_ALL_LIBS _DBG) + # Clear wxWidgets common libraries + FOREACH(LIB png tiff jpeg zlib regex expat) + WX_CLEAR_LIB(WX_${LIB}${_DBG}) + ENDFOREACH(LIB) + + # Clear wxWidgets multilib base libraries + WX_CLEAR_LIB(WX_base${_DBG}) + FOREACH(LIB net odbc xml) + WX_CLEAR_LIB(WX_${LIB}${_DBG}) + ENDFOREACH(LIB) + + # Clear wxWidgets monolithic library + WX_CLEAR_LIB(WX_mono${_DBG}) + + # Clear wxWidgets multilib libraries + FOREACH(LIB core adv html media xrc dbgrid gl qa) + WX_CLEAR_LIB(WX_${LIB}${_DBG}) + ENDFOREACH(LIB) + ENDMACRO(WX_CLEAR_ALL_LIBS) + # Clear all wxWidgets debug libraries. + MACRO(WX_CLEAR_ALL_DBG_LIBS) + WX_CLEAR_ALL_LIBS("d") + ENDMACRO(WX_CLEAR_ALL_DBG_LIBS) + # Clear all wxWidgets release libraries. + MACRO(WX_CLEAR_ALL_REL_LIBS) + WX_CLEAR_ALL_LIBS("") + ENDMACRO(WX_CLEAR_ALL_REL_LIBS) + + # + # Set the wxWidgets_LIBRARIES variable. + # Also, Sets output variable wxWidgets_FOUND to FALSE if it fails. + # + MACRO(WX_SET_LIBRARIES _LIBS _DBG) + IF(WX_USE_REL_AND_DBG) + DBG_MSG("looking for ${${_LIBS}}") + FOREACH(LIB ${${_LIBS}}) + DBG_MSG("Finding ${LIB} and ${LIB}d") + DBG_MSG("WX_${LIB} : ${WX_${LIB}}") + DBG_MSG("WX_${LIB}d : ${WX_${LIB}d}") + IF(WX_${LIB} AND WX_${LIB}d) + DBG_MSG("Found ${LIB} and ${LIB}d") + SET(wxWidgets_LIBRARIES ${wxWidgets_LIBRARIES} + debug ${WX_${LIB}d} + optimized ${WX_${LIB}} + ) + ELSE(WX_${LIB} AND WX_${LIB}d) + DBG_MSG("- not found due to missing WX_${LIB}=${WX_${LIB}} or WX_${LIB}d=${WX_${LIB}d}") + SET(wxWidgets_FOUND FALSE) + ENDIF(WX_${LIB} AND WX_${LIB}d) + ENDFOREACH(LIB) + ELSE(WX_USE_REL_AND_DBG) + FOREACH(LIB ${${_LIBS}}) + DBG_MSG("Finding ${LIB}${_DBG}") + DBG_MSG("WX_${LIB}${_DBG} : ${WX_${LIB}${_DBG}}") + IF(WX_${LIB}${_DBG}) + DBG_MSG("Found ${LIB}${_DBG}") + SET(wxWidgets_LIBRARIES ${wxWidgets_LIBRARIES} + ${WX_${LIB}${_DBG}} + ) + ELSE(WX_${LIB}${_DBG}) + DBG_MSG("- not found due to missing WX_${LIB}${_DBG}=${WX_${LIB}${_DBG}}") + SET(wxWidgets_FOUND FALSE) + ENDIF(WX_${LIB}${_DBG}) + ENDFOREACH(LIB) + ENDIF(WX_USE_REL_AND_DBG) + + FOREACH(LIB ${${_LIBS}}) + DBG_MSG("required: ${LIB}") + IF(LIB STREQUAL "gl") + DBG_MSG("gl required: ${LIB}") + SET(wxWidgets_LIBRARIES ${wxWidgets_LIBRARIES} + opengl32 + glu32 + ) + ENDIF(LIB STREQUAL "gl") + ENDFOREACH(LIB ${${_LIBS}}) + + SET(wxWidgets_LIBRARIES ${wxWidgets_LIBRARIES} + winmm + comctl32 + rpcrt4 + wsock32 + ) + ENDMACRO(WX_SET_LIBRARIES) + + #--------------------------------------------------------------------- + # WIN32: Start actual work. + #--------------------------------------------------------------------- + # + # Look for an installation tree. + # + FIND_PATH(wxWidgets_ROOT_DIR include/wx/wx.h + $ENV{WXWIN} + "[HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Uninstall\\wxWidgets_is1;Inno Setup: App Path]" ## WX 2.6.x + C:/wxWidgets-2.6.3 + D:/wxWidgets-2.6.3 + C:/wxWidgets-2.6.2 + D:/wxWidgets-2.6.2 + C:/wxWidgets-2.6.1 + D:/wxWidgets-2.6.1 + C:/wxWidgets-2.6.0 + D:/wxWidgets-2.6.0 + C:/wxWidgets-2.5.5 + D:/wxWidgets-2.5.5 + C:/wxWidgets-2.5.4 + D:/wxWidgets-2.5.4 + C:/wxWidgets-2.5.3 + D:/wxWidgets-2.5.3 + C:/wxWidgets-2.5.2 + D:/wxWidgets-2.5.2 + C:/wxWidgets-2.5.1 + D:/wxWidgets-2.5.1 + DOC "wxWidgets base/installation directory?" + ) + + # If wxWidgets_ROOT_DIR changed, clear all libraries and lib dir. + IF(NOT WX_ROOT_DIR STREQUAL wxWidgets_ROOT_DIR) + SET(WX_ROOT_DIR ${wxWidgets_ROOT_DIR} CACHE INTERNAL "wxWidgets_ROOT_DIR") + # WX_CLEAR_ALL_DBG_LIBS() + # WX_CLEAR_ALL_REL_LIBS() + SET(wxWidgets_LIB_DIR "wxWidgets_LIB_DIR-NOTFOUND" CACHE PATH "Cleared." FORCE) + ENDIF(NOT WX_ROOT_DIR STREQUAL wxWidgets_ROOT_DIR) + + IF(WX_ROOT_DIR) + + # select one default tree inside the already determined wx tree + # prefer static/shared order usually consistent with build settings + IF(BUILD_SHARED_LIBS) + FIND_PATH(wxWidgets_LIB_DIR + NAMES wxpng.lib wxpngd.lib + PATHS + ${WX_ROOT_DIR}/lib/vc_dll # prefer shared + ${WX_ROOT_DIR}/lib/vc_lib + DOC "Path to wxWidgets libraries?" + NO_DEFAULT_PATH + ) + ELSE(BUILD_SHARED_LIBS) + FIND_PATH(wxWidgets_LIB_DIR + NAMES wxpng.lib wxpngd.lib + PATHS + ${WX_ROOT_DIR}/lib/vc_lib # prefer static + ${WX_ROOT_DIR}/lib/vc_dll + DOC "Path to wxWidgets libraries?" + NO_DEFAULT_PATH + ) + ENDIF(BUILD_SHARED_LIBS) + + # If wxWidgets_LIB_DIR changed, clear all libraries. + IF(NOT WX_LIB_DIR STREQUAL wxWidgets_LIB_DIR) + SET(WX_LIB_DIR ${wxWidgets_LIB_DIR} CACHE INTERNAL "wxWidgets_LIB_DIR") + WX_CLEAR_ALL_DBG_LIBS() + WX_CLEAR_ALL_REL_LIBS() + ENDIF(NOT WX_LIB_DIR STREQUAL wxWidgets_LIB_DIR) + + IF(WX_LIB_DIR) + SET(wxWidgets_FOUND TRUE) + + IF(WX_LIB_DIR MATCHES ".*[dD][lL][lL].*") + DBG_MSG("detected SHARED/DLL tree WX_LIB_DIR=${WX_LIB_DIR}") + # add define for correct dllimport to link against WX DLL + SET(wxWidgets_DEFINITIONS "-DWXUSINGDLL") + ENDIF(WX_LIB_DIR MATCHES ".*[dD][lL][lL].*") + + #--------------------------------------------------------------------- + # WIN32: ??? + #--------------------------------------------------------------------- + # Search for possible configuration type availabilities + # ***** SET(WX_LAST_CFG "") + FOREACH(CFG mswunivud mswunivd mswud mswd mswunivu mswuniv mswu msw) + SET(WX_${CFG}_FOUND FALSE) + IF(EXISTS ${WX_LIB_DIR}/${CFG}) + SET(WX_CONFIGURATION_LIST ${WX_CONFIGURATION_LIST} ${CFG}) + SET(WX_${CFG}_FOUND TRUE) + SET(WX_CONFIGURATION ${CFG}) + ENDIF(EXISTS ${WX_LIB_DIR}/${CFG}) + ENDFOREACH(CFG) + + # ***** SET(WX_USE_REL_AND_DBG FALSE) + IF(WX_CONFIGURATION) + # if selected configuration wasn't found, force the default one + # else, use it but still force a refresh for the list in doc string + IF(NOT WX_${wxWidgets_CONFIGURATION}_FOUND) + SET(wxWidgets_CONFIGURATION ${WX_CONFIGURATION} CACHE STRING + "Set wxWidgets configuration (${WX_CONFIGURATION_LIST})" FORCE) + ELSE(NOT WX_${wxWidgets_CONFIGURATION}_FOUND) + SET(wxWidgets_CONFIGURATION ${wxWidgets_CONFIGURATION} CACHE STRING + "Set wxWidgets configuration (${WX_CONFIGURATION_LIST})" FORCE) + ENDIF(NOT WX_${wxWidgets_CONFIGURATION}_FOUND) + + # if release config was selected, and both release/debug exist + IF(WX_${wxWidgets_CONFIGURATION}d_FOUND) + OPTION(wxWidgets_USE_REL_AND_DBG + "Use release and debug configurations?" TRUE) + SET(WX_USE_REL_AND_DBG ${wxWidgets_USE_REL_AND_DBG}) + ELSE(WX_${wxWidgets_CONFIGURATION}d_FOUND) + # if the option exists, force it to false + IF(wxWidgets_USE_REL_AND_DBG) + SET(wxWidgets_USE_REL_AND_DBG FALSE CACHE BOOL + "No ${wxWidgets_CONFIGURATION}d found." FORCE) + ENDIF(wxWidgets_USE_REL_AND_DBG) + SET(WX_USE_REL_AND_DBG FALSE) + ENDIF(WX_${wxWidgets_CONFIGURATION}d_FOUND) + + # Get configuration parameters from the name. + WX_GET_NAME_COMPONENTS(${wxWidgets_CONFIGURATION} UNV UCD DBG) + + # Set wxWidgets main include directory. + IF(EXISTS ${WX_ROOT_DIR}/include/wx/wx.h) + SET(wxWidgets_INCLUDE_DIRS ${WX_ROOT_DIR}/include) + ELSE(EXISTS ${WX_ROOT_DIR}/include/wx/wx.h) + DBG_MSG("WXWIDGET_FOUND FALSE because WX_ROOT_DIR=${WX_ROOT_DIR} has no ${WX_ROOT_DIR}/include/wx/wx.h") + SET(wxWidgets_FOUND FALSE) + ENDIF(EXISTS ${WX_ROOT_DIR}/include/wx/wx.h) + + # Set wxWidgets lib setup include directory. + IF(EXISTS ${WX_LIB_DIR}/${wxWidgets_CONFIGURATION}/wx/setup.h) + SET(wxWidgets_INCLUDE_DIRS ${wxWidgets_INCLUDE_DIRS} + ${WX_LIB_DIR}/${wxWidgets_CONFIGURATION}) + ELSE(EXISTS ${WX_LIB_DIR}/${wxWidgets_CONFIGURATION}/wx/setup.h) + DBG_MSG("WXWIDGET_FOUND FALSE because ${WX_LIB_DIR}/${wxWidgets_CONFIGURATION}/wx/setup.h does not exists.") + SET(wxWidgets_FOUND FALSE) + ENDIF(EXISTS ${WX_LIB_DIR}/${wxWidgets_CONFIGURATION}/wx/setup.h) + #FIND_PATH(WX_SETUP_INCLUDE_DIR wx/setup.h + # ${WX_LIB_DIR}/${wxWidgets_CONFIGURATION}) + #MARK_AS_ADVANCED(WX_SETUP_INCLUDE_DIR) + + # Find wxWidgets libraries. + WX_FIND_LIBS("${UNV}" "${UCD}" "${DBG}") + IF(WX_USE_REL_AND_DBG) + WX_FIND_LIBS("${UNV}" "${UCD}" "d") + ENDIF(WX_USE_REL_AND_DBG) + + # we support adding components by _USE_LIBS or REQUIRED _COMPONENTS + IF (wxWidgets_FIND_COMPONENTS) + LIST(APPEND wxWidgets_USE_LIBS ${wxWidgets_FIND_COMPONENTS}) + ENDIF(wxWidgets_FIND_COMPONENTS) + + + + # Libraries we are interested in. + IF(NOT wxWidgets_USE_LIBS) + # Default minimal use setting (i.e., link to only core,base). + SET(wxWidgets_USE_LIBS ${wxWidgets_STD_LIBRARIES} ) + ENDIF(NOT wxWidgets_USE_LIBS) + + IF (wxWidgets_USE_LIBS MATCHES std) + # replace std by the list of STD libs + LIST(APPEND wxWidgets_USE_LIBS ${wxWidgets_STD_LIBRARIES} ) + LIST(REMOVE_ITEM wxWidgets_USE_LIBS std) + # TODO: check that "mono" and base,core aren't added together + ENDIF (wxWidgets_USE_LIBS MATCHES std) + + # Always add the common required libs. + LIST(APPEND wxWidgets_USE_LIBS ${wxWidgets_COMMON_LIBRARIES} ) + + # Settings for requested libs (i.e., include dir, libraries, etc.). + WX_SET_LIBRARIES(wxWidgets_USE_LIBS "${DBG}") + + ENDIF(WX_CONFIGURATION) + ENDIF(WX_LIB_DIR) + ENDIF(WX_ROOT_DIR) + + + #===================================================================== + #===================================================================== +ELSE(WIN32_STYLE_FIND) + IF(UNIX_STYLE_FIND) + + FIND_PROGRAM(wxWidgets_CONFIG_EXECUTABLE wx-config) + IF(wxWidgets_CONFIG_EXECUTABLE) + SET(wxWidgets_FOUND TRUE) + + # run the wx-config program to get cxxflags + EXEC_PROGRAM(${wxWidgets_CONFIG_EXECUTABLE} + ARGS "--cxxflags" + OUTPUT_VARIABLE wxWidgets_CXX_FLAGS + RETURN_VALUE RET) + IF(RET EQUAL 0) + # parse definitions from cxxflags + STRING(REGEX MATCHALL "-D.*[^ ;]+" wxWidgets_DEFINITIONS ${wxWidgets_CXX_FLAGS}) + DBG_MSG("\nwxWidgets_DEFINITIONS=${wxWidgets_DEFINITIONS}") + # drop -D* from CXXFLAGS + STRING(REGEX REPLACE "-D[^ ;]*" "" wxWidgets_CXX_FLAGS ${wxWidgets_CXX_FLAGS}) + + # parse incdirs from cxxflags, drop -I prefix + STRING(REGEX MATCHALL "-I.*[^ ;]+" wxWidgets_INCLUDE_DIRS ${wxWidgets_CXX_FLAGS}) + STRING(REGEX REPLACE "-I" "" wxWidgets_INCLUDE_DIRS "${wxWidgets_INCLUDE_DIRS}") + # convert space to semicolons for list + STRING(REGEX REPLACE " " ";" wxWidgets_INCLUDE_DIRS "${wxWidgets_INCLUDE_DIRS}") + + # drop -I* from CXXFLAGS - postponed until -isystem is available to INCLUDE_DIRECTORIES to avoid pedantic warnings + #STRING(REGEX REPLACE "-I[^ ;]*" "" wxWidgets_CXX_FLAGS ${wxWidgets_CXX_FLAGS}) + + IF (HAVE_ISYSTEM) # does the compiler support -isystem ? + IF (NOT APPLE) # -isystem seem unsuppored on Mac + IF(CMAKE_COMPILER_IS_GNUCC AND CMAKE_COMPILER_IS_GNUCXX ) + IF (CMAKE_CXX_COMPILER MATCHES g\\+\\+) # just to be sure + # handle WX include dirs as system directories - ignores pedantic warnings with gcc + # replace -I by -isystem + STRING(REGEX REPLACE "-I" "-isystem" wxWidgets_CXX_FLAGS ${wxWidgets_CXX_FLAGS}) + ENDIF(CMAKE_CXX_COMPILER MATCHES g\\+\\+) + ENDIF(CMAKE_COMPILER_IS_GNUCC AND CMAKE_COMPILER_IS_GNUCXX ) + ENDIF(NOT APPLE) + ENDIF(HAVE_ISYSTEM) + + ELSE(RET EQUAL 0) + DBG_MSG("${wxWidgets_CONFIG_EXECUTABLE} --cxxflags FAILED with RET=${RET}") + SET(wxWidgets_FOUND FALSE) + ENDIF(RET EQUAL 0) + + + # run the wx-config program to get the libs + # - NOTE: wx-config doesn't verify that the libs requested exist + # it just produces the names. Maybe a TRY_COMPILE would + # be useful here... + #STRING(REPLACE ";" "," wxWidgets_USE_LIBS "${wxWidgets_USE_LIBS}") + STRING(REGEX REPLACE ";" "," wxWidgets_USE_LIBS "${wxWidgets_USE_LIBS}") + EXEC_PROGRAM(${wxWidgets_CONFIG_EXECUTABLE} + ARGS "--libs ${wxWidgets_USE_LIBS}" + OUTPUT_VARIABLE wxWidgets_LIBRARIES + RETURN_VALUE RET) + IF(RET EQUAL 0) + STRING(REGEX REPLACE " " ";" wxWidgets_LIBRARIES "${wxWidgets_LIBRARIES}") + STRING(REGEX REPLACE "-framework;" "-framework " + wxWidgets_LIBRARIES + "${wxWidgets_LIBRARIES}") + + # extract linkdirs (-L) for rpath (i.e., LINK_DIRECTORIES) + STRING(REGEX MATCHALL "-L[^ ;]+" + wxWidgets_LIBRARY_DIRS + "${wxWidgets_LIBRARIES}") + STRING(REGEX REPLACE "-L" "" + wxWidgets_LIBRARY_DIRS "${wxWidgets_LIBRARY_DIRS}") + + # convert space to semicolons for list + STRING(REGEX REPLACE " " ";" wxWidgets_LIBRARY_DIRS "${wxWidgets_LIBRARY_DIRS}") + ELSE(RET EQUAL 0) + SET(wxWidgets_FOUND FALSE) + ENDIF(RET EQUAL 0) + ENDIF(wxWidgets_CONFIG_EXECUTABLE) + + ELSE(UNIX_STYLE_FIND) + IF(NOT wxWidgets_FIND_QUIETLY) + MESSAGE(STATUS "${CMAKE_CURRENT_LIST_FILE}(${CMAKE_CURRENT_LIST_LINE}): \n" + " Platform unknown/unsupported. It's neither WIN32 nor UNIX style find.") + ENDIF(NOT wxWidgets_FIND_QUIETLY) + ENDIF(UNIX_STYLE_FIND) +ENDIF(WIN32_STYLE_FIND) + + +# add convenience use file +IF (wxWidgets_FOUND) + # get dir of this file which may reside in + # - CMAKE_MAKE_ROOT/Modules on CMake installation + # - CMAKE_MODULE_PATH if user prefers his own specialized version + GET_FILENAME_COMPONENT(wxWidgets_CURRENT_LIST_DIR ${CMAKE_CURRENT_LIST_FILE} PATH) + SET(wxWidgets_USE_FILE "${wxWidgets_CURRENT_LIST_DIR}/UsewxWidgets.cmake") + # check + IF (NOT EXISTS ${wxWidgets_USE_FILE}) + IF (NOT wxWidgets_FIND_QUIETLY) + MESSAGE(SEND_ERROR "Your Find/Use wxWidgets installation is wrong. wxWidgets_USE_FILE=${wxWidgets_USE_FILE} not found.") + ENDIF(NOT wxWidgets_FIND_QUIETLY) + ENDIF(NOT EXISTS ${wxWidgets_USE_FILE}) +ENDIF(wxWidgets_FOUND) + +DBG_MSG("wxWidgets_FOUND : ${wxWidgets_FOUND}") +DBG_MSG("wxWidgets_INCLUDE_DIRS : ${wxWidgets_INCLUDE_DIRS}") +DBG_MSG("wxWidgets_LIBRARY_DIRS : ${wxWidgets_LIBRARY_DIRS}") +DBG_MSG("wxWidgets_CXX_FLAGS : ${wxWidgets_CXX_FLAGS}") +DBG_MSG("wxWidgets_USE_FILE : ${wxWidgets_USE_FILE}") +DBG_MSG("wxWidgets_FIND_COMPONENTS : ${wxWidgets_FIND_COMPONENTS}") +DBG_MSG("wxWidgets_USE_LIBS : ${wxWidgets_USE_LIBS}") + +#===================================================================== +#===================================================================== +IF(NOT wxWidgets_FOUND) + # make FIND_PACKAGE friendly + IF(NOT wxWidgets_FIND_QUIETLY) + IF(wxWidgets_FIND_REQUIRED) + MESSAGE(FATAL_ERROR + "wxWidgets required, please specify it's location.") + ELSE(wxWidgets_FIND_REQUIRED) + MESSAGE(STATUS "ERROR: wxWidgets was not found.") + ENDIF(wxWidgets_FIND_REQUIRED) + ENDIF(NOT wxWidgets_FIND_QUIETLY) +ENDIF(NOT wxWidgets_FOUND) diff --git a/Modules/FindwxWindows.cmake b/Modules/FindwxWindows.cmake index f5f3065..4614e22 100644 --- a/Modules/FindwxWindows.cmake +++ b/Modules/FindwxWindows.cmake @@ -1,54 +1,59 @@ -# - Find wxWindows (wxWidgets) installation -# This module finds if wxWindows/wxWidgets is installed and determines where +# - Find wxWindows (wxWidgets) installation +# This module finds if wxWindows/wxWidgets 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 +# the library is. +# Please note this file is DEPRECATED and replaced by FindwxWidgets.cmake. +# This code sets the following variables: +# +# WXWINDOWS_FOUND = system has WxWindows # WXWINDOWS_LIBRARIES = path to the wxWindows libraries -# on Unix/Linux with additional -# linker flags from +# on Unix/Linux with additional +# linker flags from # "wx-config --libs" -# CMAKE_WXWINDOWS_CXX_FLAGS = Compiler flags for wxWindows, +# CMAKE_WXWINDOWS_CXX_FLAGS = Compiler flags for wxWindows, # essentially "`wx-config --cxxflags`" # on Linux # WXWINDOWS_INCLUDE_DIR = where to find "wx/wx.h" and "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 # -# OPTIONS -# If you need OpenGL support please -# SET(WXWINDOWS_USE_GL 1) +# OPTIONS +# If you need OpenGL support please +# SET(WXWINDOWS_USE_GL 1) # in your CMakeLists.txt *before* you include this file. -# +# +# HAVE_ISYSTEM - true required to replace -I by -isystem on g++ +# # For convenience include Use_wxWindows.cmake in your project's -# CMakeLists.txt using INCLUDE(Use_wxWindows). -# -# USAGE -# SET(WXWINDOWS_USE_GL 1) +# CMakeLists.txt using INCLUDE(Use_wxWindows). +# +# USAGE +# SET(WXWINDOWS_USE_GL 1) # FIND_PACKAGE(wxWindows) -# +# # NOTES -# wxWidgets 2.6.x is supported for monolithic builds -# e.g. compiled in wx/build/msw dir as: +# wxWidgets 2.6.x is supported for monolithic builds +# e.g. compiled in wx/build/msw dir as: # nmake -f makefile.vc BUILD=debug SHARED=0 USE_OPENGL=1 MONOLITHIC=1 # +# DEPRECATED +# +# CMAKE_WX_CAN_COMPILE +# WXWINDOWS_LIBRARY +# CMAKE_WX_CXX_FLAGS +# WXWINDOWS_INCLUDE_PATH +# # AUTHOR # Jan Woetzel (07/2003-01/2006) # ------------------------------------------------------------------ -# +# # -removed OPTION for CMAKE_WXWINDOWS_USE_GL. Force the developer to SET it before calling this. # -major update for wx 2.6.2 and monolithic build option. (10/2005) # -# STATUS +# 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 @@ -87,19 +92,19 @@ IF(WIN32_STYLE_FIND) ## 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 $ENV{WXWIN} "[HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Uninstall\\wxWidgets_is1;Inno Setup: App Path]" ## WX 2.6.x "[HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Uninstall\\wxWindows_is1;Inno Setup: App Path]" ## WX 2.4.x - C:\\wxWidgets-2.6.2 - D:\\wxWidgets-2.6.2 - C:\\wxWidgets-2.6.1 - D:\\wxWidgets-2.6.1 - C:\\wxWindows-2.4.2 - D:\\wxWindows-2.4.2 + C:\\wxWidgets-2.6.2 + D:\\wxWidgets-2.6.2 + C:\\wxWidgets-2.6.1 + D:\\wxWidgets-2.6.1 + C:\\wxWindows-2.4.2 + D:\\wxWindows-2.4.2 ) - + ## WX supports monolithic and multiple smaller libs (since 2.5.x), we prefer monolithic for now. ## monolithic = WX is built as a single big library ## e.g. compile on WIN32 as "nmake -f makefile.vc MONOLITHIC=1 BUILD=debug SHARED=0 USE_OPENGL=1" (JW) @@ -112,49 +117,49 @@ IF(WIN32_STYLE_FIND) ## avoid mixing of headers and libs between multiple installed WX versions, - ## select just one tree here: - FIND_PATH(WXWINDOWS_ROOT_DIR include/wx/wx.h - ${WXWINDOWS_POSSIBLE_ROOT_PATHS} ) + ## select just one tree here: + FIND_PATH(WXWINDOWS_ROOT_DIR include/wx/wx.h + ${WXWINDOWS_POSSIBLE_ROOT_PATHS} ) # MESSAGE("DBG found WXWINDOWS_ROOT_DIR: ${WXWINDOWS_ROOT_DIR}") - - + + ## find libs for combination of static/shared with release/debug - ## be careful if you add something here, - ## avoid mixing of headers and libs of different wx versions, - ## there may be multiple WX version s installed. + ## be careful if you add something here, + ## avoid mixing of headers and libs of different wx versions, + ## there may be multiple WX version s installed. SET (WXWINDOWS_POSSIBLE_LIB_PATHS "${WXWINDOWS_ROOT_DIR}/lib" - ) - + ) + ## monolithic? IF (WXWINDOWS_USE_MONOLITHIC) - + FIND_LIBRARY(WXWINDOWS_STATIC_LIBRARY NAMES wx wxmsw wxmsw26 - PATHS + PATHS "${WXWINDOWS_ROOT_DIR}/lib/vc_lib" ${WXWINDOWS_POSSIBLE_LIB_PATHS} - DOC "wxWindows static release build library" ) - + DOC "wxWindows static release build library" ) + FIND_LIBRARY(WXWINDOWS_STATIC_DEBUG_LIBRARY - NAMES wxd wxmswd wxmsw26d - PATHS + NAMES wxd wxmswd wxmsw26d + PATHS "${WXWINDOWS_ROOT_DIR}/lib/vc_lib" - ${WXWINDOWS_POSSIBLE_LIB_PATHS} + ${WXWINDOWS_POSSIBLE_LIB_PATHS} DOC "wxWindows static debug build library" ) - + FIND_LIBRARY(WXWINDOWS_SHARED_LIBRARY - NAMES wxmsw26 wxmsw262 wxmsw24 wxmsw242 wxmsw241 wxmsw240 wx23_2 wx22_9 - PATHS + NAMES wxmsw26 wxmsw262 wxmsw24 wxmsw242 wxmsw241 wxmsw240 wx23_2 wx22_9 + PATHS "${WXWINDOWS_ROOT_DIR}/lib/vc_dll" - ${WXWINDOWS_POSSIBLE_LIB_PATHS} + ${WXWINDOWS_POSSIBLE_LIB_PATHS} DOC "wxWindows shared release build library" ) - + FIND_LIBRARY(WXWINDOWS_SHARED_DEBUG_LIBRARY - NAMES wxmsw26d wxmsw262d wxmsw24d wxmsw241d wxmsw240d wx23_2d wx22_9d - PATHS + NAMES wxmsw26d wxmsw262d wxmsw24d wxmsw241d wxmsw240d wx23_2d wx22_9d + PATHS "${WXWINDOWS_ROOT_DIR}/lib/vc_dll" - ${WXWINDOWS_POSSIBLE_LIB_PATHS} + ${WXWINDOWS_POSSIBLE_LIB_PATHS} DOC "wxWindows shared debug build library " ) @@ -163,124 +168,124 @@ IF(WIN32_STYLE_FIND) ## gl lib is always build separate: ## FIND_LIBRARY(WXWINDOWS_STATIC_LIBRARY_GL - NAMES wx_gl wxmsw_gl wxmsw26_gl - PATHS + NAMES wx_gl wxmsw_gl wxmsw26_gl + PATHS "${WXWINDOWS_ROOT_DIR}/lib/vc_lib" - ${WXWINDOWS_POSSIBLE_LIB_PATHS} + ${WXWINDOWS_POSSIBLE_LIB_PATHS} DOC "wxWindows static release build GL library" ) FIND_LIBRARY(WXWINDOWS_STATIC_DEBUG_LIBRARY_GL - NAMES wxd_gl wxmswd_gl wxmsw26d_gl - PATHS + NAMES wxd_gl wxmswd_gl wxmsw26d_gl + PATHS "${WXWINDOWS_ROOT_DIR}/lib/vc_lib" - ${WXWINDOWS_POSSIBLE_LIB_PATHS} + ${WXWINDOWS_POSSIBLE_LIB_PATHS} DOC "wxWindows static debug build GL library" ) - + FIND_LIBRARY(WXWINDOWS_STATIC_DEBUG_LIBRARY_PNG - NAMES wxpngd - PATHS + NAMES wxpngd + PATHS "${WXWINDOWS_ROOT_DIR}/lib/vc_lib" - ${WXWINDOWS_POSSIBLE_LIB_PATHS} + ${WXWINDOWS_POSSIBLE_LIB_PATHS} DOC "wxWindows static debug png library" ) FIND_LIBRARY(WXWINDOWS_STATIC_LIBRARY_PNG NAMES wxpng - PATHS + PATHS "${WXWINDOWS_ROOT_DIR}/lib/vc_lib" - ${WXWINDOWS_POSSIBLE_LIB_PATHS} + ${WXWINDOWS_POSSIBLE_LIB_PATHS} DOC "wxWindows static png library" ) - + FIND_LIBRARY(WXWINDOWS_STATIC_DEBUG_LIBRARY_TIFF - NAMES wxtiffd - PATHS + NAMES wxtiffd + PATHS "${WXWINDOWS_ROOT_DIR}/lib/vc_lib" - ${WXWINDOWS_POSSIBLE_LIB_PATHS} + ${WXWINDOWS_POSSIBLE_LIB_PATHS} DOC "wxWindows static debug tiff library" ) FIND_LIBRARY(WXWINDOWS_STATIC_LIBRARY_TIFF NAMES wxtiff - PATHS + PATHS "${WXWINDOWS_ROOT_DIR}/lib/vc_lib" - ${WXWINDOWS_POSSIBLE_LIB_PATHS} + ${WXWINDOWS_POSSIBLE_LIB_PATHS} DOC "wxWindows static tiff library" ) - + FIND_LIBRARY(WXWINDOWS_STATIC_DEBUG_LIBRARY_JPEG NAMES wxjpegd wxjpgd - PATHS + PATHS "${WXWINDOWS_ROOT_DIR}/lib/vc_lib" - ${WXWINDOWS_POSSIBLE_LIB_PATHS} + ${WXWINDOWS_POSSIBLE_LIB_PATHS} DOC "wxWindows static debug jpeg library" ) FIND_LIBRARY(WXWINDOWS_STATIC_LIBRARY_JPEG NAMES wxjpeg wxjpg - PATHS + PATHS "${WXWINDOWS_ROOT_DIR}/lib/vc_lib" - ${WXWINDOWS_POSSIBLE_LIB_PATHS} + ${WXWINDOWS_POSSIBLE_LIB_PATHS} DOC "wxWindows static jpeg library" ) - + FIND_LIBRARY(WXWINDOWS_STATIC_DEBUG_LIBRARY_ZLIB NAMES wxzlibd - PATHS + PATHS "${WXWINDOWS_ROOT_DIR}/lib/vc_lib" - ${WXWINDOWS_POSSIBLE_LIB_PATHS} + ${WXWINDOWS_POSSIBLE_LIB_PATHS} DOC "wxWindows static debug zlib library" ) FIND_LIBRARY(WXWINDOWS_STATIC_LIBRARY_ZLIB NAMES wxzlib - PATHS + PATHS "${WXWINDOWS_ROOT_DIR}/lib/vc_lib" - ${WXWINDOWS_POSSIBLE_LIB_PATHS} + ${WXWINDOWS_POSSIBLE_LIB_PATHS} DOC "wxWindows static zib library" ) FIND_LIBRARY(WXWINDOWS_STATIC_DEBUG_LIBRARY_REGEX NAMES wxregexd - PATHS + PATHS "${WXWINDOWS_ROOT_DIR}/lib/vc_lib" - ${WXWINDOWS_POSSIBLE_LIB_PATHS} + ${WXWINDOWS_POSSIBLE_LIB_PATHS} DOC "wxWindows static debug regex library" ) FIND_LIBRARY(WXWINDOWS_STATIC_LIBRARY_REGEX NAMES wxregex - PATHS + PATHS "${WXWINDOWS_ROOT_DIR}/lib/vc_lib" - ${WXWINDOWS_POSSIBLE_LIB_PATHS} + ${WXWINDOWS_POSSIBLE_LIB_PATHS} DOC "wxWindows static regex library" ) - - - + + + ## untested: FIND_LIBRARY(WXWINDOWS_SHARED_LIBRARY_GL - NAMES wx_gl wxmsw_gl wxmsw26_gl - PATHS + NAMES wx_gl wxmsw_gl wxmsw26_gl + PATHS "${WXWINDOWS_ROOT_DIR}/lib/vc_dll" - ${WXWINDOWS_POSSIBLE_LIB_PATHS} + ${WXWINDOWS_POSSIBLE_LIB_PATHS} DOC "wxWindows shared release build GL library" ) FIND_LIBRARY(WXWINDOWS_SHARED_DEBUG_LIBRARY_GL - NAMES wxd_gl wxmswd_gl wxmsw26d_gl - PATHS - "${WXWINDOWS_ROOT_DIR}/lib/vc_dll" - ${WXWINDOWS_POSSIBLE_LIB_PATHS} - DOC "wxWindows shared debug build GL library" ) - - + NAMES wxd_gl wxmswd_gl wxmsw26d_gl + PATHS + "${WXWINDOWS_ROOT_DIR}/lib/vc_dll" + ${WXWINDOWS_POSSIBLE_LIB_PATHS} + DOC "wxWindows shared debug build GL library" ) + + ELSE (WXWINDOWS_USE_MONOLITHIC) ## WX is built as multiple small pieces libraries instead of monolithic - + ## DEPECATED (jw) replaced by more general WXWINDOWS_USE_MONOLITHIC ON/OFF - # OPTION(WXWINDOWS_SEPARATE_LIBS_BUILD "Is wxWindows build with separate libs?" OFF) - + # OPTION(WXWINDOWS_SEPARATE_LIBS_BUILD "Is wxWindows build with separate libs?" OFF) + ## HACK: This is very dirty. ## because the libs of a particular version are explicitly listed ## and NOT searched/verified. - ## TODO: Really search for each lib, then decide for - ## monolithic x debug x shared x GL (=16 combinations) for at least 18 libs - ## --> about 288 combinations + ## TODO: Really search for each lib, then decide for + ## monolithic x debug x shared x GL (=16 combinations) for at least 18 libs + ## --> about 288 combinations ## thus we need a different approach so solve this correctly ... - + MESSAGE(STATUS "Warning: You are trying to use wxWidgets without monolithic build (WXWINDOWS_SEPARATE_LIBS_BUILD). This is a HACK, libraries are not verified! (JW).") - + SET(WXWINDOWS_STATIC_LIBS ${WXWINDOWS_STATIC_LIBS} wxbase26 wxbase26_net @@ -304,7 +309,7 @@ IF(WIN32_STYLE_FIND) rpcrt4 wsock32 ) - ## HACK: feed in to optimized / debug libaries if both were FOUND. + ## HACK: feed in to optimized / debug libaries if both were FOUND. SET(WXWINDOWS_STATIC_DEBUG_LIBS ${WXWINDOWS_STATIC_DEBUG_LIBS} wxbase26d wxbase26d_net @@ -329,29 +334,29 @@ IF(WIN32_STYLE_FIND) wsock32 ) ENDIF (WXWINDOWS_USE_MONOLITHIC) - - + + ## ## now we should have found all WX libs available on the system. ## let the user decide which of the available onse to use. - ## - + ## + ## if there is at least one shared lib available - ## let user choose wether to use shared or static wxwindows libs + ## 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 "Use shared versions (dll) of wxWindows libraries?" OFF) MARK_AS_ADVANCED(WXWINDOWS_USE_SHARED_LIBS) - ENDIF(WXWINDOWS_SHARED_LIBRARY OR WXWINDOWS_SHARED_DEBUG_LIBRARY) - + ENDIF(WXWINDOWS_SHARED_LIBRARY OR WXWINDOWS_SHARED_DEBUG_LIBRARY) + ## add system libraries wxwindows always seems to depend on SET(WXWINDOWS_LIBRARIES ${WXWINDOWS_LIBRARIES} comctl32 rpcrt4 wsock32 - ) - + ) + IF (NOT WXWINDOWS_USE_SHARED_LIBS) SET(WXWINDOWS_LIBRARIES ${WXWINDOWS_LIBRARIES} ## these ones dont seem required, in particular ctl3d32 is not neccesary (Jan Woetzel 07/2003) @@ -364,34 +369,34 @@ IF(WIN32_STYLE_FIND) ) ENDIF (NOT WXWINDOWS_USE_SHARED_LIBS) - ## opengl/glu: TODO/FIXME: better use FindOpenGL.cmake here + ## opengl/glu: TODO/FIXME: better use FindOpenGL.cmake here ## assume release versions of glu an dopengl, here. IF (WXWINDOWS_USE_GL) SET(WXWINDOWS_LIBRARIES ${WXWINDOWS_LIBRARIES} opengl32 glu32 ) 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.") ## assume that both builds use the same setup(.h) for simplicity - + ## shared: both wx (debug and release) found? ## assume that both builds use the same setup(.h) for simplicity IF(WXWINDOWS_SHARED_DEBUG_LIBRARY AND WXWINDOWS_SHARED_LIBRARY) ##MESSAGE("DBG wx shared: debug and optimized found.") FIND_PATH(WXWINDOWS_INCLUDE_DIR_SETUPH wx/setup.h ${WXWINDOWS_ROOT_DIR}/lib/mswdlld - ${WXWINDOWS_ROOT_DIR}/lib/mswdll + ${WXWINDOWS_ROOT_DIR}/lib/mswdll ${WXWINDOWS_ROOT_DIR}/lib/vc_dll/mswd ${WXWINDOWS_ROOT_DIR}/lib/vc_dll/msw ) SET(WXWINDOWS_LIBRARIES ${WXWINDOWS_LIBRARIES} @@ -403,29 +408,29 @@ IF(WIN32_STYLE_FIND) optimized ${WXWINDOWS_SHARED_LIBRARY_GL} ) ENDIF (WXWINDOWS_USE_GL) 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.") FIND_PATH(WXWINDOWS_INCLUDE_DIR_SETUPH wx/setup.h - ${WXWINDOWS_ROOT_DIR}/lib/mswdlld - ${WXWINDOWS_ROOT_DIR}/lib/vc_dll/mswd ) + ${WXWINDOWS_ROOT_DIR}/lib/mswdlld + ${WXWINDOWS_ROOT_DIR}/lib/vc_dll/mswd ) SET(WXWINDOWS_LIBRARIES ${WXWINDOWS_LIBRARIES} ${WXWINDOWS_SHARED_DEBUG_LIBRARY} ) - IF (WXWINDOWS_USE_GL) + IF (WXWINDOWS_USE_GL) SET(WXWINDOWS_LIBRARIES ${WXWINDOWS_LIBRARIES} ${WXWINDOWS_SHARED_DEBUG_LIBRARY_GL} ) ENDIF (WXWINDOWS_USE_GL) 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.") FIND_PATH(WXWINDOWS_INCLUDE_DIR_SETUPH wx/setup.h - ${WXWINDOWS_ROOT_DIR}/lib/mswdll + ${WXWINDOWS_ROOT_DIR}/lib/mswdll ${WXWINDOWS_ROOT_DIR}/lib/vc_dll/msw ) SET(WXWINDOWS_LIBRARIES ${WXWINDOWS_LIBRARIES} ${WXWINDOWS_SHARED_DEBUG_LIBRARY} ) @@ -433,13 +438,13 @@ IF(WIN32_STYLE_FIND) SET(WXWINDOWS_LIBRARIES ${WXWINDOWS_LIBRARIES} ${WXWINDOWS_SHARED_DEBUG_LIBRARY_GL} ) ENDIF (WXWINDOWS_USE_GL) - ENDIF(WXWINDOWS_SHARED_LIBRARY) + 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(STATUS + MESSAGE(STATUS "No shared wxWindows lib found, but WXWINDOWS_USE_SHARED_LIBS=${WXWINDOWS_USE_SHARED_LIBS}.") ENDIF(NOT WXWINDOWS_SHARED_LIBRARY) ENDIF(NOT WXWINDOWS_SHARED_DEBUG_LIBRARY) @@ -448,15 +453,15 @@ IF(WIN32_STYLE_FIND) ELSE(WXWINDOWS_USE_SHARED_LIBS) ##jw: DEPRECATED IF(NOT WXWINDOWS_SEPARATE_LIBS_BUILD) - + ## static: both wx (debug and release) found? ## assume that both builds use the same setup(.h) for simplicity IF(WXWINDOWS_STATIC_DEBUG_LIBRARY AND WXWINDOWS_STATIC_LIBRARY) ##MESSAGE("DBG wx static: debug and optimized found.") FIND_PATH(WXWINDOWS_INCLUDE_DIR_SETUPH wx/setup.h ${WXWINDOWS_ROOT_DIR}/lib/mswd - ${WXWINDOWS_ROOT_DIR}/lib/msw - ${WXWINDOWS_ROOT_DIR}/lib/vc_lib/mswd + ${WXWINDOWS_ROOT_DIR}/lib/msw + ${WXWINDOWS_ROOT_DIR}/lib/vc_lib/mswd ${WXWINDOWS_ROOT_DIR}/lib/vc_lib/msw ) SET(WXWINDOWS_LIBRARIES ${WXWINDOWS_LIBRARIES} debug ${WXWINDOWS_STATIC_DEBUG_LIBRARY} @@ -465,77 +470,77 @@ IF(WIN32_STYLE_FIND) SET(WXWINDOWS_LIBRARIES ${WXWINDOWS_LIBRARIES} debug ${WXWINDOWS_STATIC_DEBUG_LIBRARY_GL} optimized ${WXWINDOWS_STATIC_LIBRARY_GL} ) - ENDIF (WXWINDOWS_USE_GL) + ENDIF (WXWINDOWS_USE_GL) 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.") FIND_PATH(WXWINDOWS_INCLUDE_DIR_SETUPH wx/setup.h - ${WXWINDOWS_ROOT_DIR}/lib/mswd + ${WXWINDOWS_ROOT_DIR}/lib/mswd ${WXWINDOWS_ROOT_DIR}/lib/vc_lib/mswd ) SET(WXWINDOWS_LIBRARIES ${WXWINDOWS_LIBRARIES} ${WXWINDOWS_STATIC_DEBUG_LIBRARY} ) - IF (WXWINDOWS_USE_GL) + IF (WXWINDOWS_USE_GL) SET(WXWINDOWS_LIBRARIES ${WXWINDOWS_LIBRARIES} ${WXWINDOWS_STATIC_DEBUG_LIBRARY_GL} ) ENDIF (WXWINDOWS_USE_GL) 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.") FIND_PATH(WXWINDOWS_INCLUDE_DIR_SETUPH wx/setup.h - ${WXWINDOWS_ROOT_DIR}/lib/msw - ${WXWINDOWS_ROOT_DIR}/lib/vc_lib/msw ) + ${WXWINDOWS_ROOT_DIR}/lib/msw + ${WXWINDOWS_ROOT_DIR}/lib/vc_lib/msw ) SET(WXWINDOWS_LIBRARIES ${WXWINDOWS_LIBRARIES} ${WXWINDOWS_STATIC_LIBRARY} ) - IF (WXWINDOWS_USE_GL) + IF (WXWINDOWS_USE_GL) SET(WXWINDOWS_LIBRARIES ${WXWINDOWS_LIBRARIES} ${WXWINDOWS_STATIC_LIBRARY_GL} ) - ENDIF (WXWINDOWS_USE_GL) + ENDIF (WXWINDOWS_USE_GL) ENDIF(WXWINDOWS_STATIC_LIBRARY) ENDIF(NOT WXWINDOWS_STATIC_DEBUG_LIBRARY) - + ## static: none found? IF(NOT WXWINDOWS_STATIC_DEBUG_LIBRARY AND NOT WXWINDOWS_SEPARATE_LIBS_BUILD) IF(NOT WXWINDOWS_STATIC_LIBRARY) - MESSAGE(STATUS + MESSAGE(STATUS "No static wxWindows lib found, but WXWINDOWS_USE_SHARED_LIBS=${WXWINDOWS_USE_SHARED_LIBS}.") ENDIF(NOT WXWINDOWS_STATIC_LIBRARY) - ENDIF(NOT WXWINDOWS_STATIC_DEBUG_LIBRARY AND NOT WXWINDOWS_SEPARATE_LIBS_BUILD) - ENDIF(WXWINDOWS_USE_SHARED_LIBS) - - + ENDIF(NOT WXWINDOWS_STATIC_DEBUG_LIBRARY AND NOT WXWINDOWS_SEPARATE_LIBS_BUILD) + ENDIF(WXWINDOWS_USE_SHARED_LIBS) + + ## not neccessary in wxWindows 2.4.1 and 2.6.2 ## 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) + IF (WXWINDOWS_SET_DEFINITIONS) SET(WXWINDOWS_DEFINITIONS "-DWINVER=0x400") - ELSE (WXWINDOWS_SET_DEFINITIONS) + ELSE (WXWINDOWS_SET_DEFINITIONS) # clear: SET(WXWINDOWS_DEFINITIONS "") - ENDIF (WXWINDOWS_SET_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" - FIND_PATH(WXWINDOWS_INCLUDE_DIR wx/wx.h - "${WXWINDOWS_ROOT_DIR}/include" ) + FIND_PATH(WXWINDOWS_INCLUDE_DIR wx/wx.h + "${WXWINDOWS_ROOT_DIR}/include" ) ## 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( WXWINDOWS_ROOT_DIR WXWINDOWS_INCLUDE_DIR @@ -557,28 +562,28 @@ IF(WIN32_STYLE_FIND) WXWINDOWS_SHARED_LIBRARY WXWINDOWS_SHARED_DEBUG_LIBRARY WXWINDOWS_SHARED_LIBRARY_GL - WXWINDOWS_SHARED_DEBUG_LIBRARY_GL + WXWINDOWS_SHARED_DEBUG_LIBRARY_GL ) - - + + ELSE(WIN32_STYLE_FIND) - IF (UNIX_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. + # 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) - + # --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 @@ -586,76 +591,86 @@ ELSE(WIN32_STYLE_FIND) $ENV{WXWIN}/bin ../wx/bin ../../wx/bin ) - + # check wether wx-config was found: - IF(CMAKE_WXWINDOWS_WXCONFIG_EXECUTABLE) + 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) + # 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|sed -e s/-I/-isystem/g`") + IF (HAVE_ISYSTEM) # does the compiler support -isystem ? + IF (NOT APPLE) # -isystem seem sto be unsuppored on Mac + IF(CMAKE_COMPILER_IS_GNUCC AND CMAKE_COMPILER_IS_GNUCXX ) + IF (CMAKE_CXX_COMPILER MATCHES g\\+\\+) + SET(CMAKE_WXWINDOWS_CXX_FLAGS "`${CMAKE_WXWINDOWS_WXCONFIG_EXECUTABLE} --cxxflags|sed -e s/-I/-isystem/g`") + ELSE(CMAKE_CXX_COMPILER MATCHES g\\+\\+) + SET(CMAKE_WXWINDOWS_CXX_FLAGS "`${CMAKE_WXWINDOWS_WXCONFIG_EXECUTABLE} --cxxflags`") + ENDIF(CMAKE_CXX_COMPILER MATCHES g\\+\\+) + ENDIF(CMAKE_COMPILER_IS_GNUCC AND CMAKE_COMPILER_IS_GNUCXX ) + ENDIF (NOT APPLE) + ENDIF (HAVE_ISYSTEM) ##MESSAGE("DBG: for compilation: - ##CMAKE_WXWINDOWS_CXX_FLAGS=${CMAKE_WXWINDOWS_CXX_FLAGS}===") + ##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}===") - + ##WXWINDOWS_LIBRARIES=${WXWINDOWS_LIBRARIES}===") + # evaluate wx-config output to separate linker flags and linkdirs for # rpath: EXEC_PROGRAM(${CMAKE_WXWINDOWS_WXCONFIG_EXECUTABLE} ARGS ${WX_CONFIG_ARGS_LIBS} OUTPUT_VARIABLE WX_CONFIG_LIBS ) - + ## extract linkdirs (-L) for rpath ## use regular expression to match wildcard equivalent "-L*" ## with 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?) + ## 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( CMAKE_WXWINDOWS_CXX_FLAGS WXWINDOWS_INCLUDE_DIR WXWINDOWS_LIBRARIES CMAKE_WXWINDOWS_WXCONFIG_EXECUTABLE ) - - + + ## we really need wx-config... - ELSE(CMAKE_WXWINDOWS_WXCONFIG_EXECUTABLE) + ELSE(CMAKE_WXWINDOWS_WXCONFIG_EXECUTABLE) MESSAGE(STATUS "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(STATUS "FindwxWindows.cmake: Platform unknown/unsupported by FindwxWindows.cmake. It's neither WIN32 nor UNIX") ENDIF(UNIX_STYLE_FIND) @@ -666,13 +681,13 @@ 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 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(WXWINDOWS_LINK_DIRECTORIES ${WXWINDOWS_LINK_DIRECTORIES}) SET(CMAKE_WX_CXX_FLAGS ${CMAKE_WXWINDOWS_CXX_FLAGS}) - + ENDIF(WXWINDOWS_INCLUDE_DIR OR CMAKE_WXWINDOWS_CXX_FLAGS) ENDIF(WXWINDOWS_LIBRARIES) diff --git a/Modules/Use_wxWindows.cmake b/Modules/Use_wxWindows.cmake index 8acd0a1..7d8c438 100644 --- a/Modules/Use_wxWindows.cmake +++ b/Modules/Use_wxWindows.cmake @@ -1,43 +1,50 @@ -# - Find wxWindows installation -# +# # This convenience include finds if wxWindows is installed # and set the appropriate libs, incdirs, flags etc. -# INCLUDE_DIRECTORIES, LINK_DIRECTORIES and ADD_DEFINITIONS -# are called. # author Jan Woetzel (07/2003) -# -# if you are sure you need GL then -# SET(WXWINDOWS_USE_GL 1) -# *before* you include this file. +## +# ----------------------------------------------------- +# USAGE: +# just include Use_wxWindows.cmake +# in your projects CMakeLists.txt +# INCLUDE( ${CMAKE_MODULE_PATH}/Use_wxWindows.cmake) +## +# if you are sure you need GL then +# SET(WXWINDOWS_USE_GL 1) +# *before* you include this file. # +# ----------------------------------------------------- +# 16.Feb.2004: changed INCLUDE to FIND_PACKAGE to read from users own non-system CMAKE_MODULE_PATH (Jan Woetzel JW) +# 07/2006: rewrite as FindwxWidgets.cmake, kept for backward compatibilty JW + +MESSAGE(STATUS "Use_wxWindows.cmake is DEPRECATED. \n" +"Please use FIND_PACKAGE(wxWidgets) and INCLUDE(${wxWidgets_USE_FILE}) instead. (JW)") -INCLUDE(FindwxWindows) +# ------------------------ + +FIND_PACKAGE( wxWindows ) IF(WXWINDOWS_FOUND) - - #MESSAGE("DBG Use_wxWindows.cmake: WXWINDOWS_INCLUDE_DIR=${WXWINDOWS_INCLUDE_DIR} WXWINDOWS_LINK_DIRECTORIES=${WXWINDOWS_LINK_DIRECTORIES} WXWINDOWS_LIBRARIES=${WXWINDOWS_LIBRARIES} CMAKE_WXWINDOWS_CXX_FLAGS=${CMAKE_WXWINDOWS_CXX_FLAGS} WXWINDOWS_DEFINITIONS=${WXWINDOWS_DEFINITIONS}") - - IF(WXWINDOWS_INCLUDE_DIR) + +#MESSAGE("DBG Use_wxWindows.cmake: WXWINDOWS_INCLUDE_DIR=${WXWINDOWS_INCLUDE_DIR} WXWINDOWS_LINK_DIRECTORIES=${WXWINDOWS_LINK_DIRECTORIES} WXWINDOWS_LIBRARIES=${WXWINDOWS_LIBRARIES} CMAKE_WXWINDOWS_CXX_FLAGS=${CMAKE_WXWINDOWS_CXX_FLAGS} WXWINDOWS_DEFINITIONS=${WXWINDOWS_DEFINITIONS}") + + IF(WXWINDOWS_INCLUDE_DIR) INCLUDE_DIRECTORIES(${WXWINDOWS_INCLUDE_DIR}) ENDIF(WXWINDOWS_INCLUDE_DIR) - - IF(WXWINDOWS_LINK_DIRECTORIES) + IF(WXWINDOWS_LINK_DIRECTORIES) LINK_DIRECTORIES(${WXWINDOWS_LINK_DIRECTORIES}) ENDIF(WXWINDOWS_LINK_DIRECTORIES) - IF(WXWINDOWS_LIBRARIES) LINK_LIBRARIES(${WXWINDOWS_LIBRARIES}) ENDIF(WXWINDOWS_LIBRARIES) - IF (CMAKE_WXWINDOWS_CXX_FLAGS) SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${CMAKE_WXWINDOWS_CXX_FLAGS}") ENDIF(CMAKE_WXWINDOWS_CXX_FLAGS) - IF(WXWINDOWS_DEFINITIONS) ADD_DEFINITIONS(${WXWINDOWS_DEFINITIONS}) ENDIF(WXWINDOWS_DEFINITIONS) - ELSE(WXWINDOWS_FOUND) MESSAGE(SEND_ERROR "wxWindows not found by Use_wxWindows.cmake") ENDIF(WXWINDOWS_FOUND) + diff --git a/Modules/UsewxWidgets.cmake b/Modules/UsewxWidgets.cmake index 8c219f1..e901f24 100644 --- a/Modules/UsewxWidgets.cmake +++ b/Modules/UsewxWidgets.cmake @@ -1,4 +1,67 @@ -# - Same as Use_wxWindows +# - Convenience include for using wxWidgets library +# Finds if wxWidgets is installed +# and set the appropriate libs, incdirs, flags etc. +# INCLUDE_DIRECTORIES, LINK_DIRECTORIES and ADD_DEFINITIONS +# are called. # +# USAGE +# SET( wxWidgets_USE_LIBS gl xml xrc ) # optionally: more than wx std libs +# FIND_PACKAGE(wxWidgets REQUIRED) +# INCLUDE( ${xWidgets_USE_FILE} ) +# ... add your targets here, e.g. ADD_EXECUTABLE/ ADD_LIBRARY ... +# TARGET_LINK_LIBRARIERS( ${wxWidgets_LIBRARIES}) +# +# DEPRECATED +# LINK_LIBRARIES is not called in favor of adding dependencies per target. +# +# AUTHOR +# Jan Woetzel + + +# debug message and logging. +# comment these out for distribution +IF (NOT LOGFILE ) + # SET(LOGFILE "${PROJECT_BINARY_DIR}/CMakeOutput.log") +ENDIF (NOT LOGFILE ) +MACRO(MSG _MSG) + # FILE(APPEND ${LOGFILE} "${CMAKE_CURRENT_LIST_FILE}(${CMAKE_CURRENT_LIST_LINE}): ${_MSG}\n") + # MESSAGE(STATUS "${CMAKE_CURRENT_LIST_FILE}(${CMAKE_CURRENT_LIST_LINE}): ${_MSG}") +ENDMACRO(MSG) + + +MSG("wxWidgets_FOUND=${wxWidgets_FOUND}") +IF (wxWidgets_FOUND) + IF (wxWidgets_INCLUDE_DIRS) + INCLUDE_DIRECTORIES( ${wxWidgets_INCLUDE_DIRS} ) + MSG("wxWidgets_INCLUDE_DIRS=${wxWidgets_INCLUDE_DIRS}") + ENDIF(wxWidgets_INCLUDE_DIRS) + + IF (wxWidgets_LIBRARY_DIRS) + LINK_DIRECTORIES(${wxWidgets_LIBRARY_DIRS}) + MSG("wxWidgets_LIBRARY_DIRS=${wxWidgets_LIBRARY_DIRS}") + ENDIF(wxWidgets_LIBRARY_DIRS) + + IF (wxWidgets_DEFINITIONS) + ADD_DEFINITIONS( ${wxWidgets_DEFINITIONS} ) + MSG("wxWidgets_DEFINITIONS=${wxWidgets_DEFINITIONS}") + ENDIF(wxWidgets_DEFINITIONS) + + IF (wxWidgets_CXX_FLAGS) + SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${wxWidgets_CXX_FLAGS}") + MSG("wxWidgets_CXX_FLAGS=${wxWidgets_CXX_FLAGS}") + ENDIF(wxWidgets_CXX_FLAGS) -INCLUDE(Use_wxWindows) + # DEPRECATED JW + # just for backward compatibility: add deps to all targets + # library projects better use advanced FIND_PACKAGE(wxWidgets) directly. + #IF(wxWidgets_LIBRARIES) + # LINK_LIBRARIES(${wxWidgets_LIBRARIES}) + # # BUG: str too long: MSG("wxWidgets_LIBRARIES=${wxWidgets_LIBRARIES}") + # IF(LOGFILE) + # FILE(APPEND ${LOGFILE} "${CMAKE_CURRENT_LIST_FILE}(${CMAKE_CURRENT_LIST_LINE}): ${wxWidgets_LIBRARIES}\n") + # ENDIF(LOGFILE) + #ENDIF(wxWidgets_LIBRARIES) + +ELSE (wxWidgets_FOUND) + MESSAGE("wxWidgets requested but not found.") +ENDIF(wxWidgets_FOUND) diff --git a/Source/CMakeLists.txt b/Source/CMakeLists.txt index 271f5f9..0535fa9 100644 --- a/Source/CMakeLists.txt +++ b/Source/CMakeLists.txt @@ -326,11 +326,11 @@ IF(BUILD_MFCDialog) ENDIF(BUILD_MFCDialog) # WX Widgets GUI -OPTION(CMAKE_BUILD_WX_DIALOG "Build wxWidgets dialog for CMake" FALSE) -MARK_AS_ADVANCED(CMAKE_BUILD_WX_DIALOG) -IF(CMAKE_BUILD_WX_DIALOG) +OPTION(BUILD_WXDialog "Build wxWidgets dialog for CMake" FALSE) +MARK_AS_ADVANCED(BUILD_WXDialog) +IF(BUILD_WXDialog) SUBDIRS(WXDialog) -ENDIF(CMAKE_BUILD_WX_DIALOG) +ENDIF(BUILD_WXDialog) # Testing IF (NOT DART_ROOT) @@ -1076,9 +1076,8 @@ IF(BUILD_TESTING) ENDIF(JAVA_COMPILE AND JAVA_RUNTIME AND JAVA_ARCHIVE AND NOT MINGW) ENDIF(NOT CMAKE_TEST_GENERATOR MATCHES "Xcode") - - IF (CMAKE_WXWINDOWS_WXCONFIG_EXECUTABLE OR WXWINDOWS_INCLUDE_DIR) - # Will be set if the wxwindows gui is on + IF(BUILD_WXDialog AND wxWidgets_CONFIG_EXECUTABLE) + # Will be set if the WX gui is on ADD_TEST(UseWX ${CMAKE_CTEST_COMMAND} --build-and-test "${CMake_SOURCE_DIR}/Tests/UseWX" @@ -1086,11 +1085,11 @@ IF(BUILD_TESTING) --build-generator ${CMAKE_TEST_GENERATOR} --build-makeprogram ${CMAKE_TEST_MAKEPROGRAM} --build-exe-dir ${CMake_BINARY_DIR}/Tests/UseWX - --build-project UsewxWindows - --build-options -DCMAKE_WXWINDOWS_WXCONFIG_EXECUTABLE:FILEPATH=${CMAKE_WXWINDOWS_WXCONFIG_EXECUTABLE} + --build-project UsewxWidgets + --build-options -DwxWidgets_CONFIG_EXECUTABLE=${wxWidgets_CONFIG_EXECUTABLE} --test-command UseWX ) - ENDIF (CMAKE_WXWINDOWS_WXCONFIG_EXECUTABLE OR WXWINDOWS_INCLUDE_DIR) + ENDIF(BUILD_WXDialog AND wxWidgets_CONFIG_EXECUTABLE) IF(UNIX) STRING(COMPARE EQUAL "${CMAKE_INSTALL_PREFIX}" "${CMake_BINARY_DIR}/Tests/TestShellInstall/Prefix" diff --git a/Source/WXDialog/CMakeLists.txt b/Source/WXDialog/CMakeLists.txt index 29b4fae..fc42494 100644 --- a/Source/WXDialog/CMakeLists.txt +++ b/Source/WXDialog/CMakeLists.txt @@ -9,88 +9,79 @@ ## License: wxWidgets License ##--------------------------------------------------------------------------- +# wxWindows -> wxWidgets Jan Woetzel 07/2006 +# tested with wx 2.6.3 with "multilib" build on Windows XP -#wxWidgets build related stuff -SET(WXW_USE_DEBUG OFF) -SET(WXW_USE_UNICODE OFF) -SET(WXW_USE_SHARED OFF) -SET(WXW_USE_UNIV OFF) -SET(WXW_USE_MONO OFF) -SET(WXW_FILE_VERSION "26") -SET(WXW_VERSION "2.6") - -#CMake Options +# CMake Options SET(CMAKE_VERBOSE_MAKEFILE TRUE) -IF(WIN32) - INCLUDE (${CMAKE_SOURCE_DIR}/Source/WXDialog/bin/FindwxW.cmake) -ELSE(WIN32) - INCLUDE (${CMAKE_SOURCE_DIR}/Source/WXDialog/bin/FindwxWin.cmake) - - # sync flags - SET(WXWIDGETS_FOUND ${WXWINDOWS_FOUND}) - SET(WXWIDGETS_INCLUDE_DIR ${WXWINDOWS_INCLUDE_DIR}) - SET(WXWIDGETS_LINK_DIRECTORIES ${WXWINDOWS_LINK_DIRECTORIES}) - SET(WXWIDGETS_LIBRARIES ${WXWINDOWS_LIBRARIES}) -ENDIF(WIN32) +# suppress wx header warnings? +#SET(HAVE_ISYSTEM 1) + +# in addition to wx std libs we need +SET( wxWidgets_USE_LIBS + std + html adv xml xrc ) +FIND_PACKAGE(wxWidgets REQUIRED) +#INCLUDE(${CMAKE_ROOT}/Modules/FindwxWidgets.cmake) -# Old find script +# Start using wx stuff when it is fully found and set +IF(wxWidgets_FOUND) + INCLUDE( ${wxWidgets_USE_FILE} ) -## Start using wx stuff when it is fully found and set -IF(WXWIDGETS_FOUND) + SET (CMAKE_SRCS + CMakeSetupFrame.cpp + CMakeSetup.cpp + CMakeSetupFrame.h + CMakeSetup.h + PropertyList.cpp + PropertyList.h + app_resources.cpp + app_resources.h + progressdlg.cpp + progressdlg.h + aboutdlg.cpp + aboutdlg.h + optionsdlg.cpp + optionsdlg.h + config.h + CommandLineInfo.cpp + CommandLineInfo.h ) + + # include .rc when windows + IF(WIN32) + SET ( CMAKE_SRCS ${CMAKE_SRCS} CMakeSetup.rc ) + ENDIF(WIN32) + + INCLUDE_DIRECTORIES(${CMAKE_SOURCE_DIR}/Source/WXDialog + ${wxWidgets_INCLUDE_DIR} ) + LINK_DIRECTORIES( ${wxWidgets_LINK_DIRECTORIES} + ${CMake_BINARY_DIR}/Source + ${CMake_BINARY_DIR}/Source/kwsys ) + + IF(APPLE) + ADD_EXECUTABLE(WXDialog MACOSX_BUNDLE ${CMAKE_SRCS}) + ELSE(APPLE) + ADD_EXECUTABLE(WXDialog WIN32 ${CMAKE_SRCS}) + ENDIF(APPLE) + INSTALL_TARGETS(/bin WXDialog) + + # not required on MSVS beause bound to _DEBUG, + # but other compiler may need it. + # However, the define prevents multiple build configurations + # in one build tree, + # e.g. MSVS supports Debug;Release + # TODO: shall we add the define or not - + # favor multi config or all compilers? (JW) + SET(CMAKE_CXX_FLAGS_DEBUG + "${CMAKE_CXX_FLAGS_DEBUG} -D__WXDEBUG__ -DWXDEBUG=1") + + IF(LINUX) + ADD_DEFINITIONS( -DLINUX=1 ) + ENDIF(LINUX) + + # if the checkbox view functionality is not desired, + # exclude this part from the smple + TARGET_LINK_LIBRARIES(WXDialog ${wxWidgets_LIBRARIES} cmsys CMakeLib) - SET (CMAKE_SRCS - CMakeSetupFrame.cpp - CMakeSetup.cpp - CMakeSetupFrame.h - CMakeSetup.h - PropertyList.cpp - PropertyList.h - app_resources.cpp - app_resources.h - progressdlg.cpp - progressdlg.h - aboutdlg.cpp - aboutdlg.h - optionsdlg.cpp - optionsdlg.h - config.h - CommandLineInfo.cpp - CommandLineInfo.h ) - - # include .rc when windows - - IF(WIN32) - SET ( CMAKE_SRCS - ${CMAKE_SRCS} - CMakeSetup.rc ) - ENDIF(WIN32) - - INCLUDE_DIRECTORIES(${CMAKE_SOURCE_DIR}/Source/WXDialog - ${WXWIDGETS_INCLUDE_DIR}) - LINK_DIRECTORIES( ${WXWIDGETS_LINK_DIRECTORIES} ${CMake_BINARY_DIR}/Source ${CMake_BINARY_DIR}/Source/kwsys ) - IF(APPLE) - ADD_EXECUTABLE(WXDialog MACOSX_BUNDLE ${CMAKE_SRCS}) - ELSE(APPLE) - ADD_EXECUTABLE(WXDialog WIN32 ${CMAKE_SRCS}) - ENDIF(APPLE) - INSTALL_TARGETS(/bin WXDialog) - SET(CMAKE_CXX_FLAGS "${CMAKE_WX_CXX_FLAGS}") - SET(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -D__WXDEBUG__ -DWXDEBUG=1") - - IF(LINUX) - ADD_DEFINITIONS( -DLINUX=1 ) - ENDIF(LINUX) - - # if the checkbox view functionality is not desired, - # exclude this part from the smple - SET(WXWIDGETS_LIBRARIES ${WXWIDGETS_LIBRARIES}) - TARGET_LINK_LIBRARIES(WXDialog ${WXWIDGETS_LIBRARIES} cmsys CMakeLib) - - # if UPX is found, make a target - - #INCLUDE (${CMAKE_SOURCE_DIR}/Source/WXDialog/bin/FindUPX.cmake) - #IF(UPX_FOUND) - #END(UPX_FOUND) - -ENDIF(WXWIDGETS_FOUND) +ENDIF(wxWidgets_FOUND) diff --git a/Source/WXDialog/bin/FindUPX.cmake b/Source/WXDialog/bin/FindUPX.cmake index 7623841..fc9113d 100644 --- a/Source/WXDialog/bin/FindUPX.cmake +++ b/Source/WXDialog/bin/FindUPX.cmake @@ -5,14 +5,11 @@ # UPX_FOUND Is set to 1 when upx is found FIND_PATH(UPX_PROGRAM_PATH upx.exe - "c:\Program Files\upx" - "d:\Program Files\upx" - "e:\Program Files\upx" - "f:\Program Files\upx" - "g:\Program Files\upx" - "h:\Program Files\upx" + ${UPX_DIR} + $ENV{UPX_DIR} + "$ENV{ProgramFiles}/upx" ) - + # when found, note this as target IF(UPX_PROGRAM_PATH) SET(UPX_FOUND 1) diff --git a/Source/WXDialog/bin/FindwxW.cmake b/Source/WXDialog/bin/FindwxW.cmake index 230bba8..f88eb0e 100644 --- a/Source/WXDialog/bin/FindwxW.cmake +++ b/Source/WXDialog/bin/FindwxW.cmake @@ -1,3 +1,6 @@ + +MESSAGE("${CMAKE_CURRENT_FILE} is deprecated, please use FindwxWidgets.cmake instead.") + # # FindwxW.cmake # v1.01 2005-05-27 @@ -14,6 +17,7 @@ # WXWIDGETS_INCLUDE_DIR = all include path of wxWindows # WXWIDGETS_DEFINITIONS = all flags of wxWindows + # NOTE: This module REQUIRES that an environment variable named WXWIN # be set to the base wxWidgets installation directory. # Under Unix, you must also set and environment variable named WXWINCFG diff --git a/Source/WXDialog/bin/FindwxWin.cmake b/Source/WXDialog/bin/FindwxWin.cmake index 699e7e1..7278dca 100644 --- a/Source/WXDialog/bin/FindwxWin.cmake +++ b/Source/WXDialog/bin/FindwxWin.cmake @@ -1,3 +1,8 @@ + + +MESSAGE("${CMAKE_CURRENT_FILE} is deprecated, please use FindwxWidgets.cmake instead.") + + ##--------------------------------------------------------------------------- ## $RCSfile$ ## $Source$ diff --git a/Source/WXDialog/bin/UsewxW.cmake b/Source/WXDialog/bin/UsewxW.cmake index e550e89..702ab9d 100644 --- a/Source/WXDialog/bin/UsewxW.cmake +++ b/Source/WXDialog/bin/UsewxW.cmake @@ -1,3 +1,7 @@ + +MESSAGE("${CMAKE_CURRENT_FILE} is deprecated, please use FindwxWidgets.cmake instead.") + + # # UsewxW.cmake # v1.0 2005-05-27 diff --git a/Tests/UseWX/CMakeLists.txt b/Tests/UseWX/CMakeLists.txt index 139339a..ac997ff 100644 --- a/Tests/UseWX/CMakeLists.txt +++ b/Tests/UseWX/CMakeLists.txt @@ -1,9 +1,7 @@ -PROJECT (UsewxWindows) +PROJECT (UsewxWidgets) -INCLUDE( ${CMAKE_ROOT}/Modules/Use_wxWindows.cmake) +FIND_PACKAGE(wxWidgets REQUIRED) +INCLUDE( ${wxWidgets_USE_FILE} ) ADD_EXECUTABLE (UseWX WIN32 WX.cxx) - -#TODO: -#- dll linking is not working on WIN32, need to '-DWXUSINGDLL' to preprocessor - +TARGET_LINK_LIBRARIES(UseWX ${wxWidgets_LIBRARIES} ) diff --git a/Tests/UseWX/WX.cxx b/Tests/UseWX/WX.cxx index 69717bb..d463127 100644 --- a/Tests/UseWX/WX.cxx +++ b/Tests/UseWX/WX.cxx @@ -51,9 +51,13 @@ bool MyApp::OnInit() //Testing if link to wx debug library #ifdef __WXDEBUG__ - printf("If you read this you're in debug mode.\n"); + printf("If you read this you're in __WXDEBUG__ debug mode.\n"); #endif //__WXDEBUG__ +#ifdef _DEBUG + printf("If you read this then _DEBUG is defined.\n"); +#endif //_DEBUG + wxChar ch = wxT('*'); wxString s = wxT("Hello, world!"); int len = s.Len(); -- cgit v0.12