---
name: "dh_make"
section: "1"
platform: "linux"
package: "dh-make"
version: "2.202503"
release: "Debian 13 (Trixie)"
platforms: ["linux"]
url: "https://new.carta.tech/dh_make"
---

# dh\_make(1)

prepare upstream source for Debian packaging

## NAME

dh\_make - prepare upstream source for Debian packaging

## SYNOPSIS

**dh\_make** \[*option*\]...

## DESCRIPTION

**dh\_make** is a tool that adds necessary files for making Debian source package from upstream source according to the requirements of the Debian Policy. **dh\_make** must be invoked within a directory containing the source code, which must be named \<packagename\>-\<version\>. The \<packagename\> must be all lowercase, The \<packagename\> and \<version\> must be all lowercase, digits and dashes. The \<version\> can also contain digits, and the symbols plus, dot, tilde. The \<version\> must start with a digit. If the directory name does not conform to this scheme, you must rename it before using **dh\_make.** Alternatively, you may be able to use the **--packagename** option to force the package name.\

### PACKAGE CLASSES

Classes can be set with the single direct options (such as --s for single) or with the -C,--packageclass option (-C=s for single).

- **Single binary (s)**

  The package will generate a single binary .deb package. It is the standard case, so if you don't know what to do, choose this.

- **Arch-Independent (i)**

  The package will generate a single package that is arch-independent.

- **Library (l)**

  The package will generate at least two binaries. One library package containing just the lib in */usr/lib* and another \*-dev\_\*.deb package containing documentation and C headers.

- Unless **--native** was given,

  ### ACTIONS PERFORMED

**dh\_make** makes sure a original source archive (\<packagename\>\_\<version\>.orig.tar.gz) exists. The archive can either end with .gz or one of the other supported compression extensions such as bz2 or lzma. If no such file exists, the file specified with **-f** is copied in place. If no **-f** is supplied either but **--createorig** is, the current directory is created into a new archive *../\<packagename\>-\<version\>.orig.tar.gz* The original archive is needed for other Debian tools to generate the diffs to the original sources required by the Debian packaging format. Unless there are reasons against it, this file should be the pristine upstream archive.

Then **dh\_make** proceeds to generate a "debian" subdirectory and the necessary control files in the program source directory. Those control files are customized with the packagename and version extracted from the directory name.

**dh\_make** makes several attempts to obtain the username. It first checks for the environment variables **$DEBFULLNAME**, **$LOGNAME** is used to find a name in the */etc/passwd* file, and through NIS, YP and LDAP.

The e-mail address can either be specified with the -fB--email option or **dh\_make** will attempt to find it. It will first check the environment variables **$DEBEMAIL** and then **$EMAIL. If they are not set then** **dh\_make** **will search an available LDAP directory using** [**ldapsearch**(1)](/ldapsearch/1.md) **using $LOGNAME** as the uid to search under.  Finally it will use **$LOGNAME** and */etc/mailname* to generate an email address.

**dh\_make** will also generate example files that are also customized for the package generated. You can remove all files with \*.ex if you wish. You can also delete the README.Debian file if you don't have anything to put in it. Renaming the example files to their name without the .ex at the end (and editing them if necessary) will activate that feature of debhelper.

If the **--templates** or **-o** (**--overlay**) option is used **dh\_make** will apply a customizing template to the "debian" directory. See the templates described in the FILES section of this manpage for samples.

## OPTIONS

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

  Use *license* type in copyright file.  *license* can be apache, artistic, bsd, expat, gpl, gpl2, gpl3, isc, lgpl, lgpl2, lgpl3, or custom. If this field is not specified the copyright file has a space to fill in which sort of license is used. The field is case-insensitive so -c GPL works as well as -c gpl. gpl and lgpl will give you version 3 of the corresponding license, apache implies Apache v2.0. If you need a different version, change the license file afterwards or use the gpl2 and lgpl2 options.  If you select custom here you will need to use the **--copyrightfile** option as well.

- **--copyrightfile *filename***

  When using the custom **--copyright** option this is the location of your custom copyright file. **dh\_make** will process this file just like the standard copyright files. It is suggested you use one of the existing license files as a starting point.

- **--createorig**

  Create new archive *../\<packagename\>-\<version\>.orig.tar.gz* from the contents of the current directory. Can not be used together with **--native** nor **-f**.

- **--docs**

  Create a separate *PACKAGE-doc* binary package. All found documents in the source package will be installed here.

- **-e**, **--email *address***

  Use *address* as the e-mail address in the Maintainer: field of debian/control file.

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

  Create a native Debian packages, i.e. do not generate a .orig archive, since it will be generated when building with dpkg-buildpackage. The version number will not have a Debian revision number (e.g. -1) appended to it.

- **-f**, **--file *file***

  Use *file* as the original source archive, and skip the copying of the current program tree to program.orig.

- **-l**, **--library**

  Automatically set the package class to Library, skipping the question.

- **-s**, **--single**

  Automatically set the package class to Single binary, skipping the question.

- **-i**, **--indep**

  Automatically set the package class to arch-independent binary, skipping the question.

- **-a**, **--addmissing**

  Adds missing example and control files on an existing debian source directory.

- **-t**, **--templates *directory***

  Applies the customizing templates in *directory* to the debian directory.

- **-o**, **--overlay *directory***

  Applies a customization template to an existing debian directory.

- **-p**, **--packagename *name***

  Force the package name to be *name*, good for packages with hyphens in their name or other strangeness. You can also make the parameter *name*\_*version* which will set both the package name and version and bypass and directory checking.

- **-d**, **--defaultless**

  Skips applying the default templates to the target debian directory. Generally used in conjunction with either the **--overlay** or **--templates** options.

- **--with-emacs**

  Add files for emacsen.

- **--python**

  Set package class to Python to generate additional Python packaging specific definitions.

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

  Display the name, version, available options and authors, and exit successfully.

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

  Show the program name and version, and exit successfully.

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

  Automatic yes to prompts and run non-interactively.  The package class needs to be set for **dh\_make** to run fully automatically.

## ENVIRONMENT

The following environment settings are used by **dh\_make**:

- **DEBEMAIL**

  Email address to use in control and changelog entries.

- **DEBFULLNAME**

  You full name, eg "John Doe" which will appear in the control and changelog entries.

- **EMAIL**

  Email address to use in control and changelog entries, only used if **DEBEMAIL** is no set.

- **LOGNAME**

  Default username used for looking up email and full name in other directories.

## FILES

- */usr/share/debhelper/dh\_make*

  Directory that contains all the template files, separated in six directories:

- *debian/*

  with files for all package classes,

- *debians/*

  with files specific to the Single binary class,

- *debianl/*

  with files specific to the Library class, and finally,

- *native/*

  with files specific to the native Debian packages.

- *licenses/*

  template files for the more common licenses used in Debian packages

## EXAMPLES

To get **dh\_make** to use the defaults and ask you various questions about the package

```
dh_make
```

Create your single class package using the with the GPL license:

```
dh_make -s -c gpl
```

A more involved example where you set your name in the environment, contact email and license in the options and specify the upstream file:

```
DEBFULLNAME="John Doe"
dh_make --email contact@example.com --copyright=bsd \
 --file ../foo.tar.gz
```

## BUGS

**dh\_make** may not detect your username and email address correctly when using sudo.

## SEE ALSO

[**dpkg**(1)](/dpkg/1.md), [**dpkg-buildpackage**(1)](/dpkg-buildpackage/1.md), [**dh**(1)](/dh/1.md), [**make-kpkg**(1)](/make-kpkg/1.md), [**debhelper**(7)](/debhelper/7.md).

You may also want to read the Debian Policy (in */usr/share/doc/debian-policy*) and the New Maintainers' Guide (in */usr/share/doc/maint-guide*).
