From 2160e0e2bd801c81d79323343396fc156f560c75 Mon Sep 17 00:00:00 2001 From: Nirbheek Chauhan Date: Tue, 29 Nov 2016 01:41:28 +0530 Subject: [PATCH] meson: Rework opencv plugin checks a) Use get_pkgconfig_variable() to get the opencv prefix b) Place an upper limit on the opencv version c) Ensure that headers are available (b) and (c) just copy what the configure.ac checks do. --- ext/opencv/meson.build | 66 ++++++++++++++++++++++++++++++++++++++------------ meson.build | 1 + 2 files changed, 51 insertions(+), 16 deletions(-) diff --git a/ext/opencv/meson.build b/ext/opencv/meson.build index ac96a90..db95b8e 100644 --- a/ext/opencv/meson.build +++ b/ext/opencv/meson.build @@ -1,4 +1,4 @@ -opencv_sources = [ +gstopencv_sources = [ 'gstcvdilate.cpp', 'gstcvdilateerode.cpp', 'gstcvequalizehist.cpp', @@ -23,27 +23,61 @@ opencv_sources = [ 'motioncells_wrapper.cpp' ] -opencv_cargs = ['-DGST_HAAR_CASCADES_DIR="@0@"'] -runcmd = run_command('pkg-config', '--variable=prefix', 'opencv') -if runcmd.returncode() == 0 - opencv_cargs += '-DOPENCV_PREFIX="' + runcmd.stdout().strip() + '"' -endif +libopencv2_headers = [ + 'opencv2/core/core_c.h', + 'opencv2/core/version.hpp', + 'opencv2/highgui/highgui_c.h', + 'opencv2/imgproc/imgproc.hpp', + 'opencv2/imgproc/imgproc_c.h', + 'opencv2/objdetect/objdetect.hpp', + 'opencv2/video/background_segm.hpp', +] + +gstopencv_cargs = ['-DGST_HAAR_CASCADES_DIR="@0@"'] -r = run_command('test', '-d', '/usr/share/opencv') -if r.returncode() == 0 - opencv_cargs += '-DOPENCV_PATH_NAME="opencv"' -else - opencv_cargs += '-DOPENCV_PATH_NAME="OpenCv"' +# First, check for the upper version limit and ensure it isn't found +# FIXME: When 0.37.0 is released, change this to use many-version-conditions +opencv3_dep = dependency('opencv', version : '>3.1.0', required : false) +# Then, check if the lower version limit is found +opencv2_dep = dependency('opencv', version : '>=2.3.0', required : false) + +opencv2_found = false +if opencv3_dep.found() + message('OpenCV version is too new: \'' + opencv3_dep.version() + '\' (need <= 3.1.0)') +elif opencv2_dep.found() + message('OpenCV found, version is \'' + opencv2_dep.version() + '\'') + opencv2_found = true + foreach h : libopencv2_headers + if not cxx.has_header(h) + message('Needed header "' + h + '" not found') + opencv2_found = false + endif + endforeach endif -opencv_dep = dependency('opencv', version : '>= 2.3.0', required : false) -if opencv_dep.found() +if opencv2_found + opencv2_prefix = opencv2_dep.get_pkgconfig_variable('prefix') + gstopencv_cargs += ['-DOPENCV_PREFIX="' + opencv2_prefix + '"'] + + # 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', opencv2_prefix + '/share/opencv') + if r.returncode() == 0 + gstopencv_cargs += '-DOPENCV_PATH_NAME="opencv"' + else + r = run_command('test', '-d', opencv2_prefix + '/share/OpenCV') + if r.returncode() == 0 + gstopencv_cargs += '-DOPENCV_PATH_NAME="OpenCv"' + else + error('Unable to detect OpenCV data directory') + endif + endif gstopencv = library('gstopencv', - opencv_sources, - cpp_args : gst_plugins_bad_args + opencv_cargs + [ '-DGST_USE_UNSTABLE_API' ], + gstopencv_sources, + cpp_args : gst_plugins_bad_args + gstopencv_cargs + [ '-DGST_USE_UNSTABLE_API' ], link_args : noseh_link_args, include_directories : [configinc], - dependencies : [gstbase_dep, gstvideo_dep, opencv_dep, gstopencv_dep], + dependencies : [gstbase_dep, gstvideo_dep, opencv2_dep, gstopencv_dep], install : true, install_dir : plugins_install_dir, ) diff --git a/meson.build b/meson.build index eecd37c..1788267 100644 --- a/meson.build +++ b/meson.build @@ -27,6 +27,7 @@ libversion = '@0@.@1@.0'.format(soversion, gst_version_minor.to_int() * 100 + gs plugins_install_dir = '@0@/gstreamer-1.0'.format(get_option('libdir')) cc = meson.get_compiler('c') +cxx = meson.get_compiler('cpp') if cc.get_id() == 'msvc' # Ignore several spurious warnings for things gstreamer does very commonly -- 2.7.4