---
name: "debmake"
section: "1"
platform: "linux"
package: "debmake"
version: "4.5.1-2"
release: "Debian 13 (Trixie)"
platforms: ["linux"]
url: "https://new.carta.tech/debmake"
---

# debmake(1)

program to make a Debian source package

## NAME

debmake - program to make a Debian source package

## SYNOPSIS

**debmake**  \[**-h**\]  \[**-c** \| **-k**\] \[**-n** \| **-a** *package-version***.orig.tar.gz** \| **-d** \| **-t** \] \[**-p** *package*\] \[**-u** *version*\] \[**-r** *revision*\] \[**-z** *extension*\] \[**-b** "*binarypackage\[:type\], ...*\]" \[**-e** *foo@example.org*\] \[**-f** "*firstname lastname*"\] \[**-i** "*buildtool*" \| **-j**\] \[**-l** *license\_file*\] \[**-m**\] \[**-o** *file*\] \[**-q**\] \[**-s**\] \[**-v**\] \[**-w** "*addon, ...*"\] \[**-x** \[*01234*\]\] \[**-y**\] \[**-L**\] \[**-P**\] \[**-T**\]

## DESCRIPTION

**debmake** helps to build a Debian package from the upstream source.  Normally, this is done as follows:

• The upstream tarball is downloaded as the *package-version***.tar.gz** file.

• It is untarred to create many files under the *package-version/* directory.

• debmake is invoked in the *package-version/* directory, possibly without any arguments.

• Files in the *package-version***/debian/** directory are manually adjusted.

• **dpkg-buildpackage** (usually from its wrapper **debuild** or **sbuild**) is invoked in the *package-version/* directory to make Debian packages.

Make sure to protect the arguments of the **-b**, **-f**, **-l**, and **-w** options from shell interference by quoting them properly.

### optional arguments:

- **-h**, **--help**

  show this help message and exit.

- **-c**, **--copyright**

  scan source for copyright+license text and exit.

  • **-c**: simple output style

  • **-cc**: normal output style (similar to the **debian/copyright** file)

  • **-ccc**: debug output style

- **-k**, **--kludge**

  compare the **debian/copyright** file with the source and exit.

  The **debian/copyright** file must be organized to list the generic file patterns before the specific exceptions.

  • **-k**: basic output style

  • **-kk**: verbose output style

- **-n**, **--native**

  make a native Debian source package without **.orig.tar.gz**.  This makes a “**3.0 (native)**” format package.

  If you are thinking of packaging a Debian-specific source tree with **debian/** in it into a native Debian package, please think otherwise.  You can use  the “**debmake -d  -i debuild**” or “**debmake -t -i debuild**” commands to make a “**3.0 (quilt)**” format non-native Debian package.  The only difference is that the **debian/changelog** file must use the  non-native version scheme: *version-revision*.  The non-native package is more friendly to downstream distributions.

- **-a** *package-version***.tar.gz**, **--archive** *package-version***.tar.gz**

  use the upstream source tarball directly. (**-p**, **-u**, **-z**: overridden)

  The upstream tarball may be specified as *package\_version***.orig.tar.gz** and **tar.gz**.  For other cases, it may be **tar.bz2**, or **tar.xz**.

  If the specified upstream tarball name contains uppercase letters, the Debian package name is generated by converting them to lowercase letters.

  If the specified argument is the URL (`http://`, `https://`, or `ftp://`) to the upstream tarball, the upstream tarball is downloaded from the URL using **wget** or **curl**.

- **-d**, **--dist**

  run the “**make dist**” command equivalents first to generate the upstream tarball and use it.

  The “**debmake -d**” command is designed to run in the *package/* directory hosting the upstream VCS with the build system supporting the “**make dist**” command equivalents.  (`automake`/`autoconf`, ...)

- **-t**, **--tar**

  run the “**tar**” command to generate the upstream tarball and use it.

  The “**debmake -t**” command is designed to run in the *package/* directory hosting the upstream VCS.  Unless you provide the upstream version with the **-u** option or with the **debian/changelog** file, a snapshot upstream version is generated in the **0\\~%y%m%d%H%M** format, e.g., *0~1403012359*, from the UTC date and time.  The generated tarball excludes the **debian/** directory found in the upstream VCS. (It also excludes typical VCS directories: **.git/**, **.hg/**, **.svn/**, **.CVS/**.)

- **-p** *package*, **--package** *package*

  set the Debian package name.

- **-u** *version*, **--upstreamversion** *version*

  set the upstream package version.

- **-r** *revision*, **--revision** *revision*

  set the Debian package revision.

- **-z** *extension*, **--targz** *extension*

  set the tarball type, *extension*=(**tar.gz**\|**tar.bz2**\|**tar.xz**). (alias: **z**, **b**, **x**)

- **-b** "*binarypackage\[:type\],...*", **--binaryspec** "*binarypackage\[:type\],...*"

  set the binary package specs by a comma separated list of *binarypackage:type* pairs.  Here, *binarypackage* is the binary package name, and the optional *type* is chosen from the following *type* values:

  • **bin**: C/C++ compiled ELF binary code package (any, foreign) (default, alias: **""**, i.e., **null-string**)

  • **data**: Data (fonts, graphics, ...) package (all, foreign) (alias: **da**)

  • **dev**: Library development package (any, same) (alias: **de**)

  • **doc**: Documentation package (all, foreign) (alias: **do**)

  • **lib**: Library package (any, same) (alias: **l**)

  • **perl**: Perl script package (all, foreign) (alias: **pl**)

  • **python3**: Python (version 3) script package (all, foreign) (alias: **py3**, **python**, **py**)

  • **ruby**: Ruby script package (all, foreign) (alias: **rb**)

  • **nodejs**: Node.js based JavaScript package (all, foreign) (alias: **js**)

  • **script**: Shell and other interpreted language script package (all, foreign) (alias: **sh**)

  The pair values in the parentheses, such as (any, foreign), are the **Architecture** and **Multi-Arch** stanza values set in the **debian/control** file.  In many cases, the **debmake** command makes good guesses for *type* from *binarypackage*.  If *type* is not obvious, *type* is set to **bin**.

  Here are examples for typical binary package split scenarios where the upstream Debian source package name is **foo**:

  • Generating an executable binary package **foo**:

  • “**-b’foo:bin'**”, or its short form \`**-b'-'**\`", or no **-b** option

  • Generating an executable (python3) binary package **python3-foo**:

  • “**-b’python3-foo:py'**”, or its short form “**-b’python3-foo'**”

  • Generating a data package **foo**:

  • “**-b’foo:data'**”, or its short form “**-b'-:data'**”

  • Generating a executable binary package **foo** and a documentation one **foo-doc**:

  • “**-b’foo:bin,foo-doc:doc'**”, or its short form “**-b'-:-doc'**”

  • Generating a executable binary package **foo**, a library package **libfoo1**, and a library development package **libfoo-dev**:

  • “**-b’foo:bin,libfoo1:lib,libfoo-dev:dev'**” or its short form “**-b'-,libfoo1,libfoo-dev'**”

  If the source tree contents do not match settings for *type*, the **debmake** command warns you.

- **-e** *foo@example.org*, **--email** *foo@example.org*

  set e-mail address.

  The default is taken from the value of the environment variable **$DEBEMAIL**.

**-f** "*firstname lastname*", **--fullname** "*firstname lastname*"

set the fullname.

The default is taken from the value of the environment variable **$DEBFULLNAME**.

- **-i** "*buildtool*", **--invoke** "*buildtool*"

  invoke "*buildtool*" at the end of execution.  *buildtool* may be “**dpkg-buildpackage**”, “**debuild**”, “**sbuild**”, etc.

  The default is not to execute any program.

  Setting this option automatically sets the **--local** option.

- **-j**, **--judge**

  run **dpkg-depcheck** to judge build dependencies and identify file paths.  Log files are in the parent directory.

  • *package***.build-dep.log**: Log file for **dpkg-depcheck**.

  • *package***.install.log**: Log file recording files in the **debian/tmp** directory.

- **-l** "*license\_file,...*", **--license** "*license\_file,...*"

  add formatted license text to the end of the **debian/copyright** file holding license scan results.

  The default is to add **COPYING** and **LICENSE**, and *license\_file* needs to list only the additional file names all separated by “**,**”.

- **-m**, **--monoarch**

  force packages to be non-multiarch.

- **-o** *file*, **--option** *file*

  read optional parameters from *file*. (This is not for everyday use.)

  The content of *file* is sourced as the Python code at the end of **para.py**.  For example, the package description can be specified by the following file.

  ```
  para['desc'] = 'program short description'
  para['desc_long'] = '''\
   program long description which you wish to include.
   .
   Empty line is space + .
   You keep going on ...
  '''
  ```

- **-q**, **--quitearly**

  quit early before creating files in the **debian/** directory.

- **-s**, **--spec**

  use upstream spec (**pyproject.py** for Python, etc.) for the package description.

- **-v**, **--version**

  show version information.

- **-w** "*addon,...*", **--with** "*addon,...*"

  add extra arguments to the **--with** option of the [**dh**(1)](/dh/1.md) command as *addon* in **debian/rules**.

  The *addon* values are listed all separated by “**,**”, e.g., “**-w "python3,autoreconf"**”.

  For  Autotools based packages, **autoreconf** as *addon* to run “**autoreconf -i -v -f**” for every package building is default behavior of the [**dh**(1)](/dh/1.md) command.

  For Autotools based packages, if they install Python (version 3) programs, setting **python3** as *addon* to the **debmake** command argument is needed since this is non-obvious.  But for **pyproject.toml** based Python packages, setting **python3** as *addon* to the **debmake** command argument is not needed since this is obvious and the **debmake** command automatically set it to the [**dh**(1)](/dh/1.md) command.

- **-x** *n*, **--extra** *n*

  generate configuration files as templates.  (Please note **debian/changelog**, **debian/control**, **debian/copyright**, and **debian/rules** are bare minimum configuration files to build a Debian binary package.)

  The number *n* determines which configuration templates are generated.

  • **-x0**: all required configuration template files. (selected option if any of these files already exist)

  • **-x1**: all **-x0** files + desirable configuration template files with binary package type supports.

  • **-x2**: all **-x1** files + normal configuration template files with maintainer script supports.

  • **-x3**: all **-x2** files + optional configuration template files. (default optuin)

  • **-x4**: all **-x3** files + deprecated configuration template files.

Some configuration template files are generated with the extra **.ex** suffix to ease their removal. To activate these, rename their file names to the ones without the **.ex** suffix and edit their contents. Existing configuration files are never overwritten.  If you wish to update some of the existing configuration files, please rename them  before  running  the **debmake** command and manually merge the generated configuration files with the old renamed ones.

- **-y**, **--yes**

  “force yes” for all prompts. (without option: “ask \[Y/n\]”; doubled option: “force no”)

- **-L**, **--local**

  generate configuration files for the local package to fool [**lintian**(1)](/lintian/1.md) checks.

- **-P**, **--pedantic**

  pedantically check auto-generated files.

- **-T**, **--tutorial**

  output tutorial comment lines in template files.  default when **-x3** or **-x4** is set.

## EXAMPLES

For a well behaving source, you can build a good-for-local-use installable single Debian binary package easily with one command.  Test install of such a package generated in this way offers a good alternative to the traditional “**make install**” command installing into the **/usr/local** directory since the Debian package can be  removed  cleanly  by  the “**dpkg -P** '...'” command. Here are some examples of how to build such test packages. (These should work in most cases.  If the **-d** option does not work, try the **-t** option instead.)

For a typical C program source tree packaged with **autoconf**/**automake**:

• **debmake -d -i debuild**

For a typical Python (version 3) module source tree:

• **debmake -s -d -b":python3" -i debuild**

For a typical Python (version 3) module in the *package-version***.tar.gz** archive:

• **debmake -s -a** *package-version***.tar.gz -b":python3" -i debuild**

For a typical Perl module in the *package-version***.tar.gz** archive:

• **debmake -a** *package-version***.tar.gz -b":perl" -i debuild**

## HELPER PACKAGES

Packaging may require installation of some additional specialty helper packages.

• Python (version 3) programs may require the **pybuild-plugin-pyproject** package.

• The Autotools (**autoconf** + **automake**) build system may require **autotools-dev** or **dh-autoreconf** package.

• Ruby programs may require the **gem2deb** package.

• Node.js based JavaScript programs may require the **pkg-js-tools** package.

• Java programs may require the **javahelper** package.

• Gnome programs may require the **gobject-introspection** package.

• etc.

## CAVEAT

Although **debmake** is meant to provide template files for the package maintainer to work on, actual packaging activities are often performed without using **debmake** while referencing only existing similar packages and “*Debian Policy Manual* \<https://www.debian.org/doc/debian-policy/\>”. All template files generated by **debmake** are required to be modified manually.

There are 2 positive points for **debmake**:

• **debmake** helps to write terse packaging tutorial “*Guide for Debian Maintainers* \<https://www.debian.org/doc/manuals/debmake-doc/\>” (**debmake-doc** package).

• **debmake** provides short extracted license texts as **debian/copyright** in decent accuracy to help license review.

For license review, it is highly recommended to use other tools such as **licensecheck** from the **licensecheck** package.

There are some limitations for what characters may be used as a part of the Debian package.  The most notable limitation is the prohibition of uppercase letters in the package name.  Here is a summary as a set of regular expressions:

• Upstream package name (**-p**): `[-+.a-z0-9]{2,}`

• Binary package name (**-b**): `[-+.a-z0-9]{2,}`

• Upstream version (**-u**): `[0-9][-+.:~a-z0-9A-Z]*`

• Debian revision (**-r**): `[0-9][+.~a-z0-9A-Z]*`

See the exact definition in “*Chapter 5 - Control files and their fields* \<https://www.debian.org/doc/debian-policy/#document-ch-controlfields\>” in the “Debian Policy Manual”.

**debmake** assumes relatively simple packaging cases.  So all programs related to the interpreter are assumed to be “**Architecture: all**”.  This is not always true.

## DEBUG

Please report bugs to the **debmake** package using the **reportbug** command.

The character set in the environment variable **$DEBUG** determines the logging output level.

• **i**: `main.py` logging

• **p**: `para.py` logging

• **s**: `checkdep5.py` `check_format_style()` logging

• **y**: `checkdep5.py` `split_years_name()` logging

• **b**: `checkdep5.py` `parse_lines()` 1 logging — content\_state scan loop: begin-loop

• **m**: `checkdep5.py` `parse_lines()` 2 logging — content\_state scan loop: after regex match

• **e**: `checkdep5.py` `parse_lines()` 3 logging — content\_state scan loop: end-loop

• **a**: `checkdep5.py` `parse_lines()` 4 logging — print author/translator section text

• **f**: `checkdep5.py` `check_all_license()` 1 logging — input filename for the copyright scan

• **l**: `checkdep5.py` `check_all_license()` 2 logging — print license section text

• **c**: `checkdep5.py` `check_all_license()` 3 logging — print copyright section text

• **k**: `checkdep5.py` `check_all_license()` 4 logging — sort key for debian/copyright stanza

• **r**: `sed.py` logging

• **w**: `cat.py` logging

• **n**: `kludge.py` logging (“**debmake -k**”)

Use this feature as:

```
 $ DEBUG=ipsybmeaflckrwn debmake ...
```

See **README.developer** in the source for more.

## AUTHOR

Copyright © 2014-2024 Osamu Aoki  \<osamu@debian.org\>

## LICENSE

Expat License

## SEE ALSO

The **debmake-doc** package provides the “*Guide for Debian Maintainers* \<https://www.debian.org/doc/manuals/debmake-doc/\>” in plain text, HTML and PDF formats under the **/usr/share/doc/debmake-doc/** directory.

See also [**dpkg-source**(1)](/dpkg-source/1.md), [**deb-control**(5)](/deb-control/5.md), [**debhelper**(7)](/debhelper/7.md), [**dh**(1)](/dh/1.md), [**dpkg-buildpackage**(1)](/dpkg-buildpackage/1.md), [**debuild**(1)](/debuild/1.md), [**quilt**(1)](/quilt/1.md), [**dpkg-depcheck**(1)](/dpkg-depcheck/1.md), [**sbuild**(1)](/sbuild/1.md), [**gbp-buildpackage**(1)](/gbp-buildpackage/1.md), and [**gbp-pq**(1)](/gbp-pq/1.md) manpages.
