Config...Source(3pm)

✨ NAME ✨

okay so first things first bestie πŸ¦‹ the header up top reads Config...Source(3pm) and "User Contributed Perl Documentation" β€” which is just the manual's title and section, folded in right here like the little legend she is πŸ‘‘. And here's what the NAME section is serving:

  • Config::Model::models::Dpkg::Control::Source β€” the configuration class πŸ’…
  • Dpkg::Control::Source

that's it, that's the name section, she's brief and she's iconic 🌸


πŸ’– DESCRIPTION πŸ’–

Configuration classes used by Config::Model.

literally the whole thing. short queen. πŸ‘‘


πŸŽ€ Elements πŸŽ€

now the main character energy starts 🌈 every single element, one by one, no skipping, we do not skip here 🫢

🌟 Source β€” source package name

Source package name. Defaults to the name of the current directory, or undef if the directory name does not match Debian requirements for a source package. Mandatory. Type: uniline.

note bestie: Source is computed with
use Cwd; my $res = getcwd =~ m!/([a-z0-9][a-z0-9+.-]+)$! ? $1 : undef;

and with:

  • (the bullet here is literally empty in the original β€” no cap, just a dangling bullet πŸ’€ leaving it exactly as it is)

🌟 debhelper-version

Debhelper version. This parameter is hidden because it does not exist in control. It's used to drive the warp mechanism for parameters that depend on debhelper version. Optional. Type: integer.

default value:

0

🌟 X-Style β€” Uncompromising file formatting of Debian packaging files

Uncompromising file formatting of Debian packaging files.

By using it, you agree to cede control over minutiae of hand-formatting. In return, the formatter gives you speed, determinism, and freedom from style discussions about formatting.

The "black" style is inspired by the "black" Python code formatter. As with "black", the style will evolve over time. Optional. Type: uniline.

🌟 Standards-Version β€” Debian policy version number this package complies to

This field indicates the Debian policy version number this package complies to.

Before updating this field, please read upgrading-checklist at https://www.debian.org/doc/debian-policy/upgrading-checklist.html to know what changes came with a new policy version number, and apply the required changes (if any) to your package. Mandatory. Type: uniline.

🌟 Maintainer β€” package maintainer's name and email address

The package maintainer's name and email address. The name must come first, then the email address inside angle brackets <> (in RFC822 format).

If the maintainer's name contains a full stop then the whole field will not work directly as an email address, due to a misfeature in the syntax specified in RFC822; a program using this field as an address must check for this and correct the problem if necessary (for example by putting the name in round brackets and moving it to the end, and bringing the email address forward). Optional. Type: uniline.

note: Maintainer is computed with
my $name = $ENV{DEBFULLNAME};
my $email = $ENV{DEBEMAIL} ;
my $ret;
$ret = "$name <$email>" if $name and $email;
$ret;

and with:

  • (again, an empty bullet β€” she's shy, we respect her πŸ’€)

🌟 Uploaders

Optional. Type: list of uniline.

🌟 Section

The packages in the archive areas main, contrib and non-free are grouped further into sections to simplify handling.

The archive area and section for each package should be specified in the package's Section control record (see Section 5.6.5 at https://www.debian.org/doc/debian-policy/#section). However, the maintainer of the Debian archive may override this selection to ensure the consistency of the Debian distribution. The Section field should be of the form:

  • section if the package is in the main archive area,
  • area/section if the package is in the contrib or non-free archive areas.

Optional. Type: uniline.

default value:

misc

🌟 XS-Testsuite β€” name of the non regression test suite

Enable a test suite to be used with this package. For more details see README.package-tests.rst at https://anonscm.debian.org/cgit/autopkgtest/autopkgtest.git/plain/doc/README.package-tests.rst Deprecated Optional. Type: uniline.

deprecated alert bestie 🚨 she's still here, she's still documented, but she's deprecated, so act accordingly.

🌟 Testsuite β€” name of the non regression test suite

Enable a test suite to be used with this package. For more details see README.package-tests.rst at https://salsa.debian.org/ci-team/autopkgtest/blob/master/doc/README.package-tests.rst Optional. Type: uniline.

note: Testsuite is migrated with '$xs_testsuite' and with:
  • $xs_testsuite => "- XS-Testsuite"

🌟 XS-Autobuild β€” Allow automatic build of non-free or contrib package

Read the full description from section 5.10.5 at https://www.debian.org/doc/manuals/developers-reference/pkgs.html#non-free-buildd in Debian developer reference. Optional. Type: boolean.

default value:

0

🌟 Priority

Optional. Type: enum. choice: 'required', 'important', 'standard', 'optional', 'extra'.

Here are some explanations on the possible values:

'extra'

This contains all packages that conflict with others with required, important, standard or optional priorities, or are only likely to be useful if you already know what they are or have specialized requirements (such as packages containing only detached debugging symbols).

'important'

Important programs, including those which one would expect to find on any Unix-like system. If the expectation is that an experienced Unix person who found it missing would say "What on earth is going on, where is foo?", it must be an important package.[5] Other packages without which the system will not run well or be usable must also have priority important. This does not include Emacs, the X Window System, TeX or any other large applications. The important packages are just a bare minimum of commonly-expected and necessary tools.

'optional'

(In a sense everything that isn't required is optional, but that's not what is meant here.) This is all the software that you might reasonably want to install if you didn't know what it was and don't have specialized requirements. This is a much larger system and includes the X Window System, a full TeX distribution, and many applications. Note that optional packages should not conflict with each other.

'required'

Packages which are necessary for the proper functioning of the system (usually, this means that dpkg functionality depends on these packages). Removing a required package may cause your system to become totally broken and you may not even be able to use dpkg to put things back, so only do so if you know what you are doing. Systems with only the required packages are probably unusable, but they do have enough functionality to allow the sysadmin to boot and install more software.

'standard'

These packages provide a reasonably small but not too limited character-mode system. This is what will be installed by default if the user doesn't select anything else. It doesn't include many large applications.

🌟 Build-Driver β€” Which build-driver implementation dpkg should use for the package build

The name of the build driver that dpkg (dpkg-buildpackage) will use for assembling the package. Optional. Type: uniline.

upstream_default value:

debian-rules

🌟 Build-Depends β€” List of package required during clean or build of architecture-dependent packages

List of packages that must be installed:

  • during clean
  • to build architecture-dependent binaries ("Architecture: any" or specific architectures).

Technically, these packages must be installed for the following build targets: clean, build-arch, and binary-arch. See build target at https://www.debian.org/doc/debian-policy/#relationships-between-source-and-binary-packages-build-depends-build-depends-indep-build-depends-arch-build-conflicts-build-conflicts-indep-build-conflicts-arch.

On the other hand, the list of packages that must be installed to build architecture-independent binaries ("Architecture: all") should be listed in "Build-Depends-Indep" field.

Including a dependency in this field does not have the exact same effect as including it in both Build-Depends-Arch and Build-Depends-Indep, because the dependency also needs to be satisfied when building the source package.

See also deb-src-control man page at https://manpages.debian.org/unstable/dpkg-dev/deb-src-control.5.en.html.

This parameter can also have a restriction formula. For instance:

Build-Depends: foo (>= 1.0) [i386 arm] <!nocheck> <!cross>, bar

See debian wiki at https://wiki.debian.org/BuildProfileSpec#Build-Depends_syntax_extension_.28restriction_formulas.29 for more details. Optional. Type: list of uniline.

🌟 Build-Depends-Arch β€” List of package required to build architecture-dependent packages

Same as Build-Depends, but these packages are only needed when building the architecture dependent packages. The Build-Depends are also installed in this case.

See deb-src-control man page at https://manpages.debian.org/unstable/dpkg-dev/deb-src-control.5.en.html for details. Optional. Type: list of uniline.

🌟 Build-Depends-Indep β€” List of package required during build of architecture-independent package

List of packages that must be installed to build architecture-independent binaries ("Architecture: all").

Technically, these packages must be installed for the following build targets: build, build-indep, binary, and binary-indep. See build target at https://www.debian.org/doc/debian-policy/#relationships-between-source-and-binary-packages-build-depends-build-depends-indep-build-depends-arch-build-conflicts-build-conflicts-indep-build-conflicts-arch.

Note that packages required during "clean" phase must be declared in "Build-Depends" field.

This parameter can also have a restriction formula. For instance:

Build-Depends: foo (>= 1.0) [i386 arm] <!nocheck> <!cross>, bar

See debian wiki at https://wiki.debian.org/BuildProfileSpec#Build-Depends_syntax_extension_.28restriction_formulas.29 for more details. Optional. Type: list of uniline.

🌟 Build-Conflicts β€” List of package not wanted during clean or build of architecture-dependent packages

List of packages that must be missing (i.e. not installed):

  • during clean
  • to build architecture-dependent binaries ("Architecture: any" or specific architectures).

Technically, these packages must not be installed for the following build targets: clean, build-arch, and binary-arch. See build target at https://www.debian.org/doc/debian-policy/#relationships-between-source-and-binary-packages-build-depends-build-depends-indep-build-depends-arch-build-conflicts-build-conflicts-indep-build-conflicts-arch.

On the other hand, the list of packages that must not be installed to build architecture-independent binaries ("Architecture: all") should be listed in "Build-Conflicts-Indep" field.

Including a dependency in this list has the same effect as including it in both Build-Conflicts-Arch and Build-Conflicts-Indep, with the additional effect of being used for source-only builds.

See deb-src-control man page at https://manpages.debian.org/unstable/dpkg-dev/deb-src-control.5.en.html for details. Optional. Type: list of uniline.


ok bestie we are SO not done yet, keep scrolling, there's more of this page coming πŸ’…

πŸ’₯ Build-Conflicts-Arch β€” List of package not wanted during build of architecture dependent packages

Okay bestie, this one is the "keep OUT" list πŸ’€ β€” it's the list of packages that have to be missing (as in, literally not installed) for you to build the architecture dependent binaries.

Wanna know the deets? Go read the deb-src-control man page: https://manpages.debian.org/unstable/dpkg-dev/deb-src-control.5.en.html

Optional. Type: list of uniline.


πŸ’₯ Build-Conflicts-Indep β€” List of package not wanted during build of architecture-independent packages

Same energy, different targets ✨ β€” a list of packages that must be missing (not installed!!) to build binaries with arch set to all.

Technically speaking (and I am speaking technically, bestie), these packages must not be installed for these build targets: build, build-indep, binary, and binary-indep. See the build target section: https://www.debian.org/doc/debian-policy/#relationships-between-source-and-binary-packages-build-depends-build-depends-indep-build-depends-arch-build-conflicts-build-conflicts-indep-build-conflicts-arch

Heads up πŸ™ˆ β€” packages you don't want during the clean phase have to be declared in the Build-Conflicts field instead. Don't get it twisted.

Optional. Type: list of uniline.


🌈 Built-Using β€” Additional source packages used to build the binary

So some binary packages straight up embed bits of other packages during the build, but they don't have to actually depend on them. Examples? Linking against static libraries, or literally scooping source code from another package into the build. And when that happens, the source packages of those other packages become a required part of the complete source β€” like, the binary package isn't reproducible without them. No cap. πŸ”₯

A Built-Using field has to list the corresponding source package for any such binary package that got incorporated during the build β€” including an exactly equal (=) version relation on the version that was used to build that binary package[57].

Say a package uses source code from the gcc-4.6-source binary package (which was built from the gcc-4.6 source package). Its control file would carry this field:

Built-Using: gcc-4.6 (= 4.6.0-11)

And a package that includes binaries from both grub2 and loadlin would have this in its control file:

Built-Using: grub2 (= 1.99-9), loadlin (= 1.6e-1)

Optional. Type list of uniline.


πŸ¦‹ Vcs-Browser β€” web-browsable URL of the VCS repository

The value here should be an https:// URL that points at a web-browsable copy of the Version Control System repo used to maintain the package β€” if one is available. πŸ’…

Why does this matter? It's meant to be useful for the final user who wants to browse the latest work done on the package (e.g. when they're out here hunting for the patch that fixes a bug tagged as pending in the bug tracking system). Obsessed with transparency, honestly. ✨

Optional. Type uniline.

Note: Vcs-Browser is computed with

   $pkgname =~ /r-cran-/ ? "https://salsa.debian.org/r-pkg-team/$pkgname"
 : $maintainer =~ /pkg-perl/ ? "https://salsa.debian.org/perl-team/modules/packages/$pkgname"
: $maintainer =~ /pkg-ruby-extras/ ? "https://salsa.debian.org/ruby-team/$pkgname"
: $maintainer =~ /pkg-javascript/ ? "https://salsa.debian.org/js-team/$pkgname"
: $maintainer =~ /debian-med-packaging/ ? "https://salsa.debian.org/med-team/$pkgname"
: $maintainer =~ /team\@neuro.debian.net/ ? "https://salsa.debian.org/neurodebian-team/$pkgname"
: $maintainer =~ /debian-science-maintainers/ ? "https://salsa.debian.org/science-team/$pkgname"
: $maintainer =~ /pkg-phototools-devel/ ? "https://salsa.debian.org/debian-phototools-team/$pkgname"
: $maintainer =~ /pkg-java-maintainers/ ? "https://salsa.debian.org/java-team/$pkgname"
: $maintainer =~ /r-pkg-team/ ? "https://salsa.debian.org/r-pkg-team/$pkgname"
:                                                     undef ;

and with:

  • $maintainer => "- Maintainer"
  • $pkgname => "- Source"

πŸŽ€ Vcs-Arch β€” URL of the VCS repository

The value of this field should be a string that identifies, unequivocally 😀, the location of the Version Control System repository used to maintain the given package, if available.

* identify the Version Control System; right now the package tracking system supports these systems: arch, bzr (Bazaar), cvs, darcs, git, hg (Mercurial), mtn (Monotone), svn (Subversion). And yes, it's totally allowed to specify different VCS fields for the same package β€” they'll all show up in the PTS web interface. Iconic multi-field slay. πŸ’–

The info is meant to be useful for a user who actually knows the given Version Control System and wants to build the current version of a package from the VCS sources. Other uses of this info might include automatic building of the latest VCS version of the given package. To that end, the location the field points to should better be version agnostic and point to the main branch (for the VCSs that support such a concept). Also, the location should be accessible to the final user β€” and honestly? Fulfilling that requirement might mean pointing to an anonymous access of the repository instead of the SSH-accessible version of the same. 🫢

Optional. Type uniline.


🧚 Vcs-Bzr β€” URL of the VCS repository

Value of this field should be a string identifying unequivocally the location of the Version Control System repository used to maintain the given package, if available.

* identify the Version Control System; currently the following systems are supported by the package tracking system: arch, bzr (Bazaar), cvs, darcs, git, hg (Mercurial), mtn (Monotone), svn (Subversion). And it is allowed to specify different VCS fields for the same package β€” they will all be shown in the PTS web interface. πŸ’…

The information is meant to be useful for a user knowledgeable in the given Version Control System and willing to build the current version of a package from the VCS sources. Other uses of this information might include automatic building of the latest VCS version of the given package. To this end the location pointed to by the field should better be version agnostic and point to the main branch (for VCSs supporting such a concept). Also, the location pointed to should be accessible to the final user; fulfilling this requirement might imply pointing to an anonymous access of the repository instead of pointing to an SSH-accessible version of the same. 🌸

Optional. Type uniline.


πŸ“ Vcs-Cvs β€” URL of the VCS repository

Value of this field should be a string identifying unequivocally the location of the Version Control System repository used to maintain the given package, if available.

* identify the Version Control System; currently the following systems are supported by the package tracking system: arch, bzr (Bazaar), cvs, darcs, git, hg (Mercurial), mtn (Monotone), svn (Subversion). It is allowed to specify different VCS fields for the same package: they will all be shown in the PTS web interface. ✨

The information is meant to be useful for a user knowledgeable in the given Version Control System and willing to build the current version of a package from the VCS sources. Other uses of this information might include automatic building of the latest VCS version of the given package. To this end the location pointed to by the field should better be version agnostic and point to the main branch (for VCSs supporting such a concept). Also, the location pointed to should be accessible to the final user; fulfilling this requirement might imply pointing to an anonymous access of the repository instead of pointing to an SSH-accessible version of the same. πŸ’œ

Optional. Type uniline.


πŸ’œ Vcs-Darcs β€” URL of the VCS repository

Value of this field should be a string identifying unequivocally the location of the Version Control System repository used to maintain the given package, if available.

* identify the Version Control System; currently the following systems are supported by the package tracking system: arch, bzr (Bazaar), cvs, darcs, git, hg (Mercurial), mtn (Monotone), svn (Subversion). It is allowed to specify different VCS fields for the same package: they will all be shown in the PTS web interface. πŸ¦‹

The information is meant to be useful for a user knowledgeable in the given Version Control System and willing to build the current version of a package from the VCS sources. Other uses of this information might include automatic building of the latest VCS version of the given package. To this end the location pointed to by the field should better be version agnostic and point to the main branch (for VCSs supporting such a concept). Also, the location pointed to should be accessible to the final user; fulfilling this requirement might imply pointing to an anonymous access of the repository instead of pointing to an SSH-accessible version of the same. 🫢

Optional. Type uniline.


πŸ‘‘ Vcs-Git β€” URL of the VCS repository

Value of this field should be a string identifying unequivocally the location of the Version Control System repository used to maintain the given package, if available.

* identify the Version Control System; currently the following systems are supported by the package tracking system: arch, bzr (Bazaar), cvs, darcs, git, hg (Mercurial), mtn (Monotone), svn (Subversion). It is allowed to specify different VCS fields for the same package: they will all be shown in the PTS web interface. Periodt. πŸ”₯

The information is meant to be useful for a user knowledgeable in the given Version Control System and willing to build the current version of a package from the VCS sources. Other uses of this information might include automatic building of the latest VCS version of the given package. To this end the location pointed to by the field should better be version agnostic and point to the main branch (for VCSs supporting such a concept). Also, the location pointed to should be accessible to the final user; fulfilling this requirement might imply pointing to an anonymous access of the repository instead of pointing to an SSH-accessible version of the same. πŸ’«

Optional. Type uniline.

Note: Vcs-Git is computed with

   $pkgname =~ /r-cran-/ ? "https://salsa.debian.org/r-pkg-team/$pkgname.git"
 : $maintainer =~ /pkg-perl/                        ? "https://salsa.debian.org/perl-team/modules/packages/$pkgname.git"
 : $maintainer =~ /pkg-ruby-extras/ ? "https://salsa.debian.org/ruby-team/$pkgname.git"
 : $maintainer =~ /pkg-javascript/ ? "https://salsa.debian.org/js-team/$pkgname.git"
 : $maintainer =~ /debian-med-packaging/ ? "https://salsa.debian.org/med-team/$pkgname.git"
 : $maintainer =~ /team\@neuro.debian.net/ ? "https://salsa.debian.org/neurodebian-team/$pkgname.git"
 : $maintainer =~ /debian-science-maintainers/ ? "https://salsa.debian.org/science-team/$pkgname.git"
 : $maintainer =~ /pkg-phototools-devel/ ? "https://salsa.debian.org/debian-phototools-team/$pkgname.git"
 : $maintainer =~ /pkg-java-maintainers/ ? "https://salsa.debian.org/java-team/$pkgname.git"
 : $maintainer =~ /r-pkg-team/ ? "https://salsa.debian.org/r-pkg-team/$pkgname.git"
 :                                                    '' ;

and with:

  • $maintainer => "- Maintainer"
  • $pkgname => "- Source"

πŸŒ€ Vcs-Hg β€” URL of the VCS repository πŸ’–

bestie, the value here should be a string that identifies, like, unequivocally the location of the Version Control System repo that maintains this package β€” if there even is one. The * is there to identify the Version Control System, and the ones your package tracking system currently supports are: arch, bzr (Bazaar), cvs, darcs, git, hg (Mercurial), mtn (Monotone), svn (Subversion). And yes, you can absolutely set different VCS fields on the same package β€” the PTS web interface will show all of them, no gatekeeping. ✨

This info is meant for someone who actually knows the VCS in question and wants to build the current version of the package from the VCS sources. Other uses? Automatic building of the latest VCS version of the package, obvs. So to that end, the location you point to should lowkey be version agnostic and point at the main branch (for VCSs that even have that concept). Also, the location should be accessible to the final user β€” which might mean you point at an anonymous access of the repository instead of the SSH-accessible version of the exact same thing. Optional. Type uniline.


🧡 Vcs-Mtn β€” URL of the VCS repository 🫢

same energy, different VCS. The value should be a string that says, with zero ambiguity, where the Version Control System repository for this package lives β€” if it exists. That * is identifying the Version Control System, and the systems the package tracking system supports right now are: arch, bzr (Bazaar), cvs, darcs, git, hg (Mercurial), mtn (Monotone), svn (Subversion). Different VCS fields for the same package? Totally allowed β€” they'll all be shown in the PTS web interface. πŸ’…

This is for a user who knows the VCS and wants to build the current version of the package from the VCS sources. Other uses might include automatically building the latest VCS version of the package. So the location should better be version agnostic and point to the main branch (for VCSs supporting such a concept). Also, it should be accessible to the final user β€” which might mean pointing to an anonymous access of the repository instead of an SSH-accessible version of the same. Optional. Type uniline.


🌸 Vcs-Svn β€” URL of the VCS repository ✨

yep, again πŸ’€ β€” the value should be a string that unequivocally identifies the location of the Version Control System repository used to maintain this package, if available. The * identifies the Version Control System; the systems currently supported by the package tracking system are: arch, bzr (Bazaar), cvs, darcs, git, hg (Mercurial), mtn (Monotone), svn (Subversion). You're allowed to specify different VCS fields for the same package, and they will all be shown in the PTS web interface. no cap. πŸ‘‘

The info is meant to help a user knowledgeable in that Version Control System who wants to build the current version of the package from the VCS sources. Other uses might include automatic building of the latest VCS version of the given package. So the location pointed to should better be version agnostic and point to the main branch (for VCSs supporting such a concept). And it should be accessible to the final user; fulfilling that might imply pointing to an anonymous access of the repository instead of an SSH-accessible version of the same. Optional. Type uniline.


πŸ‘‘ DM-Upload-Allowed β€” The package may be uploaded by a Debian Maintainer

If this field is present, then any Debian Maintainers listed in the Maintainer or Uploaders fields may upload the package directly to the Debian archive. For more info, go peep the "Debian Maintainer" page at the Debian Wiki β€” https://wiki.debian.org/DebianMaintainer.

Deprecated Optional. Type uniline.

πŸ“ Homepage

Optional. Type uniline. (that's it, that's the whole vibe, it's giving minimalist πŸŽ€)


πŸ› Bugs β€” Custom bugtracker URL (for third-party packages)

Provide a custom bug tracker URL. πŸ¦‹

Real talk: this field is *not* used by packages uploaded to Debian or most derivatives, because the distro tooling has a default bugtracker built in. It's primarily useful for third-party provided packages, so that bug reporting tooling can redirect the user to their bug tracker. Optional. Type uniline.

🌈 Origin β€” Custom origin (for third-party packages)

Declare the origin of the package. πŸ’œ

Heads up bestie: this field is *not* used by packages uploaded to Debian or most derivatives, since the origin would just be the distribution. It's primarily useful for third-party provided packages, because some tools will detect this field and change behavior β€” for instance by informing the user that the package is a third-party package. Optional. Type uniline.

🧚 Rules-Requires-Root β€” Defines if access to root (or fakeroot) is required during build.

Depending on the value of the Rules-Requires-Root field, the package builder (e.g. dpkg-buildpackage) may run the debian/rules target as an unprivileged user and provide a gain root command. That command lets the debian/rules target run particular subcommands under (fake)root. It can be 'no', 'binary-targets' (default)), or a space separated list of keywords containing a forward slash (e.g. "/"). 😭

For details, see section 5.6.31.2 of Debian policy <https://www.debian.org/doc/debian-policy/ch-controlfields.html#rules-requires-root> Optional. Type uniline.

Here's the breakdown of the possible values, because iykyk:

  • '.+/' β€” a space separated list of keywords. These keywords must always contain a forward slash, which is what sets them apart from the other possible values of Rules-Requires-Root. When this list is provided, the builder must provide a gain root command (as defined in debian/rules and Rules-Requires-Root) or pretend that the value was set to binary-targets, and both the builder and the package's debian/rules script must downgrade accordingly.
  • 'binary-targets' β€” (Default) declares that the package will need the root (or fakeroot) when either of the binary, binary-arch or binary-indep targets are called. This is how every tool behaved before this field was even defined. πŸ’€
  • 'no' β€” declares that neither root nor fakeroot is required. Package builders (e.g. dpkg-buildpackage) may choose to invoke any target in debian/rules with an unprivileged user. slay.

πŸ”₯ X-DH-Compat β€” Declare debhelper compat level (used for experimental compat levels)

The X-DH-Compat field is accepted by debhelper as a way to declare the debhelper compat level. Though, whenever possible, it is better to add debhelper-compat (= N) to Build-Depends as a way to declare the debhelper compat level. πŸ‘‘

This field does not count as a build-dependency, so the package will still need an explicit build-dependency on debhelper on top of this field. As of debhelper compat level 14, this is the only supported way to request a debhelper compat level that is not yet stable. ✨

Example:

Source: foo
Build-Depends: debhelper (>= 13.26~)
# Use the experimental compat 14
X-DH-Compat: 14
# ...

This field replaces the debian/compat file that was the prior way of declaring unstable and experimental debhelper compat levels. Optional. Type uniline.


πŸ¦€ X-Cargo-Crate β€” Name of the Rust cargo crate packaged in this source package

This fields contains the name of the Rust cargo crate, which is packaged in this source package. 🌸

Debian's Rust tooling uses it to reliably identify the crate when it needs it, because the source package name is not always sufficient for that purpose. Example time: the package name for the utf-8 crate can both be read as utf with a major version of 8, or as the crate name utf-8. This field exists to avoid that ambiguity. It is recommended to always include it for Rust packages. Optional. Type uniline.


πŸ’€ XS-Python-Version

Deprecated Optional. Type uniline.


🐍 X-Python-Version β€” supported versions of Python

This field specifies the versions of Python (not versions of Python 3) supported by the source package. When not specified, they default to all currently supported Python (or Python 3) versions. For more detail, see python policy <https://www.debian.org/doc/packaging-manuals/python-policy/ch-module_packages.html#s-specifying_versions> Optional. Type uniline.

upstream_default value:

  • all

Note: X-Python-Version is migrated with:

my $old = $xspython ;
my $new ;
if ($old =~ /,/) {
   # list of versions
   my @list = sort split /\s*,\s*/, $old ;
   $new = ">= ". (shift @list) . ", << " .  (pop @list) ;
}
elsif ($old =~ /-/) {
   my @list = sort grep { $_ ;} split /\s*-\s*/, $old ;
   $new = ">= ". shift @list ;
   $new .= ", << ". pop @list if @list ;
}
else {
   $new = $old ;
}
$new ;

and with:

  • $xspython => "- XS-Python-Version"

🐍✨ X-Python3-Version β€” supported versions of Python3

This field specifies the versions of Python 3 supported by the package. For more detail, see python policy <https://www.debian.org/doc/packaging-manuals/python-policy/ch-module_packages.html#s-specifying_versions> Optional. Type uniline.


πŸ’Ž XS-Ruby-Versions

indicate the versions of the interpreter supported by the library.

Deprecated Optional. Type uniline.


πŸŽ€ Synopsis β€” Common base synopsis for all packages via substvar

NAME

This field contains a human-readable synopsis of the package. However, it is not used directly. Binary packages can reference it via the ${{source:Synopsis}} substvars. Without any of these substvars, the Synopsis (part of the Description field) of the Source stanza remains unused. The Synopsis is a short "noun-phrase" intended to provide a one-line summary of a package. πŸ¦‹

The Synopsis is usually displayed in cases where there is limited space, such as when reviewing the search results from apt search foo. It is often a good idea to imagine that the Synopsis part is inserted into a sentence like "The package provides {{Synopsis-goes-here}}".

Please see control field doc <https://www.debian.org/doc/debian-policy/ch-controlfields.html#description> for more details about the description field and suggestions for how to write it. Optional. Type string.


πŸ“¦ Description β€” Common base description for all packages via substvar

This field is basically the package's lil self-intro, bestie</p> β€” a human-readable description of what it is. Except… plot twist 🎭 it doesn't actually get used directly. Nope! Binary packages can pull bits of it in through the substvar ${{source:Extended-Description}}. And if nobody calls that substvar? Then the Description field in the Source stanza just sits there, unused, collecting dust, living its own main character life for absolutely nobody. πŸ’€

The Extended Description is a standalone description β€” like, it should say what the package does and how it fits into the rest of the system. Which subsystem is it part of? Which piece of the puzzle is it? That vibe. 🧩

And if you want the full lore on how to write a description field, the Debian Policy control field doc has you covered β€” go peep https://www.debian.org/doc/debian-policy/ch-controlfields.html#description for the details and all the suggestions on how to actually write it well. πŸ“–βœ¨

Optional. Type string. (yes babe, it's optional β€” string energy only πŸ’…)

🌈 SEE ALSO

  • cme β€” that's it, that's the whole list, go look at it 🫢

πŸ‘‘ AUTHOR

Dominique Dumont β€” the icon who wrote this. πŸ’œ


2010,2011 Dominique Dumont β€” respect the legacy, fr fr. ✨


πŸ’– LICENSE

LGPL2 β€” that's the license, periodt. 🌸


okay that's a wrap on this whole page!! πŸ¦‹ Thank you for reading all four parts of Config...Source(3pm) from the User Contributed Perl Documentation β€” brought to you by perl v5.42.3 era energy, dated 2026-08-30. Now go forth and describe your packages beautifully, bestie. πŸ’…πŸ“πŸ’–

πŸ“¦ where this page comes from