From c6610bdf46447733fa5f4ae4c599d017e8e30a57 Mon Sep 17 00:00:00 2001 From: Noel Eck Date: Wed, 5 Oct 2016 17:08:42 -0700 Subject: [PATCH] tests: Switch from PYTHON_EXECUTABLE to PYTHON_DEFAULT_EXECUTABLE The DetectPython cmake script now outputs a default python executable. Updated other cmake scripts to use this concept. Used default where python2/3 will work, use explicit PYTHON2/3_EXECUTABLE where an explicit version is needed. Also, fail if python is required and NO version of python was found. Signed-off-by: Noel Eck --- CMakeLists.txt | 16 +++++++-- src/CMakeLists.txt | 2 +- tests/CMakeLists.txt | 78 +++++++++++++++++++++++++------------------- 3 files changed, 59 insertions(+), 37 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 158bcf4c..c553e2d9 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -54,11 +54,23 @@ if (BUILDSWIGPYTHON OR BUILDSWIGNODE OR BUILDSWIGJAVA) include (${SWIG_USE_FILE}) endif () -# Python is required for swig generated python and for UPM tests -# UPM build can generated modules for both python2 AND python3 +# Python is required for swig generated python and for UPM tests. +# The UPM build can generated modules for both python2 AND python3 +# with the corresponding PYTHONLIBS. Currently, BUILDTESTS has a +# hard dependency on the PYTHON2INTERP. # OpenCV python detect will attempt to find python2/3 if (BUILDSWIGPYTHON OR BUILDTESTS) include (cmake/modules/OpenCVDetectPython.cmake) + + # Fail if building tests but no python interpreter was found + if (BUILDTESTS AND NOT PYTHON2INTERP_FOUND) + message(FATAL_ERROR "BUILDTESTS=ON requires the python2 interpreter") + endif (BUILDTESTS AND NOT PYTHON2INTERP_FOUND) + + # Fail if no LIBS were found + if (NOT PYTHON2LIBS_FOUND AND NOT PYTHON3LIBS_FOUND) + message(FATAL_ERROR "At least one python lib is required") + endif (NOT PYTHON2LIBS_FOUND AND NOT PYTHON3LIBS_FOUND) endif (BUILDSWIGPYTHON OR BUILDTESTS) # Which versions of python were found? diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 909415b0..b619840d 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -442,7 +442,7 @@ endmacro(upm_module_init) if (BUILDDOC AND BUILDSWIGPYTHON) # doxy2swig the doxygen output add_custom_target (pyupm_doxy2swig ALL - COMMAND ${PYTHON_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/doxy2swig.py + COMMAND ${PYTHON2_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/doxy2swig.py ${CMAKE_BINARY_DIR}/xml/index.xml ${CMAKE_CURRENT_BINARY_DIR}/pyupm_doxy2swig.i DEPENDS doc) diff --git a/tests/CMakeLists.txt b/tests/CMakeLists.txt index 758dd7f1..fa8b8f26 100644 --- a/tests/CMakeLists.txt +++ b/tests/CMakeLists.txt @@ -1,55 +1,65 @@ -add_test (NAME check_consistency COMMAND ${PYTHON_EXECUTABLE} - ${CMAKE_CURRENT_SOURCE_DIR}/check_consistency.py - WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}) +# Add some general tests (which use python2)... +if (PYTHON_DEFAULT_AVAILABLE) + # Consistency check + add_test (NAME check_consistency COMMAND ${PYTHON_DEFAULT_EXECUTABLE} + ${CMAKE_CURRENT_SOURCE_DIR}/check_consistency.py + WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}) -# Check file encodings in src tree -if (PYTHON2INTERP_FOUND) - add_test (NAME check_file_encoding COMMAND ${PYTHON_EXECUTABLE} + # Check file encodings in src tree + add_test (NAME check_file_encoding COMMAND ${PYTHON_DEFAULT_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/check_file_encoding.py WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}/src) -endif (PYTHON2INTERP_FOUND) +endif (PYTHON_DEFAULT_AVAILABLE) -if (BUILDSWIGJAVA) - add_test (NAME check_autoloadlibrary COMMAND ${PYTHON_EXECUTABLE} +# Add some java tests +if (BUILDSWIGJAVA AND PYTHON_DEFAULT_AVAILABLE) + add_test (NAME check_autoloadlibrary COMMAND ${PYTHON_DEFAULT_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/check_autoloadlibrary.py WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}) - add_test (NAME check_examplenames_java COMMAND ${PYTHON_EXECUTABLE} + add_test (NAME check_examplenames_java COMMAND ${PYTHON_DEFAULT_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/check_examplenames.py java WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}) - add_test (NAME check_clean COMMAND ${PYTHON_EXECUTABLE} + add_test (NAME check_clean COMMAND ${PYTHON_DEFAULT_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/check_clean.py WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}) -endif () +endif (BUILDSWIGJAVA AND PYTHON_DEFAULT_AVAILABLE) -if (BUILDSWIGNODE) - add_test (NAME check_examplenames_js COMMAND ${PYTHON_EXECUTABLE} +# Add a node test +if (BUILDSWIGNODE AND PYTHON_DEFAULT_AVAILABLE) + add_test (NAME check_examplenames_js COMMAND ${PYTHON_DEFAULT_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/check_examplenames.py js WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}) -endif (BUILDSWIGNODE) +endif (BUILDSWIGNODE AND PYTHON_DEFAULT_AVAILABLE) -if (BUILDSWIGPYTHON) - add_test (NAME check_examplenames_python COMMAND ${PYTHON_EXECUTABLE} +# Add a python test +if (BUILDSWIGPYTHON AND PYTHON_DEFAULT_AVAILABLE) + # Check python examples against cxx examples + add_test (NAME check_examplenames_python COMMAND ${PYTHON_DEFAULT_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/check_examplenames.py python WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}) +endif (BUILDSWIGPYTHON AND PYTHON_DEFAULT_AVAILABLE) - if (PYTHON2INTERP_FOUND) - add_test (NAME check_load_modules_python2 COMMAND ${PYTHON2_EXECUTABLE} - ${CMAKE_CURRENT_SOURCE_DIR}/check_pythonload.py - ${CMAKE_BINARY_DIR}/src/*/python${PYTHON2_VERSION_MAJOR}.${PYTHON2_VERSION_MINOR}/*.py - WORKING_DIRECTORY ${CMAKE_BINARY_DIR}/src/) +# Add some python2 tests +if (BUILDSWIGPYTHON AND PYTHON2INTERP_FOUND) + # Test load python2 modules + add_test (NAME check_load_modules_python2 COMMAND ${PYTHON2_EXECUTABLE} + ${CMAKE_CURRENT_SOURCE_DIR}/check_pythonload.py + ${CMAKE_BINARY_DIR}/src/*/python${PYTHON2_VERSION_MAJOR}.${PYTHON2_VERSION_MINOR}/*.py + WORKING_DIRECTORY ${CMAKE_BINARY_DIR}/src/) - add_test (NAME check_load_examples_python2 COMMAND ${PYTHON2_EXECUTABLE} - ${CMAKE_CURRENT_SOURCE_DIR}/check_pythonload.py - ${CMAKE_SOURCE_DIR}/examples/python/*.py - WORKING_DIRECTORY ${CMAKE_BINARY_DIR}/src/) - endif (PYTHON2INTERP_FOUND) + # Test load examples w/python2 + add_test (NAME check_load_examples_python2 COMMAND ${PYTHON2_EXECUTABLE} + ${CMAKE_CURRENT_SOURCE_DIR}/check_pythonload.py + ${CMAKE_SOURCE_DIR}/examples/python/*.py + WORKING_DIRECTORY ${CMAKE_BINARY_DIR}/src/) +endif (BUILDSWIGPYTHON AND PYTHON2INTERP_FOUND) - if (PYTHON3INTERP_FOUND) - add_test (NAME check_load_modules_python3 COMMAND ${PYTHON3_EXECUTABLE} - ${CMAKE_CURRENT_SOURCE_DIR}/check_pythonload.py - ${CMAKE_BINARY_DIR}/src/*/python${PYTHON3_VERSION_MAJOR}.${PYTHON3_VERSION_MINOR}/*.py - WORKING_DIRECTORY ${CMAKE_BINARY_DIR}/src/) - endif (PYTHON3INTERP_FOUND) -endif (BUILDSWIGPYTHON) +# Add a python3 test +if (BUILDSWIGPYTHON AND PYTHON3INTERP_FOUND) + add_test (NAME check_load_modules_python3 COMMAND ${PYTHON3_EXECUTABLE} + ${CMAKE_CURRENT_SOURCE_DIR}/check_pythonload.py + ${CMAKE_BINARY_DIR}/src/*/python${PYTHON3_VERSION_MAJOR}.${PYTHON3_VERSION_MINOR}/*.py + WORKING_DIRECTORY ${CMAKE_BINARY_DIR}/src/) +endif (BUILDSWIGPYTHON AND PYTHON3INTERP_FOUND)