| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292 |
- .TH dpkg\-architecture 1 "2007-03-06" "Debian Project" "dpkg utilities"
- .SH "NAME"
- dpkg\-architecture \- set and determine the architecture for package building
- .
- .SH SYNOPSIS
- .B dpkg-architecture
- .RI [ options ]
- .RI [ commands ]
- .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_GNU_TYPE\s0" 4
- The \s-1GNU\s0 system type of the build machine.
- .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_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_GNU_TYPE\s0" 4
- The \s-1GNU\s0 system type of the host machine.
- .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.
- .
- .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_HOST_ARCH_CPU and DEB_HOST_ARCH_OS variables were only introduced
- in relatively recent versions of \fBdpkg\-architecture\fR (since dpkg 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 overriden at runtime with the environment
- variable DPKG_DATADIR.
- .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>.
|