[Piglit] [PATCH] cmake: Require Mako >= 0.7
Tom Stellard
tom at stellard.net
Fri Jul 4 08:43:29 PDT 2014
On Wed, Jun 25, 2014 at 08:47:24PM -0700, Chad Versace wrote:
> Piglit began requiring Mako 0.7 as of commit ac1f382 "dispatch:
> Generate piglit-dispatch from Khronos XML".
>
> Piglit has required Mako for a long time, and CMake did check for Mako.
> But CMake didn't check the version. This patch fixes CMake to require
> Mako >= 0.7 and to provide the below hint on failure:
>
> Hint: Try installing Mako with `pip install --user --upgrade Mako`
You may need to bump the required version up to mako 0.7.3. This version works
for me, but with mako 0.7.0 I get the following error:
Traceback (most recent call last):
File "./piglit", line 111, in <module>
main()
File "./piglit", line 106, in main
returncode = parsed.func(args)
File "/home/tstellar/piglit/framework/programs/summary.py", line 98, in html
output.generate_html(args.summaryDir, args.exclude_details)
File "/home/tstellar/piglit/framework/summary.py", line 445, in generate_html
module_directory=self.TEMP_DIR)
File "/usr/lib64/python2.7/site-packages/mako/template.py", line 276, in __init__
module = self._compile_from_file(path, filename)
File "/usr/lib64/python2.7/site-packages/mako/template.py", line 332, in _compile_from_file
self.module_writer)
File "/usr/lib64/python2.7/site-packages/mako/template.py", line 613, in _compile_module_file
generate_magic_comment=True)
File "/usr/lib64/python2.7/site-packages/mako/template.py", line 582, in _compile
node = lexer.parse()
File "/usr/lib64/python2.7/site-packages/mako/lexer.py", line 220, in parse
if self.match_control_line():
File "/usr/lib64/python2.7/site-packages/mako/lexer.py", line 414, in match_control_line
self.append_node(parsetree.ControlLine, keyword, isend, text)
File "/usr/lib64/python2.7/site-packages/mako/lexer.py", line 130, in append_node
node = nodecls(*args, **kwargs)
File "/usr/lib64/python2.7/site-packages/mako/parsetree.py", line 77, in __init__
code = ast.PythonFragment(text, **self.exception_kwargs)
File "/usr/lib64/python2.7/site-packages/mako/ast.py", line 96, in __init__
super(PythonFragment, self).__init__(code, **exception_kwargs)
File "/usr/lib64/python2.7/site-packages/mako/ast.py", line 42, in __init__
f.visit(expr)
File "/usr/lib64/python2.7/site-packages/mako/_ast_util.py", line 279, in visit
return self.generic_visit(node)
File "/usr/lib64/python2.7/site-packages/mako/_ast_util.py", line 287, in generic_visit
self.visit(item)
File "/usr/lib64/python2.7/site-packages/mako/_ast_util.py", line 278, in visit
return f(node)
File "/usr/lib64/python2.7/site-packages/mako/pyparser.py", line 143, in visit_For
self.visit(node.iter)
File "/usr/lib64/python2.7/site-packages/mako/_ast_util.py", line 279, in visit
return self.generic_visit(node)
File "/usr/lib64/python2.7/site-packages/mako/_ast_util.py", line 287, in generic_visit
self.visit(item)
File "/usr/lib64/python2.7/site-packages/mako/_ast_util.py", line 279, in visit
return self.generic_visit(node)
File "/usr/lib64/python2.7/site-packages/mako/_ast_util.py", line 289, in generic_visit
self.visit(value)
File "/usr/lib64/python2.7/site-packages/mako/_ast_util.py", line 278, in visit
return f(node)
File "/usr/lib64/python2.7/site-packages/mako/pyparser.py", line 107, in visit_Lambda
self._visit_function(node, True)
File "/usr/lib64/python2.7/site-packages/mako/pyparser.py", line 125, in _visit_function
if arg_id(arg) in self.local_ident_stack:
AttributeError: 'Tuple' object has no attribute 'id'
-Tom
>
> Reported-by: Tom Stellard <thomas.stellard at amd.com>
> Signed-off-by: Chad Versace <chad.versace at linux.intel.com>
> ---
> CMakeLists.txt | 13 ++----
> cmake/Modules/PiglitFindMako.cmake | 93 ++++++++++++++++++++++++++++++++++++++
> 2 files changed, 96 insertions(+), 10 deletions(-)
> create mode 100644 cmake/Modules/PiglitFindMako.cmake
>
> diff --git a/CMakeLists.txt b/CMakeLists.txt
> index f875f5b..0b20084 100644
> --- a/CMakeLists.txt
> +++ b/CMakeLists.txt
> @@ -183,8 +183,9 @@ if(NOT DEFINED python)
> message(FATAL_ERROR "python version 2.x (where x >= 6) required")
> endif(NOT DEFINED python)
>
> -# Check for the presence of several python packages, which are needed to build
> -# generated tests.
> +include(PiglitFindMako)
> +
> +# Require numpy
> execute_process(
> COMMAND ${python} -c "import numpy"
> OUTPUT_QUIET
> @@ -193,14 +194,6 @@ execute_process(
> if(NOT import_numpy_error_code EQUAL 0)
> message(FATAL_ERROR "numpy python module not found")
> endif(NOT import_numpy_error_code EQUAL 0)
> -execute_process(
> - COMMAND ${python} -c "from mako.template import Template"
> - OUTPUT_QUIET
> - ERROR_QUIET
> - RESULT_VARIABLE import_mako_error_code)
> -if(NOT import_mako_error_code EQUAL 0)
> - message(FATAL_ERROR "mako.template python module not found")
> -endif(NOT import_mako_error_code EQUAL 0)
>
> # Default to compiling with debug information (`gcc -g`):
> if(NOT CMAKE_BUILD_TYPE)
> diff --git a/cmake/Modules/PiglitFindMako.cmake b/cmake/Modules/PiglitFindMako.cmake
> new file mode 100644
> index 0000000..4b1fcf9
> --- /dev/null
> +++ b/cmake/Modules/PiglitFindMako.cmake
> @@ -0,0 +1,93 @@
> +# 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")
> +
> +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} -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
> +)
> --
> 2.0.0.rc1
>
More information about the Piglit
mailing list