From 21524f5149583dfb121d3e0947a4993f49604b43 Mon Sep 17 00:00:00 2001 From: Glenn Johnson Date: Mon, 31 Jan 2022 21:24:03 -0600 Subject: opencv: add new version, variant, and patch (#27374) * opencv: add new version, variant, and patch - added version 4.5.4 - added tesseract variant - added patch to not add system paths * Add leptonica depends and contrib conflicts * Add dependencies for 1394 support - new package: libraw1394 - add sdl dependency to libdc1394 - add conflict for openjpeg and jasper * Adjust dependencies and conflicts for opencv modules * rewrite of opencv - all prebuilt apps are now variants and can be installed - core is no longer a variant. It was always built anyway so it was not really a variant. - contrib is no longer a variant. All of the contrib modules are now available as variants. - components that can not be built with Spack are no longer variants. They are set to 'off' to prevent pulling from system. - handle the case where a module and a component have the same name - use `with when` framework - adjust dependencies and conflicts - new package: libraw1394 - have libdc1394 depend on libraw1394 - patch to find clp - patch to find onnx - patch for cvv to find Qt - format with black * Incorporate recommended changes - fix variants and dependencies on packages that depend on opencv - remove opencv-3.2 and patches - add some new patches to handle different versions - cntk needs further work - the openvslam package was markde deprecated as it is no longer an active project and the repository has no code * Remove gmake dependency. * Remove sdl support SDL is only used in an example case, but the examples are not built. * remove openvslam * Remove opencv+flann variant from 3dtk * Back out cfitsio constraint from py-astropy * remove opencv+flann variant from dlib * remove boost constraint from 3dtk * Remove non-opencv related bohrium changes * Adjustments for cntk - protobuf constraint at version 3.10 - need specific variants for opencv - improve patch * Deprecate CNTK package * variant tweaks - added appropriate conflicts for cublas - made cuda/cudev relationship explicit - moved openx to pending components as it needs an openvx package * fix isort style error * Use date version from kaldi rather than commit * Revert changes from a bad rebase * Add +flann to 3dtk and dlib * Use compression support with libtiff * remove `+datasets` from opencv dependency The py-torchgeo package does not need opencv+datasets. * fix typo zip --> zlib --- var/spack/repos/builtin/packages/3dtk/package.py | 4 +- .../repos/builtin/packages/bohrium/package.py | 9 +- var/spack/repos/builtin/packages/caffe/package.py | 4 +- .../builtin/packages/candle-benchmarks/package.py | 2 +- var/spack/repos/builtin/packages/dbow2/package.py | 2 +- var/spack/repos/builtin/packages/dlib/package.py | 5 +- var/spack/repos/builtin/packages/lbann/package.py | 2 +- .../repos/builtin/packages/mivisionx/package.py | 2 +- var/spack/repos/builtin/packages/mxnet/package.py | 2 +- .../packages/opencv/cmake_no-system-paths.patch | 38 + .../packages/opencv/opencv3.2_compiler_cmake.patch | 14 - .../builtin/packages/opencv/opencv3.2_ffmpeg.patch | 107 -- .../builtin/packages/opencv/opencv3.2_fj.patch | 20 - .../packages/opencv/opencv3.2_python3.7.patch | 22 - .../packages/opencv/opencv3.2_regacyvtk.patch | 119 -- .../builtin/packages/opencv/opencv3.2_vtk.patch | 20 - .../packages/opencv/opencv3.3_clp_cmake.patch | 14 + .../packages/opencv/opencv3.3_cvv_cmake.patch | 9 + .../packages/opencv/opencv3.4.12_clp_cmake.patch | 14 + .../packages/opencv/opencv3.4.4_cvv_cmake.patch | 9 + .../packages/opencv/opencv4.0.0_clp_cmake.patch | 14 + .../packages/opencv/opencv4.1.1_clp_cmake.patch | 14 + var/spack/repos/builtin/packages/opencv/package.py | 1350 +++++++++++++++----- .../repos/builtin/packages/openvslam/package.py | 33 - 24 files changed, 1134 insertions(+), 695 deletions(-) create mode 100644 var/spack/repos/builtin/packages/opencv/cmake_no-system-paths.patch delete mode 100644 var/spack/repos/builtin/packages/opencv/opencv3.2_compiler_cmake.patch delete mode 100644 var/spack/repos/builtin/packages/opencv/opencv3.2_ffmpeg.patch delete mode 100644 var/spack/repos/builtin/packages/opencv/opencv3.2_fj.patch delete mode 100644 var/spack/repos/builtin/packages/opencv/opencv3.2_python3.7.patch delete mode 100644 var/spack/repos/builtin/packages/opencv/opencv3.2_regacyvtk.patch delete mode 100644 var/spack/repos/builtin/packages/opencv/opencv3.2_vtk.patch create mode 100644 var/spack/repos/builtin/packages/opencv/opencv3.3_clp_cmake.patch create mode 100644 var/spack/repos/builtin/packages/opencv/opencv3.3_cvv_cmake.patch create mode 100644 var/spack/repos/builtin/packages/opencv/opencv3.4.12_clp_cmake.patch create mode 100644 var/spack/repos/builtin/packages/opencv/opencv3.4.4_cvv_cmake.patch create mode 100644 var/spack/repos/builtin/packages/opencv/opencv4.0.0_clp_cmake.patch create mode 100644 var/spack/repos/builtin/packages/opencv/opencv4.1.1_clp_cmake.patch delete mode 100644 var/spack/repos/builtin/packages/openvslam/package.py diff --git a/var/spack/repos/builtin/packages/3dtk/package.py b/var/spack/repos/builtin/packages/3dtk/package.py index a99241c083..9d52b83787 100644 --- a/var/spack/repos/builtin/packages/3dtk/package.py +++ b/var/spack/repos/builtin/packages/3dtk/package.py @@ -46,9 +46,7 @@ class _3dtk(CMakePackage): depends_on('gl', when='+opengl') depends_on('glew', when='+opengl') depends_on('freeglut', when='+opengl') - depends_on('opencv+calib3d+contrib+core+features2d+highgui+imgcodecs+imgproc+ml+videoio', when='+opencv') - # Because concretizer is broken - depends_on('opencv+flann', when='+opencv') + depends_on('opencv+aruco+calib3d+features2d+ffmpeg+highgui+imgcodecs+imgproc+ml+videoio+flann', when='+opencv') depends_on('cuda', when='+cuda') # TODO: add Spack packages for these instead of using vendored copies diff --git a/var/spack/repos/builtin/packages/bohrium/package.py b/var/spack/repos/builtin/packages/bohrium/package.py index 1ee0b2a7b4..f6dd89788b 100644 --- a/var/spack/repos/builtin/packages/bohrium/package.py +++ b/var/spack/repos/builtin/packages/bohrium/package.py @@ -68,8 +68,6 @@ class Bohrium(CMakePackage, CudaPackage): conflicts('~node~proxy') conflicts('~openmp~opencl~cuda') - conflicts('+cbridge', when='~python') - # # Dependencies # @@ -86,10 +84,9 @@ class Bohrium(CMakePackage, CudaPackage): depends_on('blas', when="+blas") # Make sure an appropriate opencv is used - depends_on('opencv+imgproc', when="+opencv") - depends_on('opencv+imgproc+cuda', when="+opencv+cuda") - depends_on('opencv+imgproc+openmp', when="+opencv+openmp") - depends_on('opencv+imgproc+openmp+cuda', when="+opencv+openmp+cuda") + depends_on('opencv@:3+imgproc', when="+opencv") + depends_on('opencv+cudev', when="+opencv+cuda") + depends_on('opencv+openmp', when="+opencv+openmp") depends_on('python', type="build", when="~python") depends_on('python', type=("build", "link", "test"), when="+python") diff --git a/var/spack/repos/builtin/packages/caffe/package.py b/var/spack/repos/builtin/packages/caffe/package.py index 4627f428d2..7953bff17b 100644 --- a/var/spack/repos/builtin/packages/caffe/package.py +++ b/var/spack/repos/builtin/packages/caffe/package.py @@ -37,13 +37,13 @@ class Caffe(CMakePackage, CudaPackage): depends_on('boost +python', when='+python') depends_on('cuda', when='+cuda') depends_on('blas') - depends_on('protobuf') + depends_on('protobuf@:3.17') depends_on('glog') depends_on('gflags') depends_on('hdf5 +hl +cxx') # Optional dependencies - depends_on('opencv@3.2.0:3.4.12+core+highgui+imgproc+imgcodecs', when='+opencv') + depends_on('opencv@:3+highgui+imgproc+imgcodecs', when='+opencv') depends_on('leveldb', when='+leveldb') depends_on('lmdb', when='+lmdb') depends_on('python@2.7:', when='+python') diff --git a/var/spack/repos/builtin/packages/candle-benchmarks/package.py b/var/spack/repos/builtin/packages/candle-benchmarks/package.py index 369abdeab3..3e1647884e 100644 --- a/var/spack/repos/builtin/packages/candle-benchmarks/package.py +++ b/var/spack/repos/builtin/packages/candle-benchmarks/package.py @@ -26,7 +26,7 @@ class CandleBenchmarks(Package): depends_on('py-matplotlib +image@:2.2.3', type=('build', 'run')) depends_on('py-tqdm', type=('build', 'run')) depends_on('py-scikit-learn', type=('build', 'run')) - depends_on('opencv@3.2.0: +core +highgui +imgproc +jpeg +png +tiff -dnn ~eigen ~gtk') + depends_on('opencv@3.2.0: +highgui +imgproc +jpeg +png +tiff ~dnn ~eigen ~gtk') depends_on('py-mdanalysis', type=('build', 'run')) depends_on('py-mpi4py', when='+mpi', type=('build', 'run')) depends_on('py-h5py~mpi', when='~mpi', type=('build', 'run')) diff --git a/var/spack/repos/builtin/packages/dbow2/package.py b/var/spack/repos/builtin/packages/dbow2/package.py index adda1a4ffe..d0d89a14bd 100644 --- a/var/spack/repos/builtin/packages/dbow2/package.py +++ b/var/spack/repos/builtin/packages/dbow2/package.py @@ -16,7 +16,7 @@ class Dbow2(CMakePackage): version('shinsumicco', git='https://github.com/shinsumicco/DBoW2.git', branch='master') depends_on('cmake@3.0:', type='build') - depends_on('opencv+calib3d+core+features2d+highgui+imgproc') + depends_on('opencv+calib3d+features2d+highgui+imgproc') depends_on('boost') depends_on('dlib') depends_on('eigen', type='link') diff --git a/var/spack/repos/builtin/packages/dlib/package.py b/var/spack/repos/builtin/packages/dlib/package.py index 33a9ef4067..78b60a7034 100644 --- a/var/spack/repos/builtin/packages/dlib/package.py +++ b/var/spack/repos/builtin/packages/dlib/package.py @@ -15,7 +15,4 @@ class Dlib(CMakePackage): version('master', branch='master') depends_on('cmake@3.0:', type='build') - depends_on('opencv+calib3d+core+features2d+highgui+imgproc+imgcodecs') - # Because concretizer is broken... - # TODO: remove when original concretizer is obsolete - depends_on('opencv+flann') + depends_on('opencv+calib3d+features2d+highgui+imgproc+imgcodecs+flann') diff --git a/var/spack/repos/builtin/packages/lbann/package.py b/var/spack/repos/builtin/packages/lbann/package.py index 5ec1afa539..86701ef939 100644 --- a/var/spack/repos/builtin/packages/lbann/package.py +++ b/var/spack/repos/builtin/packages/lbann/package.py @@ -189,7 +189,7 @@ class Lbann(CMakePackage, CudaPackage, ROCmPackage): # LBANN wraps OpenCV calls in OpenMP parallel loops, build without OpenMP # Additionally disable video related options, they incorrectly link in a # bad OpenMP library when building with clang or Intel compilers - depends_on('opencv@4.1.0: build_type=RelWithDebInfo +core +highgui ' + depends_on('opencv@4.1.0: build_type=RelWithDebInfo +highgui ' '+imgcodecs +imgproc +jpeg +png +tiff +fast-math ~cuda', when='+vision') diff --git a/var/spack/repos/builtin/packages/mivisionx/package.py b/var/spack/repos/builtin/packages/mivisionx/package.py index 369292144e..b284b0b1e8 100644 --- a/var/spack/repos/builtin/packages/mivisionx/package.py +++ b/var/spack/repos/builtin/packages/mivisionx/package.py @@ -65,7 +65,7 @@ class Mivisionx(CMakePackage): depends_on('cmake@3.5:', type='build') depends_on('ffmpeg@:4', type='build') depends_on('protobuf@:3', type='build') - depends_on('opencv@:3.4 +calib3d+core+features2d+highgui+imgcodecs+imgproc+video+videoio+flann+photo+objdetect', type='build') + depends_on('opencv@:3.4 +calib3d+features2d+highgui+imgcodecs+imgproc+video+videoio+flann+photo+objdetect', type='build') depends_on('rocm-opencl@3.5.0', when='@1.7') depends_on('rocm-cmake@3.5.0', type='build', when='@1.7') depends_on('miopen-opencl@3.5.0', when='@1.7') diff --git a/var/spack/repos/builtin/packages/mxnet/package.py b/var/spack/repos/builtin/packages/mxnet/package.py index 826c587a32..e82aba74e2 100644 --- a/var/spack/repos/builtin/packages/mxnet/package.py +++ b/var/spack/repos/builtin/packages/mxnet/package.py @@ -63,7 +63,7 @@ class Mxnet(CMakePackage, CudaPackage): depends_on('cuda@:11.3', when='@2.0.0: +cuda') depends_on('cudnn', when='+cudnn') depends_on('nccl', when='+nccl') - depends_on('opencv+core+highgui+imgproc+imgcodecs', when='+opencv') + depends_on('opencv+highgui+imgproc+imgcodecs', when='+opencv') depends_on('lapack', when='+lapack') depends_on('onednn', when='+mkldnn') diff --git a/var/spack/repos/builtin/packages/opencv/cmake_no-system-paths.patch b/var/spack/repos/builtin/packages/opencv/cmake_no-system-paths.patch new file mode 100644 index 0000000000..25286749e6 --- /dev/null +++ b/var/spack/repos/builtin/packages/opencv/cmake_no-system-paths.patch @@ -0,0 +1,38 @@ +diff -ru a/CMakeLists.txt b/CMakeLists.txt +--- a/CMakeLists.txt 2021-10-09 10:48:26.000000000 -0500 ++++ b/CMakeLists.txt 2021-11-11 17:29:04.189734621 -0600 +@@ -161,34 +161,6 @@ + include(cmake/OpenCVDetectCXXCompiler.cmake) + ocv_cmake_hook(POST_DETECT_COMPILER) + +-# Add these standard paths to the search paths for FIND_LIBRARY +-# to find libraries from these locations first +-if(UNIX AND NOT ANDROID) +- if(X86_64 OR CMAKE_SIZEOF_VOID_P EQUAL 8) +- if(EXISTS /lib64) +- list(APPEND CMAKE_LIBRARY_PATH /lib64) +- else() +- list(APPEND CMAKE_LIBRARY_PATH /lib) +- endif() +- if(EXISTS /usr/lib64) +- list(APPEND CMAKE_LIBRARY_PATH /usr/lib64) +- else() +- list(APPEND CMAKE_LIBRARY_PATH /usr/lib) +- endif() +- elseif(X86 OR CMAKE_SIZEOF_VOID_P EQUAL 4) +- if(EXISTS /lib32) +- list(APPEND CMAKE_LIBRARY_PATH /lib32) +- else() +- list(APPEND CMAKE_LIBRARY_PATH /lib) +- endif() +- if(EXISTS /usr/lib32) +- list(APPEND CMAKE_LIBRARY_PATH /usr/lib32) +- else() +- list(APPEND CMAKE_LIBRARY_PATH /usr/lib) +- endif() +- endif() +-endif() +- + # Add these standard paths to the search paths for FIND_PATH + # to find include files from these locations first + if(MINGW) diff --git a/var/spack/repos/builtin/packages/opencv/opencv3.2_compiler_cmake.patch b/var/spack/repos/builtin/packages/opencv/opencv3.2_compiler_cmake.patch deleted file mode 100644 index 4fe312e9ab..0000000000 --- a/var/spack/repos/builtin/packages/opencv/opencv3.2_compiler_cmake.patch +++ /dev/null @@ -1,14 +0,0 @@ ---- a/cmake/OpenCVCompilerOptions.cmake 2016-12-23 06:54:44.000000000 -0600 -+++ b/cmake/OpenCVCompilerOptions.cmake 2021-06-16 11:51:11.616354728 -0500 -@@ -18,9 +18,9 @@ - message(STATUS "Unable to compile program with enabled ccache, reverting...") - set_property(GLOBAL PROPERTY RULE_LAUNCH_COMPILE "${__OLD_RULE_LAUNCH_COMPILE}") - endif() -- else() -- message(STATUS "Looking for ccache - not found") - endif() -+ else() -+ message(STATUS "Looking for ccache - not found") - endif() - endif() - diff --git a/var/spack/repos/builtin/packages/opencv/opencv3.2_ffmpeg.patch b/var/spack/repos/builtin/packages/opencv/opencv3.2_ffmpeg.patch deleted file mode 100644 index d7786308d8..0000000000 --- a/var/spack/repos/builtin/packages/opencv/opencv3.2_ffmpeg.patch +++ /dev/null @@ -1,107 +0,0 @@ -commit b1d208891b9f6ae3968730b120a5d0dcbba679d0 -Author: Jonathan Viney -Date: Sun Nov 19 07:08:41 2017 +1300 - - Merge pull request #10011 from jviney:master - - Fix build with FFmpeg master. Some deprecated APIs have been removed. (#10011) - - * Fix build with FFmpeg master. - - * ffmpeg: update AVFMT_RAWPICTURE support removal - -diff --git a/modules/videoio/src/cap_ffmpeg_impl.hpp b/modules/videoio/src/cap_ffmpeg_impl.hpp -index 5f51e65134..46461483a7 100644 ---- a/modules/videoio/src/cap_ffmpeg_impl.hpp -+++ b/modules/videoio/src/cap_ffmpeg_impl.hpp -@@ -149,6 +149,10 @@ extern "C" { - #define AV_PIX_FMT_GRAY16BE PIX_FMT_GRAY16BE - #endif - -+#ifndef PKT_FLAG_KEY -+#define PKT_FLAG_KEY AV_PKT_FLAG_KEY -+#endif -+ - #if LIBAVUTIL_BUILD >= (LIBAVUTIL_VERSION_MICRO >= 100 \ - ? CALC_FFMPEG_VERSION(52, 38, 100) : CALC_FFMPEG_VERSION(52, 13, 0)) - #define USE_AV_FRAME_GET_BUFFER 1 -@@ -1570,7 +1574,11 @@ static AVStream *icv_add_video_stream_FFMPEG(AVFormatContext *oc, - // some formats want stream headers to be seperate - if(oc->oformat->flags & AVFMT_GLOBALHEADER) - { -+#if LIBAVCODEC_BUILD > CALC_FFMPEG_VERSION(56, 35, 0) -+ c->flags |= AV_CODEC_FLAG_GLOBAL_HEADER; -+#else - c->flags |= CODEC_FLAG_GLOBAL_HEADER; -+#endif - } - #endif - -@@ -1598,23 +1606,24 @@ static int icv_av_write_frame_FFMPEG( AVFormatContext * oc, AVStream * video_st, - #endif - int ret = OPENCV_NO_FRAMES_WRITTEN_CODE; - -- if (oc->oformat->flags & AVFMT_RAWPICTURE) { -+#if LIBAVFORMAT_BUILD < CALC_FFMPEG_VERSION(57, 0, 0) -+ if (oc->oformat->flags & AVFMT_RAWPICTURE) -+ { - /* raw video case. The API will change slightly in the near - futur for that */ - AVPacket pkt; - av_init_packet(&pkt); - --#ifndef PKT_FLAG_KEY --#define PKT_FLAG_KEY AV_PKT_FLAG_KEY --#endif -- - pkt.flags |= PKT_FLAG_KEY; - pkt.stream_index= video_st->index; - pkt.data= (uint8_t *)picture; - pkt.size= sizeof(AVPicture); - - ret = av_write_frame(oc, &pkt); -- } else { -+ } -+ else -+#endif -+ { - /* encode the image */ - AVPacket pkt; - av_init_packet(&pkt); -@@ -1772,7 +1781,9 @@ void CvVideoWriter_FFMPEG::close() - /* write the trailer, if any */ - if(ok && oc) - { -- if( (oc->oformat->flags & AVFMT_RAWPICTURE) == 0 ) -+#if LIBAVFORMAT_BUILD < CALC_FFMPEG_VERSION(57, 0, 0) -+ if (!(oc->oformat->flags & AVFMT_RAWPICTURE)) -+#endif - { - for(;;) - { -@@ -2071,7 +2082,11 @@ bool CvVideoWriter_FFMPEG::open( const char * filename, int fourcc, - - outbuf = NULL; - -- if (!(oc->oformat->flags & AVFMT_RAWPICTURE)) { -+ -+#if LIBAVFORMAT_BUILD < CALC_FFMPEG_VERSION(57, 0, 0) -+ if (!(oc->oformat->flags & AVFMT_RAWPICTURE)) -+#endif -+ { - /* allocate output buffer */ - /* assume we will never get codec output with more than 4 bytes per pixel... */ - outbuf_size = width*height*4; -@@ -2376,7 +2391,11 @@ AVStream* OutputMediaStream_FFMPEG::addVideoStream(AVFormatContext *oc, CV_CODEC - // some formats want stream headers to be seperate - if (oc->oformat->flags & AVFMT_GLOBALHEADER) - { -- c->flags |= CODEC_FLAG_GLOBAL_HEADER; -+ #if LIBAVCODEC_BUILD > CALC_FFMPEG_VERSION(56, 35, 0) -+ c->flags |= AV_CODEC_FLAG_GLOBAL_HEADER; -+ #else -+ c->flags |= CODEC_FLAG_GLOBAL_HEADER; -+ #endif - } - #endif - diff --git a/var/spack/repos/builtin/packages/opencv/opencv3.2_fj.patch b/var/spack/repos/builtin/packages/opencv/opencv3.2_fj.patch deleted file mode 100644 index dae8af256b..0000000000 --- a/var/spack/repos/builtin/packages/opencv/opencv3.2_fj.patch +++ /dev/null @@ -1,20 +0,0 @@ -diff -ru opencv-3.2.0.org/modules/core/include/opencv2/core/hal/intrin_neon.hpp opencv-3.2.0/modules/core/include/opencv2/core/hal/intrin_neon.hpp ---- opencv-3.2.0.org/modules/core/include/opencv2/core/hal/intrin_neon.hpp 2016-12-23 21:54:44.000000000 +0900 -+++ opencv-3.2.0/modules/core/include/opencv2/core/hal/intrin_neon.hpp 2020-05-27 14:39:11.288700481 +0900 -@@ -282,10 +282,16 @@ - { return (int16x4_t)a; } - template static inline float16x4_t vreinterpret_f16_s16(T a) - { return (float16x4_t)a; } -+#ifdef vld1_f16 -+#undef vld1_f16 -+#endif - template static inline float16x4_t vld1_f16(const T* ptr) - { return vreinterpret_f16_s16(vld1_s16((const short*)ptr)); } -+#ifdef vst1_f16 -+#undef vst1_f16 -+#endif - template static inline void vst1_f16(T* ptr, float16x4_t a) - { vst1_s16((short*)ptr, vreinterpret_s16_f16(a)); } - - struct v_float16x4 - { diff --git a/var/spack/repos/builtin/packages/opencv/opencv3.2_python3.7.patch b/var/spack/repos/builtin/packages/opencv/opencv3.2_python3.7.patch deleted file mode 100644 index d96011330d..0000000000 --- a/var/spack/repos/builtin/packages/opencv/opencv3.2_python3.7.patch +++ /dev/null @@ -1,22 +0,0 @@ -commit 0c4328fbf3da0da57a91b2133578c5100370b867 -Author: ilovezfs -Date: Tue Jul 3 06:31:39 2018 +0000 - - Python 3.7 compatability - - The result of PyUnicode_AsUTF8() is now of type const char * rather of - char *. - -diff --git a/modules/python/src2/cv2.cpp b/modules/python/src2/cv2.cpp -index e16fcbacf2..5a6bf7ef62 100644 ---- a/modules/python/src2/cv2.cpp -+++ b/modules/python/src2/cv2.cpp -@@ -916,7 +916,7 @@ bool pyopencv_to(PyObject* obj, String& value, const char* name) - (void)name; - if(!obj || obj == Py_None) - return true; -- char* str = PyString_AsString(obj); -+ const char* str = PyString_AsString(obj); - if(!str) - return false; - value = String(str); diff --git a/var/spack/repos/builtin/packages/opencv/opencv3.2_regacyvtk.patch b/var/spack/repos/builtin/packages/opencv/opencv3.2_regacyvtk.patch deleted file mode 100644 index f5341c62fa..0000000000 --- a/var/spack/repos/builtin/packages/opencv/opencv3.2_regacyvtk.patch +++ /dev/null @@ -1,119 +0,0 @@ -commit 235889ddbb1aaa4f0dfaee730f42a8476c0e50f0 -Author: jasjuang -Date: Thu Dec 21 01:33:25 2017 -0800 - - handle legacy VTK functions - -diff --git a/modules/viz/src/clouds.cpp b/modules/viz/src/clouds.cpp -index 48d057d2a8..ab8fd43e40 100644 ---- a/modules/viz/src/clouds.cpp -+++ b/modules/viz/src/clouds.cpp -@@ -77,7 +77,9 @@ cv::viz::WCloud::WCloud(cv::InputArray cloud, cv::InputArray colors, cv::InputAr - vtkSmartPointer mapper = vtkSmartPointer::New(); - VtkUtils::SetInputData(mapper, cloud_source->GetOutput()); - mapper->SetScalarModeToUsePointData(); -+#if VTK_MAJOR_VERSION < 8 - mapper->ImmediateModeRenderingOff(); -+#endif - mapper->SetScalarRange(0, 255); - mapper->ScalarVisibilityOn(); - -@@ -117,7 +119,9 @@ cv::viz::WPaintedCloud::WPaintedCloud(InputArray cloud) - - vtkSmartPointer mapper = vtkSmartPointer::New(); - VtkUtils::SetInputData(mapper, vtkPolyData::SafeDownCast(elevation->GetOutput())); -+#if VTK_MAJOR_VERSION < 8 - mapper->ImmediateModeRenderingOff(); -+#endif - mapper->ScalarVisibilityOn(); - mapper->SetColorModeToMapScalars(); - -@@ -143,7 +147,9 @@ cv::viz::WPaintedCloud::WPaintedCloud(InputArray cloud, const Point3d& p1, const - - vtkSmartPointer mapper = vtkSmartPointer::New(); - VtkUtils::SetInputData(mapper, vtkPolyData::SafeDownCast(elevation->GetOutput())); -+#if VTK_MAJOR_VERSION < 8 - mapper->ImmediateModeRenderingOff(); -+#endif - mapper->ScalarVisibilityOn(); - mapper->SetColorModeToMapScalars(); - -@@ -182,7 +188,9 @@ cv::viz::WPaintedCloud::WPaintedCloud(InputArray cloud, const Point3d& p1, const - - vtkSmartPointer mapper = vtkSmartPointer::New(); - VtkUtils::SetInputData(mapper, vtkPolyData::SafeDownCast(elevation->GetOutput())); -+#if VTK_MAJOR_VERSION < 8 - mapper->ImmediateModeRenderingOff(); -+#endif - mapper->ScalarVisibilityOn(); - mapper->SetColorModeToMapScalars(); - mapper->SetLookupTable(color_transfer); -@@ -211,7 +219,9 @@ cv::viz::WCloudCollection::WCloudCollection() - vtkSmartPointer mapper = vtkSmartPointer::New(); - mapper->SetInputConnection(append_filter->GetOutputPort()); - mapper->SetScalarModeToUsePointData(); -+#if VTK_MAJOR_VERSION < 8 - mapper->ImmediateModeRenderingOff(); -+#endif - mapper->SetScalarRange(0, 255); - mapper->ScalarVisibilityOn(); - -@@ -416,7 +426,9 @@ cv::viz::WMesh::WMesh(const Mesh &mesh) - - vtkSmartPointer mapper = vtkSmartPointer::New(); - mapper->SetScalarModeToUsePointData(); -+#if VTK_MAJOR_VERSION < 8 - mapper->ImmediateModeRenderingOff(); -+#endif - VtkUtils::SetInputData(mapper, polydata); - - vtkSmartPointer actor = vtkSmartPointer::New(); -@@ -468,7 +480,9 @@ cv::viz::WWidgetMerger::WWidgetMerger() - vtkSmartPointer mapper = vtkSmartPointer::New(); - mapper->SetInputConnection(append_filter->GetOutputPort()); - mapper->SetScalarModeToUsePointData(); -+#if VTK_MAJOR_VERSION < 8 - mapper->ImmediateModeRenderingOff(); -+#endif - mapper->SetScalarRange(0, 255); - mapper->ScalarVisibilityOn(); - -diff --git a/modules/viz/src/widget.cpp b/modules/viz/src/widget.cpp -index 0473c274bc..b324a4e26c 100644 ---- a/modules/viz/src/widget.cpp -+++ b/modules/viz/src/widget.cpp -@@ -91,7 +91,9 @@ cv::viz::Widget cv::viz::Widget::fromPlyFile(const String &file_name) - - vtkSmartPointer mapper = vtkSmartPointer::New(); - mapper->SetInputConnection( reader->GetOutputPort() ); -+#if VTK_MAJOR_VERSION < 8 - mapper->ImmediateModeRenderingOff(); -+#endif - - vtkSmartPointer actor = vtkSmartPointer::New(); - actor->GetProperty()->SetInterpolationToFlat(); -@@ -113,7 +115,11 @@ void cv::viz::Widget::setRenderingProperty(int property, double value) - case POINT_SIZE: actor->GetProperty()->SetPointSize(float(value)); break; - case OPACITY: actor->GetProperty()->SetOpacity(value); break; - case LINE_WIDTH: actor->GetProperty()->SetLineWidth(float(value)); break; -+#if VTK_MAJOR_VERSION < 8 - case IMMEDIATE_RENDERING: actor->GetMapper()->SetImmediateModeRendering(int(value)); break; -+#else -+ case IMMEDIATE_RENDERING: std::cerr << "this property has no effect" << std::endl; break; -+#endif - case AMBIENT: actor->GetProperty()->SetAmbient(float(value)); break; - case LIGHTING: - { -@@ -191,8 +197,11 @@ double cv::viz::Widget::getRenderingProperty(int property) const - case POINT_SIZE: value = actor->GetProperty()->GetPointSize(); break; - case OPACITY: value = actor->GetProperty()->GetOpacity(); break; - case LINE_WIDTH: value = actor->GetProperty()->GetLineWidth(); break; -+#if VTK_MAJOR_VERSION < 8 - case IMMEDIATE_RENDERING: value = actor->GetMapper()->GetImmediateModeRendering(); break; -- -+#else -+ case IMMEDIATE_RENDERING: std::cerr << "this property has no effect" << std::endl; break; -+#endif - case FONT_SIZE: - { - vtkTextActor* text_actor = vtkTextActor::SafeDownCast(actor); diff --git a/var/spack/repos/builtin/packages/opencv/opencv3.2_vtk.patch b/var/spack/repos/builtin/packages/opencv/opencv3.2_vtk.patch deleted file mode 100644 index e5eecd7092..0000000000 --- a/var/spack/repos/builtin/packages/opencv/opencv3.2_vtk.patch +++ /dev/null @@ -1,20 +0,0 @@ -commit d810c73396ec7931addf3e7f75b17daf4e184bf4 -Author: Adam Rankin -Date: Sun Mar 11 22:28:18 2018 -0400 - - Update precomp.hpp - - Enabling build of visualization module when using VTK 9 (current HEAD of d5bbb9e99bbc6d11d2196c48bfd8f33508554551) - -diff --git a/modules/viz/src/precomp.hpp b/modules/viz/src/precomp.hpp -index 369db191d3..dc5a5db1ea 100644 ---- a/modules/viz/src/precomp.hpp -+++ b/modules/viz/src/precomp.hpp -@@ -104,6 +104,7 @@ - #include - #include - #include -+#include - #include - #include - #include diff --git a/var/spack/repos/builtin/packages/opencv/opencv3.3_clp_cmake.patch b/var/spack/repos/builtin/packages/opencv/opencv3.3_clp_cmake.patch new file mode 100644 index 0000000000..45af238e30 --- /dev/null +++ b/var/spack/repos/builtin/packages/opencv/opencv3.3_clp_cmake.patch @@ -0,0 +1,14 @@ +diff -ru a/cmake/OpenCVFindLibsPerf.cmake b/cmake/OpenCVFindLibsPerf.cmake +--- a/cmake/OpenCVFindLibsPerf.cmake 2019-04-06 16:43:23.000000000 -0500 ++++ b/cmake/OpenCVFindLibsPerf.cmake 2021-11-26 18:35:50.606453927 -0600 +@@ -62,9 +62,7 @@ + PKG_CHECK_MODULES(CLP clp) + if(CLP_FOUND) + set(HAVE_CLP TRUE) +- if(NOT ${CLP_INCLUDE_DIRS} STREQUAL "") +- ocv_include_directories(${CLP_INCLUDE_DIRS}) +- endif() ++ ocv_include_directories(${CLP_INCLUDE_DIRS}) + link_directories(${CLP_LIBRARY_DIRS}) + set(OPENCV_LINKER_LIBS ${OPENCV_LINKER_LIBS} ${CLP_LIBRARIES}) + endif() diff --git a/var/spack/repos/builtin/packages/opencv/opencv3.3_cvv_cmake.patch b/var/spack/repos/builtin/packages/opencv/opencv3.3_cvv_cmake.patch new file mode 100644 index 0000000000..a4d45005a4 --- /dev/null +++ b/var/spack/repos/builtin/packages/opencv/opencv3.3_cvv_cmake.patch @@ -0,0 +1,9 @@ +diff -ru a/opencv_contrib/modules/cvv/CMakeLists.txt b/opencv_contrib/modules/cvv/CMakeLists.txt +--- a/opencv_contrib/modules/cvv/CMakeLists.txt 2021-11-26 18:39:03.000000000 -0600 ++++ b/opencv_contrib/modules/cvv/CMakeLists.txt 2021-11-26 18:57:51.215905427 -0600 +@@ -1,4 +1,4 @@ +-if(NOT HAVE_QT5) ++if(NOT HAVE_QT) + ocv_module_disable(cvv) + return() + endif() diff --git a/var/spack/repos/builtin/packages/opencv/opencv3.4.12_clp_cmake.patch b/var/spack/repos/builtin/packages/opencv/opencv3.4.12_clp_cmake.patch new file mode 100644 index 0000000000..00f97b45b7 --- /dev/null +++ b/var/spack/repos/builtin/packages/opencv/opencv3.4.12_clp_cmake.patch @@ -0,0 +1,14 @@ +diff -ru a/cmake/OpenCVFindLibsPerf.cmake b/cmake/OpenCVFindLibsPerf.cmake +--- a/cmake/OpenCVFindLibsPerf.cmake 2020-10-10 15:14:29.000000000 -0500 ++++ b/cmake/OpenCVFindLibsPerf.cmake 2021-11-26 18:30:13.861053938 -0600 +@@ -120,9 +120,7 @@ + ocv_check_modules(CLP clp) + if(CLP_FOUND) + set(HAVE_CLP TRUE) +- if(NOT ${CLP_INCLUDE_DIRS} STREQUAL "") +- ocv_include_directories(${CLP_INCLUDE_DIRS}) +- endif() ++ ocv_include_directories(${CLP_INCLUDE_DIRS}) + list(APPEND OPENCV_LINKER_LIBS ${CLP_LIBRARIES}) + endif() + endif() diff --git a/var/spack/repos/builtin/packages/opencv/opencv3.4.4_cvv_cmake.patch b/var/spack/repos/builtin/packages/opencv/opencv3.4.4_cvv_cmake.patch new file mode 100644 index 0000000000..794bab58a4 --- /dev/null +++ b/var/spack/repos/builtin/packages/opencv/opencv3.4.4_cvv_cmake.patch @@ -0,0 +1,9 @@ +diff -ru a/opencv_contrib/modules/cvv/CMakeLists.txt b/opencv_contrib/modules/cvv/CMakeLists.txt +--- a/opencv_contrib/modules/cvv/CMakeLists.txt 2021-11-21 21:42:44.000000000 -0600 ++++ b/opencv_contrib/modules/cvv/CMakeLists.txt 2021-11-22 12:57:40.359680713 -0600 +@@ -1,4 +1,4 @@ +-if(NOT HAVE_QT5 OR NOT HAVE_CXX11) ++if(NOT HAVE_QT OR NOT HAVE_CXX11) + ocv_module_disable(cvv) + return() + endif() diff --git a/var/spack/repos/builtin/packages/opencv/opencv4.0.0_clp_cmake.patch b/var/spack/repos/builtin/packages/opencv/opencv4.0.0_clp_cmake.patch new file mode 100644 index 0000000000..70f2f88a34 --- /dev/null +++ b/var/spack/repos/builtin/packages/opencv/opencv4.0.0_clp_cmake.patch @@ -0,0 +1,14 @@ +diff -ru a/cmake/OpenCVFindLibsPerf.cmake b/cmake/OpenCVFindLibsPerf.cmake +--- a/cmake/OpenCVFindLibsPerf.cmake 2019-04-07 12:09:10.000000000 -0500 ++++ b/cmake/OpenCVFindLibsPerf.cmake 2021-11-26 18:18:49.532203131 -0600 +@@ -62,9 +62,7 @@ + PKG_CHECK_MODULES(CLP clp) + if(CLP_FOUND) + set(HAVE_CLP TRUE) +- if(NOT ${CLP_INCLUDE_DIRS} STREQUAL "") +- ocv_include_directories(${CLP_INCLUDE_DIRS}) +- endif() ++ ocv_include_directories(${CLP_INCLUDE_DIRS}) + link_directories(${CLP_LIBRARY_DIRS}) + set(OPENCV_LINKER_LIBS ${OPENCV_LINKER_LIBS} ${CLP_LIBRARIES}) + endif() diff --git a/var/spack/repos/builtin/packages/opencv/opencv4.1.1_clp_cmake.patch b/var/spack/repos/builtin/packages/opencv/opencv4.1.1_clp_cmake.patch new file mode 100644 index 0000000000..d795d52873 --- /dev/null +++ b/var/spack/repos/builtin/packages/opencv/opencv4.1.1_clp_cmake.patch @@ -0,0 +1,14 @@ +diff -ru a/cmake/OpenCVFindLibsPerf.cmake b/cmake/OpenCVFindLibsPerf.cmake +--- a/cmake/OpenCVFindLibsPerf.cmake 2021-10-09 10:48:26.000000000 -0500 ++++ b/cmake/OpenCVFindLibsPerf.cmake 2021-11-19 19:10:47.895667720 -0600 +@@ -128,9 +128,7 @@ + ocv_check_modules(CLP clp) + if(CLP_FOUND) + set(HAVE_CLP TRUE) +- if(NOT ${CLP_INCLUDE_DIRS} STREQUAL "") +- ocv_include_directories(${CLP_INCLUDE_DIRS}) +- endif() ++ ocv_include_directories(${CLP_INCLUDE_DIRS}) + list(APPEND OPENCV_LINKER_LIBS ${CLP_LIBRARIES}) + endif() + endif() diff --git a/var/spack/repos/builtin/packages/opencv/package.py b/var/spack/repos/builtin/packages/opencv/package.py index 966203caa5..9ae1492c71 100644 --- a/var/spack/repos/builtin/packages/opencv/package.py +++ b/var/spack/repos/builtin/packages/opencv/package.py @@ -2,399 +2,1069 @@ # Spack Project Developers. See the top-level COPYRIGHT file for details. # # SPDX-License-Identifier: (Apache-2.0 OR MIT) + + class Opencv(CMakePackage, CudaPackage): """OpenCV (Open Source Computer Vision Library) is an open source computer vision and machine learning software library.""" - homepage = 'https://opencv.org/' - url = 'https://github.com/opencv/opencv/archive/4.5.0.tar.gz' - git = 'https://github.com/opencv/opencv.git' - - maintainers = ['bvanessen', 'adamjstewart'] - - version('master', branch='master') - version('4.5.2', sha256='ae258ed50aa039279c3d36afdea5c6ecf762515836b27871a8957c610d0424f8') - version('4.5.1', sha256='e27fe5b168918ab60d58d7ace2bd82dd14a4d0bd1d3ae182952c2113f5637513') - version('4.5.0', sha256='dde4bf8d6639a5d3fe34d5515eab4a15669ded609a1d622350c7ff20dace1907') - version('4.2.0', sha256='9ccb2192d7e8c03c58fee07051364d94ed7599363f3b0dce1c5e6cc11c1bb0ec') - version('4.1.2', sha256='385dd0a9c25e67ef0dd60e022d2a2d7b17e2f36819cf3cb46aa8cdff5c5282c9') - version('4.1.1', sha256='5de5d96bdfb9dad6e6061d70f47a0a91cee96bb35afb9afb9ecb3d43e243d217') - version('4.1.0', sha256='8f6e4ab393d81d72caae6e78bd0fd6956117ec9f006fba55fcdb88caf62989b7') - version('4.0.1', sha256='7b86a0ee804244e0c407321f895b15e4a7162e9c5c0d2efc85f1cadec4011af4') - version('4.0.0', sha256='3787b3cc7b21bba1441819cb00c636911a846c0392ddf6211d398040a1e4886c') - version('3.4.12', sha256='c8919dfb5ead6be67534bf794cb0925534311f1cd5c6680f8164ad1813c88d13') - version('3.4.6', sha256='e7d311ff97f376b8ee85112e2b536dbf4bdf1233673500175ed7cf21a0089f6d') - version('3.4.5', sha256='0c57d9dd6d30cbffe68a09b03f4bebe773ee44dc8ff5cd6eaeb7f4d5ef3b428e') - version('3.4.4', sha256='a35b00a71d77b484f73ec485c65fe56c7a6fa48acd5ce55c197aef2e13c78746') - version('3.4.3', sha256='4eef85759d5450b183459ff216b4c0fa43e87a4f6aa92c8af649f89336f002ec') - version('3.4.1', sha256='f1b87684d75496a1054405ae3ee0b6573acaf3dad39eaf4f1d66fdd7e03dc852') - version('3.4.0', sha256='678cc3d2d1b3464b512b084a8cca1fad7de207c7abdf2caa1fed636c13e916da') - version('3.3.1', sha256='5dca3bb0d661af311e25a72b04a7e4c22c47c1aa86eb73e70063cd378a2aa6ee') - version('3.3.0', sha256='8bb312b9d9fd17336dc1f8b3ac82f021ca50e2034afc866098866176d985adc6') - version('3.2.0', sha256='9541efbf68f298f45914b4e837490647f4d5e472b4c0c04414a787d116a702b2', deprecated=True) - version('3.1.0', sha256='f3b160b9213dd17aa15ddd45f6fb06017fe205359dbd1f7219aad59c98899f15', deprecated=True) - version('2.4.13.2', sha256='4b00c110e6c54943cbbb7cf0d35c5bc148133ab2095ee4aaa0ac0a4f67c58080', deprecated=True) - version('2.4.13.1', sha256='0d5ce5e0973e3a745f927d1ee097aaf909aae59f787be6d27a03d639e2d96bd7', deprecated=True) - version('2.4.13', sha256='94ebcca61c30034d5fb16feab8ec12c8a868f5162d20a9f0396f0f5f6d8bbbff', deprecated=True) - version('2.4.12.3', sha256='a4cbcd2d470860b0cf1f8faf504619c18a8ac38fd414c5a88ed3e94c963aa750', deprecated=True) - version('2.4.12.2', sha256='150a165eb14a5ea74fb94dcc16ac7d668a6ff20a4449df2570734a2abaab9c0e', deprecated=True) - version('2.4.12.1', sha256='c1564771f79304a2597ae4f74f44032021e3a46657e4a117060c08f5ed05ad83', deprecated=True) + homepage = "https://opencv.org/" + url = "https://github.com/opencv/opencv/archive/4.5.0.tar.gz" + git = "https://github.com/opencv/opencv.git" + + maintainers = ["bvanessen", "adamjstewart", "glennpj"] + + version("master", branch="master") + version( + "4.5.4", + sha256="c20bb83dd790fc69df9f105477e24267706715a9d3c705ca1e7f613c7b3bad3d", + ) + version( + "4.5.2", + sha256="ae258ed50aa039279c3d36afdea5c6ecf762515836b27871a8957c610d0424f8", + ) + version( + "4.5.1", + sha256="e27fe5b168918ab60d58d7ace2bd82dd14a4d0bd1d3ae182952c2113f5637513", + ) + version( + "4.5.0", + sha256="dde4bf8d6639a5d3fe34d5515eab4a15669ded609a1d622350c7ff20dace1907", + ) + version( + "4.2.0", + sha256="9ccb2192d7e8c03c58fee07051364d94ed7599363f3b0dce1c5e6cc11c1bb0ec", + ) + version( + "4.1.2", + sha256="385dd0a9c25e67ef0dd60e022d2a2d7b17e2f36819cf3cb46aa8cdff5c5282c9", + ) + version( + "4.1.1", + sha256="5de5d96bdfb9dad6e6061d70f47a0a91cee96bb35afb9afb9ecb3d43e243d217", + ) + version( + "4.1.0", + sha256="8f6e4ab393d81d72caae6e78bd0fd6956117ec9f006fba55fcdb88caf62989b7", + ) + version( + "4.0.1", + sha256="7b86a0ee804244e0c407321f895b15e4a7162e9c5c0d2efc85f1cadec4011af4", + ) + version( + "4.0.0", + sha256="3787b3cc7b21bba1441819cb00c636911a846c0392ddf6211d398040a1e4886c", + ) + version( + "3.4.12", + sha256="c8919dfb5ead6be67534bf794cb0925534311f1cd5c6680f8164ad1813c88d13", + ) + version( + "3.4.6", + sha256="e7d311ff97f376b8ee85112e2b536dbf4bdf1233673500175ed7cf21a0089f6d", + ) + version( + "3.4.5", + sha256="0c57d9dd6d30cbffe68a09b03f4bebe773ee44dc8ff5cd6eaeb7f4d5ef3b428e", + ) + version( + "3.4.4", + sha256="a35b00a71d77b484f73ec485c65fe56c7a6fa48acd5ce55c197aef2e13c78746", + ) + version( + "3.4.3", + sha256="4eef85759d5450b183459ff216b4c0fa43e87a4f6aa92c8af649f89336f002ec", + ) + version( + "3.4.1", + sha256="f1b87684d75496a1054405ae3ee0b6573acaf3dad39eaf4f1d66fdd7e03dc852", + ) + version( + "3.4.0", + sha256="678cc3d2d1b3464b512b084a8cca1fad7de207c7abdf2caa1fed636c13e916da", + ) + version( + "3.3.1", + sha256="5dca3bb0d661af311e25a72b04a7e4c22c47c1aa86eb73e70063cd378a2aa6ee", + ) + version( + "3.3.0", + sha256="8bb312b9d9fd17336dc1f8b3ac82f021ca50e2034afc866098866176d985adc6", + ) + + contrib_vers = [ + "3.3.0", + "3.3.1", + "3.4.0", + "3.4.1", + "3.4.3", + "3.4.4", + "3.4.5", + "3.4.6", + "3.4.12", + "4.0.0", + "4.0.1", + "4.1.0", + "4.1.1", + "4.1.2", + "4.2.0", + "4.5.0", + "4.5.1", + "4.5.2", + "4.5.4", + ] + for cv in contrib_vers: + resource( + name="contrib", + git="https://github.com/opencv/opencv_contrib.git", + tag="{0}".format(cv), + when="@{0}".format(cv), + ) + + # Patch to fix conflict between CUDA and OpenCV (reproduced with 3.3.0 + # and 3.4.1) header file that have the same name. Problem is fixed in + # the current development branch of OpenCV. See #8461 for more information. + patch("dnn_cuda.patch", when="@3.3.0:3.4.1+cuda+dnn") + + patch("opencv3.2_cmake.patch", when="@3.2:3.4.1") + + # do not prepend system paths + patch("cmake_no-system-paths.patch") + + patch("opencv4.1.1_clp_cmake.patch", when="@4.1.1:") + patch("opencv4.0.0_clp_cmake.patch", when="@4.0.0:4.1.0") + patch("opencv3.4.12_clp_cmake.patch", when="@3.4.12") + patch("opencv3.3_clp_cmake.patch", when="@:3.4.6") + + patch("opencv3.4.4_cvv_cmake.patch", when="@3.4.4:") + patch("opencv3.3_cvv_cmake.patch", when="@:3.4.3") + + # OpenCV prebuilt apps (variants) + # Defined in `apps/*/CMakeLists.txt` using + # `ocv_add_application(...)` + apps = [ + "annotation", + "createsamples", + "interactive-calibration", + "model-diagnostics", + "traincascade", + "version", + "visualisation", + ] + + # app variants + for app in apps: + variant(app, default=False, description="Install {0} app".format(app)) + + # app conflicts + with when("+annotation"): + conflicts("~highgui") + conflicts("~imgcodecs") + conflicts("~imgproc") + conflicts("~videoio") + + with when("+createsamples"): + conflicts("~calib3d") + conflicts("~features2d") + conflicts("~highgui") + conflicts("~imgcodecs") + conflicts("~imgproc") + conflicts("~objdetect") + conflicts("~videoio") + + with when("+interactive-calibration"): + conflicts("~calib3d") + conflicts("~features2d") + conflicts("~highgui") + conflicts("~imgproc") + conflicts("~videoio") + + with when("+model-diagnostics"): + conflicts("~dnn") + + with when("+traincascade"): + conflicts("~calib3d") + conflicts("~features2d") + conflicts("~highgui") + conflicts("~imgcodecs") + conflicts("~imgproc") + conflicts("~objdetect") + + with when("+visualisation"): + conflicts("~highgui") + conflicts("~imgcodecs") + conflicts("~imgproc") + conflicts("~videoio") # OpenCV modules (variants) # Defined in `modules/*/CMakeLists.txt` using # `ocv_add_module(...)` and `ocv_define_module(...)` modules = [ - 'apps', 'calib3d', 'core', 'dnn', 'features2d', 'flann', 'gapi', 'highgui', - 'imgcodecs', 'imgproc', 'java', 'java_bindings_generator', 'js', - 'js_bindings_generator', 'ml', 'objc', 'objc_bindings_generator', 'objdetect', - 'photo', 'python2', 'python3', 'python_bindings_generator', 'python_tests', - 'stitching', 'ts', 'video', 'videoio', 'world' + "calib3d", + "dnn", + "features2d", + "flann", + "gapi", + "highgui", + "imgcodecs", + "imgproc", + "java", + "java_bindings_generator", + "ml", + "objc", + "objc_bindings_generator", + "objdetect", + "photo", + "python2", + "python3", + "python_bindings_generator", + "python_tests", + "stitching", + "ts", + "video", + "videoio", + "world", ] + # These need additional spack packages + # js needs Emscripten + modules_pending = [ + "js", + "js_bindings_generator", + ] + + # module variants for mod in modules: # At least one of these modules must be enabled to build OpenCV - variant(mod, default=mod == 'core', - description='Include opencv_{0} module'.format(mod)) + variant(mod, default=False, description="Include opencv_{0} module".format(mod)) + + # module conflicts and dependencies + with when("+calib3d"): + conflicts("~features2d") + conflicts("~flann") + conflicts("~imgproc") + + with when("+dnn"): + conflicts("~imgproc") + conflicts("~protobuf") + + with when("+features2d"): + conflicts("~imgproc") + + with when("+gapi"): + conflicts("~ade") + conflicts("~imgproc") + + with when("+highgui"): + conflicts("~imgcodecs") + conflicts("~imgproc") + + with when("+imgcodecs"): + conflicts("~imgproc") + + with when("+java"): + conflicts("~imgproc") + conflicts("~java_bindings_generator") + conflicts("~python2~python3") + + with when("+java_bindings_generator"): + depends_on("java") + depends_on("ant") + + with when("+objc"): + conflicts("~imgproc") + conflicts("~objc_bindings_generator") + + with when("+objc_bindings_generator"): + conflicts("~imgproc") + + with when("+objdetect"): + conflicts("~calib3d") + conflicts("~dnn") + conflicts("~imgproc") + + with when("+photo"): + conflicts("~imgproc") + + with when("+python2"): + conflicts("+python3") + conflicts("~python_bindings_generator") + depends_on("python@2.7:2.8", type=("build", "link", "run")) + depends_on("py-setuptools", type="build") + depends_on("py-numpy", type=("build", "run")) + extends("python", when="+python2") + + with when("+python3"): + conflicts("+python2") + conflicts("~python_bindings_generator") + depends_on("python@3.2:", type=("build", "link", "run")) + depends_on("py-setuptools", type="build") + depends_on("py-numpy", type=("build", "run")) + extends("python", when="+python3") + + with when("+stitching"): + conflicts("~calib3d") + conflicts("~features2d") + conflicts("~flann") + conflicts("~imgproc") + + with when("+ts"): + conflicts("~highgui") + conflicts("~imgcodecs") + conflicts("~imgproc") + conflicts("~videoio") + + with when("+video"): + conflicts("~imgproc") + + with when("+videoio"): + conflicts("~ffmpeg") + conflicts("~imgcodecs") + conflicts("~imgproc") + + # OpenCV contrib modules (variants) + contrib_modules = [ + "alphamat", + "aruco", + "barcode", + "bgsegm", + "bioinspired", + "ccalib", + "cudaarithm", + "cudabgsegm", + "cudacodec", + "cudafeatures2d", + "cudafilters", + "cudaimgproc", + "cudalegacy", + "cudaobjdetect", + "cudaoptflow", + "cudastereo", + "cudawarping", + "cudev", + "cvv", + "datasets", + "dnn_objdetect", + "dnn_superres", + "dpm", + "face", + "freetype", + "fuzzy", + "hdf", + "hfs", + "img_hash", + "intensity_transform", + "line_descriptor", + "matlab", + "mcc", + "optflow", + "phase_unwrapping", + "plot", + "quality", + "rapid", + "reg", + "rgbd", + "saliency", + "sfm", + "shape", + "stereo", + "structured_light", + "superres", + "surface_matching", + "text", + "tracking", + "videostab", + "viz", + "wechat_qrcode", + "xfeatures2d", + "ximgproc", + "xobjdetect", + "xphoto", + ] + + contrib_modules_pending = [ + "julia", # need a way to manage the installation prefix + "ovis", # need ogre + ] + for mod in contrib_modules: + variant( + mod, + default=False, + description="Include opencv_{0} contrib module".format(mod), + ) + + # contrib module conflicts and dependencies + with when("+alphamat"): + conflicts("~eigen") + conflicts("~imgproc") + + with when("+aruco"): + conflicts("~calib3d") + conflicts("~imgproc") + + with when("+barcode"): + conflicts("~dnn") + conflicts("~imgproc") + + with when("+bgsegm"): + conflicts("~calib3d") + conflicts("~imgproc") + conflicts("~video") + + with when("+ccalib"): + conflicts("~calib3d") + conflicts("~features2d") + conflicts("~highgui") + conflicts("~imgproc") + + with when("+cublas"): + conflicts("~cuda") + conflicts("~cudev") + + with when("+cuda"): + conflicts("~cudev") + + with when("+cudaarithm"): + conflicts("~cuda") + conflicts("~cublas") + conflicts("~cudev") + conflicts("~cufft") + + with when("+cudabgsegm"): + conflicts("~cuda") + conflicts("~cudev") + conflicts("~video") + + with when("+cudacodec"): + conflicts("~cudev") + conflicts("~videoio") + + with when("+cudafeatures2d"): + conflicts("~cuda") + conflicts("~cudafilters") + conflicts("~cudawarping") + conflicts("~cudev") + conflicts("~features2d") + + with when("+cudafilters"): + conflicts("~cuda") + conflicts("~cudaarithm") + conflicts("~cudev") + conflicts("~imgproc") + + with when("+cudaimgproc"): + conflicts("~cuda") + conflicts("~cudev") + conflicts("~imgproc") + + with when("+cudalegacy"): + conflicts("~cuda") + conflicts("~cudev") + conflicts("~video") + + with when("+cudaobjdetect"): + conflicts("~cuda") + conflicts("~cudaarithm") + conflicts("~cudawarping") + conflicts("~cudev") + conflicts("~objdetect") + + with when("+cudaoptflow"): + conflicts("~cuda") + conflicts("~cudaarithm") + conflicts("~cudaimgproc") + conflicts("~cudawarping") + conflicts("~cudev") + conflicts("~optflow") + conflicts("~video") + + with when("+cudastereo"): + conflicts("~calib3d") + conflicts("~cuda") + conflicts("~cudev") + + with when("+cudawarping"): + conflicts("~cuda") + conflicts("~cudev") + conflicts("~imgproc") + + with when("+cudev"): + conflicts("~cuda") + + with when("+cvv"): + conflicts("~features2d") + conflicts("~imgproc") + conflicts("~qt") + + with when("+datasets"): + conflicts("~flann") + conflicts("~imgcodecs") + conflicts("~ml") + + with when("+dnn_objdetect"): + conflicts("~dnn") + conflicts("~imgproc") + + with when("+dnn_superres"): + conflicts("~dnn") + conflicts("~imgproc") + + with when("+dpm"): + conflicts("~imgproc") + conflicts("~objdetect") + + with when("+face"): + conflicts("~calib3d") + conflicts("~imgproc") + conflicts("~objdetect") + conflicts("~photo") + + with when("+fuzzy"): + conflicts("~imgproc") + + with when("+freetype"): + conflicts("~imgproc") + depends_on("freetype") + depends_on("harfbuzz") + + with when("+hdf"): + depends_on("hdf5") + + with when("+hfs"): + with when("+cuda"): + conflicts("~cudev") + conflicts("~imgproc") + + with when("+img_hash"): + conflicts("~imgproc") + + with when("+intensity_transform"): + conflicts("~imgproc") + + with when("+line_descriptor"): + conflicts("~imgproc") + + with when("+matlab"): + conflicts("~python2~python3") + depends_on("matlab") + depends_on("py-jinja2") + + with when("+mcc"): + conflicts("~calib3d") + conflicts("~dnn") + conflicts("~imgproc") + + with when("+optflow"): + conflicts("~calib3d") + conflicts("~flann") + conflicts("~imgcodecs") + conflicts("~imgproc") + conflicts("~video") + conflicts("~ximgproc") + + with when("+phase_unwrapping"): + conflicts("~imgproc") + + with when("+plot"): + conflicts("~imgproc") + + with when("+quality"): + conflicts("~imgproc") + conflicts("~ml") + + with when("+rapid"): + conflicts("~calib3d") + conflicts("~imgproc") + + with when("+reg"): + conflicts("~imgproc") + + with when("+rgbd"): + conflicts("~calib3d") + conflicts("~eigen") + conflicts("~imgproc") + + with when("+saliency"): + conflicts("%intel") + conflicts("~features2d") + conflicts("~imgproc") + + with when("+sfm"): + conflicts("~calib3d") + conflicts("~eigen") + conflicts("~features2d") + conflicts("~imgcodecs") + conflicts("~xfeatures2d") + depends_on("ceres-solver") + depends_on("gflags") + depends_on("glog") + + with when("+shape"): + conflicts("~calib3d") + conflicts("~imgproc") + + with when("+stereo"): + conflicts("~calib3d") + conflicts("~features2d") + conflicts("~imgproc") + conflicts("~tracking") + + with when("+structured_light"): + conflicts("~calib3d") + conflicts("~imgproc") + conflicts("~phase_unwrapping") + + with when("+superres"): + with when("+cuda"): + conflicts("~cudev") + conflicts("~imgproc") + conflicts("~optflow") + conflicts("~video") + + with when("+surface_matching"): + conflicts("~flann") + + with when("+text"): + conflicts("~dnn") + conflicts("~features2d") + conflicts("~imgproc") + conflicts("~ml") + + with when("+tracking"): + conflicts("~imgproc") + conflicts("~plot") + conflicts("~video") + + with when("+videostab"): + with when("+cuda"): + conflicts("~cudev") + conflicts("~calib3d") + conflicts("~features2d") + conflicts("~imgproc") + conflicts("~photo") + conflicts("~video") + + with when("+viz"): + conflicts("~vtk") + + with when("+wechat_qrcode"): + conflicts("~dnn") + conflicts("~imgproc") + depends_on("libiconv") + + with when("+xfeatures2d"): + with when("+cuda"): + conflicts("~cudev") + conflicts("~calib3d") + conflicts("~features2d") + conflicts("~imgproc") + + with when("+ximgproc"): + conflicts("~calib3d") + conflicts("~imgcodecs") + conflicts("~imgproc") + conflicts("~video") + + with when("+xobjdetect"): + conflicts("~imgcodecs") + conflicts("~imgproc") + conflicts("~objdetect") + + with when("+xphoto"): + conflicts("~imgproc") + conflicts("~photo") # Optional 3rd party components (variants) # Defined in `CMakeLists.txt` and `modules/gapi/cmake/init.cmake` # using `OCV_OPTION(WITH_* ...)` components = [ - '1394', 'ade', 'android_mediandk', 'android_native_camera', 'aravis', - 'avfoundation', 'cap_ios', 'carotene', 'clp', 'cpufeatures', 'cublas', 'cuda', - 'cudnn', 'cufft', 'directx', 'dshow', 'eigen', 'ffmpeg', 'freetype', 'gdal', - 'gdcm', 'gphoto2', 'gstreamer', 'gtk', 'gtk_2_x', 'halide', 'hpx', - 'imgcodec_hdr', 'imgcode_pfm', 'imgcodec_pxm', 'imgcodec_sunraster', - 'inf_engine', 'ipp', 'itt', 'jasper', 'jpeg', 'lapack', 'librealsense', 'mfx', - 'msmf', 'msmf_dxva', 'ngraph', 'nvcuvid', 'onnx', 'opencl', 'openclamdblas', - 'openclamdfft', 'opencl_d3d11_nv', 'opencl_svm', 'openexr', 'opengl', - 'openjpeg', 'openmp', 'openni', 'openni2', 'openvx', 'plaidml', 'png', - 'protobuf', 'pthreads_pf', 'pvapi', 'qt', 'quirc', 'tbb', 'tengine', 'tiff', - 'ueye', 'v4l', 'va', 'va_intel', 'vtk', 'vulcan', 'webp', 'win32ui', 'ximea', - 'xine' + "1394", + "ade", + "android_mediandk", + "android_native_camera", + "avfoundation", + "cap_ios", + "carotene", + "clp", + "cpufeatures", + "cublas", + "cuda", + "cudnn", + "cufft", + "directx", + "dshow", + "eigen", + "ffmpeg", + "gdal", + "gtk", + "hpx", + "imgcodec_hdr", + "imgcodec_pfm", + "imgcodec_pxm", + "imgcodec_sunraster", + "ipp", + "itt", + "jasper", + "jpeg", + "lapack", + "msmf", + "msmf_dxva", + "onnx", + "opencl", + "opencl_d3d11_nv", + "openexr", + "opengl", + "openjpeg", + "openmp", + "plaidml", + "png", + "protobuf", + "pthreads_pf", + "qt", + "quirc", + "tbb", + "tengine", + "tesseract", + "tiff", + "v4l", + "vtk", + "vulcan", + "webp", + "win32ui", ] + # These likely need additional spack packages + components_pending = [ + "aravis", + "gdcm", + "gphoto2", + "gstreamer", + "gtk_2_x", # deprecated in spack + "halide", + "inf_engine", + "librealsense", + "mfx", + "ngraph", + "nvcuvid", # disabled, details: https://github.com/opencv/opencv/issues/14850 + "opencl_svm", + "openclamdblas", + "openclamdfft", + "openni", + "openni2", + "openvx", + "pvapi", + "ueye", + "va", + "va_intel", + "ximea", + "xine", + ] + + # components and modules with the same name + # used in `def cmake_args(self)` + component_and_module = ["freetype", "julia", "matlab"] + for component in components: - variant(component, default=False, - description='Include {0} support'.format(component)) + variant( + component, + default=False, + description="Include {0} support".format(component), + ) # Other (variants) - variant('shared', default=True, - description='Enables the build of shared libraries') - variant('powerpc', default=False, description='Enable PowerPC for GCC') - variant('fast-math', default=False, - description='Enable -ffast-math (not recommended for GCC 4.6.x)') - variant('nonfree', default=False, description='Enable non-free algorithms') - - variant('contrib', default=False, description='Adds in code from opencv_contrib.') - contrib_vers = [ - '3.1.0', '3.2.0', '3.3.0', '3.3.1', '3.4.0', '3.4.1', '3.4.3', '3.4.4', - '3.4.5', '3.4.6', '3.4.12', '4.0.0', '4.0.1', '4.1.0', '4.1.1', - '4.1.2', '4.2.0', '4.5.0', '4.5.1', '4.5.2' - ] - for cv in contrib_vers: - resource(name="contrib", - git='https://github.com/opencv/opencv_contrib.git', - tag="{0}".format(cv), - when='@{0}+contrib'.format(cv)) + variant("shared", default=True, description="Enables the build of shared libraries") + variant("powerpc", default=False, description="Enable PowerPC for GCC") + variant( + "fast-math", + default=False, + description="Enable -ffast-math (not recommended for GCC 4.6.x)", + ) + variant("nonfree", default=False, description="Enable non-free algorithms") # Required (dependencies) - depends_on('cmake@3.5.1:', type='build') - depends_on('python@2.7:2.8,3.2:', type='build') - depends_on('zlib@1.2.3:') - - # OpenCV modules (dependencies) - depends_on('java', when='+java_bindings_generator') - depends_on('ant', when='+java_bindings_generator', type='build') - extends('python', when='+python2') - depends_on('python@2.7:2.8', when='+python2', type=('build', 'link', 'run')) - depends_on('py-setuptools', when='+python2', type='build') - depends_on('py-numpy', when='+python2', type=('build', 'run')) - extends('python', when='+python3') - depends_on('python@3.2:', when='+python3', type=('build', 'link', 'run')) - depends_on('py-setuptools', when='+python3', type='build') - depends_on('py-numpy', when='+python3', type=('build', 'run')) - depends_on('ffmpeg', when='+videoio') - depends_on('mpi', when='+videoio') + depends_on("cmake@3.5.1:", type="build") + depends_on("python@2.7:2.8,3.2:", type="build") + depends_on("java", type="build") + depends_on("zlib@1.2.3:") # Optional 3rd party components (dependencies) - depends_on('clp', when='+clp') - depends_on('cuda@6.5:', when='+cuda') - depends_on('cuda@:10.2', when='@4.0:4.2+cuda') - depends_on('cuda@:9.0', when='@3.3.1:3.4+cuda') - depends_on('cuda@:8', when='@:3.3.0+cuda') - depends_on('cudnn', when='+cudnn') - depends_on('cudnn@:7.6', when='@4.0:4.2+cudnn') - depends_on('cudnn@:7.3', when='@3.3.1:3.4+cudnn') - depends_on('cudnn@:6', when='@:3.3.0+cudnn') - depends_on('eigen', when='+eigen') - depends_on('ffmpeg', when='+ffmpeg') - depends_on('freetype', when='+freetype') - depends_on('gdal', when='+gdal') - depends_on('gtkplus', when='+gtk') - depends_on('gtkplus@:2', when='+gtk_2_x') - depends_on('hpx', when='+hpx') - depends_on('ipp', when='+ipp') - depends_on('jasper', when='+jasper') - depends_on('jpeg', when='+jpeg') - depends_on('lapack', when='+lapack') - depends_on('onnx', when='+onnx') - depends_on('opencl', when='+opencl') - depends_on('openexr', when='+openexr') - depends_on('gl', when='+opengl') - depends_on('openjpeg@2:', when='+openjpeg') - depends_on('libpng', when='+png') - depends_on('protobuf@3.5.0:', when='@3.4.1: +protobuf') - depends_on('protobuf@3.1.0', when='@3.3.0:3.4.0 +protobuf') - depends_on('qt', when='+qt') - depends_on('tbb', when='+tbb') - depends_on('libtiff', when='+tiff') - depends_on('vtk', when='+vtk') - depends_on('libwebp', when='+webp') - - # Other (dependencies) - depends_on('hdf5', when='+contrib') - - # OpenCV modules (conflicts) - # Defined in `apps/*/CMakeLists.txt` using `ocv_add_application(...)` - # Different apps require different modules, but no way to control which apps - # are installed. If +apps is requested, make sure all apps can be built. - conflicts('+apps', when='~calib3d') - conflicts('+apps', when='~core') - conflicts('+apps', when='~dnn') - conflicts('+apps', when='~features2d') - conflicts('+apps', when='~highgui') - conflicts('+apps', when='~imgcodecs') - conflicts('+apps', when='~imgproc') - conflicts('+apps', when='~objdetect') - conflicts('+apps', when='~videoio') - # Defined in `modules/*/CMakeLists.txt` using - # `ocv_add_module(...)` and `ocv_define_module(...)` - # If these required dependencies aren't found, CMake will silently - # disable the requested module - conflicts('+calib3d', when='~features2d') - conflicts('+calib3d', when='~flann') - conflicts('+calib3d', when='~imgproc') - conflicts('+dnn', when='~core') - conflicts('+dnn', when='~imgproc') - conflicts('+features2d', when='~imgproc') - conflicts('+flann', when='~core') - conflicts('+gapi', when='~imgproc') - conflicts('+highgui', when='~imgcodecs') - conflicts('+highgui', when='~imgproc') - conflicts('+imgcodecs', when='~imgproc') - conflicts('+imgproc', when='~core') - conflicts('+java', when='~core') - conflicts('+java', when='~imgproc') - conflicts('+java', when='~java_bindings_generator') - conflicts('+js', when='~js_bindings_generator') - conflicts('+ml', when='~core') - conflicts('+objc', when='~core') - conflicts('+objc', when='~imgproc') - conflicts('+objc', when='~objc_bindings_generator') - conflicts('+objc_bindings_generator', when='~core') - conflicts('+objc_bindings_generator', when='~imgproc') - conflicts('+objdetect', when='~calib3d') - conflicts('+objdetect', when='~core') - conflicts('+objdetect', when='~imgproc') - conflicts('+photo', when='~imgproc') - conflicts('+python2', when='~python_bindings_generator') - conflicts('+python2', when='+python3') - conflicts('+python3', when='~python_bindings_generator') - conflicts('+python3', when='+python2') - conflicts('+stitching', when='~calib3d') - conflicts('+stitching', when='~features2d') - conflicts('+stitching', when='~flann') - conflicts('+stitching', when='~imgproc') - conflicts('+ts', when='~core') - conflicts('+ts', when='~highgui') - conflicts('+ts', when='~imgcodecs') - conflicts('+ts', when='~imgproc') - conflicts('+ts', when='~videoio') - conflicts('+video', when='~imgproc') - conflicts('+videoio', when='~imgcodecs') - conflicts('+videoio', when='~imgproc') - conflicts('+world', when='~core') + depends_on("clp", when="+clp") + depends_on("cuda@6.5:", when="+cuda") + depends_on("cuda@:10.2", when="@4.0:4.2+cuda") + depends_on("cuda@:9.0", when="@3.3.1:3.4+cuda") + depends_on("cuda@:8", when="@:3.3.0+cuda") + depends_on("cudnn", when="+cudnn") + depends_on("cudnn@:7.6", when="@4.0:4.2+cudnn") + depends_on("cudnn@:7.3", when="@3.3.1:3.4+cudnn") + depends_on("cudnn@:6", when="@:3.3.0+cudnn") + depends_on("eigen", when="+eigen") + depends_on("ffmpeg+avresample", when="+ffmpeg") + depends_on("gdal", when="+gdal") + depends_on("gtkplus", when="+gtk") + depends_on("hpx", when="+hpx") + depends_on("ipp", when="+ipp") + depends_on("jasper", when="+jasper") + depends_on("jpeg", when="+jpeg") + depends_on("lapack", when="+lapack") + depends_on("onnx", when="+onnx") + depends_on("opencl", when="+opencl") + depends_on("openexr", when="+openexr") + depends_on("gl", when="+opengl") + depends_on("openjpeg@2:", when="+openjpeg") + depends_on("libpng", when="+png") + depends_on("protobuf@3.5.0:", when="@3.4.1: +protobuf") + depends_on("protobuf@3.1.0", when="@3.3.0:3.4.0 +protobuf") + depends_on("qt@5:", when="+qt") + depends_on("qt@5:+opengl", when="+qt+opengl") + depends_on("tbb", when="+tbb") + depends_on("libtiff+jpeg+libdeflate+lzma+zlib", when="+tiff") + depends_on("vtk", when="+vtk") + depends_on("libwebp", when="+webp") + depends_on("tesseract", when="+tesseract") + depends_on("leptonica", when="+tesseract") + depends_on("libdc1394", when="+1394") # Optional 3rd party components (conflicts) # Defined in `CMakeLists.txt` and `modules/gapi/cmake/init.cmake` # using `OCV_OPTION(WITH_* ...)` - conflicts('+ade', when='~gapi') - conflicts('+android_mediandk', when='platform=darwin', msg='Android only') - conflicts('+android_mediandk', when='platform=linux', msg='Android only') - conflicts('+android_mediandk', when='platform=cray', msg='Android only') - conflicts('+android_native_camera', when='platform=darwin', msg='Android only') - conflicts('+android_native_camera', when='platform=linux', msg='Android only') - conflicts('+android_native_camera', when='platform=cray', msg='Android only') - conflicts('+avfoundation', when='platform=linux', msg='iOS/macOS only') - conflicts('+avfoundation', when='platform=cray', msg='iOS/macOS only') - conflicts('+cap_ios', when='platform=darwin', msg='iOS only') - conflicts('+cap_ios', when='platform=linux', msg='iOS only') - conflicts('+cap_ios', when='platform=cray', msg='iOS only') - conflicts('+carotene', when='target=x86:', msg='ARM/AARCH64 only') - conflicts('+carotene', when='target=x86_64:', msg='ARM/AARCH64 only') - conflicts('+cpufeatures', when='platform=darwin', msg='Android only') - conflicts('+cpufeatures', when='platform=linux', msg='Android only') - conflicts('+cpufeatures', when='platform=cray', msg='Android only') - conflicts('+cublas', when='~cuda') - conflicts('+cudnn', when='~cuda') - conflicts('+cufft', when='~cuda') - conflicts('+directx', when='platform=darwin', msg='Windows only') - conflicts('+directx', when='platform=linux', msg='Windows only') - conflicts('+directx', when='platform=cray', msg='Windows only') - conflicts('+dshow', when='platform=darwin', msg='Windows only') - conflicts('+dshow', when='platform=linux', msg='Windows only') - conflicts('+dshow', when='platform=cray', msg='Windows only') - conflicts('+freetype', when='~gapi') - conflicts('+gtk', when='platform=darwin', msg='Linux only') - conflicts('+gtk_2_x', when='platform=darwin', msg='Linux only') - conflicts('+ipp', when='target=aarch64:', msg='x86 or x86_64 only') - conflicts('+msmf', when='platform=darwin', msg='Windows only') - conflicts('+msmf', when='platform=linux', msg='Windows only') - conflicts('+msmf', when='platform=cray', msg='Windows only') - conflicts('+msmf_dxva', when='platform=darwin', msg='Windows only') - conflicts('+msmf_dxva', when='platform=linux', msg='Windows only') - conflicts('+msmf_dxva', when='platform=cray', msg='Windows only') - conflicts('+nvcuvid', when='~cuda') - conflicts('+opencl_d3d11_nv', when='platform=darwin', msg='Windows only') - conflicts('+opencl_d3d11_nv', when='platform=linux', msg='Windows only') - conflicts('+opencl_d3d11_nv', when='platform=cray', msg='Windows only') - conflicts('+plaidml', when='~gapi') - conflicts('+tengine', when='platform=darwin', msg='Linux only') - conflicts('+tengine', when='target=x86:', msg='ARM/AARCH64 only') - conflicts('+tengine', when='target=x86_64:', msg='ARM/AARCH64 only') - conflicts('+ueye', when='platform=darwin', msg='Linux only') - conflicts('+v4l', when='platform=darwin', msg='Linux only') - conflicts('+va', when='platform=darwin', msg='Linux only') - conflicts('+va_intel', when='platform=darwin', msg='Linux only') - conflicts('+win32ui', when='platform=darwin', msg='Windows only') - conflicts('+win32ui', when='platform=linux', msg='Windows only') - conflicts('+win32ui', when='platform=cray', msg='Windows only') - conflicts('+xine', when='platform=darwin', msg='Linux only') - - # Other (conflicts) - conflicts('+cuda', when='~contrib', msg='cuda support requires +contrib') - - # Patch to fix conflict between CUDA and OpenCV (reproduced with 3.3.0 - # and 3.4.1) header file that have the same name. Problem is fixed in - # the current development branch of OpenCV. See #8461 for more information. - patch('dnn_cuda.patch', when='@3.3.0:3.4.1+cuda+dnn') - - patch('opencv3.2_cmake.patch', when='@3.2:3.4.1') - patch('opencv3.2_compiler_cmake.patch', when='@3.2') - patch('opencv3.2_vtk.patch', when='@3.2+vtk') - patch('opencv3.2_regacyvtk.patch', when='@3.2+vtk') - patch('opencv3.2_ffmpeg.patch', when='@3.2+videoio') - patch('opencv3.2_python3.7.patch', when='@3.2+python3') - patch('opencv3.2_fj.patch', when='@3.2 %fj') + conflicts("+android_mediandk", when="platform=darwin", msg="Android only") + conflicts("+android_mediandk", when="platform=linux", msg="Android only") + conflicts("+android_mediandk", when="platform=cray", msg="Android only") + conflicts("+android_native_camera", when="platform=darwin", msg="Android only") + conflicts("+android_native_camera", when="platform=linux", msg="Android only") + conflicts("+android_native_camera", when="platform=cray", msg="Android only") + conflicts("+avfoundation", when="platform=linux", msg="iOS/macOS only") + conflicts("+avfoundation", when="platform=cray", msg="iOS/macOS only") + conflicts("+cap_ios", when="platform=darwin", msg="iOS only") + conflicts("+cap_ios", when="platform=linux", msg="iOS only") + conflicts("+cap_ios", when="platform=cray", msg="iOS only") + conflicts("+carotene", when="target=x86:", msg="ARM/AARCH64 only") + conflicts("+carotene", when="target=x86_64:", msg="ARM/AARCH64 only") + conflicts("+cpufeatures", when="platform=darwin", msg="Android only") + conflicts("+cpufeatures", when="platform=linux", msg="Android only") + conflicts("+cpufeatures", when="platform=cray", msg="Android only") + conflicts("+cublas", when="~cuda") + conflicts("+cudnn", when="~cuda") + conflicts("+cufft", when="~cuda") + conflicts("+directx", when="platform=darwin", msg="Windows only") + conflicts("+directx", when="platform=linux", msg="Windows only") + conflicts("+directx", when="platform=cray", msg="Windows only") + conflicts("+dshow", when="platform=darwin", msg="Windows only") + conflicts("+dshow", when="platform=linux", msg="Windows only") + conflicts("+dshow", when="platform=cray", msg="Windows only") + conflicts("+gtk", when="platform=darwin", msg="Linux only") + conflicts("+ipp", when="target=aarch64:", msg="x86 or x86_64 only") + conflicts("+jasper", when="+openjpeg") + conflicts("+msmf", when="platform=darwin", msg="Windows only") + conflicts("+msmf", when="platform=linux", msg="Windows only") + conflicts("+msmf", when="platform=cray", msg="Windows only") + conflicts("+msmf_dxva", when="platform=darwin", msg="Windows only") + conflicts("+msmf_dxva", when="platform=linux", msg="Windows only") + conflicts("+msmf_dxva", when="platform=cray", msg="Windows only") + conflicts("+opencl_d3d11_nv", when="platform=darwin", msg="Windows only") + conflicts("+opencl_d3d11_nv", when="platform=linux", msg="Windows only") + conflicts("+opencl_d3d11_nv", when="platform=cray", msg="Windows only") + conflicts("+opengl", when="~qt") + conflicts("+tengine", when="platform=darwin", msg="Linux only") + conflicts("+tengine", when="target=x86:", msg="ARM/AARCH64 only") + conflicts("+tengine", when="target=x86_64:", msg="ARM/AARCH64 only") + conflicts("+v4l", when="platform=darwin", msg="Linux only") + conflicts("+win32ui", when="platform=darwin", msg="Windows only") + conflicts("+win32ui", when="platform=linux", msg="Windows only") + conflicts("+win32ui", when="platform=cray", msg="Windows only") def cmake_args(self): spec = self.spec - args = [] + args = [ + self.define( + "OPENCV_EXTRA_MODULES_PATH", + join_path(self.stage.source_path, "opencv_contrib/modules"), + ), + self.define("BUILD_opencv_core", "on"), + ] + + # OpenCV pre-built apps + apps_list = [] + for app in self.apps: + if "+{0}".format(app) in spec: + apps_list.append(app) + if apps_list: + args.append(self.define("BUILD_opencv_apps", "on")) + args.append(self.define("OPENCV_INSTALL_APPS_LIST", ",".join(apps_list))) + else: + args.append(self.define("BUILD_opencv_apps", "off")) # OpenCV modules for mod in self.modules: - args.append(self.define_from_variant('BUILD_opencv_' + mod, mod)) + args.append(self.define_from_variant("BUILD_opencv_" + mod, mod)) + if mod in self.component_and_module: + args.append(self.define_from_variant("WITH_" + mod.upper(), mod)) + + for mod in self.modules_pending: + args.append(self.define("BUILD_opencv_" + mod, "off")) + if mod in self.component_and_module: + args.append(self.define("WITH_" + mod.upper(), "off")) + + # OpenCV contrib modules + for mod in self.contrib_modules: + args.append(self.define_from_variant("BUILD_opencv_" + mod, mod)) + if mod in self.component_and_module: + args.append(self.define_from_variant("WITH_" + mod.upper(), mod)) + + for mod in self.contrib_modules_pending: + args.append(self.define("BUILD_opencv_" + mod, "off")) + if mod in self.component_and_module: + args.append(self.define("WITH_" + mod.upper(), "off")) # Optional 3rd party components for component in self.components: - args.append(self.define_from_variant( - 'WITH_' + component.upper(), component)) + args.append( + self.define_from_variant("WITH_" + component.upper(), component) + ) + for component in self.components_pending: + args.append(self.define("WITH_" + component.upper(), "off")) # Other - args.extend([ - self.define('ENABLE_CONFIG_VERIFICATION', True), - self.define_from_variant('BUILD_SHARED_LIBS', 'shared'), - self.define('ENABLE_PRECOMPILED_HEADERS', False), - self.define_from_variant('WITH_LAPACK', 'lapack'), - self.define_from_variant('ENABLE_POWERPC', 'powerpc'), - self.define_from_variant('ENABLE_FAST_MATH', 'fast-math'), - self.define_from_variant('OPENCV_ENABLE_NONFREE', 'nonfree'), - ]) - - if '+contrib' in spec: - args.append(self.define('OPENCV_EXTRA_MODULES_PATH', join_path( - self.stage.source_path, 'opencv_contrib/modules'))) - - if '+cuda' in spec: - if spec.variants['cuda_arch'].value[0] != 'none': - cuda_arch = spec.variants['cuda_arch'].value - args.append(self.define('CUDA_ARCH_BIN', ' '.join(cuda_arch))) + args.extend( + [ + self.define("ENABLE_CONFIG_VERIFICATION", True), + self.define_from_variant("BUILD_SHARED_LIBS", "shared"), + self.define("ENABLE_PRECOMPILED_HEADERS", False), + self.define_from_variant("WITH_LAPACK", "lapack"), + self.define_from_variant("ENABLE_POWERPC", "powerpc"), + self.define_from_variant("ENABLE_FAST_MATH", "fast-math"), + self.define_from_variant("OPENCV_ENABLE_NONFREE", "nonfree"), + ] + ) + + if "+cuda" in spec: + if spec.variants["cuda_arch"].value[0] != "none": + cuda_arch = spec.variants["cuda_arch"].value + args.append(self.define("CUDA_ARCH_BIN", " ".join(cuda_arch))) # TODO: this CMake flag is deprecated - if spec.target.family == 'ppc64le': - args.append(self.define('ENABLE_VSX', True)) + if spec.target.family == "ppc64le": + args.append(self.define("ENABLE_VSX", True)) # Media I/O - zlib = spec['zlib'] - args.extend([ - self.define('BUILD_ZLIB', False), - self.define('ZLIB_LIBRARY', zlib.libs[0]), - self.define('ZLIB_INCLUDE_DIR', zlib.headers.directories[0]), - ]) - - if '+png' in spec: - libpng = spec['libpng'] - args.extend([ - self.define('BUILD_PNG', False), - self.define('PNG_LIBRARY', libpng.libs[0]), - self.define('PNG_INCLUDE_DIR', libpng.headers.directories[0]) - ]) - - if '+jpeg' in spec: - libjpeg = spec['jpeg'] - args.extend([ - self.define('BUILD_JPEG', False), - self.define('JPEG_LIBRARY', libjpeg.libs[0]), - self.define('JPEG_INCLUDE_DIR', libjpeg.headers.directories[0]) - ]) - - if '+tiff' in spec: - libtiff = spec['libtiff'] - args.extend([ - self.define('BUILD_TIFF', False), - self.define('TIFF_LIBRARY', libtiff.libs[0]), - self.define('TIFF_INCLUDE_DIR', libtiff.headers.directories[0]) - ]) - - if '+jasper' in spec: - jasper = spec['jasper'] - args.extend([ - self.define('BUILD_JASPER', False), - self.define('JASPER_LIBRARY', jasper.libs[0]), - self.define('JASPER_INCLUDE_DIR', jasper.headers.directories[0]) - ]) + zlib = spec["zlib"] + args.extend( + [ + self.define("BUILD_ZLIB", False), + self.define("ZLIB_LIBRARY", zlib.libs[0]), + self.define("ZLIB_INCLUDE_DIR", zlib.headers.directories[0]), + ] + ) + + if "+png" in spec: + libpng = spec["libpng"] + args.extend( + [ + self.define("BUILD_PNG", False), + self.define("PNG_LIBRARY", libpng.libs[0]), + self.define("PNG_INCLUDE_DIR", libpng.headers.directories[0]), + ] + ) + + if "+jpeg" in spec: + libjpeg = spec["jpeg"] + args.extend( + [ + self.define("BUILD_JPEG", False), + self.define("JPEG_LIBRARY", libjpeg.libs[0]), + self.define("JPEG_INCLUDE_DIR", libjpeg.headers.directories[0]), + ] + ) + + if "+tiff" in spec: + libtiff = spec["libtiff"] + args.extend( + [ + self.define("BUILD_TIFF", False), + self.define("TIFF_LIBRARY", libtiff.libs[0]), + self.define("TIFF_INCLUDE_DIR", libtiff.headers.directories[0]), + ] + ) + + if "+jasper" in spec: + jasper = spec["jasper"] + args.extend( + [ + self.define("BUILD_JASPER", False), + self.define("JASPER_LIBRARY", jasper.libs[0]), + self.define("JASPER_INCLUDE_DIR", jasper.headers.directories[0]), + ] + ) + + if "+clp" in spec: + clp = spec["clp"] + args.extend( + [ + self.define("BUILD_CLP", False), + self.define("CLP_LIBRARIES", clp.prefix.lib), + self.define("CLP_INCLUDE_DIR", clp.headers.directories[0]), + ] + ) + + if "+onnx" in spec: + onnx = spec["onnx"] + args.extend( + [ + self.define("BUILD_ONNX", False), + self.define("ORT_LIB", onnx.libs[0]), + self.define("ORT_INCLUDE", onnx.headers.directories[0]), + ] + ) + + if "+tesseract" in spec: + tesseract = spec["tesseract"] + leptonica = spec["leptonica"] + args.extend( + [ + self.define("Lept_LIBRARY", leptonica.libs[0]), + self.define("Tesseract_LIBRARY", tesseract.libs[0]), + self.define( + "Tesseract_INCLUDE_DIR", tesseract.headers.directories[0] + ), + ] + ) # Python - python_exe = spec['python'].command.path - python_lib = spec['python'].libs[0] - python_include_dir = spec['python'].headers.directories[0] - - if '+python2' in spec: - args.extend([ - self.define('PYTHON2_EXECUTABLE', python_exe), - self.define('PYTHON2_LIBRARY', python_lib), - self.define('PYTHON2_INCLUDE_DIR', python_include_dir), - self.define('PYTHON3_EXECUTABLE', '') - ]) - elif '+python3' in spec: - args.extend([ - self.define('PYTHON3_EXECUTABLE', python_exe), - self.define('PYTHON3_LIBRARY', python_lib), - self.define('PYTHON3_INCLUDE_DIR', python_include_dir), - self.define('PYTHON2_EXECUTABLE', '') - ]) + python_exe = spec["python"].command.path + python_lib = spec["python"].libs[0] + python_include_dir = spec["python"].headers.directories[0] + + if "+python2" in spec: + args.extend( + [ + self.define("PYTHON2_EXECUTABLE", python_exe), + self.define("PYTHON2_LIBRARY", python_lib), + self.define("PYTHON2_INCLUDE_DIR", python_include_dir), + self.define("PYTHON3_EXECUTABLE", ""), + ] + ) + elif "+python3" in spec: + args.extend( + [ + self.define("PYTHON3_EXECUTABLE", python_exe), + self.define("PYTHON3_LIBRARY", python_lib), + self.define("PYTHON3_INCLUDE_DIR", python_include_dir), + self.define("PYTHON2_EXECUTABLE", ""), + ] + ) else: - args.extend([ - self.define('PYTHON2_EXECUTABLE', ''), - self.define('PYTHON3_EXECUTABLE', ''), - ]) + args.extend( + [ + self.define("PYTHON2_EXECUTABLE", ""), + self.define("PYTHON3_EXECUTABLE", ""), + ] + ) return args @property def libs(self): - shared = '+shared' in self.spec + shared = "+shared" in self.spec return find_libraries( - 'libopencv_*', root=self.prefix, shared=shared, recursive=True + "libopencv_*", root=self.prefix, shared=shared, recursive=True ) diff --git a/var/spack/repos/builtin/packages/openvslam/package.py b/var/spack/repos/builtin/packages/openvslam/package.py deleted file mode 100644 index e9cc01c771..0000000000 --- a/var/spack/repos/builtin/packages/openvslam/package.py +++ /dev/null @@ -1,33 +0,0 @@ -# Copyright 2013-2022 Lawrence Livermore National Security, LLC and other -# Spack Project Developers. See the top-level COPYRIGHT file for details. -# -# SPDX-License-Identifier: (Apache-2.0 OR MIT) - - -class Openvslam(CMakePackage): - """OpenVSLAM is a monocular, stereo, and RGBD visual SLAM system.""" - - homepage = "https://openvslam.readthedocs.io/" - git = "https://github.com/xdspacelab/openvslam.git" - - version('master', branch='master') - - # https://openvslam.readthedocs.io/en/master/installation.html - depends_on('cmake@3.1:', type='build') - depends_on('eigen@3.3.0:') - depends_on('g2o') - depends_on('dbow2@shinsumicco') - depends_on('yaml-cpp@0.6.0:') - depends_on('opencv@3.3.1:+core+imgcodecs+videoio+features2d+calib3d+highgui') - depends_on('pangolin') - - patch('https://github.com/xdspacelab/openvslam/commit/eeb58880443700fd79688d9646fd633c42fa60eb.patch', - sha256='131159b0042300614d039ceb3538defe4d302b59dc748b02287fc8ff895e6bbd') - - @run_after('install') - def post_install(self): - # https://github.com/xdspacelab/openvslam/issues/501 - mkdir(self.prefix.bin) - with working_dir(self.build_directory): - install('run_*', self.prefix.bin) - install(join_path('lib*', 'libpangolin_viewer.*'), self.prefix.lib) -- cgit v1.2.3-70-g09d2