There is an ongoing thread "fontconfig-2.1.92 considered harmful" on
-CURRENT.
Because I have not moved to -CURRENT, I post this to -STABLE.
Since I upgraded to fontconfig-2.1.93 (on Apr 14) a lot of ports start to
complain a lot of "Cannot fork: Resource temporarily unavailable"
errors.
What resource ? I inserted top into my ports build script to notice that
a lot of processes were running. Interactive top shows all these are make !
+ top -bu -d2 -s1 0
+ sed -e /^ .*/d -e /^[ ]*$/d
+ sed 1,4d
last pid: 29052; load averages: 3.40, 2.75, 1.56 up 42+16:35:08 07:45:52
1005 processes:3 running, 999 sleeping, 3 zombie
CPU states: 0.0% user, 29.6% nice, 63.5% system, 0.4% interrupt, 6.4% idle
Mem: 34M Active, 13M Inact, 65M Wired, 5116K Cache, 22M Buf, 6340K Free
Swap: 1152M Total, 300M Used, 852M Free, 26% Inuse
After a little poking around bsd.port.mk, I found make package-depends (also
make all-depends-list) stably reproduce the problem on failing ports.
Turned out the port I tested is suffering from dependency loop that cause
repeated make calls. But why so many ports fail ? Are they all harmed by
similar loops ? So I tried to lookup ports dependency tree(s).
Voila ! Found a few circular dependencies. Since I'm not using ports-all,
and also the tool I relied on (tsort) is not the tool to primarily detect
cycles (it detects cycles only as its byproduct), this list is not exhaustive.
Most of the cycles I found so far contain XFree86-4-libraries -> fontconfig
dependency. Other circles are small : gtkhtml (it depends on itself) and
gtkhtml -> gnomecore. Also, note that {XFree86-4-libraries} and {fontconfig}
are the only minimal cutsets that resolve all the circles excepts for these
small circles (these loops are resolved by a little weird mechanism).
For brevity only the longest circles are shown. A lot of subcircles exist.
1. Small circles that don't include XFree86-4-libraries -> fontconfig.
gtkhtml -> gnomecore
2. fontconfig LIB_DEPENS on gtk12, gtkhtml, imlib and they in turn reference
XFree86-4-libraries.
All cycles include XFree86-4-libraries -> fontconfig sequence at the top
(or tail) of the sequences.
gtkhtml -> gtk12 ->
gtkhtml -> gnomecore -> gnomelibs -> scrollkeeper -> gnomehier
->
imlib -> libungif ->
imlib -> gtk12 ->
3. fontconfig directly or indirectly RUN_DEPENDS on gnomecontrolcenter
which in turn depends back to XFree86-4-libraries.
All cycles include XFree86-4-libraries -> fontconfig -> gtkhtml ->
gnomecore -> gnomecontrolcenter sequence at the top (or tail) of
the sequences. Note this pre(post)amble itself contains shortcuts
that bypass gtkhtml, gnomecore, or both.
gconf -> gtk12 ->
gconf -> oaf -> gnomehier ->
gconf -> oaf -> gtk12 ->
gdk-pixbuf -> gtk12 ->
gnomecanvas -> gdk-pixbuf -> gtk12 ->
gnomecanvas -> gnomelibs -> scrollkeeper -> gnomehier ->
gnomevfs -> gconf -> oaf -> gnomehier ->
gnomevfs -> gconf -> oaf -> gtk12 ->
gnomevfs -> gnomemime -> gnomehier ->
libcapplet -> gtk12 ->
Any port that depends on any of ports in the list gets into make loop at
closure calculations.
Finally, let's compare fontconfig's dependencies between 2.1.92 and
2.1.93.
% grep pkgdep /var/db/pkg/fontconfig-2.1.92/+CONTENTS
@pkgdep pkgconfig-0.15.0
@pkgdep freetype2-2.1.3_1
@pkgdep expat-1.95.6_1
% grep pkgdep /var/db/pkg/fontconfig-2.1.93/+CONTENTS
@pkgdep pkgconfig-0.15.0
@pkgdep libiconv-1.8_2
@pkgdep libgnugetopt-1.2
@pkgdep libaudiofile-0.2.3
@pkgdep imlib-1.9.14_1
@pkgdep imake-4.3.0
@pkgdep gnomelibs-1.4.2_1
@pkgdep expat-1.95.6_1
@pkgdep gtkhtml-1.1.8
@pkgdep gnomecore-1.4.2
@pkgdep gnomecontrolcenter-1.4.0.5_1
@pkgdep glib-1.2.10_8
@pkgdep gtk-1.2.10_9
@pkgdep freetype2-2.1.4
@pkgdep gettext-0.11.5_1
@pkgdep fontconfig-2.1.92
@pkgdep esound-0.2.29
@pkgdep XFree86-libraries-4.3.0_1
The fontconfig started to depend on gtkhtml, imlib, gnomecore, and
gnomecontrolcenter on 2.1.93. (Funny, it even depends on XFree86-4-libraries
which depends on fontconfig.)
As shown, all the circles that relate to fontconfig are introduced on 2.1.93.
Again note that {fontconfig} is one of the minimal cutsets.
Now complaints are understood.
2.1.93 is, at least for me, more harmful than the previous.
horio shoichi