aboutsummaryrefslogtreecommitdiffstats
path: root/cmake/Modules
diff options
context:
space:
mode:
authorPiotr Krysik <ptrkrysik@gmail.com>2016-04-08 22:54:22 +0200
committerPiotr Krysik <ptrkrysik@gmail.com>2016-04-08 22:54:22 +0200
commit6e9efb0aee49cdbb9a09801a60b6b44ce1918662 (patch)
treeb23e1cd1bd06b828085c53b345db0c7ed41560dd /cmake/Modules
parent0ff0d09960d7f9e7d6e1e6276f53744322c6e629 (diff)
Added dependency requirement for SWIG to buildsystem
Diffstat (limited to 'cmake/Modules')
-rw-r--r--cmake/Modules/FindSWIG.cmake141
1 files changed, 141 insertions, 0 deletions
diff --git a/cmake/Modules/FindSWIG.cmake b/cmake/Modules/FindSWIG.cmake
new file mode 100644
index 0000000..156bd5e
--- /dev/null
+++ b/cmake/Modules/FindSWIG.cmake
@@ -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()