[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

cross-building dependencies and emdebuild



I do a lot of cross-building of plain debian packages, and the
emdebian tools provide almost everything needed to make that painless.

But I found a couple of problems today.

1) Minor one first:

if you do 
emdebuild -a arm build-dep 
(instead of)
emdebuild -a arm --build-dep

then it carefully emdebianises your sources (changelog and rules).
This is quite annoying, and could probably be considered a bug.

It would be better if it complained of invalid syntax (I don't think
the first line is valid, is it?). That's an easy fix and I really
ought to offer a patch...but my perl-foo isn't quite up to it. It
looks like the code only checks for options it doesn't understand, but
doesn't check if there is a left-over non-option paramter at the end.


2) More significant issue.

If I have a sources.list like this (i.e. stable stuff only):
deb http://ftp.uk.debian.org/debian lenny main
deb-src http://ftp.uk.debian.org/debian/ lenny main

deb http://security.debian.org/ lenny/updates main
deb-src http://security.debian.org/ lenny/updates main

and I have a package with these deps (in xcontrol file):
Build-Depends: libglib2.0-dev, libpango1.0-dev, libx11-dev,
  libgtk2.0-dev, libatk1.0-dev, libaspell-dev, libun
  gif4-dev, uuid-dev, libxml2-dev, gsmd-dev, lw-dev
Build-Depends-Tools: debhelper (>= 5), cmake (>= 2.4)

then I do 
emdebuild -a arm -v --build-dep

it correctly works out that it needs to install libdirectfb-dev
libpango1.0-dev libgtk2.0-dev libcairo2-dev
but then fails to find any of them. (full log below) I think because it is defaulting to looking in
unstable and there seems to be no way to tell it not to, depsite there
being no mention of unstable in my apt sources lists.


if I do 
apt-cross -a arm -i libpango1.0-dev
if fails to find it:
....
Installing: libdirectfb-dev libpango1.0-dev libcairo2-dev
E: Broken packages
apt methods failed for libdirectfb-dev_1.0.1-11_arm.deb, falling back to direct cache path.
Trying: path=http://www.emdebian.org/debianpool/main/d/directfb/libdirectfb-dev_1.0.1-11_arm.deb
Filename: libdirectfb-dev_1.0.1-11_arm.deb
....

but if I do 
apt-cross -a arm -S lenny -i libpango1.0-dev
if works fine.

So I think all that is needed is a way to tell emdebuild which suite(s)
to use or better, for it or apt-cross to use the ones in the apt lists. 

Attached is the patch that Neil did a which time ago for emdebuild to
have a -S Suite override. I guess this is already in newer versions of
emdebian-tools? In which case this problem only afflicts builds in the
stable environment using the stable tools.  

It is pretty-much fatal though for any non-trivial cross-building. IN
which case I suppose the advice is to use emdebian-tools 

<fx:checks>. Yes. upgrading to apt-cross 0.12.6 fixes the above
problem so that 
apt-cross -a arm -i libpango1.0-dev
now works.

hmm, but apt-cross -a arm -i libgtk2.0-dev
doesn't.

and emdebuild -a arm -v --build-dep
still fails to find any packages, but 
emdebuild -a arm -S lenny -v --build-dep
does now work - hooray!

why does emdebuild need to be told which repo to use? Is there a
reason why can't it work it out from the apt sources list?



Wookey
-- 
Principal hats:  iEndian - Balloonboard - Toby Churchill - Emdebian
http://wookware.org/
Checking for debian/control
Checking for buildtime cross dependencies in 'debian/xcontrol'.
Installing: gsmd-dev libaspell-dev libatk1.0-dev libglib2.0-dev
libgtk2.0-dev libpango1.0-dev libungif4-dev libx11-dev libxml2-dev lw-dev
uuid-dev with apt-cross -v.
Enter your sudo password if prompted.
Could not open file /root/.apt-cross/stable/lists/security.debian.org_dists_stable_main_source_Sources - open (2 No such file or directory)
libglib2.0-dev-arm-cross is installed (2.16.6-1+lenny1)
libatk1.0-dev-arm-cross is installed (1.22.0-1)
libx11-dev-arm-cross is installed (2:1.1.5-2)
libxml2-dev-arm-cross is installed (2.6.32.dfsg-5)
gsmd-dev-arm-cross is installed (0.8-19)
libungif4-dev-arm-cross is installed (4.1.6-6)
lw-dev-arm-cross is installed (0.9)
libaspell-dev-arm-cross is installed (0.60.6-1)
uuid-dev-arm-cross is installed (1.2-1.41.3-1)
processing libpango1.0-dev conflicts
libpango1.0-dev conflicts with libpango1.0-common (<< 1.14.5-1)
libpango1.0-common (1.20.5-3) is newer (which is OK).
libpango1.0-dev conflicts with libpango-dev
Skipping libpango-dev due to conflict.
processing libpango1.0-dev dependencies.
libpango1.0-dev Depends : libglib2.0-0 (2.16.6-1+lenny1)
libglib2.0-0-arm-cross is installed (2.16.6-1+lenny1)
libpango1.0-dev Depends : libfontconfig1-dev (2.6.0-3)
libfontconfig1-dev-arm-cross is installed (2.6.0-3)
libpango1.0-dev Depends : libxrender1 (1:0.9.4-2)
libxrender1-arm-cross is installed (1:0.9.4-2)
libpango1.0-dev Depends : libcairo2-dev (1.6.4-7)
Adding libcairo2-dev
libpango1.0-dev Depends : libpango1.0-0 (1.20.5-3)
libpango1.0-0-arm-cross is installed (1.20.5-3)
libpango1.0-dev Depends : zlib1g (1:1.2.3.3.dfsg-12)
zlib1g-arm-cross is installed (1:1.2.3.3.dfsg-12)
libpango1.0-dev Depends : libcairo2 (1.6.4-7)
libcairo2-arm-cross is installed (1.6.4-7)
libpango1.0-dev Depends : libxrender-dev (1:0.9.4-2)
libxrender-dev-arm-cross is installed (1:0.9.4-2)
libpango1.0-dev Depends : libfontconfig1 (2.6.0-3)
libfontconfig1-arm-cross is installed (2.6.0-3)
libpango1.0-dev Depends : libc6 (2.7-18)
libc6-arm-cross is installed (2.7-18)
libpango1.0-dev Depends : libglib2.0-dev (2.16.6-1+lenny1)
libglib2.0-dev-arm-cross is installed (2.16.6-1+lenny1)
libpango1.0-dev Depends : libx11-dev (2:1.1.5-2)
libx11-dev-arm-cross is installed (2:1.1.5-2)
libpango1.0-dev Depends : libxft2 (2.1.12-3)
libxft2-arm-cross is installed (2.1.12-3)
libpango1.0-dev Depends : libxft-dev (2.1.12-3)
libxft-dev-arm-cross is installed (2.1.12-3)
libpango1.0-dev Depends : libfreetype6 (2.3.7-2)
libfreetype6-arm-cross is installed (2.3.7-2)
libpango1.0-dev Depends : pkg-config (0.22-1)
pkg-config-arm-cross is installed (0.22-1)
libpango1.0-dev Depends : libx11-6 (2:1.1.5-2)
libx11-6-arm-cross is installed (2:1.1.5-2)
libpango1.0-dev Depends : libfreetype6-dev (2.3.7-2)
libfreetype6-dev-arm-cross is installed (2.3.7-2)
libpango1.0-dev Conflicts : libpango-dev
libpango-dev looks like a pseudo package - excluding.
libpango1.0-dev Conflicts : libpango1.0-common (1.20.5-3)
libpango1.0-common is Architecture: all - excluding.
processing libgtk2.0-dev conflicts
libgtk2.0-dev conflicts with libgtk1.3-dev
Skipping libgtk1.3-dev due to conflict.
processing libgtk2.0-dev dependencies.
libgtk2.0-dev Depends : libxfixes-dev (1:4.0.3-2)
libxfixes-dev-arm-cross is installed (1:4.0.3-2)
libgtk2.0-dev Depends : libglib2.0-0 (2.16.6-1+lenny1)
libglib2.0-0-arm-cross is installed (2.16.6-1+lenny1)
libgtk2.0-dev Depends : libxinerama-dev (2:1.0.3-2)
libxinerama-dev-arm-cross is installed (2:1.0.3-2)
libgtk2.0-dev Depends : libxrandr-dev (2:1.2.3-1)
libxrandr-dev-arm-cross is installed (2:1.2.3-1)
libgtk2.0-dev Depends : libxext-dev (2:1.0.4-1)
libxext-dev-arm-cross is installed (2:1.0.4-1)
libgtk2.0-dev Depends : libcairo2-dev (1.6.4-7)
Adding libcairo2-dev
libgtk2.0-dev Depends : libxi-dev (2:1.1.4-1)
libxi-dev-arm-cross is installed (2:1.1.4-1)
libgtk2.0-dev Depends : libgtk2.0-common (2.12.12-1~lenny1)
libgtk2.0-common is Architecture: all - excluding.
libgtk2.0-dev Depends : libxcomposite-dev (1:0.4.0-3)
libxcomposite-dev-arm-cross is installed (1:0.4.0-3)
libgtk2.0-dev Depends : libxml2-utils (2.6.32.dfsg-5)
libxml2-utils-arm-cross is installed (2.6.32.dfsg-5)
libgtk2.0-dev Depends : libc6 (2.7-18)
libc6-arm-cross is installed (2.7-18)
libgtk2.0-dev Depends : libglib2.0-dev (2.16.6-1+lenny1)
libglib2.0-dev-arm-cross is installed (2.16.6-1+lenny1)
libgtk2.0-dev Depends : libatk1.0-dev (1.22.0-1)
libatk1.0-dev-arm-cross is installed (1.22.0-1)
libgtk2.0-dev Depends : libx11-dev (2:1.1.5-2)
libx11-dev-arm-cross is installed (2:1.1.5-2)
libgtk2.0-dev Depends : pkg-config (0.22-1)
pkg-config-arm-cross is installed (0.22-1)
libgtk2.0-dev Depends : libxcursor-dev (1:1.1.9-1)
libxcursor-dev-arm-cross is installed (1:1.1.9-1)
libgtk2.0-dev Depends : libxdamage-dev (1:1.1.1-4)
libxdamage-dev-arm-cross is installed (1:1.1.1-4)
libgtk2.0-dev Depends : libgtk2.0-0 (2.12.12-1~lenny1)
libgtk2.0-0-arm-cross is installed (2.12.12-1~lenny1)
libgtk2.0-dev Conflicts : libgtk1.3-dev
libgtk1.3-dev looks like a pseudo package - excluding.
processing libcairo2-dev conflicts
libcairo2-dev conflicts with libcairo-dev
Skipping libcairo-dev due to conflict.
libcairo2-dev conflicts with libcairo-directfb2-dev (<< 1.6.4-6.1)
libcairo-directfb2-dev (1.6.4-7) is newer (which is OK).
libcairo2-dev conflicts with libcairo0.9.0-dev
Skipping libcairo0.9.0-dev due to conflict.
libcairo2-dev conflicts with libcairo0.6.0-dev
Skipping libcairo0.6.0-dev due to conflict.
libcairo2-dev conflicts with libcairo0.5.1-dev
Skipping libcairo0.5.1-dev due to conflict.
processing libcairo2-dev dependencies.
libcairo2-dev Depends : libdirectfb-dev (1.0.1-11)
Adding libdirectfb-dev
libcairo2-dev Depends : libfontconfig1-dev (2.6.0-3)
libfontconfig1-dev-arm-cross is installed (2.6.0-3)
libcairo2-dev Depends : libxcb1-dev (1.1-1.1)
libxcb1-dev-arm-cross is installed (1.1-1.1)
libcairo2-dev Depends : libxcb-render0-dev (1.1-1.1)
libxcb-render0-dev-arm-cross is installed (1.1-1.1)
libcairo2-dev Depends : libxcb-render-util0-dev (0.2.1+git1-1)
libxcb-render-util0-dev-arm-cross is installed (0.2.1+git1-1)
libcairo2-dev Depends : libcairo2 (1.6.4-7)
libcairo2-arm-cross is installed (1.6.4-7)
libcairo2-dev Depends : libpixman-1-dev (0.10.0-2)
libpixman-1-dev-arm-cross is installed (0.10.0-2)
libcairo2-dev Depends : libxrender-dev (1:0.9.4-2)
libxrender-dev-arm-cross is installed (1:0.9.4-2)
libcairo2-dev Depends : libfreetype6-dev (2.3.7-2)
libfreetype6-dev-arm-cross is installed (2.3.7-2)
libcairo2-dev Depends : libsm-dev (2:1.0.3-2)
libsm-dev-arm-cross is installed (2:1.0.3-2)
libcairo2-dev Depends : libpng12-dev (1.2.27-2+lenny2)
libpng12-dev-arm-cross is installed (1.2.27-2+lenny2)
libcairo2-dev Conflicts : libcairo0.5.1-dev
libcairo0.5.1-dev looks like a pseudo package - excluding.
libcairo2-dev Conflicts : libcairo0.6.0-dev
libcairo0.6.0-dev looks like a pseudo package - excluding.
libcairo2-dev Conflicts : libcairo0.9.0-dev
libcairo0.9.0-dev looks like a pseudo package - excluding.
libcairo2-dev Conflicts : libcairo-directfb2-dev (1.6.4-7)
libcairo2-dev Conflicts : libcairo-dev
libcairo-dev looks like a pseudo package - excluding.
processing libdirectfb-dev conflicts
processing libdirectfb-dev dependencies.
libdirectfb-dev Depends : libx11-dev (2:1.1.5-2)
libx11-dev-arm-cross is installed (2:1.1.5-2)
libdirectfb-dev Depends : libmpeg3-dev (1.5.4-5+b1)
libmpeg3-dev-arm-cross is installed (1.5.4-5+b1)
libdirectfb-dev Depends : x11proto-core-dev (7.0.12-1)
x11proto-core-dev-arm-cross is installed (7.0.12-1)
libdirectfb-dev Depends : zlib1g-dev (1:1.2.3.3.dfsg-12)
zlib1g-dev-arm-cross is installed (1:1.2.3.3.dfsg-12)
libdirectfb-dev Depends : libxext-dev (2:1.0.4-1)
libxext-dev-arm-cross is installed (2:1.0.4-1)
libdirectfb-dev Depends : libdirectfb-extra (1.0.1-11)
libdirectfb-extra-arm-cross is installed (1.0.1-11)
libdirectfb-dev Depends : libdirectfb-1.0-0 (1.0.1-11)
libdirectfb-1.0-0-arm-cross is installed (1.0.1-11)
libdirectfb-dev Depends : libpng12-0 (1.2.27-2+lenny2)
libpng12-0-arm-cross is installed (1.2.27-2+lenny2)
libdirectfb-dev Depends : libjpeg62-dev (6b-14)
libjpeg62-dev-arm-cross is installed (6b-14)
libdirectfb-dev Depends : libsysfs-dev (2.1.0-5)
libsysfs-dev-arm-cross is installed (2.1.0-5)
libdirectfb-dev Depends : libc6 (2.7-18)
libc6-arm-cross is installed (2.7-18)
libdirectfb-dev Depends : libfreetype6-dev (2.3.7-2)
libfreetype6-dev-arm-cross is installed (2.3.7-2)
libdirectfb-dev Depends : libpng12-dev (1.2.27-2+lenny2)
libpng12-dev-arm-cross is installed (1.2.27-2+lenny2)
The following NEW packages will be built and installed:
 libcairo2-dev libdirectfb-dev libgtk2.0-dev libpango1.0-dev
0 to be upgraded, 4 to be newly installed.
Installing: libdirectfb-dev libpango1.0-dev libgtk2.0-dev libcairo2-dev
E: Broken packages
Use of uninitialized value $server in concatenation (.) or string at /usr/bin/apt-cross line 648.
apt methods failed for libdirectfb-dev_1.0.1-11_arm.deb, falling back to direct cache path.
Trying: path=pool/main/d/directfb/libdirectfb-dev_1.0.1-11_arm.deb
Filename: libdirectfb-dev_1.0.1-11_arm.deb
E: Broken packages
Filename: libpango1.0-dev_1.20.5-3_arm.deb
E: Broken packages
Filename: libgtk2.0-dev_2.12.12-1~lenny1_arm.deb
E: Broken packages
[Tue Jun 23 17:17:54 2009] 4 to download:   0%

4 to download: (nothing to do)
apt-cross: Error. Failed to locate libpango1.0-dev.
[Tue Jun 23 17:17:54 2009] 3 to download:   0%

3 to download: (nothing to do)
apt-cross: Error. Failed to locate libdirectfb-dev.
[Tue Jun 23 17:17:54 2009] 2 to download:   0%

2 to download: (nothing to do)
apt-cross: Error. Failed to locate libgtk2.0-dev.
[Tue Jun 23 17:17:54 2009] 1 to download:   0%

1 to download: (nothing to do)
apt-cross: Error. Failed to locate libcairo2-dev.
apt-cross: cannot access libgtk2.0-dev_2.12.12-1~lenny1_arm.deb: No such file or directory
Filename: libcairo2-dev_1.6.4-7_arm.deb
Server Error: URL must be absolute
Server Error: URL must be absolute
Server Error: URL must be absolute
Server Error: URL must be absolute
apt-cross: cannot access libcairo2-dev_1.6.4-7_arm.deb: No such file or directory
apt-cross: cannot access libpango1.0-dev_1.20.5-3_arm.deb: No such file or directory
dpkg-deb: unexpected end of file in version number in libdirectfb-dev_1.0.1-11_arm.deb
dpkg-cross: conversion of libdirectfb-dev_1.0.1-11_arm.deb failed.
Index: emdebuild
===================================================================
--- emdebuild	(revision 5435)
+++ emdebuild	(working copy)
@@ -46,7 +46,7 @@
 $addsource $progname $arch $verbose @options $dpkg_extra $conf $home
 $changes $ourversion $emvers $increment $source $vers $svnci $dosign
 $onlysvn *BUILD *OLDOUT *OLDERR %archtable $numchecks $host 
-$wraplibtool $checkdeps /;
+$wraplibtool $checkdeps $suite /;
 
 $ourversion = &tools_version();
 $progname = basename($0);
@@ -75,6 +75,7 @@
     --build-dep:      Install the cross-build dependencies using debian/xcontrol.
     --svn-only:       Commit changes to emdebian patches to emdebian SVN.
     --sign:           Use 'debsign' on the .changes file.
+ -S|--suite SUITE:    Override the suite for apt-cross
  -v|--verbose:        Increase verbosity (max: 3)
  -q|--quiet:          Reduce verbosity.
  -?|-h|--help:        print this usage message and exit
@@ -155,6 +156,9 @@
 	elsif (/^(--sign)$/) {
 		$dosign = "true";
 	}
+	elsif (/^(-S|--suite)$/) {
+		$suite = shift(@ARGV);
+	}
 	elsif (/^(--svn-only)$/) {
 		$onlysvn = "true";
 	}
@@ -172,6 +176,8 @@
 }
 undef @ARGV;
 
+$suite = (defined $suite) ? " -S $suite " : "";
+
 my $target_gnu_type = &check_arch($arch) if (defined $arch);
 if ((not defined $arch)||($arch eq "")||(not defined $target_gnu_type))
 {
@@ -643,10 +649,10 @@
 	my $val = &get_primary;
 	my $mirror = "";
  	$mirror = " -m ftp://$val/debian"; if (defined $val);
-	print GREEN, wrap('','',"Installing: $depstr with apt-cross${v}${mirror}.\n"), RESET
+	print GREEN, wrap('','',"Installing: $depstr with apt-cross${v}${suite}${mirror}.\n"), RESET
 		if ($verbose >= 1);
 	print CYAN, "Enter your sudo password if prompted.\n", RESET if ($verbose >= 2);
-	system ("apt-cross -a $arch $v $mirror -i $depstr");
+	system ("apt-cross -a $arch $v $suite $mirror -i $depstr");
 	# clean up in case some .debs are left over.
 	opendir (DEBS, ".") or return;
 	my @files=grep(/^.*\.deb$/,readdir DEBS);

Reply to: