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.
This commit is contained in:
Nirbheek Chauhan 2016-11-29 01:41:28 +05:30
parent 57bb47f3f7
commit 2160e0e2bd
2 changed files with 51 additions and 16 deletions

View file

@ -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() + '"'
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@"']
# 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
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"'
endif
if opencv2_found
opencv2_prefix = opencv2_dep.get_pkgconfig_variable('prefix')
gstopencv_cargs += ['-DOPENCV_PREFIX="' + opencv2_prefix + '"']
opencv_dep = dependency('opencv', version : '>= 2.3.0', required : false)
if opencv_dep.found()
# 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,
)

View file

@ -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