Subject: bug#74382: `compile-first` Make rule is no longer using `load-prefer-newer`

From: Konstantin Kharlamov <[email-masked]>
Date: Sun, 17 Nov 2024 20:24:08 +0300

On Sun, 2024-11-17 at 19:09 +0200, Eli Zaretskii wrote:
> > From: Konstantin Kharlamov <[email-masked]>
> > Cc: [email-masked], [email-masked], [email-masked]
> > Date: Sun, 17 Nov 2024 19:46:25 +0300
> > 
> > On Sun, 2024-11-17 at 18:29 +0200, Eli Zaretskii wrote:
> > > We already have a special target for that: maintainer-clean. 
> > > There's
> > > no need to make such confusing differences between what "make
> > > clean"
> > > does in a tarball and in Git.  That's a standard GNU target, so
> > > it
> > > should do what the GNU Coding Standards say, and do it
> > > consistently.
> > 
> > GNU Coding Standard section for `make clean` says, quoting:
> > 
> > > Delete all files […] that are normally created by building the
> > program. However, don’t delete the files that record the
> > configuration.
> > Also preserve files that could be made by building, but normally
> > aren’t
> > because the distribution comes with them.
> > 
> > The "git distribution" doesn't come with .elc files, hence .elc
> > files
> > should be removed by `make clean` if run in the git repository.
> > That's
> > what the standard says.
> 
> There's no "Git distribution", so this doesn't apply.

The Cambridge Dictionary defines word "distribution" as¹:

> the process of giving things out to several people, or spreading or
supplying something

Git repo provides people with Emacs sources, so that does apply.

> Once again, it is more important to me that "make clean" does the
> same
> in every case than anything else.
> 
> > This "don't clean elc files during `make clean`" hurts Emacs devs
> > and
> > contributors, while gaining nothing in return.
> 
> I disagree.

Well, since we ruled out the distro packagers as the auditory for the
`make clean`, who else do you see would benefit from it?

> > > You will have to get used to this curiosity of the Emacs build
> > > system,
> > > sorry.  The main audience of the build stuff in Git is Emacs
> > > developers, so everyone else have to adapt.
> > 
> > I don't think Emacs developers are using release tarballs, so this
> > "curiosity" isn't helping them.
> 
> The curiosity is for those who build from tarballs, whoever they are.

Here's the thing, the `foo clean` target in any build system in 95% of
cases in my experience is only used to work around the bugs in how the
project set up the build system, more specifically when compilation
command doesn't rebuild project properly. In Emacs we already know that
the bug is only with those COMPILE_FIRST files. A release tarball user
is very unlikely to modify exactly those files and exactly in a way to
would lead to the problem. Hence the user is very unlikely to use `make
clean` whatsoever. And then, even if they do catch the bug, they again
*do* want to get rid of the offending files.

So overall, I just don't see who would ever want `make clean` not to
remove `.elc` files, even among tarball users.