Bug#946235: atk1.0: please make autopkgtests cross-test-friendly

2019-12-06 Thread Steve Langasek
On Fri, Dec 06, 2019 at 07:18:22PM +, Simon McVittie wrote:
> On Fri, 06 Dec 2019 at 09:41:54 -0800, Steve Langasek wrote:
> > As far as I see, installing crossbuild-essential-i386 + pkg-config doesn't
> > set up an i386-linux-gnu-pkg-config symlink.

> It's i686-etc. (GNU tuple, not multiarch tuple). It's helpful that your
> first attempts at cross-testing are for i386, because I think that's our
> only architecture where the difference between GNU and multiarch tuple
> matters in practice!

> As far as I can see, it is meant to be set up when you either add
> i386 as a foreign architecture, or install pkg-config, whichever one
> of those two actions is done second. If that isn't working for you,
> then I think there's a problem, because cross-compiling packages that
> rely on pkg-config using dpkg won't work.

Ok, sure enough, it's there.  So ${CROSS_COMPILE}pkg-config should DTRT!

> > Do you think autopkgtests
> > should be setting up such a symlink locally
> 
> No, I think they should be relying on the OS getting it right, and
> failing if the OS got it wrong.
> 
> smcv

-- 
Steve Langasek   Give me a lever long enough and a Free OS
Debian Developer   to set it on, and I can move the world.
Ubuntu Developer   https://www.debian.org/
slanga...@ubuntu.com vor...@debian.org


signature.asc
Description: PGP signature


Bug#946235: atk1.0: please make autopkgtests cross-test-friendly

2019-12-06 Thread Simon McVittie
On Fri, 06 Dec 2019 at 09:41:54 -0800, Steve Langasek wrote:
> As far as I see, installing crossbuild-essential-i386 + pkg-config doesn't
> set up an i386-linux-gnu-pkg-config symlink.

It's i686-etc. (GNU tuple, not multiarch tuple). It's helpful that your
first attempts at cross-testing are for i386, because I think that's our
only architecture where the difference between GNU and multiarch tuple
matters in practice!

As far as I can see, it is meant to be set up when you either add
i386 as a foreign architecture, or install pkg-config, whichever one
of those two actions is done second. If that isn't working for you,
then I think there's a problem, because cross-compiling packages that
rely on pkg-config using dpkg won't work.

> Do you think autopkgtests
> should be setting up such a symlink locally

No, I think they should be relying on the OS getting it right, and
failing if the OS got it wrong.

smcv



Bug#946235: atk1.0: please make autopkgtests cross-test-friendly

2019-12-06 Thread Steve Langasek
Hi Simon,

On Fri, Dec 06, 2019 at 09:19:30AM +, Simon McVittie wrote:
> On Thu, 05 Dec 2019 at 15:18:40 -0800, Steve Langasek wrote:
> > This requires changes to some tests so that they are cross-aware and can do
> > the right thing.

> Thanks for this patch. I'm assuming this is going to be the first of many
> build smoke-tests that will need similar changes when the autopkgtest
> change lands, so I'm being extra-careful when reviewing it, to try to
> get the clearest possible patches for other packages.

Indeed, there are a number of others in flight, so thanks for the feedback.

> > +if [ -n "$DEB_HOST_MULTIARCH" ]; then
> > +export PKG_CONFIG_PATH="/usr/lib/$DEB_HOST_MULTIARCH/pkgconfig"
> > +PREFIX="$DEB_HOST_GNU_TYPE-"
> > +fi
> > +${PREFIX}gcc -Wall -Werror -o atk1.0-dev_test atk1.0-dev_test.c 
> > `pkg-config --cflags --libs atk`

> I think it would be both more concise and more realistic to use
> ${PREFIX}pkg-config instead of setting PKG_CONFIG_PATH, and rely on the
> multiarch symlink to /usr/share/pkg-config-crosswrapper for the mechanics
> of finding the right library? That matches what will actually happen when
> cross-compiling with dpkg, if I understand correctly (and it's actually
> PKG_CONFIG_LIBDIR that gets set in the cross-wrapper).

As far as I see, installing crossbuild-essential-i386 + pkg-config doesn't
set up an i386-linux-gnu-pkg-config symlink.  Do you think autopkgtests
should be setting up such a symlink locally, rather than just manually
setting the path, provided that the latter works?

> Perhaps it would be clearer to name the variable CROSS_COMPILE instead of
> PREFIX, to avoid it being mixed up with other concepts also named prefix,
> like the one that is normally /usr? `make CROSS_COMPILE=i686-linux-gnu-`
> and `CC=${CROSS_COMPILE}gcc` is the convention used for the equivalent
> variable in for example Linux, Busybox and OpenSSL, so it should be
> reasonably familiar.

That seems reasonable to me.

-- 
Steve Langasek   Give me a lever long enough and a Free OS
Debian Developer   to set it on, and I can move the world.
Ubuntu Developer   https://www.debian.org/
slanga...@ubuntu.com vor...@debian.org


signature.asc
Description: PGP signature


Bug#946235: atk1.0: please make autopkgtests cross-test-friendly

2019-12-06 Thread Simon McVittie
On Thu, 05 Dec 2019 at 15:18:40 -0800, Steve Langasek wrote:
> This requires changes to some tests so that they are cross-aware and can do
> the right thing.

Thanks for this patch. I'm assuming this is going to be the first of many
build smoke-tests that will need similar changes when the autopkgtest
change lands, so I'm being extra-careful when reviewing it, to try to
get the clearest possible patches for other packages.

> +if [ -n "$DEB_HOST_MULTIARCH" ]; then
> +export PKG_CONFIG_PATH="/usr/lib/$DEB_HOST_MULTIARCH/pkgconfig"
> +PREFIX="$DEB_HOST_GNU_TYPE-"
> +fi
> +${PREFIX}gcc -Wall -Werror -o atk1.0-dev_test atk1.0-dev_test.c `pkg-config 
> --cflags --libs atk`

I think it would be both more concise and more realistic to use
${PREFIX}pkg-config instead of setting PKG_CONFIG_PATH, and rely on the
multiarch symlink to /usr/share/pkg-config-crosswrapper for the mechanics
of finding the right library? That matches what will actually happen when
cross-compiling with dpkg, if I understand correctly (and it's actually
PKG_CONFIG_LIBDIR that gets set in the cross-wrapper).

Perhaps it would be clearer to name the variable CROSS_COMPILE instead of
PREFIX, to avoid it being mixed up with other concepts also named prefix,
like the one that is normally /usr? `make CROSS_COMPILE=i686-linux-gnu-`
and `CC=${CROSS_COMPILE}gcc` is the convention used for the equivalent
variable in for example Linux, Busybox and OpenSSL, so it should be
reasonably familiar.

smcv



Bug#946235: atk1.0: please make autopkgtests cross-test-friendly

2019-12-05 Thread Steve Langasek
Package: atk1.0
Version: 2.34.1-1
Severity: minor
Tags: patch
User: ubuntu-de...@lists.ubuntu.com
Usertags: origin-ubuntu focal ubuntu-patch

Dear maintainers,

In Ubuntu, we are in the process of moving the i386 architecture to a
compatibility-only layer on amd64, and therefore we are also moving our
autopkgtest infrastructure to test i386 binaries in a cross-environment.

This requires changes to some tests so that they are cross-aware and can do
the right thing.

The atk1.0 tests currently fail in this environment, because they are build
tests that do not invoke the toolchain in a cross-aware manner.  I've
verified that the attached patch lets the tests successfully build (and run)
i386 tests on an amd64 host.

Note that upstream autopkgtest doesn't currently set DEB_HOST_ARCH so this
is a complete no-op in Debian for the moment.  Support for cross-testing in
autopkgtest is currently awaiting review at
https://salsa.debian.org/ci-team/autopkgtest/merge_requests/69 and once
landed, will still have no effect unless autopkgtest is invoked with a '-a'
option.  So this change should be safe to land in your package despite this
not being upstream in autopkgtest.

Thanks for considering,
-- 
Steve Langasek   Give me a lever long enough and a Free OS
Debian Developer   to set it on, and I can move the world.
Ubuntu Developer   https://www.debian.org/
slanga...@ubuntu.com vor...@debian.org
diff -Nru atk1.0-2.34.1/debian/tests/build atk1.0-2.34.1/debian/tests/build
--- atk1.0-2.34.1/debian/tests/build2019-10-10 03:34:07.0 -0700
+++ atk1.0-2.34.1/debian/tests/build2019-12-05 15:11:11.0 -0800
@@ -22,7 +22,11 @@
 }
 EOF
 
-gcc -Wall -Werror -o atk1.0-dev_test atk1.0-dev_test.c `pkg-config --cflags 
--libs atk`
+if [ -n "$DEB_HOST_MULTIARCH" ]; then
+export PKG_CONFIG_PATH="/usr/lib/$DEB_HOST_MULTIARCH/pkgconfig"
+PREFIX="$DEB_HOST_GNU_TYPE-"
+fi
+${PREFIX}gcc -Wall -Werror -o atk1.0-dev_test atk1.0-dev_test.c `pkg-config 
--cflags --libs atk`
 echo "build: OK"
 [ -x atk1.0-dev_test ]
 ./atk1.0-dev_test
diff -Nru atk1.0-2.34.1/debian/tests/tests atk1.0-2.34.1/debian/tests/tests
--- atk1.0-2.34.1/debian/tests/tests2019-10-10 03:34:07.0 -0700
+++ atk1.0-2.34.1/debian/tests/tests2019-12-05 15:12:09.0 -0800
@@ -4,8 +4,12 @@
 
 WORKDIR=$AUTOPKGTEST_TMP
 
+if [ -n "$DEB_HOST_MULTIARCH" ]; then
+export PKG_CONFIG_PATH="/usr/lib/$DEB_HOST_MULTIARCH/pkgconfig"
+PREFIX="$DEB_HOST_GNU_TYPE-"
+fi
 for i in testdocument testrole testrelation teststateset testvalue ; do
-   gcc tests/$i.c -o $WORKDIR/$i $(pkg-config --cflags --libs atk)
+   ${PREFIX}gcc tests/$i.c -o $WORKDIR/$i $(pkg-config --cflags --libs atk)
echo "build: OK"
[ -x $WORKDIR/$i ]
$WORKDIR/$i