Request for changes-126: Support python 2.7 and 3 wrappings

From OTBWiki
Jump to: navigation, search

[Request for Changes - 126] Support python 2.7 and 3 wrappings

Status

  • Author: Guillaume Pasero
  • Additional Contributors (if different than authors)
  • Submitted on 23.11.2017
  • Proposed target release : 6.4
  • Adopted : +2 from Victor, Guillaume
  • Merged : 84c47885c7da897b2dd1a490b03bbf9cc215eef6

Summary

Support of Python wrappings with version 2.7 and 3 at the same time.

Rationale

The purpose of the RFC is to start a transition to Python 3 wrappings. Since 2.7 is still in use, this RFC adds a support for both wrappings in parallel.

Implementation details

Classes and files

The modifications are focused on CMake files.

M       CMakeLists.txt
M       CMake/UseSWIGLocal.cmake
M       Modules/Wrappers/SWIG/otb-module-init.cmake

A new option OTB_WRAP_PYTHON3 has been added. It enables Python wrappings for versions 3.X only. Note that the existing wrapping OTB_WRAP_PYTHON is unchanged, and compatible with both 2.7 and 3. When both python wrappings are ON, there are 2 calls to find_package(PythonLibs/PythonInterp). The trick to avoid a collision between variables is to add new variables with names carrying "PYTHON3". Before and after the find_package() for Python3, there is a variable swap between the "standard" variables and the "python3" variables.

M       Modules/Wrappers/SWIG/src/CMakeLists.txt
A       Modules/Wrappers/SWIG/src/java/CMakeLists.txt
A       Modules/Wrappers/SWIG/src/python/CMakeLists.txt
A       Modules/Wrappers/SWIG/src/python3/CMakeLists.txt

In order to build properly the wrapping without conflict between include directories, we have to split the different wrapper in sub-folders (and call the corresponding include_directories(Python_DIR) from there). The new 'python3' wrappers are built with the same module name 'otbApplication.py'. They are installed in INSTALL_PREFIX/lib/otb/python3.

D       Modules/Wrappers/SWIG/src/itkPyCommand.cxx
D       Modules/Wrappers/SWIG/src/itkPyCommand.h
A       Modules/Wrappers/SWIG/src/python/itkPyCommand.cxx
A       Modules/Wrappers/SWIG/src/python/itkPyCommand.h

Since itkPyCommand is specific for python and python3 wrappings, it has been moved to the 'python' subfolder.

M       Packaging/CMakeLists.txt
M       Packaging/install_python_bindings.cmake
M       SuperBuild/CMake/External_otb.cmake
M       SuperBuild/CMakeLists.txt

SuperBuild and Packaging have been modified to support this new wrapper.

Applications

Tests

Documentation

Additional notes

This new feature will be used to provide standalone binaries with two python wrappings : for version 2.7 and 3.5. At the moment, it is not possible to provide a Python 3 wrapping that will be guaranteed to work on all 3.x versions.