Hi The -llibfoo thing is obviously wrong, we'll need to get that fixed.
The private one is a bit trickier. We generate private requires because they are needed for static linkin. This is where pkg-config behaves a bit strangely: For --libs, private depends are not listed unless you use --static. For --cflags, private depends are always listed. The problem here is that an arguable case can be made for listing the headers without --static and also for not doing that. I would have expected the latter behaviour but apparently based on pkg-config's Git repo they have explicitly made it do the former.