Message ID | 20210512184946.102863-1-ariel.dalessandro@collabora.com |
---|---|
Headers | show |
Series | Add support for meson building | expand |
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
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
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
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
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
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
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
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
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.
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
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
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
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
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.
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