---
name: "makepkg-template"
section: "1"
platform: "linux"
package: "pacman"
version: "7.1.0.r9.g54d9411-3"
release: "Arch Linux 2026-11-01"
platforms: ["linux"]
url: "https://new.carta.tech/makepkg-template"
---

# makepkg-template(1)

package build templating utility

## NAME

makepkg-template - package build templating utility

## SYNOPSIS

*makepkg-template* \[options\]

## DESCRIPTION

*makepkg-template* is a script to ease the work of maintaining multiple similar PKGBUILDs. It allows you to move most of the code from the PKGBUILD into a template file and uses markers to allow in-place updating of existing PKGBUILDs if the template has been changed.

Template files can contain any code allowed in a PKGBUILD. You can think of them like external files included with "." or "source", but they will be inlined into the PKGBUILD by *makepkg-template* so you do not depend on the template file when building the package.

Markers are bash comments in the form of:

```
# template start; key=value; key2=value2; ...
```

and

```
# template end;
```

Currently used keys are: name (mandatory) and version. Template names are limited to alphanumerics, "@", "+", ".", "-", and "\_". Versions are limited to numbers and ".".

For initial creation there is a one line short cut which does not need an end marker:

```
# template input; key=value;
```

Using this short-cut will result in *makepkg-template* replacing it with start and end markers and the template code on the first run.

Template files should be stored in one directory and filenames should be "$template\_name-$version.template" with a symlink "$template\_name.template" pointing to the most recent template. If the version is not set in the marker, *makepkg-template* will automatically use the target of "$template\_name.template", otherwise the specified version will be used. This allows for easier verification of untrusted PKGBUILDs if the template is trusted. You verify the non-template code and then use a command similar to this:

```
diff -u <(makepkg-template -o -) PKGBUILD
```

Template files may also contain markers leading to nested templates in the resulting PKGBUILD. If you use markers in a template, please set the version you used/tested with in the start/input marker so other people can properly recreate from templates.

## OPTIONS

**-p, --input** \<build script\>

Read the package script build script instead of the default.

**-o, --output** \<build script\>

Write the updated file to build script instead of overwriting the input file.

- **-n, --newest**

  Always use the newest available template file.

- **--template-dir** \<dir\>

  Change the dir where we are looking for template files. This option may be given multiple times in which case files found in directory given last will take precedence.

## EXAMPLE PKGBUILD

```
pkgname=perl-config-simple
pkgver=4.58
pkgrel=1
pkgdesc="simple configuration file class"
arch=('any')
license=('PerlArtistic' 'GPL')
depends=('perl')
source=("http://search.cpan.org/CPAN/authors/id/S/SH/SHERZODR/Config-Simple-${pkgver}.tar.gz")
sha256sums=('dd9995706f0f9384a15ccffe116c3b6e22f42ba2e58d8f24ed03c4a0e386edb4')
_distname="Config-Simple"
```

```
# template start; name=perl-module; version=1.0;
_distdir="${_distname}-${pkgver}"
url="https://metacpan.org/release/${_distname}"
options+=('!emptydirs')
```

```
build() {
        cd "$srcdir/$_distdir"
        perl Makefile.PL INSTALLDIRS=vendor
        make
}
```

```
check() {
        cd "$srcdir/$_distdir"
        make test
}
```

```
package() {
        cd "$srcdir/$_distdir"
        make DESTDIR="$pkgdir" install
}
# template end;
```

## SEE ALSO

[**makepkg**(8)](/makepkg/8.md), [**PKGBUILD**(5)](/PKGBUILD/5.md)

See the pacman website at https://archlinux.org/pacman/ for current information on pacman and its related tools.

## BUGS

Bugs? You must be kidding; there are no bugs in this software. But if we happen to be wrong, please report them to the issue tracker at https://gitlab.archlinux.org/pacman/pacman/-/issues with specific information such as your command-line, the nature of the bug, and even the package database if it helps.

## AUTHORS

Current maintainers:

• Allan McRae \<allan@archlinux.org\>

• Andrew Gregory \<andrew.gregory.8@gmail.com\>

• Morgan Adamiec \<morganamilo@archlinux.org\>

Past major contributors:

• Judd Vinet \<jvinet@zeroflux.org\>

• Aurelien Foret \<aurelien@archlinux.org\>

• Aaron Griffin \<aaron@archlinux.org\>

• Dan McGee \<dan@archlinux.org\>

• Xavier Chantry \<shiningxc@gmail.com\>

• Nagy Gabor \<ngaba@bibl.u-szeged.hu\>

• Dave Reisner \<dreisner@archlinux.org\>

• Eli Schwartz \<eschwartz@archlinux.org\>

For additional contributors, use git shortlog -s on the pacman.git repository.
