[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