Page MenuHomeFreeBSD

make clean only checks the $WRKDIR in ${_UNIFIED_DEPENDS}.
AbandonedPublic

Authored by loader on Aug 27 2016, 8:37 AM.
Tags
None
Referenced Files
Unknown Object (File)
Mon, Jan 5, 5:34 PM
Unknown Object (File)
Dec 30 2025, 4:22 AM
Unknown Object (File)
Dec 13 2025, 12:23 PM
Unknown Object (File)
Dec 5 2025, 9:29 PM
Unknown Object (File)
Nov 27 2025, 8:08 AM
Unknown Object (File)
Nov 19 2025, 7:34 AM
Unknown Object (File)
Nov 18 2025, 2:37 PM
Unknown Object (File)
Nov 18 2025, 11:33 AM
Subscribers

Details

Reviewers
koobs
Group Reviewers
O5: Ports Framework(Owns No Changed Paths)
portmgr
Summary

I missed to check this part in the previous report https://reviews.freebsd.org/D3233

In the following scenario, I think "make clean"
should also check for the directory print/indexinfo/work,
if there exists a devel/gmake/work.

recent version of ports r420958:
/usr/ports/net/ngrep
|--/usr/ports/ports-mgmt/pkg
|--/usr/ports/devel/gmake (WRKDIR)
|      |--/usr/ports/ports-mgmt/pkg
|      |--/usr/ports/devel/gettext-tools
|      |      |--/usr/ports/ports-mgmt/pkg
|      |      |--/usr/ports/devel/gettext-runtime
|      |      |      |--/usr/ports/ports-mgmt/pkg
|      |      |      |--/usr/ports/print/indexinfo
|      |      |      |      |--/usr/ports/ports-mgmt/pkg
|      |      |--/usr/ports/print/indexinfo
|      |--/usr/ports/devel/gettext-runtime
|      |--/usr/ports/print/indexinfo (WRKDIR)

# mkdir /usr/ports/devel/gmake/work /usr/ports/print/indexinfo/work
# cd /usr/ports/net/ngrep
# make -V CLEAN-DEPENDS-LIMITED-LIST | sh
/usr/ports/devel/gmake
# make clean
===>  Cleaning for gmake-4.2.1_1
===>  Cleaning for ngrep-1.45_3

Back to the the revision r391294 (one commit before
CLEAN-DEPENDS-LIMITED moved from bsd.port.mk to Scripts/)
it checks for the $WRKDIR recursively until the dependency
doesn't have a $WRKDIR directory.

r391294:
# mkdir /usr/ports/devel/gmake/work /usr/ports/print/indexinfo/work
# cd /usr/ports/net/ngrep
# make -V CLEAN-DEPENDS-LIMITED | sh
/usr/ports/devel/gmake
/usr/ports/print/indexinfo
# make clean
===>  Cleaning for gmake-4.1_2
===>  Cleaning for indexinfo-0.2.3
===>  Cleaning for ngrep-1.45_3

Diff Detail

Repository
rP FreeBSD ports repository
Lint
No Lint Coverage
Unit
No Test Coverage
Build Status
Buildable 4954
Build 5019: arc lint + arc unit

Event Timeline

loader retitled this revision from to make clean only checks the $WRKDIR in ${_UNIFIED_DEPENDS}..
loader updated this object.
loader edited the test plan for this revision. (Show Details)
loader added reviewers: portmgr, koobs.
loader edited edge metadata.

Is this related to the issue that many users are experiencing where it appears that 'depends are not found', even after having run make clean, that make clean-depends fixes?

If so \o/

Please correct me if I misunderstood the make clean
and make clean-depends.

Let's say, we have a $WRKDIR in devel/gettext-runtime,
and here's the dependencies tree:
net/ngrep => devel/gmake => devel/gettext-runtime (WRKDIR)

make clean-depends goes through all the dependencies looking for $WRKDIR
even devel/gmake doesn't have one.

make clean stops at devel/gmake, it doesn't continue to check
devel/gettext-runtime if devel/gmake doesn't have a $WRKDIR.

I think this is how it worked at r391294.

r391294
# mkdir /usr/ports/devel/gettext-runtime/work
# cd /usr/ports/net/ngrep
# make -V CLEAN-DEPENDS-LIMITED | sh
(returns empty)

# make -V CLEAN-DEPENDS-FULL | sh
/usr/ports/devel/gettext-runtime

# make clean
===>  Cleaning for ngrep-1.45_3
# make clean-depends
===>  Cleaning for gettext-runtime-0.19.4

"make clean" can reach the devel/gettext-runtime
when the dependencies are complete.

r391294:
# mkdir /usr/ports/devel/gmake/work /usr/ports/devel/gettext-runtime/work
# cd /usr/ports/net/ngrep
# make -V CLEAN-DEPENDS-LIMITED | sh
/usr/ports/devel/gmake
/usr/ports/devel/gettext-runtime
# make clean
===>  Cleaning for gmake-4.1_2
===>  Cleaning for gettext-runtime-0.19.4
===>  Cleaning for ngrep-1.45_3

make clean usually deletes all the $WRKDIR after
installing a port, and now it just checks the direct
dependencies defined in the ${_UNIFIED_DEPENDS}.
Yes, make clean-depends can do the work.
I just wonder if this is designed on purpose.

r420958
# mkdir /usr/ports/devel/gmake/work /usr/ports/devel/gettext-runtime/work
# cd /usr/ports/net/ngrep
# make -V CLEAN-DEPENDS-LIMITED-LIST | sh
/usr/ports/devel/gmake
# make clean
===>  Cleaning for gmake-4.2.1_1
===>  Cleaning for ngrep-1.45_3

# mkdir /usr/ports/devel/gmake/work /usr/ports/devel/gettext-runtime/work
# cd /usr/ports/net/ngrep
# make -V CLEAN-DEPENDS-LIST | sh
/usr/ports/devel/gmake
/usr/ports/devel/gettext-runtime
# make clean-depends
===>  Cleaning for gmake-4.2.1_1
===>  Cleaning for gettext-runtime-0.19.8.1

@loader My original comment on this review was to ask whether the change in this review, or the changes in D3233 might be related to, or be the cause of the issue facing make clean currently.

Detail:

I don't know the implementation details of the previous or current behaviour, but in the recent past (> several months), reports began to appear from users/committers that were all similarly described as:

  1. make depends (implicitly or explicitly) for ports failing (depends not found), and/or
  2. make clean not 'really' cleaning, or not cleaning like it use to, and
  3. make clean-depends working as a workaround to (2)

For (1), this appears to affect depends-of-depends. cd'ing to the depend-of-depend port dir and running make clean resolved the issue.

I experience the issue regularly testing port updates in my dev environment, and here is the most recent user report: https://twitter.com/Cynede/status/769073930653106176

These symptoms appear to indicate that previous behaviour included depends-of-depends cleaning, where currently that is not the case.

Hi @koobs, I think the current behaviour of make clean was introduced by r391295
https://svnweb.freebsd.org/ports?view=revision&revision=391295
Mk/Scripts/clean-depends-list.sh was combined into Mk/Scripts/depends-list.sh at r399712
https://svnweb.freebsd.org/ports?view=revision&revision=399712
Mk/Scripts/depends-list.sh is the script we're currently using to get the list
of dependencies when running make clean.

D3233 was trying to make it clean the first level of dependencies
(those are defined directly in the Makefile *_DEPENDS).
It's very obvious when make clean did not clean anything.

A year later, I realized that I missed to handle the depends-of-depends in D3233
for make clean, sorry ...

The change in this review is trying to make make clean to clean the
depends-of-depends like the previous CLEAN-DEPENDS-LIMITED:
https://svnweb.freebsd.org/ports/head/Mk/bsd.port.mk?r1=391207&r2=391295&pathrev=391295

Ahh, so this change adds back cleaning of what use to be cleaned. Lovely & thank you :)