forked from gnuradio/gnuradio
-
Notifications
You must be signed in to change notification settings - Fork 2
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
cmake: Add checks for SWIG versions 3.0.[34], with user-friendly mess…
…ages for both success and failure.
- Loading branch information
Showing
2 changed files
with
142 additions
and
1 deletion.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,141 @@ | ||
####################################################################### | ||
# Find the library for SWIG | ||
# | ||
# The goal here is to intercept calls to "FIND_PACKAGE(SWIG)" in order | ||
# to do a global version check locally after passing on the "find" to | ||
# SWIG-provided scripts. | ||
######################################################################## | ||
|
||
# make this file non-reentrant within the current context | ||
|
||
if(__INCLUDED_FIND_SWIG_CMAKE) | ||
return() | ||
endif() | ||
set(__INCLUDED_FIND_SWIG_CMAKE TRUE) | ||
|
||
# some status messages | ||
|
||
message(STATUS "") | ||
message(STATUS "Checking for module SWIG") | ||
|
||
# | ||
# First check to see if SWIG installed its own CMake file, or if the | ||
# one provided by CMake finds SWIG. | ||
# | ||
|
||
# save the current MODULE path | ||
|
||
set(SAVED_CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH}) | ||
|
||
# clear the current MODULE path; uses system paths only | ||
|
||
unset(CMAKE_MODULE_PATH) | ||
|
||
# try to find SWIG via the provided parameters, | ||
# handle REQUIRED internally later | ||
|
||
unset(SWIG_FOUND) | ||
|
||
# was the version specified? | ||
|
||
unset(LOCAL_SWIG_FIND_VERSION) | ||
if(SWIG_FIND_VERSION) | ||
set(LOCAL_SWIG_FIND_VERSION ${SWIG_FIND_VERSION}) | ||
endif(SWIG_FIND_VERSION) | ||
|
||
# was EXACT specified? | ||
|
||
unset(LOCAL_SWIG_FIND_VERSION_EXACT) | ||
if(SWIG_FIND_VERSION_EXACT) | ||
set(LOCAL_SWIG_FIND_VERSION_EXACT "EXACT") | ||
endif(SWIG_FIND_VERSION_EXACT) | ||
|
||
# was REQUIRED specified? | ||
|
||
unset(LOCAL_SWIG_FIND_REQUIRED) | ||
if(SWIG_FIND_REQUIRED) | ||
set(LOCAL_SWIG_FIND_REQUIRED "REQUIRED") | ||
endif(SWIG_FIND_REQUIRED) | ||
|
||
# try to find SWIG using the provided parameters, quietly; | ||
# | ||
# this call will error out internally (and not quietly) if: | ||
# 1: EXACT is specified and the version found does not match the requested version; | ||
# 2: REQUIRED is set and SWIG was not found; | ||
# | ||
# this call will return SWIG_FOUND == FALSE if REQUIRED is not set, and: | ||
# 1: SWIG was not found; | ||
# 2: The version found is less than the requested version. | ||
|
||
find_package( | ||
SWIG | ||
${LOCAL_SWIG_FIND_VERSION} | ||
${LOCAL_SWIG_FIND_VERSION_EXACT} | ||
${LOCAL_SWIG_FIND_REQUIRED} | ||
QUIET | ||
) | ||
|
||
# restore CMAKE_MODULE_PATH | ||
|
||
set(CMAKE_MODULE_PATH ${SAVED_CMAKE_MODULE_PATH}) | ||
|
||
# specific version checks | ||
|
||
set(SWIG_VERSION_CHECK FALSE) | ||
if(SWIG_FOUND) | ||
|
||
# SWIG was found; make sure the version meets GR's needs | ||
message(STATUS "Found SWIG version ${SWIG_VERSION}.") | ||
if("${SWIG_VERSION}" VERSION_GREATER "1.3.30") | ||
if(NOT "${SWIG_VERSION}" VERSION_EQUAL "3.0.3" AND | ||
NOT "${SWIG_VERSION}" VERSION_EQUAL "3.0.4") | ||
set(SWIG_VERSION_CHECK TRUE) | ||
else() | ||
message(STATUS "SWIG versions 3.0.3 and 3.0.4 fail to work with GNU Radio.") | ||
endif() | ||
else() | ||
message(STATUS "Minimum SWIG version required is 1.3.31 for GNU Radio.") | ||
endif() | ||
|
||
else() | ||
|
||
# SWIG was either not found, or is less than the requested version | ||
if(SWIG_VERSION) | ||
# SWIG_VERSION is set, but SWIG_FOUND is false; probably a version mismatch | ||
message(STATUS "Found SWIG version ${SWIG_VERSION}.") | ||
message(STATUS "Requested SWIG version is at least ${SWIG_FIND_VERSION}.") | ||
endif() | ||
endif() | ||
|
||
# did the version check fail? | ||
|
||
if(NOT SWIG_VERSION_CHECK) | ||
|
||
# yes: clear various variables and set FOUND to FALSE | ||
message(STATUS "Disabling SWIG because version check failed.") | ||
unset(SWIG_VERSION CACHE) | ||
unset(SWIG_DIR CACHE) | ||
unset(SWIG_EXECUTABLE CACHE) | ||
set(SWIG_FOUND FALSE CACHE BOOL "Set to TRUE if a compatible version of SWIG is found" FORCE) | ||
|
||
endif() | ||
|
||
# check to see if SWIG variables were set | ||
|
||
if(SWIG_FOUND AND SWIG_DIR AND SWIG_EXECUTABLE) | ||
|
||
# yes: even if set SWIG_FOUND==TRUE, then these have already been | ||
# done, but done quietly. It does not hurt to redo them here. | ||
|
||
include(FindPackageHandleStandardArgs) | ||
find_package_handle_standard_args(SWIG DEFAULT_MSG SWIG_EXECUTABLE SWIG_DIR) | ||
mark_as_advanced(SWIG_EXECUTABLE SWIG_DIR) | ||
|
||
elseif(SWIG_FIND_REQUIRED) | ||
|
||
if(SWIG_FIND_VERSION) | ||
message(FATAL_ERROR "The found SWIG version (${SWIG_VERSION}) is not compatible with the version required (${SWIG_FIND_VERSION}).") | ||
else() | ||
message(FATAL_ERROR "SWIG is required, but was not found.") | ||
endif() | ||
endif() |