diff --git a/CMakeLists.txt b/CMakeLists.txt index 20a1f6fd86..d06ef1accc 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -244,6 +244,7 @@ OCV_OPTION(ENABLE_NOISY_WARNINGS "Show all warnings even if they are too no OCV_OPTION(OPENCV_WARNINGS_ARE_ERRORS "Treat warnings as errors" OFF ) OCV_OPTION(ANDROID_EXAMPLES_WITH_LIBS "Build binaries of Android examples with native libraries" OFF IF ANDROID ) OCV_OPTION(ENABLE_IMPL_COLLECTION "Collect implementation data on function call" OFF ) +OCV_OPTION(GENERATE_ABI_DESCRIPTOR "Generate XML file for abi_compliance_checker tool" OFF IF UNIX) if(ENABLE_IMPL_COLLECTION) add_definitions(-DCV_COLLECT_IMPL_DATA) @@ -639,6 +640,9 @@ include(cmake/OpenCVGenConfig.cmake) # Generate Info.plist for the IOS framework include(cmake/OpenCVGenInfoPlist.cmake) +# Generate ABI descriptor +include(cmake/OpenCVGenABI.cmake) + # Generate environment setup file if(INSTALL_TESTS AND OPENCV_TEST_DATA_PATH) if(ANDROID) diff --git a/cmake/OpenCVGenABI.cmake b/cmake/OpenCVGenABI.cmake new file mode 100644 index 0000000000..ebf5bd6553 --- /dev/null +++ b/cmake/OpenCVGenABI.cmake @@ -0,0 +1,29 @@ +if (NOT GENERATE_ABI_DESCRIPTOR) + return() +endif() + +set(filename "opencv_abi.xml") +set(path1 "${CMAKE_BINARY_DIR}/${filename}") + +set(modules "${OPENCV_MODULES_PUBLIC}") +ocv_list_filterout(modules "opencv_ts") + +message(STATUS "Generating ABI compliance checker configuration: ${filename}") + +if (OPENCV_VCSVERSION AND NOT OPENCV_VCSVERSION STREQUAL "unknown") + set(OPENCV_ABI_VERSION "${OPENCV_VCSVERSION}") +else() + set(OPENCV_ABI_VERSION "${OPENCV_VERSION}") +endif() + +# Headers +set(OPENCV_ABI_HEADERS "{RELPATH}/${OPENCV_INCLUDE_INSTALL_PATH}") + +# Libraries +set(OPENCV_ABI_LIBRARIES "{RELPATH}/${OPENCV_LIB_INSTALL_PATH}") + +# Options +set(OPENCV_ABI_GCC_OPTIONS "${CMAKE_CXX_FLAGS} ${CMAKE_CXX_FLAGS_RELEASE}") +string(REGEX REPLACE "([^ ]) +([^ ])" "\\1\\n \\2" OPENCV_ABI_GCC_OPTIONS "${OPENCV_ABI_GCC_OPTIONS}") + +configure_file("${CMAKE_CURRENT_SOURCE_DIR}/cmake/templates/opencv_abi.xml.in" "${path1}") diff --git a/cmake/templates/opencv_abi.xml.in b/cmake/templates/opencv_abi.xml.in new file mode 100644 index 0000000000..49702cc7b4 --- /dev/null +++ b/cmake/templates/opencv_abi.xml.in @@ -0,0 +1,40 @@ + + + + + + + + @OPENCV_ABI_VERSION@ + + + + @OPENCV_ABI_HEADERS@ + + + + @OPENCV_ABI_LIBRARIES@ + + + + opencv2/core/cuda* + opencv2/core/private* + opencv/cxeigen.hpp + opencv2/core/eigen.hpp + opencv2/flann/hdf5.h + opencv2/imgcodecs/ios.h + opencv2/videoio/cap_ios.h + opencv2/ts.hpp + opencv2/ts/* + opencv2/xobjdetect/private.hpp + + + + @OPENCV_ABI_GCC_OPTIONS@ + + + diff --git a/include/opencv/cvaux.h b/include/opencv/cvaux.h index cb49c086ba..fe86c5d98b 100644 --- a/include/opencv/cvaux.h +++ b/include/opencv/cvaux.h @@ -51,12 +51,6 @@ #include "opencv2/photo/photo_c.h" #include "opencv2/video/tracking_c.h" #include "opencv2/objdetect/objdetect_c.h" -#include "opencv2/contrib/compat.hpp" - -#include "opencv2/legacy.hpp" -#include "opencv2/legacy/compat.hpp" -#include "opencv2/legacy/blobtrack.hpp" - #endif