APKBUILD Reference
APKBUILD Reference
APKBUILDs are scripts to build alpine packages using the abuild tool.
Variables
The following variables are defined by abuild:
- startdir
- The directory where APKBUILD script is found.
- srcdir
- The directory here sources are downloaded to and unpacked.
- pkgdir
- This directory should hold the data files for main package. A normal autotools package has a make DESTDIR="$pkgdir" install.
- subpkgdir
- This directory should have the data files for a subpackage. This variable should only be used from subpackage functions.
Note: All variables that holds a path (i.e $srcdir and $pkgdir) should always be within quotes in the APKBUILD (for example: "$srcdir"). This is so things don't break in case user has the APKBUILD in a directory with spaces.
The following variables should be defined by user in APKBUILD:
- depends
- Runtime dependencies that are not shared-object dependencies. Shared objects dependencies are autodetected and should not be specified here.
- depends_dev
- Runtime dependencies for -dev subpackage.
- install
- pre/post install/deinstall/remove scripts.
- license
- License(s) for the package.
- makedepends
- Build time dependencies.
- md5sums
- Checksums for sources and patches. This is generated with abuild checksum and should be located last in the APKBUILD.
- options
- build time options for package. Valid values are currently only !strip for avoid stripping the binaries.
- pkgdesc
- Short package description.
- pkggroups
- Groups to be created during buildtime. This group should be created in a $pkgname.pre-install script as well so group is created during runtime.
- pkgname
- The name of the package. All letters should be lowercase. Lua libraries/modules should be prefixed with lua- (for example lua-posix), perl modules with perl- (for example perl-xml-parser), php modules with php- and python modules with py--.
- pkgusers
- Users to be created during buildtime. Use $pkgname.pre-install for creating the user(s) during runtime.
- pkgver
- The package version.
- replaces
- package(s) that this package replaces. Useful when files moves from one package to another.
- source
- URL(s) to sources and patches.
- subpackages
- Subpackages built from this APKBUILD.
- url
- The homepage for the package. This is to help users find upstream developer, documentation etc.
Note: All other user specified variables, temp variables or APKBUILD specifics should be prefixed with a _ to avoid nameclashes with the abuild internals. For example: $_builddir.
Functions
The following functions should be specified in the APKBUILD. The functions should consider current work directory as undefined.
- prepare()
- Optional. Build preparation. Here should patches etc be applied. This is function is for convenience while working with the APKBUILD.
- build()
- Required. This is the compilation stage. This function will be called as normal user (unless the package() function is missing - for compatibility reasons). If no compilation is needed this function can contain a single return 0.
- package()
- Required. In this function the built application and files should be installed in "$pkgdir".
Note: Building in fakeroot will reduce performance for parallell builds dramatically. That is why we do the build() and package() separation.
The following functions are provided by abuild and is overrideable:
- fetch()
- download remote sources listed in $source to $SRCDEST and create symlinks to $srcdir.
- unpack()
- unpacks .tar.gz .tar.bz2 .tgz and .zip archices in $srcdir.
- dev()
- Subpackage function for -dev packages. By default this will only call default_dev which will move $pkgdir/usr/include, *.a, *.la and similar files to $subpkgdir.
- doc()
- Subpackage function for -doc packages. By default this will only call default_doc which will move $pkgdir/usr/share/doc, $pkgdir/usr/share/man and similar to $subpkgdir.
Examples
Simple package with separate -doc subpackage.
# Maintainer: Natanael Copa <ncopa@alpinelinux.org> pkgname=m4 pkgver=1.4.13 pkgrel=0 pkgdesc="GNU macro processor" url="http://www.gnu.org/software/m4" source=ftp://ftp.gnu.org/gnu/m4/$pkgname-$pkgver.tar.gz depends= license="GPL" subpackages="m4-doc" _builddir="$srcdir"/$pkgname-$pkgver build() { cd "$_builddir" ./configure --prefix=/usr make } package() { cd "$_builddir" make install DESTDIR="$pkgdir" } md5sums="e9e36108b5f9855a82ca4a07ebc0fd2e m4-1.4.13.tar.gz"