On Sat, Jun 11, 2011 at 01:04:00AM -0700, Steve Langasek wrote: > Hi Roger, > > On Sat, Jun 11, 2011 at 02:02:52AM +0100, Roger Leigh wrote: > > On Tue, Jun 07, 2011 at 11:14:14AM +0200, Tollef Fog Heen wrote: > > > ]] Steve Langasek > > Summarised: > > - autodetection with "make -qn" breaks few, if any packages. > > This is one of the key questions, but without a very clear answer. Which of > the rows in your output correspond to packages that *may* have been broken > by autodetection? I'm not sure how to aggregate the rows in the first query > to get this answer, and the rows in the second query all seem to be keyed on > build status when building with build-arch unconditionally. What is > interesting to know when evaluating the autodetection solution is if there > are any regressions in package buildability when comparing *only* to the > current use of 'debian/rules build', and I don't get that from these tables. That should be in the last table, though it might not be clear. Here we are comparing whether autodetection or unconditional use succeed or fail compared with current successful use. Here we ignore all packages which are currently unbuildable with current dpkg-buildpackage. Simplified, we have this (for all these, all were originally successful with unpatched dpkg-buildpackage): autodetection: ┌────────────┬───────────────┬──────────────┬───────┐ │ status │ found_missing │ used_missing │ count │ ├────────────┼───────────────┼──────────────┼───────┤ │ attempted │ f │ f │ 109 │ │ attempted │ t │ f │ 19 │ │ successful │ f │ f │ 4667 │ │ successful │ t │ f │ 3873 │ └────────────┴───────────────┴──────────────┴───────┘ total failed=128, successful=8540 unconditional: ┌────────────┬───────────────┬──────────────┬───────┐ │ status │ found_missing │ used_missing │ count │ ├────────────┼───────────────┼──────────────┼───────┤ │ attempted │ │ f │ 116 │ │ attempted │ │ t │ 3838 │ │ successful │ │ f │ 4702 │ └────────────┴───────────────┴──────────────┴───────┘ total failed=3954, successful=4702 The more complex table below combines these results so we can look at how the two differ side by side. I've picked a few example packages from failing categories to demonstrate why they differ, and what corrective action (if any) needs taking: ad=autodetect, uc=unconditional ┌────────────┬────────────┬─────────┬────────────┬─────────┬───────┐ │ ad_status │ ad_missing │ ad_used │ uc_status │ uc_used │ count │ ├────────────┼────────────┼─────────┼────────────┼─────────┼───────┤ │ attempted │ f │ f │ attempted │ f │ 109 │ 1 │ attempted │ t │ f │ attempted │ t │ 19 │ 2 ├────────────┼────────────┼─────────┼────────────┼─────────┼───────┤ │ successful │ f │ f │ attempted │ f │ 3 │ 3 │ successful │ t │ f │ attempted │ f │ 2 │ 4 │ successful │ t │ f │ attempted │ t │ 3818 │ 5 ├────────────┼────────────┼─────────┼────────────┼─────────┼───────┤ │ successful │ f │ f │ successful │ f │ 4662 │ 6 │ successful │ t │ f │ successful │ f │ 40 │ 7 └────────────┴────────────┴─────────┴────────────┴─────────┴───────┘ General points: - autodetection /never/ failed by using build-arch when not present (ad_used). So we never autodetect build-arch when it isn't present (false positive). - If autodetection fails to detect build-arch when present (false negative), the effect is benign (we fall back to build, which must succeed at present). - unconditional does fail when it uses build-arch when not present (uc_used=t). This results in immediate build failure. 1) Failed to build for both (build-arch present) - autodetection found and used build-arch successfully - unconditional used build-arch - both failed - this category includes both failures due to archive churn and failure due to broken build-arch targets Failure classes: These packages provide build-arch, but fail to build due to bugs - configure triggered by build rather than build-arch and build-indep - files needed for installation not created by build-arch - files needed by install/binary targets not created by build-arch - build-arch is an empty target - these all need fixing by their maintainers Broken rules: alt-ergo_0.93-3 atlas_3.8.3-29 (possibly) avbin_7-1.1 bmf_0.9.4-5 bsdgames_2.17-19 (possibly) bsdiff_4.3-10 caret_5.6.4~dfsg.1-1 c-icap_1:0.1.5-1 coolkey_1.1.0-8 dsdp_5.8-8 emoslib_000380+dfsg-3 espeakedit_1.43.03-1 eterm_0.9.5-2 etherpuppet_0.3-1 fbcat_0.2-2 gurlchecker_0.13.1-2 gxemul_0.4.7.2-1 imlib2_1.4.4-1 infon_0~r198-3 libiptcdata_1.0.4-1 libsvm_3.0-1 libwebp_0.1.2-1 libxml2_2.7.8.dfsg-3 libxslt_1.1.26-7 loadlin_1.6e-1 mtink_1.0.16-3 mumble_1.2.3-2 noweb_2.11b-7 ocamlgraph_1.7-1 ocaml-libvirt_0.6.1.0-2 openr2_1.3.0-2 plplot_5.9.5-4 polybori_0.5~rc1-2.1 python-prctl_1.1.1-1 qmk-groundstation_1.0.1-2 raul_0.6.0-1.2 rpm_4.9.0-5 scmxx_0.9.0-2.2 suricata_1.0.3-1 taglib_1.7-1 tnef_1.4.8-1 uw-imap_8:2007e~dfsg-3.1 weechat_0.3.5-1 wkhtmltopdf_0.9.9-3 wmbattery_2.40 build failures - not directly attributable to build-arch in most cases - a few configure errors with configure: error: cannot run /bin/bash ./config.sub gcj and ocaml failures - I assume due to recent archive changes, not build-arch, but could be wrong docbook/xml failures: probably not built via build-arch so fail file installation: cameleon_1.9.20-1 camlidl_1.05-13 camomile_0.7.2-2 docbook-xsl-saxon_1.00.dfsg.1-4 drbd8_2:8.3.9-1 2) Failed to build for both (build-arch missing) - autodetect failed to find build-arch and fell back to build, but the build failed anyway - unconditional used build-arch, and failure would be expected All java or gcd errors; not interesting for us. php5 also failed due to mysql errrors. 3) Built only with autodetection - autodetection found and used build-arch successfully - unconditional failed despite the existence of build-arch - this is random build failure only, not interesting for us Example: dulwich_0.7.1-2 - random python breakage caused unconditional build failure (not an autodetection or debian/rules issue) Example: eina_1.0.0-1 - failure in testsuite aused unconditional build failure (not an autodetection or debian/rules issue) Example: solfege_3.19.6-1 - failure in testsuite aused unconditional build failure (not an autodetection or debian/rules issue) 4) Built only with autodetection - autodetect failed to find build-arch and fell back to build - unconditional used build-arch, but the failure was not due to missing build-arch Example: kicad_0.0.20110507-1 - broken debian/rules (build-indep/arch don't depend on configure) - autodetection fails for some reason (as for (7)). Example: leave_1.12-2 - debian/rules is a shell script which made autodetection fall back. unconditional failed due to the target being unsupported. - needs fixing by making debian/rule a makefile 5) Built only with autodetection (build-arch missing) - autodetection failed to find build-arch and fell back to build - unconditional used build-arch and failed No examples for this one; it's working exactly as expected. 6) Successful builds - autodetection found and used build-arch - unconditional used build-arch No examples for this one; it's working exactly as expected. 7) Failed autodetection - autodetection failed to detect an existing build-arch target - unconditional used build-arch A complete list of packages is at the bottom; these are selected examples. Example: spring_0.82.7.1+dfsg1-3 In this package, the '%: dh $@' rule is at the end of the rules, not the beginning. This makes "make -qn" try to run the rule: % make -f debian/rules -qn build-arch dh build-arch dh_testdir -a debian/rules override_dh_auto_configure make: *** [build-arch] Error 1 Compare with moving the rule to the start: % make -f debian/rules -qn build-arch % echo $? 1 Example: isomd5sum_1.0.5-2 This package contains a real build-arch rule, and it's .PHONY. Again, "make -qf" actually tries to build the target and fails: % make -f debian/rules -qn build-arch make implantisomd5 checkisomd5 make: *** [build-isomd5sum-stamp] Error 1 Example: phonon-backend-vlc_0.4.0-1 % make -f debian/rules -qn build-arch /usr/share/pkg-kde-tools/qt-kde-team/2/dhmk.pl --with=kde,pkgkde-symbolshelper make -f debian/rules dhmk_run_configure_commands DHMK_TARGET="configure" make: *** [debian/dhmk_configure] Error 1 Probably somewhere in the guts of /usr/share/pkg-kde-tools/qt-kde-team/2/dhmk.mk where the generic '%: debian/dhmk_%' expansion is. Note that most of the failures are in KDE packages, so fixing this will fix the majority of the failures. Example: mg_20110120-1 % make -f debian/rules -qn build-arch dh build-arch --parallel dh_testdir -a -O--parallel debian/rules override_dh_auto_configure make: *** [build-arch] Error 1 Another example using dh. These makefiles don't appear to be broken intrinsically. Could this be a bug in make? It certainly shouldn't be actually running stuff when run with '-q'. > > arch-any packages (the fraction not providing a build-arch > > target). > > That's pretty substantial, and persuades me that it's not a good idea. Agreed. By adopting "make -qf", we would need to ensure that (1) buggy packages are fixed (7) "make -qf" failures need examining by a better make expert than myself. If this is a make bug, it still shouldn't prevent its use as a transitioning mechanism since it's need not be used permanently--it appears to be benign and since the effect is to fall back to using build, it's not going to cause noticable problems. I am somewhat perplexed by "-q" running commands though... > > Because unstable was changing between the rebuilds, some of the > > failures are likely due to churn, including multiarch work, so a > > failure does not necessarily implicate the patch being tested. > > I'm surprised that the build environment was continuing to track updates to > unstable at this time, as opposed to using a static mirror. That's an > unfortunate source of noise in the data; how can we get the list of packages > that failed to build with autodetection that didn't fail with 'debian/rules > build', to determine if they are indeed false positives? These should be included (1) above. For the purposes of deciding the best approach to take, I hope the data in this mail will be sufficient. Most of the differences between builds appear to be due to java breakage; doing the rebuilds against a static mirror would have prevented that. For the purposes of identifying every buggy package reliably, I'm happy to do a rebuild with a static mirror if Tollef doesn't mind be using his machine for another two days. This would make the list in (1) solely consist of packages with broken debian/rules; packages currently unbuildable would however be skipped. Regards, Roger (1) Failed to build for both (build-arch present) # SELECT o.package, o.version FROM orig AS o INNER JOIN auto AS a ON o.package=a.package AND o.version=a.version INNER JOIN break AS b ON o.package=b.package AND o.version=b.version WHERE o.status='successful' AND a.status='attempted' AND b.status='attempted' AND a.found_missing=false AND a.used_missing=false AND b.used_missing=false; ┌─────────────────────────────────┬────────────────────┐ │ package │ version │ ├─────────────────────────────────┼────────────────────┤ │ alt-ergo │ 0.93-3 │ │ ant1.7 │ 1.7.1-7 │ │ ant │ 1.8.2-2 │ │ antlr3 │ 3.2-5 │ │ atlas │ 3.8.3-29 │ │ avbin │ 7-1.1 │ │ axis │ 1.4-13 │ │ bin-prot │ 1.2.24-1 │ │ bmf │ 0.9.4-5 │ │ bouncycastle │ 1.44+dfsg-2 │ │ bsdgames │ 2.17-19 │ │ bsdiff │ 4.3-10 │ │ bsh │ 2.0b4-12 │ │ cameleon │ 1.9.20-1 │ │ camlidl │ 1.05-13 │ │ camomile │ 0.7.2-2 │ │ caret │ 5.6.4~dfsg.1-1 │ │ cherokee │ 1.2.2-2 │ │ c-icap │ 1:0.1.5-1 │ │ coolkey │ 1.1.0-8 │ │ db │ 5.1.25-10 │ │ distcc │ 3.1-4 │ │ docbook-xsl-saxon │ 1.00.dfsg.1-4 │ │ drbd8 │ 2:8.3.9-1 │ │ dsdp │ 5.8-8 │ │ ecj │ 3.5.1-1 │ │ emoslib │ 000380+dfsg-3 │ │ espeakedit │ 1.43.03-1 │ │ eterm │ 0.9.5-2 │ │ etherpuppet │ 0.3-1 │ │ euler │ 1.61.0-8 │ │ fbcat │ 0.2-2 │ │ fbreader │ 0.12.10dfsg-3 │ │ feel++ │ 0.91.0~svn7044-1 │ │ feel++ │ 0.91.0~svn7063-2 │ │ feel++ │ 0.91.0~svn7079-1 │ │ fieldslib │ 0.1.0-2 │ │ freeradius │ 2.1.10+dfsg-3 │ │ gelemental │ 1.2.0-6 │ │ glpk-java │ 1.0.13-4 │ │ gnustep-back │ 0.18.0-3 │ │ gurlchecker │ 0.13.1-2 │ │ gxemul │ 0.4.7.2-1 │ │ hsqldb │ 1.8.0.10-9 │ │ htp │ 1.16-3 │ │ hyperestraier │ 1.4.13-3 │ │ ilmbase │ 1.0.1-3 │ │ imlib2 │ 1.4.4-1 │ │ infon │ 0~r198-3 │ │ iptables │ 1.4.10-1 │ │ jakarta-log4j │ 1.2.15-11 │ │ jlint │ 3.0-4.4 │ │ libbuffy-bindings │ 0.12+nmu1 │ │ libgtk2-mozembed-perl │ 0.09-1 │ │ libgui-commands-java │ 1.1.43-4 │ │ libiptcdata │ 1.0.4-1 │ │ libitext-java │ 2.1.7-2 │ │ libjaxp1.3-java │ 1.3.05-1 │ │ libjmathtex-java │ 0.7~pre-4 │ │ libmx4j-java │ 3.0.2-10 │ │ libreoffice │ 1:3.3.2-4 │ │ librepository │ 0.1.4-4 │ │ libsaxon-java │ 1:6.5.5-7 │ │ libservlet2.4-java │ 5.0.30-12 │ │ libsvm │ 3.0-1 │ │ libsvm │ 3.1-1 │ │ libswirl-java │ 1.1-1 │ │ libwebp │ 0.1.2-1 │ │ libxalan2-java │ 2.7.1-5 │ │ libxerces2-java │ 2.9.1-4.1 │ │ libxml2 │ 2.7.8.dfsg-3 │ │ libxml-commons-resolver1.1-java │ 1.2-5 │ │ libxslt │ 1.1.26-7 │ │ loadlin │ 1.6e-1 │ │ lttv │ 0.12.37-17022011-1 │ │ lttv │ 0.12.37-17022011-2 │ │ mp3splt-gtk │ 0.5.6-1.2 │ │ mtink │ 1.0.16-3 │ │ mumble │ 1.2.3-2 │ │ noweb │ 2.11b-7 │ │ ocaml-data-notation │ 0.0.3-1 │ │ ocamlgraph │ 1.7-1 │ │ ocaml-libvirt │ 0.6.1.0-2 │ │ openexr │ 1.6.1-4.1 │ │ openr2 │ 1.3.0-2 │ │ pdftk │ 1.44-3 │ │ plplot │ 5.9.5-4 │ │ polybori │ 0.5~rc1-2.1 │ │ python-prctl │ 1.1.1-1 │ │ qmk-groundstation │ 1.0.1-2 │ │ raul │ 0.6.0-1.2 │ │ rpm │ 4.9.0-5 │ │ scmxx │ 0.9.0-2.2 │ │ sexplib310 │ 4.2.16-1 │ │ subversion │ 1.6.17dfsg-1 │ │ suricata │ 1.0.3-1 │ │ swt-gtk │ 3.6.2-1 │ │ synopsis │ 0.12-7 │ │ taglib │ 1.7-1 │ │ tnef │ 1.4.8-1 │ │ ttyload │ 0.5-4 │ │ unbound │ 1.4.10-1 │ │ unbound │ 1.4.6-1 │ │ uw-imap │ 8:2007e~dfsg-3.1 │ │ weechat │ 0.3.3-3 │ │ weechat │ 0.3.5-1 │ │ wkhtmltopdf │ 0.9.9-3 │ │ wmbattery │ 2.40 │ │ xml2 │ 0.4-3 │ │ yasr │ 0.6.9-1 │ └─────────────────────────────────┴────────────────────┘ (110 rows) (2) Failed to build for both (build-arch missing) # SELECT o.package, o.version FROM orig AS o INNER JOIN auto AS a ON o.package=a.package AND o.version=a.version INNER JOIN break AS b ON o.package=b.package AND o.version=b.version WHERE o.status='successful' AND a.status='attempted' AND b.status='attempted' AND a.found_missing=true AND a.used_missing=false AND b.used_missing=true; ┌─────────────────┬───────────────┐ │ package │ version │ ├─────────────────┼───────────────┤ │ a7xpg │ 0.11.dfsg1-6 │ │ antlr │ 2.7.7-17 │ │ babel │ 1.4.0.dfsg-8 │ │ gunroar │ 0.15.dfsg1-4 │ │ ii-esu │ 1.0a.dfsg1-3 │ │ libidn │ 1.20-1 │ │ mu-cade │ 0.11.dfsg1-5 │ │ openjdk-6 │ 6b18-1.8.7-5 │ │ parsec47 │ 0.2.dfsg1-3 │ │ php5 │ 5.3.6-11 │ │ projectl │ 1.001.dfsg1-3 │ │ sacjava │ 1.3-3 │ │ tatan │ 1.0.dfsg1-2 │ │ titanion │ 0.3.dfsg1-3 │ │ torus-trooper │ 0.22.dfsg1-6 │ │ tumiki-fighters │ 0.2.dfsg1-4 │ │ val-and-rick │ 0.1a.dfsg1-2 │ │ voms │ 1.9.19.2-2 │ │ xxdiff │ 1:3.2-10 │ └─────────────────┴───────────────┘ (19 rows) (7) Packages failing due to broken autodetection # SELECT o.package, o.version FROM orig AS o INNER JOIN auto AS a ON o.package=a.package AND o.version=a.version INNER JOIN break AS b ON o.package=b.package AND o.version=b.version WHERE o.status='successful' AND a.status='successful' AND a.found_missing=true AND a.used_missing=false AND b.used_missing=false; ┌──────────────────────────────────┬──────────────────────┐ │ package │ version │ ├──────────────────────────────────┼──────────────────────┤ │ akonadi │ 1.5.3-2 │ │ cliquer │ 1.21-1 │ │ coq │ 8.3.pl2+dfsg-1 │ │ flog │ 1.8-3 │ │ fonttools │ 2.3-1 │ │ globus-callout │ 0.7-7 │ │ globus-common │ 11.6-3 │ │ globus-ftp-client │ 6.0-2 │ │ globus-ftp-control │ 2.11-3 │ │ globus-gass-copy │ 5.10-2 │ │ globus-gass-transfer │ 4.3-3 │ │ globus-gram-client │ 10.4-2 │ │ globus-gram-protocol │ 9.7-3 │ │ globus-gssapi-gsi │ 7.6-2 │ │ globus-rls-client │ 5.2-4 │ │ globus-rls-server │ 4.9-5 │ │ globus-rsl-assist │ 2.2-2 │ │ globus-scheduler-event-generator │ 2.1-4 │ │ isomd5sum │ 1:1.0.5-2 │ │ kde4libs │ 4:4.6.3-3 │ │ kdeaccessibility │ 4:4.6.3-1 │ │ kdeadmin │ 4:4.6.3-1 │ │ kdeartwork │ 4:4.6.3-2 │ │ kdebase │ 4:4.6.3-1 │ │ kdebase-runtime │ 4:4.6.3-1 │ │ kdebase-workspace │ 4:4.6.3-1 │ │ kdeedu │ 4:4.6.3-2 │ │ kdegames │ 4:4.6.3-1 │ │ kdegraphics │ 4:4.6.3-1 │ │ kdemultimedia │ 4:4.6.3-1 │ │ kdenetwork │ 4:4.6.3-1 │ │ kdepim │ 4:4.4.11.1+l10n-1 │ │ kdepimlibs │ 4:4.6.3-1 │ │ kdepim-runtime │ 4:4.4.11.1-2 │ │ kdeplasma-addons │ 4:4.6.3-1 │ │ kdesdk │ 4:4.6.3-1 │ │ kdetoys │ 4:4.6.3-1 │ │ kdeutils │ 4:4.6.3-1 │ │ kdewebdev │ 4:4.6.3-1 │ │ kicad │ 0.0.20110507-1 │ │ leave │ 1.12-2 │ │ libtommath │ 0.42.0-1 │ │ mg │ 20110120-1 │ │ phonon │ 4:4.6.0really4.5.0-3 │ │ phonon-backend-gstreamer │ 4:4.6.0really4.5.1-1 │ │ phonon-backend-vlc │ 0.4.0-1 │ │ phonon-backend-xine │ 4:4.6.0really4.4.4-3 │ │ pkg-kde-tools │ 0.14.0 │ │ polkit-kde-1 │ 0.99.0-2 │ │ polkit-qt-1 │ 0.99.0-3 │ │ postpone │ 0.1 │ │ qca2 │ 2.0.3-1 │ │ qca2-plugin-ossl │ 2.0.0~beta3-1 │ │ qimageblitz │ 1:0.0.6-3 │ │ spring │ 0.82.7.1+dfsg1-3 │ └──────────────────────────────────┴──────────────────────┘ (55 rows) -- .''`. Roger Leigh : :' : Debian GNU/Linux http://people.debian.org/~rleigh/ `. `' Printing on GNU/Linux? http://gutenprint.sourceforge.net/ `- GPG Public Key: 0x25BFB848 Please GPG sign your mail.
Attachment:
signature.asc
Description: Digital signature