On Wed, Apr 28, 2010 at 09:44:02AM -0400, Alexander Hansen wrote:
> On 4/28/10 9:22 AM, Jack Howarth wrote:
> >   One piece of legacy coding left in the gcc4x packages
> > which perplexes me is the use of...
> > 
> > %N-shlibs (>= %v-%r)
> > 
> > instead of...
> > 
> > %N-shlibs (= %v-%r)
> > 
> > for the Depends field of the main gcc4x package. Was there
> > a bug in fink at some point that required the use of >=
> > rather than =? I was going to change that as well but
> > wanted to make certain there wasn't some obscure reason
> > for that particular conditional.
> >          Jack
> > 
> Convenience, possibly.  The bug hasn't gone away.
> 
> If the main package has Depends: %N-shlibs (= %v-%r), if a user has the
> main and -shlibs installed they can't update to a new version-revision
> in one step.  The build will be performed, but fink won't install the
> update:  the new -shlibs has to go in first, and the old main package
> will complain because of the %v-%r mismatch.  But afterwards apt-get is
> perfectly happy to figure out how to do the upgrade.
> 
> I'd argue that (= %v-%r) is a safer option.

I think fink's SysState fixed that bug. If you have installed the pair
with %N:Depends:%N-shlibs(=%v-%r) and you "fink update %N-shlibs" to a
newer version or revision, fink should recognize that 1) this will
break the dependency of the installed %N, and 2) that simultaneously
updating %N will solve he problem, and so do it that way. It may not
be able to handle looking more deeply into the dep tree and it might
not work if %N and %N-shlibs are not in the same .info file (two
splitoffs, or one splitoff of another)...can't remember how robust the
thing is.

For libraries, the = actually prevents breakage of symlinks. For
example, foo1-dev has libfoo.dylib->libfoo.1.0.1.dylib, with
libfoo.1.dylib (the install_name) and libfoo.1.0.1.dylib in
foo1-shlibs. Now comes a new package version (same install_name) that
has libfoo.1.0.2.dylib istead of libfoo.1.0.1.dylib. "Just" updating
the -shlibs package (allowed by a >= dependency) breaks the
libfoo.dylib symlink, which also breaks building of any package that
"BuildDepends:foo1". Using = means they stay in sync. Using = also
means the .h and other compile-time files and tools are perfectly
(self-consistent set) matched to the .dylib.

I don't know what happens if gcc (the front-end programs) from one %v
of a gcc suite are used with the libraries (-shlibs package) from a
different one. No idea if there are symlinks and other pointers that
break (recent libtool2 uses libfoo.dylib->libfoo.1.dylib not
->.1.0.whatever).

dan

-- 
Daniel Macks
dma...@netspace.org
http://www.netspace.org/~dmacks


------------------------------------------------------------------------------
_______________________________________________
Fink-devel mailing list
Fink-devel@lists.sourceforge.net
http://news.gmane.org/gmane.os.apple.fink.devel
Subscription management:
https://lists.sourceforge.net/lists/listinfo/fink-devel

Reply via email to