summaryrefslogtreecommitdiffstats
path: root/upstream/archlinux/man5/PKGBUILD.5
diff options
context:
space:
mode:
authorDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-15 19:43:11 +0000
committerDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-15 19:43:11 +0000
commitfc22b3d6507c6745911b9dfcc68f1e665ae13dbc (patch)
treece1e3bce06471410239a6f41282e328770aa404a /upstream/archlinux/man5/PKGBUILD.5
parentInitial commit. (diff)
downloadmanpages-l10n-fc22b3d6507c6745911b9dfcc68f1e665ae13dbc.tar.xz
manpages-l10n-fc22b3d6507c6745911b9dfcc68f1e665ae13dbc.zip
Adding upstream version 4.22.0.upstream/4.22.0
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'upstream/archlinux/man5/PKGBUILD.5')
-rw-r--r--upstream/archlinux/man5/PKGBUILD.5795
1 files changed, 795 insertions, 0 deletions
diff --git a/upstream/archlinux/man5/PKGBUILD.5 b/upstream/archlinux/man5/PKGBUILD.5
new file mode 100644
index 00000000..a5907582
--- /dev/null
+++ b/upstream/archlinux/man5/PKGBUILD.5
@@ -0,0 +1,795 @@
+'\" t
+.\" Title: pkgbuild
+.\" Author: [see the "Authors" section]
+.\" Generator: DocBook XSL Stylesheets vsnapshot <http://docbook.sf.net/>
+.\" Date: 2024-02-06
+.\" Manual: Pacman Manual
+.\" Source: Pacman 6.0.2
+.\" Language: English
+.\"
+.TH "PKGBUILD" "5" "2024\-02\-06" "Pacman 6\&.0\&.2" "Pacman Manual"
+.\" -----------------------------------------------------------------
+.\" * Define some portability stuff
+.\" -----------------------------------------------------------------
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.\" http://bugs.debian.org/507673
+.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.ie \n(.g .ds Aq \(aq
+.el .ds Aq '
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "NAME"
+PKGBUILD \- Arch Linux package build description file
+.SH "SYNOPSIS"
+.sp
+PKGBUILD
+.SH "DESCRIPTION"
+.sp
+This manual page describes general rules about PKGBUILDs\&. Once a PKGBUILD is written, the actual package is built using makepkg and installed with pacman\&.
+.if n \{\
+.sp
+.\}
+.RS 4
+.it 1 an-trap
+.nr an-no-space-flag 1
+.nr an-break-flag 1
+.br
+.ps +1
+\fBNote\fR
+.ps -1
+.br
+.sp
+An example PKGBUILD, useful for reference, is located in \fI/usr/share/pacman\fR along with other example files such as an install script\&. You can copy the provided PKGBUILD\&.proto file to a new package build directory and make customizations to suit your needs\&.
+.sp .5v
+.RE
+.SH "OPTIONS AND DIRECTIVES"
+.sp
+The following is a list of standard options and directives available for use in a PKGBUILD\&. These are all understood and interpreted by makepkg, and most of them will be directly transferred to the built package\&. The mandatory fields for a minimally functional PKGBUILD are \fBpkgname\fR, \fBpkgver\fR, \fBpkgrel\fR and \fBarch\fR\&.
+.sp
+If you need to create any custom variables for use in your build process, it is recommended to prefix their name with an \fI_\fR (underscore)\&. This will prevent any possible name clashes with internal makepkg variables\&. For example, to store the base kernel version in a variable, use something similar to $_basekernver\&.
+.PP
+\fBpkgname (array)\fR
+.RS 4
+Either the name of the package or an array of names for split packages\&. Valid characters for members of this array are alphanumerics, and any of the following characters: \(lq@ \&. _ + \-\(rq\&. Additionally, names are not allowed to start with hyphens or dots\&.
+.RE
+.PP
+\fBpkgver\fR
+.RS 4
+The version of the software as released from the author (e\&.g\&.,
+\fI2\&.7\&.1\fR)\&. The variable is not allowed to contain colons, forward slashes, hyphens or whitespace\&.
+.sp
+The
+pkgver
+variable can be automatically updated by providing a
+pkgver()
+function in the PKGBUILD that outputs the new package version\&. This is run after downloading and extracting the sources and running the
+prepare()
+function (if present), so it can use those files in determining the new
+pkgver\&. This is most useful when used with sources from version control systems (see below)\&.
+.RE
+.PP
+\fBpkgrel\fR
+.RS 4
+This is the release number specific to the distribution\&. This allows package maintainers to make updates to the package\(cqs configure flags, for example\&. This is typically set to
+\fI1\fR
+for each new upstream software release and incremented for intermediate PKGBUILD updates\&. The variable is a positive integer, with an optional subrelease level specified by adding another positive integer separated by a period (i\&.e\&. in the form x\&.y)\&.
+.RE
+.PP
+\fBepoch\fR
+.RS 4
+Used to force the package to be seen as newer than any previous versions with a lower epoch, even if the version number would normally not trigger such an upgrade\&. This value is required to be a positive integer; the default value if left unspecified is
+\fI0\fR\&. This is useful when the version numbering scheme of a package changes (or is alphanumeric), breaking normal version comparison logic\&. See
+\fBpacman\fR(8)
+for more information on version comparisons\&.
+.RE
+.PP
+\fBpkgdesc\fR
+.RS 4
+This should be a brief description of the package and its functionality\&. Try to keep the description to one line of text and to not use the package\(cqs name\&.
+.RE
+.PP
+\fBurl\fR
+.RS 4
+This field contains a URL that is associated with the software being packaged\&. This is typically the project\(cqs web site\&.
+.RE
+.PP
+\fBlicense (array)\fR
+.RS 4
+This field specifies the license(s) that apply to the package\&. Commonly used licenses can be found in
+\fI/usr/share/licenses/common\fR\&. If you see the package\(cqs license there, simply reference it in the license field (e\&.g\&.,
+license=(\*(AqGPL\*(Aq))\&. If the package provides a license not available in
+\fI/usr/share/licenses/common\fR, then you should include it in the package itself and set
+license=(\*(Aqcustom\*(Aq)
+or
+license=(\*(Aqcustom:LicenseName\*(Aq)\&. The license should be placed in
+\fI$pkgdir/usr/share/licenses/$pkgname/\fR
+when building the package\&. If multiple licenses are applicable, list all of them:
+license=(\*(AqGPL\*(Aq \*(AqFDL\*(Aq)\&.
+.RE
+.PP
+\fBinstall\fR
+.RS 4
+Specifies a special install script that is to be included in the package\&. This file should reside in the same directory as the PKGBUILD and will be copied into the package by makepkg\&. It does not need to be included in the source array (e\&.g\&.,
+install=$pkgname\&.install)\&.
+.RE
+.PP
+\fBchangelog\fR
+.RS 4
+Specifies a changelog file that is to be included in the package\&. The changelog file should end in a single newline\&. This file should reside in the same directory as the PKGBUILD and will be copied into the package by makepkg\&. It does not need to be included in the source array (e\&.g\&.,
+changelog=$pkgname\&.changelog)\&.
+.RE
+.PP
+\fBsource (array)\fR
+.RS 4
+An array of source files required to build the package\&. Source files must either reside in the same directory as the PKGBUILD, or be a fully\-qualified URL that makepkg can use to download the file\&. To simplify the maintenance of PKGBUILDs, use the
+$pkgname
+and
+$pkgver
+variables when specifying the download location, if possible\&. Compressed files will be extracted automatically unless found in the noextract array described below\&.
+.sp
+Additional architecture\-specific sources can be added by appending an underscore and the architecture name e\&.g\&.,
+\fIsource_x86_64=()\fR\&. There must be a corresponding integrity array with checksums, e\&.g\&.
+\fIcksums_x86_64=()\fR\&.
+.sp
+It is also possible to change the name of the downloaded file, which is helpful with weird URLs and for handling multiple source files with the same name\&. The syntax is:
+source=(\*(Aqfilename::url\*(Aq)\&.
+.sp
+makepkg also supports building developmental versions of packages using sources downloaded from version control systems (VCS)\&. For more information, see
+Using VCS Sources
+below\&.
+.sp
+Files in the source array with extensions
+\&.sig,
+\&.sign
+or,
+\&.asc
+are recognized by makepkg as PGP signatures and will be automatically used to verify the integrity of the corresponding source file\&.
+.RE
+.PP
+\fBvalidpgpkeys (array)\fR
+.RS 4
+An array of PGP fingerprints\&. If this array is non\-empty, makepkg will only accept signatures from the keys listed here and will ignore the trust values from the keyring\&. If the source file was signed with a subkey, makepkg will still use the primary key for comparison\&.
+.sp
+Only full fingerprints are accepted\&. They must be uppercase and must not contain whitespace characters\&.
+.RE
+.PP
+\fBnoextract (array)\fR
+.RS 4
+An array of file names corresponding to those from the source array\&. Files listed here will not be extracted with the rest of the source files\&. This is useful for packages that use compressed data directly\&.
+.RE
+.PP
+\fBcksums (array)\fR
+.RS 4
+This array contains CRC checksums for every source file specified in the source array (in the same order)\&. makepkg will use this to verify source file integrity during subsequent builds\&. If
+\fISKIP\fR
+is put in the array in place of a normal hash, the integrity check for that source file will be skipped\&. To easily generate cksums, run \(lqmakepkg \-g >> PKGBUILD\(rq\&. If desired, move the cksums line to an appropriate location\&. Note that checksums generated by "makepkg \-g" should be verified using checksum values provided by the software developer\&.
+.RE
+.PP
+\fBmd5sums, sha1sums, sha224sums, sha256sums, sha384sums, sha512sums, b2sums (arrays)\fR
+.RS 4
+Alternative integrity checks that makepkg supports; these all behave similar to the cksums option described above\&. To enable use and generation of these checksums, be sure to set up the
+INTEGRITY_CHECK
+option in
+\fBmakepkg.conf\fR(5)\&.
+.RE
+.PP
+\fBgroups (array)\fR
+.RS 4
+An array of symbolic names that represent groups of packages, allowing you to install multiple packages by requesting a single target\&. For example, one could install all KDE packages by installing the
+\fIkde\fR
+group\&.
+.RE
+.PP
+\fBarch (array)\fR
+.RS 4
+Defines on which architectures the given package is available (e\&.g\&.,
+arch=(\*(Aqi686\*(Aq \*(Aqx86_64\*(Aq))\&. Packages that contain no architecture specific files should use
+arch=(\*(Aqany\*(Aq)\&. Valid characters for members of this array are alphanumerics and \(lq_\(rq\&.
+.RE
+.PP
+\fBbackup (array)\fR
+.RS 4
+An array of file names, without preceding slashes, that should be backed up if the package is removed or upgraded\&. This is commonly used for packages placing configuration files in
+\fI/etc\fR\&. See
+"Handling Config Files"
+in
+\fBpacman\fR(8)
+for more information\&.
+.RE
+.PP
+\fBdepends (array)\fR
+.RS 4
+An array of packages this package depends on to run\&. Entries in this list should be surrounded with single quotes and contain at least the package name\&. Entries can also include a version requirement of the form
+\fIname<>version\fR, where
+<>
+is one of five comparisons:
+>=
+(greater than or equal to),
+<=
+(less than or equal to),
+=
+(equal to),
+>
+(greater than), or
+<
+(less than)\&.
+.sp
+If the dependency name appears to be a library (ends with \&.so), makepkg will try to find a binary that depends on the library in the built package and append the version needed by the binary\&. Appending the version yourself disables automatic detection\&.
+.sp
+Additional architecture\-specific depends can be added by appending an underscore and the architecture name e\&.g\&.,
+\fIdepends_x86_64=()\fR\&.
+.RE
+.PP
+\fBmakedepends (array)\fR
+.RS 4
+An array of packages this package depends on to build but are not needed at runtime\&. Packages in this list follow the same format as depends\&.
+.sp
+Additional architecture\-specific makedepends can be added by appending an underscore and the architecture name e\&.g\&.,
+\fImakedepends_x86_64=()\fR\&.
+.RE
+.PP
+\fBcheckdepends (array)\fR
+.RS 4
+An array of packages this package depends on to run its test suite but are not needed at runtime\&. Packages in this list follow the same format as depends\&. These dependencies are only considered when the check() function is present and is to be run by makepkg\&.
+.sp
+Additional architecture\-specific checkdepends can be added by appending an underscore and the architecture name e\&.g\&.,
+\fIcheckdepends_x86_64=()\fR\&.
+.RE
+.PP
+\fBoptdepends (array)\fR
+.RS 4
+An array of packages (and accompanying reasons) that are not essential for base functionality, but may be necessary to make full use of the contents of this package\&. optdepends are currently for informational purposes only and are not utilized by pacman during dependency resolution\&. Packages in this list follow the same format as depends, with an optional description appended\&. The format for specifying optdepends descriptions is:
+.sp
+.if n \{\
+.RS 4
+.\}
+.nf
+optdepends=(\*(Aqpython: for library bindings\*(Aq)
+.fi
+.if n \{\
+.RE
+.\}
+.sp
+Additional architecture\-specific optdepends can be added by appending an underscore and the architecture name e\&.g\&.,
+\fIoptdepends_x86_64=()\fR\&.
+.RE
+.PP
+\fBconflicts (array)\fR
+.RS 4
+An array of packages that will conflict with this package (i\&.e\&. they cannot both be installed at the same time)\&. This directive follows the same format as depends\&. Versioned conflicts are supported using the operators as described in
+depends\&.
+.sp
+Additional architecture\-specific conflicts can be added by appending an underscore and the architecture name e\&.g\&.,
+\fIconflicts_x86_64=()\fR\&.
+.RE
+.PP
+\fBprovides (array)\fR
+.RS 4
+An array of \(lqvirtual provisions\(rq this package provides\&. This allows a package to provide dependencies other than its own package name\&. For example, the dcron package can provide
+\fIcron\fR, which allows packages to depend on
+\fIcron\fR
+rather than
+\fIdcron OR fcron\fR\&.
+.sp
+Versioned provisions are also possible, in the
+\fIname=version\fR
+format\&. For example, dcron can provide
+\fIcron=2\&.0\fR
+to satisfy the
+\fIcron>=2\&.0\fR
+dependency of other packages\&. Provisions involving the
+>
+and
+<
+operators are invalid as only specific versions of a package may be provided\&.
+.sp
+If the provision name appears to be a library (ends with \&.so), makepkg will try to find the library in the built package and append the correct version\&. Appending the version yourself disables automatic detection\&.
+.sp
+Additional architecture\-specific provides can be added by appending an underscore and the architecture name e\&.g\&.,
+\fIprovides_x86_64=()\fR\&.
+.RE
+.PP
+\fBreplaces (array)\fR
+.RS 4
+An array of packages this package should replace\&. This can be used to handle renamed/combined packages\&. For example, if the
+\fIj2re\fR
+package is renamed to
+\fIjre\fR, this directive allows future upgrades to continue as expected even though the package has moved\&. Versioned replaces are supported using the operators as described in
+depends\&.
+.sp
+Sysupgrade is currently the only pacman operation that utilizes this field\&. A normal sync or upgrade will not use its value\&.
+.sp
+Additional architecture\-specific replaces can be added by appending an underscore and the architecture name e\&.g\&.,
+\fIreplaces_x86_64=()\fR\&.
+.RE
+.PP
+\fBoptions (array)\fR
+.RS 4
+This array allows you to override some of makepkg\(cqs default behavior when building packages\&. To set an option, just include the option name in the options array\&. To reverse the default behavior, place an \(lq!\(rq at the front of the option\&. Only specify the options you specifically want to override, the rest will be taken from
+\fBmakepkg.conf\fR(5)\&.
+\fBNOTE:\fR
+\fIforce\fR
+is a now\-removed option in favor of the top level
+\fIepoch\fR
+variable\&.
+.PP
+\fBstrip\fR
+.RS 4
+Strip symbols from binaries and libraries\&. If you frequently use a debugger on programs or libraries, it may be helpful to disable this option\&.
+.RE
+.PP
+\fBdocs\fR
+.RS 4
+Save doc directories\&. If you wish to delete doc directories, specify
+!docs
+in the array\&.
+.RE
+.PP
+\fBlibtool\fR
+.RS 4
+Leave libtool (\&.la) files in packages\&. Specify
+!libtool
+to remove them\&.
+.RE
+.PP
+\fBstaticlibs\fR
+.RS 4
+Leave static library (\&.a) files in packages\&. Specify
+!staticlibs
+to remove them (if they have a shared counterpart)\&.
+.RE
+.PP
+\fBemptydirs\fR
+.RS 4
+Leave empty directories in packages\&.
+.RE
+.PP
+\fBzipman\fR
+.RS 4
+Compress man and info pages with gzip\&.
+.RE
+.PP
+\fBccache\fR
+.RS 4
+Allow the use of ccache during
+build()\&. More useful in its negative form
+!ccache
+with select packages that have problems building with ccache\&.
+.RE
+.PP
+\fBdistcc\fR
+.RS 4
+Allow the use of distcc during
+build()\&. More useful in its negative form
+!distcc
+with select packages that have problems building with distcc\&.
+.RE
+.PP
+\fBbuildflags\fR
+.RS 4
+Allow the use of user\-specific buildflags (CPPFLAGS, CFLAGS, CXXFLAGS, LDFLAGS) during
+build()
+as specified in
+\fBmakepkg.conf\fR(5)\&. More useful in its negative form
+!buildflags
+with select packages that have problems building with custom buildflags\&.
+.RE
+.PP
+\fBmakeflags\fR
+.RS 4
+Allow the use of user\-specific makeflags during
+build()
+as specified in
+\fBmakepkg.conf\fR(5)\&. More useful in its negative form
+!makeflags
+with select packages that have problems building with custom makeflags such as
+\-j2
+(or higher)\&.
+.RE
+.PP
+\fBdebug\fR
+.RS 4
+Add the user\-specified debug flags (DEBUG_CFLAGS, DEBUG_CXXFLAGS) to their counterpart buildflags as specified in
+\fBmakepkg.conf\fR(5)\&. When used in combination with the \(oqstrip\(cq option, a separate package containing the debug symbols is created\&.
+.RE
+.PP
+\fBlto\fR
+.RS 4
+Enable building packages using link time optimization\&. Adds
+\fI\-flto\fR
+to both CFLAGS and CXXFLAGS\&.
+.RE
+.RE
+.SH "PACKAGING FUNCTIONS"
+.sp
+In addition to the above directives, PKGBUILDs require a set of functions that provide instructions to build and install the package\&. As a minimum, the PKGBUILD must contain a package() function which installs all the package\(cqs files into the packaging directory, with optional prepare(), build(), and check() functions being used to create those files from source\&.
+.sp
+This is directly sourced and executed by makepkg, so anything that Bash or the system has available is available for use here\&. Be sure any exotic commands used are covered by the makedepends array\&.
+.sp
+If you create any variables of your own in any of these functions, it is recommended to use the Bash local keyword to scope the variable to inside the function\&.
+.PP
+\fBpackage() Function\fR
+.RS 4
+The
+package()
+function is used to install files into the directory that will become the root directory of the built package and is run after all the optional functions listed below\&. The packaging stage is run using fakeroot to ensure correct file permissions in the resulting package\&. All other functions will be run as the user calling makepkg\&.
+.RE
+.PP
+\fBprepare() Function\fR
+.RS 4
+An optional
+prepare()
+function can be specified in which operations to prepare the sources for building, such as patching, are performed\&. This function is run after the source extraction and before the
+build()
+function\&. The
+prepare()
+function is skipped when source extraction is skipped\&.
+.RE
+.PP
+\fBbuild() Function\fR
+.RS 4
+The optional
+build()
+function is used to compile and/or adjust the source files in preparation to be installed by the
+package()
+function\&.
+.RE
+.PP
+\fBcheck() Function\fR
+.RS 4
+An optional
+check()
+function can be specified in which a package\(cqs test\-suite may be run\&. This function is run between the
+build()
+and
+package()
+functions\&. Be sure any exotic commands used are covered by the
+checkdepends
+array\&.
+.RE
+.sp
+All of the above variables such as $pkgname and $pkgver are available for use in the packaging functions\&. In addition, makepkg defines the following variables:
+.PP
+\fBsrcdir\fR
+.RS 4
+This contains the directory where makepkg extracts, or copies, all source files\&.
+.sp
+All of the packaging functions defined above are run starting inside
+$srcdir
+.RE
+.PP
+\fBpkgdir\fR
+.RS 4
+This contains the directory where makepkg bundles the installed package\&. This directory will become the root directory of your built package\&. This variable should only be used in the
+package()
+function\&.
+.RE
+.PP
+\fBstartdir\fR
+.RS 4
+This contains the absolute path to the directory where the PKGBUILD is located, which is usually the output of
+$(pwd)
+when makepkg is started\&. Use of this variable is deprecated and strongly discouraged\&.
+.RE
+.SH "PACKAGE SPLITTING"
+.sp
+makepkg supports building multiple packages from a single PKGBUILD\&. This is achieved by assigning an array of package names to the pkgname directive\&. Each split package uses a corresponding packaging function with name package_foo(), where foo is the name of the split package\&.
+.sp
+All options and directives for the split packages default to the global values given in the PKGBUILD\&. Nevertheless, the following ones can be overridden within each split package\(cqs packaging function: pkgdesc, arch, url, license, groups, depends, optdepends, provides, conflicts, replaces, backup, options, install, and changelog\&.
+.sp
+Note that makepkg does not consider split package depends when checking if dependencies are installed before package building and with \-\-syncdeps\&. All packages required to make the package are required to be specified in the global depends and makedepends arrays\&.
+.sp
+An optional global directive is available when building a split package:
+.PP
+\fBpkgbase\fR
+.RS 4
+The name used to refer to the group of packages in the output of makepkg and in the naming of source\-only tarballs\&. If not specified, the first element in the
+pkgname
+array is used\&. Valid characters for this variable are alphanumerics, and any of the following characters: \(lq@ \&. _ + \-\(rq\&. Additionally, the variable is not allowed to start with hyphens or dots\&.
+.RE
+.SH "INSTALL/UPGRADE/REMOVE SCRIPTING"
+.sp
+Pacman has the ability to store and execute a package\-specific script when it installs, removes, or upgrades a package\&. This allows a package to configure itself after installation and perform an opposite action upon removal\&.
+.sp
+The exact time the script is run varies with each operation, and should be self\-explanatory\&. Note that during an upgrade operation, none of the install or remove functions will be called\&.
+.sp
+Scripts are passed either one or two \(lqfull version strings\(rq, where a full version string is either \fIpkgver\-pkgrel\fR or \fIepoch:pkgver\-pkgrel\fR, if epoch is non\-zero\&.
+.PP
+\fBpre_install\fR
+.RS 4
+Run right before files are extracted\&. One argument is passed: new package full version string\&.
+.RE
+.PP
+\fBpost_install\fR
+.RS 4
+Run right after files are extracted\&. One argument is passed: new package full version string\&.
+.RE
+.PP
+\fBpre_upgrade\fR
+.RS 4
+Run right before files are extracted\&. Two arguments are passed in this order: new package full version string, old package full version string\&.
+.RE
+.PP
+\fBpost_upgrade\fR
+.RS 4
+Run after files are extracted\&. Two arguments are passed in this order: new package full version string, old package full version string\&.
+.RE
+.PP
+\fBpre_remove\fR
+.RS 4
+Run right before files are removed\&. One argument is passed: old package full version string\&.
+.RE
+.PP
+\fBpost_remove\fR
+.RS 4
+Run right after files are removed\&. One argument is passed: old package full version string\&.
+.RE
+.sp
+To use this feature, create a file such as \fIpkgname\&.install\fR and put it in the same directory as the PKGBUILD script\&. Then use the install directive:
+.sp
+.if n \{\
+.RS 4
+.\}
+.nf
+install=pkgname\&.install
+.fi
+.if n \{\
+.RE
+.\}
+.sp
+The install script does not need to be specified in the source array\&. A template install file is available in \fI/usr/share/pacman\fR as \fIproto\&.install\fR for reference with all of the available functions defined\&.
+.SH "USING VCS SOURCES"
+.sp
+Building a developmental version of a package using sources from a version control system (VCS) is enabled by specifying the source in the form:
+.sp
+.if n \{\
+.RS 4
+.\}
+.nf
+source=(\*(Aqdirectory::url#fragment?query\*(Aq)
+.fi
+.if n \{\
+.RE
+.\}
+.sp
+Currently makepkg supports the Bazaar, Git, Subversion, Fossil and Mercurial version control systems\&. For other version control systems, manual cloning of upstream repositories must be done in the prepare() function\&.
+.sp
+The source URL is divided into four components:
+.PP
+\fBdirectory\fR
+.RS 4
+(optional) Specifies an alternate directory name for makepkg to download the VCS source into\&.
+.RE
+.PP
+\fBurl\fR
+.RS 4
+The URL to the VCS repository\&. This must include the VCS in the URL protocol for makepkg to recognize this as a VCS source\&. If the protocol does not include the VCS name, it can be added by prefixing the URL with
+vcs+\&. For example, using a Git repository over HTTPS would have a source URL in the form:
+git+https://\&.\&.\&.\&.
+.RE
+.PP
+\fBfragment\fR
+.RS 4
+(optional) Allows specifying a revision number or branch for makepkg to checkout from the VCS\&. A fragment has the form
+type=value, for example to checkout a given revision the source line would be
+source=(url#revision=123)\&. The available types depends on the VCS being used:
+.PP
+\fBbzr\fR
+.RS 4
+revision (see
+\*(Aqbzr help revisionspec\*(Aq
+for details)
+.RE
+.PP
+\fBfossil\fR
+.RS 4
+branch, commit, tag
+.RE
+.PP
+\fBgit\fR
+.RS 4
+branch, commit, tag
+.RE
+.PP
+\fBhg\fR
+.RS 4
+branch, revision, tag
+.RE
+.PP
+\fBsvn\fR
+.RS 4
+revision
+.RE
+.RE
+.PP
+\fBquery\fR
+.RS 4
+(optional) Allows specifying whether a VCS checkout should be checked for PGP\-signed revisions\&. The source line should have the format
+source=(url#fragment?signed)
+or
+source=(url?signed#fragment)\&. Currently only supported by Git\&.
+.RE
+.SH "EXAMPLE"
+.sp
+The following is an example PKGBUILD for the \fIpatch\fR package\&. For more examples, look through the build files of your distribution\(cqs packages\&. For those using Arch Linux, consult the Arch Build System (ABS) tree\&.
+.sp
+.if n \{\
+.RS 4
+.\}
+.nf
+# Maintainer: Joe User <joe\&.user@example\&.com>
+
+pkgname=patch
+pkgver=2\&.7\&.1
+pkgrel=1
+pkgdesc="A utility to apply patch files to original sources"
+arch=(\*(Aqi686\*(Aq \*(Aqx86_64\*(Aq)
+url="https://www\&.gnu\&.org/software/patch/patch\&.html"
+license=(\*(AqGPL\*(Aq)
+groups=(\*(Aqbase\-devel\*(Aq)
+depends=(\*(Aqglibc\*(Aq)
+makedepends=(\*(Aqed\*(Aq)
+optdepends=(\*(Aqed: for "patch \-e" functionality\*(Aq)
+source=("ftp://ftp\&.gnu\&.org/gnu/$pkgname/$pkgname\-$pkgver\&.tar\&.xz"{,\&.sig})
+md5sums=(\*(Aqe9ae5393426d3ad783a300a338c09b72\*(Aq
+ \*(AqSKIP\*(Aq)
+
+build() {
+ cd "$srcdir/$pkgname\-$pkgver"
+ \&./configure \-\-prefix=/usr
+ make
+}
+
+package() {
+ cd "$srcdir/$pkgname\-$pkgver"
+ make DESTDIR="$pkgdir/" install
+}
+.fi
+.if n \{\
+.RE
+.\}
+.SH "SEE ALSO"
+.sp
+\fBmakepkg\fR(8), \fBpacman\fR(8), \fBmakepkg.conf\fR(5)
+.sp
+See the pacman website at https://archlinux\&.org/pacman/ for current information on pacman and its related tools\&.
+.SH "BUGS"
+.sp
+Bugs? You must be kidding; there are no bugs in this software\&. But if we happen to be wrong, submit a bug report with as much detail as possible at the Arch Linux Bug Tracker in the Pacman section\&.
+.SH "AUTHORS"
+.sp
+Current maintainers:
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+Allan McRae <allan@archlinux\&.org>
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+Andrew Gregory <andrew\&.gregory\&.8@gmail\&.com>
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+Eli Schwartz <eschwartz@archlinux\&.org>
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+Morgan Adamiec <morganamilo@archlinux\&.org>
+.RE
+.sp
+Past major contributors:
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+Judd Vinet <jvinet@zeroflux\&.org>
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+Aurelien Foret <aurelien@archlinux\&.org>
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+Aaron Griffin <aaron@archlinux\&.org>
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+Dan McGee <dan@archlinux\&.org>
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+Xavier Chantry <shiningxc@gmail\&.com>
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+Nagy Gabor <ngaba@bibl\&.u\-szeged\&.hu>
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+Dave Reisner <dreisner@archlinux\&.org>
+.RE
+.sp
+For additional contributors, use git shortlog \-s on the pacman\&.git repository\&.