| .TH dpkg\-architecture 1 "2011-08-14" "Debian Project" "dpkg utilities" |
| .SH "NAME" |
| dpkg\-architecture \- set and determine the architecture for package building |
| . |
| .SH SYNOPSIS |
| .B dpkg\-architecture |
| .RI [ option "...] [" command ] |
| .PP |
| . |
| .SH DESCRIPTION |
| dpkg\-architecture does provide a facility to determine and set the build and |
| host architecture for package building. |
| .PP |
| The build architecture is always determined by an external call to |
| \fBdpkg\fP(1), and can not be set at the command line. |
| .PP |
| You can specify the host architecture by providing one or both of the options |
| \fB\-a\fR and \fB\-t\fR. The default is determined by an external call to |
| .BR gcc (1), |
| or the same as the build architecture if \s-1CC\s0 or gcc are both not |
| available. One out of \fB\-a\fR and \fB\-t\fR is sufficient, the value of the |
| other will be set to a usable default. Indeed, it is often better to only |
| specify one, because \fBdpkg\-architecture\fP will warn you if your choice |
| does not match the default. |
| . |
| .SH COMMANDS |
| .TP |
| .B \-l |
| Print the environment variables, one each line, in the format |
| \fIVARIABLE=value\fP. This is the default action. |
| .TP |
| .BI \-e debian-architecture |
| Check for equality of architecture. By default \fIdebian-architecture\fP |
| is compared against the current Debian architecture, being the host. |
| This action will not expand the architecture wildcards. Command finishes |
| with an exit status of 0 if matched, 1 if not matched. |
| .TP |
| .BI \-i architecture-wildcard |
| Check for identity of architecture by expanding \fIarchitecture-wildcard\fP |
| as an architecture wildcard and comparing against the current Debian |
| architecture. Command finishes with an exit status of 0 if matched, 1 if |
| not matched. |
| .TP |
| .BI \-q variable-name |
| Print the value of a single variable. |
| .TP |
| .B \-s |
| Print an export command. This can be used to set the environment variables |
| using eval. |
| .TP |
| .B \-u |
| Print a similar command to \fB\-s\fP but to unset all variables. |
| .TP |
| .BI \-c " command" |
| Execute a \fIcommand\fP in an environment which has all variables set to |
| the determined value. |
| .TP |
| .B \-L |
| Print a list of valid architecture names. |
| .TP |
| .B \-\-help |
| Show the usage message and exit. |
| .TP |
| .B \-\-version |
| Show the version and exit. |
| . |
| .SH OPTIONS |
| .TP |
| .BI \-a debian-architecture |
| Set the Debian architecture. |
| .TP |
| .BI \-t gnu-system-type |
| Set the GNU system type. |
| .TP |
| .B \-f |
| Values set by existing environment variables with the same name as used by |
| the scripts are honored (i.e. used by \fBdpkg\-architecture\fP), except if |
| this force flag is present. This allows the user |
| to override a value even when the call to \fBdpkg\-architecture\fP is buried |
| in some other script (for example \fBdpkg\-buildpackage\fP(1)). |
| . |
| .SH TERMS |
| .IP "build machine" 4 |
| The machine the package is built on. |
| .IP "host machine" 4 |
| The machine the package is built for. |
| .IP "Debian architecture" 4 |
| The Debian architecture string, which specifies the binary tree in the |
| \s-1FTP\s0 archive. Examples: i386, sparc, hurd\-i386. |
| .IP "architecture wildcard" 4 |
| An architecture wildcard is a special architecture string that will match |
| any real architecture being part of it. The general form is <kernel>\-<cpu>. |
| Examples: linux\-any, any\-i386, hurd\-any. |
| .IP "\s-1GNU\s0 system type" 4 |
| An architecture specification string consisting of two parts separated by |
| a dash: cpu and system. Examples: i386\-linux\-gnu, sparc\-linux\-gnu, |
| i386\-gnu, x86_64\-netbsd. |
| . |
| .SH VARIABLES |
| The following variables are set by \fBdpkg\-architecture\fP: |
| .IP "\s-1DEB_BUILD_ARCH\s0" 4 |
| The Debian architecture of the build machine. |
| .IP "\s-1DEB_BUILD_ARCH_OS\s0" 4 |
| The Debian system name of the build machine. |
| .IP "\s-1DEB_BUILD_ARCH_CPU\s0" 4 |
| The Debian cpu name of the build machine. |
| .IP "\s-1DEB_BUILD_ARCH_BITS\s0" 4 |
| The pointer size of the build machine (in bits). |
| .IP "\s-1DEB_BUILD_ARCH_ENDIAN\s0" 4 |
| The endianness of the build machine (little / big). |
| .IP "\s-1DEB_BUILD_GNU_CPU\s0" 4 |
| The \s-1CPU\s0 part of \s-1DEB_BUILD_GNU_TYPE\s0. |
| .IP "\s-1DEB_BUILD_GNU_SYSTEM\s0" 4 |
| The System part of \s-1DEB_BUILD_GNU_TYPE\s0. |
| .IP "\s-1DEB_BUILD_GNU_TYPE\s0" 4 |
| The \s-1GNU\s0 system type of the build machine. |
| .IP "\s-1DEB_BUILD_MULTIARCH\s0" 4 |
| The clarified \s-1GNU\s0 system type of the build machine, used for filesystem |
| paths. |
| .IP "\s-1DEB_HOST_ARCH\s0" 4 |
| The Debian architecture of the host machine. |
| .IP "\s-1DEB_HOST_ARCH_OS\s0" 4 |
| The Debian system name of the host machine. |
| .IP "\s-1DEB_HOST_ARCH_CPU\s0" 4 |
| The Debian cpu name of the host machine. |
| .IP "\s-1DEB_HOST_ARCH_BITS\s0" 4 |
| The pointer size of the host machine (in bits). |
| .IP "\s-1DEB_HOST_ARCH_ENDIAN\s0" 4 |
| The endianness of the host machine (little / big). |
| .IP "\s-1DEB_HOST_GNU_CPU\s0" 4 |
| The \s-1CPU\s0 part of \s-1DEB_HOST_GNU_TYPE\s0. |
| .IP "\s-1DEB_HOST_GNU_SYSTEM\s0" 4 |
| The System part of \s-1DEB_HOST_GNU_TYPE\s0. |
| .IP "\s-1DEB_HOST_GNU_TYPE\s0" 4 |
| The \s-1GNU\s0 system type of the host machine. |
| .IP "\s-1DEB_HOST_MULTIARCH\s0" 4 |
| The clarified \s-1GNU\s0 system type of the host machine, used for filesystem |
| paths. |
| . |
| .SH "DEBIAN/RULES" |
| The environment variables set by \fBdpkg\-architecture\fP are passed to |
| \fIdebian/rules\fP as make variables (see make documentation). However, |
| you should not rely on them, as this breaks manual invocation of the |
| script. Instead, you should always initialize them using |
| \fBdpkg\-architecture\fP with the \-q option. Here are some examples, |
| which also show how you can improve the cross compilation support in your |
| package: |
| .PP |
| |
| Instead of: |
| .IP |
| .nf |
| ARCH=\`dpkg \-\-print\-architecture\` |
| configure $(\s-1ARCH\s0)\-linux |
| .fi |
| .PP |
| please use the following: |
| .IP |
| .nf |
| \&\s-1DEB_BUILD_GNU_TYPE\s0 := $(shell dpkg\-architecture \-qDEB_BUILD_GNU_TYPE) |
| \&\s-1DEB_HOST_GNU_TYPE\s0 := $(shell dpkg\-architecture \-qDEB_HOST_GNU_TYPE) |
| |
| configure \-\-build=$(\s-1DEB_BUILD_GNU_TYPE\s0) \-\-host=$(\s-1DEB_HOST_GNU_TYPE\s0) |
| .fi |
| .PP |
| |
| Instead of: |
| .IP |
| .nf |
| ARCH=\`dpkg \-\-print\-architecture\` |
| ifeq ($(\s-1ARCH\s0),alpha) |
| ... |
| endif |
| .fi |
| .PP |
| please use: |
| .IP |
| .nf |
| \&\s-1DEB_HOST_ARCH\s0 := $(shell dpkg\-architecture \-qDEB_HOST_ARCH) |
| |
| ifeq ($(\s-1DEB_HOST_ARCH\s0),alpha) |
| ... |
| endif |
| .fi |
| .PP |
| or if you only need to check the CPU or OS type, use the DEB_HOST_ARCH_CPU |
| or DEB_HOST_ARCH_OS variables. |
| .PP |
| In general, calling dpkg in the rules file to get architecture information |
| is deprecated (unless you want to provide backward compatibility, see below). |
| Especially the \-\-print\-architecture option is unreliable since we have |
| Debian architectures which don't equal a processor name. |
| . |
| .SH "BACKWARD COMPATIBILITY" |
| The DEB_*_ARCH_BITS and DEB_*_ARCH_ENDIAN variables were introduced |
| in dpkg\-dev 1.15.4. Using them in \fIdebian/rules\fR thus requires a |
| build-dependency on dpkg\-dev (>= 1.15.4). |
| .PP |
| The DEB_HOST_ARCH_CPU and DEB_HOST_ARCH_OS variables were introduced |
| in dpkg\-dev 1.13.2. Before this \fIdebian/rules\fR files tended to check |
| the values of the DEB_HOST_GNU_CPU or DEB_HOST_GNU_TYPE variables which |
| have been subject to change. |
| .PP |
| Where \fIdebian/rules\fR files check these variables to decide how or what |
| to compile, this should be updated to use the new variables and values. |
| You may wish to retain backwards compatibility with older version of |
| dpkg\-dev by using the following code: |
| .IP |
| .nf |
| DEB_HOST_ARCH_CPU := $(shell dpkg\-architecture \-qDEB_HOST_ARCH_CPU 2>/dev/null) |
| DEB_HOST_ARCH_OS := $(shell dpkg\-architecture \-qDEB_HOST_ARCH_OS 2>/dev/null) |
| |
| # Take account of old dpkg\-architecture output. |
| ifeq ($(DEB_HOST_ARCH_CPU),) |
| DEB_HOST_ARCH_CPU := $(shell dpkg\-architecture \-qDEB_HOST_GNU_CPU) |
| ifeq ($(DEB_HOST_ARCH_CPU),x86_64) |
| DEB_HOST_ARCH_CPU := amd64 |
| endif |
| endif |
| ifeq ($(DEB_HOST_ARCH_OS),) |
| DEB_HOST_ARCH_OS := $(subst \-gnu,,$(shell dpkg\-architecture \-qDEB_HOST_GNU_SYSTEM)) |
| ifeq ($(DEB_HOST_ARCH_OS),gnu) |
| DEB_HOST_ARCH_OS := hurd |
| endif |
| endif |
| .fi |
| .PP |
| And similarly for DEB_BUILD_ARCH_CPU and DEB_BUILD_ARCH_OS. |
| .PP |
| If you still wish to support versions of dpkg\-dev that did not include |
| \fBdpkg\-architecture\fR, the following does the job: |
| .IP |
| .nf |
| \&\s-1DEB_BUILD_ARCH\s0 := $(shell dpkg \-\-print\-architecture) |
| \&\s-1DEB_BUILD_GNU_CPU\s0 := $(patsubst hurd\-%,%,$(\s-1DEB_BUILD_ARCH\s0)) |
| ifeq ($(filter\-out hurd\-%,$(\s-1DEB_BUILD_ARCH\s0)),) |
| \s-1DEB_BUILD_GNU_SYSTEM\s0 := gnu |
| else |
| \s-1DEB_BUILD_GNU_SYSTEM\s0 := linux\-gnu |
| endif |
| DEB_BUILD_GNU_TYPE=$(\s-1DEB_BUILD_GNU_CPU\s0)\-$(\s-1DEB_BUILD_GNU_SYSTEM\s0) |
| |
| \&\s-1DEB_HOST_ARCH\s0 := $(\s-1DEB_BUILD_ARCH\s0) |
| \&\s-1DEB_HOST_GNU_CPU\s0 := $(\s-1DEB_BUILD_GNU_CPU\s0) |
| \&\s-1DEB_HOST_GNU_SYSTEM\s0 := $(\s-1DEB_BUILD_GNU_SYSTEM\s0) |
| \&\s-1DEB_HOST_GNU_TYPE\s0 := $(\s-1DEB_BUILD_GNU_TYPE\s0) |
| .fi |
| .PP |
| Put a subset of these lines at the top of your debian/rules file; these |
| default values will be overwritten if dpkg\-architecture is used. |
| .PP |
| You don't need the full set. Choose a consistent set which contains the |
| values you use in the rules file. For example, if you only need the host |
| Debian architecture, `DEB_HOST_ARCH=\`dpkg \-\-print\-architecture\`' |
| is sufficient (this is indeed the Debian architecture of the build machine, |
| but remember that we are only trying to be backward compatible with native |
| compilation). |
| .PP |
| The \fB\-e\fP and \fB\-i\fP options were only introduced in relatively recent |
| versions of \fBdpkg\-architecture\fR (since dpkg 1.13.13). |
| . |
| .SH EXAMPLES |
| \fBdpkg\-buildpackage\fP accepts the \fB\-a\fR option and passes it to |
| \fBdpkg\-architecture\fP. Other examples: |
| .IP |
| CC=i386\-gnu\-gcc dpkg\-architecture \-c debian/rules build |
| .IP |
| eval \`dpkg\-architecture \-u\` |
| .PP |
| Check if an architecture is equal to the current architecture or a given |
| one: |
| .IP |
| dpkg\-architecture \-elinux\-alpha |
| .IP |
| dpkg\-architecture \-amips \-elinux\-mips |
| .PP |
| Check if the current architecture or an architecture provided with \-a are |
| Linux systems: |
| .IP |
| dpkg\-architecture \-ilinux\-any |
| .IP |
| dpkg\-architecture \-ai386 \-ilinux\-any |
| . |
| .SH FILES |
| All these files have to be present for \fBdpkg\-architecture\fP to |
| work. Their location can be overridden at runtime with the environment |
| variable \fBDPKG_DATADIR\fP. |
| .TP |
| .I /usr/share/dpkg/cputable |
| Table of known CPU names and mapping to their GNU name. |
| .TP |
| .I /usr/share/dpkg/ostable |
| Table of known operating system names and mapping to their GNU name. |
| .TP |
| .I /usr/share/dpkg/triplettable |
| Mapping between Debian architecture triplets and Debian architecture |
| names. |
| . |
| .SH "SEE ALSO" |
| .BR dpkg\-buildpackage (1), |
| .BR dpkg\-cross (1). |
| . |
| .SH AUTHOR |
| .B dpkg\-architecture |
| and this man page were initially written by |
| Marcus Brinkmann <brinkmd@debian.org>. |
| |