# dpkg manual page - dsc(5)
#
# Copyright © 1995-1996 Ian Jackson <ijackson@chiark.greenend.org.uk>
# Copyright © 2015 Guillem Jover <guillem@debian.org>
#
# This is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2 of the License, or
# (at your option) any later version.
#
# This is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program.  If not, see <https://www.gnu.org/licenses/>.

=encoding utf8

=head1 NAME

dsc - Debian source package control file format

=head1 SYNOPSIS

I<filename>B<.dsc>

=head1 DESCRIPTION

Each Debian source package is composed of a .dsc control file, which
contains a number of fields, in L<deb822(5)> format.

Each field begins with a tag, such as
B<Source>
or
B<Binary>
(case insensitive), followed by a colon, and the body of the field
(case sensitive unless stated otherwise).
Fields are delimited only by field tags.
In other words, field text may be multiple lines in length, but the
installation tools will generally join lines when processing the body
of the field (except in case of the multiline fields
B<Package-List>, B<Files>, B<Checksums-Sha1> and B<Checksums-Sha256>,
see below).

The control data might be enclosed in an OpenPGP ASCII Armored signature,
as specified in RFC9580.

=head1 FIELDS

=over

=item B<Format:> I<format-version> (required)

The value of this field declares the format version of the source package.
The field value is used by programs acting on a source package to
interpret the list of files in the source package and determine how
to unpack it.
The syntax of the field value is a numeric major revision (“0-9”), a
period (“.”), a numeric minor revision (“0-9”), and then an optional
subtype after whitespace (“ \t”), which if specified is a lowercase
alphanumeric (“a-z0-9”) word in parentheses (“()”).
The subtype is optional in the syntax but may be mandatory for particular
source format revisions.

The source formats currently supported by B<dpkg> are B<1.0>,
B<2.0>, B<3.0 (native)>, B<3.0 (quilt)>, B<3.0 (git)>,
B<3.0 (bzr)> and B<3.0 (custom)>.
See L<dpkg-source(1)> for their description.

=item B<Source:> I<source-name> (required)

The value of this field determines the package name, and is used to
generate file names by most installation tools.

=item B<Binary:> I<binary-package-list>

This folded field lists binary packages which this source package can produce,
separated by commas.

This field has now been superseded by the B<Package-List> field, which
gives enough information about what binary packages are produced on which
architecture, build-profile and other involved restrictions.

=item B<Architecture:> I<arch-list> (recommended)

The architecture list specifies on which type of machine this package runs.
The value should be a list of architecture names and/or wildcards
separated by spaces.

Common architecture names and architecture wildcards are B<amd64>,
B<armel>, B<i386>, B<linux-any>, B<any-amd64>, etc.
Note that the B<all> value is meant for packages that are architecture
independent, and B<any> for packages that are architecture dependent.
The list may include (or consist solely of) the special value B<all>.
When the list contains the architecture wildcard B<any>, the only
other value allowed in the list is B<all>.

The field value is generally generated from B<Architecture> fields
from in the I<debian/control> in the source package.

=item B<Version:> I<version-string> (required)

Typically, this is the original package's version number in whatever form
the program's author uses.
It may also include a Debian revision number (for non-native packages).
The exact format and sorting algorithm are described in
L<deb-version(7)>.

B<Note>: On some vendors,
dpkg has been made to permit native sources with non-native versions,
making this incoherent and adding to the confusion of the concept,
where in addition this tends to be a trap for accidental mistakes.

=item B<Origin:> I<name>

The name of the distribution this package is originating from.

=item B<Maintainer:> I<fullname-email> (recommended)

Should be in the format “Joe Bloggs E<lt>jbloggs@foo.comE<gt>”, and is
typically the person who created the package, as opposed to the author
of the software that was packaged.

=item B<Uploaders:> I<fullname-email-list>

Lists all the names and email addresses of co-maintainers of the package,
in the same format as the B<Maintainer> field.
Multiple co-maintainers should be separated by a comma.

=item B<Description> I<short-description>

=item S< >I<long-description>

The format for the source package description is a short brief summary on the
first line (after the B<Description> field).
The following lines should be used as a longer, more detailed description.
Each line of the long description must be preceded by a space, and blank
lines in the long description must contain a single ‘B<.>’ following
the preceding space.

=item B<Homepage:> I<url>

The upstream project home page I<url>.

=item B<Standards-Version:> I<version-string> (recommended)

This documents the most recent version of the distribution policy standards
this package complies with.

=item B<Vcs-Browser:> I<url>

The I<url> of a web interface to browse the Version Control System
repository.

=item B<Vcs-Arch:> I<url>

=item B<Vcs-Bzr:> I<url>

=item B<Vcs-Cvs:> I<url>

=item B<Vcs-Darcs:> I<url>

=item B<Vcs-Git:> I<url>

=item B<Vcs-Hg:> I<url>

=item B<Vcs-Mtn:> I<url>

=item B<Vcs-Svn:> I<url>

These fields declare the I<url> of the Version Control System repository
used to maintain this package.
See L<deb-src-control(5)> for more details.

=item B<Testsuite:> I<name-list>

This field declares that the source package contains the specified test suites.
The value is a comma-separated list of test suites.
If the B<autopkgtest> value is present, a I<debian/tests/control> is
expected to be present, if the file is present but not the value, then
B<dpkg-source> will automatically add it, preserving previous values.

=item B<Testsuite-Triggers:> I<package-list>

This field declares the comma-separated union of all test dependencies
(B<Depends> fields in I<debian/tests/control> file), with all
restrictions removed, and OR dependencies flattened (that is, converted to
separate AND relationships), except for binaries generated by this source
package and its meta-dependency equivalent B<@>.

B<Rationale>: this field is needed because otherwise to be able to get the
test dependencies, each source package would need to be unpacked.

=item B<Build-Depends:> I<package-list>

=item B<Build-Depends-Arch:> I<package-list>

=item B<Build-Depends-Indep:> I<package-list>

=item B<Build-Conflicts:> I<package-list>

=item B<Build-Conflicts-Arch:> I<package-list>

=item B<Build-Conflicts-Indep:> I<package-list>

These fields declare relationships between the source package and packages
used to build it.
They are discussed in the L<deb-src-control(5)> manual page.

=item B<Package-List:>

=item S< >I<package> I<package-type> I<section> I<priority> I<key-value-list>

This multiline field contains a list of binary packages generated by this
source package.

The I<package> is the binary package name.

The I<package-type> is the binary package type, usually B<deb>, another
common value is B<udeb>.

The I<section> and I<priority> match the binary package fields of the
same name,
or if omitted default to B<unknown> and B<optional> respectively
(since dpkg 1.22.13).

The I<key-value-list> is a space separated I<key>B<=>I<value> list,
and the currently known optional keys are:

=over

=item B<arch>

The architecture restriction from the binary package B<Architecture>
field, with spaces converted to ‘,’.

=item B<profile>

The normalized build-profile restriction formula from the binary package
B<Build-Profile> field,
with ANDs (whitespace inside enclosed angle brackets) converted to ‘,’,
and ORs (whitespace between enclosing angle brackets) to ‘+’.
All angle brackets get removed during normalization.

Deprecated since dpkg 1.23.0, superseded by B<profile:v1>.

=item B<profile:v1>

The normalized build-profile restriction formula from the binary package
B<Build-Profile> field,
with ANDs (whitespace inside enclosed angle brackets) converted to ‘&’,
and ORs (whitespace between enclosing angle brackets) to ‘|’.
All angle brackets get removed during normalization.

Supported since dpkg 1.23.0.

=item B<protected>

If the binary package is protected, this key will contain the value of the
B<Protected> field, that is a B<yes> value.

Supported since dpkg 1.20.1.

=item B<essential>

If the binary package is essential, this key will contain the value of the
B<Essential> field, that is a B<yes> value.

=back

=item B<Files:> (required, weak)

=item B<Checksums-Sha1:> (required, weak)

=item B<Checksums-Sha256:> (required, strong)

=item S< >I<checksum> I<size> I<filename>

These multiline fields contain a list of files with a checksum and size
for each one.
These fields have the same syntax and differ only in the checksum algorithm
used: MD5 for B<Files>, SHA-1 for B<Checksums-Sha1> and SHA-256 for
B<Checksums-Sha256>.

The first line of the field value (the part on the same line as the field
name followed by a colon) is always empty.
The content of the field is expressed as continuation lines, one line per file.
Each line consists of the checksum, a space, the file size, a space, and the
file name.

These fields list all files that make up the source package.
The list of files in these fields must match the list of files in the
other related fields.

B<Note>: The MD5 and SHA-1 checksums are considered weak,
and should never be assumed to be sufficient for secure verification.

=back

=head1 BUGS

The B<Format> field conflates the format for the B<.dsc> file itself
and the format of the extracted source package.

=head1 SEE ALSO

L<deb822(5)>,
L<deb-src-control(5)>,
L<deb-version(7)>,
L<dpkg-source(1)>.
