mbox series

[v4l-utils,v5,0/5] Add support for meson building

Message ID 20210512184946.102863-1-ariel.dalessandro@collabora.com
Headers show
Series Add support for meson building | expand

Message

Ariel D'Alessandro May 12, 2021, 6:49 p.m. UTC
Hi all,

Another attempt to support meson build, addressing comments/fixes from
reviewers.

This patchset was developed on top of v4l-utils current master branch:

    commit f0c7e3d71eaf4182bae7eb3ee0e43b4eeb047ea9
    Author: Hans Verkuil <hverkuil-cisco@xs4all.nl>

        v4l2-ctl: add '--set-edid type=list' support

You can find the patchset pushed to the following branch:

    https://gitlab.collabora.com/adalessandro/v4l-utils/-/tree/v4l-utils-meson-v5

Feedback appreciated as always :-)

Changes from v4:

  * Dropped install_subdir() work-around to install empty dir. Supported
    now in meson v0.57.
  * Bump to meson v0.57. Replaced deprecated methods.
  * Added override_dependency() calls on libraries.
  * Properly check for bpf and SDL2 dependencies.
  * Removed libraries_private field from libv4lconvert pkgconfig.
  * Documented meson static builds support.
  * Set default compiler standard options.
  * Added bpf check in keytable.

Changes from v3:

  * Split Doxygen support patch.
  * Properly generate config.h configuration file.

Changes from v2:

  * Updated to current master branch.
  * Moved README to markdown syntax.
  * Documented meson build.
  * Set PACKAGE_VERSION config macro as quoted.

Changes from v1:

  * Updated project version to 1.21.0.
  * Fixed clang includes in keytable bpf compilation.
  * Improved variable reutilization in meson scripts.        
  * Set libraries version and soversion.                     
  * Control symbol visibility.                  
  * Install empty 'protocols' directory in keytable user dir.
  * Fixed svg filenames in qv4l2 and qvidcap.                         
  * Added support for Doxygen documentation (html and man).
  * Updated required meson version to v0.53 (for fs module).       
  * Added new files to EXTRA_DIST in each Makefile.am.              

Regards,

Ariel D'Alessandro (5):
  Move README to markdown syntax
  Add support for meson building
  Copy Doxygen configuration file to doc/
  meson: Add support for doxygen documentation
  Makefile.am: Distribute meson related files

 .gitignore                                    |    1 +
 INSTALL.meson.md                              |  142 +
 Makefile.am                                   |    5 +-
 README                                        |  274 --
 README.md                                     |  332 +++
 contrib/Makefile.am                           |    3 +-
 contrib/cobalt-ctl/Makefile.am                |    2 +
 contrib/cobalt-ctl/meson.build                |    8 +
 contrib/decode_tm6000/Makefile.am             |    2 +
 contrib/decode_tm6000/meson.build             |   14 +
 contrib/gconv/Makefile.am                     |    2 +-
 contrib/gconv/meson.build                     |   44 +
 contrib/meson.build                           |   13 +
 contrib/rds-saa6588/Makefile.am               |    2 +
 contrib/rds-saa6588/meson.build               |    7 +
 contrib/test/Makefile.am                      |    3 +-
 contrib/test/meson.build                      |  143 +
 contrib/xc3028-firmware/Makefile.am           |    2 +-
 contrib/xc3028-firmware/meson.build           |   11 +
 doc/Doxyfile.in                               | 2352 +++++++++++++++++
 doc/meson.build                               |   34 +
 lib/Makefile.am                               |    2 +-
 lib/libdvbv5/Makefile.am                      |    2 +-
 lib/libdvbv5/meson.build                      |  159 ++
 lib/libv4l-mplane/Makefile.am                 |    2 +
 lib/libv4l-mplane/meson.build                 |   23 +
 lib/libv4l1/Makefile.am                       |    2 +-
 lib/libv4l1/meson.build                       |   62 +
 lib/libv4l2/Makefile.am                       |    2 +-
 lib/libv4l2/meson.build                       |   71 +
 lib/libv4l2rds/Makefile.am                    |    2 +
 lib/libv4l2rds/meson.build                    |   37 +
 lib/libv4lconvert/Makefile.am                 |    2 +-
 lib/libv4lconvert/meson.build                 |  117 +
 lib/meson.build                               |   11 +
 libdvbv5-po/meson.build                       |    3 +
 meson.build                                   |  334 +++
 meson_options.txt                             |   50 +
 utils/Makefile.am                             |    2 +-
 utils/cec-compliance/Makefile.am              |    2 +-
 utils/cec-compliance/meson.build              |   22 +
 utils/cec-ctl/Makefile.am                     |    2 +-
 utils/cec-ctl/meson.build                     |   18 +
 utils/cec-follower/Makefile.am                |    2 +-
 utils/cec-follower/meson.build                |   19 +
 utils/cx18-ctl/Makefile.am                    |    2 +
 utils/cx18-ctl/meson.build                    |    8 +
 utils/dvb/Makefile.am                         |    2 +-
 utils/dvb/meson.build                         |   70 +
 utils/gen_media_bus_format_codes.sh           |    7 +
 utils/gen_media_bus_format_names.sh           |    7 +
 utils/ir-ctl/Makefile.am                      |    2 +
 utils/ir-ctl/meson.build                      |   23 +
 utils/ivtv-ctl/Makefile.am                    |    2 +
 utils/ivtv-ctl/meson.build                    |   13 +
 utils/keytable/Makefile.am                    |    3 +-
 utils/keytable/bpf_protocols/Makefile.am      |    3 +-
 .../bpf_protocols/clang_sys_includes.sh       |    9 +
 utils/keytable/bpf_protocols/meson.build      |   31 +
 utils/keytable/meson.build                    |   81 +
 utils/keytable/rc_keymaps/meson.build         |  151 ++
 utils/libcecutil/Makefile.am                  |    2 +-
 utils/libcecutil/meson.build                  |   45 +
 utils/libmedia_dev/Makefile.am                |    2 +-
 utils/libmedia_dev/meson.build                |   14 +
 utils/libv4l2util/Makefile.am                 |    2 +-
 utils/libv4l2util/meson.build                 |   16 +
 utils/media-ctl/Makefile.am                   |    2 +
 utils/media-ctl/meson.build                   |   43 +
 utils/meson.build                             |   46 +
 utils/qv4l2/Makefile.am                       |    3 +-
 utils/qv4l2/meson.build                       |   80 +
 utils/qvidcap/Makefile.am                     |    3 +-
 utils/qvidcap/meson.build                     |   82 +
 utils/rds-ctl/Makefile.am                     |    1 +
 utils/rds-ctl/meson.build                     |   13 +
 utils/v4l2-compliance/Makefile.am             |    2 +-
 utils/v4l2-compliance/meson.build             |   58 +
 utils/v4l2-ctl/Makefile.am                    |    2 +-
 utils/v4l2-ctl/meson.build                    |   75 +
 utils/v4l2-dbg/Makefile.am                    |    2 +-
 utils/v4l2-dbg/meson.build                    |   16 +
 utils/v4l2-sysfs-path/Makefile.am             |    2 +
 utils/v4l2-sysfs-path/meson.build             |   14 +
 v4l-utils-po/meson.build                      |    3 +
 85 files changed, 4987 insertions(+), 299 deletions(-)
 create mode 100644 INSTALL.meson.md
 delete mode 100644 README
 create mode 100644 README.md
 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 100644 doc/Doxyfile.in
 create mode 100644 doc/meson.build
 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

Comments

Ariel D'Alessandro May 17, 2021, 8:55 p.m. UTC | #1
Hi Kieran!

Thanks a lot for the feedback.

On 5/13/21 5:56 AM, Kieran Bingham wrote:
> Hi Ariel,

> 

> I'm still very much looking forward to this update!

> 

> I still think meson could be used in parallel for some cross over period

> while these issues are worked out, which would encourage and support

> wider testing before any consideration to swap altogether occurred.

> 

> 

> Furthermore, the performance improvement on this is really nice

> (intel i7 8th gen 4 core/8threads)

> 

> /usr/bin/time -v ./make-meson.sh

> 	User time (seconds): 99.38

> 	System time (seconds): 10.69

> 	Percent of CPU this job got: 577%

> 	Elapsed (wall clock) time (h:mm:ss or m:ss): 0:19.05

> 

> 

> /usr/bin/time -v ./make-autoconf.sh

> 	User time (seconds): 218.19

> 	System time (seconds): 21.46

> 	Percent of CPU this job got: 360%

> 	Elapsed (wall clock) time (h:mm:ss or m:ss): 1:06.54

> 

> however the build output directories are not comparable so I suspect

> that perhaps meson isn't (yet?) building all the same things?


Not sure what your scripts are doing, but the default autotools
behaviour should be equivalent to:

  $ meson configure build/ -Ddefault_library=both -Ddoxygen-doc=disabled

> 

> du -sh build-autoconf build-meson/

> 129M	build-autoconf

> 69M	build-meson/

> 

> 

> I've just tried testing it locally and found a smallish issue:

> 

> 

> On 12/05/2021 19:49, Ariel D'Alessandro wrote:

<snip>
>> Changes from v4:

>>

>>   * Dropped install_subdir() work-around to install empty dir. Supported

>>     now in meson v0.57.

>>   * Bump to meson v0.57. Replaced deprecated methods.

>>   * Added override_dependency() calls on libraries.

>>   * Properly check for bpf and SDL2 dependencies.

> 

> The SDL2 dependency is optional when I run ./bootstrap.sh; ./configure

> which gives the following output:

> 

> compile time options summary

> ============================

> 

>     Host OS                    : linux-gnu

>     X11                        : yes

>     GL                         : yes

>     glu                        : yes

>     libelf		       : yes

>     libjpeg                    : yes

>     libudev                    : yes

>     pthread                    : yes

>     QT version                 : v5.4 with QtGL

>     ALSA support               : yes

>     SDL support		       : no

> 

>     build dynamic libs         : yes

>     build static libs          : yes

> 

>     gconv                      : no

> 

>     dynamic libv4l             : yes

>     v4l_plugins                : yes

>     v4l_wrappers               : yes

>     libdvbv5                   : yes

>     dvbv5-daemon               : yes

>     v4lutils                   : yes

>     qv4l2                      : yes

>     qvidcap                    : yes

>     v4l2-ctl uses libv4l       : yes

>     v4l2-ctl-32                : no

>     v4l2-compliance            : yes

>     v4l2-compliance uses libv4l: yes

>     v4l2-compliance-32         : no

>     BPF IR Decoders:           : no

> 

> 

> However running meson build gives:

> 

> Has header "bpf/bpf.h" : NO

> Run-time dependency sdl2 found: YES 2.0.10

> Run-time dependency sdl2_image found: NO (tried pkgconfig and cmake)

> 

> meson.build:90:4: ERROR: C header 'SDL2/SDL_image.h' not found

> 

> Now I bet that's a corner case because SDL was found but SDL Image

> wasn't, but perhaps it needs updating so that both are optional, and the

> SDL support is only enabled when all SDL dependencies are met.

> 

> 

> 

> Of course I was able to 'solve/workaround' this locally with

>  sudo apt install libsdl2-image-dev

> 

> Note that the time measurements reported above were after installing SDL

> image so that both meson and autoconf should have been building the


That's a bug introducen in the latest v5 patchset, while addressing
comment [0] from Xavier. This will fix it:

$ git diff
diff --git a/meson.build b/meson.build
index bba8e030..f062856c 100644
--- a/meson.build
+++ b/meson.build
@@ -82,12 +82,12 @@ endif

 dep_sdl = dependency('SDL2', required: false)
 if not dep_sdl.found()
-    dep_sdl = cc.find_library('SDL2', has_headers: 'SDL2/SDL.h')
+    dep_sdl = cc.find_library('SDL2', has_headers: 'SDL2/SDL.h',
required: false)
 endif

 dep_sdl_image = dependency('SDL2_image', required: false)
 if not dep_sdl_image.found()
-    dep_sdl_image = cc.find_library('SDL2_image', has_headers:
'SDL2/SDL_image.h')
+    dep_sdl_image = cc.find_library('SDL2_image', has_headers:
'SDL2/SDL_image.h', required: false)
 endif

 dep_threads = dependency('threads')

[0]
https://gitlab.collabora.com/adalessandro/v4l-utils/-/commit/d6fc25fdd28227e88d5517342f045d5bda632272#note_82115

Thanks again!
Ariel
Kieran Bingham May 17, 2021, 10:13 p.m. UTC | #2
Hi Ariel,

On 17/05/2021 21:55, Ariel D'Alessandro wrote:
> Hi Kieran!

> 

> Thanks a lot for the feedback.


No worries, somehow this is almost fun to test out (mostly because of
watching how crazy fast it is building in meson in comparison).


> On 5/13/21 5:56 AM, Kieran Bingham wrote:

>> Hi Ariel,

>>

>> I'm still very much looking forward to this update!

>>

>> I still think meson could be used in parallel for some cross over period

>> while these issues are worked out, which would encourage and support

>> wider testing before any consideration to swap altogether occurred.

>>

>>

>> Furthermore, the performance improvement on this is really nice

>> (intel i7 8th gen 4 core/8threads)

>>

>> /usr/bin/time -v ./make-meson.sh

>> 	User time (seconds): 99.38

>> 	System time (seconds): 10.69

>> 	Percent of CPU this job got: 577%

>> 	Elapsed (wall clock) time (h:mm:ss or m:ss): 0:19.05

>>

>>

>> /usr/bin/time -v ./make-autoconf.sh

>> 	User time (seconds): 218.19

>> 	System time (seconds): 21.46

>> 	Percent of CPU this job got: 360%

>> 	Elapsed (wall clock) time (h:mm:ss or m:ss): 1:06.54

>>

>> however the build output directories are not comparable so I suspect

>> that perhaps meson isn't (yet?) building all the same things?

> 

> Not sure what your scripts are doing, but the default autotools


Ah, yes I should have been clearer there - but they don't do 'anything'
except the bare minimum for both:

----------
kbingham@Q:/opt/projects/media/v4l-utils$ cat make-autoconf.sh
#!/bin/sh

export CCACHE_DISABLE=true

rm -rf build-autoconf
mkdir -p build-autoconf
cd build-autoconf
../configure
make -j8

----------
kbingham@Q:/opt/projects/media/v4l-utils$ cat make-meson.sh
#!/bin/sh

export CCACHE_DISABLE=true

rm -rf build-meson
meson build-meson
ninja -C build-meson
----------

> behaviour should be equivalent to:

> 

>   $ meson configure build/ -Ddefault_library=both -Ddoxygen-doc=disabled


Ok, updated script to run that:

	meson -Ddefault_library=both -Ddoxygen-doc=disabled build-meson

and still the same fast results.

	Command being timed: "./make-meson.sh"
	User time (seconds): 96.65
	System time (seconds): 10.42
	Percent of CPU this job got: 526%
	Elapsed (wall clock) time (h:mm:ss or m:ss): 0:20.34

(i.e. really fast ;D)


>> du -sh build-autoconf build-meson/

>> 129M	build-autoconf

>> 69M	build-meson/


Still a comparable output size as well, but the main difference from
size is a lot of extra build files in the -autoconf directory.

A lot of these are things like .Po files. Does this series already
handle internationalisation?


The next step was to install both versions, as that will compare what's
actually built and results in the package, and in fact they do look
quite similar.

There are a few small changes, that might be worth looking into - but I
don't think there's any major difference in what is or isn't built.
(unless the Internationalisation stuff really is the major factor)

 - Spurious meson.build file is being installed at
   /lib/udev/rc_keymaps/meson.build

 - Meson decided to default libdir to
     /usr/local/lib/x86_64-linux-gnu
   while autoconf used
     /usr/local/lib
   (it's likely handled by the package managers anyway)

 - /usr/local/etc/rc_keymaps/protocols
    was installed though autoconf didn't ?

 - Autoconf seemed to install v4l1compat.so and v4l2convert.so
   (possibly in duplicate) in the libdir, as well as in libdir/libv4l/
   I'm not sure if that's a bug or a feature in autoconf

Ah, and again - size of those installs looks quite different suggesting
(probably that localisation) has differed between the two builds quite
drastically

(after DESTDIR=/tmp/v4l2-$BUILDSYSTEM {make, ninja} install)


du -sh /tmp/v4l2-autoconf/ /tmp/v4l2-meson/
39M	/tmp/v4l2-autoconf/
22M	/tmp/v4l2-meson/


>> I've just tried testing it locally and found a smallish issue:

>>

>>

>> On 12/05/2021 19:49, Ariel D'Alessandro wrote:

> <snip>

>>> Changes from v4:

>>>

>>>   * Dropped install_subdir() work-around to install empty dir. Supported

>>>     now in meson v0.57.

>>>   * Bump to meson v0.57. Replaced deprecated methods.

>>>   * Added override_dependency() calls on libraries.

>>>   * Properly check for bpf and SDL2 dependencies.

>>

>> The SDL2 dependency is optional when I run ./bootstrap.sh; ./configure

>> which gives the following output:

>>

>> compile time options summary

>> ============================

>>

>>     Host OS                    : linux-gnu

>>     X11                        : yes

>>     GL                         : yes

>>     glu                        : yes

>>     libelf		       : yes

>>     libjpeg                    : yes

>>     libudev                    : yes

>>     pthread                    : yes

>>     QT version                 : v5.4 with QtGL

>>     ALSA support               : yes

>>     SDL support		       : no

>>

>>     build dynamic libs         : yes

>>     build static libs          : yes

>>

>>     gconv                      : no


Interesting, it looks like on my system autoconf defaults gconv to no,
but meson built it I think.

I'd call that a feature not a bug at the moment though?

>>

>>     dynamic libv4l             : yes

>>     v4l_plugins                : yes

>>     v4l_wrappers               : yes

>>     libdvbv5                   : yes

>>     dvbv5-daemon               : yes

>>     v4lutils                   : yes

>>     qv4l2                      : yes

>>     qvidcap                    : yes

>>     v4l2-ctl uses libv4l       : yes

>>     v4l2-ctl-32                : no

>>     v4l2-compliance            : yes

>>     v4l2-compliance uses libv4l: yes

>>     v4l2-compliance-32         : no

>>     BPF IR Decoders:           : no

>>

>>

>> However running meson build gives:

>>

>> Has header "bpf/bpf.h" : NO

>> Run-time dependency sdl2 found: YES 2.0.10

>> Run-time dependency sdl2_image found: NO (tried pkgconfig and cmake)

>>

>> meson.build:90:4: ERROR: C header 'SDL2/SDL_image.h' not found

>>

>> Now I bet that's a corner case because SDL was found but SDL Image

>> wasn't, but perhaps it needs updating so that both are optional, and the

>> SDL support is only enabled when all SDL dependencies are met.

>>

>>

>>

>> Of course I was able to 'solve/workaround' this locally with

>>  sudo apt install libsdl2-image-dev

>>

>> Note that the time measurements reported above were after installing SDL

>> image so that both meson and autoconf should have been building the

> 

> That's a bug introducen in the latest v5 patchset, while addressing

> comment [0] from Xavier. This will fix it:

> 

> $ git diff

> diff --git a/meson.build b/meson.build

> index bba8e030..f062856c 100644

> --- a/meson.build

> +++ b/meson.build

> @@ -82,12 +82,12 @@ endif

> 

>  dep_sdl = dependency('SDL2', required: false)

>  if not dep_sdl.found()

> -    dep_sdl = cc.find_library('SDL2', has_headers: 'SDL2/SDL.h')

> +    dep_sdl = cc.find_library('SDL2', has_headers: 'SDL2/SDL.h',

> required: false)

>  endif

> 

>  dep_sdl_image = dependency('SDL2_image', required: false)

>  if not dep_sdl_image.found()

> -    dep_sdl_image = cc.find_library('SDL2_image', has_headers:

> 'SDL2/SDL_image.h')

> +    dep_sdl_image = cc.find_library('SDL2_image', has_headers:

> 'SDL2/SDL_image.h', required: false)

>  endif

> 

>  dep_threads = dependency('threads')

> 

> [0]

> https://gitlab.collabora.com/adalessandro/v4l-utils/-/commit/d6fc25fdd28227e88d5517342f045d5bda632272#note_82115

> 

> Thanks again!

> Ariel



-- 
Regards
--
Kieran
--- /tmp/v4l2-install-autoconf.list	2021-05-17 22:39:34.951165299 +0100
+++ /tmp/v4l2-install-meson.list	2021-05-17 22:39:24.843084176 +0100
@@ -86,7 +86,6 @@
 ./lib/udev/rc_keymaps/medion_x10_or2x.toml
 ./lib/udev/rc_keymaps/medion_x10.toml
 ./lib/udev/rc_keymaps/megasky.toml
-./lib/udev/rc_keymaps/meson.build
 ./lib/udev/rc_keymaps/minix_neo.toml
 ./lib/udev/rc_keymaps/msi_digivox_iii.toml
 ./lib/udev/rc_keymaps/msi_digivox_ii.toml
@@ -179,6 +178,7 @@
 ./usr/local/bin/v4l2-sysfs-path
 ./usr/local/etc
 ./usr/local/etc/rc_keymaps
+./usr/local/etc/rc_keymaps/protocols
 ./usr/local/etc/rc_maps.cfg
 ./usr/local/include
 ./usr/local/include/libdvbv5
@@ -236,49 +236,44 @@
 ./usr/local/include/libv4lconvert.h
 ./usr/local/include/libv4l-plugin.h
 ./usr/local/lib
-./usr/local/lib/libdvbv5.a
-./usr/local/lib/libdvbv5.la
-./usr/local/lib/libdvbv5.so
-./usr/local/lib/libdvbv5.so.0
-./usr/local/lib/libdvbv5.so.0.0.0
-./usr/local/lib/libv4l
-./usr/local/lib/libv4l1.a
-./usr/local/lib/libv4l1.la
-./usr/local/lib/libv4l1.so
-./usr/local/lib/libv4l1.so.0
-./usr/local/lib/libv4l1.so.0.0.0
-./usr/local/lib/libv4l2.a
-./usr/local/lib/libv4l2.la
-./usr/local/lib/libv4l2rds.a
-./usr/local/lib/libv4l2rds.la
-./usr/local/lib/libv4l2rds.so
-./usr/local/lib/libv4l2rds.so.0
-./usr/local/lib/libv4l2rds.so.0.0.0
-./usr/local/lib/libv4l2.so
-./usr/local/lib/libv4l2.so.0
-./usr/local/lib/libv4l2.so.0.0.0
-./usr/local/lib/libv4lconvert.a
-./usr/local/lib/libv4lconvert.la
-./usr/local/lib/libv4lconvert.so
-./usr/local/lib/libv4lconvert.so.0
-./usr/local/lib/libv4lconvert.so.0.0.0
-./usr/local/lib/libv4l/ov511-decomp
-./usr/local/lib/libv4l/ov518-decomp
-./usr/local/lib/libv4l/plugins
-./usr/local/lib/libv4l/plugins/libv4l-mplane.la
-./usr/local/lib/libv4l/plugins/libv4l-mplane.so
-./usr/local/lib/libv4l/v4l1compat.la
-./usr/local/lib/libv4l/v4l1compat.so
-./usr/local/lib/libv4l/v4l2convert.la
-./usr/local/lib/libv4l/v4l2convert.so
-./usr/local/lib/pkgconfig
-./usr/local/lib/pkgconfig/libdvbv5.pc
-./usr/local/lib/pkgconfig/libv4l1.pc
-./usr/local/lib/pkgconfig/libv4l2.pc
-./usr/local/lib/pkgconfig/libv4l2rds.pc
-./usr/local/lib/pkgconfig/libv4lconvert.pc
-./usr/local/lib/v4l1compat.so
-./usr/local/lib/v4l2convert.so
+./usr/local/lib/x86_64-linux-gnu
+./usr/local/lib/x86_64-linux-gnu/gconv
+./usr/local/lib/x86_64-linux-gnu/gconv/ARIB-STD-B24.so
+./usr/local/lib/x86_64-linux-gnu/gconv/EN300-468-TAB00.so
+./usr/local/lib/x86_64-linux-gnu/gconv/gconv-modules
+./usr/local/lib/x86_64-linux-gnu/libdvbv5.a
+./usr/local/lib/x86_64-linux-gnu/libdvbv5.so
+./usr/local/lib/x86_64-linux-gnu/libdvbv5.so.0
+./usr/local/lib/x86_64-linux-gnu/libdvbv5.so.0.0.0
+./usr/local/lib/x86_64-linux-gnu/libv4l
+./usr/local/lib/x86_64-linux-gnu/libv4l1.a
+./usr/local/lib/x86_64-linux-gnu/libv4l1.so
+./usr/local/lib/x86_64-linux-gnu/libv4l1.so.0
+./usr/local/lib/x86_64-linux-gnu/libv4l1.so.0.0.0
+./usr/local/lib/x86_64-linux-gnu/libv4l2.a
+./usr/local/lib/x86_64-linux-gnu/libv4l2rds.a
+./usr/local/lib/x86_64-linux-gnu/libv4l2rds.so
+./usr/local/lib/x86_64-linux-gnu/libv4l2rds.so.0
+./usr/local/lib/x86_64-linux-gnu/libv4l2rds.so.0.0.0
+./usr/local/lib/x86_64-linux-gnu/libv4l2.so
+./usr/local/lib/x86_64-linux-gnu/libv4l2.so.0
+./usr/local/lib/x86_64-linux-gnu/libv4l2.so.0.0.0
+./usr/local/lib/x86_64-linux-gnu/libv4lconvert.a
+./usr/local/lib/x86_64-linux-gnu/libv4lconvert.so
+./usr/local/lib/x86_64-linux-gnu/libv4lconvert.so.0
+./usr/local/lib/x86_64-linux-gnu/libv4lconvert.so.0.0.0
+./usr/local/lib/x86_64-linux-gnu/libv4l/ov511-decomp
+./usr/local/lib/x86_64-linux-gnu/libv4l/ov518-decomp
+./usr/local/lib/x86_64-linux-gnu/libv4l/plugins
+./usr/local/lib/x86_64-linux-gnu/libv4l/plugins/libv4l-mplane.so
+./usr/local/lib/x86_64-linux-gnu/libv4l/v4l1compat.so
+./usr/local/lib/x86_64-linux-gnu/libv4l/v4l2convert.so
+./usr/local/lib/x86_64-linux-gnu/pkgconfig
+./usr/local/lib/x86_64-linux-gnu/pkgconfig/libdvbv5.pc
+./usr/local/lib/x86_64-linux-gnu/pkgconfig/libv4l1.pc
+./usr/local/lib/x86_64-linux-gnu/pkgconfig/libv4l2.pc
+./usr/local/lib/x86_64-linux-gnu/pkgconfig/libv4l2rds.pc
+./usr/local/lib/x86_64-linux-gnu/pkgconfig/libv4lconvert.pc
 ./usr/local/sbin
 ./usr/local/sbin/v4l2-dbg
 ./usr/local/share
Mauro Carvalho Chehab May 18, 2021, 7:23 a.m. UTC | #3
Em Mon, 17 May 2021 23:13:45 +0100
Kieran Bingham <kieran.bingham@ideasonboard.com> escreveu:

> Ah, yes I should have been clearer there - but they don't do 'anything'

> except the bare minimum for both:

> 

> ----------

> kbingham@Q:/opt/projects/media/v4l-utils$ cat make-autoconf.sh

> #!/bin/sh

> 

> export CCACHE_DISABLE=true

> 

> rm -rf build-autoconf

> mkdir -p build-autoconf

> cd build-autoconf

> ../configure


This is not the bare minimum. It is just the opposite: the way we
intentionally implemented configure.ac is to auto-detect as much as possible
what tools are supported and to build the maximum number of features as
possible.

See, when one calls:

	$ ./configure

It will display at the end the optional features that were enabled
that we found important enough to report:

compile time options summary
============================

    Host OS                    : linux-gnu
    X11                        : yes
    GL                         : yes
    glu                        : yes
    libelf		       : yes
    libjpeg                    : yes
    libudev                    : yes
    pthread                    : yes
    QT version                 : v5.4 with QtGL
    ALSA support               : yes
    SDL support		       : yes

    build dynamic libs         : yes
    build static libs          : yes

    gconv                      : no

    dynamic libv4l             : yes
    v4l_plugins                : yes
    v4l_wrappers               : yes
    libdvbv5                   : yes
    dvbv5-daemon               : yes
    v4lutils                   : yes
    qv4l2                      : yes
    qvidcap                    : yes
    v4l2-ctl uses libv4l       : yes
    v4l2-ctl-32                : no
    v4l2-compliance            : yes
    v4l2-compliance uses libv4l: yes
    v4l2-compliance-32         : no
    BPF IR Decoders:           : no

a bare minimum setting would print most (if not all) above features
as "no".

See, we never treated internationalization or documentation as
features. So, it won't display anything about that. It will just
build docs and .po files by default, if the needed tools and
libraries are present at the building system.

Yet, autotools have some options that could disable building them.
./configure --help is your friend[1], if you want a bare minimum
build.

[1] You can see most of the options that can be enabled/disabled with:

	./configure --help|grep -E '(enable|disable|with)'

    The command would be similar to: 

	./configure --disable-nls --disable-libdvbv5 --disable-dyn-libv4l --disable-v4l-utils --disable-v4l2-compliance-libv4l --disable-v4l2-ctl-libv4l --disable-qv4l2 --disable-qvidcap --disable-bpf --without-jpeg --without-libudev --disable-gconv --disable-doxygen-doc --disable-doxygen-dot --disable-doxygen-html --disable-doxygen-ps --disable-doxygen-pdf

	here, after running the above, building with autoconf was very fast.

		$ make clean
		$ time CCACHE_DISABLE=true make -j8
		real	0m4,594s
		user	0m14,050s
		sys	0m1,613s

> meson build-meson

> ninja -C build-meson


I would be expecting that the above would do the same, but
it sounds it is lacking a lot of things...

> >> du -sh build-autoconf build-meson/

> >> 129M	build-autoconf

> >> 69M	build-meson/  


as otherwise the difference won't be so huge.

See, you're comparing very different things, as autotools is clearly
doing a lot more than meson. If they were building the same thing, I 
would expect a difference at the order of tens of KB at most, due to
temporary/cache files, build logs and, in the case of autotools, m4
files. Neither of those are huge.

Assuming that both builds used the same compilers, a difference at 
the order of (tens of) MB can only be explained if Meson build
was very incomplete, and/or the output files don't carry the same
debug info.


Thanks,
Mauro
Kieran Bingham May 18, 2021, 10:18 a.m. UTC | #4
Hi Mauro,

On 18/05/2021 08:23, Mauro Carvalho Chehab wrote:
> Em Mon, 17 May 2021 23:13:45 +0100

> Kieran Bingham <kieran.bingham@ideasonboard.com> escreveu:

> 

>> Ah, yes I should have been clearer there - but they don't do 'anything'

>> except the bare minimum for both:

>>

>> ----------

>> kbingham@Q:/opt/projects/media/v4l-utils$ cat make-autoconf.sh

>> #!/bin/sh

>>

>> export CCACHE_DISABLE=true

>>

>> rm -rf build-autoconf

>> mkdir -p build-autoconf

>> cd build-autoconf

>> ../configure

> 

> This is not the bare minimum. It is just the opposite: the way we


Ok, I'm sorry - I need to be clearer about my being clearer.

My *scripts* don't do anything except the bare minimum to build.

I pulled out the simplest commands to build both versions so that the
times could be compared.

  - Autoconf
    mkdir; ../configure; make

  - Meson
    meson build; ninja

I expected no parameters to be passed

(Yes, I played with these in the last reply to see the effects suggested
by Ariel, but I shouldn't have to)



> intentionally implemented configure.ac is to auto-detect as much as possible

> what tools are supported and to build the maximum number of features as

> possible.


Agreed, I expect both sides to auto-detect the most features that are
possible to build on a given configuration by default, *and* I expect
both versions to detect the same.



> See, when one calls:

> 

> 	$ ./configure

> 

> It will display at the end the optional features that were enabled

> that we found important enough to report:

> 

> compile time options summary

> ============================

> 

>     Host OS                    : linux-gnu

>     X11                        : yes

>     GL                         : yes

>     glu                        : yes

>     libelf		       : yes

>     libjpeg                    : yes

>     libudev                    : yes

>     pthread                    : yes

>     QT version                 : v5.4 with QtGL

>     ALSA support               : yes

>     SDL support		       : yes

> 

>     build dynamic libs         : yes

>     build static libs          : yes

> 

>     gconv                      : no

> 

>     dynamic libv4l             : yes

>     v4l_plugins                : yes

>     v4l_wrappers               : yes

>     libdvbv5                   : yes

>     dvbv5-daemon               : yes

>     v4lutils                   : yes

>     qv4l2                      : yes

>     qvidcap                    : yes

>     v4l2-ctl uses libv4l       : yes

>     v4l2-ctl-32                : no

>     v4l2-compliance            : yes

>     v4l2-compliance uses libv4l: yes

>     v4l2-compliance-32         : no

>     BPF IR Decoders:           : no

> 

> a bare minimum setting would print most (if not all) above features

> as "no".



This is a mis-communication. I said (or intended to say?) my scripts do
the bare minimum.

I agree, if we want to compare both build systems; building the bare
minimum - then that list would be full of no's - but why would we want
to compare two build systems doing nothing.

ok, so that might be one data point, but not one I'm interested in
comparing. I want to see what differences occur between both build
systems building everything, and ensure that both produce the same result.


It would likely be useful to get a summary() of what is and isn't built
from the meson to produce a comparable output summary.


> See, we never treated internationalization or documentation as

> features. So, it won't display anything about that. It will just

> build docs and .po files by default, if the needed tools and

> libraries are present at the building system.


I think that's fine (building when possible).

I think the meson build (in my system configuration) didn't do this,
lets call that a bug in the current meson version. I've tried to
highlight that in the previous e-mail.

We need to do testing of different cases to make sure that the features
are comparable across both systems.

That's what I was trying to do.




> Yet, autotools have some options that could disable building them.

> ./configure --help is your friend[1], if you want a bare minimum

> build.


Yes, I'm aware of these options. A 'bare minimum build' was not my goal.



> [1] You can see most of the options that can be enabled/disabled with:

> 

> 	./configure --help|grep -E '(enable|disable|with)'

> 

>     The command would be similar to: 

> 

> 	./configure --disable-nls --disable-libdvbv5 --disable-dyn-libv4l --disable-v4l-utils --disable-v4l2-compliance-libv4l --disable-v4l2-ctl-libv4l --disable-qv4l2 --disable-qvidcap --disable-bpf --without-jpeg --without-libudev --disable-gconv --disable-doxygen-doc --disable-doxygen-dot --disable-doxygen-html --disable-doxygen-ps --disable-doxygen-pdf

> 

> 	here, after running the above, building with autoconf was very fast.

> 

> 		$ make clean

> 		$ time CCACHE_DISABLE=true make -j8

> 		real	0m4,594s

> 		user	0m14,050s

> 		sys	0m1,613s



This isn't what I've been comparing.

I have been trying to (or I want to) compare the performance differences
of two *full* builds on the same system. I'm sorry that my language on
the previous e-mail caused confusion there.

To clarify, I expect a
   minimal build script (*no parameters passed*)

to provide a
   maximal build configuration (everything that could be built).


And I would expect both sides to produce the same feature set.
If they don't - then it should be fixed.


>> meson build-meson

>> ninja -C build-meson

> 

> I would be expecting that the above would do the same, but

> it sounds it is lacking a lot of things...


meson build-meson; ninja -C build-meson should be building a maximal
configuration. (if it isn't, that's something to look at)

As identified, I think there are things missing, or not yet the same
which is why I've been highlighting the size of the build directories.

In particular I'm highlighting the fact that I have observed
internationalisation files are missing.


>>>> du -sh build-autoconf build-meson/

>>>> 129M	build-autoconf

>>>> 69M	build-meson/  



However I do not think that difference alone can account for a 60MB
difference.



> as otherwise the difference won't be so huge.

> 


Agreed.


> See, you're comparing very different things, as autotools is clearly

> doing a lot more than meson. If they were building the same thing, I 

> would expect a difference at the order of tens of KB at most, due to

> temporary/cache files, build logs and, in the case of autotools, m4

> files. Neither of those are huge.


Agreed.

Something is missing, that's to be investigated. That's why I've been
highlighting the difference in build output size specifically. But I do
not know what the difference is. I just built them together.


Re-reading my mail from last night - it looks like I was being overly
enthusiastic on the speed differences. I'm sorry - it was late, and I
was giddy watching it fly by. (The things people do for fun hey)

I was reporting that they are not building the same output, so I
shouldn't have made any comment on comparing speeds until they are
producing identical outputs.



> Assuming that both builds used the same compilers, a difference at 

> the order of (tens of) MB can only be explained if Meson build

> was very incomplete, and/or the output files don't carry the same

> debug info.


Indeed - compiler debug info level changes could be another thing to
check. That could account for a larger build output difference, but
there's certainly a large discrepancy to solve.


-- 
Regards
--
Kieran
Mauro Carvalho Chehab May 19, 2021, 11:07 a.m. UTC | #5
Em Tue, 18 May 2021 11:18:02 +0100
Kieran Bingham <kieran.bingham@ideasonboard.com> escreveu:

> Hi Mauro,

> 

> On 18/05/2021 08:23, Mauro Carvalho Chehab wrote:

> > Em Mon, 17 May 2021 23:13:45 +0100

> > Kieran Bingham <kieran.bingham@ideasonboard.com> escreveu:

> >   

> >> Ah, yes I should have been clearer there - but they don't do 'anything'

> >> except the bare minimum for both:

> >>

> >> ----------

> >> kbingham@Q:/opt/projects/media/v4l-utils$ cat make-autoconf.sh

> >> #!/bin/sh

> >>

> >> export CCACHE_DISABLE=true

> >>

> >> rm -rf build-autoconf

> >> mkdir -p build-autoconf

> >> cd build-autoconf

> >> ../configure  

> > 

> > This is not the bare minimum. It is just the opposite: the way we  

> 

> Ok, I'm sorry - I need to be clearer about my being clearer.

> 

> My *scripts* don't do anything except the bare minimum to build.


Ah, ok.

> > See, when one calls:

> > 

> > 	$ ./configure

> > 

> > It will display at the end the optional features that were enabled

> > that we found important enough to report:

> > 

> > compile time options summary

> > ============================

> > 

> >     Host OS                    : linux-gnu

> >     X11                        : yes

> >     GL                         : yes

> >     glu                        : yes

> >     libelf		       : yes

> >     libjpeg                    : yes

> >     libudev                    : yes

> >     pthread                    : yes

> >     QT version                 : v5.4 with QtGL

> >     ALSA support               : yes

> >     SDL support		       : yes

> > 

> >     build dynamic libs         : yes

> >     build static libs          : yes

> > 

> >     gconv                      : no

> > 

> >     dynamic libv4l             : yes

> >     v4l_plugins                : yes

> >     v4l_wrappers               : yes

> >     libdvbv5                   : yes

> >     dvbv5-daemon               : yes

> >     v4lutils                   : yes

> >     qv4l2                      : yes

> >     qvidcap                    : yes

> >     v4l2-ctl uses libv4l       : yes

> >     v4l2-ctl-32                : no

> >     v4l2-compliance            : yes

> >     v4l2-compliance uses libv4l: yes

> >     v4l2-compliance-32         : no

> >     BPF IR Decoders:           : no

> > 


> It would likely be useful to get a summary() of what is and isn't built

> from the meson to produce a comparable output summary.


Agreed. The best is to summarize at the end what optional features
were disabled.
 
> >> meson build-meson

> >> ninja -C build-meson  

> > 

> > I would be expecting that the above would do the same, but

> > it sounds it is lacking a lot of things...  

> 

> meson build-meson; ninja -C build-meson should be building a maximal

> configuration. (if it isn't, that's something to look at)


Yes. If meson is not building the same stuff at the same system,
there's a bug somewhere, as all the build dependencies should be
the same ;-)

> >>>> du -sh build-autoconf build-meson/

> >>>> 129M	build-autoconf

> >>>> 69M	build-meson/    

> 

> 

> However I do not think that difference alone can account for a 60MB

> difference.


It is probably some cpp files that weren't built. Those usually
produce larger execs and takes a lot more time to build than c
files.

> Re-reading my mail from last night - it looks like I was being overly

> enthusiastic on the speed differences. I'm sorry - it was late, and I

> was giddy watching it fly by. (The things people do for fun hey)



Yes, that was the impression I had. FYI, I don't care at all for
the building speed. Machine time is a lot cheaper than developers
and maintainers time ;-)

We never did (nor I think it makes sense to do) any changes at the
autoconf to make it run faster (there are some things that could probably
be done there to speed up some things).

So, what really concerns the amount of work to maintain, like how much
time was spent to fix building bugs not related to newly added code,
and how much efforts it takes to maintain the CI instances at
builder.linuxtv.org.

Right now, at builder, we have 1 project there hosted with meson,
1 project with cmake and the other non-kernel ones with autotools.

I never had to do anything at the server due to cmake/autotools build
issues on the project(s) that use them, but the only one that uses meson
requires constant interventions from my side to fix the build, as it
has been requiring from time to time  upgrades at the building
tool(*). So, it is a lot more expensive to maintain, as it consumes
*my* time ;-)

(*) Our server use the latest Debian version. Breakages there due to
    the lack of support of the cmake/autotools/meson version that
    it is there basically means that people using LTS distros won't
    be able to (easily) build the tool, as the distro-provided toolset
    is not enough.
    It is a bad idea to require that toolchain versions that aren't
    already provided by the major distros that aren't at EOL.

> > Assuming that both builds used the same compilers, a difference at 

> > the order of (tens of) MB can only be explained if Meson build

> > was very incomplete, and/or the output files don't carry the same

> > debug info.  

> 

> Indeed - compiler debug info level changes could be another thing to

> check. That could account for a larger build output difference, but

> there's certainly a large discrepancy to solve.


Yes. In order to do any sort of comparison, both should use exactly
the same flags (and compilers) when generating debug data. So, the
build size should be (about) same (**).

(**) It will never be the same, as each build toolchain produces
     different cache and temporary files and may eventually write a
     log file to help debugging issues (like autoconf does).

Thanks,
Mauro
Ariel D'Alessandro June 16, 2021, 1:36 p.m. UTC | #6
Hi Kieran, Mauro,

Thanks for all the feedback, I'll try to review and address all the
comments you've posted. Just a quick comment related to the output size
and debug level.

On 5/18/21 7:18 AM, Kieran Bingham wrote:
> Hi Mauro,

> 

> On 18/05/2021 08:23, Mauro Carvalho Chehab wrote:

>> Em Mon, 17 May 2021 23:13:45 +0100

>> Kieran Bingham <kieran.bingham@ideasonboard.com> escreveu:

>>

[snip]
>> Assuming that both builds used the same compilers, a difference at 

>> the order of (tens of) MB can only be explained if Meson build

>> was very incomplete, and/or the output files don't carry the same

>> debug info.

> 

> Indeed - compiler debug info level changes could be another thing to

> check. That could account for a larger build output difference, but

> there's certainly a large discrepancy to solve.


I've just checked and autotools is building by default with -g -O2, so
meson should be built with --buildtype=debugoptimized to get the same
results.

I'll dig deeper and post more soon.

Regards,
Ariel
Ariel D'Alessandro June 16, 2021, 2:26 p.m. UTC | #7
Kieran,

On 5/17/21 7:13 PM, Kieran Bingham wrote:
> Hi Ariel,

> 

> On 17/05/2021 21:55, Ariel D'Alessandro wrote:

>> Hi Kieran!

>>

>> Thanks a lot for the feedback.

> 

> No worries, somehow this is almost fun to test out (mostly because of

> watching how crazy fast it is building in meson in comparison).

> 

> 

>> On 5/13/21 5:56 AM, Kieran Bingham wrote:

>>> Hi Ariel,


[Omitting as there's further discussion in other mail responses from
this same thread.]

> 

> The next step was to install both versions, as that will compare what's

> actually built and results in the package, and in fact they do look

> quite similar.

> 

> There are a few small changes, that might be worth looking into - but I

> don't think there's any major difference in what is or isn't built.

> (unless the Internationalisation stuff really is the major factor)

> 

>  - Spurious meson.build file is being installed at

>    /lib/udev/rc_keymaps/meson.build


Will be fixed by:

diff --git a/utils/keytable/Makefile.am b/utils/keytable/Makefile.am
index d3edcf77..deb13934 100644
--- a/utils/keytable/Makefile.am
+++ b/utils/keytable/Makefile.am
@@ -1,7 +1,7 @@
 bin_PROGRAMS = ir-keytable
 man_MANS = ir-keytable.1 rc_keymap.5
 sysconf_DATA = rc_maps.cfg
-keytablesystem_DATA = $(srcdir)/rc_keymaps/*
+keytablesystem_DATA = $(srcdir)/rc_keymaps/*.toml
 udevrules_DATA = 70-infrared.rules
 if WITH_BPF
 if HAVE_SYSTEMD

> 

>  - Meson decided to default libdir to

>      /usr/local/lib/x86_64-linux-gnu

>    while autoconf used

>      /usr/local/lib

>    (it's likely handled by the package managers anyway)


  $ meson configure ../build-meson/ | grep libdir
    libdir    lib/x86_64-linux-gnu    Library directory

Package manager should run meson with configuration option
`-Dlibdir=lib`. Will document this.

> 

>  - /usr/local/etc/rc_keymaps/protocols

>     was installed though autoconf didn't ?


I don't get that difference. Maybe it's related to a different set of
features detected by the two build systems?

> 

>  - Autoconf seemed to install v4l1compat.so and v4l2convert.so

>    (possibly in duplicate) in the libdir, as well as in libdir/libv4l/

>    I'm not sure if that's a bug or a feature in autoconf


Right, an extra symlink is being added to those libs. Is this really needed?

> 

> Ah, and again - size of those installs looks quite different suggesting

> (probably that localisation) has differed between the two builds quite

> drastically

> 

> (after DESTDIR=/tmp/v4l2-$BUILDSYSTEM {make, ninja} install)

> 

> 

> du -sh /tmp/v4l2-autoconf/ /tmp/v4l2-meson/

> 39M	/tmp/v4l2-autoconf/

> 22M	/tmp/v4l2-meson/


As mentioned in another response. Autotools is building with `-g -O2` by
default, that'd the equivalent meson configuration option
--buildtype=debugoptimized. With this configuration the installtion
sizes are not that different:

  $ du -s installation_m*
  37068	installation_make
  37848	installation_meson

In this case the difference is related to libtool `.la` files not being
generated by meson and gconv/ only installed by meson. The latest is
probably a feature being only detected by meson in this case, will check
that out.

~/dev/v4l$ diff -r files_make files_meson
233a234,236
> ./usr/local/lib/gconv/ARIB-STD-B24.so

> ./usr/local/lib/gconv/EN300-468-TAB00.so

> ./usr/local/lib/gconv/gconv-modules

235d237
< ./usr/local/lib/libdvbv5.la
238d239
< ./usr/local/lib/libv4l1.la
241d241
< ./usr/local/lib/libv4l2.la
243d242
< ./usr/local/lib/libv4l2rds.la
247d245
< ./usr/local/lib/libv4lconvert.la
251d248
< ./usr/local/lib/libv4l/plugins/libv4l-mplane.la
253d249
< ./usr/local/lib/libv4l/v4l1compat.la
255d250
< ./usr/local/lib/libv4l/v4l2convert.la

More soon,
Ariel
Mauro Carvalho Chehab June 16, 2021, 2:59 p.m. UTC | #8
Em Wed, 16 Jun 2021 11:26:10 -0300
Ariel D'Alessandro <ariel.dalessandro@collabora.com> escreveu:

> Kieran,

> 


> >  - Meson decided to default libdir to

> >      /usr/local/lib/x86_64-linux-gnu

> >    while autoconf used

> >      /usr/local/lib

> >    (it's likely handled by the package managers anyway)  

> 

>   $ meson configure ../build-meson/ | grep libdir

>     libdir    lib/x86_64-linux-gnu    Library directory


The default isn't nice, and will likely cause troubles for the users, as 
/usr/local/lib/x86_64-linux-gnu would hardly be at the ld.so.conf list of 
paths for most people. So, when one would try to run a program, it will
fail.

> As mentioned in another response. Autotools is building with `-g -O2` by

> default, that'd the equivalent meson configuration option

> --buildtype=debugoptimized. 


I can't understand the Meson's default... no optimization and no debug!
Basically something that it is useless for both developers and for
production. I wonder why they chose a crap default like that...

> With this configuration the installtion

> sizes are not that different:

> 

>   $ du -s installation_m*

>   37068	installation_make

>   37848	installation_meson


It sounds a lot more coherent.

> In this case the difference is related to libtool `.la` files not being

> generated by meson and gconv/ only installed by meson. The latest is

> probably a feature being only detected by meson in this case, will check

> that out.


It was opted to not enable gconv by default, as similar patchset - needed
to support ARIB STD B-24 charset used by Japanese digital TV - was sent to 
gconv upstream (not sure if it was merged or not). On other words, the 
contrib/gconv stuff is independent of v4l-utils itself: it basically
adds an extra charset to be used by gconv upstream.

The only reason why it is present at v4l2-utils is that this charset
is present on ISDB tables on TV broadcasts in Japan. The gconv library
needs to support it, in order to  convert characters from MPEG tables
to the system's charset.

Btw, that's basically one of the reasons why we print a summary of the
options when ./configure runs.

Thanks,
Mauro
Xavier Claessens June 16, 2021, 3:06 p.m. UTC | #9
Le mercredi 16 juin 2021 à 16:59 +0200, Mauro Carvalho Chehab a écrit :
> As mentioned in another response. Autotools is building with `-g

> > -O2` by

> > default, that'd the equivalent meson configuration option

> > --buildtype=debugoptimized. 

> 

> I can't understand the Meson's default... no optimization and no

> debug!

> Basically something that it is useless for both developers and for

> production. I wonder why they chose a crap default like that...


Most project make it the default with:
project(..., default_options : ['buildtype=debugoptimized'])

I _think_ it is not the default because it is often less debugable when
it's optimized.

Regards,
Xavier Claessens.
Nicolas Dufresne June 16, 2021, 3:10 p.m. UTC | #10
Le mercredi 16 juin 2021 à 16:59 +0200, Mauro Carvalho Chehab a écrit :
> Em Wed, 16 Jun 2021 11:26:10 -0300

> Ariel D'Alessandro <ariel.dalessandro@collabora.com> escreveu:

> 

> > Kieran,

> > 

> 

> > >  - Meson decided to default libdir to

> > >      /usr/local/lib/x86_64-linux-gnu

> > >    while autoconf used

> > >      /usr/local/lib

> > >    (it's likely handled by the package managers anyway)  

> > 

> >   $ meson configure ../build-meson/ | grep libdir

> >     libdir    lib/x86_64-linux-gnu    Library directory

> 

> The default isn't nice, and will likely cause troubles for the users, as 

> /usr/local/lib/x86_64-linux-gnu would hardly be at the ld.so.conf list of 

> paths for most people. So, when one would try to run a program, it will

> fail.


It is the other way around, meson default to what ld.so.conf (your distribution)
is configured to. In this case you are running a debian/unbutu system, and this
is the proper path for multi-arch library placement.

If you try this on Fedora with a 64bit CPU, it would have picked
/usr/local/lib64. Which is also the proper path for that Linux distribution.
Debian has a more complex way, but it covers more use cases.

> 

> > As mentioned in another response. Autotools is building with `-g -O2` by

> > default, that'd the equivalent meson configuration option

> > --buildtype=debugoptimized. 

> 

> I can't understand the Meson's default... no optimization and no debug!

> Basically something that it is useless for both developers and for

> production. I wonder why they chose a crap default like that...


Each projects have their own opinion on this. I believe debugoptimize is the
right default. Here's how GStreamer project is setup (very first line of the
meson code):

project('gstreamer', 'c',
  version : '1.19.1.1',
  meson_version : '>= 0.54',
  default_options : [ 'warning_level=1',
                      'buildtype=debugoptimized' ])

This is trivially straightforward and I understood Ariel will fix it in next
version. Thanks for spotting.

> 

> > With this configuration the installtion

> > sizes are not that different:

> > 

> >   $ du -s installation_m*

> >   37068	installation_make

> >   37848	installation_meson

> 

> It sounds a lot more coherent.

> 

> > In this case the difference is related to libtool `.la` files not being

> > generated by meson and gconv/ only installed by meson. The latest is

> > probably a feature being only detected by meson in this case, will check

> > that out.

> 

> It was opted to not enable gconv by default, as similar patchset - needed

> to support ARIB STD B-24 charset used by Japanese digital TV - was sent to 

> gconv upstream (not sure if it was merged or not). On other words, the 

> contrib/gconv stuff is independent of v4l-utils itself: it basically

> adds an extra charset to be used by gconv upstream.

> 

> The only reason why it is present at v4l2-utils is that this charset

> is present on ISDB tables on TV broadcasts in Japan. The gconv library

> needs to support it, in order to  convert characters from MPEG tables

> to the system's charset.

> 

> Btw, that's basically one of the reasons why we print a summary of the

> options when ./configure runs.


We can and should definitely do that same.

> 

> Thanks,

> Mauro
Laurent Pinchart June 16, 2021, 3:11 p.m. UTC | #11
On Wed, Jun 16, 2021 at 04:59:47PM +0200, Mauro Carvalho Chehab wrote:
> Em Wed, 16 Jun 2021 11:26:10 -0300 Ariel D'Alessandro escreveu:

> 

> > Kieran,

> > 

> 

> > >  - Meson decided to default libdir to

> > >      /usr/local/lib/x86_64-linux-gnu

> > >    while autoconf used

> > >      /usr/local/lib

> > >    (it's likely handled by the package managers anyway)  

> > 

> >   $ meson configure ../build-meson/ | grep libdir

> >     libdir    lib/x86_64-linux-gnu    Library directory

> 

> The default isn't nice, and will likely cause troubles for the users, as 

> /usr/local/lib/x86_64-linux-gnu would hardly be at the ld.so.conf list of 

> paths for most people. So, when one would try to run a program, it will

> fail.


This depends on the distribution. On Debian-like distributions, to
enable multi-arch support, an arch-specific directory is used. Debian
adds it to ld.so.conf (for both /usr/lib and /usr/local/lib). On other
distributions, /usr/lib or /usr/lib64 will be used by meson.

> > As mentioned in another response. Autotools is building with `-g -O2` by

> > default, that'd the equivalent meson configuration option

> > --buildtype=debugoptimized. 

> 

> I can't understand the Meson's default... no optimization and no debug!

> Basically something that it is useless for both developers and for

> production. I wonder why they chose a crap default like that...


The default is debug, so it includes debug (and no optimization). This
can be overridden at the project level with

default_options : ['buildtype=debugoptimized']

in the project() function.

> > With this configuration the installtion

> > sizes are not that different:

> > 

> >   $ du -s installation_m*

> >   37068	installation_make

> >   37848	installation_meson

> 

> It sounds a lot more coherent.

> 

> > In this case the difference is related to libtool `.la` files not being

> > generated by meson and gconv/ only installed by meson. The latest is

> > probably a feature being only detected by meson in this case, will check

> > that out.

> 

> It was opted to not enable gconv by default, as similar patchset - needed

> to support ARIB STD B-24 charset used by Japanese digital TV - was sent to 

> gconv upstream (not sure if it was merged or not). On other words, the 

> contrib/gconv stuff is independent of v4l-utils itself: it basically

> adds an extra charset to be used by gconv upstream.

> 

> The only reason why it is present at v4l2-utils is that this charset

> is present on ISDB tables on TV broadcasts in Japan. The gconv library

> needs to support it, in order to  convert characters from MPEG tables

> to the system's charset.

> 

> Btw, that's basically one of the reasons why we print a summary of the

> options when ./configure runs.


-- 
Regards,

Laurent Pinchart
Laurent Pinchart Oct. 4, 2021, 2:24 p.m. UTC | #12
Hello,

On Wed, May 12, 2021 at 03:49:41PM -0300, Ariel D'Alessandro wrote:
> Hi all,

> 

> Another attempt to support meson build, addressing comments/fixes from

> reviewers.

> 

> This patchset was developed on top of v4l-utils current master branch:

> 

>     commit f0c7e3d71eaf4182bae7eb3ee0e43b4eeb047ea9

>     Author: Hans Verkuil <hverkuil-cisco@xs4all.nl>

> 

>         v4l2-ctl: add '--set-edid type=list' support

> 

> You can find the patchset pushed to the following branch:

> 

>     https://gitlab.collabora.com/adalessandro/v4l-utils/-/tree/v4l-utils-meson-v5

> 

> Feedback appreciated as always :-)


Reviving a bit of an old thread, I'd like to know what is blocking the
merge of this series. In particular, Gregor, as you maintain v4l-utils,
are you happy with this series, or do you have a list of features you
want to see implemented (or of bugs that needs to be fixed) before you
will consider merging it ?

> Changes from v4:

> 

>   * Dropped install_subdir() work-around to install empty dir. Supported

>     now in meson v0.57.

>   * Bump to meson v0.57. Replaced deprecated methods.

>   * Added override_dependency() calls on libraries.

>   * Properly check for bpf and SDL2 dependencies.

>   * Removed libraries_private field from libv4lconvert pkgconfig.

>   * Documented meson static builds support.

>   * Set default compiler standard options.

>   * Added bpf check in keytable.

> 

> Changes from v3:

> 

>   * Split Doxygen support patch.

>   * Properly generate config.h configuration file.

> 

> Changes from v2:

> 

>   * Updated to current master branch.

>   * Moved README to markdown syntax.

>   * Documented meson build.

>   * Set PACKAGE_VERSION config macro as quoted.

> 

> Changes from v1:

> 

>   * Updated project version to 1.21.0.

>   * Fixed clang includes in keytable bpf compilation.

>   * Improved variable reutilization in meson scripts.        

>   * Set libraries version and soversion.                     

>   * Control symbol visibility.                  

>   * Install empty 'protocols' directory in keytable user dir.

>   * Fixed svg filenames in qv4l2 and qvidcap.                         

>   * Added support for Doxygen documentation (html and man).

>   * Updated required meson version to v0.53 (for fs module).       

>   * Added new files to EXTRA_DIST in each Makefile.am.              

> 

> Regards,

> 

> Ariel D'Alessandro (5):

>   Move README to markdown syntax

>   Add support for meson building

>   Copy Doxygen configuration file to doc/

>   meson: Add support for doxygen documentation

>   Makefile.am: Distribute meson related files

> 

>  .gitignore                                    |    1 +

>  INSTALL.meson.md                              |  142 +

>  Makefile.am                                   |    5 +-

>  README                                        |  274 --

>  README.md                                     |  332 +++

>  contrib/Makefile.am                           |    3 +-

>  contrib/cobalt-ctl/Makefile.am                |    2 +

>  contrib/cobalt-ctl/meson.build                |    8 +

>  contrib/decode_tm6000/Makefile.am             |    2 +

>  contrib/decode_tm6000/meson.build             |   14 +

>  contrib/gconv/Makefile.am                     |    2 +-

>  contrib/gconv/meson.build                     |   44 +

>  contrib/meson.build                           |   13 +

>  contrib/rds-saa6588/Makefile.am               |    2 +

>  contrib/rds-saa6588/meson.build               |    7 +

>  contrib/test/Makefile.am                      |    3 +-

>  contrib/test/meson.build                      |  143 +

>  contrib/xc3028-firmware/Makefile.am           |    2 +-

>  contrib/xc3028-firmware/meson.build           |   11 +

>  doc/Doxyfile.in                               | 2352 +++++++++++++++++

>  doc/meson.build                               |   34 +

>  lib/Makefile.am                               |    2 +-

>  lib/libdvbv5/Makefile.am                      |    2 +-

>  lib/libdvbv5/meson.build                      |  159 ++

>  lib/libv4l-mplane/Makefile.am                 |    2 +

>  lib/libv4l-mplane/meson.build                 |   23 +

>  lib/libv4l1/Makefile.am                       |    2 +-

>  lib/libv4l1/meson.build                       |   62 +

>  lib/libv4l2/Makefile.am                       |    2 +-

>  lib/libv4l2/meson.build                       |   71 +

>  lib/libv4l2rds/Makefile.am                    |    2 +

>  lib/libv4l2rds/meson.build                    |   37 +

>  lib/libv4lconvert/Makefile.am                 |    2 +-

>  lib/libv4lconvert/meson.build                 |  117 +

>  lib/meson.build                               |   11 +

>  libdvbv5-po/meson.build                       |    3 +

>  meson.build                                   |  334 +++

>  meson_options.txt                             |   50 +

>  utils/Makefile.am                             |    2 +-

>  utils/cec-compliance/Makefile.am              |    2 +-

>  utils/cec-compliance/meson.build              |   22 +

>  utils/cec-ctl/Makefile.am                     |    2 +-

>  utils/cec-ctl/meson.build                     |   18 +

>  utils/cec-follower/Makefile.am                |    2 +-

>  utils/cec-follower/meson.build                |   19 +

>  utils/cx18-ctl/Makefile.am                    |    2 +

>  utils/cx18-ctl/meson.build                    |    8 +

>  utils/dvb/Makefile.am                         |    2 +-

>  utils/dvb/meson.build                         |   70 +

>  utils/gen_media_bus_format_codes.sh           |    7 +

>  utils/gen_media_bus_format_names.sh           |    7 +

>  utils/ir-ctl/Makefile.am                      |    2 +

>  utils/ir-ctl/meson.build                      |   23 +

>  utils/ivtv-ctl/Makefile.am                    |    2 +

>  utils/ivtv-ctl/meson.build                    |   13 +

>  utils/keytable/Makefile.am                    |    3 +-

>  utils/keytable/bpf_protocols/Makefile.am      |    3 +-

>  .../bpf_protocols/clang_sys_includes.sh       |    9 +

>  utils/keytable/bpf_protocols/meson.build      |   31 +

>  utils/keytable/meson.build                    |   81 +

>  utils/keytable/rc_keymaps/meson.build         |  151 ++

>  utils/libcecutil/Makefile.am                  |    2 +-

>  utils/libcecutil/meson.build                  |   45 +

>  utils/libmedia_dev/Makefile.am                |    2 +-

>  utils/libmedia_dev/meson.build                |   14 +

>  utils/libv4l2util/Makefile.am                 |    2 +-

>  utils/libv4l2util/meson.build                 |   16 +

>  utils/media-ctl/Makefile.am                   |    2 +

>  utils/media-ctl/meson.build                   |   43 +

>  utils/meson.build                             |   46 +

>  utils/qv4l2/Makefile.am                       |    3 +-

>  utils/qv4l2/meson.build                       |   80 +

>  utils/qvidcap/Makefile.am                     |    3 +-

>  utils/qvidcap/meson.build                     |   82 +

>  utils/rds-ctl/Makefile.am                     |    1 +

>  utils/rds-ctl/meson.build                     |   13 +

>  utils/v4l2-compliance/Makefile.am             |    2 +-

>  utils/v4l2-compliance/meson.build             |   58 +

>  utils/v4l2-ctl/Makefile.am                    |    2 +-

>  utils/v4l2-ctl/meson.build                    |   75 +

>  utils/v4l2-dbg/Makefile.am                    |    2 +-

>  utils/v4l2-dbg/meson.build                    |   16 +

>  utils/v4l2-sysfs-path/Makefile.am             |    2 +

>  utils/v4l2-sysfs-path/meson.build             |   14 +

>  v4l-utils-po/meson.build                      |    3 +

>  85 files changed, 4987 insertions(+), 299 deletions(-)

>  create mode 100644 INSTALL.meson.md

>  delete mode 100644 README

>  create mode 100644 README.md

>  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 100644 doc/Doxyfile.in

>  create mode 100644 doc/meson.build

>  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


-- 
Regards,

Laurent Pinchart
Laurent Pinchart Dec. 15, 2021, 9:05 p.m. UTC | #13
Hi Gregor,

On Mon, Oct 04, 2021 at 05:24:21PM +0300, Laurent Pinchart wrote:
> On Wed, May 12, 2021 at 03:49:41PM -0300, Ariel D'Alessandro wrote:
> > Hi all,
> > 
> > Another attempt to support meson build, addressing comments/fixes from
> > reviewers.
> > 
> > This patchset was developed on top of v4l-utils current master branch:
> > 
> >     commit f0c7e3d71eaf4182bae7eb3ee0e43b4eeb047ea9
> >     Author: Hans Verkuil <hverkuil-cisco@xs4all.nl>
> > 
> >         v4l2-ctl: add '--set-edid type=list' support
> > 
> > You can find the patchset pushed to the following branch:
> > 
> >     https://gitlab.collabora.com/adalessandro/v4l-utils/-/tree/v4l-utils-meson-v5
> > 
> > Feedback appreciated as always :-)
> 
> Reviving a bit of an old thread, I'd like to know what is blocking the
> merge of this series. In particular, Gregor, as you maintain v4l-utils,
> are you happy with this series, or do you have a list of features you
> want to see implemented (or of bugs that needs to be fixed) before you
> will consider merging it ?

Ping if I may.

Ariel, in case it can be useful, I've pushed

	git://linuxtv.org/pinchartl/v4l-utils.git meson

with two fixups.

> > Changes from v4:
> > 
> >   * Dropped install_subdir() work-around to install empty dir. Supported
> >     now in meson v0.57.
> >   * Bump to meson v0.57. Replaced deprecated methods.
> >   * Added override_dependency() calls on libraries.
> >   * Properly check for bpf and SDL2 dependencies.
> >   * Removed libraries_private field from libv4lconvert pkgconfig.
> >   * Documented meson static builds support.
> >   * Set default compiler standard options.
> >   * Added bpf check in keytable.
> > 
> > Changes from v3:
> > 
> >   * Split Doxygen support patch.
> >   * Properly generate config.h configuration file.
> > 
> > Changes from v2:
> > 
> >   * Updated to current master branch.
> >   * Moved README to markdown syntax.
> >   * Documented meson build.
> >   * Set PACKAGE_VERSION config macro as quoted.
> > 
> > Changes from v1:
> > 
> >   * Updated project version to 1.21.0.
> >   * Fixed clang includes in keytable bpf compilation.
> >   * Improved variable reutilization in meson scripts.        
> >   * Set libraries version and soversion.                     
> >   * Control symbol visibility.                  
> >   * Install empty 'protocols' directory in keytable user dir.
> >   * Fixed svg filenames in qv4l2 and qvidcap.                         
> >   * Added support for Doxygen documentation (html and man).
> >   * Updated required meson version to v0.53 (for fs module).       
> >   * Added new files to EXTRA_DIST in each Makefile.am.              
> > 
> > Regards,
> > 
> > Ariel D'Alessandro (5):
> >   Move README to markdown syntax
> >   Add support for meson building
> >   Copy Doxygen configuration file to doc/
> >   meson: Add support for doxygen documentation
> >   Makefile.am: Distribute meson related files
> > 
> >  .gitignore                                    |    1 +
> >  INSTALL.meson.md                              |  142 +
> >  Makefile.am                                   |    5 +-
> >  README                                        |  274 --
> >  README.md                                     |  332 +++
> >  contrib/Makefile.am                           |    3 +-
> >  contrib/cobalt-ctl/Makefile.am                |    2 +
> >  contrib/cobalt-ctl/meson.build                |    8 +
> >  contrib/decode_tm6000/Makefile.am             |    2 +
> >  contrib/decode_tm6000/meson.build             |   14 +
> >  contrib/gconv/Makefile.am                     |    2 +-
> >  contrib/gconv/meson.build                     |   44 +
> >  contrib/meson.build                           |   13 +
> >  contrib/rds-saa6588/Makefile.am               |    2 +
> >  contrib/rds-saa6588/meson.build               |    7 +
> >  contrib/test/Makefile.am                      |    3 +-
> >  contrib/test/meson.build                      |  143 +
> >  contrib/xc3028-firmware/Makefile.am           |    2 +-
> >  contrib/xc3028-firmware/meson.build           |   11 +
> >  doc/Doxyfile.in                               | 2352 +++++++++++++++++
> >  doc/meson.build                               |   34 +
> >  lib/Makefile.am                               |    2 +-
> >  lib/libdvbv5/Makefile.am                      |    2 +-
> >  lib/libdvbv5/meson.build                      |  159 ++
> >  lib/libv4l-mplane/Makefile.am                 |    2 +
> >  lib/libv4l-mplane/meson.build                 |   23 +
> >  lib/libv4l1/Makefile.am                       |    2 +-
> >  lib/libv4l1/meson.build                       |   62 +
> >  lib/libv4l2/Makefile.am                       |    2 +-
> >  lib/libv4l2/meson.build                       |   71 +
> >  lib/libv4l2rds/Makefile.am                    |    2 +
> >  lib/libv4l2rds/meson.build                    |   37 +
> >  lib/libv4lconvert/Makefile.am                 |    2 +-
> >  lib/libv4lconvert/meson.build                 |  117 +
> >  lib/meson.build                               |   11 +
> >  libdvbv5-po/meson.build                       |    3 +
> >  meson.build                                   |  334 +++
> >  meson_options.txt                             |   50 +
> >  utils/Makefile.am                             |    2 +-
> >  utils/cec-compliance/Makefile.am              |    2 +-
> >  utils/cec-compliance/meson.build              |   22 +
> >  utils/cec-ctl/Makefile.am                     |    2 +-
> >  utils/cec-ctl/meson.build                     |   18 +
> >  utils/cec-follower/Makefile.am                |    2 +-
> >  utils/cec-follower/meson.build                |   19 +
> >  utils/cx18-ctl/Makefile.am                    |    2 +
> >  utils/cx18-ctl/meson.build                    |    8 +
> >  utils/dvb/Makefile.am                         |    2 +-
> >  utils/dvb/meson.build                         |   70 +
> >  utils/gen_media_bus_format_codes.sh           |    7 +
> >  utils/gen_media_bus_format_names.sh           |    7 +
> >  utils/ir-ctl/Makefile.am                      |    2 +
> >  utils/ir-ctl/meson.build                      |   23 +
> >  utils/ivtv-ctl/Makefile.am                    |    2 +
> >  utils/ivtv-ctl/meson.build                    |   13 +
> >  utils/keytable/Makefile.am                    |    3 +-
> >  utils/keytable/bpf_protocols/Makefile.am      |    3 +-
> >  .../bpf_protocols/clang_sys_includes.sh       |    9 +
> >  utils/keytable/bpf_protocols/meson.build      |   31 +
> >  utils/keytable/meson.build                    |   81 +
> >  utils/keytable/rc_keymaps/meson.build         |  151 ++
> >  utils/libcecutil/Makefile.am                  |    2 +-
> >  utils/libcecutil/meson.build                  |   45 +
> >  utils/libmedia_dev/Makefile.am                |    2 +-
> >  utils/libmedia_dev/meson.build                |   14 +
> >  utils/libv4l2util/Makefile.am                 |    2 +-
> >  utils/libv4l2util/meson.build                 |   16 +
> >  utils/media-ctl/Makefile.am                   |    2 +
> >  utils/media-ctl/meson.build                   |   43 +
> >  utils/meson.build                             |   46 +
> >  utils/qv4l2/Makefile.am                       |    3 +-
> >  utils/qv4l2/meson.build                       |   80 +
> >  utils/qvidcap/Makefile.am                     |    3 +-
> >  utils/qvidcap/meson.build                     |   82 +
> >  utils/rds-ctl/Makefile.am                     |    1 +
> >  utils/rds-ctl/meson.build                     |   13 +
> >  utils/v4l2-compliance/Makefile.am             |    2 +-
> >  utils/v4l2-compliance/meson.build             |   58 +
> >  utils/v4l2-ctl/Makefile.am                    |    2 +-
> >  utils/v4l2-ctl/meson.build                    |   75 +
> >  utils/v4l2-dbg/Makefile.am                    |    2 +-
> >  utils/v4l2-dbg/meson.build                    |   16 +
> >  utils/v4l2-sysfs-path/Makefile.am             |    2 +
> >  utils/v4l2-sysfs-path/meson.build             |   14 +
> >  v4l-utils-po/meson.build                      |    3 +
> >  85 files changed, 4987 insertions(+), 299 deletions(-)
> >  create mode 100644 INSTALL.meson.md
> >  delete mode 100644 README
> >  create mode 100644 README.md
> >  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 100644 doc/Doxyfile.in
> >  create mode 100644 doc/meson.build
> >  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
Laurent Pinchart Dec. 15, 2021, 9:07 p.m. UTC | #14
On Thu, Nov 18, 2021 at 12:09:26PM +0200, Tomi Valkeinen wrote:
> On 18/11/2021 11:03, Tomi Valkeinen wrote:
> 
> > I was testing this (well, I'm using it, as I can't get the autoconf work 
> > with
> > cross-compilation..), and I see this problem if gconv is enabled when
> > cross-compiling for arm (buildroot system):
> > 
> > [1/2] Linking target contrib/gconv/EN300-468-TAB00.so
> > FAILED: contrib/gconv/EN300-468-TAB00.so
> > /home/tomba/work/buildroot/output32/host/bin/arm-buildroot-linux-gnueabihf-gcc  
> > -o contrib/gconv/EN300-468-TAB00.so 
> > contrib/gconv/EN300-468-TAB00.so.p/en300-468-tab00.c.o -Wl,--as-needed 
> > -Wl,--allow-shlib-undefined -shared -fPIC 
> > -Wl,-rpath,/usr/lib/x86_64-linux-gnu/gconv 
> > -Wl,-rpath-link,/usr/lib/x86_64-linux-gnu/gconv -Wl,--start-group 
> > /usr/lib/x86_64-linux-gnu/gconv/libJIS.so 
> > /usr/lib/x86_64-linux-gnu/gconv/libJISX0213.so -Wl,--end-group
> > /usr/lib/x86_64-linux-gnu/gconv/libJIS.so: file not recognized: file 
> > format not recognized
> > collect2: error: ld returned 1 exit status
> > [2/2] Linking target contrib/gconv/ARIB-STD-B24.so
> > FAILED: contrib/gconv/ARIB-STD-B24.so
> > /home/tomba/work/buildroot/output32/host/bin/arm-buildroot-linux-gnueabihf-gcc  
> > -o contrib/gconv/ARIB-STD-B24.so 
> > contrib/gconv/ARIB-STD-B24.so.p/arib-std-b24.c.o -Wl,--as-needed 
> > -Wl,--allow-shlib-undefined -shared -fPIC 
> > -Wl,-rpath,/usr/lib/x86_64-linux-gnu/gconv 
> > -Wl,-rpath-link,/usr/lib/x86_64-linux-gnu/gconv -Wl,--start-group 
> > /usr/lib/x86_64-linux-gnu/gconv/libJIS.so 
> > /usr/lib/x86_64-linux-gnu/gconv/libJISX0213.so -Wl,--end-group
> > /usr/lib/x86_64-linux-gnu/gconv/libJIS.so: file not recognized: file 
> > format not recognized
> 
> You can ignore the above, I think it was an error in my meson cross file.

If anyone runs into the same issue, it's likely caused by a missing
sys_root option in the cross file.
Laurent Pinchart Dec. 15, 2021, 9:10 p.m. UTC | #15
Hi Mauro,

As I still haven't given up on getting this merged, I'd like to know
what you would consider to be missing. Could you share a checklist of
features that are needed and/or issues to be fixed for you to accept
this series ?

On Wed, May 12, 2021 at 03:49:41PM -0300, Ariel D'Alessandro wrote:
> Hi all,
> 
> Another attempt to support meson build, addressing comments/fixes from
> reviewers.
> 
> This patchset was developed on top of v4l-utils current master branch:
> 
>     commit f0c7e3d71eaf4182bae7eb3ee0e43b4eeb047ea9
>     Author: Hans Verkuil <hverkuil-cisco@xs4all.nl>
> 
>         v4l2-ctl: add '--set-edid type=list' support
> 
> You can find the patchset pushed to the following branch:
> 
>     https://gitlab.collabora.com/adalessandro/v4l-utils/-/tree/v4l-utils-meson-v5
> 
> Feedback appreciated as always :-)
> 
> Changes from v4:
> 
>   * Dropped install_subdir() work-around to install empty dir. Supported
>     now in meson v0.57.
>   * Bump to meson v0.57. Replaced deprecated methods.
>   * Added override_dependency() calls on libraries.
>   * Properly check for bpf and SDL2 dependencies.
>   * Removed libraries_private field from libv4lconvert pkgconfig.
>   * Documented meson static builds support.
>   * Set default compiler standard options.
>   * Added bpf check in keytable.
> 
> Changes from v3:
> 
>   * Split Doxygen support patch.
>   * Properly generate config.h configuration file.
> 
> Changes from v2:
> 
>   * Updated to current master branch.
>   * Moved README to markdown syntax.
>   * Documented meson build.
>   * Set PACKAGE_VERSION config macro as quoted.
> 
> Changes from v1:
> 
>   * Updated project version to 1.21.0.
>   * Fixed clang includes in keytable bpf compilation.
>   * Improved variable reutilization in meson scripts.        
>   * Set libraries version and soversion.                     
>   * Control symbol visibility.                  
>   * Install empty 'protocols' directory in keytable user dir.
>   * Fixed svg filenames in qv4l2 and qvidcap.                         
>   * Added support for Doxygen documentation (html and man).
>   * Updated required meson version to v0.53 (for fs module).       
>   * Added new files to EXTRA_DIST in each Makefile.am.              
> 
> Regards,
> 
> Ariel D'Alessandro (5):
>   Move README to markdown syntax
>   Add support for meson building
>   Copy Doxygen configuration file to doc/
>   meson: Add support for doxygen documentation
>   Makefile.am: Distribute meson related files
> 
>  .gitignore                                    |    1 +
>  INSTALL.meson.md                              |  142 +
>  Makefile.am                                   |    5 +-
>  README                                        |  274 --
>  README.md                                     |  332 +++
>  contrib/Makefile.am                           |    3 +-
>  contrib/cobalt-ctl/Makefile.am                |    2 +
>  contrib/cobalt-ctl/meson.build                |    8 +
>  contrib/decode_tm6000/Makefile.am             |    2 +
>  contrib/decode_tm6000/meson.build             |   14 +
>  contrib/gconv/Makefile.am                     |    2 +-
>  contrib/gconv/meson.build                     |   44 +
>  contrib/meson.build                           |   13 +
>  contrib/rds-saa6588/Makefile.am               |    2 +
>  contrib/rds-saa6588/meson.build               |    7 +
>  contrib/test/Makefile.am                      |    3 +-
>  contrib/test/meson.build                      |  143 +
>  contrib/xc3028-firmware/Makefile.am           |    2 +-
>  contrib/xc3028-firmware/meson.build           |   11 +
>  doc/Doxyfile.in                               | 2352 +++++++++++++++++
>  doc/meson.build                               |   34 +
>  lib/Makefile.am                               |    2 +-
>  lib/libdvbv5/Makefile.am                      |    2 +-
>  lib/libdvbv5/meson.build                      |  159 ++
>  lib/libv4l-mplane/Makefile.am                 |    2 +
>  lib/libv4l-mplane/meson.build                 |   23 +
>  lib/libv4l1/Makefile.am                       |    2 +-
>  lib/libv4l1/meson.build                       |   62 +
>  lib/libv4l2/Makefile.am                       |    2 +-
>  lib/libv4l2/meson.build                       |   71 +
>  lib/libv4l2rds/Makefile.am                    |    2 +
>  lib/libv4l2rds/meson.build                    |   37 +
>  lib/libv4lconvert/Makefile.am                 |    2 +-
>  lib/libv4lconvert/meson.build                 |  117 +
>  lib/meson.build                               |   11 +
>  libdvbv5-po/meson.build                       |    3 +
>  meson.build                                   |  334 +++
>  meson_options.txt                             |   50 +
>  utils/Makefile.am                             |    2 +-
>  utils/cec-compliance/Makefile.am              |    2 +-
>  utils/cec-compliance/meson.build              |   22 +
>  utils/cec-ctl/Makefile.am                     |    2 +-
>  utils/cec-ctl/meson.build                     |   18 +
>  utils/cec-follower/Makefile.am                |    2 +-
>  utils/cec-follower/meson.build                |   19 +
>  utils/cx18-ctl/Makefile.am                    |    2 +
>  utils/cx18-ctl/meson.build                    |    8 +
>  utils/dvb/Makefile.am                         |    2 +-
>  utils/dvb/meson.build                         |   70 +
>  utils/gen_media_bus_format_codes.sh           |    7 +
>  utils/gen_media_bus_format_names.sh           |    7 +
>  utils/ir-ctl/Makefile.am                      |    2 +
>  utils/ir-ctl/meson.build                      |   23 +
>  utils/ivtv-ctl/Makefile.am                    |    2 +
>  utils/ivtv-ctl/meson.build                    |   13 +
>  utils/keytable/Makefile.am                    |    3 +-
>  utils/keytable/bpf_protocols/Makefile.am      |    3 +-
>  .../bpf_protocols/clang_sys_includes.sh       |    9 +
>  utils/keytable/bpf_protocols/meson.build      |   31 +
>  utils/keytable/meson.build                    |   81 +
>  utils/keytable/rc_keymaps/meson.build         |  151 ++
>  utils/libcecutil/Makefile.am                  |    2 +-
>  utils/libcecutil/meson.build                  |   45 +
>  utils/libmedia_dev/Makefile.am                |    2 +-
>  utils/libmedia_dev/meson.build                |   14 +
>  utils/libv4l2util/Makefile.am                 |    2 +-
>  utils/libv4l2util/meson.build                 |   16 +
>  utils/media-ctl/Makefile.am                   |    2 +
>  utils/media-ctl/meson.build                   |   43 +
>  utils/meson.build                             |   46 +
>  utils/qv4l2/Makefile.am                       |    3 +-
>  utils/qv4l2/meson.build                       |   80 +
>  utils/qvidcap/Makefile.am                     |    3 +-
>  utils/qvidcap/meson.build                     |   82 +
>  utils/rds-ctl/Makefile.am                     |    1 +
>  utils/rds-ctl/meson.build                     |   13 +
>  utils/v4l2-compliance/Makefile.am             |    2 +-
>  utils/v4l2-compliance/meson.build             |   58 +
>  utils/v4l2-ctl/Makefile.am                    |    2 +-
>  utils/v4l2-ctl/meson.build                    |   75 +
>  utils/v4l2-dbg/Makefile.am                    |    2 +-
>  utils/v4l2-dbg/meson.build                    |   16 +
>  utils/v4l2-sysfs-path/Makefile.am             |    2 +
>  utils/v4l2-sysfs-path/meson.build             |   14 +
>  v4l-utils-po/meson.build                      |    3 +
>  85 files changed, 4987 insertions(+), 299 deletions(-)
>  create mode 100644 INSTALL.meson.md
>  delete mode 100644 README
>  create mode 100644 README.md
>  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 100644 doc/Doxyfile.in
>  create mode 100644 doc/meson.build
>  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