..::Emdebian::Tools(3)
Name
Emdebian::Tools - Support functions for emdebian-tools
Copyright and Licence
Copyright (C) 2006-2008 Neil Williams <codehelp@debian.org>
This package 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 3 of the License, or
(at your option) any later version.
This program 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 <http://www.gnu.org/licenses/>. - tools_version
- all scripts (even bash ones) call this function to get the current
version string for the tools. - Parses the Debian changelog file and retrieves the most recent version.
- get_config
Reads in the values set by debconf - used particularly by emsource but available to all tools. - get_username
Returns the Emdebian SVN username configured by debconf or an empty
string. - get_workdir
Returns the Emdebian SVN working directory configured by debconf or the default working directory / - get_aptagent
Returns the debconf selection of whether to use apt-get or aptitude to install packages from the Emdebian repository. - get_primary
emdebian-tools needs to be able to query apt cache data from a Debian
mirror that supports all cross-building architectures - these
repositories are called 'primary mirrors' in Debian. If
/etc/apt/sources.list does not contain a primary Debian mirror, a
primary mirror will have been configured in /etc/emsource.conf using
debconf. - get_primary returns the name of that mirror or undef if a primary
already exists - to use with 'apt-cross -m', wrap the returned value in 'ftp://$val/debian'
my $val = &get_primary;
my $mirror = "";
$mirror = "-m ftp://$val/debian" if (defined $val);
system ("apt-cross $mirror -u");- The default value is ftp.fr.debian.org so the default mirror to pass to apt-cross is:
- apt-cross -v -m ftp://ftp.fr.debian.org/debian -u
- get_targetsuite
- Returns the debconf selection of the default target suite. Falls back
to the previous apt-cross method reliant on apt-cache policy if no
value is retrieved from debconf. Also sets this value for all calls to Cache::Apt:: for this process. - The specific repository codename must be supported by all sources in
your sources.list. debconf only supports the unchanging codenames:
unstable, testing and stable. - check_workdir
Ensures the new directory is writable and tries to create it if it does not already exist. If that fails, return a message and let the script
decide how to handle the error. - emdeb_versionstring($)
Generates the emdebian version string, appended to the dh{VERSION} - Pass "new" for a new upstream package or "next" for another release of the same upstream package or blank to get the complete version string.
- extract_emdebversion($)
Return just the emN part of the version string. - check_emdebian_control
Check the current location is a debian package. Sets the current
working directory as the directory above debian/ - create_patches($)
Creates and updates patches for all files in debian/ for $package
CARE: takes the current version from the current working directory.
Need to run &prepare_patches first to put pristine originals in ../$package.old/- Creates debian/xcontrol in $package.old as it will not usually exist
otherwise. Diff is only created if xcontrol is needed. - get_dpkg_cross_dir
chroot-safe method of determining the userspace directory to be used
for the cache files. - prepare_checklist($)
Prepares an EXACT string for each of all the required toolchain
packages for the specified architecture - returns a reference to an
array of the package names.
use Text::Wrap;
my $list = &prepare_checklist($arch, $target_gnu_type);
print wrap('','', @$list);- check_linux($)
- linux-kernel-headers has been replaced by linux-libc-dev but older
systems still require linux-kernel-headers. - &check_linux($arch) returns the name of the alternative to use for the specified architecture.
- If linux-kernel-headers is already installed on the build machine,
require linux-kernel-headers-${arch}-cross. If not, require
linux-libc-dev-${arch}-cross - check_toolchains ($$)
- arg 1 : architecture. arg 2: target_gnu_type
- Creates the list of toolchain packages with &prepare_checklist and then
queries dpkg to see which are actually installed. The check does NOT
depend on specific versions except that gcc-4.1 will fail the check if gcc-4.2 is the latest version available, etc. - find_latest_gcc($$)
Only use where the package NAME contains a mathematically correct
version, e.g. gcc-3.4 vs gcc-4.1, libc6 vs libc7 etc. returns 0 if no gcc package can be found in the cache. - Calling binlookup does slow things down a bit but it ensures that a
real binary package exists, not just a metapackage. binlookup is only
called if the iterator specifies a package name that matches the gcc
regular expression. - find_latest_libc($$)
Only use where the package NAME contains a mathematically correct
version, e.g. gcc-3.4 vs gcc-4.1, libc6 vs libc7 etc. - Calling binlookup does slow things down a bit but it ensures that a
real binary package exists, not just a metapackage. binlookup is only
called if the iterator specifies a package name that matches the libc
regular expression. - host_arch
Shorthand to get the host architecture from dpkg-architecture without
the terminal newline. - prepare_pristine
Used by emsource and em_make to prepare a safe copy of the debian/
directory so that the patches can be prepared against the originals
later. - Once created, ../$package.old is not overwritten. emsource will remove it if the --clean option is used.
- bug_config
Read the embug offline data file for details of cross-building bugs and return a hash, indexed by package name, containing the bug numbers if a bug has been filed. - target_config
Read the embug offline data file for details of cross-building patches that are out of date (i.e. do not apply successfully to the current
Debian version) and return a hash, indexed by package name. - parse_xcontrol
Returns a hash of the contents of debian/xcontrol using the
Parse::DebControl module. See Parse::DebControl (3) for more
information on the hash contents. - Returns undefined if no debian/xcontrol file exists.
- lookup_sourcepkg
Returns a hash where the key is the submitted package name and the
value is the returned source package for that binary or the package
name if already a source package. - First parameter is the architecture to query (to cope with modified
packages), second parameter is the name of the package. - e.g.
use Data::Dumper;
use Emdebian::Tools;
$var = &lookup_sourcepkg("arm", "libqof1");
print Dumper($var);
$VAR1 = {'libqof1' => 'qof'
};- lookup_dependencies
- Returns a space-separated string containing the names of dependencies
of the requested package. (Pass each to &lookup_sourcepkg to get the
appropriate source package to build the dependency.) - First parameter is the architecture to query (to cope with modified
packages), second parameter is the name of the package. - e.g.
use Emdebian::Tools;
print &lookup_dependencies ("arm", "libqof1");- libc6 libgda3-3 libglib2.0-0
- get_standards_version
- Simple subroutine that returns the current Debian Standards Version for
packages built using emdebian-tools. This will, usually, match the
current Standards Version in Debian unstable - this routine provides a single location to update the version when necessary. - It could be possible to automate this value using a query against the
debian-policy package in Debian but that could lead to emdebian-tools
building packages that do not actually conform to that version of
Policy. Instead, the version is updated when the code conforms to the updated Policy.