Commit a55fbebd authored by Dylan Baker's avatar Dylan Baker Committed by Dylan Baker

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: default avatarDylan Baker <dylanx.c.baker@intel.com>
Reviewed-by: Jose Fonseca's avatarJose Fonseca <jfonseca@vmware.com>
parent 9600aa45
......@@ -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)
......
# 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)
# 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)
# 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
)
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)
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment