summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--CMakeLists.txt15
-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
5 files changed, 84 insertions, 105 deletions
diff --git a/CMakeLists.txt b/CMakeLists.txt
index ac4ba1b34..8cf046d0b 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -187,18 +187,9 @@ IF(PIGLIT_BUILD_GLX_TESTS)
pkg_check_modules(GLPROTO REQUIRED glproto)
ENDIF()
-FIND_PACKAGE(PythonInterp 2.7 REQUIRED)
-include(PiglitFindMako)
-
-# Require numpy
-execute_process(
- COMMAND ${PYTHON_EXECUTABLE} -c "import numpy"
- OUTPUT_QUIET
- ERROR_QUIET
- RESULT_VARIABLE import_numpy_error_code)
-if(NOT import_numpy_error_code EQUAL 0)
- message(FATAL_ERROR "numpy python module not found")
-endif(NOT import_numpy_error_code EQUAL 0)
+find_package(PythonInterp 2.7 REQUIRED)
+find_package(PythonNumpy REQUIRED)
+find_package(PythonMako 0.7.3 REQUIRED)
# Default to compiling with debug information (`gcc -g`):
if(NOT CMAKE_BUILD_TYPE)
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)