debian-3.55: Modules for working with the Debian package system

Debian.GenBuildDeps

Contents

Description

Figure out the dependency relation between debianized source directories. The code to actually solve these dependency relations for a particular set of binary packages is in Debian.Repo.Dependency.

Synopsis

Documentation

type DepInfo = (SrcPkgName, Relations, [BinPkgName])Source

This type describes the build dependencies of a source package.

Preparing dependency info

buildDependencies :: Control -> Either String DepInfoSource

Return the dependency info for a source package with the given dependency relaxation. |According to debian policy, only the first paragraph in debian/control can be a source package http://www.debian.org/doc/debian-policy/ch-controlfields.html#s-sourcecontrolfiles

newtype RelaxInfo Source

Specifies build dependencies that should be ignored during the build decision. If the pair is (BINARY, Nothing) it means the binary package BINARY should always be ignored when deciding whether to build. If the pair is (BINARY, Just SOURCE) it means that binary package BINARY should be ignored when deiciding whether to build package SOURCE.

Instances

relaxDeps :: RelaxInfo -> [DepInfo] -> [DepInfo]Source

Remove any dependencies that are designated "relaxed" by relaxInfo.

Using dependency info

data BuildableInfo a Source

Constructors

BuildableInfo 

Fields

readyTriples :: [(a, [a], [a])]
 
allBlocked :: [a]
 
CycleInfo 

Fields

depPairs :: [(a, a)]
 

buildable :: (a -> a -> Ordering) -> [a] -> BuildableInfo aSource

Given an ordering function representing the dependencies on a list of packages, return a triple: One ready package, the packages that depend on the ready package directly or indirectly, and all the other packages.

compareSource :: DepInfo -> DepInfo -> OrderingSource

This is a nice start. It ignores circular build depends and takes a pretty simplistic approach to or build depends. However, I think this should work pretty nicely in practice.

Obsolete?

orderSource :: (a -> a -> Ordering) -> [a] -> [a]Source

Given a list of packages, sort them according to their apparant build dependencies so that the first element doesn't depend on any of the other packages.

genDeps :: [FilePath] -> IO (Either String [DepInfo])Source

Return the dependency info for a list of control files.

failPackage :: Eq a => (a -> a -> Ordering) -> a -> [a] -> ([a], [a])Source

Remove any packages which can't be built given that a package has failed.

getSourceOrder :: FilePath -> IO (Either String [SrcPkgName])Source

One example of how to tie the below functions together. In this case fp is the path to a directory that contains a bunch of checked out source packages. The code will automatically look for debian/control. It returns a list with the packages in the order they should be built.