=head1 NAME

dose-builddebcheck - Check if a package can be built on a Debian system 

=head1 SYNOPSIS

=over 

=item B<dose-builddebcheck>  B<--deb-native-arch=>I<name> [options] I<binary-repositories> I<source-repository> 

=back
=cut

=head1 DESCRIPTION

dose-builddebcheck determines, for a set of debian source package
control stanzas, called the source repository, whether a build
environment for the packages of the source repository can be installed
on the specified native architecture by using packages from the binary
repository. For this, only package meta-information is taken into
account: build-dependencies and build-conflicts in the source package,
and inter-package relationsships expressed in the binary
repository. The constraint solving algorithm is complete, that is it
finds a solution whenever there exists one, even for multiple
disjunctive dependencies and deep package conflicts.  This problem is
computationally infeasible in theory (that is, NP-complete), but can
be solved very efficiently for package repositories that actually
occur in practice. Installability of binary packages is analyzed
according to their B<Depends>, B<Conflicts>, and B<Provides> fields
with their meaning as of Debian policy version 3.9.0. B<Pre-depends>
are treated like B<Depends>, and B<Breaks> are treated like
B<Conflicts>.

=cut

=head1 Input Format

The B<binary-repositories> argument is a list of filenames containing stanzas
in the format of L<deb-control(5)>, separated by one blank line. For instance,
the Packages files as found on a Debian mirror server, or in the directory
I</var/lib/apt/lists/> of a Debian system, are suitable. The
B<source-repository> argument is the name of a file containing debian source
control stanzas, separated by one blank line. For instance, the Sources files
as found on a Debian mirror server, or in the directory I</var/lib/apt/lists/>
of a Debian system, are suitable. 

Multi-arch annotations are correctly considered by dose-builddebcheck. Packages
whose's architecture is neither the native architecture nor in the list of
foreign architectures (see below) are ignored. Here, native and foreign refers
at the same time to the architecture on which the compilation will be run, and
to the host architecture of the compilation. Cross-compilation is supported
by specifying the I<host> architecture.

=cut

=head1 OPTIONS

=head2 OPTIONS FOR SPECIFYING ARCHITECTURES

=over 8

=item B<--deb-native-arch=>I<name>

Specify the native architecture. This argument is mandatory.

=item B<--deb-foreign-archs=>I<name> [,I<name>] ...

Specify a comma-separated list of foreign architectures. The default
is an empty list of foreign architectures. If B<--deb-host-arch> is set, it
is used as an implicit foreign architecture.

=item B<--deb-host-arch=>I<name>...

Specify the host architecture.

=back

=head2 OPTIONS FOR FILTERING THE INPUT

=over 8

=item B<--latest>

Only the latest version of each package is kept,
older versions of packages are ignored.

=back

=head2 OPTIONS CONTROLLING OUTPUT

=over 8

=item B<-f --failures> 

Only show broken packages that fail the installability check. 

=item B<-s --successes> 

Only show packages that do not fail the installability check. 

=item B<-e --explain> 

Give explanations. If used together with --failures then the explanation
consists of dependency chains leading to a conflict or a dependency on a
missing package. If used together with --successes then the explanation
consists of an installation set.

=item B<-o> I<file>

Send output to I<file>.

=back

=head2 MISC OPTIONS

=over 8

=item B<-v>

Enable info / warnings / debug messages. This option may be repeated up
to three times in order to increase verbosity. 

=item B<-h, --help> 

Display this list of options. 

=item B<--deb-ignore-essential>

Do not consider essential packages as part of the installation problem.
By default all essential package are considered as part of the
installation problem for all packages, that is a package is installable
if and only if it is co-installable with all essential packages. This
option allows the user to test the installability with no essential
packages installed.

=back
=cut

=head1 EXIT CODES

Exit codes 0-63 indicate a normal termination of the program, codes 64-127
indicate abnormal termination of the program (such as parse errors, I/O
errors).

In case of normal program termination:

- exit code 0 indicates that all foreground packages are found installable;

- exit code 1 indicates that at least one foreground package is found uninstallable.

=head1 EXAMPLE

Compute the list of source packages in Sources for which
it is not possible to install a build environment on i386, assuming that
the binary packages described in file Packages are available: 

 dose-builddebcheck -v -f -e --arch amd64 \
 /var/lib/apt/lists/ftp.fr.debian.org_debian_dists_sid_main_binary-amd64_Packages\
 /var/lib/apt/lists/ftp.fr.debian.org_debian_dists_sid_main_source_Sources

Compute the list of source packages for armel in Sources for which it is not
possible to install a mix build environment on amd64 plus armel, assuming that
the binary packages described in file Packages are available: 

 deb-builddebcheck --failures --successes --deb-native-arch=amd64 \
 --deb-foreign-archs=armel,linux-any --deb-host-arch=armel \
 DebianPackages/Sid-amd64-armel-Packages-050812.bz2 
 DebianPackages/Sid-Sources-single-version-050812.bz2

=cut

=head1 AUTHOR

The current version has been rewritten on the basis of the dose3 library by
Pietro Abate; it replaces an earlier version that was  simply a wrapper for
edos-distcheck.

=cut

=head1 SEE ALSO

L<B<deb-control>(5)>, 
L<B<dose3-distcheck>(1)> 

<http://www.edos-project.org> is the home page of the EDOS project. 
<http://www.mancoosi.org> is the home page of the Mancoosi project. 
 
