summaryrefslogtreecommitdiffstats
path: root/man/dpkg-architecture.pod
diff options
context:
space:
mode:
Diffstat (limited to 'man/dpkg-architecture.pod')
-rw-r--r--man/dpkg-architecture.pod551
1 files changed, 551 insertions, 0 deletions
diff --git a/man/dpkg-architecture.pod b/man/dpkg-architecture.pod
new file mode 100644
index 0000000..ea963db
--- /dev/null
+++ b/man/dpkg-architecture.pod
@@ -0,0 +1,551 @@
+# dpkg manual page - dpkg-architecture(1)
+#
+# Copyright © 2005 Marcus Brinkmann <brinkmd@debian.org>
+# Copyright © 2005 Scott James Remnant <scott@netsplit.com>
+# Copyright © 2006-2015 Guillem Jover <guillem@debian.org>
+# Copyright © 2009-2012 Raphaël Hertzog <hertzog@debian.org>
+#
+# This is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# This is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <https://www.gnu.org/licenses/>.
+
+=encoding utf8
+
+=head1 NAME
+
+dpkg-architecture - set and determine the architecture for package building
+
+=head1 SYNOPSIS
+
+B<dpkg-architecture>
+[I<option>...] [I<command>]
+
+=head1 DESCRIPTION
+
+B<dpkg-architecture>
+provides a facility to determine and set the build and
+host architecture for package building.
+
+The build architecture is always determined by either the B<DEB_BUILD_ARCH>
+variable if set (and B<--force> not being specified) or by an external call to
+B<dpkg>(1), and cannot be set at the command line.
+
+You can specify the host architecture by providing one or both of the options
+B<--host-arch> and B<--host-type>, otherwise the B<DEB_HOST_ARCH> variable
+is used if set (and B<--force> not being specified). The default is
+determined by an external call to B<gcc>(1),
+or the same as the build architecture if B<CC> or gcc are both not
+available. One out of B<--host-arch> and B<--host-type> is
+sufficient, the value of the
+other will be set to a usable default. Indeed, it is often better to only
+specify one, because B<dpkg-architecture> will warn you if your choice
+does not match the default.
+
+=head1 COMMANDS
+
+=over
+
+=item B<-l>, B<--list>
+
+Print the environment variables, one each line, in the format
+I<VARIABLE=value>. This is the default action.
+
+=item B<-e>, B<--equal> I<architecture>
+
+Check for equality of architecture (since dpkg 1.13.13).
+It compares the current or specified Debian host architecture against
+I<architecture>, to check if they are equal.
+This action will not expand the architecture wildcards.
+Command finishes with an exit status of 0 if matched, 1 if not matched.
+
+=item B<-i>, B<--is> I<architecture-wildcard>
+
+Check for identity of architecture (since dpkg 1.13.13).
+It compares the current or specified Debian host architecture against
+I<architecture-wildcard> after having expanded it as an architecture
+wildcard, to check if they match.
+Command finishes with an exit status of 0 if matched, 1 if not matched.
+
+=item B<-q>, B<--query> I<variable-name>
+
+Print the value of a single variable.
+
+=item B<-s>, B<--print-set>
+
+Print an export command. This can be used to set the environment variables
+using the POSIX shell or make B<eval>, depending on the output format.
+
+=item B<-u>, B<--print-unset>
+
+Print a similar command to B<--print-set> but to unset all variables.
+
+=item B<-c>, B<--command> I<command-string>
+
+Execute a I<command-string> in an environment which has all variables
+set to the determined value.
+
+=item B<-L>, B<--list-known>
+
+Print a list of valid architecture names.
+Possibly restricted by one or more of the matching options
+B<--match-wildcard>, B<--match-bits> or B<--match-endian>
+(since dpkg 1.17.14).
+
+=item B<-?>, B<--help>
+
+Show the usage message and exit.
+
+=item B<--version>
+
+Show the version and exit.
+
+=back
+
+=head1 OPTIONS
+
+=over
+
+=item B<-a>, B<--host-arch> I<architecture>
+
+Set the host Debian architecture.
+
+=item B<-t>, B<--host-type> I<gnu-system-type>
+
+Set the host GNU system type.
+
+=item B<-A>, B<--target-arch> I<architecture>
+
+Set the target Debian architecture (since dpkg 1.17.14).
+
+=item B<-T>, B<--target-type> I<gnu-system-type>
+
+Set the target GNU system type (since dpkg 1.17.14).
+
+=item B<-W>, B<--match-wildcard> I<architecture-wildcard>
+
+Restrict the architectures listed by B<--list-known> to ones matching
+the specified architecture wildcard (since dpkg 1.17.14).
+
+=item B<-B>, B<--match-bits> I<architecture-bits>
+
+Restrict the architectures listed by B<--list-known> to ones with the
+specified CPU bits (since dpkg 1.17.14). Either B<32> or B<64>.
+
+=item B<-E>, B<--match-endian> I<architecture-endianness>
+
+Restrict the architectures listed by B<--list-known> to ones with the
+specified endianness (since dpkg 1.17.14). Either B<little> or B<big>.
+
+=item B<--print-format> I<format>
+
+Sets the output format for B<--print-set> and B<--print-unset>
+(since dpkg 1.20.6), to either B<shell> (default) or B<make>.
+
+=item B<-f>, B<--force>
+
+Values set by existing environment variables with the same name as used by
+the scripts are honored (i.e. used by B<dpkg-architecture>), except if
+this force flag is present. This allows the user
+to override a value even when the call to B<dpkg-architecture> is buried
+in some other script (for example B<dpkg-buildpackage>(1)).
+
+=back
+
+=head1 TERMS
+
+=over
+
+=item build machine
+
+The machine the package is built on.
+
+=item host machine
+
+The machine the package is built for.
+
+=item target machine
+
+The machine the compiler is building for, or the emulator will run code for.
+This is only needed when building a cross-toolchain (or emulator), one that
+will be built on the build architecture, to be run on the host architecture,
+and to build (or run emulated) code for the target architecture.
+
+=item Debian architecture
+
+The Debian architecture string, which specifies the binary tree in the
+FTP archive. Examples: i386, sparc, hurd-i386.
+
+=item Debian architecture tuple
+
+A Debian architecture tuple is the fully qualified architecture with all its
+components spelled out.
+This differs with Debian architectures in that at least the I<cpu>
+component does not embed the I<abi>.
+The current tuple has the form I<abi>-I<libc>-I<os>-I<cpu>.
+Examples: base-gnu-linux-amd64, eabihf-musl-linux-arm.
+
+=item Debian architecture wildcard
+
+A Debian architecture wildcard is a special architecture string that will
+match any real architecture being part of it.
+The general form is a Debian architecture tuple with four or less elements,
+and with at least one of them being B<any>.
+Missing elements of the tuple are prefixed implicitly as B<any>, and thus
+the following pairs are equivalent:
+
+=over
+
+=item B<any>-B<any>-B<any>-B<any> = B<any>
+
+=item B<any>-B<any>-I<os>-B<any> = I<os>-B<any>
+
+=item B<any>-I<libc>-B<any>-B<any> = I<libc>-B<any>-B<any>
+
+=back
+
+Examples: linux-any, any-i386, hurd-any, eabi-any-any-arm,
+musl-any-any.
+
+=item GNU system type
+
+An architecture specification string consisting of two parts separated by
+a hyphen: cpu and system.
+Examples: i586-linux-gnu, sparc-linux-gnu, i686-gnu, x86_64-netbsd.
+
+=item multiarch triplet
+
+The clarified GNU system type, used for filesystem paths.
+This triplet does not change even when the baseline ISA gets bumped,
+so that the resulting paths are stable over time.
+The only current difference with the GNU system type is that the CPU part
+for i386 based systems is always i386.
+Examples: i386-linux-gnu, x86_64-linux-gnu.
+Example paths: /lib/powerpc64le-linux-gnu/, /usr/lib/i386-kfreebsd-gnu/.
+
+=back
+
+=head1 VARIABLES
+
+The following variables are read from the environment (unless B<--force>
+has been specified) and set by B<dpkg-architecture> (see the B<TERMS>
+section for a description of the naming scheme):
+
+=over
+
+=item B<DEB_BUILD_ARCH>
+
+The Debian architecture of the build machine.
+
+=item B<DEB_BUILD_ARCH_ABI>
+
+The Debian ABI name of the build machine (since dpkg 1.18.11).
+
+=item B<DEB_BUILD_ARCH_LIBC>
+
+The Debian libc name of the build machine (since dpkg 1.18.11).
+
+=item B<DEB_BUILD_ARCH_OS>
+
+The Debian system name of the build machine (since dpkg 1.13.2).
+
+=item B<DEB_BUILD_ARCH_CPU>
+
+The Debian CPU name of the build machine (since dpkg 1.13.2).
+
+=item B<DEB_BUILD_ARCH_BITS>
+
+The pointer size of the build machine (in bits; since dpkg 1.15.4).
+
+=item B<DEB_BUILD_ARCH_ENDIAN>
+
+The endianness of the build machine (little / big; since dpkg 1.15.4).
+
+=item B<DEB_BUILD_GNU_CPU>
+
+The GNU CPU part of B<DEB_BUILD_GNU_TYPE>.
+
+=item B<DEB_BUILD_GNU_SYSTEM>
+
+The GNU system part of B<DEB_BUILD_GNU_TYPE>.
+
+=item B<DEB_BUILD_GNU_TYPE>
+
+The GNU system type of the build machine.
+
+=item B<DEB_BUILD_MULTIARCH>
+
+The clarified GNU system type of the build machine, used for filesystem
+paths (since dpkg 1.16.0).
+
+=item B<DEB_HOST_ARCH>
+
+The Debian architecture of the host machine.
+
+=item B<DEB_HOST_ARCH_ABI>
+
+The Debian ABI name of the host machine (since dpkg 1.18.11).
+
+=item B<DEB_HOST_ARCH_LIBC>
+
+The Debian libc name of the host machine (since dpkg 1.18.11).
+
+=item B<DEB_HOST_ARCH_OS>
+
+The Debian system name of the host machine (since dpkg 1.13.2).
+
+=item B<DEB_HOST_ARCH_CPU>
+
+The Debian CPU name of the host machine (since dpkg 1.13.2).
+
+=item B<DEB_HOST_ARCH_BITS>
+
+The pointer size of the host machine (in bits; since dpkg 1.15.4).
+
+=item B<DEB_HOST_ARCH_ENDIAN>
+
+The endianness of the host machine (little / big; since dpkg 1.15.4).
+
+=item B<DEB_HOST_GNU_CPU>
+
+The GNU CPU part of B<DEB_HOST_GNU_TYPE>.
+
+=item B<DEB_HOST_GNU_SYSTEM>
+
+The GNU system part of B<DEB_HOST_GNU_TYPE>.
+
+=item B<DEB_HOST_GNU_TYPE>
+
+The GNU system type of the host machine.
+
+=item B<DEB_HOST_MULTIARCH>
+
+The clarified GNU system type of the host machine, used for filesystem
+paths (since dpkg 1.16.0).
+
+=item B<DEB_TARGET_ARCH>
+
+The Debian architecture of the target machine (since dpkg 1.17.14).
+
+=item B<DEB_TARGET_ARCH_ABI>
+
+The Debian ABI name of the target machine (since dpkg 1.18.11).
+
+=item B<DEB_TARGET_ARCH_LIBC>
+
+The Debian libc name of the target machine (since dpkg 1.18.11).
+
+=item B<DEB_TARGET_ARCH_OS>
+
+The Debian system name of the target machine (since dpkg 1.17.14).
+
+=item B<DEB_TARGET_ARCH_CPU>
+
+The Debian CPU name of the target machine (since dpkg 1.17.14).
+
+=item B<DEB_TARGET_ARCH_BITS>
+
+The pointer size of the target machine (in bits; since dpkg 1.17.14).
+
+=item B<DEB_TARGET_ARCH_ENDIAN>
+
+The endianness of the target machine (little / big; since dpkg 1.17.14).
+
+=item B<DEB_TARGET_GNU_CPU>
+
+The GNU CPU part of B<DEB_TARGET_GNU_TYPE> (since dpkg 1.17.14).
+
+=item B<DEB_TARGET_GNU_SYSTEM>
+
+The GNU system part of B<DEB_TARGET_GNU_TYPE> (since dpkg 1.17.14).
+
+=item B<DEB_TARGET_GNU_TYPE>
+
+The GNU system type of the target machine (since dpkg 1.17.14).
+
+=item B<DEB_TARGET_MULTIARCH>
+
+The clarified GNU system type of the target machine, used for filesystem
+paths (since dpkg 1.17.14).
+
+=back
+
+=head1 FILES
+
+=head2 Architecture tables
+
+All these files have to be present for B<dpkg-architecture> to
+work. Their location can be overridden at runtime with the environment
+variable B<DPKG_DATADIR>.
+These tables contain a format B<Version> pseudo-field on their first
+line to mark their format, so that parsers can check if they understand
+it, such as "# Version=1.0".
+
+=over
+
+=item I<%PKGDATADIR%/cputable>
+
+Table of known CPU names and mapping to their GNU name.
+Format version 1.0 (since dpkg 1.13.2).
+
+=item I<%PKGDATADIR%/ostable>
+
+Table of known operating system names and mapping to their GNU name.
+Format version 2.0 (since dpkg 1.18.11).
+
+=item I<%PKGDATADIR%/tupletable>
+
+Mapping between Debian architecture tuples and Debian architecture
+names.
+Format version 1.0 (since dpkg 1.18.11).
+
+=item I<%PKGDATADIR%/abitable>
+
+Table of Debian architecture ABI attribute overrides.
+Format version 2.0 (since dpkg 1.18.11).
+
+=back
+
+=head2 Packaging support
+
+=over
+
+=item I<%PKGDATADIR%/architecture.mk>
+
+Makefile snippet that properly sets and exports all the variables that
+B<dpkg-architecture> outputs (since dpkg 1.16.1).
+
+=back
+
+=head1 EXAMPLES
+
+B<dpkg-buildpackage> accepts the B<-a> option and passes it to
+B<dpkg-architecture>. Other examples:
+
+=over
+
+ CC=i386-gnu-gcc dpkg-architecture -c debian/rules build
+
+ eval $(dpkg-architecture -u)
+
+=back
+
+Check if the current or specified host architecture is equal to an
+architecture:
+
+=over
+
+ dpkg-architecture -elinux-alpha
+
+ dpkg-architecture -amips -elinux-mips
+
+=back
+
+Check if the current or specified host architecture is a Linux system:
+
+=over
+
+ dpkg-architecture -ilinux-any
+
+ dpkg-architecture -ai386 -ilinux-any
+
+=back
+
+=head2 Usage in debian/rules
+
+The environment variables set by B<dpkg-architecture> are passed to
+I<debian/rules> 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
+B<dpkg-architecture> with the B<-q> option. Here are some examples,
+which also show how you can improve the cross compilation support in your
+package:
+
+Retrieving the GNU system type and forwarding it to ./configure:
+
+=over
+
+ DEB_BUILD_GNU_TYPE ?= $(shell dpkg-architecture -qDEB_BUILD_GNU_TYPE)
+ DEB_HOST_GNU_TYPE ?= $(shell dpkg-architecture -qDEB_HOST_GNU_TYPE)
+ [...]
+ ifeq ($(DEB_BUILD_GNU_TYPE), $(DEB_HOST_GNU_TYPE))
+ confflags += --build=$(DEB_HOST_GNU_TYPE)
+ else
+ confflags += --build=$(DEB_BUILD_GNU_TYPE) \
+ --host=$(DEB_HOST_GNU_TYPE)
+ endif
+ [...]
+ ./configure $(confflags)
+
+=back
+
+Doing something only for a specific architecture:
+
+=over
+
+ DEB_HOST_ARCH ?= $(shell dpkg-architecture -qDEB_HOST_ARCH)
+
+ ifeq ($(DEB_HOST_ARCH),alpha)
+ [...]
+ endif
+
+=back
+
+or if you only need to check the CPU or OS type, use the
+B<DEB_HOST_ARCH_CPU> or B<DEB_HOST_ARCH_OS> variables.
+
+Note that you can also rely on an external Makefile snippet to properly
+set all the variables that B<dpkg-architecture> can provide:
+
+=over
+
+ include %PKGDATADIR%/architecture.mk
+
+ ifeq ($(DEB_HOST_ARCH),alpha)
+ [...]
+ endif
+
+=back
+
+In any case, you should never use B<dpkg --print-architecture> to get
+architecture information during a package build.
+
+=head1 ENVIRONMENT
+
+=over
+
+=item B<DPKG_DATADIR>
+
+If set, it will be used as the B<dpkg> data directory, where the
+architecture tables are located (since dpkg 1.14.17).
+Defaults to «%PKGDATADIR%».
+
+=item B<DPKG_COLORS>
+
+Sets the color mode (since dpkg 1.18.5).
+The currently accepted values are: B<auto> (default), B<always> and
+B<never>.
+
+=item B<DPKG_NLS>
+
+If set, it will be used to decide whether to activate Native Language Support,
+also known as internationalization (or i18n) support (since dpkg 1.19.0).
+The accepted values are: B<0> and B<1> (default).
+
+=back
+
+=head1 NOTES
+
+All long command and option names available only since dpkg 1.17.17.
+
+=head1 SEE ALSO
+
+B<dpkg-buildpackage>(1).