summaryrefslogtreecommitdiff
path: root/cmake
diff options
context:
space:
mode:
authorDylan Baker <dylanx.c.baker@intel.com>2014-12-11 15:18:35 -0800
committerDylan Baker <baker.dylan.c@gmail.com>2015-01-19 10:16:47 -0800
commita55fbebd5e227a4a29c83e85d8b44154cdcbf145 (patch)
tree23d0a62b03751c9ca2973c2e97bdb9657500034c /cmake
parent9600aa4557d1494658a45168220e1e97197a48ce (diff)
cmake: Simplify finding python modules
This patch adds 3 files, PythonModule.cmake, FindPythonMako.cmake and FindPythonNumpy.cmake. PythonModule provides a simple function for running python and parsing the version strings, each FindPython*.cmake then just calls that function, and then calls the find_package_handle_standard_args macro for simple, standard finding. This is much more in line with how the core cmake modules work, and makes is trivial to add additional python modules with all of the standard cmake awesomeness like version checking. Signed-off-by: Dylan Baker <dylanx.c.baker@intel.com> Reviewed-by: Jose Fonseca <jfonseca@vmware.com>
Diffstat (limited to 'cmake')
-rw-r--r--cmake/Modules/FindPythonMako.cmake23
-rw-r--r--cmake/Modules/FindPythonNumpy.cmake23
-rw-r--r--cmake/Modules/PiglitFindMako.cmake93
-rw-r--r--cmake/Modules/PythonModule.cmake35
4 files changed, 81 insertions, 93 deletions
diff --git a/cmake/Modules/FindPythonMako.cmake b/cmake/Modules/FindPythonMako.cmake
new file mode 100644
index 000000000..d4043559b
--- /dev/null
+++ b/cmake/Modules/FindPythonMako.cmake
@@ -0,0 +1,23 @@
+# Copyright (C) 2014 Intel Corporation
+#
+# Permission is hereby granted, free of charge, to any person obtaining
+# a copy of this software and associated documentation files (the "Software"),
+# to deal in the Software without restriction, including without limitation
+# the rights to use, copy, modify, merge, publish, distribute, sublicense,
+# and/or sell copies of the Software, and to permit persons to whom the
+# Software is furnished to do so, subject to the following conditions:
+#
+# The above copyright notice and this permission notice shall be included
+# in all copies or substantial portions of the Software.
+#
+# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+# EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
+# OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
+# IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
+# DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
+# TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE
+# OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+
+# Find mako
+include(PythonModule)
+basic_python_module(mako PythonMako)
diff --git a/cmake/Modules/FindPythonNumpy.cmake b/cmake/Modules/FindPythonNumpy.cmake
new file mode 100644
index 000000000..7b5bd1429
--- /dev/null
+++ b/cmake/Modules/FindPythonNumpy.cmake
@@ -0,0 +1,23 @@
+# Copyright (C) 2014 Intel Corporation
+#
+# Permission is hereby granted, free of charge, to any person obtaining
+# a copy of this software and associated documentation files (the "Software"),
+# to deal in the Software without restriction, including without limitation
+# the rights to use, copy, modify, merge, publish, distribute, sublicense,
+# and/or sell copies of the Software, and to permit persons to whom the
+# Software is furnished to do so, subject to the following conditions:
+#
+# The above copyright notice and this permission notice shall be included
+# in all copies or substantial portions of the Software.
+#
+# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+# EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
+# OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
+# IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
+# DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
+# TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE
+# OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+
+# Find numpy
+include(PythonModule)
+basic_python_module(numpy PythonNumpy)
diff --git a/cmake/Modules/PiglitFindMako.cmake b/cmake/Modules/PiglitFindMako.cmake
deleted file mode 100644
index 0637d30df..000000000
--- a/cmake/Modules/PiglitFindMako.cmake
+++ /dev/null
@@ -1,93 +0,0 @@
-# Copyright 2014 Intel Corporation
-#
-# Permission is hereby granted, free of charge, to any person obtaining a
-# copy of this software and associated documentation files (the "Software"),
-# to deal in the Software without restriction, including without limitation
-# the rights to use, copy, modify, merge, publish, distribute, sublicense,
-# and/or sell copies of the Software, and to permit persons to whom the
-# Software is furnished to do so, subject to the following conditions:
-#
-# The above copyright notice and this permission notice (including the next
-# paragraph) shall be included in all copies or substantial portions of the
-# Software.
-#
-# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
-# THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
-# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
-# IN THE SOFTWARE.
-
-# This module sets the following variables:
-#
-# MAKO_REQUIRED_VERSION
-#
-# MAKO_FOUND (CACHE)
-# True if and only if the installed Mako version is at least
-# MAKO_REQUIRED_VERSION.
-#
-# MAKO_VERSION (CACHE)
-# If MAKO_FOUND, then this is the installed Mako's full version string,
-# given by the Python value ``mako.__version__``. Otherwise,
-# "MAKO_VERSION-NOTFOUND".
-#
-# This module avoids checking the installed Mako version when not needed, by
-# performing the check the check only if the cached MAKO_VERSION does not
-# satisfy the current value of MAKO_REQUIRED_VERSION.
-
-set(MAKO_REQUIRED_VERSION "0.7.3")
-
-set(__MAKO_CHECK_VERSION_PY "
-try:
- import mako
-except ImportError as err:
- import sys
- sys.exit(err)
-else:
- print(mako.__version__)
-")
-
-set(__MAKO_INSTALL_HINT "Hint: Try installing Mako with `pip install --user --upgrade Mako`")
-
-if(MAKO_VERSION VERSION_LESS MAKO_REQUIRED_VERSION)
- message(STATUS "Looking for Mako >= ${MAKO_REQUIRED_VERSION}")
-
- set(MAKO_FOUND false)
- set(MAKO_VERSION "MAKO_VERSION-NOTFOUND")
-
- execute_process(
- COMMAND ${PYTHON_EXECUTABLE} -c "${__MAKO_CHECK_VERSION_PY}"
- OUTPUT_VARIABLE __MAKO_ACTUAL_VERSION
- OUTPUT_STRIP_TRAILING_WHITESPACE
- ERROR_VARIABLE __MAKO_STDERR
- ERROR_STRIP_TRAILING_WHITESPACE
- RESULT_VARIABLE __MAKO_EXIT_STATUS
- )
-
- if(NOT __MAKO_EXIT_STATUS EQUAL 0)
- message(SEND_ERROR
- " Failed to find Mako\n"
- " ${__MAKO_INSTALL_HINT}\n")
- elseif(__MAKO_ACTUAL_VERSION VERSION_LESS MAKO_REQUIRED_VERSION)
- message(SEND_ERROR
- " Found Mako ${__MAKO_ACTUAL_VERSION}, but Mako >= ${MAKO_REQUIRED_VERSION} is required\n"
- " ${__MAKO_INSTALL_HINT}\n")
- else()
- message(STATUS "Found Mako ${__MAKO_ACTUAL_VERSION}")
- set(MAKO_FOUND true)
- set(MAKO_VERSION "${__MAKO_ACTUAL_VERSION}")
- endif()
-endif()
-
-if(NOT MAKO_FOUND)
-endif()
-
-set(MAKO_FOUND "${MAKO_FOUND}"
- CACHE INTERNAL "Was Mako >= ${MAKO_REQUIRED_VERSION} found?"
- FORCE
-)
-set(MAKO_VERSION "${MAKO_VERSION}"
- CACHE INTERNAL "Full version string of installed Mako, if MAKO_FOUND."
- FORCE
-)
diff --git a/cmake/Modules/PythonModule.cmake b/cmake/Modules/PythonModule.cmake
new file mode 100644
index 000000000..9ddbf3c50
--- /dev/null
+++ b/cmake/Modules/PythonModule.cmake
@@ -0,0 +1,35 @@
+function(find_python_module MODULE PREFIX)
+ execute_process(
+ COMMAND ${PYTHON_EXECUTABLE} -c "import sys, ${MODULE}; sys.stdout.write(${MODULE}.__version__)"
+ OUTPUT_VARIABLE _version
+ RESULT_VARIABLE _status
+ ERROR_QUIET
+ OUTPUT_STRIP_TRAILING_WHITESPACE
+ )
+
+ # Export version variables to parent scope. This is needed by
+ # find_package_handle_standard_args
+ set(${PREFIX}_VERSION_STRING ${_version} PARENT_SCOPE)
+
+ # A status returns 0 if everything is okay. And zero is false. To make
+ # checking in the outer scope less surprising
+ if (_status EQUAL 0)
+ set("${PREFIX}_STATUS" "success" PARENT_SCOPE)
+ endif (_status EQUAL 0)
+endfunction(find_python_module MODULE PREFIX)
+
+# This macro provides a simple way for basic python find modules to be
+# extremely simple without duplicate boilerplate
+macro(basic_python_module MODULE PREFIX)
+ find_python_module("${MODULE}" "${PREFIX}")
+
+ include(FindPackageHandleStandardArgs)
+ find_package_handle_standard_args(
+ "${PREFIX}"
+ REQUIRED_VARS "${PREFIX}_STATUS"
+ VERSION_VAR "${PREFIX}_VERSION_STRING"
+ )
+
+ # This isn't needed in the parent scope, just here.
+ unset("${PREFIX}_STATUS")
+endmacro(basic_python_module MODULE PREFIX)