Date: Sat, 01 Apr 2023 17:45:28 +0000 From: bugzilla-noreply@freebsd.org To: bugs@FreeBSD.org Subject: [Bug 270584] make -q exits 1 when there's no work to do Message-ID: <bug-270584-227@https.bugs.freebsd.org/bugzilla/>
next in thread | raw e-mail | index | archive | help
https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=3D270584 Bug ID: 270584 Summary: make -q exits 1 when there's no work to do Product: Base System Version: 13.1-RELEASE Hardware: Any OS: Any Status: New Severity: Affects Only Me Priority: --- Component: bin Assignee: bugs@FreeBSD.org Reporter: kreuter@progn.net "/usr/bin/make -q" on 13.1-RELEASE-p7 exits with status 1 when there's no w= ork to do for an explicitly specified target file. This both contradicts the man page, "Do not execute any commands, but exit 0 if the specified targets are up-to-date and 1, otherwise", and is apparently incompatible with SUSv4's m= ake specfication at https://pubs.opengroup.org/onlinepubs/9699919799/utilities/make.html Here's a pared-down reproduction: given this Makefile, -- foo: touch foo bar: foo sleep 1 touch bar -- Here is a commented transcript: # Ensure foo and bar do not exist $ rm foo bar $ /usr/bin/make -q bar $ echo $? 1 # The preceding 1 agrees with the man page and SUSv4. # Now let's create stuff. $ /usr/bin/make bar touch foo sleep 1 touch bar $ /usr/bin/make -q bar $ echo $? 1 # That 1 is disagrees with the manual and POSIX. # There's no work to do, so it should be 0. By inspection, both GNU make 4.4 and the "BSD make" available in MacPorts on OSX exit 0 in the last case.=20 N.B., ISTM that both the man page and SUSv4 don't fully specify what "make = -q" should do in all cases: the man page might be understood to only apply when there are "specified targets"; and SUSv4 might be understood to apply only = when a target is a file. In the example above, "bar" is both a specified target = and a file, so I think that this example is in the intersection of the manual a= nd=20 the standard. However, if anybody undertakes changing make, I'd request that -q cause mak= e to exit with status 0 whenever there's no work to do for all targets make is considering, whether those targets are specified or implied, and whether they're files or not. That behavior would, IMO, seem to be the most useful = for what it seems '-q' is for: asking make to determine whether there's any wor= k to do, irrespective of the nature of the target and how make's caller invoked = it. Here's system info, in case it's helpful for the bug report. I've got no lo= cal patches or anything on this host: $ uname -a uname -a FreeBSD ruk 13.1-RELEASE-p6 FreeBSD 13.1-RELEASE-p6 GENERIC amd64 $ freebsd-version -u freebsd-version -u 13.1-RELEASE-p7 Please let me know if further information would be useful for this report. --=20 You are receiving this mail because: You are the assignee for the bug.=
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?bug-270584-227>