Commit ed199670 authored by Wayne Stambaugh's avatar Wayne Stambaugh

Force wxWidgets to version 3.0.0 or later and OSX build fixes.

* Add version detection to FindwxWidgets.cmake
* Convert commands and macro names to lower case in FindwxWidgets.cmake.
* Use find_package_handle_standard_args() to handle version comparison.
* Update FindPackageHandleStandardArgs.cmake from CMake 3.0.2 to get the
  latest bug fixes.
* Add an option to ignore building every OSX dependency from source and
  use find_package() the way it is supposed to work unless the developer
  specifically requests building everything from source.
parent 86042eee
...@@ -35,36 +35,39 @@ set( USE_KIWAY_DLLS true ) # this is now mandatory, the code is the same anyway ...@@ -35,36 +35,39 @@ set( USE_KIWAY_DLLS true ) # this is now mandatory, the code is the same anyway
# have this option turned OFF, the xml export's referential integrity is broken # have this option turned OFF, the xml export's referential integrity is broken
# on library part name. Hence the default is ON now, as of 29-Jan-2014. # on library part name. Hence the default is ON now, as of 29-Jan-2014.
option( KICAD_KEEPCASE option( KICAD_KEEPCASE
"ON= case specific string matching on component names, OFF= match names as if they were spelt using uppercase." "Use case sensitive string matching for component names (default ON)."
ON ON
) )
option( USE_WX_GRAPHICS_CONTEXT option( USE_WX_GRAPHICS_CONTEXT
"Use wxGraphicsContext for rendering ( default OFF). Warning, this is experimental" ) "Use wxGraphicsContext for rendering (default OFF). Warning, this is experimental" )
option( USE_WX_OVERLAY option( USE_WX_OVERLAY
"Use wxOverlay: Always ON for MAC ( default OFF). Warning, this is experimental" ) "Use wxOverlay: Always ON for MAC (default OFF). Warning, this is experimental" )
option( KICAD_SCRIPTING option( KICAD_SCRIPTING
"set this option ON to build the scripting support inside kicad binaries" "Build the Python scripting support inside KiCad binaries (default OFF)."
) )
option( KICAD_SCRIPTING_MODULES option( KICAD_SCRIPTING_MODULES
"set this option ON to build kicad modules that can be used from scripting languages" "Build KiCad Python modules that can be used from scripting languages (default OFF)."
) )
option( KICAD_SCRIPTING_WXPYTHON option( KICAD_SCRIPTING_WXPYTHON
"set this option ON to build wxpython implementation for wx interface building in python and py.shell" "Build wxPython implementation for wx interface building in Python and py.shell (default OFF)."
) )
option( KICAD_BUILD_STATIC option( KICAD_BUILD_STATIC
"Builds Kicad and all libraries static" "Build dependencies as static libraries. OSX only. (default OFF)."
) )
option( KICAD_BUILD_DYNAMIC option( KICAD_BUILD_DYNAMIC
"Builds Kicad and all libraries dynamic (required for wxPython)" "Build dependencies as shared libraries. Required for wxPython support. OXS only. (default OFF)."
) )
option( USE_OSX_DEPS_BUILDER
"Build dependencies from source instead of dependencies installed on system. OSX only. (default OFF)."
)
# WARNING: KiCad developers strongly advise you to build Boost with supplied patches, # WARNING: KiCad developers strongly advise you to build Boost with supplied patches,
# as it is known to work with KiCad. Other versions may contain bugs that may result # as it is known to work with KiCad. Other versions may contain bugs that may result
...@@ -269,7 +272,6 @@ if( USE_WX_GRAPHICS_CONTEXT ) ...@@ -269,7 +272,6 @@ if( USE_WX_GRAPHICS_CONTEXT )
endif() endif()
# Allow user to override the default settings for adding images to menu items. By default # Allow user to override the default settings for adding images to menu items. By default
# images in menu items are enabled on all platforms except OSX. This can be over ridden by # images in menu items are enabled on all platforms except OSX. This can be over ridden by
# defining -DUSE_IMAGES_IN_MENUS=ON/OFF to force the preferred behavior. # defining -DUSE_IMAGES_IN_MENUS=ON/OFF to force the preferred behavior.
...@@ -353,9 +355,30 @@ include( ExternalProject ) ...@@ -353,9 +355,30 @@ include( ExternalProject )
#================================================ #================================================
include( CheckFindPackageResult ) include( CheckFindPackageResult )
##########################
# Find wxWidgets library #
##########################
# Here you can define what libraries of wxWidgets you need for your
# application. You can figure out what libraries you need here;
# http://www.wxwidgets.org/manuals/2.8/wx_librarieslist.html
# Turn on wxWidgets compatibility mode for some classes # Turn on wxWidgets compatibility mode for some classes
add_definitions( -DWX_COMPATIBILITY ) add_definitions( -DWX_COMPATIBILITY )
# See line 41 of CMakeModules/FindwxWidgets.cmake
set( wxWidgets_CONFIG_OPTIONS --static=no )
# On Apple only wxwidgets 2.9 or higher doesn't need to find aui part of base
# Seems no longer needed on wx-3
if( APPLE AND ( KICAD_SCRIPTING OR KICAD_SCRIPTING_MODULES OR KICAD_SCRIPTING_WXPYTHON) )
find_package( wxWidgets 3.0.0 COMPONENTS gl adv html core net base xml REQUIRED )
else()
find_package( wxWidgets 3.0.0 COMPONENTS gl aui adv html core net base xml REQUIRED )
endif()
# Include wxWidgets macros.
include( ${wxWidgets_USE_FILE} )
####################### #######################
# Find OpenGL library # # Find OpenGL library #
####################### #######################
...@@ -372,7 +395,10 @@ check_find_package_result( OPENGL_FOUND "OpenGL" ) ...@@ -372,7 +395,10 @@ check_find_package_result( OPENGL_FOUND "OpenGL" )
# Always defined, empty if no libraries are to be built # Always defined, empty if no libraries are to be built
add_custom_target( lib-dependencies ) add_custom_target( lib-dependencies )
if( KICAD_BUILD_STATIC OR KICAD_BUILD_DYNAMIC ) # Only download and build all dependencies from source on OSX if the user specifically requests
# it. Otherwise, respect the developers wishes to use the dependencies already installed on
# their systme.
if( APPLE AND USE_OSX_DEPS_BUILDER )
# This should be built in all cases, if swig exec is not avaiable # This should be built in all cases, if swig exec is not avaiable
# will be impossible also enable SCRIPTING being for PCBNEW required immediately # will be impossible also enable SCRIPTING being for PCBNEW required immediately
...@@ -417,31 +443,24 @@ if( KICAD_BUILD_STATIC OR KICAD_BUILD_DYNAMIC ) ...@@ -417,31 +443,24 @@ if( KICAD_BUILD_STATIC OR KICAD_BUILD_DYNAMIC )
set( PYTHON_DEST ${LIBWXPYTHON_ROOT}/wxPython/lib/python2.6/site-packages ) set( PYTHON_DEST ${LIBWXPYTHON_ROOT}/wxPython/lib/python2.6/site-packages )
set(wxWidgets_BIN_DIR ${LIBWXPYTHON_ROOT}/bin/wxrc )
set(wxWidgets_CONFIG_EXECUTABLE ${LIBWXPYTHON_ROOT}/bin/wx-config )
set(wxWidgets_INCLUDE_DIRS ${LIBWXPYTHON_ROOT}/include/wx-3.0 )
set(wxWidgets_LIBRARY_DIRS ${LIBWXPYTHON_ROOT}/lib )
add_dependencies( lib-dependencies libwxpython ) add_dependencies( lib-dependencies libwxpython )
add_dependencies( lib-dependencies swig ) add_dependencies( lib-dependencies swig )
else() else()
include( download_wxwidgets ) include( download_wxwidgets )
add_dependencies( lib-dependencies libwx ) add_dependencies( lib-dependencies libwx )
endif() endif()
include( download_libpng ) include( download_libpng )
include( download_pkgconfig ) include( download_pkgconfig )
set( PKG_CONFIG_EXECUTABLE "${PKGCONFIG_ROOT}/bin/pkg-config" ) set( PKG_CONFIG_EXECUTABLE "${PKGCONFIG_ROOT}/bin/pkg-config" )
include( download_glew ) include( download_glew )
set( GLEW_GLEW_LIBRARY "${GLEW_ROOT}/lib/libGLEW.a" ) set( GLEW_GLEW_LIBRARY "${GLEW_ROOT}/lib/libGLEW.a" )
set( GLEW_INCLUDE_DIR "${GLEW_ROOT}/include" ) set( GLEW_INCLUDE_DIR "${GLEW_ROOT}/include" )
include( download_pixman ) include( download_pixman )
set( PIXMAN_LIBRARY "${PIXMAN_ROOT}/lib/libpixman-1.a" ) set( PIXMAN_LIBRARY "${PIXMAN_ROOT}/lib/libpixman-1.a" )
include( download_cairo ) include( download_cairo )
set( CAIRO_INCLUDE_DIR "${CAIRO_ROOT}/include/cairo" ) set( CAIRO_INCLUDE_DIR "${CAIRO_ROOT}/include/cairo" )
set( CAIRO_LIBRARY "${CAIRO_ROOT}/lib/libcairo.a" ) set( CAIRO_LIBRARY "${CAIRO_ROOT}/lib/libcairo.a" )
add_dependencies( lib-dependencies boost ) add_dependencies( lib-dependencies boost )
add_dependencies( lib-dependencies cairo ) add_dependencies( lib-dependencies cairo )
...@@ -450,11 +469,13 @@ if( KICAD_BUILD_STATIC OR KICAD_BUILD_DYNAMIC ) ...@@ -450,11 +469,13 @@ if( KICAD_BUILD_STATIC OR KICAD_BUILD_DYNAMIC )
add_dependencies( lib-dependencies pkgconfig ) add_dependencies( lib-dependencies pkgconfig )
if( KICAD_BUILD_DYNAMIC AND APPLE ) if( KICAD_BUILD_DYNAMIC AND APPLE )
add_custom_target( osx_fix_bundles ALL DEPENDS cvpcb eeschema gerbview kicad pcbnew bitmap2component pcb_calculator pl_editor) add_custom_target( osx_fix_bundles ALL DEPENDS
add_custom_command(TARGET osx_fix_bundles POST_BUILD COMMAND ${PROJECT_SOURCE_DIR}/scripts/osx_fixbundle.sh ${PROJECT_SOURCE_DIR} COMMENT "Migrating dylibs to bundles") cvpcb eeschema gerbview kicad pcbnew bitmap2component pcb_calculator pl_editor)
add_custom_command(TARGET osx_fix_bundles
POST_BUILD COMMAND ${PROJECT_SOURCE_DIR}/scripts/osx_fixbundle.sh ${PROJECT_SOURCE_DIR}
COMMENT "Migrating dylibs to bundles")
endif() endif()
endif()
endif( KICAD_BUILD_STATIC OR KICAD_BUILD_DYNAMIC)
##################### #####################
# Find GLEW library # # Find GLEW library #
...@@ -492,31 +513,6 @@ else() ...@@ -492,31 +513,6 @@ else()
include( download_boost ) include( download_boost )
endif() endif()
##########################
# Find wxWidgets library #
##########################
# Here you can define what libraries of wxWidgets you need for your
# application. You can figure out what libraries you need here;
# http://www.wxwidgets.org/manuals/2.8/wx_librarieslist.html
# See line 41 of CMakeModules/FindwxWidgets.cmake
set( wxWidgets_CONFIG_OPTIONS --static=no )
# On Apple only wxwidgets 2.9 or higher doesn't need to find aui part of base
# Seems no more needed on wx-3
if( APPLE AND ( KICAD_SCRIPTING OR KICAD_SCRIPTING_MODULES OR KICAD_SCRIPTING_WXPYTHON) )
find_package( wxWidgets COMPONENTS gl adv html core net base xml QUIET )
else()
find_package( wxWidgets COMPONENTS gl aui adv html core net base xml QUIET )
endif()
if( NOT (KICAD_BUILD_STATIC OR KICAD_BUILD_DYNAMIC) )
check_find_package_result( wxWidgets_FOUND "wxWidgets" )
endif()
# Include wxWidgets macros.
include( ${wxWidgets_USE_FILE} )
# Include MinGW resource compiler. # Include MinGW resource compiler.
include( MinGWResourceCompiler ) include( MinGWResourceCompiler )
...@@ -553,16 +549,8 @@ set( INC_AFTER ...@@ -553,16 +549,8 @@ set( INC_AFTER
# Find Python and other scripting resources # Find Python and other scripting resources
if( KICAD_SCRIPTING OR KICAD_SCRIPTING_MODULES ) if( KICAD_SCRIPTING OR KICAD_SCRIPTING_MODULES )
if( APPLE )
set( PYTHON_LIBRARY /System/Library/Frameworks/Python.framework/Versions/2.6/Python )
set( PYTHON_INCLUDE_DIR /System/Library/Frameworks/Python.framework/Versions//2.6/include/python2.6 )
set( PythonInterp_FIND_VERSION 2.6 )
set( PythonLibs_FIND_VERSION 2.6 )
endif()
# force a python version < 3.0 # force a python version < 3.0
set( PythonInterp_FIND_VERSION 2.6) set( PythonInterp_FIND_VERSION 2.6 )
set( PythonLibs_FIND_VERSION 2.6 ) set( PythonLibs_FIND_VERSION 2.6 )
find_package( PythonInterp ) find_package( PythonInterp )
...@@ -572,6 +560,7 @@ if( KICAD_SCRIPTING OR KICAD_SCRIPTING_MODULES ) ...@@ -572,6 +560,7 @@ if( KICAD_SCRIPTING OR KICAD_SCRIPTING_MODULES )
if( NOT PYTHON_VERSION_MAJOR EQUAL 2 ) if( NOT PYTHON_VERSION_MAJOR EQUAL 2 )
message( FATAL_ERROR "Python 2.x is required." ) message( FATAL_ERROR "Python 2.x is required." )
endif() endif()
# Get the correct Python site package install path from the Python interpreter found by # Get the correct Python site package install path from the Python interpreter found by
# FindPythonInterp unless the user specifically defined a custom path. # FindPythonInterp unless the user specifically defined a custom path.
if( NOT PYTHON_SITE_PACKAGE_PATH ) if( NOT PYTHON_SITE_PACKAGE_PATH )
......
# FIND_PACKAGE_HANDLE_STANDARD_ARGS(<name> ... ) #.rst:
# FindPackageHandleStandardArgs
# -----------------------------
#
#
#
# FIND_PACKAGE_HANDLE_STANDARD_ARGS(<name> ... )
# #
# This function is intended to be used in FindXXX.cmake modules files. # This function is intended to be used in FindXXX.cmake modules files.
# It handles the REQUIRED, QUIET and version-related arguments to FIND_PACKAGE(). # It handles the REQUIRED, QUIET and version-related arguments to
# It also sets the <UPPERCASED_NAME>_FOUND variable. # find_package(). It also sets the <packagename>_FOUND variable. The
# The package is considered found if all variables <var1>... listed contain # package is considered found if all variables <var1>... listed contain
# valid results, e.g. valid filepaths. # valid results, e.g. valid filepaths.
# #
# There are two modes of this function. The first argument in both modes is # There are two modes of this function. The first argument in both
# the name of the Find-module where it is called (in original casing). # modes is the name of the Find-module where it is called (in original
# casing).
# #
# The first simple mode looks like this: # The first simple mode looks like this:
# FIND_PACKAGE_HANDLE_STANDARD_ARGS(<name> (DEFAULT_MSG|"Custom failure message") <var1>...<varN> ) #
# If the variables <var1> to <varN> are all valid, then <UPPERCASED_NAME>_FOUND # ::
# will be set to TRUE. #
# If DEFAULT_MSG is given as second argument, then the function will generate # FIND_PACKAGE_HANDLE_STANDARD_ARGS(<name> (DEFAULT_MSG|"Custom failure message") <var1>...<varN> )
# itself useful success and error messages. You can also supply a custom error message #
# for the failure case. This is not recommended. # If the variables <var1> to <varN> are all valid, then
# <UPPERCASED_NAME>_FOUND will be set to TRUE. If DEFAULT_MSG is given
# as second argument, then the function will generate itself useful
# success and error messages. You can also supply a custom error
# message for the failure case. This is not recommended.
# #
# The second mode is more powerful and also supports version checking: # The second mode is more powerful and also supports version checking:
# FIND_PACKAGE_HANDLE_STANDARD_ARGS(NAME [REQUIRED_VARS <var1>...<varN>] #
# [VERSION_VAR <versionvar> # ::
# [CONFIG_MODE] #
# [FAIL_MESSAGE "Custom failure message"] ) # FIND_PACKAGE_HANDLE_STANDARD_ARGS(NAME [FOUND_VAR <resultVar>]
# # [REQUIRED_VARS <var1>...<varN>]
# As above, if <var1> through <varN> are all valid, <UPPERCASED_NAME>_FOUND # [VERSION_VAR <versionvar>]
# will be set to TRUE. # [HANDLE_COMPONENTS]
# After REQUIRED_VARS the variables which are required for this package are listed. # [CONFIG_MODE]
# Following VERSION_VAR the name of the variable can be specified which holds # [FAIL_MESSAGE "Custom failure message"] )
# the version of the package which has been found. If this is done, this version #
# will be checked against the (potentially) specified required version used #
# in the find_package() call. The EXACT keyword is also handled. The default #
# messages include information about the required version and the version # In this mode, the name of the result-variable can be set either to
# which has been actually found, both if the version is ok or not. # either <UPPERCASED_NAME>_FOUND or <OriginalCase_Name>_FOUND using the
# Use the option CONFIG_MODE if your FindXXX.cmake module is a wrapper for # FOUND_VAR option. Other names for the result-variable are not
# a find_package(... NO_MODULE) call, in this case all the information # allowed. So for a Find-module named FindFooBar.cmake, the two
# provided by the config-mode of find_package() will be evaluated # possible names are FooBar_FOUND and FOOBAR_FOUND. It is recommended
# automatically. # to use the original case version. If the FOUND_VAR option is not
# Via FAIL_MESSAGE a custom failure message can be specified, if this is not # used, the default is <UPPERCASED_NAME>_FOUND.
# used, the default message will be displayed. #
# As in the simple mode, if <var1> through <varN> are all valid,
# <packagename>_FOUND will be set to TRUE. After REQUIRED_VARS the
# variables which are required for this package are listed. Following
# VERSION_VAR the name of the variable can be specified which holds the
# version of the package which has been found. If this is done, this
# version will be checked against the (potentially) specified required
# version used in the find_package() call. The EXACT keyword is also
# handled. The default messages include information about the required
# version and the version which has been actually found, both if the
# version is ok or not. If the package supports components, use the
# HANDLE_COMPONENTS option to enable handling them. In this case,
# find_package_handle_standard_args() will report which components have
# been found and which are missing, and the <packagename>_FOUND variable
# will be set to FALSE if any of the required components (i.e. not the
# ones listed after OPTIONAL_COMPONENTS) are missing. Use the option
# CONFIG_MODE if your FindXXX.cmake module is a wrapper for a
# find_package(... NO_MODULE) call. In this case VERSION_VAR will be
# set to <NAME>_VERSION and the macro will automatically check whether
# the Config module was found. Via FAIL_MESSAGE a custom failure
# message can be specified, if this is not used, the default message
# will be displayed.
# #
# Example for mode 1: # Example for mode 1:
# #
# FIND_PACKAGE_HANDLE_STANDARD_ARGS(LibXml2 DEFAULT_MSG LIBXML2_LIBRARY LIBXML2_INCLUDE_DIR) # ::
#
# find_package_handle_standard_args(LibXml2 DEFAULT_MSG LIBXML2_LIBRARY LIBXML2_INCLUDE_DIR)
#
#
# #
# LibXml2 is considered to be found, if both LIBXML2_LIBRARY and # LibXml2 is considered to be found, if both LIBXML2_LIBRARY and
# LIBXML2_INCLUDE_DIR are valid. Then also LIBXML2_FOUND is set to TRUE. # LIBXML2_INCLUDE_DIR are valid. Then also LIBXML2_FOUND is set to
# If it is not found and REQUIRED was used, it fails with FATAL_ERROR, # TRUE. If it is not found and REQUIRED was used, it fails with
# independent whether QUIET was used or not. # FATAL_ERROR, independent whether QUIET was used or not. If it is
# If it is found, success will be reported, including the content of <var1>. # found, success will be reported, including the content of <var1>. On
# On repeated Cmake runs, the same message won't be printed again. # repeated Cmake runs, the same message won't be printed again.
# #
# Example for mode 2: # Example for mode 2:
# #
# FIND_PACKAGE_HANDLE_STANDARD_ARGS(BISON REQUIRED_VARS BISON_EXECUTABLE # ::
# VERSION_VAR BISON_VERSION) #
# In this case, BISON is considered to be found if the variable(s) listed # find_package_handle_standard_args(LibXslt FOUND_VAR LibXslt_FOUND
# after REQUIRED_VAR are all valid, i.e. BISON_EXECUTABLE in this case. # REQUIRED_VARS LibXslt_LIBRARIES LibXslt_INCLUDE_DIRS
# Also the version of BISON will be checked by using the version contained # VERSION_VAR LibXslt_VERSION_STRING)
# in BISON_VERSION. #
# Since no FAIL_MESSAGE is given, the default messages will be printed. # In this case, LibXslt is considered to be found if the variable(s)
# listed after REQUIRED_VAR are all valid, i.e. LibXslt_LIBRARIES and
# LibXslt_INCLUDE_DIRS in this case. The result will then be stored in
# LibXslt_FOUND . Also the version of LibXslt will be checked by using
# the version contained in LibXslt_VERSION_STRING. Since no
# FAIL_MESSAGE is given, the default messages will be printed.
# #
# Another example for mode 2: # Another example for mode 2:
# #
# FIND_PACKAGE(Automoc4 QUIET NO_MODULE HINTS /opt/automoc4) # ::
# FIND_PACKAGE_HANDLE_STANDARD_ARGS(Automoc4 CONFIG_MODE) #
# In this case, FindAutmoc4.cmake wraps a call to FIND_PACKAGE(Automoc4 NO_MODULE) # find_package(Automoc4 QUIET NO_MODULE HINTS /opt/automoc4)
# and adds an additional search directory for automoc4. # find_package_handle_standard_args(Automoc4 CONFIG_MODE)
# The following FIND_PACKAGE_HANDLE_STANDARD_ARGS() call produces a proper #
# In this case, FindAutmoc4.cmake wraps a call to find_package(Automoc4
# NO_MODULE) and adds an additional search directory for automoc4. Here
# the result will be stored in AUTOMOC4_FOUND. The following
# FIND_PACKAGE_HANDLE_STANDARD_ARGS() call produces a proper
# success/error message. # success/error message.
#============================================================================= #=============================================================================
...@@ -82,179 +127,225 @@ ...@@ -82,179 +127,225 @@
# (To distribute this file outside of CMake, substitute the full # (To distribute this file outside of CMake, substitute the full
# License text for the above reference.) # License text for the above reference.)
INCLUDE(FindPackageMessage) include(${CMAKE_CURRENT_LIST_DIR}/FindPackageMessage.cmake)
INCLUDE(CMakeParseArguments) include(${CMAKE_CURRENT_LIST_DIR}/CMakeParseArguments.cmake)
# internal helper macro # internal helper macro
MACRO(_FPHSA_FAILURE_MESSAGE _msg) macro(_FPHSA_FAILURE_MESSAGE _msg)
IF (${_NAME}_FIND_REQUIRED) if (${_NAME}_FIND_REQUIRED)
MESSAGE(FATAL_ERROR "${_msg}") message(FATAL_ERROR "${_msg}")
ELSE (${_NAME}_FIND_REQUIRED) else ()
IF (NOT ${_NAME}_FIND_QUIETLY) if (NOT ${_NAME}_FIND_QUIETLY)
MESSAGE(STATUS "${_msg}") message(STATUS "${_msg}")
ENDIF (NOT ${_NAME}_FIND_QUIETLY) endif ()
ENDIF (${_NAME}_FIND_REQUIRED) endif ()
ENDMACRO(_FPHSA_FAILURE_MESSAGE _msg) endmacro()
# internal helper macro to generate the failure message when used in CONFIG_MODE: # internal helper macro to generate the failure message when used in CONFIG_MODE:
MACRO(_FPHSA_HANDLE_FAILURE_CONFIG_MODE) macro(_FPHSA_HANDLE_FAILURE_CONFIG_MODE)
# <name>_CONFIG is set, but FOUND is false, this means that some other of the REQUIRED_VARS was not found: # <name>_CONFIG is set, but FOUND is false, this means that some other of the REQUIRED_VARS was not found:
IF(${_NAME}_CONFIG) if(${_NAME}_CONFIG)
_FPHSA_FAILURE_MESSAGE("${FPHSA_FAIL_MESSAGE}: missing: ${MISSING_VARS} (found ${${_NAME}_CONFIG} ${VERSION_MSG})") _FPHSA_FAILURE_MESSAGE("${FPHSA_FAIL_MESSAGE}: missing: ${MISSING_VARS} (found ${${_NAME}_CONFIG} ${VERSION_MSG})")
ELSE(${_NAME}_CONFIG) else()
# If _CONSIDERED_CONFIGS is set, the config-file has been found, but no suitable version. # If _CONSIDERED_CONFIGS is set, the config-file has been found, but no suitable version.
# List them all in the error message: # List them all in the error message:
IF(${_NAME}_CONSIDERED_CONFIGS) if(${_NAME}_CONSIDERED_CONFIGS)
SET(configsText "") set(configsText "")
LIST(LENGTH ${_NAME}_CONSIDERED_CONFIGS configsCount) list(LENGTH ${_NAME}_CONSIDERED_CONFIGS configsCount)
MATH(EXPR configsCount "${configsCount} - 1") math(EXPR configsCount "${configsCount} - 1")
FOREACH(currentConfigIndex RANGE ${configsCount}) foreach(currentConfigIndex RANGE ${configsCount})
LIST(GET ${_NAME}_CONSIDERED_CONFIGS ${currentConfigIndex} filename) list(GET ${_NAME}_CONSIDERED_CONFIGS ${currentConfigIndex} filename)
LIST(GET ${_NAME}_CONSIDERED_VERSIONS ${currentConfigIndex} version) list(GET ${_NAME}_CONSIDERED_VERSIONS ${currentConfigIndex} version)
SET(configsText "${configsText} ${filename} (version ${version})\n") set(configsText "${configsText} ${filename} (version ${version})\n")
ENDFOREACH(currentConfigIndex) endforeach()
if (${_NAME}_NOT_FOUND_MESSAGE)
set(configsText "${configsText} Reason given by package: ${${_NAME}_NOT_FOUND_MESSAGE}\n")
endif()
_FPHSA_FAILURE_MESSAGE("${FPHSA_FAIL_MESSAGE} ${VERSION_MSG}, checked the following files:\n${configsText}") _FPHSA_FAILURE_MESSAGE("${FPHSA_FAIL_MESSAGE} ${VERSION_MSG}, checked the following files:\n${configsText}")
ELSE(${_NAME}_CONSIDERED_CONFIGS) else()
# Simple case: No Config-file was found at all: # Simple case: No Config-file was found at all:
_FPHSA_FAILURE_MESSAGE("${FPHSA_FAIL_MESSAGE}: found neither ${_NAME}Config.cmake nor ${_NAME_LOWER}-config.cmake ${VERSION_MSG}") _FPHSA_FAILURE_MESSAGE("${FPHSA_FAIL_MESSAGE}: found neither ${_NAME}Config.cmake nor ${_NAME_LOWER}-config.cmake ${VERSION_MSG}")
ENDIF(${_NAME}_CONSIDERED_CONFIGS) endif()
ENDIF(${_NAME}_CONFIG) endif()
ENDMACRO(_FPHSA_HANDLE_FAILURE_CONFIG_MODE) endmacro()
FUNCTION(FIND_PACKAGE_HANDLE_STANDARD_ARGS _NAME _FIRST_ARG) function(FIND_PACKAGE_HANDLE_STANDARD_ARGS _NAME _FIRST_ARG)
# set up the arguments for CMAKE_PARSE_ARGUMENTS and check whether we are in # set up the arguments for CMAKE_PARSE_ARGUMENTS and check whether we are in
# new extended or in the "old" mode: # new extended or in the "old" mode:
SET(options CONFIG_MODE) set(options CONFIG_MODE HANDLE_COMPONENTS)
SET(oneValueArgs FAIL_MESSAGE VERSION_VAR) set(oneValueArgs FAIL_MESSAGE VERSION_VAR FOUND_VAR)
SET(multiValueArgs REQUIRED_VARS) set(multiValueArgs REQUIRED_VARS)
SET(_KEYWORDS_FOR_EXTENDED_MODE ${options} ${oneValueArgs} ${multiValueArgs} ) set(_KEYWORDS_FOR_EXTENDED_MODE ${options} ${oneValueArgs} ${multiValueArgs} )
LIST(FIND _KEYWORDS_FOR_EXTENDED_MODE "${_FIRST_ARG}" INDEX) list(FIND _KEYWORDS_FOR_EXTENDED_MODE "${_FIRST_ARG}" INDEX)
IF(${INDEX} EQUAL -1) if(${INDEX} EQUAL -1)
SET(FPHSA_FAIL_MESSAGE ${_FIRST_ARG}) set(FPHSA_FAIL_MESSAGE ${_FIRST_ARG})
SET(FPHSA_REQUIRED_VARS ${ARGN}) set(FPHSA_REQUIRED_VARS ${ARGN})
SET(FPHSA_VERSION_VAR) set(FPHSA_VERSION_VAR)
ELSE(${INDEX} EQUAL -1) else()
CMAKE_PARSE_ARGUMENTS(FPHSA "${options}" "${oneValueArgs}" "${multiValueArgs}" ${_FIRST_ARG} ${ARGN}) CMAKE_PARSE_ARGUMENTS(FPHSA "${options}" "${oneValueArgs}" "${multiValueArgs}" ${_FIRST_ARG} ${ARGN})
IF(FPHSA_UNPARSED_ARGUMENTS) if(FPHSA_UNPARSED_ARGUMENTS)
MESSAGE(FATAL_ERROR "Unknown keywords given to FIND_PACKAGE_HANDLE_STANDARD_ARGS(): \"${FPHSA_UNPARSED_ARGUMENTS}\"") message(FATAL_ERROR "Unknown keywords given to FIND_PACKAGE_HANDLE_STANDARD_ARGS(): \"${FPHSA_UNPARSED_ARGUMENTS}\"")
ENDIF(FPHSA_UNPARSED_ARGUMENTS) endif()
IF(NOT FPHSA_FAIL_MESSAGE) if(NOT FPHSA_FAIL_MESSAGE)
SET(FPHSA_FAIL_MESSAGE "DEFAULT_MSG") set(FPHSA_FAIL_MESSAGE "DEFAULT_MSG")
ENDIF(NOT FPHSA_FAIL_MESSAGE) endif()
ENDIF(${INDEX} EQUAL -1) endif()
# now that we collected all arguments, process them # now that we collected all arguments, process them
IF("${FPHSA_FAIL_MESSAGE}" STREQUAL "DEFAULT_MSG") if("${FPHSA_FAIL_MESSAGE}" STREQUAL "DEFAULT_MSG")
SET(FPHSA_FAIL_MESSAGE "Could NOT find ${_NAME}") set(FPHSA_FAIL_MESSAGE "Could NOT find ${_NAME}")
ENDIF("${FPHSA_FAIL_MESSAGE}" STREQUAL "DEFAULT_MSG") endif()
# In config-mode, we rely on the variable <package>_CONFIG, which is set by find_package() # In config-mode, we rely on the variable <package>_CONFIG, which is set by find_package()
# when it successfully found the config-file, including version checking: # when it successfully found the config-file, including version checking:
IF(FPHSA_CONFIG_MODE) if(FPHSA_CONFIG_MODE)
LIST(INSERT FPHSA_REQUIRED_VARS 0 ${_NAME}_CONFIG) list(INSERT FPHSA_REQUIRED_VARS 0 ${_NAME}_CONFIG)
LIST(REMOVE_DUPLICATES FPHSA_REQUIRED_VARS) list(REMOVE_DUPLICATES FPHSA_REQUIRED_VARS)
SET(FPHSA_VERSION_VAR ${_NAME}_VERSION) set(FPHSA_VERSION_VAR ${_NAME}_VERSION)
ENDIF(FPHSA_CONFIG_MODE) endif()
IF(NOT FPHSA_REQUIRED_VARS) if(NOT FPHSA_REQUIRED_VARS)
MESSAGE(FATAL_ERROR "No REQUIRED_VARS specified for FIND_PACKAGE_HANDLE_STANDARD_ARGS()") message(FATAL_ERROR "No REQUIRED_VARS specified for FIND_PACKAGE_HANDLE_STANDARD_ARGS()")
ENDIF(NOT FPHSA_REQUIRED_VARS) endif()
LIST(GET FPHSA_REQUIRED_VARS 0 _FIRST_REQUIRED_VAR) list(GET FPHSA_REQUIRED_VARS 0 _FIRST_REQUIRED_VAR)
STRING(TOUPPER ${_NAME} _NAME_UPPER) string(TOUPPER ${_NAME} _NAME_UPPER)
STRING(TOLOWER ${_NAME} _NAME_LOWER) string(TOLOWER ${_NAME} _NAME_LOWER)
if(FPHSA_FOUND_VAR)
if(FPHSA_FOUND_VAR MATCHES "^${_NAME}_FOUND$" OR FPHSA_FOUND_VAR MATCHES "^${_NAME_UPPER}_FOUND$")
set(_FOUND_VAR ${FPHSA_FOUND_VAR})
else()
message(FATAL_ERROR "The argument for FOUND_VAR is \"${FPHSA_FOUND_VAR}\", but only \"${_NAME}_FOUND\" and \"${_NAME_UPPER}_FOUND\" are valid names.")
endif()
else()
set(_FOUND_VAR ${_NAME_UPPER}_FOUND)
endif()
# collect all variables which were not found, so they can be printed, so the # collect all variables which were not found, so they can be printed, so the
# user knows better what went wrong (#6375) # user knows better what went wrong (#6375)
SET(MISSING_VARS "") set(MISSING_VARS "")
SET(DETAILS "") set(DETAILS "")
SET(${_NAME_UPPER}_FOUND TRUE)
# check if all passed variables are valid # check if all passed variables are valid
FOREACH(_CURRENT_VAR ${FPHSA_REQUIRED_VARS}) unset(${_FOUND_VAR})
IF(NOT ${_CURRENT_VAR}) foreach(_CURRENT_VAR ${FPHSA_REQUIRED_VARS})
SET(${_NAME_UPPER}_FOUND FALSE) if(NOT ${_CURRENT_VAR})
SET(MISSING_VARS "${MISSING_VARS} ${_CURRENT_VAR}") set(${_FOUND_VAR} FALSE)
ELSE(NOT ${_CURRENT_VAR}) set(MISSING_VARS "${MISSING_VARS} ${_CURRENT_VAR}")
SET(DETAILS "${DETAILS}[${${_CURRENT_VAR}}]") else()
ENDIF(NOT ${_CURRENT_VAR}) set(DETAILS "${DETAILS}[${${_CURRENT_VAR}}]")
ENDFOREACH(_CURRENT_VAR) endif()
endforeach()
if(NOT "${${_FOUND_VAR}}" STREQUAL "FALSE")
set(${_FOUND_VAR} TRUE)
endif()
# component handling
unset(FOUND_COMPONENTS_MSG)
unset(MISSING_COMPONENTS_MSG)
if(FPHSA_HANDLE_COMPONENTS)
foreach(comp ${${_NAME}_FIND_COMPONENTS})
if(${_NAME}_${comp}_FOUND)
if(NOT DEFINED FOUND_COMPONENTS_MSG)
set(FOUND_COMPONENTS_MSG "found components: ")
endif()
set(FOUND_COMPONENTS_MSG "${FOUND_COMPONENTS_MSG} ${comp}")
else()
if(NOT DEFINED MISSING_COMPONENTS_MSG)
set(MISSING_COMPONENTS_MSG "missing components: ")
endif()
set(MISSING_COMPONENTS_MSG "${MISSING_COMPONENTS_MSG} ${comp}")
if(${_NAME}_FIND_REQUIRED_${comp})
set(${_FOUND_VAR} FALSE)
set(MISSING_VARS "${MISSING_VARS} ${comp}")
endif()
endif()
endforeach()
set(COMPONENT_MSG "${FOUND_COMPONENTS_MSG} ${MISSING_COMPONENTS_MSG}")
set(DETAILS "${DETAILS}[c${COMPONENT_MSG}]")
endif()
# version handling: # version handling:
SET(VERSION_MSG "") set(VERSION_MSG "")
SET(VERSION_OK TRUE) set(VERSION_OK TRUE)
SET(VERSION ${${FPHSA_VERSION_VAR}} ) set(VERSION ${${FPHSA_VERSION_VAR}} )
IF (${_NAME}_FIND_VERSION) if (${_NAME}_FIND_VERSION)
IF(VERSION) if(VERSION)
IF(${_NAME}_FIND_VERSION_EXACT) # exact version required if(${_NAME}_FIND_VERSION_EXACT) # exact version required
IF (NOT "${${_NAME}_FIND_VERSION}" VERSION_EQUAL "${VERSION}") if (NOT "${${_NAME}_FIND_VERSION}" VERSION_EQUAL "${VERSION}")
SET(VERSION_MSG "Found unsuitable version \"${VERSION}\", but required is exact version \"${${_NAME}_FIND_VERSION}\"") set(VERSION_MSG "Found unsuitable version \"${VERSION}\", but required is exact version \"${${_NAME}_FIND_VERSION}\"")
SET(VERSION_OK FALSE) set(VERSION_OK FALSE)
ELSE (NOT "${${_NAME}_FIND_VERSION}" VERSION_EQUAL "${VERSION}") else ()
SET(VERSION_MSG "(found suitable exact version \"${VERSION}\")") set(VERSION_MSG "(found suitable exact version \"${VERSION}\")")
ENDIF (NOT "${${_NAME}_FIND_VERSION}" VERSION_EQUAL "${VERSION}") endif ()
ELSE(${_NAME}_FIND_VERSION_EXACT) # minimum version specified: else() # minimum version specified:
IF ("${${_NAME}_FIND_VERSION}" VERSION_GREATER "${VERSION}") if ("${${_NAME}_FIND_VERSION}" VERSION_GREATER "${VERSION}")
SET(VERSION_MSG "Found unsuitable version \"${VERSION}\", but required is at least \"${${_NAME}_FIND_VERSION}\"") set(VERSION_MSG "Found unsuitable version \"${VERSION}\", but required is at least \"${${_NAME}_FIND_VERSION}\"")
SET(VERSION_OK FALSE) set(VERSION_OK FALSE)
ELSE ("${${_NAME}_FIND_VERSION}" VERSION_GREATER "${VERSION}") else ()
SET(VERSION_MSG "(found suitable version \"${VERSION}\", required is \"${${_NAME}_FIND_VERSION}\")") set(VERSION_MSG "(found suitable version \"${VERSION}\", minimum required is \"${${_NAME}_FIND_VERSION}\")")
ENDIF ("${${_NAME}_FIND_VERSION}" VERSION_GREATER "${VERSION}") endif ()
ENDIF(${_NAME}_FIND_VERSION_EXACT) endif()
ELSE(VERSION) else()
# if the package was not found, but a version was given, add that to the output: # if the package was not found, but a version was given, add that to the output:
IF(${_NAME}_FIND_VERSION_EXACT) if(${_NAME}_FIND_VERSION_EXACT)
SET(VERSION_MSG "(Required is exact version \"${${_NAME}_FIND_VERSION}\")") set(VERSION_MSG "(Required is exact version \"${${_NAME}_FIND_VERSION}\")")
ELSE(${_NAME}_FIND_VERSION_EXACT) else()
SET(VERSION_MSG "(Required is at least version \"${${_NAME}_FIND_VERSION}\")") set(VERSION_MSG "(Required is at least version \"${${_NAME}_FIND_VERSION}\")")
ENDIF(${_NAME}_FIND_VERSION_EXACT) endif()
ENDIF(VERSION) endif()
ELSE (${_NAME}_FIND_VERSION) else ()
IF(VERSION) if(VERSION)
SET(VERSION_MSG "(found version \"${VERSION}\")") set(VERSION_MSG "(found version \"${VERSION}\")")
ENDIF(VERSION) endif()
ENDIF (${_NAME}_FIND_VERSION) endif ()
IF(VERSION_OK) if(VERSION_OK)
SET(DETAILS "${DETAILS}[v${VERSION}(${${_NAME}_FIND_VERSION})]") set(DETAILS "${DETAILS}[v${VERSION}(${${_NAME}_FIND_VERSION})]")
ELSE(VERSION_OK) else()
SET(${_NAME_UPPER}_FOUND FALSE) set(${_FOUND_VAR} FALSE)
ENDIF(VERSION_OK) endif()
# print the result: # print the result:
IF (${_NAME_UPPER}_FOUND) if (${_FOUND_VAR})
FIND_PACKAGE_MESSAGE(${_NAME} "Found ${_NAME}: ${${_FIRST_REQUIRED_VAR}} ${VERSION_MSG}" "${DETAILS}") FIND_PACKAGE_MESSAGE(${_NAME} "Found ${_NAME}: ${${_FIRST_REQUIRED_VAR}} ${VERSION_MSG} ${COMPONENT_MSG}" "${DETAILS}")
ELSE (${_NAME_UPPER}_FOUND) else ()
IF(FPHSA_CONFIG_MODE) if(FPHSA_CONFIG_MODE)
_FPHSA_HANDLE_FAILURE_CONFIG_MODE() _FPHSA_HANDLE_FAILURE_CONFIG_MODE()
ELSE(FPHSA_CONFIG_MODE) else()
IF(NOT VERSION_OK) if(NOT VERSION_OK)
_FPHSA_FAILURE_MESSAGE("${FPHSA_FAIL_MESSAGE}: ${VERSION_MSG} (found ${${_FIRST_REQUIRED_VAR}})") _FPHSA_FAILURE_MESSAGE("${FPHSA_FAIL_MESSAGE}: ${VERSION_MSG} (found ${${_FIRST_REQUIRED_VAR}})")
ELSE(NOT VERSION_OK) else()
_FPHSA_FAILURE_MESSAGE("${FPHSA_FAIL_MESSAGE} (missing: ${MISSING_VARS}) ${VERSION_MSG}") _FPHSA_FAILURE_MESSAGE("${FPHSA_FAIL_MESSAGE} (missing: ${MISSING_VARS}) ${VERSION_MSG}")
ENDIF(NOT VERSION_OK) endif()
ENDIF(FPHSA_CONFIG_MODE) endif()
ENDIF (${_NAME_UPPER}_FOUND) endif ()
SET(${_NAME_UPPER}_FOUND ${${_NAME_UPPER}_FOUND} PARENT_SCOPE) set(${_FOUND_VAR} ${${_FOUND_VAR}} PARENT_SCOPE)
ENDFUNCTION(FIND_PACKAGE_HANDLE_STANDARD_ARGS _FIRST_ARG) endfunction()
...@@ -4,7 +4,7 @@ ...@@ -4,7 +4,7 @@
# modules that you will use, you need to name them as components to # modules that you will use, you need to name them as components to
# the package: # the package:
# #
# FIND_PACKAGE(wxWidgets COMPONENTS core base ...) # find_package(wxWidgets COMPONENTS core base ...)
# #
# There are two search branches: a windows style and a unix style. For # There are two search branches: a windows style and a unix style. For
# windows, the following variables are searched for and set to # windows, the following variables are searched for and set to
...@@ -38,7 +38,7 @@ ...@@ -38,7 +38,7 @@
# example, to use the base toolkit found in the /usr/local path, set # example, to use the base toolkit found in the /usr/local path, set
# the variable (before calling the FIND_PACKAGE command) as such: # the variable (before calling the FIND_PACKAGE command) as such:
# #
# SET(wxWidgets_CONFIG_OPTIONS --toolkit=base --prefix=/usr) # set(wxWidgets_CONFIG_OPTIONS --toolkit=base --prefix=/usr)
# #
# The following are set after the configuration is done for both # The following are set after the configuration is done for both
# windows and unix style: # windows and unix style:
...@@ -62,19 +62,25 @@ ...@@ -62,19 +62,25 @@
# #
# Sample usage: # Sample usage:
# # Note that for MinGW users the order of libs is important! # # Note that for MinGW users the order of libs is important!
# FIND_PACKAGE(wxWidgets COMPONENTS net gl core base) # find_package(wxWidgets COMPONENTS net gl core base)
# IF(wxWidgets_FOUND) # if(wxWidgets_FOUND)
# INCLUDE(${wxWidgets_USE_FILE}) # include(${wxWidgets_USE_FILE})
# # and for each of your dependent executable/library targets: # # and for each of your dependent executable/library targets:
# TARGET_LINK_LIBRARIES(<YourTarget> ${wxWidgets_LIBRARIES}) # target_link_libraries(<YourTarget> ${wxWidgets_LIBRARIES})
# ENDIF(wxWidgets_FOUND) # endif(wxWidgets_FOUND)
# #
# If wxWidgets is required (i.e., not an optional part): # If wxWidgets is required (i.e., not an optional part):
# FIND_PACKAGE(wxWidgets REQUIRED net gl core base) # find_package(wxWidgets REQUIRED net gl core base)
# INCLUDE(${wxWidgets_USE_FILE}) # include(${wxWidgets_USE_FILE})
# # and for each of your dependent executable/library targets: # # and for each of your dependent executable/library targets:
# TARGET_LINK_LIBRARIES(<YourTarget> ${wxWidgets_LIBRARIES}) # target_link_libraries(<YourTarget> ${wxWidgets_LIBRARIES})
#
# If a wxWidgets version or greater is required:
# find_package(wxWidgets 2.8.12 COMPONENTS net gl core base REQUIRED)
#
# If specific wxWidgets version is required:
# find_package(wxWidgets 2.8.12 EXACT COMPONENTS net gl core base REQUIRED)
#
#============================================================================= #=============================================================================
# Copyright 2004-2009 Kitware, Inc. # Copyright 2004-2009 Kitware, Inc.
# Copyright 2007-2009 Miguel A. Figueroa-Villanueva <miguelf at ieee dot org> # Copyright 2007-2009 Miguel A. Figueroa-Villanueva <miguelf at ieee dot org>
...@@ -94,7 +100,7 @@ ...@@ -94,7 +100,7 @@
# Remember to connect back to the upper text. # Remember to connect back to the upper text.
# Sample usage with monolithic wx build: # Sample usage with monolithic wx build:
# #
# FIND_PACKAGE(wxWidgets COMPONENTS mono) # find_package(wxWidgets COMPONENTS mono)
# ... # ...
# NOTES # NOTES
...@@ -138,24 +144,24 @@ ...@@ -138,24 +144,24 @@
# checking whether a minimal set was found. # checking whether a minimal set was found.
# FIXME: This and all the DBG_MSG calls should be removed after the # FIXME: This and all the dbg_msg calls should be removed after the
# module stabilizes. # module stabilizes.
# #
# Helper macro to control the debugging output globally. There are # Helper macro to control the debugging output globally. There are
# two versions for controlling how verbose your output should be. # two versions for controlling how verbose your output should be.
MACRO(DBG_MSG _MSG) macro(dbg_msg _MSG)
# MESSAGE(WARNING "${_MSG}") message(STATUS "${_MSG}")
ENDMACRO(DBG_MSG) endmacro(dbg_msg)
MACRO(DBG_MSG_V _MSG) macro(dbg_msg_v _MSG)
# MESSAGE(WARNING "${_MSG}") message(STATUS "${_MSG}")
ENDMACRO(DBG_MSG_V) endmacro(dbg_msg_v)
# Clear return values in case the module is loaded more than once. # Clear return values in case the module is loaded more than once.
SET(wxWidgets_FOUND FALSE) set(wxWidgets_FOUND FALSE)
SET(wxWidgets_INCLUDE_DIRS "") set(wxWidgets_INCLUDE_DIRS "")
SET(wxWidgets_LIBRARIES "") set(wxWidgets_LIBRARIES "")
SET(wxWidgets_LIBRARY_DIRS "") set(wxWidgets_LIBRARY_DIRS "")
SET(wxWidgets_CXX_FLAGS "") set(wxWidgets_CXX_FLAGS "")
# Using SYSTEM with INCLUDE_DIRECTORIES in conjunction with wxWidgets on # Using SYSTEM with INCLUDE_DIRECTORIES in conjunction with wxWidgets on
# the Mac produces compiler errors. Set wxWidgets_INCLUDE_DIRS_NO_SYSTEM # the Mac produces compiler errors. Set wxWidgets_INCLUDE_DIRS_NO_SYSTEM
...@@ -165,9 +171,9 @@ SET(wxWidgets_CXX_FLAGS "") ...@@ -165,9 +171,9 @@ SET(wxWidgets_CXX_FLAGS "")
# http://www.cmake.org/pipermail/cmake/2008-April/021115.html # http://www.cmake.org/pipermail/cmake/2008-April/021115.html
# http://www.cmake.org/pipermail/cmake/2008-April/021146.html # http://www.cmake.org/pipermail/cmake/2008-April/021146.html
# #
IF(APPLE) if(APPLE)
SET(wxWidgets_INCLUDE_DIRS_NO_SYSTEM 1) set(wxWidgets_INCLUDE_DIRS_NO_SYSTEM 1)
ENDIF(APPLE) endif(APPLE)
# DEPRECATED: This is a patch to support the DEPRECATED use of # DEPRECATED: This is a patch to support the DEPRECATED use of
# wxWidgets_USE_LIBS. # wxWidgets_USE_LIBS.
...@@ -175,66 +181,66 @@ ENDIF(APPLE) ...@@ -175,66 +181,66 @@ ENDIF(APPLE)
# If wxWidgets_USE_LIBS is set: # If wxWidgets_USE_LIBS is set:
# - if using <components>, then override wxWidgets_USE_LIBS # - if using <components>, then override wxWidgets_USE_LIBS
# - else set wxWidgets_FIND_COMPONENTS to wxWidgets_USE_LIBS # - else set wxWidgets_FIND_COMPONENTS to wxWidgets_USE_LIBS
IF(wxWidgets_USE_LIBS AND NOT wxWidgets_FIND_COMPONENTS) if(wxWidgets_USE_LIBS AND NOT wxWidgets_FIND_COMPONENTS)
SET(wxWidgets_FIND_COMPONENTS ${wxWidgets_USE_LIBS}) set(wxWidgets_FIND_COMPONENTS ${wxWidgets_USE_LIBS})
ENDIF(wxWidgets_USE_LIBS AND NOT wxWidgets_FIND_COMPONENTS) endif(wxWidgets_USE_LIBS AND NOT wxWidgets_FIND_COMPONENTS)
DBG_MSG("wxWidgets_FIND_COMPONENTS : ${wxWidgets_FIND_COMPONENTS}") dbg_msg("wxWidgets_FIND_COMPONENTS : ${wxWidgets_FIND_COMPONENTS}")
# Add the convenience use file if available. # Add the convenience use file if available.
# #
# Get dir of this file which may reside in: # Get dir of this file which may reside in:
# - CMAKE_MAKE_ROOT/Modules on CMake installation # - CMAKE_MAKE_ROOT/Modules on CMake installation
# - CMAKE_MODULE_PATH if user prefers his own specialized version # - CMAKE_MODULE_PATH if user prefers his own specialized version
SET(wxWidgets_USE_FILE "") set(wxWidgets_USE_FILE "")
GET_FILENAME_COMPONENT( get_filename_component(
wxWidgets_CURRENT_LIST_DIR ${CMAKE_CURRENT_LIST_FILE} PATH) wxWidgets_CURRENT_LIST_DIR ${CMAKE_CURRENT_LIST_FILE} PATH)
# Prefer an existing customized version, but the user might override # Prefer an existing customized version, but the user might override
# the FindwxWidgets module and not the UsewxWidgets one. # the FindwxWidgets module and not the UsewxWidgets one.
IF(EXISTS "${wxWidgets_CURRENT_LIST_DIR}/UsewxWidgets.cmake") if(EXISTS "${wxWidgets_CURRENT_LIST_DIR}/UsewxWidgets.cmake")
SET(wxWidgets_USE_FILE set(wxWidgets_USE_FILE
"${wxWidgets_CURRENT_LIST_DIR}/UsewxWidgets.cmake") "${wxWidgets_CURRENT_LIST_DIR}/UsewxWidgets.cmake")
ELSE(EXISTS "${wxWidgets_CURRENT_LIST_DIR}/UsewxWidgets.cmake") else(EXISTS "${wxWidgets_CURRENT_LIST_DIR}/UsewxWidgets.cmake")
SET(wxWidgets_USE_FILE UsewxWidgets) set(wxWidgets_USE_FILE UsewxWidgets)
ENDIF(EXISTS "${wxWidgets_CURRENT_LIST_DIR}/UsewxWidgets.cmake") endif(EXISTS "${wxWidgets_CURRENT_LIST_DIR}/UsewxWidgets.cmake")
#===================================================================== #=====================================================================
#===================================================================== #=====================================================================
IF(WIN32 AND NOT CYGWIN AND NOT MSYS AND NOT CMAKE_HOST_UNIX ) if(WIN32 AND NOT CYGWIN AND NOT MSYS AND NOT CMAKE_HOST_UNIX )
DBG_MSG( "setting win32 style" ) dbg_msg( "setting win32 style" )
SET(wxWidgets_FIND_STYLE "win32") set(wxWidgets_FIND_STYLE "win32")
ELSE() else()
IF(CMAKE_HOST_UNIX OR MSYS) if(CMAKE_HOST_UNIX OR MSYS)
DBG_MSG( "unix style" ) dbg_msg( "unix style" )
SET(wxWidgets_FIND_STYLE "unix") set(wxWidgets_FIND_STYLE "unix")
ENDIF() endif()
ENDIF() endif()
#===================================================================== #=====================================================================
# WIN32_FIND_STYLE # WIN32_FIND_STYLE
#===================================================================== #=====================================================================
IF(wxWidgets_FIND_STYLE STREQUAL "win32") if(wxWidgets_FIND_STYLE STREQUAL "win32")
DBG_MSG("Using win32 path") dbg_msg("Using win32 path")
# Useful common wx libs needed by almost all components. # Useful common wx libs needed by almost all components.
SET(wxWidgets_COMMON_LIBRARIES png tiff jpeg zlib regex expat) set(wxWidgets_COMMON_LIBRARIES png tiff jpeg zlib regex expat)
# DEPRECATED: Use FIND_PACKAGE(wxWidgets COMPONENTS mono) instead. # DEPRECATED: Use find_package(wxWidgets COMPONENTS mono) instead.
IF(NOT wxWidgets_FIND_COMPONENTS) if(NOT wxWidgets_FIND_COMPONENTS)
IF(wxWidgets_USE_MONOLITHIC) if(wxWidgets_USE_MONOLITHIC)
SET(wxWidgets_FIND_COMPONENTS mono) set(wxWidgets_FIND_COMPONENTS mono)
ELSE(wxWidgets_USE_MONOLITHIC) else(wxWidgets_USE_MONOLITHIC)
SET(wxWidgets_FIND_COMPONENTS core base) # this is default set(wxWidgets_FIND_COMPONENTS core base) # this is default
ENDIF(wxWidgets_USE_MONOLITHIC) endif(wxWidgets_USE_MONOLITHIC)
ENDIF(NOT wxWidgets_FIND_COMPONENTS) endif(NOT wxWidgets_FIND_COMPONENTS)
# Add the common (usually required libs) unless # Add the common (usually required libs) unless
# wxWidgets_EXCLUDE_COMMON_LIBRARIES has been set. # wxWidgets_EXCLUDE_COMMON_LIBRARIES has been set.
IF(NOT wxWidgets_EXCLUDE_COMMON_LIBRARIES) if(NOT wxWidgets_EXCLUDE_COMMON_LIBRARIES)
LIST(APPEND wxWidgets_FIND_COMPONENTS list(APPEND wxWidgets_FIND_COMPONENTS
${wxWidgets_COMMON_LIBRARIES}) ${wxWidgets_COMMON_LIBRARIES})
ENDIF(NOT wxWidgets_EXCLUDE_COMMON_LIBRARIES) endif(NOT wxWidgets_EXCLUDE_COMMON_LIBRARIES)
#------------------------------------------------------------------- #-------------------------------------------------------------------
# WIN32: Helper MACROS # WIN32: Helper MACROS
...@@ -244,41 +250,41 @@ IF(wxWidgets_FIND_STYLE STREQUAL "win32") ...@@ -244,41 +250,41 @@ IF(wxWidgets_FIND_STYLE STREQUAL "win32")
# if _CONFIGURATION = mswunivud, then _UNV=univ, _UCD=u _DBG=d # if _CONFIGURATION = mswunivud, then _UNV=univ, _UCD=u _DBG=d
# if _CONFIGURATION = mswu, then _UNV="", _UCD=u _DBG="" # if _CONFIGURATION = mswu, then _UNV="", _UCD=u _DBG=""
# #
MACRO(WX_GET_NAME_COMPONENTS _CONFIGURATION _UNV _UCD _DBG) macro(wx_get_name_components _CONFIGURATION _UNV _UCD _DBG)
STRING(REGEX MATCH "univ" ${_UNV} "${_CONFIGURATION}") string(REGEX MATCH "univ" ${_UNV} "${_CONFIGURATION}")
STRING(REGEX REPLACE "msw.*(u)[d]*$" "u" ${_UCD} "${_CONFIGURATION}") string(REGEX REPLACE "msw.*(u)[d]*$" "u" ${_UCD} "${_CONFIGURATION}")
IF(${_UCD} STREQUAL ${_CONFIGURATION}) if(${_UCD} STREQUAL ${_CONFIGURATION})
SET(${_UCD} "") set(${_UCD} "")
ENDIF(${_UCD} STREQUAL ${_CONFIGURATION}) endif(${_UCD} STREQUAL ${_CONFIGURATION})
STRING(REGEX MATCH "d$" ${_DBG} "${_CONFIGURATION}") string(REGEX MATCH "d$" ${_DBG} "${_CONFIGURATION}")
ENDMACRO(WX_GET_NAME_COMPONENTS) endmacro(wx_get_name_components)
# #
# Find libraries associated to a configuration. # Find libraries associated to a configuration.
# #
MACRO(WX_FIND_LIBS _UNV _UCD _DBG) macro(wx_find_libs _UNV _UCD _DBG)
DBG_MSG_V("m_unv = ${_UNV}") dbg_msg_v("m_unv = ${_UNV}")
DBG_MSG_V("m_ucd = ${_UCD}") dbg_msg_v("m_ucd = ${_UCD}")
DBG_MSG_V("m_dbg = ${_DBG}") dbg_msg_v("m_dbg = ${_DBG}")
# FIXME: What if both regex libs are available. regex should be # FIXME: What if both regex libs are available. regex should be
# found outside the loop and only wx${LIB}${_UCD}${_DBG}. # found outside the loop and only wx${LIB}${_UCD}${_DBG}.
# Find wxWidgets common libraries. # Find wxWidgets common libraries.
FOREACH(LIB ${wxWidgets_COMMON_LIBRARIES} scintilla) foreach(LIB ${wxWidgets_COMMON_LIBRARIES} scintilla)
FIND_LIBRARY(WX_${LIB}${_DBG} find_library(WX_${LIB}${_DBG}
NAMES NAMES
wx${LIB}${_UCD}${_DBG} # for regex wx${LIB}${_UCD}${_DBG} # for regex
wx${LIB}${_DBG} wx${LIB}${_DBG}
PATHS ${WX_LIB_DIR} PATHS ${WX_LIB_DIR}
NO_DEFAULT_PATH NO_DEFAULT_PATH
) )
MARK_AS_ADVANCED(WX_${LIB}${_DBG}) mark_as_advanced(WX_${LIB}${_DBG})
ENDFOREACH(LIB) endforeach(LIB)
DBG_MSG( "WX_LIB_DIR:${WX_LIB_DIR}" ) dbg_msg( "WX_LIB_DIR:${WX_LIB_DIR}" )
# Find wxWidgets multilib base libraries. # Find wxWidgets multilib base libraries.
FIND_LIBRARY(WX_base${_DBG} find_library(WX_base${_DBG}
NAMES NAMES
wxbase31${_UCD}${_DBG} wxbase31${_UCD}${_DBG}
wxbase30${_UCD}${_DBG} wxbase30${_UCD}${_DBG}
...@@ -290,9 +296,9 @@ IF(wxWidgets_FIND_STYLE STREQUAL "win32") ...@@ -290,9 +296,9 @@ IF(wxWidgets_FIND_STYLE STREQUAL "win32")
PATHS ${WX_LIB_DIR} PATHS ${WX_LIB_DIR}
NO_DEFAULT_PATH NO_DEFAULT_PATH
) )
MARK_AS_ADVANCED(WX_base${_DBG}) mark_as_advanced(WX_base${_DBG})
FOREACH(LIB net odbc xml) foreach(LIB net odbc xml)
FIND_LIBRARY(WX_${LIB}${_DBG} find_library(WX_${LIB}${_DBG}
NAMES NAMES
wxbase31${_UCD}${_DBG}_${LIB} wxbase31${_UCD}${_DBG}_${LIB}
wxbase30${_UCD}${_DBG}_${LIB} wxbase30${_UCD}${_DBG}_${LIB}
...@@ -304,11 +310,11 @@ IF(wxWidgets_FIND_STYLE STREQUAL "win32") ...@@ -304,11 +310,11 @@ IF(wxWidgets_FIND_STYLE STREQUAL "win32")
PATHS ${WX_LIB_DIR} PATHS ${WX_LIB_DIR}
NO_DEFAULT_PATH NO_DEFAULT_PATH
) )
MARK_AS_ADVANCED(WX_${LIB}${_DBG}) mark_as_advanced(WX_${LIB}${_DBG})
ENDFOREACH(LIB) endforeach(LIB)
# Find wxWidgets monolithic library. # Find wxWidgets monolithic library.
FIND_LIBRARY(WX_mono${_DBG} find_library(WX_mono${_DBG}
NAMES NAMES
wxmsw${_UNV}31${_UCD}${_DBG} wxmsw${_UNV}31${_UCD}${_DBG}
wxmsw${_UNV}30${_UCD}${_DBG} wxmsw${_UNV}30${_UCD}${_DBG}
...@@ -320,12 +326,12 @@ IF(wxWidgets_FIND_STYLE STREQUAL "win32") ...@@ -320,12 +326,12 @@ IF(wxWidgets_FIND_STYLE STREQUAL "win32")
PATHS ${WX_LIB_DIR} PATHS ${WX_LIB_DIR}
NO_DEFAULT_PATH NO_DEFAULT_PATH
) )
MARK_AS_ADVANCED(WX_mono${_DBG}) mark_as_advanced(WX_mono${_DBG})
# Find wxWidgets multilib libraries. # Find wxWidgets multilib libraries.
FOREACH(LIB core adv aui html media xrc dbgrid gl qa richtext foreach(LIB core adv aui html media xrc dbgrid gl qa richtext
stc ribbon propgrid) stc ribbon propgrid)
FIND_LIBRARY(WX_${LIB}${_DBG} find_library(WX_${LIB}${_DBG}
NAMES NAMES
wxmsw${_UNV}31${_UCD}${_DBG}_${LIB} wxmsw${_UNV}31${_UCD}${_DBG}_${LIB}
wxmsw${_UNV}30${_UCD}${_DBG}_${LIB} wxmsw${_UNV}30${_UCD}${_DBG}_${LIB}
...@@ -337,102 +343,102 @@ IF(wxWidgets_FIND_STYLE STREQUAL "win32") ...@@ -337,102 +343,102 @@ IF(wxWidgets_FIND_STYLE STREQUAL "win32")
PATHS ${WX_LIB_DIR} PATHS ${WX_LIB_DIR}
NO_DEFAULT_PATH NO_DEFAULT_PATH
) )
MARK_AS_ADVANCED(WX_${LIB}${_DBG}) mark_as_advanced(WX_${LIB}${_DBG})
ENDFOREACH(LIB) endforeach(LIB)
ENDMACRO(WX_FIND_LIBS) endmacro(wx_find_libs)
# #
# Clear all library paths, so that FIND_LIBRARY refinds them. # Clear all library paths, so that FIND_LIBRARY refinds them.
# #
# Clear a lib, reset its found flag, and mark as advanced. # Clear a lib, reset its found flag, and mark as advanced.
MACRO(WX_CLEAR_LIB _LIB) macro(wx_clear_lib _LIB)
SET(${_LIB} "${_LIB}-NOTFOUND" CACHE FILEPATH "Cleared." FORCE) set(${_LIB} "${_LIB}-NOTFOUND" CACHE FILEPATH "Cleared." FORCE)
SET(${_LIB}_FOUND FALSE) set(${_LIB}_FOUND FALSE)
MARK_AS_ADVANCED(${_LIB}) mark_as_advanced(${_LIB})
ENDMACRO(WX_CLEAR_LIB) endmacro(wx_clear_lib)
# Clear all debug or release library paths (arguments are "d" or ""). # Clear all debug or release library paths (arguments are "d" or "").
MACRO(WX_CLEAR_ALL_LIBS _DBG) macro(wx_clear_all_libs _DBG)
# Clear wxWidgets common libraries. # Clear wxWidgets common libraries.
FOREACH(LIB ${wxWidgets_COMMON_LIBRARIES} scintilla) foreach(LIB ${wxWidgets_COMMON_LIBRARIES} scintilla)
WX_CLEAR_LIB(WX_${LIB}${_DBG}) wx_clear_lib(WX_${LIB}${_DBG})
ENDFOREACH(LIB) endforeach(LIB)
# Clear wxWidgets multilib base libraries. # Clear wxWidgets multilib base libraries.
WX_CLEAR_LIB(WX_base${_DBG}) wx_clear_lib(WX_base${_DBG})
FOREACH(LIB net odbc xml) foreach(LIB net odbc xml)
WX_CLEAR_LIB(WX_${LIB}${_DBG}) wx_clear_lib(WX_${LIB}${_DBG})
ENDFOREACH(LIB) endforeach(LIB)
# Clear wxWidgets monolithic library. # Clear wxWidgets monolithic library.
WX_CLEAR_LIB(WX_mono${_DBG}) wx_clear_lib(WX_mono${_DBG})
# Clear wxWidgets multilib libraries. # Clear wxWidgets multilib libraries.
FOREACH(LIB core adv aui html media xrc dbgrid gl qa richtext foreach(LIB core adv aui html media xrc dbgrid gl qa richtext
stc ribbon propgrid) stc ribbon propgrid)
WX_CLEAR_LIB(WX_${LIB}${_DBG}) wx_clear_lib(WX_${LIB}${_DBG})
ENDFOREACH(LIB) endforeach(LIB)
ENDMACRO(WX_CLEAR_ALL_LIBS) endmacro(wx_clear_all_libs)
# Clear all wxWidgets debug libraries. # Clear all wxWidgets debug libraries.
MACRO(WX_CLEAR_ALL_DBG_LIBS) macro(wx_clear_all_dbg_libs)
WX_CLEAR_ALL_LIBS("d") wx_clear_all_libs("d")
ENDMACRO(WX_CLEAR_ALL_DBG_LIBS) endmacro(wx_clear_all_dbg_libs)
# Clear all wxWidgets release libraries. # Clear all wxWidgets release libraries.
MACRO(WX_CLEAR_ALL_REL_LIBS) macro(wx_clear_all_rel_libs)
WX_CLEAR_ALL_LIBS("") wx_clear_all_libs("")
ENDMACRO(WX_CLEAR_ALL_REL_LIBS) endmacro(wx_clear_all_rel_libs)
# #
# Set the wxWidgets_LIBRARIES variable. # Set the wxWidgets_LIBRARIES variable.
# Also, Sets output variable wxWidgets_FOUND to FALSE if it fails. # Also, Sets output variable wxWidgets_FOUND to FALSE if it fails.
# #
MACRO(WX_SET_LIBRARIES _LIBS _DBG) macro(wx_set_libraries _LIBS _DBG)
DBG_MSG_V("Looking for ${${_LIBS}}") dbg_msg_v("Looking for ${${_LIBS}}")
IF(WX_USE_REL_AND_DBG) if(WX_USE_REL_AND_DBG)
FOREACH(LIB ${${_LIBS}}) foreach(LIB ${${_LIBS}})
DBG_MSG_V("Searching for ${LIB} and ${LIB}d") dbg_msg_v("Searching for ${LIB} and ${LIB}d")
DBG_MSG_V("WX_${LIB} : ${WX_${LIB}}") dbg_msg_v("WX_${LIB} : ${WX_${LIB}}")
DBG_MSG_V("WX_${LIB}d : ${WX_${LIB}d}") dbg_msg_v("WX_${LIB}d : ${WX_${LIB}d}")
IF(WX_${LIB} AND WX_${LIB}d) if(WX_${LIB} AND WX_${LIB}d)
DBG_MSG_V("Found ${LIB} and ${LIB}d") dbg_msg_v("Found ${LIB} and ${LIB}d")
LIST(APPEND wxWidgets_LIBRARIES list(APPEND wxWidgets_LIBRARIES
debug ${WX_${LIB}d} optimized ${WX_${LIB}} debug ${WX_${LIB}d} optimized ${WX_${LIB}}
) )
ELSE(WX_${LIB} AND WX_${LIB}d) else(WX_${LIB} AND WX_${LIB}d)
DBG_MSG_V("- not found due to missing WX_${LIB}=${WX_${LIB}} or WX_${LIB}d=${WX_${LIB}d}") dbg_msg_v("- not found due to missing WX_${LIB}=${WX_${LIB}} or WX_${LIB}d=${WX_${LIB}d}")
SET(wxWidgets_FOUND FALSE) set(wxWidgets_FOUND FALSE)
ENDIF(WX_${LIB} AND WX_${LIB}d) endif(WX_${LIB} AND WX_${LIB}d)
ENDFOREACH(LIB) endforeach(LIB)
ELSE(WX_USE_REL_AND_DBG) else(WX_USE_REL_AND_DBG)
FOREACH(LIB ${${_LIBS}}) foreach(LIB ${${_LIBS}})
DBG_MSG_V("Searching for ${LIB}${_DBG}") dbg_msg_v("Searching for ${LIB}${_DBG}")
DBG_MSG_V("WX_${LIB}${_DBG} : ${WX_${LIB}${_DBG}}") dbg_msg_v("WX_${LIB}${_DBG} : ${WX_${LIB}${_DBG}}")
IF(WX_${LIB}${_DBG}) if(WX_${LIB}${_DBG})
DBG_MSG_V("Found ${LIB}${_DBG}") dbg_msg_v("Found ${LIB}${_DBG}")
LIST(APPEND wxWidgets_LIBRARIES ${WX_${LIB}${_DBG}}) list(APPEND wxWidgets_LIBRARIES ${WX_${LIB}${_DBG}})
ELSE(WX_${LIB}${_DBG}) else(WX_${LIB}${_DBG})
DBG_MSG_V( dbg_msg_v(
"- not found due to missing WX_${LIB}${_DBG}=${WX_${LIB}${_DBG}}") "- not found due to missing WX_${LIB}${_DBG}=${WX_${LIB}${_DBG}}")
SET(wxWidgets_FOUND FALSE) set(wxWidgets_FOUND FALSE)
ENDIF(WX_${LIB}${_DBG}) endif(WX_${LIB}${_DBG})
ENDFOREACH(LIB) endforeach(LIB)
ENDIF(WX_USE_REL_AND_DBG) endif(WX_USE_REL_AND_DBG)
DBG_MSG_V("OpenGL") dbg_msg_v("OpenGL")
LIST(FIND ${_LIBS} gl WX_USE_GL) list(FIND ${_LIBS} gl WX_USE_GL)
IF(NOT WX_USE_GL EQUAL -1) if(NOT WX_USE_GL EQUAL -1)
DBG_MSG_V("- is required.") dbg_msg_v("- is required.")
LIST(APPEND wxWidgets_LIBRARIES opengl32 glu32) list(APPEND wxWidgets_LIBRARIES opengl32 glu32)
ENDIF(NOT WX_USE_GL EQUAL -1) endif(NOT WX_USE_GL EQUAL -1)
LIST(APPEND wxWidgets_LIBRARIES winmm comctl32 rpcrt4 wsock32) list(APPEND wxWidgets_LIBRARIES winmm comctl32 rpcrt4 wsock32)
ENDMACRO(WX_SET_LIBRARIES) endmacro(wx_set_libraries)
#------------------------------------------------------------------- #-------------------------------------------------------------------
# WIN32: Start actual work. # WIN32: Start actual work.
#------------------------------------------------------------------- #-------------------------------------------------------------------
# Look for an installation tree. # Look for an installation tree.
FIND_PATH(wxWidgets_ROOT_DIR find_path(wxWidgets_ROOT_DIR
NAMES include/wx/wx.h NAMES include/wx/wx.h
PATHS PATHS
$ENV{wxWidgets_ROOT_DIR} $ENV{wxWidgets_ROOT_DIR}
...@@ -442,7 +448,7 @@ IF(wxWidgets_FIND_STYLE STREQUAL "win32") ...@@ -442,7 +448,7 @@ IF(wxWidgets_FIND_STYLE STREQUAL "win32")
D:/ D:/
$ENV{ProgramFiles} $ENV{ProgramFiles}
PATH_SUFFIXES PATH_SUFFIXES
wxWidgets-3.1.0 wxWidgets-3.0.1
wxWidgets-3.0.0 wxWidgets-3.0.0
wxWidgets-2.9.5 wxWidgets-2.9.5
wxWidgets-2.9.4 wxWidgets-2.9.4
...@@ -479,30 +485,30 @@ IF(wxWidgets_FIND_STYLE STREQUAL "win32") ...@@ -479,30 +485,30 @@ IF(wxWidgets_FIND_STYLE STREQUAL "win32")
) )
# If wxWidgets_ROOT_DIR changed, clear lib dir. # If wxWidgets_ROOT_DIR changed, clear lib dir.
IF(NOT WX_ROOT_DIR STREQUAL wxWidgets_ROOT_DIR) if(NOT WX_ROOT_DIR STREQUAL wxWidgets_ROOT_DIR)
DBG_MSG( "WX_ROOT_DIR != wxWidgets_ROOT_DIR" ) dbg_msg( "WX_ROOT_DIR != wxWidgets_ROOT_DIR" )
SET(WX_ROOT_DIR ${wxWidgets_ROOT_DIR} set(WX_ROOT_DIR ${wxWidgets_ROOT_DIR}
CACHE INTERNAL "wxWidgets_ROOT_DIR") CACHE INTERNAL "wxWidgets_ROOT_DIR")
SET(wxWidgets_LIB_DIR "wxWidgets_LIB_DIR-NOTFOUND" set(wxWidgets_LIB_DIR "wxWidgets_LIB_DIR-NOTFOUND"
CACHE PATH "Cleared." FORCE) CACHE PATH "Cleared." FORCE)
ENDIF(NOT WX_ROOT_DIR STREQUAL wxWidgets_ROOT_DIR) endif(NOT WX_ROOT_DIR STREQUAL wxWidgets_ROOT_DIR)
IF(WX_ROOT_DIR) if(WX_ROOT_DIR)
DBG_MSG( "WX_ROOT_DIR == wxWidgets_ROOT_DIR" ) dbg_msg( "WX_ROOT_DIR == wxWidgets_ROOT_DIR" )
# Select one default tree inside the already determined wx tree. # Select one default tree inside the already determined wx tree.
# Prefer static/shared order usually consistent with build # Prefer static/shared order usually consistent with build
# settings. # settings.
IF(MINGW) if(MINGW)
DBG_MSG( "MINGW" ) dbg_msg( "MINGW" )
SET(WX_LIB_DIR_PREFIX gcc) set(WX_LIB_DIR_PREFIX gcc)
ELSE(MINGW) else(MINGW)
SET(WX_LIB_DIR_PREFIX vc) set(WX_LIB_DIR_PREFIX vc)
ENDIF(MINGW) endif(MINGW)
IF(BUILD_SHARED_LIBS) if(BUILD_SHARED_LIBS)
DBG_MSG( "BUILD_SHARED_LIBS" ) dbg_msg( "BUILD_SHARED_LIBS" )
FIND_PATH(wxWidgets_LIB_DIR find_path(wxWidgets_LIB_DIR
NAMES NAMES
msw/wx/setup.h msw/wx/setup.h
mswd/wx/setup.h mswd/wx/setup.h
...@@ -518,9 +524,9 @@ IF(wxWidgets_FIND_STYLE STREQUAL "win32") ...@@ -518,9 +524,9 @@ IF(wxWidgets_FIND_STYLE STREQUAL "win32")
DOC "Path to wxWidgets libraries?" DOC "Path to wxWidgets libraries?"
NO_DEFAULT_PATH NO_DEFAULT_PATH
) )
ELSE(BUILD_SHARED_LIBS) else(BUILD_SHARED_LIBS)
DBG_MSG( "!BUILD_SHARED_LIBS WX_LIB_DIR:${WX_LIB_DIR}" ) dbg_msg( "!BUILD_SHARED_LIBS WX_LIB_DIR:${WX_LIB_DIR}" )
FIND_PATH(wxWidgets_LIB_DIR find_path(wxWidgets_LIB_DIR
NAMES NAMES
msw/wx/setup.h msw/wx/setup.h
mswd/wx/setup.h mswd/wx/setup.h
...@@ -536,111 +542,111 @@ IF(wxWidgets_FIND_STYLE STREQUAL "win32") ...@@ -536,111 +542,111 @@ IF(wxWidgets_FIND_STYLE STREQUAL "win32")
DOC "Path to wxWidgets libraries?" DOC "Path to wxWidgets libraries?"
NO_DEFAULT_PATH NO_DEFAULT_PATH
) )
ENDIF(BUILD_SHARED_LIBS) endif(BUILD_SHARED_LIBS)
# If wxWidgets_LIB_DIR changed, clear all libraries. # If wxWidgets_LIB_DIR changed, clear all libraries.
IF(NOT WX_LIB_DIR STREQUAL wxWidgets_LIB_DIR) if(NOT WX_LIB_DIR STREQUAL wxWidgets_LIB_DIR)
SET(WX_LIB_DIR ${wxWidgets_LIB_DIR} CACHE INTERNAL "wxWidgets_LIB_DIR") set(WX_LIB_DIR ${wxWidgets_LIB_DIR} CACHE INTERNAL "wxWidgets_LIB_DIR")
WX_CLEAR_ALL_DBG_LIBS() wx_clear_all_dbg_libs()
WX_CLEAR_ALL_REL_LIBS() wx_clear_all_rel_libs()
ENDIF(NOT WX_LIB_DIR STREQUAL wxWidgets_LIB_DIR) endif(NOT WX_LIB_DIR STREQUAL wxWidgets_LIB_DIR)
IF(WX_LIB_DIR) if(WX_LIB_DIR)
# If building shared libs, define WXUSINGDLL to use dllimport. # If building shared libs, define WXUSINGDLL to use dllimport.
IF(WX_LIB_DIR MATCHES ".*[dD][lL][lL].*") if(WX_LIB_DIR MATCHES ".*[dD][lL][lL].*")
SET(wxWidgets_DEFINITIONS WXUSINGDLL) set(wxWidgets_DEFINITIONS WXUSINGDLL)
DBG_MSG_V("detected SHARED/DLL tree WX_LIB_DIR=${WX_LIB_DIR}") dbg_msg_v("detected SHARED/DLL tree WX_LIB_DIR=${WX_LIB_DIR}")
ENDIF(WX_LIB_DIR MATCHES ".*[dD][lL][lL].*") endif(WX_LIB_DIR MATCHES ".*[dD][lL][lL].*")
# Search for available configuration types. # Search for available configuration types.
FOREACH(CFG mswunivud mswunivd mswud mswd mswunivu mswuniv mswu msw) foreach(CFG mswunivud mswunivd mswud mswd mswunivu mswuniv mswu msw)
SET(WX_${CFG}_FOUND FALSE) set(WX_${CFG}_FOUND FALSE)
IF(EXISTS ${WX_LIB_DIR}/${CFG}) if(EXISTS ${WX_LIB_DIR}/${CFG})
LIST(APPEND WX_CONFIGURATION_LIST ${CFG}) list(APPEND WX_CONFIGURATION_LIST ${CFG})
SET(WX_${CFG}_FOUND TRUE) set(WX_${CFG}_FOUND TRUE)
SET(WX_CONFIGURATION ${CFG}) set(WX_CONFIGURATION ${CFG})
ENDIF(EXISTS ${WX_LIB_DIR}/${CFG}) endif(EXISTS ${WX_LIB_DIR}/${CFG})
ENDFOREACH(CFG) endforeach(CFG)
DBG_MSG_V("WX_CONFIGURATION_LIST=${WX_CONFIGURATION_LIST}") dbg_msg_v("WX_CONFIGURATION_LIST=${WX_CONFIGURATION_LIST}")
IF(WX_CONFIGURATION) if(WX_CONFIGURATION)
SET(wxWidgets_FOUND TRUE) set(wxWidgets_FOUND TRUE)
# If the selected configuration wasn't found force the default # If the selected configuration wasn't found force the default
# one. Otherwise, use it but still force a refresh for # one. Otherwise, use it but still force a refresh for
# updating the doc string with the current list of available # updating the doc string with the current list of available
# configurations. # configurations.
IF(NOT WX_${wxWidgets_CONFIGURATION}_FOUND) if(NOT WX_${wxWidgets_CONFIGURATION}_FOUND)
SET(wxWidgets_CONFIGURATION ${WX_CONFIGURATION} CACHE STRING set(wxWidgets_CONFIGURATION ${WX_CONFIGURATION} CACHE STRING
"Set wxWidgets configuration (${WX_CONFIGURATION_LIST})" FORCE) "Set wxWidgets configuration (${WX_CONFIGURATION_LIST})" FORCE)
ELSE(NOT WX_${wxWidgets_CONFIGURATION}_FOUND) else(NOT WX_${wxWidgets_CONFIGURATION}_FOUND)
SET(wxWidgets_CONFIGURATION ${wxWidgets_CONFIGURATION} CACHE STRING set(wxWidgets_CONFIGURATION ${wxWidgets_CONFIGURATION} CACHE STRING
"Set wxWidgets configuration (${WX_CONFIGURATION_LIST})" FORCE) "Set wxWidgets configuration (${WX_CONFIGURATION_LIST})" FORCE)
ENDIF(NOT WX_${wxWidgets_CONFIGURATION}_FOUND) endif(NOT WX_${wxWidgets_CONFIGURATION}_FOUND)
# If release config selected, and both release/debug exist. # If release config selected, and both release/debug exist.
IF(WX_${wxWidgets_CONFIGURATION}d_FOUND) if(WX_${wxWidgets_CONFIGURATION}d_FOUND)
OPTION(wxWidgets_USE_REL_AND_DBG OPTION(wxWidgets_USE_REL_AND_DBG
"Use release and debug configurations?" TRUE) "Use release and debug configurations?" TRUE)
SET(WX_USE_REL_AND_DBG ${wxWidgets_USE_REL_AND_DBG}) set(WX_USE_REL_AND_DBG ${wxWidgets_USE_REL_AND_DBG})
ELSE(WX_${wxWidgets_CONFIGURATION}d_FOUND) else(WX_${wxWidgets_CONFIGURATION}d_FOUND)
# If the option exists (already in cache), force it false. # If the option exists (already in cache), force it false.
IF(wxWidgets_USE_REL_AND_DBG) if(wxWidgets_USE_REL_AND_DBG)
SET(wxWidgets_USE_REL_AND_DBG FALSE CACHE BOOL set(wxWidgets_USE_REL_AND_DBG FALSE CACHE BOOL
"No ${wxWidgets_CONFIGURATION}d found." FORCE) "No ${wxWidgets_CONFIGURATION}d found." FORCE)
ENDIF(wxWidgets_USE_REL_AND_DBG) endif(wxWidgets_USE_REL_AND_DBG)
SET(WX_USE_REL_AND_DBG FALSE) set(WX_USE_REL_AND_DBG FALSE)
ENDIF(WX_${wxWidgets_CONFIGURATION}d_FOUND) endif(WX_${wxWidgets_CONFIGURATION}d_FOUND)
# Get configuration parameters from the name. # Get configuration parameters from the name.
WX_GET_NAME_COMPONENTS(${wxWidgets_CONFIGURATION} UNV UCD DBG) wx_get_name_components(${wxWidgets_CONFIGURATION} UNV UCD DBG)
# Set wxWidgets lib setup include directory. # Set wxWidgets lib setup include directory.
IF(EXISTS ${WX_LIB_DIR}/${wxWidgets_CONFIGURATION}/wx/setup.h) if(EXISTS ${WX_LIB_DIR}/${wxWidgets_CONFIGURATION}/wx/setup.h)
SET(wxWidgets_INCLUDE_DIRS set(wxWidgets_INCLUDE_DIRS
${WX_LIB_DIR}/${wxWidgets_CONFIGURATION}) ${WX_LIB_DIR}/${wxWidgets_CONFIGURATION})
ELSE(EXISTS ${WX_LIB_DIR}/${wxWidgets_CONFIGURATION}/wx/setup.h) else(EXISTS ${WX_LIB_DIR}/${wxWidgets_CONFIGURATION}/wx/setup.h)
DBG_MSG("wxWidgets_FOUND FALSE because ${WX_LIB_DIR}/${wxWidgets_CONFIGURATION}/wx/setup.h does not exists.") dbg_msg("wxWidgets_FOUND FALSE because ${WX_LIB_DIR}/${wxWidgets_CONFIGURATION}/wx/setup.h does not exists.")
SET(wxWidgets_FOUND FALSE) set(wxWidgets_FOUND FALSE)
ENDIF(EXISTS ${WX_LIB_DIR}/${wxWidgets_CONFIGURATION}/wx/setup.h) endif(EXISTS ${WX_LIB_DIR}/${wxWidgets_CONFIGURATION}/wx/setup.h)
# Set wxWidgets main include directory. # Set wxWidgets main include directory.
IF(EXISTS ${WX_ROOT_DIR}/include/wx/wx.h) if(EXISTS ${WX_ROOT_DIR}/include/wx/wx.h)
LIST(APPEND wxWidgets_INCLUDE_DIRS ${WX_ROOT_DIR}/include) list(APPEND wxWidgets_INCLUDE_DIRS ${WX_ROOT_DIR}/include)
ELSE(EXISTS ${WX_ROOT_DIR}/include/wx/wx.h) else(EXISTS ${WX_ROOT_DIR}/include/wx/wx.h)
DBG_MSG("wxWidgets_FOUND FALSE because WX_ROOT_DIR=${WX_ROOT_DIR} has no ${WX_ROOT_DIR}/include/wx/wx.h") dbg_msg("wxWidgets_FOUND FALSE because WX_ROOT_DIR=${WX_ROOT_DIR} has no ${WX_ROOT_DIR}/include/wx/wx.h")
SET(wxWidgets_FOUND FALSE) set(wxWidgets_FOUND FALSE)
ENDIF(EXISTS ${WX_ROOT_DIR}/include/wx/wx.h) endif(EXISTS ${WX_ROOT_DIR}/include/wx/wx.h)
# Find wxWidgets libraries. # Find wxWidgets libraries.
WX_FIND_LIBS("${UNV}" "${UCD}" "${DBG}") wx_find_libs("${UNV}" "${UCD}" "${DBG}")
IF(WX_USE_REL_AND_DBG) if(WX_USE_REL_AND_DBG)
WX_FIND_LIBS("${UNV}" "${UCD}" "d") wx_find_libs("${UNV}" "${UCD}" "d")
ENDIF(WX_USE_REL_AND_DBG) endif(WX_USE_REL_AND_DBG)
# Settings for requested libs (i.e., include dir, libraries, etc.). # Settings for requested libs (i.e., include dir, libraries, etc.).
WX_SET_LIBRARIES(wxWidgets_FIND_COMPONENTS "${DBG}") wx_set_libraries(wxWidgets_FIND_COMPONENTS "${DBG}")
# Add necessary definitions for unicode builds # Add necessary definitions for unicode builds
IF("${UCD}" STREQUAL "u") if("${UCD}" STREQUAL "u")
LIST(APPEND wxWidgets_DEFINITIONS UNICODE _UNICODE) list(APPEND wxWidgets_DEFINITIONS UNICODE _UNICODE)
ENDIF("${UCD}" STREQUAL "u") endif("${UCD}" STREQUAL "u")
# Add necessary definitions for debug builds # Add necessary definitions for debug builds
SET(wxWidgets_DEFINITIONS_DEBUG _DEBUG __WXDEBUG__) set(wxWidgets_DEFINITIONS_DEBUG _DEBUG __WXDEBUG__)
ENDIF(WX_CONFIGURATION) endif(WX_CONFIGURATION)
ENDIF(WX_LIB_DIR) endif(WX_LIB_DIR)
ENDIF(WX_ROOT_DIR) endif(WX_ROOT_DIR)
#===================================================================== #=====================================================================
# UNIX_FIND_STYLE # UNIX_FIND_STYLE
#===================================================================== #=====================================================================
ELSE(wxWidgets_FIND_STYLE STREQUAL "win32") else(wxWidgets_FIND_STYLE STREQUAL "win32")
DBG_MSG("NOT win32 path") dbg_msg("NOT win32 path")
IF(wxWidgets_FIND_STYLE STREQUAL "unix") if(wxWidgets_FIND_STYLE STREQUAL "unix")
DBG_MSG("unix find style") dbg_msg("unix find style")
#----------------------------------------------------------------- #-----------------------------------------------------------------
# UNIX: Helper MACROS # UNIX: Helper MACROS
...@@ -648,221 +654,255 @@ ELSE(wxWidgets_FIND_STYLE STREQUAL "win32") ...@@ -648,221 +654,255 @@ ELSE(wxWidgets_FIND_STYLE STREQUAL "win32")
# #
# Set the default values based on "wx-config --selected-config". # Set the default values based on "wx-config --selected-config".
# #
MACRO(WX_CONFIG_SELECT_GET_DEFAULT) macro(wx_config_select_get_default)
EXECUTE_PROCESS( execute_process(
COMMAND sh "${wxWidgets_CONFIG_EXECUTABLE}" COMMAND sh "${wxWidgets_CONFIG_EXECUTABLE}"
${wxWidgets_CONFIG_OPTIONS} --selected-config ${wxWidgets_CONFIG_OPTIONS} --selected-config
OUTPUT_VARIABLE _wx_selected_config OUTPUT_VARIABLE _wx_selected_config
RESULT_VARIABLE _wx_result RESULT_VARIABLE _wx_result
ERROR_QUIET ERROR_QUIET
) )
IF(_wx_result EQUAL 0) if(_wx_result EQUAL 0)
FOREACH(_opt_name debug static unicode universal) foreach(_opt_name debug static unicode universal)
STRING(TOUPPER ${_opt_name} _upper_opt_name) string(TOUPPER ${_opt_name} _upper_opt_name)
IF(_wx_selected_config MATCHES ".*${_opt_name}.*") if(_wx_selected_config MATCHES ".*${_opt_name}.*")
SET(wxWidgets_DEFAULT_${_upper_opt_name} ON) set(wxWidgets_DEFAULT_${_upper_opt_name} ON)
ELSE(_wx_selected_config MATCHES ".*${_opt_name}.*") else(_wx_selected_config MATCHES ".*${_opt_name}.*")
SET(wxWidgets_DEFAULT_${_upper_opt_name} OFF) set(wxWidgets_DEFAULT_${_upper_opt_name} OFF)
ENDIF(_wx_selected_config MATCHES ".*${_opt_name}.*") endif(_wx_selected_config MATCHES ".*${_opt_name}.*")
ENDFOREACH(_opt_name) endforeach(_opt_name)
ELSE(_wx_result EQUAL 0) else(_wx_result EQUAL 0)
FOREACH(_upper_opt_name DEBUG STATIC UNICODE UNIVERSAL) foreach(_upper_opt_name DEBUG STATIC UNICODE UNIVERSAL)
SET(wxWidgets_DEFAULT_${_upper_opt_name} OFF) set(wxWidgets_DEFAULT_${_upper_opt_name} OFF)
ENDFOREACH(_upper_opt_name) endforeach(_upper_opt_name)
ENDIF(_wx_result EQUAL 0) endif(_wx_result EQUAL 0)
ENDMACRO(WX_CONFIG_SELECT_GET_DEFAULT) endmacro(wx_config_select_get_default)
# #
# Query a boolean configuration option to determine if the system # Query a boolean configuration option to determine if the system
# has both builds available. If so, provide the selection option # has both builds available. If so, provide the selection option
# to the user. # to the user.
# #
MACRO(WX_CONFIG_SELECT_QUERY_BOOL _OPT_NAME _OPT_HELP) macro(wx_config_select_query_bool _OPT_NAME _OPT_HELP)
EXECUTE_PROCESS( execute_process(
COMMAND sh "${wxWidgets_CONFIG_EXECUTABLE}" COMMAND sh "${wxWidgets_CONFIG_EXECUTABLE}"
${wxWidgets_CONFIG_OPTIONS} --${_OPT_NAME}=yes ${wxWidgets_CONFIG_OPTIONS} --${_OPT_NAME}=yes
RESULT_VARIABLE _wx_result_yes RESULT_VARIABLE _wx_result_yes
OUTPUT_QUIET OUTPUT_QUIET
ERROR_QUIET ERROR_QUIET
) )
EXECUTE_PROCESS( execute_process(
COMMAND sh "${wxWidgets_CONFIG_EXECUTABLE}" COMMAND sh "${wxWidgets_CONFIG_EXECUTABLE}"
${wxWidgets_CONFIG_OPTIONS} --${_OPT_NAME}=no ${wxWidgets_CONFIG_OPTIONS} --${_OPT_NAME}=no
RESULT_VARIABLE _wx_result_no RESULT_VARIABLE _wx_result_no
OUTPUT_QUIET OUTPUT_QUIET
ERROR_QUIET ERROR_QUIET
) )
STRING(TOUPPER ${_OPT_NAME} _UPPER_OPT_NAME) string(TOUPPER ${_OPT_NAME} _UPPER_OPT_NAME)
IF(_wx_result_yes EQUAL 0 AND _wx_result_no EQUAL 0) if(_wx_result_yes EQUAL 0 AND _wx_result_no EQUAL 0)
OPTION(wxWidgets_USE_${_UPPER_OPT_NAME} OPTION(wxWidgets_USE_${_UPPER_OPT_NAME}
${_OPT_HELP} ${wxWidgets_DEFAULT_${_UPPER_OPT_NAME}}) ${_OPT_HELP} ${wxWidgets_DEFAULT_${_UPPER_OPT_NAME}})
ELSE(_wx_result_yes EQUAL 0 AND _wx_result_no EQUAL 0) else(_wx_result_yes EQUAL 0 AND _wx_result_no EQUAL 0)
# If option exists (already in cache), force to available one. # If option exists (already in cache), force to available one.
IF(DEFINED wxWidgets_USE_${_UPPER_OPT_NAME}) if(DEFINED wxWidgets_USE_${_UPPER_OPT_NAME})
IF(_wx_result_yes EQUAL 0) if(_wx_result_yes EQUAL 0)
SET(wxWidgets_USE_${_UPPER_OPT_NAME} ON CACHE BOOL ${_OPT_HELP} FORCE) set(wxWidgets_USE_${_UPPER_OPT_NAME} ON CACHE BOOL ${_OPT_HELP} FORCE)
ELSE(_wx_result_yes EQUAL 0) else(_wx_result_yes EQUAL 0)
SET(wxWidgets_USE_${_UPPER_OPT_NAME} OFF CACHE BOOL ${_OPT_HELP} FORCE) set(wxWidgets_USE_${_UPPER_OPT_NAME} OFF CACHE BOOL ${_OPT_HELP} FORCE)
ENDIF(_wx_result_yes EQUAL 0) endif(_wx_result_yes EQUAL 0)
ENDIF(DEFINED wxWidgets_USE_${_UPPER_OPT_NAME}) endif(DEFINED wxWidgets_USE_${_UPPER_OPT_NAME})
ENDIF(_wx_result_yes EQUAL 0 AND _wx_result_no EQUAL 0) endif(_wx_result_yes EQUAL 0 AND _wx_result_no EQUAL 0)
ENDMACRO(WX_CONFIG_SELECT_QUERY_BOOL) endmacro(wx_config_select_query_bool)
# #
# Set wxWidgets_SELECT_OPTIONS to wx-config options for selecting # Set wxWidgets_SELECT_OPTIONS to wx-config options for selecting
# among multiple builds. # among multiple builds.
# #
MACRO(WX_CONFIG_SELECT_SET_OPTIONS) macro(wx_config_select_set_options)
SET(wxWidgets_SELECT_OPTIONS ${wxWidgets_CONFIG_OPTIONS}) set(wxWidgets_SELECT_OPTIONS ${wxWidgets_CONFIG_OPTIONS})
FOREACH(_opt_name debug static unicode universal) foreach(_opt_name debug static unicode universal)
STRING(TOUPPER ${_opt_name} _upper_opt_name) string(TOUPPER ${_opt_name} _upper_opt_name)
IF(DEFINED wxWidgets_USE_${_upper_opt_name}) if(DEFINED wxWidgets_USE_${_upper_opt_name})
IF(wxWidgets_USE_${_upper_opt_name}) if(wxWidgets_USE_${_upper_opt_name})
LIST(APPEND wxWidgets_SELECT_OPTIONS --${_opt_name}=yes) list(APPEND wxWidgets_SELECT_OPTIONS --${_opt_name}=yes)
ELSE(wxWidgets_USE_${_upper_opt_name}) else(wxWidgets_USE_${_upper_opt_name})
LIST(APPEND wxWidgets_SELECT_OPTIONS --${_opt_name}=no) list(APPEND wxWidgets_SELECT_OPTIONS --${_opt_name}=no)
ENDIF(wxWidgets_USE_${_upper_opt_name}) endif(wxWidgets_USE_${_upper_opt_name})
ENDIF(DEFINED wxWidgets_USE_${_upper_opt_name}) endif(DEFINED wxWidgets_USE_${_upper_opt_name})
ENDFOREACH(_opt_name) endforeach(_opt_name)
ENDMACRO(WX_CONFIG_SELECT_SET_OPTIONS) endmacro(wx_config_select_set_options)
#----------------------------------------------------------------- #-----------------------------------------------------------------
# UNIX: Start actual work. # UNIX: Start actual work.
#----------------------------------------------------------------- #-----------------------------------------------------------------
# Support cross-compiling, only search in the target platform. # Support cross-compiling, only search in the target platform.
FIND_PROGRAM(wxWidgets_CONFIG_EXECUTABLE wx-config find_program(wxWidgets_CONFIG_EXECUTABLE wx-config
ONLY_CMAKE_FIND_ROOT_PATH ONLY_CMAKE_FIND_ROOT_PATH
) )
IF(wxWidgets_CONFIG_EXECUTABLE) if(wxWidgets_CONFIG_EXECUTABLE)
SET(wxWidgets_FOUND TRUE) set(wxWidgets_FOUND TRUE)
# get defaults based on "wx-config --selected-config" # get defaults based on "wx-config --selected-config"
WX_CONFIG_SELECT_GET_DEFAULT() wx_config_select_get_default()
# for each option: if both builds are available, provide option # for each option: if both builds are available, provide option
WX_CONFIG_SELECT_QUERY_BOOL(debug "Use debug build?") wx_config_select_query_bool(debug "Use debug build?")
WX_CONFIG_SELECT_QUERY_BOOL(unicode "Use unicode build?") wx_config_select_query_bool(unicode "Use unicode build?")
WX_CONFIG_SELECT_QUERY_BOOL(universal "Use universal build?") wx_config_select_query_bool(universal "Use universal build?")
WX_CONFIG_SELECT_QUERY_BOOL(static "Link libraries statically?") wx_config_select_query_bool(static "Link libraries statically?")
# process selection to set wxWidgets_SELECT_OPTIONS # process selection to set wxWidgets_SELECT_OPTIONS
WX_CONFIG_SELECT_SET_OPTIONS() wx_config_select_set_options()
DBG_MSG("wxWidgets_SELECT_OPTIONS=${wxWidgets_SELECT_OPTIONS}") dbg_msg("wxWidgets_SELECT_OPTIONS=${wxWidgets_SELECT_OPTIONS}")
# run the wx-config program to get cxxflags # run the wx-config program to get cxxflags
EXECUTE_PROCESS( execute_process(
COMMAND sh "${wxWidgets_CONFIG_EXECUTABLE}" COMMAND sh "${wxWidgets_CONFIG_EXECUTABLE}"
${wxWidgets_SELECT_OPTIONS} --cxxflags ${wxWidgets_SELECT_OPTIONS} --cxxflags
OUTPUT_VARIABLE wxWidgets_CXX_FLAGS OUTPUT_VARIABLE wxWidgets_CXX_FLAGS
RESULT_VARIABLE RET RESULT_VARIABLE RET
ERROR_QUIET ERROR_QUIET
) )
IF(RET EQUAL 0) if(RET EQUAL 0)
STRING(STRIP "${wxWidgets_CXX_FLAGS}" wxWidgets_CXX_FLAGS) string(STRIP "${wxWidgets_CXX_FLAGS}" wxWidgets_CXX_FLAGS)
SEPARATE_ARGUMENTS(wxWidgets_CXX_FLAGS) separate_arguments(wxWidgets_CXX_FLAGS)
DBG_MSG_V("wxWidgets_CXX_FLAGS=${wxWidgets_CXX_FLAGS}") dbg_msg_v("wxWidgets_CXX_FLAGS=${wxWidgets_CXX_FLAGS}")
# parse definitions from cxxflags; # parse definitions from cxxflags;
# drop -D* from CXXFLAGS and the -D prefix # drop -D* from CXXFLAGS and the -D prefix
STRING(REGEX MATCHALL "-D[^;]+" string(REGEX MATCHALL "-D[^;]+"
wxWidgets_DEFINITIONS "${wxWidgets_CXX_FLAGS}") wxWidgets_DEFINITIONS "${wxWidgets_CXX_FLAGS}")
STRING(REGEX REPLACE "-D[^;]+(;|$)" "" string(REGEX REPLACE "-D[^;]+(;|$)" ""
wxWidgets_CXX_FLAGS "${wxWidgets_CXX_FLAGS}") wxWidgets_CXX_FLAGS "${wxWidgets_CXX_FLAGS}")
STRING(REGEX REPLACE ";$" "" string(REGEX REPLACE ";$" ""
wxWidgets_CXX_FLAGS "${wxWidgets_CXX_FLAGS}") wxWidgets_CXX_FLAGS "${wxWidgets_CXX_FLAGS}")
STRING(REPLACE "-D" "" string(REPLACE "-D" ""
wxWidgets_DEFINITIONS "${wxWidgets_DEFINITIONS}") wxWidgets_DEFINITIONS "${wxWidgets_DEFINITIONS}")
# parse include dirs from cxxflags; drop -I prefix # parse include dirs from cxxflags; drop -I prefix
STRING(REGEX MATCHALL "-I[^;]+" string(REGEX MATCHALL "-I[^;]+"
wxWidgets_INCLUDE_DIRS "${wxWidgets_CXX_FLAGS}") wxWidgets_INCLUDE_DIRS "${wxWidgets_CXX_FLAGS}")
STRING(REGEX REPLACE "-I[^;]+;" "" string(REGEX REPLACE "-I[^;]+;" ""
wxWidgets_CXX_FLAGS "${wxWidgets_CXX_FLAGS}") wxWidgets_CXX_FLAGS "${wxWidgets_CXX_FLAGS}")
STRING(REPLACE "-I" "" string(REPLACE "-I" ""
wxWidgets_INCLUDE_DIRS "${wxWidgets_INCLUDE_DIRS}") wxWidgets_INCLUDE_DIRS "${wxWidgets_INCLUDE_DIRS}")
# Flags are a string, not a list, fix it here # Flags are a string, not a list, fix it here
string(REPLACE ";" " " string(REPLACE ";" " "
wxWidgets_CXX_FLAGS "${wxWidgets_CXX_FLAGS}") wxWidgets_CXX_FLAGS "${wxWidgets_CXX_FLAGS}")
DBG_MSG_V("wxWidgets_DEFINITIONS=${wxWidgets_DEFINITIONS}") dbg_msg_v("wxWidgets_DEFINITIONS=${wxWidgets_DEFINITIONS}")
DBG_MSG_V("wxWidgets_INCLUDE_DIRS=${wxWidgets_INCLUDE_DIRS}") dbg_msg_v("wxWidgets_INCLUDE_DIRS=${wxWidgets_INCLUDE_DIRS}")
DBG_MSG_V("wxWidgets_CXX_FLAGS=${wxWidgets_CXX_FLAGS}") dbg_msg_v("wxWidgets_CXX_FLAGS=${wxWidgets_CXX_FLAGS}")
ELSE(RET EQUAL 0) else(RET EQUAL 0)
SET(wxWidgets_FOUND FALSE) set(wxWidgets_FOUND FALSE)
DBG_MSG_V( dbg_msg_v("${wxWidgets_CONFIG_EXECUTABLE} --cxxflags FAILED with RET=${RET}")
"${wxWidgets_CONFIG_EXECUTABLE} --cxxflags FAILED with RET=${RET}") endif(RET EQUAL 0)
ENDIF(RET EQUAL 0)
# run the wx-config program to get the libs # run the wx-config program to get the libs
# - NOTE: wx-config doesn't verify that the libs requested exist # - NOTE: wx-config doesn't verify that the libs requested exist
# it just produces the names. Maybe a TRY_COMPILE would # it just produces the names. Maybe a TRY_COMPILE would
# be useful here... # be useful here...
STRING(REPLACE ";" "," string(REPLACE ";" ","
wxWidgets_FIND_COMPONENTS "${wxWidgets_FIND_COMPONENTS}") wxWidgets_FIND_COMPONENTS "${wxWidgets_FIND_COMPONENTS}")
EXECUTE_PROCESS( execute_process(
COMMAND sh "${wxWidgets_CONFIG_EXECUTABLE}" COMMAND sh "${wxWidgets_CONFIG_EXECUTABLE}"
${wxWidgets_SELECT_OPTIONS} --libs ${wxWidgets_FIND_COMPONENTS} ${wxWidgets_SELECT_OPTIONS} --libs ${wxWidgets_FIND_COMPONENTS}
OUTPUT_VARIABLE wxWidgets_LIBRARIES OUTPUT_VARIABLE wxWidgets_LIBRARIES
RESULT_VARIABLE RET RESULT_VARIABLE RET
ERROR_QUIET ERROR_QUIET
) )
IF(RET EQUAL 0) if(RET EQUAL 0)
STRING(STRIP "${wxWidgets_LIBRARIES}" wxWidgets_LIBRARIES) string(STRIP "${wxWidgets_LIBRARIES}" wxWidgets_LIBRARIES)
SEPARATE_ARGUMENTS(wxWidgets_LIBRARIES) separate_arguments(wxWidgets_LIBRARIES)
STRING(REPLACE "-framework;" "-framework " string(REPLACE "-framework;" "-framework "
wxWidgets_LIBRARIES "${wxWidgets_LIBRARIES}") wxWidgets_LIBRARIES "${wxWidgets_LIBRARIES}")
STRING(REPLACE "-arch;" "-arch " string(REPLACE "-arch;" "-arch "
wxWidgets_LIBRARIES "${wxWidgets_LIBRARIES}") wxWidgets_LIBRARIES "${wxWidgets_LIBRARIES}")
STRING(REPLACE "-isysroot;" "-isysroot " string(REPLACE "-isysroot;" "-isysroot "
wxWidgets_LIBRARIES "${wxWidgets_LIBRARIES}") wxWidgets_LIBRARIES "${wxWidgets_LIBRARIES}")
# extract linkdirs (-L) for rpath (i.e., LINK_DIRECTORIES) # extract linkdirs (-L) for rpath (i.e., LINK_DIRECTORIES)
STRING(REGEX MATCHALL "-L[^;]+" string(REGEX MATCHALL "-L[^;]+"
wxWidgets_LIBRARY_DIRS "${wxWidgets_LIBRARIES}") wxWidgets_LIBRARY_DIRS "${wxWidgets_LIBRARIES}")
STRING(REPLACE "-L" "" string(REPLACE "-L" ""
wxWidgets_LIBRARY_DIRS "${wxWidgets_LIBRARY_DIRS}") wxWidgets_LIBRARY_DIRS "${wxWidgets_LIBRARY_DIRS}")
DBG_MSG_V("wxWidgets_LIBRARIES=${wxWidgets_LIBRARIES}") dbg_msg_v("wxWidgets_LIBRARIES=${wxWidgets_LIBRARIES}")
DBG_MSG_V("wxWidgets_LIBRARY_DIRS=${wxWidgets_LIBRARY_DIRS}") dbg_msg_v("wxWidgets_LIBRARY_DIRS=${wxWidgets_LIBRARY_DIRS}")
ELSE(RET EQUAL 0) else(RET EQUAL 0)
SET(wxWidgets_FOUND FALSE) set(wxWidgets_FOUND FALSE)
DBG_MSG("${wxWidgets_CONFIG_EXECUTABLE} --libs ${wxWidgets_FIND_COMPONENTS} FAILED with RET=${RET}") dbg_msg("${wxWidgets_CONFIG_EXECUTABLE} --libs ${wxWidgets_FIND_COMPONENTS} FAILED with RET=${RET}")
ENDIF(RET EQUAL 0) endif(RET EQUAL 0)
ENDIF(wxWidgets_CONFIG_EXECUTABLE) endif(wxWidgets_CONFIG_EXECUTABLE)
#===================================================================== #=====================================================================
# Neither UNIX_FIND_STYLE, nor WIN32_FIND_STYLE # Neither UNIX_FIND_STYLE, nor WIN32_FIND_STYLE
#===================================================================== #=====================================================================
ELSE(wxWidgets_FIND_STYLE STREQUAL "unix") else(wxWidgets_FIND_STYLE STREQUAL "unix")
IF(NOT wxWidgets_FIND_QUIETLY) if(NOT wxWidgets_FIND_QUIETLY)
MESSAGE(STATUS message(STATUS
"${CMAKE_CURRENT_LIST_FILE}(${CMAKE_CURRENT_LIST_LINE}): \n" "${CMAKE_CURRENT_LIST_FILE}(${CMAKE_CURRENT_LIST_LINE}): \n"
" Platform unknown/unsupported. It's neither WIN32 nor UNIX " " Platform unknown/unsupported. It's neither WIN32 nor UNIX "
"find style." "find style."
) )
ENDIF(NOT wxWidgets_FIND_QUIETLY) endif(NOT wxWidgets_FIND_QUIETLY)
ENDIF(wxWidgets_FIND_STYLE STREQUAL "unix") endif(wxWidgets_FIND_STYLE STREQUAL "unix")
ENDIF(wxWidgets_FIND_STYLE STREQUAL "win32") endif(wxWidgets_FIND_STYLE STREQUAL "win32")
# Check if a specfic version was requested by find_package().
if(wxWidgets_FOUND AND wxWidgets_FIND_VERSION)
find_file(_filename wx/version.h PATHS ${wxWidgets_INCLUDE_DIRS})
dbg_msg("_filename: ${_filename}")
if(NOT _filename)
message(FATAL_ERROR "wxWidgets wx/version.h file not found in ${wxWidgets_INCLUDE_DIRS}.")
endif()
file(READ ${_filename} _wx_version_h)
string(REGEX REPLACE "^(.*\n)?#define wxMAJOR_VERSION[ ]+([0-9]+).*"
"\\2" wxWidgets_VERSION_MAJOR "${_wx_version_h}" )
string(REGEX REPLACE "^(.*\n)?#define wxMINOR_VERSION[ ]+([0-9]+).*"
"\\2" wxWidgets_VERSION_MINOR "${_wx_version_h}" )
string(REGEX REPLACE "^(.*\n)?#define wxRELEASE_NUMBER[ ]+([0-9]+).*"
"\\2" wxWidgets_VERSION_PATCH "${_wx_version_h}" )
set(wxWidgets_VERSION_STRING
"${wxWidgets_VERSION_MAJOR}.${wxWidgets_VERSION_MINOR}.${wxWidgets_VERSION_PATCH}" )
dbg_msg("wxWidgets_VERSION_STRING: ${wxWidgets_VERSION_STRING}")
endif()
# Debug output: # Debug output:
DBG_MSG("wxWidgets_FOUND : ${wxWidgets_FOUND}") dbg_msg("wxWidgets_FOUND : ${wxWidgets_FOUND}")
DBG_MSG("wxWidgets_INCLUDE_DIRS : ${wxWidgets_INCLUDE_DIRS}") dbg_msg("wxWidgets_INCLUDE_DIRS : ${wxWidgets_INCLUDE_DIRS}")
DBG_MSG("wxWidgets_LIBRARY_DIRS : ${wxWidgets_LIBRARY_DIRS}") dbg_msg("wxWidgets_LIBRARY_DIRS : ${wxWidgets_LIBRARY_DIRS}")
DBG_MSG("wxWidgets_LIBRARIES : ${wxWidgets_LIBRARIES}") dbg_msg("wxWidgets_LIBRARIES : ${wxWidgets_LIBRARIES}")
DBG_MSG("wxWidgets_CXX_FLAGS : ${wxWidgets_CXX_FLAGS}") dbg_msg("wxWidgets_CXX_FLAGS : ${wxWidgets_CXX_FLAGS}")
DBG_MSG("wxWidgets_USE_FILE : ${wxWidgets_USE_FILE}") dbg_msg("wxWidgets_USE_FILE : ${wxWidgets_USE_FILE}")
dbg_msg("wxWidgets_FIND_VERSION : ${wxWidgets_FIND_VERSION}")
dbg_msg("wxWidgets_VERSION_MAJOR : ${wxWidgets_VERSION_MAJOR}")
dbg_msg("wxWidgets_VERSION_MINOR : ${wxWidgets_VERSION_MINOR}")
dbg_msg("wxWidgets_VERSION_PATCH : ${wxWidgets_VERSION_PATCH}")
#===================================================================== #=====================================================================
#===================================================================== #=====================================================================
INCLUDE(FindPackageHandleStandardArgs)
FIND_PACKAGE_HANDLE_STANDARD_ARGS(wxWidgets DEFAULT_MSG wxWidgets_FOUND)
# Maintain consistency with all other variables. # Maintain consistency with all other variables.
SET(wxWidgets_FOUND ${WXWIDGETS_FOUND}) dbg_msg("wxWidgets_FOUND : ${wxWidgets_FOUND}")
set(WXWIDGETS_FOUND ${wxWidgetsS_FOUND})
include(FindPackageHandleStandardArgs)
find_package_handle_standard_args(wxWidgets
FOUND_VAR wxWidgets_FOUND
REQUIRED_VARS wxWidgets_LIBRARIES
VERSION_VAR wxWidgets_VERSION_STRING
)
#===================================================================== #=====================================================================
# Macros for use in wxWidgets apps. # Macros for use in wxWidgets apps.
...@@ -873,23 +913,23 @@ SET(wxWidgets_FOUND ${WXWIDGETS_FOUND}) ...@@ -873,23 +913,23 @@ SET(wxWidgets_FOUND ${WXWIDGETS_FOUND})
#===================================================================== #=====================================================================
# Resource file compiler. # Resource file compiler.
FIND_PROGRAM(wxWidgets_wxrc_EXECUTABLE wxrc find_program(wxWidgets_wxrc_EXECUTABLE wxrc
${wxWidgets_ROOT_DIR}/utils/wxrc/vc_msw ${wxWidgets_ROOT_DIR}/utils/wxrc/vc_msw
) )
# #
# WX_SPLIT_ARGUMENTS_ON(<keyword> <left> <right> <arg1> <arg2> ...) # wx_split_arguments_on(<keyword> <left> <right> <arg1> <arg2> ...)
# #
# Sets <left> and <right> to contain arguments to the left and right, # Sets <left> and <right> to contain arguments to the left and right,
# respectively, of <keyword>. # respectively, of <keyword>.
# #
# Example usage: # Example usage:
# FUNCTION(WXWIDGETS_ADD_RESOURCES outfiles) # function(wxwidgets_add_resources outfiles)
# WX_SPLIT_ARGUMENTS_ON(OPTIONS wxrc_files wxrc_options ${ARGN}) # wx_split_arguments_on(OPTIONS wxrc_files wxrc_options ${ARGN})
# ... # ...
# ENDFUNCTION(WXWIDGETS_ADD_RESOURCES) # endfunction(wxwidgets_add_resources)
# #
# WXWIDGETS_ADD_RESOURCES(sources ${xrc_files} OPTIONS -e -o file.C) # wxwidgets_add_resources(sources ${xrc_files} OPTIONS -e -o file.C)
# #
# NOTE: This is a generic piece of code that should be renamed to # NOTE: This is a generic piece of code that should be renamed to
# SPLIT_ARGUMENTS_ON and put in a file serving the same purpose as # SPLIT_ARGUMENTS_ON and put in a file serving the same purpose as
...@@ -898,32 +938,32 @@ FIND_PROGRAM(wxWidgets_wxrc_EXECUTABLE wxrc ...@@ -898,32 +938,32 @@ FIND_PROGRAM(wxWidgets_wxrc_EXECUTABLE wxrc
# here a bit more generalized. So, there are already two find modules # here a bit more generalized. So, there are already two find modules
# using this approach. # using this approach.
# #
FUNCTION(WX_SPLIT_ARGUMENTS_ON _keyword _leftvar _rightvar) function(wx_split_arguments_on _keyword _leftvar _rightvar)
# FIXME: Document that the input variables will be cleared. # FIXME: Document that the input variables will be cleared.
#LIST(APPEND ${_leftvar} "") #list(APPEND ${_leftvar} "")
#LIST(APPEND ${_rightvar} "") #list(APPEND ${_rightvar} "")
SET(${_leftvar} "") set(${_leftvar} "")
SET(${_rightvar} "") set(${_rightvar} "")
SET(_doing_right FALSE) set(_doing_right FALSE)
FOREACH(element ${ARGN}) foreach(element ${ARGN})
IF("${element}" STREQUAL "${_keyword}") if("${element}" STREQUAL "${_keyword}")
SET(_doing_right TRUE) set(_doing_right TRUE)
ELSE("${element}" STREQUAL "${_keyword}") else("${element}" STREQUAL "${_keyword}")
IF(_doing_right) if(_doing_right)
LIST(APPEND ${_rightvar} "${element}") list(APPEND ${_rightvar} "${element}")
ELSE(_doing_right) else(_doing_right)
LIST(APPEND ${_leftvar} "${element}") list(APPEND ${_leftvar} "${element}")
ENDIF(_doing_right) endif(_doing_right)
ENDIF("${element}" STREQUAL "${_keyword}") endif("${element}" STREQUAL "${_keyword}")
ENDFOREACH(element) endforeach(element)
SET(${_leftvar} ${${_leftvar}} PARENT_SCOPE) set(${_leftvar} ${${_leftvar}} PARENT_SCOPE)
SET(${_rightvar} ${${_rightvar}} PARENT_SCOPE) set(${_rightvar} ${${_rightvar}} PARENT_SCOPE)
ENDFUNCTION(WX_SPLIT_ARGUMENTS_ON) endfunction(wx_split_arguments_on)
# #
# WX_GET_DEPENDENCIES_FROM_XML( # wx_get_dependencies_from_xml(
# <depends> # <depends>
# <match_pattern> # <match_pattern>
# <clean_pattern> # <clean_pattern>
...@@ -933,7 +973,7 @@ ENDFUNCTION(WX_SPLIT_ARGUMENTS_ON) ...@@ -933,7 +973,7 @@ ENDFUNCTION(WX_SPLIT_ARGUMENTS_ON)
# #
# FIXME: Add documentation here... # FIXME: Add documentation here...
# #
FUNCTION(WX_GET_DEPENDENCIES_FROM_XML function(wx_get_dependencies_from_xml
_depends _depends
_match_patt _match_patt
_clean_patt _clean_patt
...@@ -941,55 +981,55 @@ FUNCTION(WX_GET_DEPENDENCIES_FROM_XML ...@@ -941,55 +981,55 @@ FUNCTION(WX_GET_DEPENDENCIES_FROM_XML
_depends_path _depends_path
) )
STRING(REGEX MATCHALL string(REGEX MATCHALL
${_match_patt} ${_match_patt}
dep_file_list dep_file_list
"${${_xml_contents}}" "${${_xml_contents}}"
) )
FOREACH(dep_file ${dep_file_list}) foreach(dep_file ${dep_file_list})
STRING(REGEX REPLACE ${_clean_patt} "" dep_file "${dep_file}") string(REGEX REPLACE ${_clean_patt} "" dep_file "${dep_file}")
# make the file have an absolute path # make the file have an absolute path
IF(NOT IS_ABSOLUTE "${dep_file}") if(NOT IS_ABSOLUTE "${dep_file}")
SET(dep_file "${${_depends_path}}/${dep_file}") set(dep_file "${${_depends_path}}/${dep_file}")
ENDIF(NOT IS_ABSOLUTE "${dep_file}") endif(NOT IS_ABSOLUTE "${dep_file}")
# append file to dependency list # append file to dependency list
LIST(APPEND ${_depends} "${dep_file}") list(APPEND ${_depends} "${dep_file}")
ENDFOREACH(dep_file) endforeach(dep_file)
SET(${_depends} ${${_depends}} PARENT_SCOPE) set(${_depends} ${${_depends}} PARENT_SCOPE)
ENDFUNCTION(WX_GET_DEPENDENCIES_FROM_XML) endfunction(wx_get_dependencies_from_xml)
# #
# WXWIDGETS_ADD_RESOURCES(<sources> <xrc_files> # wxwidgets_add_resources(<sources> <xrc_files>
# OPTIONS <options> [NO_CPP_CODE]) # OPTIONS <options> [NO_CPP_CODE])
# #
# Adds a custom command for resource file compilation of the # Adds a custom command for resource file compilation of the
# <xrc_files> and appends the output files to <sources>. # <xrc_files> and appends the output files to <sources>.
# #
# Example usages: # Example usages:
# WXWIDGETS_ADD_RESOURCES(sources xrc/main_frame.xrc) # wxwidgets_add_resources(sources xrc/main_frame.xrc)
# WXWIDGETS_ADD_RESOURCES(sources ${xrc_files} OPTIONS -e -o altname.cxx) # wxwidgets_add_resources(sources ${xrc_files} OPTIONS -e -o altname.cxx)
# #
FUNCTION(WXWIDGETS_ADD_RESOURCES _outfiles) function(wxwidgets_add_resources _outfiles)
WX_SPLIT_ARGUMENTS_ON(OPTIONS rc_file_list rc_options ${ARGN}) wx_split_arguments_on(OPTIONS rc_file_list rc_options ${ARGN})
# Parse files for dependencies. # Parse files for dependencies.
SET(rc_file_list_abs "") set(rc_file_list_abs "")
SET(rc_depends "") set(rc_depends "")
FOREACH(rc_file ${rc_file_list}) foreach(rc_file ${rc_file_list})
GET_FILENAME_COMPONENT(depends_path ${rc_file} PATH) get_filename_component(depends_path ${rc_file} PATH)
GET_FILENAME_COMPONENT(rc_file_abs ${rc_file} ABSOLUTE) get_filename_component(rc_file_abs ${rc_file} ABSOLUTE)
LIST(APPEND rc_file_list_abs "${rc_file_abs}") list(APPEND rc_file_list_abs "${rc_file_abs}")
# All files have absolute paths or paths relative to the location # All files have absolute paths or paths relative to the location
# of the rc file. # of the rc file.
FILE(READ "${rc_file_abs}" rc_file_contents) file(READ "${rc_file_abs}" rc_file_contents)
# get bitmap/bitmap2 files # get bitmap/bitmap2 files
WX_GET_DEPENDENCIES_FROM_XML( wx_get_dependencies_from_xml(
rc_depends rc_depends
"<bitmap[^<]+" "<bitmap[^<]+"
"^<bitmap[^>]*>" "^<bitmap[^>]*>"
...@@ -998,7 +1038,7 @@ FUNCTION(WXWIDGETS_ADD_RESOURCES _outfiles) ...@@ -998,7 +1038,7 @@ FUNCTION(WXWIDGETS_ADD_RESOURCES _outfiles)
) )
# get url files # get url files
WX_GET_DEPENDENCIES_FROM_XML( wx_get_dependencies_from_xml(
rc_depends rc_depends
"<url[^<]+" "<url[^<]+"
"^<url[^>]*>" "^<url[^>]*>"
...@@ -1007,70 +1047,70 @@ FUNCTION(WXWIDGETS_ADD_RESOURCES _outfiles) ...@@ -1007,70 +1047,70 @@ FUNCTION(WXWIDGETS_ADD_RESOURCES _outfiles)
) )
# get wxIcon files # get wxIcon files
WX_GET_DEPENDENCIES_FROM_XML( wx_get_dependencies_from_xml(
rc_depends rc_depends
"<object[^>]*class=\"wxIcon\"[^<]+" "<object[^>]*class=\"wxIcon\"[^<]+"
"^<object[^>]*>" "^<object[^>]*>"
rc_file_contents rc_file_contents
depends_path depends_path
) )
ENDFOREACH(rc_file) endforeach(rc_file)
# #
# Parse options. # Parse options.
# #
# If NO_CPP_CODE option specified, then produce .xrs file rather # If NO_CPP_CODE option specified, then produce .xrs file rather
# than a .cpp file (i.e., don't add the default --cpp-code option). # than a .cpp file (i.e., don't add the default --cpp-code option).
LIST(FIND rc_options NO_CPP_CODE index) list(FIND rc_options NO_CPP_CODE index)
IF(index EQUAL -1) if(index EQUAL -1)
LIST(APPEND rc_options --cpp-code) list(APPEND rc_options --cpp-code)
# wxrc's default output filename for cpp code. # wxrc's default output filename for cpp code.
SET(outfile resource.cpp) set(outfile resource.cpp)
ELSE(index EQUAL -1) else(index EQUAL -1)
LIST(REMOVE_AT rc_options ${index}) list(REMOVE_AT rc_options ${index})
# wxrc's default output filename for xrs file. # wxrc's default output filename for xrs file.
SET(outfile resource.xrs) set(outfile resource.xrs)
ENDIF(index EQUAL -1) endif(index EQUAL -1)
# Get output name for use in ADD_CUSTOM_COMMAND. # Get output name for use in add_custom_command.
# - short option scanning # - short option scanning
LIST(FIND rc_options -o index) list(FIND rc_options -o index)
IF(NOT index EQUAL -1) if(NOT index EQUAL -1)
MATH(EXPR filename_index "${index} + 1") MATH(EXPR filename_index "${index} + 1")
LIST(GET rc_options ${filename_index} outfile) list(GET rc_options ${filename_index} outfile)
#LIST(REMOVE_AT rc_options ${index} ${filename_index}) #list(REMOVE_AT rc_options ${index} ${filename_index})
ENDIF(NOT index EQUAL -1) endif(NOT index EQUAL -1)
# - long option scanning # - long option scanning
STRING(REGEX MATCH "--output=[^;]*" outfile_opt "${rc_options}") string(REGEX MATCH "--output=[^;]*" outfile_opt "${rc_options}")
IF(outfile_opt) if(outfile_opt)
STRING(REPLACE "--output=" "" outfile "${outfile_opt}") string(REPLACE "--output=" "" outfile "${outfile_opt}")
ENDIF(outfile_opt) endif(outfile_opt)
#STRING(REGEX REPLACE "--output=[^;]*;?" "" rc_options "${rc_options}") #string(REGEX REPLACE "--output=[^;]*;?" "" rc_options "${rc_options}")
#STRING(REGEX REPLACE ";$" "" rc_options "${rc_options}") #string(REGEX REPLACE ";$" "" rc_options "${rc_options}")
IF(NOT IS_ABSOLUTE "${outfile}") if(NOT IS_ABSOLUTE "${outfile}")
SET(outfile "${CMAKE_CURRENT_BINARY_DIR}/${outfile}") set(outfile "${CMAKE_CURRENT_BINARY_DIR}/${outfile}")
ENDIF(NOT IS_ABSOLUTE "${outfile}") endif(NOT IS_ABSOLUTE "${outfile}")
ADD_CUSTOM_COMMAND( add_custom_command(
OUTPUT "${outfile}" OUTPUT "${outfile}"
COMMAND ${wxWidgets_wxrc_EXECUTABLE} ${rc_options} ${rc_file_list_abs} COMMAND ${wxWidgets_wxrc_EXECUTABLE} ${rc_options} ${rc_file_list_abs}
DEPENDS ${rc_file_list_abs} ${rc_depends} DEPENDS ${rc_file_list_abs} ${rc_depends}
) )
# Add generated header to output file list. # Add generated header to output file list.
LIST(FIND rc_options -e short_index) list(FIND rc_options -e short_index)
LIST(FIND rc_options --extra-cpp-code long_index) list(FIND rc_options --extra-cpp-code long_index)
IF(NOT short_index EQUAL -1 OR NOT long_index EQUAL -1) if(NOT short_index EQUAL -1 OR NOT long_index EQUAL -1)
GET_FILENAME_COMPONENT(outfile_ext ${outfile} EXT) get_filename_component(outfile_ext ${outfile} EXT)
STRING(REPLACE "${outfile_ext}" ".h" outfile_header "${outfile}") string(REPLACE "${outfile_ext}" ".h" outfile_header "${outfile}")
LIST(APPEND ${_outfiles} "${outfile_header}") list(APPEND ${_outfiles} "${outfile_header}")
SET_SOURCE_FILES_PROPERTIES( set_source_files_properties(
"${outfile_header}" PROPERTIES GENERATED TRUE "${outfile_header}" PROPERTIES GENERATED TRUE
) )
ENDIF(NOT short_index EQUAL -1 OR NOT long_index EQUAL -1) endif(NOT short_index EQUAL -1 OR NOT long_index EQUAL -1)
# Add generated file to output file list. # Add generated file to output file list.
LIST(APPEND ${_outfiles} "${outfile}") list(APPEND ${_outfiles} "${outfile}")
SET(${_outfiles} ${${_outfiles}} PARENT_SCOPE) set(${_outfiles} ${${_outfiles}} PARENT_SCOPE)
ENDFUNCTION(WXWIDGETS_ADD_RESOURCES) endfunction(wxwidgets_add_resources)
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment