From bbdf8f599633627d4727b4cab6274c6a2b486a81 Mon Sep 17 00:00:00 2001 From: Nirbheek Chauhan Date: Thu, 6 Feb 2025 08:08:58 +0530 Subject: [PATCH] meson: Modernize opencv build definitions Use the fs module instead of using `run_command('test')`, simplify some indentation, fix dependency management Part-of: --- .../gst-plugins-bad/ext/opencv/meson.build | 27 ++- .../gst-libs/gst/opencv/meson.build | 157 +++++++++--------- 2 files changed, 89 insertions(+), 95 deletions(-) diff --git a/subprojects/gst-plugins-bad/ext/opencv/meson.build b/subprojects/gst-plugins-bad/ext/opencv/meson.build index e2676f354b..1b3be9db2a 100644 --- a/subprojects/gst-plugins-bad/ext/opencv/meson.build +++ b/subprojects/gst-plugins-bad/ext/opencv/meson.build @@ -66,22 +66,17 @@ plugin_sources += { 'opencv': pathsep.join(doc_sources) } -if get_option('opencv').disabled() - opencv_dep = disabler() +if get_option('opencv').disabled() or not opencv_dep.found() subdir_done() endif -if opencv_found - gstopencv = library('gstopencv', - gstopencv_sources, - cpp_args : gst_plugins_bad_args + gstopencv_cargs + [ '-DGST_USE_UNSTABLE_API' ], - link_args : [noseh_link_args, '-lopencv_tracking'], - include_directories : [configinc, libsinc], - dependencies : [gstbase_dep, gstvideo_dep, opencv_dep, gstopencv_dep], - install : true, - install_dir : plugins_install_dir, - ) - plugins += [gstopencv] -elif get_option('opencv').enabled() - error('OpenCV support enabled but required dependencies were not found.') -endif +gstopencv = library('gstopencv', + gstopencv_sources, + cpp_args : gst_plugins_bad_args + gstopencv_cargs + [ '-DGST_USE_UNSTABLE_API' ], + link_args : [noseh_link_args, '-lopencv_tracking'], + include_directories : [configinc, libsinc], + dependencies : [gstbase_dep, gstvideo_dep, opencv_dep, gstopencv_dep], + install : true, + install_dir : plugins_install_dir, +) +plugins += [gstopencv] diff --git a/subprojects/gst-plugins-bad/gst-libs/gst/opencv/meson.build b/subprojects/gst-plugins-bad/gst-libs/gst/opencv/meson.build index b555de766a..b8466436f0 100644 --- a/subprojects/gst-plugins-bad/gst-libs/gst/opencv/meson.build +++ b/subprojects/gst-plugins-bad/gst-libs/gst/opencv/meson.build @@ -1,5 +1,6 @@ -if get_option('opencv').disabled() - gstopencv_dep = disabler() +opencv_opt = get_option('opencv') +if opencv_opt.disabled() + opencv_dep = disabler() subdir_done() endif @@ -27,86 +28,84 @@ libopencv_headers = [ gstopencv_cargs = ['-DGST_HAAR_CASCADES_DIR="@0@"'] - opencv_dep = dependency('opencv', version : ['>= 3.0.0', '< 3.5.0'], required : false) -opencv_found = opencv_dep.found() -if not opencv_found - opencv_dep = dependency('opencv4', version : ['>= 4.0.0'], required : false) - opencv_found = opencv_dep.found() -endif - -if opencv_found - foreach h : libopencv_headers - if not cxx.has_header(h, dependencies: opencv_dep) - message('Needed header "' + h + '" not found') - opencv_found = false - endif - endforeach -endif - -if opencv_found - opencv_prefix = opencv_dep.get_variable('prefix') - gstopencv_cargs += ['-DOPENCV_PREFIX="' + opencv_prefix + '"'] - # opencv4 seems to ship with .pc file that references non-existent include dir - # (/usr/include/opencv4/opencv instead of /usr/include/opencv4/opencv2) - # clang 10 complains about the following header in opencv4 - # /usr/include/opencv4/opencv2/flann/logger.h:83:36: error: format string is not a string literal [-Werror,-Wformat-nonliteral] - gstopencv_cargs += cxx.get_supported_arguments(['-Wno-missing-include-dirs', '-Wno-format-nonliteral']) - - # Check the data dir used by opencv for its xml data files - # Use prefix from pkg-config to be compatible with cross-compilation - r = run_command('test', '-d', opencv_prefix + '/share/opencv', check: false) - if r.returncode() == 0 - gstopencv_cargs += '-DOPENCV_PATH_NAME="opencv"' - else - r = run_command('test', '-d', opencv_prefix + '/share/OpenCV', check: false) - if r.returncode() == 0 - gstopencv_cargs += '-DOPENCV_PATH_NAME="OpenCV"' - else - r = run_command('test', '-d', opencv_prefix + '/share/opencv4', check: false) - if r.returncode() == 0 - gstopencv_cargs += '-DOPENCV_PATH_NAME="opencv4"' - else - message('Unable to detect OpenCV data directory') - opencv_found = false - endif - endif +if not opencv_dep.found() + opencv_dep = dependency('opencv', version : ['>= 4.0.0'], required : opencv_opt) + if not opencv_dep.found() + subdir_done() endif endif -if opencv_found - pkg_name = 'gstreamer-opencv-1.0' - gstopencv = library('gstopencv-' + api_version, - opencv_sources, - c_args : gst_plugins_bad_args + ['-DBUILDING_GST_OPENCV'], - cpp_args : gst_plugins_bad_args + gstopencv_cargs + ['-DBUILDING_GST_OPENCV', '-DG_LOG_DOMAIN="GStreamer-OpenCV"'], - override_options : ['cpp_std=c++11'], - include_directories : [configinc, libsinc], - version : libversion, - soversion : soversion, - darwin_versions : osxversion, - install : true, - dependencies : [gstbase_dep, gstvideo_dep, opencv_dep], - ) +opencv_found = true +foreach h : libopencv_headers + if not cxx.has_header(h, dependencies: opencv_dep) + message('Needed header "' + h + '" not found') + opencv_found = false + endif +endforeach - doc_sources = [] - foreach s: opencv_sources + opencv_headers - doc_sources += s.full_path() - endforeach - - libs_c_sources += { - 'opencv': pathsep.join(doc_sources) - } - - gst_libraries += [[pkg_name, {'lib': gstopencv}]] - gstopencv_dep = declare_dependency(link_with: gstopencv, - include_directories : [libsinc], - dependencies : [gstvideo_dep, opencv_dep]) - meson.override_dependency(pkg_name, gstopencv_dep) - - install_headers(opencv_headers, subdir : 'gstreamer-1.0/gst/opencv') -elif get_option('opencv').enabled() - error('OpenCV support enabled but required dependencies were not found.') -else - gstopencv_dep = disabler() +if not opencv_found + if opencv_opt.enabled() + error('opencv enabled, but needed headers not found') + endif + subdir_done() endif + +opencv_prefix = opencv_dep.get_variable('prefix') +gstopencv_cargs += ['-DOPENCV_PREFIX="' + opencv_prefix + '"'] +# opencv4 seems to ship with .pc file that references non-existent include dir +# (/usr/include/opencv4/opencv instead of /usr/include/opencv4/opencv2) +# clang 10 complains about the following header in opencv4 +# /usr/include/opencv4/opencv2/flann/logger.h:83:36: error: format string is not a string literal [-Werror,-Wformat-nonliteral] +gstopencv_cargs += cxx.get_supported_arguments(['-Wno-missing-include-dirs', '-Wno-format-nonliteral']) + +# Check the data dir used by opencv for its xml data files +# Use prefix from pkg-config to be compatible with cross-compilation +fsmod = import('fs') +opencv_path_name = '' +foreach d : ['opencv', 'OpenCV', 'opencv4'] + if fsmod.is_dir(opencv_prefix / 'share' / d) + opencv_path_name = d + break + endif +endforeach +if opencv_path_name != '' + gstopencv_cargs += [f'-DOPENCV_PATH_NAME="@d@"'] +else + if opencv_opt.enabled() + error('opencv enabled, but data directory not found') + endif + message('Unable to detect OpenCV data directory') + subdir_done() +endif + +pkg_name = 'gstreamer-opencv-1.0' +gstopencv = library('gstopencv-' + api_version, + opencv_sources, + c_args : gst_plugins_bad_args + ['-DBUILDING_GST_OPENCV'], + cpp_args : gst_plugins_bad_args + gstopencv_cargs + ['-DBUILDING_GST_OPENCV', '-DG_LOG_DOMAIN="GStreamer-OpenCV"'], + override_options : ['cpp_std=c++11'], + include_directories : [configinc, libsinc], + version : libversion, + soversion : soversion, + darwin_versions : osxversion, + install : true, + dependencies : [gstbase_dep, gstvideo_dep, opencv_dep], +) + +doc_sources = [] +foreach s: opencv_sources + opencv_headers + doc_sources += s.full_path() +endforeach + +libs_c_sources += { + 'opencv': pathsep.join(doc_sources) +} + +gst_libraries += [[pkg_name, {'lib': gstopencv}]] +gstopencv_dep = declare_dependency(link_with: gstopencv, + include_directories : [libsinc], + dependencies : [gstvideo_dep, opencv_dep]) +meson.override_dependency(pkg_name, gstopencv_dep) + +install_headers(opencv_headers, subdir : 'gstreamer-1.0/gst/opencv')