Subject: pkg/36262: pkgsrc "make checksum" has been nobbled
To: None <email@example.com, firstname.lastname@example.org,>
From: None <kre@munnari.OZ.AU>
Date: 05/02/2007 09:00:01
>Synopsis: pkgsrc "make checksum" has been nobbled
>Arrival-Date: Wed May 02 09:00:00 +0000 2007
>Originator: Robert Elz
>Release: NetBSD 3.99.15 (pkgsrc current within pas hour or so)
Prince of Songkla University
System: NetBSD jade.coe.psu.ac.th 3.99.15 NetBSD 3.99.15 (GENERIC-1.696-20060125) #8: Wed Jan 25 04:59:39 ICT 2006 email@example.com:/usr/obj/current/kernels/JADE_ASUS i386
It was once the case that one could perform a
in eevry package to verify that all of the distfiles
are present and correct. This no longer works
as "make checksum" now keeps a "I was already done once"
cookie file, and does nothing any time after the first.
For me, it is more annoying than serious, as when I perform my
weekly checksum of everything, my /usr/obj is mounted read only
(all I am doing is a verification, nothing is supposed to be
changing) so the cookie files can't be created, and so,
for me, make checksum is still working. Of course it does
complain, and make exits with a false status, after every
package, so "annoying" is a polite way of indicating what I
really believe of all of this...
By inspection. Of, make /usr/obj read only (or set
WRKOBJDIR to reference something that doesn't exist and
can't easily be created), and run "make checksum" in
any package (doesn't even need to be one that has a
distfile to see this effect I believe).
Expect to see something like ...
++++++++++++++++++++++++++++++++ archivers/9e ...
=> Required installed package digest>=20010302: digest-20050731 found
=> Checksum SHA1 OK for 9e.tar.gz
mkdir: /usr/obj/pkg/archivers: Read-only file system
cannot create /usr/obj/pkg/archivers/9e/work.jade/.checksum_done: directory none
*** Error code 2
make: stopped in /usr/src/pkgsrc/archivers/9e
My guess is that this nonsense was an attempt to fix the
previous (mildly annoying but harmless) artifact where
the checksum algorithms would be run twice with "make checksum"
any time the file actually needded to be fetched (once as part
of the fetch, to confirm that completed, and then again as
the direct objective of make checksum).
The way that should have been fixed was to redesign the
fetch/checksum targets so each has a defined job to do, and
then both the internal pgksrc needs (when fetching/verifying
a distfile before building) and the UI "make checksum" get
to use targets that actually achieve the desired objective.
Note that now, a "make install" only gets to discover that the
distfile was correct, last year sometime, or whatever, and no
longer has any idea whether or not the file is correct now,
when it is needed (assuming the workdir remains of course).
Generally, any time there is a temptation to create a cookie file
in a makefile you should treat that as an alarm - it indicates
that you're approaching things the wrong way. Make's job is
to make things, and meaningless cookie files don't count.
Dependencies should always be on things that need making,
no-one cares about empty dot files cluttering obj directories.