Private
Public Access
2
0

2 Commits

Author SHA1 Message Date
fbeaa766d1 Dernière modif dans le CMakelist.txt 2026-04-24 15:24:12 +02:00
e8bc904d42 Modifications to compile with Python3, lest version of cmake and last
version of swig (2026-04-23)
 Modifications qui seront validées :
	modifié :         CMakeLists.txt
	modifié :         cmake/modules/OpenCVDetectPython.cmake
	modifié :         src/java/CMakeLists.txt
	modifié :         src/javascript/CMakeLists.txt
	modifié :         src/python/python3/CMakeLists.txt
2026-04-23 00:59:52 +02:00
5 changed files with 97 additions and 90 deletions

View File

@@ -1,6 +1,10 @@
cmake_minimum_required (VERSION 3.22)
#cmake_minimum_required (VERSION 3.22)
cmake_minimum_required (VERSION 4.0)
project (mraa C)
cmake_policy(SET CMP0177 NEW)
#cmake_policy(SET CMP0148 NEW)
FIND_PACKAGE (Threads REQUIRED)
set (CMAKE_C_STANDARD 99)
@@ -74,27 +78,28 @@ if (BUILDCPP)
endif ()
endforeach ()
# This function adds the c++11 flag to a c++ target (if supported)
function(use_cxx_11 targetname)
# This function adds the c++20 flag to a c++ target (if supported)
function(use_cxx_20 targetname)
include(CheckCXXCompilerFlag)
CHECK_CXX_COMPILER_FLAG("-std=c++11" COMPILER_SUPPORTS_CXX11)
if (COMPILER_SUPPORTS_CXX11)
set_target_properties(${targetname} PROPERTIES COMPILE_FLAGS "-std=c++11")
CHECK_CXX_COMPILER_FLAG("-std=c++20" COMPILER_SUPPORTS_CXX20)
if (COMPILER_SUPPORTS_CXX20)
set_target_properties(${targetname} PROPERTIES COMPILE_FLAGS "-std=c++20")
message(STATUS "INFO Use std=c++20")
else()
message(FATAL_ERROR "Target '${targetname}' requires c++11 which is not supported by this compiler")
message(FATAL_ERROR "Target '${targetname}' requires c++20 which is not supported by this compiler")
endif()
endfunction()
# This function adds the c++17 flag to a c++ target (if supported)
function(use_cxx_17 targetname)
include(CheckCXXCompilerFlag)
CHECK_CXX_COMPILER_FLAG("-std=c++17" COMPILER_SUPPORTS_CXX17)
if (COMPILER_SUPPORTS_CXX17)
set_target_properties(${targetname} PROPERTIES COMPILE_FLAGS "-std=c++17")
else()
message(FATAL_ERROR "Target '${targetname}' requires c++17 which is not supported by this compiler")
endif()
endfunction()
# # This function adds the c++17 flag to a c++ target (if supported)
# function(use_cxx_17 targetname)
# include(CheckCXXCompilerFlag)
# CHECK_CXX_COMPILER_FLAG("-std=c++17" COMPILER_SUPPORTS_CXX17)
# if (COMPILER_SUPPORTS_CXX17)
# set_target_properties(${targetname} PROPERTIES COMPILE_FLAGS "-std=c++17")
# else()
# message(FATAL_ERROR "Target '${targetname}' requires c++17 which is not supported by this compiler")
# endif()
# endfunction()
endif()
# Set CMAKE_INSTALL_LIBDIR if not defined
@@ -158,17 +163,17 @@ option (BUILDDOC "Build all doc." OFF)
option (BUILDSWIG "Build swig modules." ON)
option (BUILDSWIGPYTHON "Build swig python modules." ON)
option (BUILDSWIGNODE "Build swig node modules." OFF)
option (BUILDSWIGJAVA "Build Java API." OFF)
option (BUILDSWIGJAVA "Build Java API." ON)
option (USBPLAT "Detection USB platform." OFF)
option (FIRMATA "Add Firmata support to mraa." OFF)
option (ONEWIRE "Add Onewire support to mraa." ON)
option (JSONPLAT "Add Platform loading via a json file." ON)
option (IMRAA "Add Imraa support to mraa." OFF)
option (FTDI4222 "Build with FTDI FT4222 subplatform support." OFF)
option (ENABLEEXAMPLES "Enable building of examples" ON)
option (ENABLEEXAMPLES "Enable building of examples" OFF)
option (INSTALLTOOLS "Install all tools" ON)
option (BUILDTESTS "Override the addition of tests" ON)
option (USEPYTHON3TESTS "Force tests to run with python3" OFF)
option (USEPYTHON3TESTS "Force tests to run with python3" ON)
set (BUILDARCH "" CACHE STRING "Override architecture to build for")

View File

@@ -1,6 +1,3 @@
# From OpenCV Project
# SPDX-License-Identifier: BSD-3-Clause
#
# Find specified Python version
# Arguments:
# preferred_version (value): Version to check for first
@@ -22,36 +19,38 @@
# include_dir (variable): Output of found Python include dir
# include_dir2 (variable): Output of found Python include dir2
# packages_path (variable): Output of found Python packages path
function(find_python preferred_version min_version library_env include_dir_env
found executable version_string version_major version_minor
libs_found libs_version_string libraries library debug_libraries
debug_library include_path include_dir include_dir2 packages_path)
if(NOT ${found})
if(${executable})
set(PYTHON_EXECUTABLE "${${executable}}")
set(Python3_EXECUTABLE "${${executable}}")
endif()
find_package(PythonInterp "${preferred_version}")
if(NOT PYTHONINTERP_FOUND)
find_package(PythonInterp "${min_version}")
find_package(Python3 "${preferred_version}" COMPONENTS Interpreter Development)
if(NOT Python3_FOUND)
find_package(Python3 "${min_version}")
endif()
if(PYTHONINTERP_FOUND)
if(Python3_FOUND)
# Copy outputs
set(_found ${PYTHONINTERP_FOUND})
set(_executable ${PYTHON_EXECUTABLE})
set(_version_string ${PYTHON_VERSION_STRING})
set(_version_major ${PYTHON_VERSION_MAJOR})
set(_version_minor ${PYTHON_VERSION_MINOR})
set(_version_patch ${PYTHON_VERSION_PATCH})
set(_found ${Python3_FOUND})
set(_executable ${Python3_EXECUTABLE})
set(_version_string ${ython3_VERSION})
set(_version_major ${Python3_VERSION_MAJOR})
set(_version_minor ${Python3_VERSION_MINOR})
set(_version_patch ${Python3_VERSION_PATCH})
# Clear find_host_package side effects
unset(PYTHONINTERP_FOUND)
unset(PYTHON_EXECUTABLE CACHE)
unset(PYTHON_VERSION_STRING)
unset(PYTHON_VERSION_MAJOR)
unset(PYTHON_VERSION_MINOR)
unset(PYTHON_VERSION_PATCH)
unset(Python3_FOUND)
unset(Python3_EXECUTABLE CACHE)
unset(Python3_VERSION_STRING)
unset(Python3_VERSION_MAJOR)
unset(Python3_VERSION_MINOR)
unset(Python3_VERSION_PATCH)
endif()
if(_found)
@@ -61,42 +60,42 @@ if(NOT ${found})
# not using _version_string here, because it might not conform to the CMake version format
if(CMAKE_CROSSCOMPILING)
# builder version can differ from target, matching base version (e.g. 2.7)
find_package(PythonLibs "${_version_major_minor}")
find_package(Python "${_version_major_minor}" COMPONENTS Interpreter Development)
else()
find_package(PythonLibs "${_version_major_minor}.${_version_patch}" EXACT)
find_package(Python "${_version_major_minor}.${_version_patch}" EXACT COMPONENTS Interpreter Development)
endif()
if(PYTHONLIBS_FOUND)
if(Python_FOUND)
# Copy outputs
set(_libs_found ${PYTHONLIBS_FOUND})
set(_libraries ${PYTHON_LIBRARIES})
set(_include_path ${PYTHON_INCLUDE_PATH})
set(_include_dirs ${PYTHON_INCLUDE_DIRS})
set(_debug_libraries ${PYTHON_DEBUG_LIBRARIES})
set(_libs_version_string ${PYTHONLIBS_VERSION_STRING})
set(_debug_library ${PYTHON_DEBUG_LIBRARY})
set(_library ${PYTHON_LIBRARY})
set(_library_debug ${PYTHON_LIBRARY_DEBUG})
set(_library_release ${PYTHON_LIBRARY_RELEASE})
set(_include_dir ${PYTHON_INCLUDE_DIR})
set(_include_dir2 ${PYTHON_INCLUDE_DIR2})
set(_libs_found ${Python_Development_FOUND})
set(_libraries ${Python_LIBRARIES})
set(_include_path ${Python_INCLUDE_DIR})
set(_include_dirs ${Python_INCLUDE_DIRS})
set(_debug_libraries ${Python_LIBRARIES})
set(_libs_version_string ${Python_VERSION})
set(_debug_library ${Python_LIBRARY})
set(_library ${Python_LIBRARY})
set(_library_debug ${Python_LIBRARY})
set(_library_release ${Python_LIBRARY})
set(_include_dir ${Python_INCLUDE_DIR})
set(_include_dir2 ${Python_INCLUDE_DIR2})
# Clear find_package side effects
unset(PYTHONLIBS_FOUND)
unset(PYTHON_LIBRARIES)
unset(PYTHON_INCLUDE_PATH)
unset(PYTHON_INCLUDE_DIRS)
unset(PYTHON_DEBUG_LIBRARIES)
unset(PYTHONLIBS_VERSION_STRING)
unset(PYTHON_DEBUG_LIBRARY CACHE)
unset(PYTHON_LIBRARY)
unset(PYTHON_LIBRARY_DEBUG)
unset(PYTHON_LIBRARY_RELEASE)
unset(PYTHON_LIBRARY CACHE)
unset(PYTHON_LIBRARY_DEBUG CACHE)
unset(PYTHON_LIBRARY_RELEASE CACHE)
unset(PYTHON_INCLUDE_DIR CACHE)
unset(PYTHON_INCLUDE_DIR2 CACHE)
unset(Python_Development_FOUND)
unset(Python_LIBRARIES)
unset(Python_INCLUDE_DIR)
unset(Python_INCLUDE_DIRS)
unset(Python_LIBRARIES)
unset(Python_VERSION)
unset(Python_LIBRARY CACHE)
unset(Python_LIBRARY)
unset(Python_LIBRARY_DEBUG)
unset(Python_LIBRARY_RELEASE)
unset(Python_LIBRARY CACHE)
unset(Python_LIBRARY CACHE)
unset(Python_LIBRARY CACHE)
unset(Python_INCLUDE_DIR CACHE)
unset(Python_INCLUDE_DIR2 CACHE)
endif()
endif()
@@ -138,26 +137,26 @@ endfunction(find_python)
set(MIN_VER_PYTHON2 2.7)
set(MIN_VER_PYTHON3 3.2)
find_python(2.7 "${MIN_VER_PYTHON2}" PYTHON2_LIBRARY PYTHON2_INCLUDE_DIR
PYTHON2INTERP_FOUND PYTHON2_EXECUTABLE PYTHON2_VERSION_STRING
PYTHON2_VERSION_MAJOR PYTHON2_VERSION_MINOR PYTHON2LIBS_FOUND
PYTHON2LIBS_VERSION_STRING PYTHON2_LIBRARIES PYTHON2_LIBRARY
PYTHON2_DEBUG_LIBRARIES PYTHON2_LIBRARY_DEBUG PYTHON2_INCLUDE_PATH
PYTHON2_INCLUDE_DIR PYTHON2_INCLUDE_DIR2 PYTHON2_PACKAGES_PATH)
#find_python(2.7 "${MIN_VER_PYTHON2}" PYTHON2_LIBRARY PYTHON2_INCLUDE_DIR
# Python3_FOUND PYTHON2_EXECUTABLE PYTHON2_VERSION_STRING
# PYTHON2_VERSION_MAJOR PYTHON2_VERSION_MINOR PYTHON2LIBS_FOUND
# PYTHON2LIBS_VERSION_STRING PYTHON2_LIBRARIES PYTHON2_LIBRARY
# PYTHON2_DEBUG_LIBRARIES PYTHON2_LIBRARY_DEBUG PYTHON2_INCLUDE_PATH
# PYTHON2_INCLUDE_DIR PYTHON2_INCLUDE_DIR2 PYTHON2_PACKAGES_PATH)
find_python(3 "${MIN_VER_PYTHON3}" PYTHON3_LIBRARY PYTHON3_INCLUDE_DIR
PYTHON3INTERP_FOUND PYTHON3_EXECUTABLE PYTHON3_VERSION_STRING
PYTHON3_VERSION_MAJOR PYTHON3_VERSION_MINOR PYTHON3LIBS_FOUND
PYTHON3LIBS_VERSION_STRING PYTHON3_LIBRARIES PYTHON3_LIBRARY
PYTHON3_DEBUG_LIBRARIES PYTHON3_LIBRARY_DEBUG PYTHON3_INCLUDE_PATH
PYTHON3_INCLUDE_DIR PYTHON3_INCLUDE_DIR2 PYTHON3_PACKAGES_PATH)
find_python(3 "${MIN_VER_PYTHON3}" Python_LIBRARY Python_INCLUDE_DIR
Python3_FOUND Python3_EXECUTABLE Python3_VERSION
Python3_VERSION_MAJOR Python3_VERSION_MINOR PYTHON3LIBS_FOUND
Python_VERSION Python_LIBRARIES Python_LIBRARY
PYTHON3_DEBUG_LIBRARIES PYTHON3_LIBRARY_DEBUG Python_INCLUDE_DIR
Python_INCLUDE_DIR Python_INCLUDE_DIR2 PYTHON3_PACKAGES_PATH)
if(PYTHON_DEFAULT_EXECUTABLE)
set(PYTHON_DEFAULT_AVAILABLE "TRUE")
elseif(PYTHON3INTERP_FOUND) # Use Python 3 as default Python interpreter
set(PYTHON_DEFAULT_AVAILABLE "TRUE")
set(PYTHON_DEFAULT_EXECUTABLE "${PYTHON3_EXECUTABLE}")
elseif(PYTHON2INTERP_FOUND) # Use Python 2 as fallback Python interpreter (if there is no Python 3)
elseif(Python3_FOUND) # Use Python 2 as default Python interpreter
set(PYTHON_DEFAULT_AVAILABLE "TRUE")
set(PYTHON_DEFAULT_EXECUTABLE "${PYTHON2_EXECUTABLE}")
elseif(Python3_FOUND) # Use Python 2 as fallback Python interpreter (if there is no Python 2)
set(PYTHON_DEFAULT_AVAILABLE "TRUE")
set(PYTHON_DEFAULT_EXECUTABLE "${Python3_EXECUTABLE}")
endif()

View File

@@ -38,7 +38,8 @@ if (CMAKE_VERSION VERSION_LESS "3.8")
else ()
swig_add_library (mraajava LANGUAGE java SOURCES mraajava.i mraajni.c)
endif ()
swig_link_libraries (mraajava ${JAVA_LIBRARIES} mraa)
#swig_link_libraries (mraajava ${JAVA_LIBRARIES} mraa)
target_link_libraries (mraajava ${JAVA_LIBRARIES} mraa)
add_custom_command (TARGET mraajava
POST_BUILD

View File

@@ -26,7 +26,8 @@ if (CMAKE_VERSION VERSION_LESS "3.8")
else ()
swig_add_library (mraajs LANGUAGE javascript SOURCES mraajs.i)
endif ()
swig_link_libraries (mraajs mraa)
#swig_link_libraries (mraajs mraa)
target_link_libraries (mraajs mraa)
set_target_properties (mraajs PROPERTIES
COMPILE_FLAGS " -DBUILDING_NODE_EXTENSION -DSWIGJAVASCRIPT=${SWIG_FOUND}"

View File

@@ -8,12 +8,13 @@ if (CMAKE_VERSION VERSION_LESS "3.8")
else ()
swig_add_library (python3-mraa LANGUAGE python SOURCES mraa3.i ../mraapy.c)
endif ()
swig_link_libraries (python3-mraa ${PYTHON3_LIBRARIES} mraa)
#swig_link_libraries (python3-mraa ${PYTHON3_LIBRARIES} mraa)
target_link_libraries (python3-mraa ${Python3_LIBRARIES} mraa)
target_include_directories(${SWIG_MODULE_python3-mraa_REAL_NAME}
PUBLIC
"${CMAKE_CURRENT_SOURCE_DIR}/../.."
"${PYTHON3_INCLUDE_DIR}"
"${Python3_INCLUDE_DIR}"
)
if (DOXYGEN_FOUND AND PYTHON3_EXECUTABLE)