A file named build
directs the process of building and installing data files to be provided by binary packages. It must be a makefile, and it must be executable by all users (mode 0755 octal).
The first line of this file must name a make(1) interpreter in a magic number sample as follows:
#! /usr/bin/make -f
Any number of spaces and/or tabs may be used after the #!
magic number and before the -f
argument.
The following targets are required:
build
The build
target should perform all the configuration and compilation needed to produce files for installation into binary packages.
The build
target should create a file named build
in the build work area to prevent configuration and compilation from being performed multiple times.
The build
target must not do anything that might require superuser privilege.
install
The install
target should install data files into the data directories of binary packages (see § 7.2 for information on these directories).
The install
target should depend on the build
target.
The install
target shall be invoked as the superuser.
The required targets and their dependencies must not require interactive user input.
Additional targets may exist in the build
makefile.
Certain environment variables (see § 7.3) shall be set when the build
makefile is executed.
When building packages, the package building tool shall create a new directory named tmp
in the source package directory. In this directory, the package building tool shall copy or unpack the package source code into a directory called src
.
For each binary package, the build
file (see § 7.1) must create within the work area tmp
a directory named <binpkg>.data
, where <binpkg>
is the name of the binary package. See § 4.5.2 for the requirements on binary package names.
Before installing binary package data files into <binpkg>.data
, the build
file may stage them in a different directory immediately under the work area directory tmp
. For example, opkhelper's oh-autoinstall(1) installs files into tmp/dest/
before oh-installfiles(1) moves them to tmp/<binpkg>.data/
.
After all expected binary packages have been built, the work area (tmp
and its children) shall be removed.
The package building tool shall set certain environment variables to provide to the build makefile information about the package and the environments in and for which binary packages are to be built.
The following environment variables shall be set to describe the source package:
OPK_SOURCE
The source package name, as given in the most recent entry of the change log. See § 4.2 for more information on the source package name.
OPK_SOURCE_VERSION
The source package version, as given in the most recent entry of the change log. See § 4.6 for the syntax of source package version identifiers.
OPK_SOURCE_VERSION_UPSTREAM
OPK_BINARY_VERSION
OPK_PACKAGES
A list of binary packages to be built.
This may not include all packages for which the source package has metadata. The Architecture
field of some packages may not match the host architecture for which packages are to be built. Only architecture-dependent or architecture-independent packages may have been selected for building.
OPK_WORK_AREA
The absolute path to the build work area (see § 7.2).
The terms "build system" and "host system" are used according to the convention set by GNU Autoconf. The build system is the type of system on which a package is built. The host system is the type of system on which a binary package is expected to be natively installed and used.
The following environment variables shall be set to describe the build system:
OPK_BUILD_ARCH
The distribution architecture string of the build system.
OPK_BUILD_ARCH_CPU
The CPU component of the distribution architecture string of the build system.
OPK_BUILD_ARCH_KERNEL
The kernel component of the distribution architecture string of the build system.
OPK_BUILD_ARCH_LIBS
The system libraries component of the distribution architecture string of the build system.
OPK_BUILD_ARCH_GNU
The GNU system type of the build system.
OPK_BUILD_PLAT
The application platform of the build system.
The following environment variables shall be set to describe the host system:
OPK_HOST_ARCH
The distribution architecture string of the host system.
OPK_HOST_ARCH_CPU
The CPU component of the distribution architecture string of the host system.
OPK_HOST_ARCH_KERNEL
The kernel component of the distribution architecture string of the host system.
OPK_HOST_ARCH_LIBS
The system libraries component of the distribution architecture string of the host system.
OPK_HOST_ARCH_GNU
The GNU system type of the host system.
OPK_HOST_PLAT
The application platform of the host system.
The following environment variables shall be set to describe the toolchain:
AR
AS
CC
CPP
CXX
LD
NM
OBJCOPY
OBJDUMP
RANLIB
READELF
SIZE
STRINGS
STRIP
Note that this list of environment variables assumes the use of GNU Binutils, GCC, and the ELF binary format. Support for other toolchains may be specified in a future version of this source package format.