...synth is continuing having to build a pile of ports..... Thoughts?
This is a good thing, in my view a
very good thing and characteristic of
continuous integration of such a huge collection of disparate sources. As marino points out the totality of sources required by a big program, e.g. webkit2-gtk3, change every day, sometimes every hour! FreeBSD is unique amongst the linuxes and bsd's in continuously integrating the operating system and ports. There are FreeBSD build servers continuously building each branch of the system such as 10-STABLE, and the head of the operating system, 11-CURRENT. There are also FreeBSD build servers continuously taking those latest builds of the operating system and building the latest releases of all 28,000 ports, and also the latest quarterly stable ports. On a FreeBSD system
freebsd-update and
pkg upgrade can pull from that immense body of work and quickly update local machines.
You can see the status of the latest builds on the FreeBSD package build server at
Portsmon Check for all sorts of port changes and info at
Freshports.
If you want to conduct your own local continuous integration you at least want to replicate the quality of FreeBSD in maintaining self-consistent repositories --
everything in your local repository should be built against the other things that are present. You don't want the repository to contain a package that was built on top of something that you've changed in the meantime. It has been proved by a lot of experience (e.g. with Arch Linux) that that inevitably leads to mysterious failures. Programs lock up, crash, behave bizarrely and eventually someone figures out that you "just need to rebuild X". The only trustworthy path of development is to build self-consistent repositories in the first place.
Consider what self-consistent building means by looking at the list of libraries used by webkit2-gkk3:
Code:
Shared Libs required:
libgtk-x11-2.0.so.0
libxslt.so.1
libsoup-2.4.so.1
libpango-1.0.so.0
libjpeg.so.8
libicuuc.so.55
libsqlite3.so.0
libgstapp-1.0.so.0
libcairo.so.2
libgtk-3.so.0
libxml2.so.2
libwebp.so.5
libfreetype.so.6
libcairo-gobject.so.2
libsecret-1.so.0
libatk-1.0.so.0
libgstfft-1.0.so.0
libgstreamer-1.0.so.0
libicui18n.so.55
libharfbuzz-icu.so.0
libgmodule-2.0.so.0
libgdk_pixbuf-2.0.so.0
libenchant.so.1
libgio-2.0.so.0
libXcomposite.so.1
libXt.so.6
libpangoft2-1.0.so.0
libglib-2.0.so.0
libgobject-2.0.so.0
libXrender.so.1
libGL.so.1
libharfbuzz.so.0
libEGL.so.1
libX11.so.6
libgstpbutils-1.0.so.0
libXdamage.so.1
libgstvideo-1.0.so.0
libgsttag-1.0.so.0
libgdk-x11-2.0.so.0
libpng16.so.16
libgstaudio-1.0.so.0
libintl.so.8
libfontconfig.so.1
libgstbase-1.0.so.0
libgnutls.so.28
libgdk-3.so.0
libpangocairo-1.0.so.0
If any of those libraries is changed webkit2-gtk3 should be rebuilt.
Now
pkg doesn't always re-install every package that a port depends on, it tries to figure out from library sonames if that is necessary. But sometimes programmers make significant changes in a library and neglect to renumber the library to reflect the "abi change". Maybe the library itself is ok but some ancilary script changes. It isn't always clear when it's necessary to force rebuilds. We're dealing with a huge pile of complicated interdependencies created by tens of thousands of programmers some of whom are unqualified hacks and the result is what I call not "layers" of software but a "Pile of Software" or sometimes a "Pile of Shit". So in the (correct) FreeBSD approach of continous integration even if
pkg doesn't re-install everything,
everything is in the repository -- correctly built against everything else. On FreeBSD if you do get into bizarre failures after updates you can get a
completely consistent instatllation, whether from FreeBSD binary packages or from your local
synth repository, by executing
pkg upgrade -f.
tldr: The goal of
synth or
poudriere is to build a complete, self-consistent
repository. It's a challenging goal. As everyone seems to be discovering in this thread
synth does an especially good job of it.