From c77816aef252a7c34212dcc1d3c332228aa0d8f2 Mon Sep 17 00:00:00 2001 From: Julian Oes Date: Wed, 15 Jan 2020 10:38:14 +0100 Subject: [PATCH] cmake: move jinja2 check to Python modules This removes the cmake check for jinja2 and moves it to the respective Python scripts. --- CMakeLists.txt | 6 +- Tools/serial/generate_config.py | 10 +++- cmake/px4_find_python_module.cmake | 76 ------------------------ src/lib/parameters/px_generate_params.py | 13 +++- 4 files changed, 22 insertions(+), 83 deletions(-) delete mode 100644 cmake/px4_find_python_module.cmake diff --git a/CMakeLists.txt b/CMakeLists.txt index e18c11e213..6a9fba14e6 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -263,10 +263,9 @@ if (CATKIN_DEVEL_PREFIX) endif() endif() -# python +# Python # If using catkin, Python 2 is found since it points # to the Python libs installed with the ROS distro -include(px4_find_python_module) if (NOT CATKIN_DEVEL_PREFIX) find_package(PythonInterp 3 REQUIRED) else() @@ -277,9 +276,6 @@ option(PYTHON_COVERAGE "Python code coverage" OFF) if(PYTHON_COVERAGE) message(STATUS "python coverage enabled") set(PYTHON_EXECUTABLE coverage run -p) -else() - # run normally (broken under coveragepy) - px4_find_python_module(jinja2 REQUIRED) endif() #============================================================================= diff --git a/Tools/serial/generate_config.py b/Tools/serial/generate_config.py index df778ee73a..247fb3245c 100755 --- a/Tools/serial/generate_config.py +++ b/Tools/serial/generate_config.py @@ -7,7 +7,15 @@ import argparse import os import sys -from jinja2 import Environment, FileSystemLoader +try: + from jinja2 import Environment, FileSystemLoader +except ImportError as e: + print("Failed to import jinja2: " + e) + print("") + print("You may need to install it using:") + print(" pip3 install --user jinja2") + print("") + sys.exit(1) try: import yaml diff --git a/cmake/px4_find_python_module.cmake b/cmake/px4_find_python_module.cmake deleted file mode 100644 index 3a71f92fda..0000000000 --- a/cmake/px4_find_python_module.cmake +++ /dev/null @@ -1,76 +0,0 @@ -############################################################################ -# -# Copyright (c) 2019 PX4 Development Team. All rights reserved. -# -# Redistribution and use in source and binary forms, with or without -# modification, are permitted provided that the following conditions -# are met: -# -# 1. Redistributions of source code must retain the above copyright -# notice, this list of conditions and the following disclaimer. -# 2. Redistributions in binary form must reproduce the above copyright -# notice, this list of conditions and the following disclaimer in -# the documentation and/or other materials provided with the -# distribution. -# 3. Neither the name PX4 nor the names of its contributors may be -# used to endorse or promote products derived from this software -# without specific prior written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS -# FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE -# COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, -# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, -# BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS -# OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED -# AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT -# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN -# ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE -# POSSIBILITY OF SUCH DAMAGE. -# -############################################################################ - -# cmake include guard -if(px4_find_python_module_included) - return() -endif(px4_find_python_module_included) -set(px4_find_python_module_included true) - -# -# px4_find_python_module -# -# Find a required python module -# -# Usage -# px4_find_python_module(module_name [REQUIRED]) -# -function(px4_find_python_module module) - string(TOUPPER ${module} module_upper) - if(NOT PY_${module_upper}) - if(ARGC GREATER 1 AND ARGV1 STREQUAL "REQUIRED") - set(PY_${module}_FIND_REQUIRED TRUE) - endif() - # A module's location is usually a directory, but for binary modules - # it's a .so file. - execute_process(COMMAND "${PYTHON_EXECUTABLE}" "-c" - "import re, ${module}; print(re.compile('/__init__.py.*').sub('',${module}.__file__))" - RESULT_VARIABLE _${module}_status - OUTPUT_VARIABLE _${module}_location - ERROR_QUIET - OUTPUT_STRIP_TRAILING_WHITESPACE) - if(NOT _${module}_status) - set(PY_${module_upper} ${_${module}_location} CACHE STRING - "Location of Python module ${module}") - endif() - endif() - find_package_handle_standard_args(PY_${module} - "couldn't find python3 module ${module}: - \nfor debian systems try: \ - \n\tsudo apt-get install python3-${module} \ - \nor for all other OSs/debian: \ - \n\tsudo -H pip3 install ${module}\n" PY_${module_upper}) - #if (NOT PY_${module}_FOUND) - #message(FATAL_ERROR "python3 module not found, exiting") - #endif() -endfunction(px4_find_python_module) diff --git a/src/lib/parameters/px_generate_params.py b/src/lib/parameters/px_generate_params.py index af746fb7ed..ba59b74cd1 100755 --- a/src/lib/parameters/px_generate_params.py +++ b/src/lib/parameters/px_generate_params.py @@ -6,7 +6,18 @@ from __future__ import print_function import xml.etree.ElementTree as ET import codecs import argparse -from jinja2 import Environment, FileSystemLoader +import sys + +try: + from jinja2 import Environment, FileSystemLoader +except ImportError as e: + print("Failed to import jinja2: " + e) + print("") + print("You may need to install it using:") + print(" pip3 install --user jinja2") + print("") + sys.exit(1) + import os def generate(xml_file, dest='.'):