From ripley at stats.ox.ac.uk  Thu Aug 12 17:55:02 2004
From: ripley at stats.ox.ac.uk (Prof Brian Ripley)
Date: Thu Aug 12 17:55:04 2004
Subject: [Rd] The Depends: field of a package is now used by library()
In-Reply-To: <200408121047.45862.deepayan@stat.wisc.edu>
Message-ID: <Pine.LNX.4.44.0408121648220.20766-100000@gannet.stats>

On Thu, 12 Aug 2004, Deepayan Sarkar wrote:

> On Thursday 12 August 2004 10:19, Prof Brian Ripley wrote:
> > On Thu, 12 Aug 2004, Deepayan Sarkar wrote:
> > > On Thursday 12 August 2004 07:34, Prof Brian Ripley wrote:
> > > > In R-devel, the Depends: field in the DESCRIPTION file is now
> > > > used by library() to load the named packages before the current
> > > > package, and also to set up the environment to save images and
> > > > prepare for lazy loading.
> > >
> > > How would this relate to namespaces? For instance, lattice imports
> > > grid (and a few things from stats and graphics). If I keep grid in
> > > the depends field, loading lattice does a require(grid), which
> > > defeats one of the purposes of having namespaces. If I leave it
> > > out, nothing bad seems to happen as long as grid is installed, but
> > > there should be some indication in the DESCRIPTION that that grid
> > > is a requirement. None of the other fields seem appropriate.
> >
> > It's a grey area.  As all copies of R that you are using will have
> > grid, leave it out of Depends: for lattice.
> > 
> > Perhaps we need to invent another field such as UsesNamespaces?
> 
> That should work. 
> 
> Writing R Extensions says that 
> 
> `Packages that are necessary to successfully load the package using 
> library(pkgname) must be listed in the Depends field.'
> 
> which no longer remains true. 

Well, it was never true in the sense that it was frequently broken with 
impunity!  One could argue it is still true, as package != namespace.

> Ideally, it probably would have been 
> better to keep the old behaviour of Depends, and add the new 
> functionality in a new field, but I guess this way the majority of 
> packages can remain unchanged while being able to avail the new 
> features.

Yes.  I originally suggested 'EssentialPackages' and 'RequiredPackages',
but was persuaded otherwise.  Even then, it would be good to make clear
the difference between needing a namespace to be loadable and needing a 
package attached.

I can't think of any other example of one package only needing the 
namespace of another (contributed) package.

Thanks for raising the issue.

-- 
Brian D. Ripley,                  ripley@stats.ox.ac.uk
Professor of Applied Statistics,  http://www.stats.ox.ac.uk/~ripley/
University of Oxford,             Tel:  +44 1865 272861 (self)
1 South Parks Road,                     +44 1865 272866 (PA)
Oxford OX1 3TG, UK                Fax:  +44 1865 272595


[Rd] The Depends: field of a package is now used by library()
Prof Brian Ripley