new lintian(1) .changes distribution check

I’m writing this up so I can find it again later, it will affect all of my open source projects (and a few closed source ones, too).

As of Ubunutal Quantal, lintian(1) has added a new test to the things it checks for  in the *.changes file.  It now checks that the Distribution: header contains a known distribution name.Interesting idea, not sure it’s necessary.  But, and this is a big butt, Ubuntu has seen fit to remove all of the upstream Debian names (e.g. “unstable”) from the approved list!?!  The error looks like this:

E: srecord changes: bad-distribution-in-changes-file unstable

I discovered that you can’t pass through the “lintian —dont-check-part=bad-distribution-in-changes-file” option to suppress that one error, because you can only disable all *.changes checks (lintian –dont-check-part=changes-file) or none.  Sheesh.

The fix is tedious.  You need to get -DDistribution=validname  onto the dpkg-genchanges command line.  I did it like this

dpkg-genchanges -DDistribution=`awk -F= '/CODENAME/{print $2}' /etc/lsb-release` blah blah blah

(Hmm, I wonder if deleting that line would also fix it?  That would save having to psychically divine a valid distro release name on an arbitrary Debian derivative.)

Next, you need to get that dpkg-genchanges(1) option passed through by the debuild(1) command, like this:

debuild --changes-option=-DDistribution=`awk -F= '/CODENAME/{print $2}' /etc/lsb-release` yada yada yada

And then you have to get it past make(1) quoting, like this:

debuild --changes-option=-DDistribution=${shell awk -F= '/CODENAME/{print $2}' /etc/lsb-release} yada yada yada

What a comprehensive PITA.


Parenthetically, lintian(1) doesn’t apply the same test to the debian/changelog file, which would be an even bigger PITA.  Remind me again why the debian/changelog file even has the distro release name in it?!?