diff --git a/CMakeLists.txt b/CMakeLists.txt index 6a6eeb660b..256a9dac9a 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -243,6 +243,8 @@ if (CATKIN_DEVEL_PREFIX) endif() endif() +# python +include(px4_find_python_module) find_package(PythonInterp REQUIRED) option(PYTHON_COVERAGE "Python code coverage" OFF) diff --git a/cmake/px4_base.cmake b/cmake/px4_base.cmake index f69fb5384d..d7794ea6a5 100644 --- a/cmake/px4_base.cmake +++ b/cmake/px4_base.cmake @@ -111,43 +111,3 @@ function(px4_parse_function_args) endforeach() endfunction() - - -#============================================================================= -# -# 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 python module ${module}: - \nfor debian systems try: \ - \n\tsudo apt-get install python-${module} \ - \nor for all other OSs/debian: \ - \n\tsudo -H pip install ${module}\n" PY_${module_upper}) - #if (NOT PY_${module}_FOUND) - #message(FATAL_ERROR "python module not found, exiting") - #endif() -endfunction(px4_find_python_module) diff --git a/cmake/px4_find_python_module.cmake b/cmake/px4_find_python_module.cmake new file mode 100644 index 0000000000..4412abd1be --- /dev/null +++ b/cmake/px4_find_python_module.cmake @@ -0,0 +1,70 @@ +############################################################################ +# +# 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. +# +############################################################################ + +# +# 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 python module ${module}: + \nfor debian systems try: \ + \n\tsudo apt-get install python-${module} \ + \nor for all other OSs/debian: \ + \n\tsudo -H pip install ${module}\n" PY_${module_upper}) + #if (NOT PY_${module}_FOUND) + #message(FATAL_ERROR "python module not found, exiting") + #endif() +endfunction(px4_find_python_module)