On Monday 24 December 2012 15:08:29 Kevin Oberman wrote: > On Mon, Dec 24, 2012 at 9:04 AM, ajtiM <lum...@gmail.com> wrote: > > Hi! > > > > I update pcre, icu...on FreeBSD 9.1 RC-3 with success, I ran as I read in > > /usr/ports/UPDATING: portmaster -o net/openldap24-sasl-client openldap24- > > client looks like successful too but if I run > > portmaster --check-depends than I got some ports (inkscape, gimp and some > > more) which missed openldap24-client. > > But if I run pkg_libchk -o everything is okay. > > I rebuilt gvfs and py-gimp but after portmaster --check-depends those two > > ports still missed openldap24-client. I am using GIMP a lot and I don't > > have any problems... > > > > I use new pkng and I have in /etc/make.conf WITH_PKGNG=yes. Almost > > everything is built with clang. > > We often are misusing the term "dependency". here, or at least > over-loading it.. A dependency, in the ports sense, is when some other > port is required to build or run another. One common dependency is on > sharable libraries (.so), but they are only a portion of what show up > as dependencies. > > To work, sharables need a fixed Application Binary Interface (ABI) so > that the routines in the library can be called from another program. > That is, the entry points in the .so file must not change or the > calling program is likely to crash or behave in an undefined manner. > All of this is mapped into the executable at link time with the > current version of the .so. Since the mapping is created when the > executable is linked, the library should change in a manner that does > not change any entry points or passed variables, changes can be made > to the library without the already built executable being impacted. > This happens fairly often and is of little note. > > Sometimes an update changes the API, often by things like changing > arguments used or completely replacing routines. If the old API is > maintained, the calling program needs no changes, but it must be > re-linked so that al of the references are updated to match the new > ones in the ABI. This is normally done by incrementing the version of > the .so. Since this version is passed to the calling program at link > time, the code that "connects" the program (rtld) to the .so will only > load the .so if the version is unchanged. If that version cannot be > located by rtld, the program exits with an error. > > In practical terms,this means that when an ABI is changed, every > program that is directly linked to this .so must be re-linked. This > almost always means that it must be re-built as we normally don't > retain all of the .o files to allow re-linking. If the old .so is > retained, programs linked to it will still work, but just keeping the > old .so around is not the solution.It is, at best, a band-aid. > \ > The problem is that a program my link to two of more libraries that > also link to the same .so. An example would be a multimedia tool that > links to a whole bunch of decoders and codecs. It may link directly to > libpng and indirectly by linking to a .so that is, itslef inked to > libpng. Or it may link to two .so's that link to libpng. In either > case, the actual executable can only load one, so if some things are > linked to .so.4 and some to .so.5, irtld will fail and exit. > > So retaining old sharables is not a solution, but can make life a bit > easier. It is still important to try to re-build all ports that link > to the library that has had its version changed as soon as possible. > > pkg_libchk "walks" through the packing list of each port and then uses > objdump to get a list of sharables used by that file and checks that > all are in the LD_LIBRARY_PATH, deliberately ignoring the files in > /usr/local/lib/compat, to provide a list of files or ports with > missing .so files.These are all dependencies of the port, but they are > only a sub-set of all dependencies or that port. But these > dependencies are all that need to be rebuilt to restore normal > operation. this is often a much smaller number of ports than the list > of ports that depend on the library. > > Many details are missing from this discussion and I probably made an > error or two. The man pages for ldconfig, pkg_libchk, rtld, and others > go into more detail on how the loading of sharables works. It is a > part of an article on this that I hope to post to the FreeBSD wiki in > a few days if other things don't get in the way, > > I know what "portmaster --check-depends" does in the case of the old > pkg database, but things would be done a bit differently for pkgng, so > I really can't explain exactly what you are seeing there. Brian might > be able to explain that.
Thank you very much!! Mitja -------- http://www.redbubble.com/people/lumiwa _______________________________________________ freebsd-ports@freebsd.org mailing list http://lists.freebsd.org/mailman/listinfo/freebsd-ports To unsubscribe, send any mail to "freebsd-ports-unsubscr...@freebsd.org"