Re: desktop-devel-list Digest, Vol 154, Issue 9



Please do not disturb.

Sent from my HTC

On Feb 11, 2017 8:26 PM, desktop-devel-list-request gnome org wrote:

Send desktop-devel-list mailing list submissions to 
desktop-devel-list gnome org 

To subscribe or unsubscribe via the World Wide Web, visit 
https://mail.gnome.org/mailman/listinfo/desktop-devel-list 
or, via email, send a message with subject or body 'help' to 
desktop-devel-list-request gnome org 

You can reach the person managing the list at 
desktop-devel-list-owner gnome org 

When replying, please edit your Subject line so it is more specific 
than "Re: Contents of desktop-devel-list digest..." 


Today's Topics: 

   1. Re: Equivalent of recursive make with meson/ninja? 
      (Tim-Philipp M?ller) 
   2. Re: Help building Gstreamer 1.10 (Sam Thursfield) 
   3. Re: Equivalent of recursive make with meson/ninja? 
      (S?bastien Wilmet) 
   4. Re: Equivalent of recursive make with meson/ninja? 
      (Nirbheek Chauhan) 
   5. Re: Help building Gstreamer 1.10 (Sebastian Geiger (Lanoxx)) 
   6. Re: Equivalent of recursive make with meson/ninja? 
      (S?bastien Wilmet) 


---------------------------------------------------------------------- 

Message: 1 
Date: Sat, 11 Feb 2017 11:54:40 +0000 
From: Tim-Philipp M?ller <t i m zen co uk> 
To: desktop-devel-list gnome org 
Subject: Re: Equivalent of recursive make with meson/ninja? 
Message-ID: <1486814080 8973 1 camel zen co uk> 
Content-Type: text/plain; charset="UTF-8" 

On Sat, 2017-02-11 at 12:31 +0100, S?bastien Wilmet wrote: 

Hi S?bastien, 


With the Autotools, recursive make is very convenient to re-build 
only the stuff present in a sub-directory. 

And with builddir == srcdir, it's convenient to do things like: 
$ cd src/ 
$ make 
$ touch file-that-i-modified.c 
$ make 

With meson/ninja, everything will end up in one single build.ninja file 
(the equivalent to a Makefile). 

You'd just do 

touch foo.c 
ninja 

and it will only recompile/relink the bits that have changed, and 
nothing else. It will be very very fast in most cases. 

You can also do: 

  touch foo.c 
  ninja?-C ../build 

if you prefer to be in the source dir. 

If you haven't got a full build yet and only want to build a single 
target without building more than absolutely needed you can also just 
do 

  ninja -C ../build src/libfoobar.so.1.2.3 

or somesuch (tab completion for targets should just work if you have 
the right bits installed), but I'd expect that the normal use case is 
that you do a full build and then just rebuild when things change. 

You'll also notice that 'ninja' is near-instantaneous if there are no 
changes, compared to recursive make which can take tens of seconds to 
do nothing in that case. (Just as a data point, why the recursive ninja 
thing is not really needed.) 


I've tried this command in a project using meson: 
``` 
$ meson . 
Error during basic setup: 

Source and build directories must not be the same. Create a pristine 
build directory. 
``` 

So meson doesn't support builddir == srcdir. This is a no-go for me. 

That is correct, and unlikely to change, as I understand it. 

For me it was also a bit annoying/hasslesome at the beginning, but I 
got used to it very quickly, and it has many advantages too. 


And I suppose meson/ninja doesn't support recursive ninja either (and 
anyway recursive ninja with builddir != srcdir would not be 
convenient). 

Recursive ninja doesn't really make sense the way meson/ninja work, and 
it's also not needed for what you want to do. Meson supports 'recursive 
meson.build' (which is the both-in-one equivalent of configure.ac + 
Makefile.am) though. 

Cheers 
-Tim 



------------------------------ 

Message: 2 
Date: Sat, 11 Feb 2017 12:28:31 +0000 
From: Sam Thursfield <ssssam gmail com> 
To: "Sebastian Geiger (Lanoxx)" <lanoxx gmx net> 
Cc: desktop-devel-list <desktop-devel-list gnome org> 
Subject: Re: Help building Gstreamer 1.10 
Message-ID: 
<CAGDGXw7Hx7ucDPn8UaMkFBBKr1ZVk4mumeH5DD3GqWk8tnRN6w mail gmail com> 
Content-Type: text/plain; charset=UTF-8 

Hi Lanoxx 

On 2/11/17, Sebastian Geiger (Lanoxx) <lanoxx gmx net> wrote: 
Hi, 

I was trying to build gstreamer 1.10 today with jhbuild using the 3.22 
module set, and I got the following error: 
... 

I've seen problems like this before which were caused by: a new symbol 
being added in the source tree, an older version of the library being 
installed, and the g-ir-scanner linking stuff against the old version 
that is installed. 

If 'gst_element_message_full_with_details' and 
'gst_make_element_message_details' were recently added then that's 
probably what's happening here. 

To work around the issue you can do `make uninstall` in your 
/home/user/Documents/Code/jh-gnome-checkout/gstreamer/ directory, then 
try jhbuild again. The g-ir-scanner should now be forced to link 
against the new libraries in the source tree. 

This is an annoying bug, I'm not sure what causes it. Possibly some 
issue in the GI/Autotools integration. 

Sam 


------------------------------ 

Message: 3 
Date: Sat, 11 Feb 2017 14:02:19 +0100 
From: S?bastien Wilmet <swilmet gnome org> 
To: desktop-devel-list gnome org 
Subject: Re: Equivalent of recursive make with meson/ninja? 
Message-ID: <20170211130219 GA12490 gamma lan> 
Content-Type: text/plain; charset=iso-8859-1 

On Sat, Feb 11, 2017 at 11:54:40AM +0000, Tim-Philipp M?ller wrote: 
With meson/ninja, everything will end up in one single build.ninja file 
(the equivalent to a Makefile). 

You'd just do 

  touch foo.c 
  ninja 

In two different terminal tabs though. 

and it will only recompile/relink the bits that have changed, and 
nothing else. It will be very very fast in most cases. 

It'll also relink all the tests and rebuild the docs (GTK-Doc is very 
slow). 

You can also do: 

   touch foo.c 
   ninja?-C ../build 

if you prefer to be in the source dir. 

Too long to type. 

If you haven't got a full build yet and only want to build a single 
target without building more than absolutely needed you can also just 
do 

   ninja -C ../build src/libfoobar.so.1.2.3 

or somesuch (tab completion for targets should just work if you have 
the right bits installed), but I'd expect that the normal use case is 
that you do a full build and then just rebuild when things change. 

Yes I always do a full build first. autogen.sh/configure takes a lot of 
time compared to meson, but once the full build is done, I just run make 
commands which is fast enough. 

You'll also notice that 'ninja' is near-instantaneous if there are no 
changes, compared to recursive make which can take tens of seconds to 
do nothing in that case. (Just as a data point, why the recursive ninja 
thing is not really needed.) 

What I don't like to do is to scroll up the build output to see the 
warnings I'm interested in. 

-- 
S?bastien 


------------------------------ 

Message: 4 
Date: Sat, 11 Feb 2017 19:03:01 +0530 
From: Nirbheek Chauhan <nirbheek chauhan gmail com> 
To: desktop-devel-list <desktop-devel-list gnome org> 
Subject: Re: Equivalent of recursive make with meson/ninja? 
Message-ID: 
<CADqQcK6SK8Y74q5VNuC-S+GUXxVio8VYW_=0oJ39nvKju0Mthw mail gmail com> 
Content-Type: text/plain; charset="utf-8" 

On 11-Feb-2017 18:32, "S?bastien Wilmet" <swilmet gnome org> wrote: 

and it will only recompile/relink the bits that have changed, and 
nothing else. It will be very very fast in most cases. 

It'll also relink all the tests and rebuild the docs (GTK-Doc is very 
slow). 


Fwiw, it won't rebuild the docs since that is done at install time, not at 
compile time. It also won't relink all the tests if you specify a target 
(an executable, library, etc) to build. You can also rebuild a specific 
file by specifying the corresponding .o file, and I'm sure that can be made 
more convenient with a wrapper tool. 

I think your use-case can even be improved by writing such a tool that will 
rebuild only a specific file. This would actually be faster than make even 
because it wouldn't relink anything in that directory unless you want it 
to. 

Would you like to take a shot at it? It's really simpler than it might 
seem. Just a matter of reading the compiler db (json file) and calling 
ninja with the right argument. :) 

IMO this is one of the major advantages of Meson. It actually provides an 
API that you can use to support and even improve your custom workflows. 

Cheers, 
Nirbheek 
-------------- next part -------------- 
An HTML attachment was scrubbed... 
URL: <https://mail.gnome.org/archives/desktop-devel-list/attachments/20170211/6620e151/attachment.html> 

------------------------------ 

Message: 5 
Date: Sat, 11 Feb 2017 14:53:53 +0100 
From: "Sebastian Geiger (Lanoxx)" <lanoxx gmx net> 
To: desktop-devel-list <desktop-devel-list gnome org> 
Subject: Re: Help building Gstreamer 1.10 
Message-ID: <8119d619-b03f-3b9a-8a99-c3fbd3a01b0d gmx net> 
Content-Type: text/plain; charset=utf-8 

Hi Sam, 

thanks for the quick answer, unfortunately make uninstall did not 
resolve the issue. When I searched for files with gstreamer in their 
name or path I still found a lot of files. In the end I removed several 
header files and so files related to gstreamer and that solved the issue. 

Could this be related to the autotools build setup? Is there a way to 
fix it? 

Cheers 

Sebastian 

On 11/02/17 13:28, Sam Thursfield wrote: 
Hi Lanoxx 

On 2/11/17, Sebastian Geiger (Lanoxx) <lanoxx gmx net> wrote: 
Hi, 

I was trying to build gstreamer 1.10 today with jhbuild using the 3.22 
module set, and I got the following error: 
... 

I've seen problems like this before which were caused by: a new symbol 
being added in the source tree, an older version of the library being 
installed, and the g-ir-scanner linking stuff against the old version 
that is installed. 

If 'gst_element_message_full_with_details' and 
'gst_make_element_message_details' were recently added then that's 
probably what's happening here. 

To work around the issue you can do `make uninstall` in your 
/home/user/Documents/Code/jh-gnome-checkout/gstreamer/ directory, then 
try jhbuild again. The g-ir-scanner should now be forced to link 
against the new libraries in the source tree. 

This is an annoying bug, I'm not sure what causes it. Possibly some 
issue in the GI/Autotools integration. 

Sam 




------------------------------ 

Message: 6 
Date: Sat, 11 Feb 2017 15:56:24 +0100 
From: S?bastien Wilmet <swilmet gnome org> 
To: desktop-devel-list gnome org 
Subject: Re: Equivalent of recursive make with meson/ninja? 
Message-ID: <20170211145624 GB12490 gamma lan> 
Content-Type: text/plain; charset=iso-8859-1 

On Sat, Feb 11, 2017 at 07:03:01PM +0530, Nirbheek Chauhan wrote: 
On 11-Feb-2017 18:32, "S?bastien Wilmet" <swilmet gnome org> wrote: 
It'll also relink all the tests and rebuild the docs (GTK-Doc is very 
slow). 

Fwiw, it won't rebuild the docs since that is done at install time, not at 
compile time. 

That is a strange thing to do, building something at install time. 

I often do: 
$ cd docs/ 
$ make clean 
$ make 

to see if there are any warnings. If it's mixed up with install output, 
it's far less convenient. 

And thanks to builddir == srcdir, I often do: 
$ cd docs/reference/ 
$ vi -o <gtk-doc-section-file> <gtk-doc-unused-file> 

to move the symbols from the 'unused' file to the section file. 

<gtk-doc-section-file> is in scrdir while <gtk-doc-unused-file> is in 
builddir. The names of those files are different for each project 
(although it's probably possible to use globs). 

But these are just examples, `touch file.c && make` was another example. 
I probably do other similar things (more rarely, without even being 
aware of it) thanks to recursive make and builddir == srcdir. Basically 
each time I want to open a built file, I'm usually already in the good 
directory. 

It also won't relink all the tests if you specify a target 
(an executable, library, etc) to build. You can also rebuild a specific 
file by specifying the corresponding .o file, and I'm sure that can be made 
more convenient with a wrapper tool. 

I think your use-case can even be improved by writing such a tool that will 
rebuild only a specific file. This would actually be faster than make even 
because it wouldn't relink anything in that directory unless you want it 
to. 

Would you like to take a shot at it? It's really simpler than it might 
seem. Just a matter of reading the compiler db (json file) and calling 
ninja with the right argument. :) 

IMO this is one of the major advantages of Meson. It actually provides an 
API that you can use to support and even improve your custom workflows. 

Mmh, yes, maybe. 

-- 
S?bastien 


------------------------------ 

Subject: Digest Footer 

_______________________________________________ 
desktop-devel-list mailing list 
desktop-devel-list gnome org 
https://mail.gnome.org/mailman/listinfo/desktop-devel-list 

------------------------------ 

End of desktop-devel-list Digest, Vol 154, Issue 9 
************************************************** 


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]