diff options
-rw-r--r-- | CMakeLists.txt | 15 | ||||
-rw-r--r-- | cmake/Modules/FindPythonMako.cmake | 23 | ||||
-rw-r--r-- | cmake/Modules/FindPythonNumpy.cmake | 23 | ||||
-rw-r--r-- | cmake/Modules/PiglitFindMako.cmake | 93 | ||||
-rw-r--r-- | cmake/Modules/PythonModule.cmake | 35 |
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) |