Bug#946235: atk1.0: please make autopkgtests cross-test-friendly
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
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
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
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
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