From: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
To: Kieran Bingham <kieran.bingham@ideasonboard.com>
Cc: Ariel D'Alessandro <ariel@vanguardiasur.com.ar>,
linux-media@vger.kernel.org, hverkuil@xs4all.nl, sean@mess.org,
p.zabel@pengutronix.de, ezequiel@collabora.com,
nicolas@ndufresne.ca, gjasny@googlemail.com
Subject: Re: [PATCH v1 1/1] Add support for meson building
Date: Thu, 18 Jun 2020 17:06:26 +0300 [thread overview]
Message-ID: <20200618140626.GF5959@pendragon.ideasonboard.com> (raw)
In-Reply-To: <d09caaf6-402f-ba57-825c-410ce39a5e2b@ideasonboard.com>
Hi Kieran,
On Thu, Jun 18, 2020 at 02:57:46PM +0100, Kieran Bingham wrote:
> Hi Ariel,
>
> Wow there's a lot of work there! That must have taken quite some effort
> between you and Ezequiel!
>
> I've looked through, and about the only thing that stands out to me is
> the way you're joining strings.
>
> Meson provides a join_paths() function specifically for that.
> Now we're "probably" not going to build this library on anything other
> than linux, but I think the function still has merit over the arbitrary
> strings which I mis-interpreted for 'divide' at first glance :S
The / string operator is actually an addition to meson as an official
alternative to join_paths() :-)
> Other than that, I expect we will have to run both build systems in
> parallel for some time to allow packaging and other builders to adapt.
> That might mean it's a bit more difficult to make sure both build
> systems are updated when adding new files or changing the build in anyway.
>
> However, that said - I'm most certainly in favour of this change and
> would love to see more meson support, so theres an:
>
> Acked-by: Kieran Bingham <kieran.bingham+renesas@ideasonboard.com>
>
> for the principle of this either way, but I don't maintain this library
> anyway ;-)
>
> With join_paths() used instead of (I guess it's just plain string
> concatenation?):
>
> Reviewed-by: Kieran Bingham <kieran.bingham+renesas@ideasonboard.com>
>
> But that's a whole lot of text, so I'm sure I've probably missed
> something. Lets see what more eyes find...
>
> On 18/06/2020 14:33, Ariel D'Alessandro wrote:
> > Supports building libraries and tools found in contrib/, lib/ and
> > utils/ directories, along with the implemented gettext translations.
> >
> > Co-developed-by: Ezequiel Garcia <ezequiel@collabora.com>
> > Signed-off-by: Ezequiel Garcia <ezequiel@collabora.com>
> > Signed-off-by: Ariel D'Alessandro <ariel@vanguardiasur.com.ar>
> > ---
> > .gitignore | 1 +
> > contrib/cobalt-ctl/meson.build | 8 +
> > contrib/decode_tm6000/meson.build | 14 +
> > contrib/gconv/meson.build | 42 +++
> > contrib/meson.build | 13 +
> > contrib/rds-saa6588/meson.build | 7 +
> > contrib/test/meson.build | 143 ++++++++++
> > contrib/xc3028-firmware/meson.build | 11 +
> > gen-version.sh | 36 +++
> > lib/libdvbv5/meson.build | 152 +++++++++++
> > lib/libv4l-mplane/meson.build | 16 ++
> > lib/libv4l1/meson.build | 52 ++++
> > lib/libv4l2/meson.build | 64 +++++
> > lib/libv4l2rds/meson.build | 27 ++
> > lib/libv4lconvert/meson.build | 107 ++++++++
> > lib/meson.build | 11 +
> > libdvbv5-po/meson.build | 3 +
> > meson.build | 255 ++++++++++++++++++
> > meson_options.txt | 42 +++
> > utils/cec-compliance/meson.build | 24 ++
> > utils/cec-ctl/meson.build | 18 ++
> > utils/cec-follower/meson.build | 21 ++
> > utils/cx18-ctl/meson.build | 8 +
> > utils/dvb/meson.build | 70 +++++
> > utils/gen_media_bus_format_codes.sh | 7 +
> > utils/gen_media_bus_format_names.sh | 7 +
> > utils/ir-ctl/meson.build | 23 ++
> > utils/ivtv-ctl/meson.build | 13 +
> > .../bpf_protocols/clang_sys_includes.sh | 9 +
> > utils/keytable/bpf_protocols/meson.build | 31 +++
> > utils/keytable/meson.build | 74 +++++
> > utils/keytable/rc_keymaps/meson.build | 147 ++++++++++
> > utils/libcecutil/meson.build | 45 ++++
> > utils/libmedia_dev/meson.build | 14 +
> > utils/libv4l2util/meson.build | 16 ++
> > utils/media-ctl/meson.build | 43 +++
> > utils/meson.build | 46 ++++
> > utils/qv4l2/meson.build | 80 ++++++
> > utils/qvidcap/meson.build | 82 ++++++
> > utils/rds-ctl/meson.build | 13 +
> > utils/v4l2-compliance/meson.build | 60 +++++
> > utils/v4l2-ctl/meson.build | 75 ++++++
> > utils/v4l2-dbg/meson.build | 16 ++
> > utils/v4l2-sysfs-path/meson.build | 14 +
> > v4l-utils-po/meson.build | 3 +
> > version.h.in | 1 +
> > 46 files changed, 1964 insertions(+)
> > create mode 100644 contrib/cobalt-ctl/meson.build
> > create mode 100644 contrib/decode_tm6000/meson.build
> > create mode 100644 contrib/gconv/meson.build
> > create mode 100644 contrib/meson.build
> > create mode 100644 contrib/rds-saa6588/meson.build
> > create mode 100644 contrib/test/meson.build
> > create mode 100644 contrib/xc3028-firmware/meson.build
> > create mode 100755 gen-version.sh
> > create mode 100644 lib/libdvbv5/meson.build
> > create mode 100644 lib/libv4l-mplane/meson.build
> > create mode 100644 lib/libv4l1/meson.build
> > create mode 100644 lib/libv4l2/meson.build
> > create mode 100644 lib/libv4l2rds/meson.build
> > create mode 100644 lib/libv4lconvert/meson.build
> > create mode 100644 lib/meson.build
> > create mode 100644 libdvbv5-po/meson.build
> > create mode 100644 meson.build
> > create mode 100644 meson_options.txt
> > create mode 100644 utils/cec-compliance/meson.build
> > create mode 100644 utils/cec-ctl/meson.build
> > create mode 100644 utils/cec-follower/meson.build
> > create mode 100644 utils/cx18-ctl/meson.build
> > create mode 100644 utils/dvb/meson.build
> > create mode 100755 utils/gen_media_bus_format_codes.sh
> > create mode 100755 utils/gen_media_bus_format_names.sh
> > create mode 100644 utils/ir-ctl/meson.build
> > create mode 100644 utils/ivtv-ctl/meson.build
> > create mode 100755 utils/keytable/bpf_protocols/clang_sys_includes.sh
> > create mode 100644 utils/keytable/bpf_protocols/meson.build
> > create mode 100644 utils/keytable/meson.build
> > create mode 100644 utils/keytable/rc_keymaps/meson.build
> > create mode 100644 utils/libcecutil/meson.build
> > create mode 100644 utils/libmedia_dev/meson.build
> > create mode 100644 utils/libv4l2util/meson.build
> > create mode 100644 utils/media-ctl/meson.build
> > create mode 100644 utils/meson.build
> > create mode 100644 utils/qv4l2/meson.build
> > create mode 100644 utils/qvidcap/meson.build
> > create mode 100644 utils/rds-ctl/meson.build
> > create mode 100644 utils/v4l2-compliance/meson.build
> > create mode 100644 utils/v4l2-ctl/meson.build
> > create mode 100644 utils/v4l2-dbg/meson.build
> > create mode 100644 utils/v4l2-sysfs-path/meson.build
> > create mode 100644 v4l-utils-po/meson.build
> > create mode 100644 version.h.in
> >
> > diff --git a/.gitignore b/.gitignore
> > index f899ecfc..7c900fe5 100644
> > --- a/.gitignore
> > +++ b/.gitignore
> > @@ -61,3 +61,4 @@ v4l-utils-po/en@quot.header
> > v4l-utils-po/insert-header.sin
> > v4l-utils-po/quot.sed
> > v4l-utils-po/remove-potcdate.sin
> > +build/
> > diff --git a/contrib/cobalt-ctl/meson.build b/contrib/cobalt-ctl/meson.build
> > new file mode 100644
> > index 00000000..f76fcba3
> > --- /dev/null
> > +++ b/contrib/cobalt-ctl/meson.build
> > @@ -0,0 +1,8 @@
> > +cobalt_ctl_sources = files(
> > + 'cobalt-ctl.c',
> > + 's-record.c',
> > +)
> > +
> > +cobalt_ctl = executable('cobalt-ctl',
> > + cobalt_ctl_sources,
> > + include_directories : v4l2_utils_incdir)
> > diff --git a/contrib/decode_tm6000/meson.build b/contrib/decode_tm6000/meson.build
> > new file mode 100644
> > index 00000000..5147278b
> > --- /dev/null
> > +++ b/contrib/decode_tm6000/meson.build
> > @@ -0,0 +1,14 @@
> > +decode_tm6000_sources = files(
> > + 'decode_tm6000.c',
> > +)
> > +
> > +decode_tm6000_deps = [
> > + dep_argp,
> > + dep_libv4l2util,
> > +]
> > +
> > +decode_tm6000 = executable('decode_tm6000',
> > + decode_tm6000_sources,
> > + install : true,
> > + dependencies: decode_tm6000_deps,
> > + include_directories : v4l2_utils_incdir)
> > diff --git a/contrib/gconv/meson.build b/contrib/gconv/meson.build
> > new file mode 100644
> > index 00000000..88abc46f
> > --- /dev/null
> > +++ b/contrib/gconv/meson.build
> > @@ -0,0 +1,42 @@
> > +arib_std_b24_sources = files(
> > + 'arib-std-b24.c',
> > + 'jis0201.h',
> > + 'jis0208.h',
> > + 'jisx0213.h',
> > +)
> > +
> > +arib_std_b24_deps = [
> > + dep_jis,
> > + dep_jisx0213,
> > +]
> > +
> > +arib_std_b24 = shared_module('ARIB-STD-B24',
> > + arib_std_b24_sources,
> > + name_prefix : '',
> > + dependencies : arib_std_b24_deps,
> > + install : true,
> > + install_dir : get_option('libdir') / 'gconv',
>
> Looks like this should also be join_paths() (noticed below first, and
> skipping back to look for other occurences).
>
>
>
> > + include_directories : v4l2_utils_incdir)
> > +
> > +dep_arib_std_b24 = declare_dependency(link_with : arib_std_b24)
> > +
> > +en300_468_tab00_sources = files(
> > + 'en300-468-tab00.c',
> > +)
> > +
> > +en300_468_tab00_deps = [
> > + dep_jis,
> > + dep_jisx0213,
> > +]
>
> you could do
>
> gconv_install = join_paths(get_option('libdir'), 'gconv')
>
> > +
> > +en300_468_tab00 = shared_module('EN300-468-TAB00',
> > + en300_468_tab00_sources,
> > + name_prefix : '',
> > + dependencies : en300_468_tab00_deps,
> > + install : true,
> > + install_dir : get_option('libdir') / 'gconv',
>
> install_dir : gconv_install,
>
>
>
> > + include_directories : v4l2_utils_incdir)
> > +
> > +dep_en300_468_tab00 = declare_dependency(link_with : en300_468_tab00)
> > +
> > +install_data('gconv-modules', install_dir : get_option('libdir') / 'gconv')
>
> Then you can reuse the gconv_install variable here.
>
> Same wherever approrpiate in other build files too.
>
>
>
> > diff --git a/contrib/meson.build b/contrib/meson.build
> > new file mode 100644
> > index 00000000..e3aa05ac
> > --- /dev/null
> > +++ b/contrib/meson.build
> > @@ -0,0 +1,13 @@
> > +if host_machine.system() == 'linux'
> > + subdir('test')
> > + subdir('xc3028-firmware')
> > + if have_i2c_dev
> > + subdir('rds-saa6588')
> > + endif
> > +endif
> > +
> > +subdir('decode_tm6000')
> > +
> > +if have_gconv
> > + subdir('gconv', if_found : [dep_jis, dep_jisx0213])
> > +endif
> > diff --git a/contrib/rds-saa6588/meson.build b/contrib/rds-saa6588/meson.build
> > new file mode 100644
> > index 00000000..037d2e20
> > --- /dev/null
> > +++ b/contrib/rds-saa6588/meson.build
> > @@ -0,0 +1,7 @@
> > +rds_saa6588_sources = files(
> > + 'rds-saa6588.c',
> > +)
> > +
> > +rds_saa6588 = executable('rds-saa6588',
> > + rds_saa6588_sources,
> > + include_directories : v4l2_utils_incdir)
> > diff --git a/contrib/test/meson.build b/contrib/test/meson.build
> > new file mode 100644
> > index 00000000..35243adf
> > --- /dev/null
> > +++ b/contrib/test/meson.build
> > @@ -0,0 +1,143 @@
> > +ioctl_test_sources = files(
> > + 'ioctl-test.c',
> > + 'ioctl-test.h',
> > + 'ioctl_32.h',
> > + 'ioctl_64.h',
> > +)
> > +
> > +ioctl_test = executable('ioctl-test',
> > + ioctl_test_sources,
> > + include_directories : v4l2_utils_incdir)
> > +
> > +sliced_vbi_test_sources = files(
> > + 'sliced-vbi-test.c',
> > +)
> > +
> > +sliced_vbi_test = executable('sliced-vbi-test',
> > + sliced_vbi_test_sources,
> > + include_directories : v4l2_utils_incdir)
> > +
> > +sliced_vbi_detect_sources = files(
> > + 'sliced-vbi-detect.c',
> > +)
> > +
> > +sliced_vbi_detect = executable('sliced-vbi-detect',
> > + sliced_vbi_detect_sources,
> > + include_directories : v4l2_utils_incdir)
> > +
> > +v4l2grab_sources = files(
> > + 'v4l2grab.c',
> > +
> > +)
> > +
> > +v4l2grab_deps = [
> > + dep_argp,
> > + dep_libv4l2,
> > + dep_libv4lconvert,
> > + dep_threads,
> > +]
> > +
> > +v4l2grab = executable('v4l2grab',
> > + v4l2grab_sources,
> > + dependencies : v4l2grab_deps,
> > + include_directories : v4l2_utils_incdir)
> > +
> > +driver_test_sources = files(
> > + 'driver-test.c',
> > +
> > +)
> > +
> > +driver_test_deps = [
> > + dep_libv4l2util,
> > +]
> > +
> > +driver_test = executable('driver-test',
> > + driver_test_sources,
> > + dependencies : driver_test_deps,
> > + include_directories : v4l2_utils_incdir)
> > +
> > +mc_nextgen_test_sources = files(
> > + 'mc_nextgen_test.c',
> > +)
> > +
> > +mc_nextgen_test_deps = [
> > + dep_argp,
> > + dep_libudev,
> > +]
> > +
> > +mc_nextgen_test = executable('mc-nextgen-test',
> > + mc_nextgen_test_sources,
> > + dependencies : mc_nextgen_test_deps,
> > + include_directories : v4l2_utils_incdir)
> > +
> > +stress_buffer_sources = files(
> > + 'stress-buffer.c',
> > +)
> > +
> > +stress_buffer = executable('stress-buffer',
> > + stress_buffer_sources,
> > + include_directories : v4l2_utils_incdir)
> > +
> > +capture_example_sources = files(
> > + 'capture-example.c',
> > +)
> > +
> > +capture_example = executable('capture-example',
> > + capture_example_sources,
> > + include_directories : v4l2_utils_incdir)
> > +
> > +if dep_x11.found()
> > + pixfmt_test_sources = files(
> > + 'pixfmt-test.c',
> > + )
> > +
> > + pixfmt_test_deps = [
> > + dep_x11,
> > + ]
> > +
> > + pixfmt_test = executable('pixfmt-test',
> > + pixfmt_test_sources,
> > + dependencies : pixfmt_test_deps,
> > + include_directories : v4l2_utils_incdir)
> > +endif
> > +
> > +if dep_x11.found() and dep_glu.found()
> > + v4l2gl_sources = files(
> > + 'v4l2gl.c',
> > + )
> > +
> > + v4l2gl_deps = [
> > + dep_gl,
> > + dep_glu,
> > + dep_libv4l2,
> > + dep_libv4lconvert,
> > + dep_x11,
> > + ]
> > +
> > + v4l2gl = executable('v4l2gl',
> > + v4l2gl_sources,
> > + dependencies : v4l2gl_deps,
> > + include_directories : v4l2_utils_incdir)
> > +endif
> > +
> > +if dep_jpeg.found() and dep_sdl.found() and dep_sdl_image.found()
> > + sdlcam_sources = files(
> > + 'sdlcam.c',
> > + )
> > +
> > + sdlcam_deps = [
> > + dep_jpeg,
> > + dep_libdl,
> > + dep_libm,
> > + dep_librt,
> > + dep_libv4l2,
> > + dep_libv4lconvert,
> > + dep_sdl,
> > + dep_sdl_image,
> > + ]
> > +
> > + sdlcam = executable('sdlcam',
> > + sdlcam_sources,
> > + dependencies : sdlcam_deps,
> > + include_directories : v4l2_utils_incdir)
> > +endif
> > diff --git a/contrib/xc3028-firmware/meson.build b/contrib/xc3028-firmware/meson.build
> > new file mode 100644
> > index 00000000..a86e02d4
> > --- /dev/null
> > +++ b/contrib/xc3028-firmware/meson.build
> > @@ -0,0 +1,11 @@
> > +xc3028_firmware_sources = files(
> > + 'extract_head.h',
> > + 'firmware-tool.c',
> > + 'standards.c',
> > + 'standards.h',
> > + 'tuner-xc2028-types.h',
> > +)
> > +
> > +xc3028_firmware = executable('xc3028-firmware',
> > + xc3028_firmware_sources,
> > + include_directories : v4l2_utils_incdir)
> > diff --git a/gen-version.sh b/gen-version.sh
> > new file mode 100755
> > index 00000000..9223ab7d
> > --- /dev/null
> > +++ b/gen-version.sh
> > @@ -0,0 +1,36 @@
> > +#!/bin/sh
> > +# gen-version.sh script taken from the libcamera project.
> > +# Generate a version string using git describe.
> > +#
> > +# SPDX-License-Identifier: GPL-2.0-or-later
> > +
> > +build_dir="$1"
> > +
> > +# Bail out if the directory isn't under git control
> > +src_dir=$(git rev-parse --git-dir 2>&1) || exit 1
> > +src_dir=$(readlink -f "$src_dir/..")
> > +
> > +# Get a short description from the tree.
> > +version=$(git describe --abbrev=8 --match "v[0-9]*" 2>/dev/null)
> > +
> > +if [ -z "$version" ]
> > +then
> > + # Handle an un-tagged repository
> > + sha=$(git describe --abbrev=8 --always 2>/dev/null)
> > + commits=$(git log --oneline | wc -l 2>/dev/null)
> > + version="v4l-utils-0.0.0-$commits-g$sha"
> > +fi
> > +
> > +# Append a '-dirty' suffix if the working tree is dirty. Prevent false
> > +# positives due to changed timestamps by running git update-index.
> > +if [ -z "$build_dir" ] || (echo "$build_dir" | grep -q "$src_dir")
> > +then
> > + git update-index --refresh > /dev/null 2>&1
> > +fi
> > +git diff-index --quiet HEAD || version="$version-dirty"
> > +
> > +# Replace first '-' with a '+' to denote build metadata, strip the 'g' in from
> > +# of the git SHA1 and remove the initial 'v'.
> > +version=$(echo "$version" | sed -e 's/-/+/' | sed -e 's/-g/-/' | cut -c 11-)
> > +
> > +echo "$version"
> > diff --git a/lib/libdvbv5/meson.build b/lib/libdvbv5/meson.build
> > new file mode 100644
> > index 00000000..6bbde1b0
> > --- /dev/null
> > +++ b/lib/libdvbv5/meson.build
> > @@ -0,0 +1,152 @@
> > +libdvbv5_option = get_option('libdvbv5')
> > +if libdvbv5_option.disabled() or (libdvbv5_option.auto() and not dep_libudev.found())
> > + dep_libdvbv5 = dependency('', required : false)
> > + subdir_done()
> > +endif
> > +if libdvbv5_option.enabled() and not dep_libudev.found()
> > + error('libdvbv5 enabled but ' + dep_libudev.name() + ' not found')
> > +endif
> > +
> > +libdvbv5_sources = files(
> > + 'compat-soname.c',
> > + 'countries.c',
> > + 'crc32.c',
> > + 'descriptors.c',
> > + 'descriptors/desc_atsc_service_location.c',
> > + 'descriptors/desc_ca.c',
> > + 'descriptors/desc_ca_identifier.c',
> > + 'descriptors/desc_cable_delivery.c',
> > + 'descriptors/desc_event_extended.c',
> > + 'descriptors/desc_event_short.c',
> > + 'descriptors/desc_extension.c',
> > + 'descriptors/desc_frequency_list.c',
> > + 'descriptors/desc_hierarchy.c',
> > + 'descriptors/desc_isdbt_delivery.c',
> > + 'descriptors/desc_language.c',
> > + 'descriptors/desc_logical_channel.c',
> > + 'descriptors/desc_network_name.c',
> > + 'descriptors/desc_partial_reception.c',
> > + 'descriptors/desc_sat.c',
> > + 'descriptors/desc_service.c',
> > + 'descriptors/desc_t2_delivery.c',
> > + 'descriptors/desc_terrestrial_delivery.c',
> > + 'descriptors/desc_ts_info.c',
> > + 'dvb-demux.c',
> > + 'dvb-dev-local.c',
> > + 'dvb-dev-priv.h',
> > + 'dvb-dev-remote.c',
> > + 'dvb-dev.c',
> > + 'dvb-fe-priv.h',
> > + 'dvb-fe.c',
> > + 'dvb-file.c',
> > + 'dvb-legacy-channel-format.c',
> > + 'dvb-log.c',
> > + 'dvb-sat.c',
> > + 'dvb-scan.c',
> > + 'dvb-v5-std.c',
> > + 'dvb-v5.c',
> > + 'dvb-v5.h',
> > + 'dvb-vdr-format.c',
> > + 'dvb-zap-format.c',
> > + 'parse_string.c',
> > + 'parse_string.h',
> > + 'tables/atsc_eit.c',
> > + 'tables/cat.c',
> > + 'tables/eit.c',
> > + 'tables/header.c',
> > + 'tables/mgt.c',
> > + 'tables/mpeg_es.c',
> > + 'tables/mpeg_pes.c',
> > + 'tables/mpeg_ts.c',
> > + 'tables/nit.c',
> > + 'tables/pat.c',
> > + 'tables/pmt.c',
> > + 'tables/sdt.c',
> > + 'tables/vct.c',
> > +)
> > +
> > +configure_file(
> > + output : 'libdvb-version.h',
> > + input : '../include/libdvbv5/libdvb-version.h.in',
> > + configuration : conf,
> > + install: true,
> > + install_dir: 'include/libdvbv5',
> > +)
> > +
> > +libdvbv5_api = files(
> > + '../include/libdvbv5/atsc_eit.h',
> > + '../include/libdvbv5/atsc_header.h',
> > + '../include/libdvbv5/cat.h',
> > + '../include/libdvbv5/countries.h',
> > + '../include/libdvbv5/crc32.h',
> > + '../include/libdvbv5/desc_atsc_service_location.h',
> > + '../include/libdvbv5/desc_ca.h',
> > + '../include/libdvbv5/desc_ca_identifier.h',
> > + '../include/libdvbv5/desc_cable_delivery.h',
> > + '../include/libdvbv5/desc_event_extended.h',
> > + '../include/libdvbv5/desc_event_short.h',
> > + '../include/libdvbv5/desc_extension.h',
> > + '../include/libdvbv5/desc_frequency_list.h',
> > + '../include/libdvbv5/desc_hierarchy.h',
> > + '../include/libdvbv5/desc_isdbt_delivery.h',
> > + '../include/libdvbv5/desc_language.h',
> > + '../include/libdvbv5/desc_logical_channel.h',
> > + '../include/libdvbv5/desc_network_name.h',
> > + '../include/libdvbv5/desc_partial_reception.h',
> > + '../include/libdvbv5/desc_sat.h',
> > + '../include/libdvbv5/desc_service.h',
> > + '../include/libdvbv5/desc_t2_delivery.h',
> > + '../include/libdvbv5/desc_terrestrial_delivery.h',
> > + '../include/libdvbv5/desc_ts_info.h',
> > + '../include/libdvbv5/descriptors.h',
> > + '../include/libdvbv5/dvb-demux.h',
> > + '../include/libdvbv5/dvb-dev.h',
> > + '../include/libdvbv5/dvb-fe.h',
> > + '../include/libdvbv5/dvb-file.h',
> > + '../include/libdvbv5/dvb-frontend.h',
> > + '../include/libdvbv5/dvb-log.h',
> > + '../include/libdvbv5/dvb-sat.h',
> > + '../include/libdvbv5/dvb-scan.h',
> > + '../include/libdvbv5/dvb-v5-std.h',
> > + '../include/libdvbv5/eit.h',
> > + '../include/libdvbv5/header.h',
> > + '../include/libdvbv5/mgt.h',
> > + '../include/libdvbv5/mpeg_es.h',
> > + '../include/libdvbv5/mpeg_pes.h',
> > + '../include/libdvbv5/mpeg_ts.h',
> > + '../include/libdvbv5/nit.h',
> > + '../include/libdvbv5/pat.h',
> > + '../include/libdvbv5/pmt.h',
> > + '../include/libdvbv5/sdt.h',
> > + '../include/libdvbv5/vct.h',
> > +)
> > +
> > +install_headers(libdvbv5_api, subdir: 'libdvbv5')
> > +
> > +libdvbv5_deps = [
> > + dep_iconv,
> > + dep_libm,
> > + dep_librt,
> > + dep_libudev,
> > + dep_threads,
> > +]
> > +
> > +libdvbv5_c_args = [
> > + '-DHAVE_DVBV5_REMOTE',
> > +]
> > +
> > +libdvbv5 = library('dvbv5',
> > + libdvbv5_sources,
> > + install : true,
> > + dependencies : libdvbv5_deps,
> > + c_args : libdvbv5_c_args,
> > + include_directories : v4l2_utils_incdir)
> > +
> > +dep_libdvbv5 = declare_dependency(link_with : libdvbv5)
> > +
> > +pkg.generate(
> > + libdvbv5,
> > + name : 'libdvbv5',
> > + version : meson.project_version(),
> > + requires_private : 'libudev',
> > + description : 'DVBv5 utility library')
> > diff --git a/lib/libv4l-mplane/meson.build b/lib/libv4l-mplane/meson.build
> > new file mode 100644
> > index 00000000..9e55dfb8
> > --- /dev/null
> > +++ b/lib/libv4l-mplane/meson.build
> > @@ -0,0 +1,16 @@
> > +libv4l_mplane_sources = files(
> > + 'libv4l-mplane.c',
> > +)
> > +
> > +libv4l_mplane_deps = [
> > + dep_threads,
> > +]
> > +
> > +libv4l_mplane = shared_module('v4l-mplane',
> > + libv4l_mplane_sources,
> > + install : true,
> > + install_dir : libv4l2plugindir,
> > + dependencies : libv4l_mplane_deps,
> > + include_directories : v4l2_utils_incdir)
> > +
> > +dep_libv4l_mplane = declare_dependency(link_with : libv4l_mplane)
> > diff --git a/lib/libv4l1/meson.build b/lib/libv4l1/meson.build
> > new file mode 100644
> > index 00000000..1c61f633
> > --- /dev/null
> > +++ b/lib/libv4l1/meson.build
> > @@ -0,0 +1,52 @@
> > +libv4l1_sources = files(
> > + 'libv4l1-priv.h',
> > + 'libv4l1.c',
> > + 'log.c',
> > +)
> > +
> > +libv4l1_api = files(
> > + '../include/libv4l1-videodev.h',
> > + '../include/libv4l1.h',
> > +)
> > +
> > +install_headers(libv4l1_api)
> > +
> > +libv4l1_deps = [
> > + dep_libv4l2,
> > + dep_threads,
> > +]
> > +
> > +libv4l1 = library('v4l1',
> > + libv4l1_sources,
> > + install : true,
> > + dependencies : libv4l1_deps,
> > + include_directories : v4l2_utils_incdir)
> > +
> > +dep_libv4l1 = declare_dependency(link_with : libv4l1)
> > +
> > +pkg.generate(
> > + libv4l1,
> > + name : 'libv4l1',
> > + version : meson.project_version(),
> > + requires_private : 'libv4l2',
> > + description : 'v4l1 compatibility library')
> > +
> > +v4l1compat_sources = files(
> > + 'v4l1compat.c',
> > +)
> > +
> > +v4l1compat_deps = [
> > + dep_libv4l1,
> > +]
> > +
> > +libv4l1privdir = get_option('prefix') / get_option('libdir') / get_option('libv4l1subdir')
>
> Shouldn't that be handled with a join_paths() instead?
>
> edit: This was the one I saw first, and there are others above, and I
> suspect below.
>
> This should probably be fixed throughout, so I won't go through to
> highlight each one I find.
>
>
> > +
> > +v4l1compat = shared_module('v4l1compat',
> > + v4l1compat_sources,
> > + name_prefix : '',
> > + install : true,
> > + install_dir : libv4l1privdir,
> > + dependencies : v4l1compat_deps,
> > + include_directories : v4l2_utils_incdir)
> > +
> > +dep_v4l1compat = declare_dependency(link_with : v4l1compat)
> > diff --git a/lib/libv4l2/meson.build b/lib/libv4l2/meson.build
> > new file mode 100644
> > index 00000000..201b4847
> > --- /dev/null
> > +++ b/lib/libv4l2/meson.build
> > @@ -0,0 +1,64 @@
> > +libv4l2_sources = files(
> > + 'libv4l2-priv.h',
> > + 'libv4l2.c',
> > + 'log.c',
> > +)
> > +
> > +libv4l2_api = files(
> > + '../include/libv4l-plugin.h',
> > + '../include/libv4l2.h',
> > +)
> > +
> > +install_headers(libv4l2_api)
> > +
> > +libv4l2_deps = [
> > + dep_libdl,
> > + dep_libv4lconvert,
> > + dep_threads,
> > +]
> > +
> > +libv4l2_c_args = []
> > +
> > +if get_option('v4l-plugins')
> > + libv4l2_sources += files('v4l2-plugin.c')
> > + libv4l2_c_args += [
> > + '-DHAVE_V4L_PLUGINS',
> > + '-DLIBV4L2_PLUGIN_DIR="@0@"'.format(libv4l2plugindir)
> > + ]
> > +endif
> > +
> > +libv4l2 = library('v4l2',
> > + libv4l2_sources,
> > + install : true,
> > + dependencies : libv4l2_deps,
> > + c_args : libv4l2_c_args,
> > + include_directories : v4l2_utils_incdir)
> > +
> > +dep_libv4l2 = declare_dependency(link_with : libv4l2)
> > +
> > +pkg.generate(
> > + libv4l2,
> > + name : 'libv4l2',
> > + version : meson.project_version(),
> > + requires_private : 'libv4lconvert',
> > + description : 'v4l2 device access library')
> > +
> > +v4l2convert_sources = files(
> > + 'v4l2convert.c',
> > +)
> > +
> > +v4l2convert_deps = [
> > + dep_libv4l2,
> > +]
> > +
> > +libv4l2privdir = get_option('prefix') / get_option('libdir') / get_option('libv4l2subdir')
> > +
> > +v4l2convert = shared_module('v4l2convert',
> > + v4l2convert_sources,
> > + name_prefix : '',
> > + install : true,
> > + install_dir : libv4l2privdir,
> > + dependencies : v4l2convert_deps,
> > + include_directories : v4l2_utils_incdir)
> > +
> > +dep_v4l2convert = declare_dependency(link_with : v4l2convert)
> > diff --git a/lib/libv4l2rds/meson.build b/lib/libv4l2rds/meson.build
> > new file mode 100644
> > index 00000000..6c60ca5b
> > --- /dev/null
> > +++ b/lib/libv4l2rds/meson.build
> > @@ -0,0 +1,27 @@
> > +libv4l2rds_sources = files(
> > + 'libv4l2rds.c',
> > +)
> > +
> > +libv4l2rds_api = files(
> > + '../include/libv4l2rds.h',
> > +)
> > +
> > +install_headers(libv4l2rds_api)
> > +
> > +libv4l2rds_deps = [
> > + dep_threads,
> > +]
> > +
> > +libv4l2rds = library('v4l2rds',
> > + libv4l2rds_sources,
> > + install : true,
> > + dependencies : libv4l2rds_deps,
> > + include_directories : v4l2_utils_incdir)
> > +
> > +dep_libv4l2rds = declare_dependency(link_with : libv4l2rds)
> > +
> > +pkg.generate(
> > + libv4l2rds,
> > + name : 'libv4l2rds',
> > + version : meson.project_version(),
> > + description : 'v4l2 RDS decode library')
> > diff --git a/lib/libv4lconvert/meson.build b/lib/libv4lconvert/meson.build
> > new file mode 100644
> > index 00000000..5deb5fcf
> > --- /dev/null
> > +++ b/lib/libv4lconvert/meson.build
> > @@ -0,0 +1,107 @@
> > +libv4lconvert_sources = files(
> > + 'bayer.c',
> > + 'control/libv4lcontrol-priv.h',
> > + 'control/libv4lcontrol.c',
> > + 'control/libv4lcontrol.h',
> > + 'cpia1.c',
> > + 'crop.c',
> > + 'flip.c',
> > + 'helper-funcs.h',
> > + 'hm12.c',
> > + 'jidctflt.c',
> > + 'jl2005bcd.c',
> > + 'jpeg.c',
> > + 'jpgl.c',
> > + 'libv4lconvert-priv.h',
> > + 'libv4lconvert.c',
> > + 'libv4lsyscall-priv.h',
> > + 'mr97310a.c',
> > + 'pac207.c',
> > + 'processing/autogain.c',
> > + 'processing/gamma.c',
> > + 'processing/libv4lprocessing-priv.h',
> > + 'processing/libv4lprocessing.c',
> > + 'processing/libv4lprocessing.h',
> > + 'processing/whitebalance.c',
> > + 'rgbyuv.c',
> > + 'se401.c',
> > + 'sn9c10x.c',
> > + 'sn9c2028-decomp.c',
> > + 'sn9c20x.c',
> > + 'spca501.c',
> > + 'spca561-decompress.c',
> > + 'sq905c.c',
> > + 'stv0680.c',
> > + 'tinyjpeg-internal.h',
> > + 'tinyjpeg.c',
> > + 'tinyjpeg.h',
> > +)
> > +
> > +libv4lconvert_api = files(
> > + '../include/libv4lconvert.h',
> > +)
> > +
> > +install_headers(libv4lconvert_api)
> > +
> > +libv4lconvert_deps = [
> > + dep_libm,
> > + dep_librt,
> > +]
> > +
> > +libv4lconvert_priv_libs = [
> > + '-lm',
> > + '-lrt',
> > +]
> > +
> > +libv4lconvert_c_args = []
> > +
> > +if dep_jpeg.found()
> > + libv4lconvert_deps += dep_jpeg
> > + libv4lconvert_priv_libs += dep_jpeg_priv_libs
> > + libv4lconvert_sources += files(
> > + 'jpeg_memsrcdest.c',
> > + 'jpeg_memsrcdest.h'
> > + )
> > + libv4lconvert_c_args += [
> > + '-DHAVE_JPEG',
> > + ]
> > +endif
> > +
> > +if have_fork
> > + libv4lconvert_sources += files(
> > + 'helper.c',
> > + )
> > + libv4lconvertprivdir = get_option('prefix') / get_option('libdir') / get_option('libv4lconvertsubdir')
> > + ov511_decomp_sources = files(
> > + 'ov511-decomp.c',
> > + )
> > + ov511_decomp = executable('ov511-decomp',
> > + ov511_decomp_sources,
> > + install : true,
> > + install_dir : libv4lconvertprivdir,
> > + include_directories : v4l2_utils_incdir)
> > + ov518_decomp_sources = files(
> > + 'ov518-decomp.c',
> > + )
> > + ov518_decomp = executable('ov518-decomp',
> > + ov518_decomp_sources,
> > + install : true,
> > + install_dir : libv4lconvertprivdir,
> > + include_directories : v4l2_utils_incdir)
> > +endif
> > +
> > +libv4lconvert = library('v4lconvert',
> > + libv4lconvert_sources,
> > + install : true,
> > + dependencies : libv4lconvert_deps,
> > + c_args : libv4lconvert_c_args,
> > + include_directories : v4l2_utils_incdir)
> > +
> > +dep_libv4lconvert = declare_dependency(link_with : libv4lconvert)
> > +
> > +pkg.generate(
> > + libv4lconvert,
> > + name : 'libv4lconvert',
> > + libraries_private : libv4lconvert_priv_libs,
> > + version : meson.project_version(),
> > + description : 'v4l format conversion library')
> > diff --git a/lib/meson.build b/lib/meson.build
> > new file mode 100644
> > index 00000000..47cee16d
> > --- /dev/null
> > +++ b/lib/meson.build
> > @@ -0,0 +1,11 @@
> > +libv4l2plugindir = get_option('prefix') / get_option('libdir') / get_option('libv4l2subdir') / 'plugins'
> > +
> > +subdir('libdvbv5')
> > +subdir('libv4lconvert')
> > +subdir('libv4l2')
> > +subdir('libv4l1')
> > +subdir('libv4l2rds')
> > +
> > +if get_option('v4l-plugins')
> > + subdir('libv4l-mplane')
> > +endif
> > diff --git a/libdvbv5-po/meson.build b/libdvbv5-po/meson.build
> > new file mode 100644
> > index 00000000..e382651e
> > --- /dev/null
> > +++ b/libdvbv5-po/meson.build
> > @@ -0,0 +1,3 @@
> > +i18n.gettext('libdvbv5',
> > + args : i18n_gettext_arguments,
> > +)
> > diff --git a/meson.build b/meson.build
> > new file mode 100644
> > index 00000000..3d0f0e6c
> > --- /dev/null
> > +++ b/meson.build
> > @@ -0,0 +1,255 @@
> > +project('v4l-utils', 'c', 'cpp',
> > + version: '1.19.0',
> > + meson_version : '>= 0.50',
> > + default_options : [
> > + 'warning_level=1',
> > + ],
> > + license : 'LGPL 2.1+')
> > +
> > +cc = meson.get_compiler('c')
> > +cpp = meson.get_compiler('cpp')
> > +have_m32 = cc.has_link_argument('-m32')
> > +
> > +fs = import('fs')
> > +i18n = import('i18n')
> > +pkg = import('pkgconfig')
> > +qt5 = import('qt5')
> > +
> > +as_version = meson.project_version()
> > +ver_arr = as_version.split('.')
> > +as_major_version = ver_arr[0]
> > +as_minor_version = ver_arr[1]
> > +as_patch_version = ver_arr[2]
> > +
> > +conf = configuration_data()
> > +conf.set_quoted('V4L_UTILS_VERSION', as_version)
> > +conf.set('PACKAGE_VERSION', as_version)
> > +conf.set('MAJOR', as_major_version)
> > +conf.set('MINOR', as_minor_version)
> > +conf.set('PATCH', as_patch_version)
> > +
> > +common_arguments = [
> > + '-Wpointer-arith',
> > + '-D_GNU_SOURCE',
> > + '-I.', # Needed for config.h
> > + '-DPROMOTED_MODE_T=int',
> > +]
> > +
> > +v4l2_utils_incdir_arr = [
> > + 'lib' / 'include',
> > +]
> > +
> > +if host_machine.system() == 'linux'
> > + v4l2_utils_incdir_arr += 'include'
> > +elif host_machine.system() == 'freebsd'
> > + v4l2_utils_incdir_arr += 'contrib/freebsd/include'
> > +endif
> > +
> > +v4l2_utils_incdir = include_directories(v4l2_utils_incdir_arr)
> > +
> > +prog_bash = find_program('bash')
> > +prog_clang = find_program('clang', required : get_option('bpf'))
> > +prog_grep = find_program('grep')
> > +prog_perl = find_program('perl')
> > +
> > +dep_alsa = dependency('alsa', required : false)
> > +dep_gl = dependency('gl', required : get_option('qvidcap').enabled() or get_option('qv4l2').enabled())
> > +dep_glu = dependency('glu', required : false)
> > +dep_libdl = cc.find_library('dl')
> > +dep_libelf = cc.find_library('elf', required : get_option('bpf'))
> > +dep_libm = cc.find_library('m')
> > +dep_librt = cc.find_library('rt')
> > +dep_qt5 = dependency('qt5', modules: ['Core', 'Gui', 'Widgets', 'OpenGL'],
> > + required : get_option('qvidcap').enabled() or get_option('qv4l2').enabled())
> > +dep_sdl = cc.find_library('SDL2', required : false)
> > +dep_sdl_image = cc.find_library('SDL2_image', required : false)
> > +dep_threads = dependency('threads')
> > +dep_x11 = dependency('x11', required : false)
> > +dep_xmlrpc = dependency('xmlrpc', required : false)
> > +
> > +have_fork = cc.has_function('fork')
> > +have_i2c_dev = cc.has_header('linux/i2c-dev.h')
> > +
> > +if cc.has_function('argp_parse')
> > + dep_argp = dependency('', required : false)
> > +else
> > + dep_argp = cc.find_library('argp')
> > +endif
> > +
> > +if cc.has_function('iconv_open')
> > + dep_iconv = dependency('', required : false)
> > + have_iconv = true
> > +else
> > + dep_iconv = cc.find_library('iconv', required : false)
> > + have_iconv = dep_iconv.found()
> > +endif
> > +
> > +if have_iconv
> > + conf.set('HAVE_ICONV', 1)
> > + iconv_const_test = '''#include <iconv.h>
> > +size_t iconv (iconv_t cd, char * *inbuf, size_t *inbytesleft, char * *outbuf, size_t *outbytesleft);
> > +'''
> > + if cc.compiles(iconv_const_test, dependencies : dep_iconv)
> > + conf.set('ICONV_CONST', '')
> > + else
> > + conf.set('ICONV_CONST', 'const')
> > + endif
> > +endif
> > +
> > +have_gconv = cc.has_header('gconv.h', required : get_option('gconv'))
> > +
> > +# Detect system gconv directory
> > +gconvsysdir = get_option('gconvsysdir')
> > +
> > +# Generic check: works with most distributions
> > +gconv_dirs_generic = [
> > + '/lib64',
> > + '/usr/lib64',
> > + '/usr/local/lib64',
> > + '/lib',
> > + '/usr/lib',
> > + '/usr/local/lib',
> > +]
> > +
> > +if gconvsysdir == ''
> > + foreach dir : gconv_dirs_generic
> > + dir = dir / 'gconv'
> > + if fs.is_dir(dir)
> > + gconvsysdir = dir
> > + break
> > + endif
> > + endforeach
> > +endif
> > +
> > +# Debian/Ubuntu-specific check: should be aligned with the debian package
> > +gconv_dirs_debian = [
> > + 'alphaev67-linux-gnu',
> > + 'arm-linux-gnueabi',
> > + 'arm-linux-gnueabihf',
> > + 'i686-kfreebsd-gnu',
> > + 'i686-linux-gnu',
> > + 'mips-linux-gnu',
> > + 'mips64-linux-gnuabi64',
> > + 'mips64-linux-gnuabin32',
> > + 'mips64el-linux-gnuabi64',
> > + 'mips64el-linux-gnuabin32',
> > + 'mipsel-linux-gnu',
> > + 'mipsisa32r6-linux-gnu',
> > + 'mipsisa32r6el-linux-gnu',
> > + 'mipsisa64r6-linux-gnuabi64',
> > + 'mipsisa64r6-linux-gnuabin32',
> > + 'mipsisa64r6el-linux-gnuabi64',
> > + 'mipsisa64r6el-linux-gnuabin32',
> > + 'powerpc-linux-gnu',
> > + 'powerpc64-linux-gnu',
> > + 's390-linux-gnu',
> > + 'sparc64-linux-gnu',
> > + 'sparcv9-linux-gnu',
> > + 'x86_64-linux-gnu',
> > + 'x86_64-linux-gnux32',
> > +]
> > +
> > +if gconvsysdir == ''
> > + foreach dir : gconv_dirs_debian
> > + dir = '/usr' / 'lib' / dir / 'gconv'
> > + if fs.is_dir(dir)
> > + gconvsysdir = dir
> > + break
> > + endif
> > + endforeach
> > +endif
> > +
> > +if gconvsysdir == ''
> > + dep_jis = cc.find_library('JIS', required : get_option('gconv'))
> > + dep_jisx0213 = cc.find_library('JISX0213', required : get_option('gconv'))
> > +else
> > + dep_jis = cc.find_library('JIS', required : get_option('gconv'), dirs : gconvsysdir)
> > + dep_jisx0213 = cc.find_library('JISX0213', required : get_option('gconv'), dirs : gconvsysdir)
> > +endif
> > +
> > +dep_jpeg = dependency('libjpeg', required : get_option('jpeg'))
> > +if dep_jpeg.found()
> > + dep_jpeg_priv_libs = '-ljpeg'
> > +endif
> > +
> > +systemd_systemdir = get_option('systemdsystemunitdir')
> > +if systemd_systemdir == ''
> > + dep_systemd = dependency('systemd', required : false)
> > + if dep_systemd.found()
> > + systemd_systemdir = dep_systemd.get_pkgconfig_variable('systemdsystemunitdir')
> > + endif
> > +endif
> > +if systemd_systemdir == ''
> > + systemd_systemdir = '/lib/systemd/system'
> > +endif
> > +# Since systemd v239, udevd is not allowed to execute BPF systems calls;
> > +# add an override to allow bpf(2) in that case. On earlier versions, the
> > +# override will restrict udevd to bpf syscall only and will stop the system
> > +# from booting. This is also true on current debian versions.
> > +have_udevdsyscallfilter = run_command(prog_grep, '-s', 'SystemCallFilter',
> > + systemd_systemdir / 'systemd-udevd.service').returncode() == 0
> > +
> > +dep_libudev = dependency('libudev', required : get_option('libdvbv5').enabled())
> > +udevdir = get_option('udevdir')
> > +if udevdir == ''
> > + dep_udev = dependency('udev', required : false)
> > + if dep_udev.found()
> > + udevdir = dep_udev.get_pkgconfig_variable('udevdir')
> > + endif
> > +endif
> > +if udevdir == ''
> > + udevdir = '/lib/udev'
> > +endif
> > +
> > +qt5_opengl_test = '''
> > +#define GL_GLEXT_PROTOTYPES
> > +#define QT_NO_OPENGL_ES_2
> > +
> > +#include <QGLWidget>
> > +#include <QGLShader>
> > +#include <QGLShaderProgram>
> > +#include <QGLFunctions>
> > +
> > +#ifndef GL_UNSIGNED_INT_8_8_8_8
> > +#error Missing OpenGL Extensions
> > +#endif
> > +'''
> > +have_qt5_opengl = cpp.compiles(qt5_opengl_test,
> > + dependencies : [dep_gl, dep_qt5],
> > + args : '-fPIC')
> > +
> > +c_arguments = []
> > +cpp_arguments = []
> > +
> > +c_arguments += common_arguments
> > +cpp_arguments += common_arguments
> > +
> > +add_project_arguments(c_arguments, language : 'c')
> > +add_project_arguments(cpp_arguments, language : 'cpp')
> > +add_project_link_arguments(cpp_arguments, language : 'cpp')
> > +
> > +version_h = vcs_tag(command : ['gen-version.sh', meson.build_root()],
> > + input : 'version.h.in',
> > + output : 'version.h')
> > +
> > +man_pages = []
> > +
> > +i18n_gettext_arguments = ['--directory=' + meson.source_root(), '--keyword=_', '--keyword=N_', '--keyword=P_:1,2']
> > +subdir('libdvbv5-po')
> > +subdir('v4l-utils-po')
> > +
> > +subdir('lib')
> > +
> > +if get_option('v4l-utils')
> > + subdir('utils')
> > + subdir('contrib')
> > +endif
> > +
> > +configure_file(output : 'config.h', configuration : conf)
> > +
> > +foreach m : man_pages
> > + configure_file(input : join_paths(m[0], '@0@.@1@.in'.format(m[1], m[2])),
> > + output : '@0@.@1@'.format(m[1], m[2]),
> > + install_dir : join_paths(get_option('mandir'), 'man@0@'.format(m[2])),
> > + configuration : conf)
> > +endforeach
> > diff --git a/meson_options.txt b/meson_options.txt
> > new file mode 100644
> > index 00000000..d1119990
> > --- /dev/null
> > +++ b/meson_options.txt
> > @@ -0,0 +1,42 @@
> > +# Features
> > +option('bpf', type : 'feature', value : 'auto',
> > + description : 'Enable IR BPF decoders')
> > +option('gconv', type : 'feature', value : 'auto',
> > + description : 'Enable compilation of gconv modules')
> > +option('jpeg', type : 'feature', value : 'auto')
> > +option('libdvbv5', type : 'feature', value : 'auto',
> > + description : 'Enable libdvbv5 compilation')
> > +option('qv4l2', type : 'feature', value : 'auto',
> > + description : 'Enable qv4l2 compilation')
> > +option('qvidcap', type : 'feature', value : 'auto',
> > + description : 'Enable qvidcap compilation')
> > +
> > +# Options
> > +option('v4l-plugins', type : 'boolean',
> > + description : 'V4L plugin support')
> > +option('v4l-utils', type : 'boolean',
> > + description : 'Enable v4l-utils compilation')
> > +option('v4l2-compliance-32', type : 'boolean', value : false,
> > + description : 'Enable v4l2-compliance-32 compilation (for debugging purposes only)')
> > +option('v4l2-compliance-libv4l', type : 'boolean',
> > + description : 'Enable use of libv4l in v4l2-compliance')
> > +option('v4l2-ctl-32', type : 'boolean', value : false,
> > + description : 'Enable v4l2-ctl-32 compilation (for debugging purposes only)')
> > +option('v4l2-ctl-libv4l', type : 'boolean',
> > + description : 'Enable use of libv4l in v4l2-ctl')
> > +option('v4l2-ctl-stream-to', type : 'boolean',
> > + description : 'Enable use of --stream-to in v4l2-ctl')
> > +
> > +# Directories
> > +option('gconvsysdir', type : 'string',
> > + description : 'Set system gconv directory (default is to autodetect)')
> > +option('libv4l1subdir', type : 'string', value : 'libv4l',
> > + description : 'Set libv4l1 library subdir')
> > +option('libv4l2subdir', type : 'string', value : 'libv4l',
> > + description : 'Set libv4l2 library subdir')
> > +option('libv4lconvertsubdir', type : 'string', value : 'libv4l',
> > + description : 'Set libv4lconvert library subdir')
> > +option('systemdsystemunitdir', type : 'string',
> > + description : 'Set systemd system unit directory')
> > +option('udevdir', type : 'string',
> > + description : 'Set udev directory')
> > diff --git a/utils/cec-compliance/meson.build b/utils/cec-compliance/meson.build
> > new file mode 100644
> > index 00000000..e4fc68de
> > --- /dev/null
> > +++ b/utils/cec-compliance/meson.build
> > @@ -0,0 +1,24 @@
> > +cec_compliance_sources = files(
> > + 'cec-compliance.cpp',
> > + 'cec-compliance.h',
> > + 'cec-test-adapter.cpp',
> > + 'cec-test-audio.cpp',
> > + 'cec-test-fuzzing.cpp',
> > + 'cec-test-power.cpp',
> > + 'cec-test.cpp',
> > +)
> > +
> > +cec_compliance_sources += version_h
> > +
> > +cec_compliance_deps = [
> > + dep_libcecutil,
> > + dep_librt,
> > +]
> > +
> > +cec_compliance = executable('cec-compliance',
> > + cec_compliance_sources,
> > + install : true,
> > + dependencies : cec_compliance_deps,
> > + include_directories : v4l2_utils_incdir)
> > +
> > +man_pages += [[ meson.current_source_dir(), 'cec-compliance', 1 ]]
> > diff --git a/utils/cec-ctl/meson.build b/utils/cec-ctl/meson.build
> > new file mode 100644
> > index 00000000..059ca206
> > --- /dev/null
> > +++ b/utils/cec-ctl/meson.build
> > @@ -0,0 +1,18 @@
> > +cec_ctl_sources = files(
> > + 'cec-ctl.cpp',
> > + 'cec-ctl.h',
> > + 'cec-pin.cpp',
> > +)
> > +
> > +cec_ctl_deps = [
> > + dep_libcecutil,
> > + dep_librt,
> > +]
> > +
> > +cec_ctl = executable('cec-ctl',
> > + cec_ctl_sources,
> > + install : true,
> > + dependencies : cec_ctl_deps,
> > + include_directories : v4l2_utils_incdir)
> > +
> > +man_pages += [[ meson.current_source_dir(), 'cec-ctl', 1 ]]
> > diff --git a/utils/cec-follower/meson.build b/utils/cec-follower/meson.build
> > new file mode 100644
> > index 00000000..0ecaf7a4
> > --- /dev/null
> > +++ b/utils/cec-follower/meson.build
> > @@ -0,0 +1,21 @@
> > +cec_follower_sources = files(
> > + 'cec-follower.cpp',
> > + 'cec-follower.h',
> > + 'cec-processing.cpp',
> > + 'cec-tuner.cpp',
> > +)
> > +
> > +cec_follower_sources += version_h
> > +
> > +cec_follower_deps = [
> > + dep_libcecutil,
> > + dep_librt,
> > +]
> > +
> > +cec_follower = executable('cec-follower',
> > + cec_follower_sources,
> > + install : true,
> > + dependencies : cec_follower_deps,
> > + include_directories : v4l2_utils_incdir)
> > +
> > +man_pages += [[ meson.current_source_dir(), 'cec-follower', 1 ]]
> > diff --git a/utils/cx18-ctl/meson.build b/utils/cx18-ctl/meson.build
> > new file mode 100644
> > index 00000000..161b91c9
> > --- /dev/null
> > +++ b/utils/cx18-ctl/meson.build
> > @@ -0,0 +1,8 @@
> > +cx18_ctl_sources = files(
> > + 'cx18-ctl.c',
> > +)
> > +
> > +cx18_ctl = executable('cx18-ctl',
> > + cx18_ctl_sources,
> > + install : true,
> > + include_directories : v4l2_utils_incdir)
> > diff --git a/utils/dvb/meson.build b/utils/dvb/meson.build
> > new file mode 100644
> > index 00000000..871f5a39
> > --- /dev/null
> > +++ b/utils/dvb/meson.build
> > @@ -0,0 +1,70 @@
> > +dvb_common_deps = [
> > + dep_argp,
> > + dep_libdvbv5,
> > + dep_libudev,
> > + dep_threads,
> > + dep_xmlrpc,
> > +]
> > +
> > +dvb_fe_tool_sources = files(
> > + 'dvb-fe-tool.c',
> > +)
> > +
> > +dvb_fe_tool = executable('dvb-fe-tool',
> > + dvb_fe_tool_sources,
> > + install : true,
> > + dependencies : dvb_common_deps,
> > + include_directories : v4l2_utils_incdir)
> > +
> > +man_pages += [[ meson.current_source_dir(), 'dvb-fe-tool', 1 ]]
> > +
> > +dvbv5_zap_sources = files(
> > + 'dvbv5-zap.c',
> > +)
> > +
> > +dvbv5_zap = executable('dvbv5-zap',
> > + dvbv5_zap_sources,
> > + install : true,
> > + dependencies : dvb_common_deps,
> > + include_directories : v4l2_utils_incdir)
> > +
> > +man_pages += [[ meson.current_source_dir(), 'dvbv5-zap', 1 ]]
> > +
> > +dvbv5_scan_sources = files(
> > + 'dvbv5-scan.c',
> > +)
> > +
> > +dvbv5_scan = executable('dvbv5-scan',
> > + dvbv5_scan_sources,
> > + install : true,
> > + dependencies : dvb_common_deps,
> > + include_directories : v4l2_utils_incdir)
> > +
> > +man_pages += [[ meson.current_source_dir(), 'dvbv5-scan', 1 ]]
> > +
> > +dvb_format_convert_sources = files(
> > + 'dvb-format-convert.c',
> > +)
> > +
> > +dvb_format_convert = executable('dvb-format-convert',
> > + dvb_format_convert_sources,
> > + install : true,
> > + dependencies : dvb_common_deps,
> > + include_directories : v4l2_utils_incdir)
> > +
> > +man_pages += [[ meson.current_source_dir(), 'dvb-format-convert', 1 ]]
> > +
> > +dvbv5_daemon_sources = files(
> > + 'dvbv5-daemon.c',
> > +)
> > +
> > +dvbv5_daemon_c_args = [
> > + '-DHAVE_DVBV5_REMOTE',
> > +]
> > +
> > +dvbv5_daemon = executable('dvbv5-daemon',
> > + dvbv5_daemon_sources,
> > + install : true,
> > + dependencies : dvb_common_deps,
> > + c_args : dvbv5_daemon_c_args,
> > + include_directories : v4l2_utils_incdir)
> > diff --git a/utils/gen_media_bus_format_codes.sh b/utils/gen_media_bus_format_codes.sh
> > new file mode 100755
> > index 00000000..4bdcc3b7
> > --- /dev/null
> > +++ b/utils/gen_media_bus_format_codes.sh
> > @@ -0,0 +1,7 @@
> > +#!/bin/bash
> > +
> > +src="$1"
> > +
> > +sed -e \
> > +'/#define MEDIA_BUS_FMT/ ! d; s/.*#define //; /FIXED/ d; s/\t.*//; s/.*/ &,/;' \
> > +${src}
> > diff --git a/utils/gen_media_bus_format_names.sh b/utils/gen_media_bus_format_names.sh
> > new file mode 100755
> > index 00000000..3fdc830d
> > --- /dev/null
> > +++ b/utils/gen_media_bus_format_names.sh
> > @@ -0,0 +1,7 @@
> > +#!/bin/bash
> > +
> > +src="$1"
> > +
> > +sed -e \
> > +'/#define MEDIA_BUS_FMT/ ! d; s/.*FMT_//; /FIXED/ d; s/\t.*//; s/.*/{ \"&\", MEDIA_BUS_FMT_& },/;' \
> > +${src}
> > diff --git a/utils/ir-ctl/meson.build b/utils/ir-ctl/meson.build
> > new file mode 100644
> > index 00000000..24d73a15
> > --- /dev/null
> > +++ b/utils/ir-ctl/meson.build
> > @@ -0,0 +1,23 @@
> > +ir_ctl_sources = files(
> > + 'bpf_encoder.c',
> > + 'bpf_encoder.h',
> > + 'ir-ctl.c',
> > + 'ir-encode.c',
> > + 'ir-encode.h',
> > + 'keymap.c',
> > + 'keymap.h',
> > + 'toml.c',
> > + 'toml.h',
> > +)
> > +
> > +ir_ctl_deps = [
> > + dep_argp,
> > +]
> > +
> > +ir_ctl = executable('ir-ctl',
> > + ir_ctl_sources,
> > + install : true,
> > + dependencies : ir_ctl_deps,
> > + include_directories : v4l2_utils_incdir)
> > +
> > +man_pages += [[ meson.current_source_dir(), 'ir-ctl', 1 ]]
> > diff --git a/utils/ivtv-ctl/meson.build b/utils/ivtv-ctl/meson.build
> > new file mode 100644
> > index 00000000..410a8439
> > --- /dev/null
> > +++ b/utils/ivtv-ctl/meson.build
> > @@ -0,0 +1,13 @@
> > +ivtv_ctl_sources = files(
> > + 'ivtv-ctl.c',
> > +)
> > +
> > +ivtv_ctl_deps = [
> > + dep_libm,
> > +]
> > +
> > +ivtv_ctl = executable('ivtv-ctl',
> > + ivtv_ctl_sources,
> > + install : true,
> > + dependencies : ivtv_ctl_deps,
> > + include_directories : v4l2_utils_incdir)
> > diff --git a/utils/keytable/bpf_protocols/clang_sys_includes.sh b/utils/keytable/bpf_protocols/clang_sys_includes.sh
> > new file mode 100755
> > index 00000000..9dc4af12
> > --- /dev/null
> > +++ b/utils/keytable/bpf_protocols/clang_sys_includes.sh
> > @@ -0,0 +1,9 @@
> > +#!/bin/sh
> > +# Get Clang's default includes on this system, as opposed to those seen by
> > +# '-target bpf'. This fixes "missing" files on some architectures/distros,
> > +# such as asm/byteorder.h, asm/socket.h, asm/sockios.h, sys/cdefs.h etc.
> > +#
> > +# Use '-idirafter': Don't interfere with include mechanics except where the
> > +# build would have failed anyways.
> > +$CLANG -v -E - </dev/null 2>&1 \
> > + | sed -n '/<...> search starts here:/,/End of search list./{ s| \(/.*\)|-idirafter \1|p }'
> > diff --git a/utils/keytable/bpf_protocols/meson.build b/utils/keytable/bpf_protocols/meson.build
> > new file mode 100644
> > index 00000000..2f1ed072
> > --- /dev/null
> > +++ b/utils/keytable/bpf_protocols/meson.build
> > @@ -0,0 +1,31 @@
> > +bpf_protocols_files = [
> > + 'grundig',
> > + 'imon_rsc',
> > + 'manchester',
> > + 'pulse_distance',
> > + 'pulse_length',
> > + 'raw',
> > + 'rc_mm',
> > + 'samsung36',
> > + 'xbox-dvd',
> > +]
> > +
> > +clang_sys_includes = run_command('clang_sys_includes.sh',
> > + check : true,
> > + env : ['CLANG=' + prog_clang.path()])
> > +
> > +foreach file : bpf_protocols_files
> > + output = file + '.o'
> > + input = file + '.c'
> > + custom_target(output,
> > + output : output,
> > + input : input,
> > + command : [
> > + prog_clang.path(),
> > + clang_sys_includes.stdout().strip(),
> > + '-D__linux__', '-target', 'bpf', '-O2',
> > + '-c', '@INPUT@', '-o', '@OUTPUT@',
> > + ],
> > + install : true,
> > + install_dir : udevdir / 'rc_keymaps' / 'protocols')
> > +endforeach
> > diff --git a/utils/keytable/meson.build b/utils/keytable/meson.build
> > new file mode 100644
> > index 00000000..4ba652ef
> > --- /dev/null
> > +++ b/utils/keytable/meson.build
> > @@ -0,0 +1,74 @@
> > +ir_keytable_sources = files(
> > + 'ir-encode.c',
> > + 'ir-encode.h',
> > + 'keymap.c',
> > + 'keymap.h',
> > + 'keytable.c',
> > + 'parse.h',
> > + 'toml.c',
> > + 'toml.h',
> > +)
> > +
> > +ir_keytable_deps = [
> > + dep_argp,
> > +]
> > +
> > +if not get_option('bpf').disabled() and prog_clang.found() and dep_libelf.found()
> > + ir_keytable_sources += files(
> > + 'bpf.c',
> > + 'bpf.h',
> > + 'bpf_load.c',
> > + 'bpf_load.h',
> > + )
> > + ir_keytable_deps += [
> > + dep_libelf,
> > + ]
> > + subdir('bpf_protocols')
> > +endif
> > +
> > +ir_keytable_system_dir = udevdir
> > +ir_keytable_user_dir = get_option('sysconfdir') / 'rc_keymaps'
> > +
> > +ir_keytable_c_args = [
> > + '-DIR_KEYTABLE_SYSTEM_DIR="@0@"'.format(ir_keytable_system_dir),
> > + '-DIR_KEYTABLE_USER_DIR="@0@"'.format(ir_keytable_user_dir),
> > +]
> > +
> > +ir_keytable_incdir = [
> > + utils_common_incdir,
> > + v4l2_utils_incdir,
> > +]
> > +
> > +ir_keytable = executable('ir-keytable',
> > + sources : ir_keytable_sources,
> > + install : true,
> > + dependencies : ir_keytable_deps,
> > + c_args : ir_keytable_c_args,
> > + include_directories : ir_keytable_incdir)
> > +
> > +man_pages += [[ meson.current_source_dir(), 'ir-keytable', 1 ]]
> > +man_pages += [[ meson.current_source_dir(), 'rc_keymap', 5 ]]
> > +
> > +ir_keytable_sysconf_files = files(
> > + 'rc_maps.cfg',
> > +)
> > +install_data(ir_keytable_sysconf_files,
> > + install_dir : get_option('sysconfdir'))
> > +
> > +subdir('rc_keymaps')
> > +install_data(ir_keytable_rc_keymaps,
> > + install_dir : udevdir / 'rc_keymaps')
> > +
> > +ir_keytable_udev_rules = files(
> > + '70-infrared.rules',
> > +)
> > +install_data(ir_keytable_udev_rules,
> > + install_dir : udevdir / 'rules.d')
> > +
> > +if have_udevdsyscallfilter
> > + ir_keytable_systemd_files = files(
> > + '50-rc_keymap.conf',
> > + )
> > + install_data(ir_keytable_systemd_files,
> > + install_dir : systemd_systemdir / 'systemd-udevd.service.d')
> > +endif
> > diff --git a/utils/keytable/rc_keymaps/meson.build b/utils/keytable/rc_keymaps/meson.build
> > new file mode 100644
> > index 00000000..581bd895
> > --- /dev/null
> > +++ b/utils/keytable/rc_keymaps/meson.build
> > @@ -0,0 +1,147 @@
> > +ir_keytable_rc_keymaps = files(
> > + 'adstech_dvb_t_pci.toml',
> > + 'af9005.toml',
> > + 'alink_dtu_m.toml',
> > + 'allwinner_ba10_tv_box.toml',
> > + 'allwinner_i12_a20_tv_box.toml',
> > + 'anysee.toml',
> > + 'apac_viewcomp.toml',
> > + 'astrometa_t2hybrid.toml',
> > + 'asus_pc39.toml',
> > + 'asus_ps3_100.toml',
> > + 'ati_tv_wonder_hd_600.toml',
> > + 'ati_x10.toml',
> > + 'avermedia.toml',
> > + 'avermedia_a16d.toml',
> > + 'avermedia_cardbus.toml',
> > + 'avermedia_dvbt.toml',
> > + 'avermedia_m135a.toml',
> > + 'avermedia_m733a_rm_k6.toml',
> > + 'avermedia_rm_ks.toml',
> > + 'avertv_303.toml',
> > + 'az6027.toml',
> > + 'azurewave_ad_tu700.toml',
> > + 'beelink_gs1.toml',
> > + 'behold.toml',
> > + 'behold_columbus.toml',
> > + 'budget_ci_old.toml',
> > + 'cec.toml',
> > + 'cinergy.toml',
> > + 'cinergy_1400.toml',
> > + 'cinergyt2.toml',
> > + 'd680_dmb.toml',
> > + 'delock_61959.toml',
> > + 'dib0700_nec.toml',
> > + 'dib0700_rc5.toml',
> > + 'dibusb.toml',
> > + 'digitalnow_tinytwin.toml',
> > + 'digittrade.toml',
> > + 'digitv.toml',
> > + 'dish_network.toml',
> > + 'dm1105_nec.toml',
> > + 'dntv_live_dvb_t.toml',
> > + 'dntv_live_dvbt_pro.toml',
> > + 'dtt200u.toml',
> > + 'dvbsky.toml',
> > + 'dvico_mce.toml',
> > + 'dvico_portable.toml',
> > + 'em_terratec.toml',
> > + 'encore_enltv.toml',
> > + 'encore_enltv2.toml',
> > + 'encore_enltv_fm53.toml',
> > + 'evga_indtube.toml',
> > + 'eztv.toml',
> > + 'flydvb.toml',
> > + 'flyvideo.toml',
> > + 'fusionhdtv_mce.toml',
> > + 'gadmei_rm008z.toml',
> > + 'geekbox.toml',
> > + 'genius_tvgo_a11mce.toml',
> > + 'gotview7135.toml',
> > + 'haupp.toml',
> > + 'hauppauge.toml',
> > + 'hisi_poplar.toml',
> > + 'hisi_tv_demo.toml',
> > + 'imon_mce.toml',
> > + 'imon_pad.toml',
> > + 'imon_rsc.toml',
> > + 'iodata_bctv7e.toml',
> > + 'it913x_v1.toml',
> > + 'it913x_v2.toml',
> > + 'kaiomy.toml',
> > + 'khadas.toml',
> > + 'kii_pro.toml',
> > + 'kworld_315u.toml',
> > + 'kworld_pc150u.toml',
> > + 'kworld_plus_tv_analog.toml',
> > + 'leadtek_y04g0051.toml',
> > + 'lme2510.toml',
> > + 'manli.toml',
> > + 'mce_keyboard.toml',
> > + 'medion_x10.toml',
> > + 'medion_x10_digitainer.toml',
> > + 'medion_x10_or2x.toml',
> > + 'megasky.toml',
> > + 'msi_digivox_ii.toml',
> > + 'msi_digivox_iii.toml',
> > + 'msi_tvanywhere.toml',
> > + 'msi_tvanywhere_plus.toml',
> > + 'nebula.toml',
> > + 'nec_terratec_cinergy_xs.toml',
> > + 'norwood.toml',
> > + 'npgtech.toml',
> > + 'odroid.toml',
> > + 'opera1.toml',
> > + 'pctv_sedna.toml',
> > + 'pinnacle310e.toml',
> > + 'pinnacle_color.toml',
> > + 'pinnacle_grey.toml',
> > + 'pinnacle_pctv_hd.toml',
> > + 'pixelview.toml',
> > + 'pixelview_002t.toml',
> > + 'pixelview_mk12.toml',
> > + 'pixelview_new.toml',
> > + 'powercolor_real_angel.toml',
> > + 'proteus_2309.toml',
> > + 'purpletv.toml',
> > + 'pv951.toml',
> > + 'rc6_mce.toml',
> > + 'real_audio_220_32_keys.toml',
> > + 'reddo.toml',
> > + 'snapstream_firefly.toml',
> > + 'streamzap.toml',
> > + 'su3000.toml',
> > + 'tango.toml',
> > + 'tanix_tx3mini.toml',
> > + 'tanix_tx5max.toml',
> > + 'tbs_nec.toml',
> > + 'technisat_ts35.toml',
> > + 'technisat_usb2.toml',
> > + 'terratec_cinergy_c_pci.toml',
> > + 'terratec_cinergy_s2_hd.toml',
> > + 'terratec_cinergy_xs.toml',
> > + 'terratec_slim.toml',
> > + 'terratec_slim_2.toml',
> > + 'tevii_nec.toml',
> > + 'tivo.toml',
> > + 'total_media_in_hand.toml',
> > + 'total_media_in_hand_02.toml',
> > + 'trekstor.toml',
> > + 'tt_1500.toml',
> > + 'tvwalkertwin.toml',
> > + 'twinhan_dtv_cab_ci.toml',
> > + 'twinhan_vp1027_dvbs.toml',
> > + 'vega_s9x.toml',
> > + 'videomate_k100.toml',
> > + 'videomate_s350.toml',
> > + 'videomate_tv_pvr.toml',
> > + 'vp702x.toml',
> > + 'wetek_hub.toml',
> > + 'wetek_play2.toml',
> > + 'winfast.toml',
> > + 'winfast_usbii_deluxe.toml',
> > + 'wobo_i5.toml',
> > + 'x96max.toml',
> > + 'xbox_dvd.toml',
> > + 'zx_irdec.toml',
> > +)
> > diff --git a/utils/libcecutil/meson.build b/utils/libcecutil/meson.build
> > new file mode 100644
> > index 00000000..ed3aa88c
> > --- /dev/null
> > +++ b/utils/libcecutil/meson.build
> > @@ -0,0 +1,45 @@
> > +libcecutil_sources = files(
> > + 'cec-htng-funcs.h',
> > + 'cec-htng.h',
> > + 'cec-info.cpp',
> > + 'cec-info.h',
> > + 'cec-log.cpp',
> > + 'cec-log.h',
> > + 'cec-parse.cpp',
> > + 'cec-parse.h',
> > +)
> > +
> > +libcecutil_deps = [
> > + dep_libdl,
> > + dep_libv4lconvert,
> > + dep_threads,
> > +]
> > +
> > +libcecutil_incdir = [
> > + utils_common_incdir,
> > + v4l2_utils_incdir,
> > +]
> > +
> > +cec_gen_sources = files(
> > + '../../include/linux/cec.h',
> > + 'cec-htng.h',
> > + '../../include/linux/cec-funcs.h',
> > + 'cec-htng-funcs.h',
> > +)
> > +
> > +configure_file(
> > + input : 'cec-gen.pl',
> > + output : 'cec-gen-dummy.stamp',
> > + command : [prog_perl, '@INPUT@', cec_gen_sources, 'utils/libcecutil'],
> > +)
> > +
> > +libcecutil = static_library('cecutil',
> > + libcecutil_sources,
> > + install : false,
> > + dependencies : libcecutil_deps,
> > + include_directories : libcecutil_incdir)
> > +
> > +dep_libcecutil = declare_dependency(
> > + link_with : libcecutil,
> > + include_directories : '.',
> > +)
> > diff --git a/utils/libmedia_dev/meson.build b/utils/libmedia_dev/meson.build
> > new file mode 100644
> > index 00000000..f97238e6
> > --- /dev/null
> > +++ b/utils/libmedia_dev/meson.build
> > @@ -0,0 +1,14 @@
> > +libmedia_dev_sources = files(
> > + 'get_media_devices.c',
> > + 'get_media_devices.h',
> > +)
> > +
> > +libmedia_dev = static_library('media_dev',
> > + libmedia_dev_sources,
> > + install : false,
> > + include_directories : v4l2_utils_incdir)
> > +
> > +dep_libmedia_dev = declare_dependency(
> > + link_with : libmedia_dev,
> > + include_directories : '.',
> > +)
> > diff --git a/utils/libv4l2util/meson.build b/utils/libv4l2util/meson.build
> > new file mode 100644
> > index 00000000..9d1c6e12
> > --- /dev/null
> > +++ b/utils/libv4l2util/meson.build
> > @@ -0,0 +1,16 @@
> > +libv4l2util_sources = files(
> > + 'frequencies.c',
> > + 'libv4l2util.h',
> > + 'v4l2_driver.c',
> > + 'v4l2_driver.h',
> > +)
> > +
> > +libv4l2util = static_library('v4l2util',
> > + libv4l2util_sources,
> > + install : false,
> > + include_directories : v4l2_utils_incdir)
> > +
> > +dep_libv4l2util = declare_dependency(
> > + link_with : libv4l2util,
> > + include_directories : '.',
> > +)
> > diff --git a/utils/media-ctl/meson.build b/utils/media-ctl/meson.build
> > new file mode 100644
> > index 00000000..3a7b0c9a
> > --- /dev/null
> > +++ b/utils/media-ctl/meson.build
> > @@ -0,0 +1,43 @@
> > +libmediactl_sources = files(
> > + 'libmediactl.c',
> > + 'mediactl-priv.h',
> > +)
> > +
> > +libmediactl_deps = [
> > + dep_libudev,
> > +]
> > +
> > +libmediactl = static_library('mediactl',
> > + libmediactl_sources,
> > + dependencies : libmediactl_deps,
> > + include_directories : v4l2_utils_incdir)
> > +
> > +dep_libmediactl = declare_dependency(link_with : libmediactl)
> > +
> > +libv4l2subdev_sources = files('libv4l2subdev.c')
> > +libv4l2subdev_sources += media_bus_format_names_h
> > +libv4l2subdev_sources += media_bus_format_codes_h
> > +
> > +libv4l2subdev = static_library('v4l2subdev',
> > + libv4l2subdev_sources,
> > + include_directories : v4l2_utils_incdir)
> > +
> > +dep_libv4l2subdev = declare_dependency(link_with : libv4l2subdev)
> > +
> > +media_ctl_sources = files(
> > + 'media-ctl.c',
> > + 'options.c',
> > + 'options.h',
> > + 'tools.h',
> > +)
> > +
> > +media_ctl_deps = [
> > + dep_libmediactl,
> > + dep_libv4l2subdev,
> > +]
> > +
> > +media_ctl = executable('media-ctl',
> > + media_ctl_sources,
> > + dependencies : media_ctl_deps,
> > + install : true,
> > + include_directories : v4l2_utils_incdir)
> > diff --git a/utils/meson.build b/utils/meson.build
> > new file mode 100644
> > index 00000000..7b7ac8e0
> > --- /dev/null
> > +++ b/utils/meson.build
> > @@ -0,0 +1,46 @@
> > +utils_common_incdir = include_directories('common')
> > +
> > +# Generate targets for media-bus-format-{names,codes}.h
> > +foreach x: [ 'names', 'codes' ]
> > + output_file = 'media-bus-format-@0@.h'.format(x)
> > + input_file = 'gen_media_bus_format_@0@.sh'.format(x)
> > + target = custom_target(
> > + output_file,
> > + output : output_file,
> > + input : input_file,
> > + command : [
> > + prog_bash, '@INPUT@', files('..' / 'include' / 'linux' / 'media-bus-format.h'),
> > + ],
> > + capture : true,
> > + )
> > + set_variable(output_file.underscorify(), target)
> > +endforeach
> > +
> > +# Libraries
> > +subdir('libcecutil')
> > +subdir('libmedia_dev')
> > +subdir('libv4l2util')
> > +
> > +# Utils
> > +subdir('cec-ctl')
> > +subdir('cec-follower')
> > +subdir('cx18-ctl')
> > +subdir('dvb', if_found : dep_libdvbv5)
> > +subdir('ir-ctl')
> > +subdir('ivtv-ctl')
> > +subdir('keytable')
> > +subdir('media-ctl')
> > +subdir('qv4l2')
> > +if have_qt5_opengl
> > + subdir('qvidcap')
> > +endif
> > +subdir('rds-ctl')
> > +subdir('v4l2-ctl')
> > +subdir('v4l2-dbg')
> > +subdir('v4l2-sysfs-path')
> > +
> > +# Compliance tools
> > +subdir('cec-compliance')
> > +if have_fork
> > + subdir('v4l2-compliance')
> > +endif
> > diff --git a/utils/qv4l2/meson.build b/utils/qv4l2/meson.build
> > new file mode 100644
> > index 00000000..2b6f7ef2
> > --- /dev/null
> > +++ b/utils/qv4l2/meson.build
> > @@ -0,0 +1,80 @@
> > +qv4l2_option = get_option('qv4l2')
> > +if qv4l2_option.disabled() or not dep_qt5.found() or not dep_gl.found()
> > + subdir_done()
> > +endif
> > +
> > +qv4l2_sources = files(
> > + 'alsa_stream.c',
> > + 'alsa_stream.h',
> > + 'capture-win-gl.cpp',
> > + 'capture-win-gl.h',
> > + 'capture-win-qt.cpp',
> > + 'capture-win-qt.h',
> > + 'capture-win.cpp',
> > + 'capture-win.h',
> > + 'ctrl-tab.cpp',
> > + 'general-tab.cpp',
> > + 'general-tab.h',
> > + 'qv4l2.cpp',
> > + 'qv4l2.h',
> > + 'raw2sliced.cpp',
> > + 'raw2sliced.h',
> > + 'tpg-tab.cpp',
> > + 'v4l2-tpg-colors.c',
> > + 'v4l2-tpg-core.c',
> > + 'vbi-tab.cpp',
> > + 'vbi-tab.h',
> > +)
> > +
> > +qv4l2_deps = [
> > + dep_alsa,
> > + dep_gl,
> > + dep_libmedia_dev,
> > + dep_libv4l2,
> > + dep_libv4l2util,
> > + dep_libv4lconvert,
> > + dep_qt5,
> > + dep_threads,
> > +]
> > +
> > +qv4l2_incdir = [
> > + utils_common_incdir,
> > + v4l2_utils_incdir,
> > +]
> > +
> > +qt5_files = qt5.preprocess(
> > + moc_headers : ['qv4l2.h', 'general-tab.h', 'vbi-tab.h', 'capture-win.h'],
> > + qresources : 'qv4l2.qrc',
> > +)
> > +qv4l2_sources += qt5_files
> > +
> > +qv4l2 = executable('qv4l2',
> > + sources : qv4l2_sources,
> > + install : true,
> > + dependencies : qv4l2_deps,
> > + include_directories : qv4l2_incdir)
> > +
> > +man_pages += [[ meson.current_source_dir(), 'qv4l2', 1 ]]
> > +
> > +qv4l2_applications_files = files(
> > + 'qv4l2.desktop',
> > +)
> > +
> > +install_data('qv4l2.desktop',
> > + install_dir : get_option('datadir') / 'applications')
> > +
> > +qv4l2_icons_dir = get_option('datadir') / 'icons' / 'hicolor'
> > +
> > +qv4l2_icons_files = [
> > + ['qv4l2_16x16.png', '16x16', 'qv4l2.png'],
> > + ['qv4l2_24x24.png', '24x24', 'qv4l2.png'],
> > + ['qv4l2_32x32.png', '32x32', 'qv4l2.png'],
> > + ['qv4l2_64x64.png', '64x64', 'qv4l2.png'],
> > + ['qv4l2.png', 'scalable', 'qv4l2.svg'],
> > +]
> > +
> > +foreach f : qv4l2_icons_files
> > + install_data(f[0],
> > + rename: f[1] / 'apps' / f[2],
> > + install_dir : qv4l2_icons_dir)
> > +endforeach
> > diff --git a/utils/qvidcap/meson.build b/utils/qvidcap/meson.build
> > new file mode 100644
> > index 00000000..a770e366
> > --- /dev/null
> > +++ b/utils/qvidcap/meson.build
> > @@ -0,0 +1,82 @@
> > +qvidcap_option = get_option('qvidcap')
> > +if qvidcap_option.disabled() or not dep_qt5.found() or not dep_gl.found()
> > + subdir_done()
> > +endif
> > +
> > +qvidcap_sources = files(
> > + 'capture.cpp',
> > + 'capture.h',
> > + 'codec-fwht.c',
> > + 'codec-v4l2-fwht.c',
> > + 'paint.cpp',
> > + 'qvidcap.cpp',
> > + 'qvidcap.h',
> > + 'v4l-stream.c',
> > + 'v4l2-info.cpp',
> > + 'v4l2-tpg-colors.c',
> > + 'v4l2-tpg-core.c',
> > +)
> > +
> > +qvidcap_deps = [
> > + dep_alsa,
> > + dep_gl,
> > + dep_libmedia_dev,
> > + dep_libv4l2,
> > + dep_libv4l2util,
> > + dep_libv4lconvert,
> > + dep_qt5,
> > + dep_threads,
> > +]
> > +
> > +qvidcap_incdir = [
> > + utils_common_incdir,
> > + v4l2_utils_incdir,
> > +]
> > +
> > +qt5_files = qt5.preprocess(
> > + moc_headers : 'capture.h',
> > + qresources : 'qvidcap.qrc',
> > +)
> > +qvidcap_sources += qt5_files
> > +
> > +v4l2_convert_sources = files(
> > + 'v4l2-convert.glsl',
> > +)
> > +
> > +configure_file(
> > + input : 'v4l2-convert.pl',
> > + output : 'v4l2-convert.h',
> > + capture : true,
> > + command : [prog_perl, '@INPUT@', v4l2_convert_sources],
> > +)
> > +
> > +qvidcap = executable('qvidcap',
> > + sources : qvidcap_sources,
> > + install : true,
> > + dependencies : qvidcap_deps,
> > + include_directories : qvidcap_incdir)
> > +
> > +man_pages += [[ meson.current_source_dir(), 'qvidcap', 1 ]]
> > +
> > +qvidcap_applications_files = files(
> > + 'qvidcap.desktop',
> > +)
> > +
> > +install_data('qvidcap.desktop',
> > + install_dir : get_option('datadir') / 'applications')
> > +
> > +qvidcap_icons_dir = get_option('datadir') / 'icons' / 'hicolor'
> > +
> > +qvidcap_icons_files = [
> > + ['qvidcap_16x16.png', '16x16', 'qvidcap.png'],
> > + ['qvidcap_24x24.png', '24x24', 'qvidcap.png'],
> > + ['qvidcap_32x32.png', '32x32', 'qvidcap.png'],
> > + ['qvidcap_64x64.png', '64x64', 'qvidcap.png'],
> > + ['qvidcap.png', 'scalable', 'qvidcap.svg'],
> > +]
> > +
> > +foreach f : qvidcap_icons_files
> > + install_data(f[0],
> > + rename: f[1] / 'apps' / f[2],
> > + install_dir : qvidcap_icons_dir)
> > +endforeach
> > diff --git a/utils/rds-ctl/meson.build b/utils/rds-ctl/meson.build
> > new file mode 100644
> > index 00000000..be797035
> > --- /dev/null
> > +++ b/utils/rds-ctl/meson.build
> > @@ -0,0 +1,13 @@
> > +rds_ctl_sources = files(
> > + 'rds-ctl.cpp',
> > +)
> > +
> > +rds_ctl_deps = [
> > + dep_libv4l2rds,
> > +]
> > +
> > +rds_ctl = executable('rds-ctl',
> > + rds_ctl_sources,
> > + install : true,
> > + dependencies : rds_ctl_deps,
> > + include_directories : v4l2_utils_incdir)
> > diff --git a/utils/v4l2-compliance/meson.build b/utils/v4l2-compliance/meson.build
> > new file mode 100644
> > index 00000000..5b03b570
> > --- /dev/null
> > +++ b/utils/v4l2-compliance/meson.build
> > @@ -0,0 +1,60 @@
> > +v4l2_compliance_sources = files(
> > + 'media-info.cpp',
> > + 'v4l2-compliance.cpp',
> > + 'v4l2-compliance.h',
> > + 'v4l2-info.cpp',
> > + 'v4l2-test-buffers.cpp',
> > + 'v4l2-test-codecs.cpp',
> > + 'v4l2-test-colors.cpp',
> > + 'v4l2-test-controls.cpp',
> > + 'v4l2-test-debug.cpp',
> > + 'v4l2-test-formats.cpp',
> > + 'v4l2-test-input-output.cpp',
> > + 'v4l2-test-io-config.cpp',
> > + 'v4l2-test-media.cpp',
> > + 'v4l2-test-subdevs.cpp',
> > +)
> > +
> > +v4l2_compliance_sources += version_h
> > +
> > +v4l2_compliance_deps = [
> > + dep_librt,
> > + dep_threads,
> > +]
> > +
> > +v4l2_compliance_cpp_args = []
> > +
> > +if get_option('v4l2-compliance-libv4l')
> > + v4l2_compliance_deps += [
> > + dep_libv4lconvert,
> > + dep_libv4l2,
> > + ]
> > +else
> > + v4l2_compliance_cpp_args += '-DNO_LIBV4L2'
> > +endif
> > +
> > +v4l2_compliance_incdir = [
> > + utils_common_incdir,
> > + v4l2_utils_incdir,
> > +]
> > +
> > +v4l2_compliance = executable('v4l2-compliance',
> > + v4l2_compliance_sources,
> > + install : true,
> > + dependencies : v4l2_compliance_deps,
> > + cpp_args : v4l2_compliance_cpp_args,
> > + include_directories : v4l2_compliance_incdir)
> > +
> > +man_pages += [[ meson.current_source_dir(), 'v4l2-compliance', 1 ]]
> > +
> > +v4l2_compliance_32_cpp_args = ['-m32', '-DNO_LIBV4L2']
> > +v4l2_compliance_32_link_args = ['-m32', '-static']
> > +
> > +if get_option('v4l2-compliance-32') and have_m32
> > + v4l2_compliance_32 = executable('v4l2-compliance-32',
> > + v4l2_compliance_sources,
> > + install : true,
> > + cpp_args : v4l2_compliance_32_cpp_args,
> > + link_args : v4l2_compliance_32_link_args,
> > + include_directories : v4l2_compliance_incdir)
> > +endif
> > diff --git a/utils/v4l2-ctl/meson.build b/utils/v4l2-ctl/meson.build
> > new file mode 100644
> > index 00000000..3e366c6c
> > --- /dev/null
> > +++ b/utils/v4l2-ctl/meson.build
> > @@ -0,0 +1,75 @@
> > +v4l2_ctl_sources = files(
> > + 'codec-fwht.c',
> > + 'codec-v4l2-fwht.c',
> > + 'media-info.cpp',
> > + 'v4l-stream.c',
> > + 'v4l2-ctl-common.cpp',
> > + 'v4l2-ctl-edid.cpp',
> > + 'v4l2-ctl-io.cpp',
> > + 'v4l2-ctl-meta.cpp',
> > + 'v4l2-ctl-misc.cpp',
> > + 'v4l2-ctl-modes.cpp',
> > + 'v4l2-ctl-overlay.cpp',
> > + 'v4l2-ctl-sdr.cpp',
> > + 'v4l2-ctl-selection.cpp',
> > + 'v4l2-ctl-stds.cpp',
> > + 'v4l2-ctl-streaming.cpp',
> > + 'v4l2-ctl-subdev.cpp',
> > + 'v4l2-ctl-tuner.cpp',
> > + 'v4l2-ctl-vbi.cpp',
> > + 'v4l2-ctl-vidcap.cpp',
> > + 'v4l2-ctl-vidout.cpp',
> > + 'v4l2-ctl.cpp',
> > + 'v4l2-ctl.h',
> > + 'v4l2-info.cpp',
> > + 'v4l2-tpg-colors.c',
> > + 'v4l2-tpg-core.c',
> > +)
> > +v4l2_ctl_sources += media_bus_format_names_h
> > +
> > +v4l2_ctl_deps = [
> > + dep_librt,
> > + dep_threads,
> > +]
> > +
> > +v4l2_ctl_cpp_args = []
> > +
> > +if get_option('v4l2-ctl-libv4l')
> > + v4l2_ctl_deps += [
> > + dep_libv4l2,
> > + dep_libv4lconvert,
> > + ]
> > +else
> > + v4l2_ctl_cpp_args += '-DNO_LIBV4L2'
> > +endif
> > +
> > +if not get_option('v4l2-ctl-stream-to')
> > + v4l2_ctl_cpp_args += '-DNO_STREAM_TO'
> > +endif
> > +
> > +v4l2_ctl_incdir = [
> > + utils_common_incdir,
> > + v4l2_utils_incdir,
> > +]
> > +
> > +v4l2_ctl = executable('v4l2-ctl',
> > + v4l2_ctl_sources,
> > + install : true,
> > + dependencies : v4l2_ctl_deps,
> > + cpp_args : v4l2_ctl_cpp_args,
> > + include_directories : v4l2_ctl_incdir)
> > +
> > +man_pages += [[ meson.current_source_dir(), 'v4l2-ctl', 1 ]]
> > +
> > +v4l2_ctl_32_c_cpp_args = ['-m32', '-DNO_LIBV4L2']
> > +v4l2_ctl_32_link_args = ['-m32', '-static']
> > +
> > +if get_option('v4l2-ctl-32') and have_m32
> > + v4l2_ctl_32 = executable('v4l2-ctl-32',
> > + v4l2_ctl_sources,
> > + install : true,
> > + c_args : v4l2_ctl_32_c_cpp_args,
> > + cpp_args : v4l2_ctl_32_c_cpp_args,
> > + link_args : v4l2_ctl_32_link_args,
> > + include_directories : v4l2_ctl_incdir)
> > +endif
> > diff --git a/utils/v4l2-dbg/meson.build b/utils/v4l2-dbg/meson.build
> > new file mode 100644
> > index 00000000..5c721592
> > --- /dev/null
> > +++ b/utils/v4l2-dbg/meson.build
> > @@ -0,0 +1,16 @@
> > +v4l2_dbg_sources = files(
> > + 'v4l2-dbg-ac97.h',
> > + 'v4l2-dbg-bttv.h',
> > + 'v4l2-dbg-em28xx.h',
> > + 'v4l2-dbg-micron.h',
> > + 'v4l2-dbg-saa7134.h',
> > + 'v4l2-dbg-tvp5150.h',
> > + 'v4l2-dbg.cpp',
> > + 'v4l2-dbg.h',
> > +)
> > +
> > +v4l2_dbg = executable('v4l2-dbg',
> > + v4l2_dbg_sources,
> > + install : true,
> > + install_dir : 'sbin',
> > + include_directories : v4l2_utils_incdir)
> > diff --git a/utils/v4l2-sysfs-path/meson.build b/utils/v4l2-sysfs-path/meson.build
> > new file mode 100644
> > index 00000000..5a74af12
> > --- /dev/null
> > +++ b/utils/v4l2-sysfs-path/meson.build
> > @@ -0,0 +1,14 @@
> > +v4l2_sysfs_path_sources = files(
> > + 'v4l2-sysfs-path.c',
> > +)
> > +
> > +v4l2_sysfs_path_deps = [
> > + dep_argp,
> > + dep_libmedia_dev,
> > +]
> > +
> > +v4l2_sysfs_path = executable('v4l2-sysfs-path',
> > + v4l2_sysfs_path_sources,
> > + install : true,
> > + dependencies : v4l2_sysfs_path_deps,
> > + include_directories : v4l2_utils_incdir)
> > diff --git a/v4l-utils-po/meson.build b/v4l-utils-po/meson.build
> > new file mode 100644
> > index 00000000..4fad42eb
> > --- /dev/null
> > +++ b/v4l-utils-po/meson.build
> > @@ -0,0 +1,3 @@
> > +i18n.gettext('v4l-utils',
> > + args : i18n_gettext_arguments,
> > +)
> > diff --git a/version.h.in b/version.h.in
> > new file mode 100644
> > index 00000000..2506ed9b
> > --- /dev/null
> > +++ b/version.h.in
> > @@ -0,0 +1 @@
> > +#define SHA @VCS_TAG@
> >
>
> --
> Regards
> --
> Kieran
--
Regards,
Laurent Pinchart
next prev parent reply other threads:[~2020-06-18 14:07 UTC|newest]
Thread overview: 24+ messages / expand[flat|nested] mbox.gz Atom feed top
2020-06-18 13:33 [PATCH v1 0/1] Add support for meson building Ariel D'Alessandro
2020-06-18 13:33 ` [PATCH v1 1/1] " Ariel D'Alessandro
2020-06-18 13:57 ` Kieran Bingham
2020-06-18 14:06 ` Laurent Pinchart [this message]
2020-06-18 14:11 ` Kieran Bingham
2020-06-19 14:12 ` Ezequiel Garcia
2020-06-19 14:42 ` Laurent Pinchart
2020-06-19 18:40 ` Xavier Claessens
2020-06-20 4:45 ` VDRU VDRU
2020-06-22 18:07 ` Gregor Jasny
2020-06-22 19:09 ` Gregor Jasny
2020-06-23 17:26 ` Ariel D'Alessandro
2020-06-24 19:46 ` Gregor Jasny
2020-06-25 18:32 ` Ariel D'Alessandro
2020-06-29 18:44 ` Gregor Jasny
2020-07-03 2:15 ` Ariel D'Alessandro
2020-06-25 18:52 ` Ariel D'Alessandro
2020-06-29 18:56 ` Gregor Jasny
2020-07-08 5:48 ` Ariel D'Alessandro
2020-07-16 19:48 ` Gregor Jasny
2020-06-19 19:04 ` Xavier Claessens
2020-06-22 19:19 ` Ariel D'Alessandro
2020-06-19 12:10 ` [PATCH v1 0/1] " Sean Young
2020-06-19 14:09 ` Ezequiel Garcia
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20200618140626.GF5959@pendragon.ideasonboard.com \
--to=laurent.pinchart@ideasonboard.com \
--cc=ariel@vanguardiasur.com.ar \
--cc=ezequiel@collabora.com \
--cc=gjasny@googlemail.com \
--cc=hverkuil@xs4all.nl \
--cc=kieran.bingham@ideasonboard.com \
--cc=linux-media@vger.kernel.org \
--cc=nicolas@ndufresne.ca \
--cc=p.zabel@pengutronix.de \
--cc=sean@mess.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox