Shipments in Cabal

Simon Marlow simonmar at microsoft.com
Fri Dec 9 06:24:08 EST 2005


This message got garbled a bit by my mailer.  It's easier to read on the
wiki:

http://haskell.org/hawiki/Cabal_2fAggregatePackages

Cheers,
	Simon

On 09 December 2005 11:07, Simon Marlow wrote:

> I've read the thread, and I must admit I've been thinking along the
> same lines as Duncan.  We don't need shipments.  The problem is
> purely with developing aggregate packages, which we can solve with
> either tools or small additions to Cabal.  (sorry, I intended this to
> be a short message, but it's turned out rather long :-/)
> 
> I don't propose to change much, in fact I want to make the situation
> simpler:
> 
>   Cabal package
> 	== one library or one executable
>       == one distro package
>       == one distributable
> 
> To aggregate packages, just create another package which contains only
> dependencies.  This is how many distro packaging systems aggregate eg.
> all the KDE components into a single KDE package.
> 
> 1. End users: they are served by this just fine.  They just
> cabal-install
>    the top-level package, and all the dependencies are magically
>    downloaded and installed.  Or they use their distro's packaging
> system
>    to do the same thing.  Dependencies between libraries are
>    maintained correctly.
> 
> 2. Developers.  A developer working on an aggregate package needs to
>    be able to edit & rebuild an aggregate package without rebuilding
>    everything every time.  This is the scenario I believe we should
> solve
>    with a few small additions to Cabal (see below).
> 
> 3. Visual studio.  VS has solutions, which are containers for multiple
>    packages, but the problem is that it doesn't want to *install* each
>    package as it builds, but it somehow needs to make each package
>    available to the others when building a chain of dependencies.
> Again,
>    this is solved by the same small additions to Cabal.
> 
> 
> As a developer, here is how I'd like to work on an aggregate package.
> Suppose I have three packages mylib, myexe1, myexe2.  I aggregate
> these using a package bigpkg.  I then arrange my tree like this:
> 
>   .../bigpkg/
>        Setup.lhs
>        bigpkg.cabal   -- build-depends: mylib, myexe1, myexe2
>        mylib/
>           Setup.lhs
>           mylib.cabal
>           src/
>        myexe1/
>           Setup.lhs
>           myexe1.cabal -- build-depends: mylib
>           src/
>        myexe2/
>           Setup.lhs
>           myexe2.cabal -- build-depends: mylib
>           src/
> 
> and I want to work on the whole blob like this:
> 
>   $ cd .../bigpkg
>   $ runghc Setup.lhs configure --local
>   $ runghc Setup.lhs build
> 
> what does --local do? (we can choose a better name, incedentally):
> 
>   - it implies
>         --local-deps
>         --prefix=`pwd`/install
>         --packagedb=`pwd`/install/package.conf
> 
> what does --local-deps do?
> 
>   - "configure" looks for dependencies in subdirectories of `pwd`
> 
>   - "configure" configures recursively.  It passes
>     --prefix and other settings to each subdir
> 
>   - "build" command recursively builds dependencies that
>     are found in subdirectories, in dependency order.  After building
>     each library dependency, it runs "setup install" in that subdir.
> 
>   - other commands just operate recursively.
> 
> what does --packagedb do?
> 
>   - specifies a package database into which packages are registered
>     by "setup register" and "setup install"
> 
>   - you probably want to set GHC_PACKAGE_PATH too
> 
> 
> -=-=- Summary -=-=-
> 
>   - Add --packagedb flag to Cabal.  This just adds a -package-conf
>     to each invocation of GHC and ghc-pkg.
> 
>   - Add --local-deps flag to "setup configure" in the simple build
>     sysetm, which looks for dependencies in subdirectories, and causes
>     other setup commands to recurse into dependencies in the right
>     order.
> 
>   - Add --local flag which is just a macro
> 
> 
> Pretty simple to implement, and does everything we want, I think.
> 
> Visual Studio would do things slightly differently, but I believe
> these facilities provide everything VS needs from Cabal.
> 
> Incedentally, I want --local for converting GHC's libraries to Cabal.
> We need to build & use directly from the build tree, which is what
> --local does.
> 
> Cheers,
> 	Simon
> 
> _______________________________________________
> Libraries mailing list
> Libraries at haskell.org
> http://www.haskell.org/mailman/listinfo/libraries



More information about the Libraries mailing list