* maintainer-makefile: catch uses of $< in non-implicit rules
@ 2019-05-18 7:44 Akim Demaille
2019-05-18 7:52 ` Paul Eggert
0 siblings, 1 reply; 24+ messages in thread
From: Akim Demaille @ 2019-05-18 7:44 UTC (permalink / raw)
To: Gnulib bugs
Bruno made a bug report some time ago: make check failed for Bison on Solaris. The problem was the use of $< in some non-implicit rules. This syntax-check caught them.
See
http://lists.gnu.org/archive/html/bug-bison/2019-05/msg00009.html
and
https://lists.gnu.org/archive/html/bison-patches/2019-05/msg00017.html
Ok to install?
commit e8a5869f2936459762cc48ab370c35b69f86d5e0
Author: Akim Demaille <akim.demaille@gmail.com>
Date: Sat May 18 08:46:00 2019 +0200
maintainer-makefile: catch uses of $< in non-implicit rules
* top/maint.mk (sc_prohibit_magic_number_exit): New.
diff --git a/ChangeLog b/ChangeLog
index 1918041f0..8d5a4ca6e 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,8 @@
+2019-05-18 Akim Demaille <akim@lrde.epita.fr>
+
+ maintainer-makefile: catch uses of $< in non-implicit rules
+ * top/maint.mk (sc_prohibit_magic_number_exit): New.
+
2019-05-14 Paul Eggert <eggert@cs.ucla.edu>
close-stream, closein, closeout: simplify
diff --git a/top/maint.mk b/top/maint.mk
index e9d5ee7d4..05ee7661c 100644
--- a/top/maint.mk
+++ b/top/maint.mk
@@ -408,6 +408,41 @@ sc_prohibit_magic_number_exit:
halt='use EXIT_* values rather than magic number' \
$(_sc_search_regexp)
+# Check that we don't use $< in non-implicit Makefile rules.
+#
+# To find the Makefiles, trace AC_CONFIG_FILES. Using VC_LIST would
+# miss the Makefiles that are not under VC control (e.g., symlinks
+# installed for gettext). "Parsing" (recursive) uses of SUBDIRS seems
+# too delicate.
+#
+# Use GNU Make's --print-data-base to normalize the rules into some
+# easy to parse format: they are separated by two \n. Look for the
+# "section" about non-pattern rules (marked with "# Files") inside
+# which there are still the POSIX Make like implicit rules (".c.o").
+sc_prohibit_gnu_make_extensions_awk_ = \
+ BEGIN { \
+ RS = "\n\n"; \
+ in_rules = 0; \
+ }; \
+ /^\# Files/ { \
+ in_rules = 1; \
+ }; \
+ /\$$</ && in_rules && $$0 !~ /^(.*\n)*\.\w+(\.\w+)?:/ { \
+ print "Error: " file ": $$< in a non implicit rule\n" $$0; \
+ status = 1; \
+ } \
+ END { \
+ exit status \
+ }
+sc_prohibit_gnu_make_extensions:
+ (cd $(srcdir) && autoconf --trace AC_CONFIG_FILES:'$$1') | \
+ tr ' ' '\n' | \
+ $(SED) -ne '/Makefile/{s/\.in$$//;p;}' | \
+ while read m; do \
+ $(MAKE) -qp -f $$m .DUMMY-TARGET 2>/dev/null | \
+ awk -v file=$$m -e '$($@_awk_)' || exit 1; \
+ done
+
# Using EXIT_SUCCESS as the first argument to error is misleading,
# since when that parameter is 0, error does not exit. Use '0' instead.
sc_error_exit_success:
^ permalink raw reply related [flat|nested] 24+ messages in thread
* Re: maintainer-makefile: catch uses of $< in non-implicit rules
2019-05-18 7:44 maintainer-makefile: catch uses of $< in non-implicit rules Akim Demaille
@ 2019-05-18 7:52 ` Paul Eggert
2019-05-18 9:51 ` Akim Demaille
0 siblings, 1 reply; 24+ messages in thread
From: Paul Eggert @ 2019-05-18 7:52 UTC (permalink / raw)
To: Akim Demaille, Gnulib bugs
Akim Demaille wrote:
> + }; \
Thanks, that looks good except I don't see why some of the lines like the above
have semicolons while others don't.
^ permalink raw reply [flat|nested] 24+ messages in thread
* Re: maintainer-makefile: catch uses of $< in non-implicit rules
2019-05-18 7:52 ` Paul Eggert
@ 2019-05-18 9:51 ` Akim Demaille
2019-05-18 18:21 ` Paul Eggert
2019-07-19 7:30 ` Bernhard Voelker
0 siblings, 2 replies; 24+ messages in thread
From: Akim Demaille @ 2019-05-18 9:51 UTC (permalink / raw)
To: Paul Eggert; +Cc: Gnulib bugs
Hi Paul!
> Le 18 mai 2019 à 09:52, Paul Eggert <eggert@cs.ucla.edu> a écrit :
>
> Akim Demaille wrote:
>> + }; \
>
> Thanks, that looks good except I don't see why some of the lines like the above have semicolons while others don't.
You're right, more consistency wouldn't hurt. Because everything ends in a single line, some of them are needed (separators of statements of compound statements), others aren't.
How about this?
commit 2e801e81bb362429d0e252d076233bfdac20e367
Author: Akim Demaille <akim.demaille@gmail.com>
Date: Sat May 18 08:46:00 2019 +0200
maintainer-makefile: catch uses of $< in non-implicit rules
* top/maint.mk (sc_prohibit_magic_number_exit): New.
diff --git a/ChangeLog b/ChangeLog
index 1918041f0..8d5a4ca6e 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,8 @@
+2019-05-18 Akim Demaille <akim@lrde.epita.fr>
+
+ maintainer-makefile: catch uses of $< in non-implicit rules
+ * top/maint.mk (sc_prohibit_magic_number_exit): New.
+
2019-05-14 Paul Eggert <eggert@cs.ucla.edu>
close-stream, closein, closeout: simplify
diff --git a/top/maint.mk b/top/maint.mk
index e9d5ee7d4..3dbe9c378 100644
--- a/top/maint.mk
+++ b/top/maint.mk
@@ -408,6 +408,41 @@ sc_prohibit_magic_number_exit:
halt='use EXIT_* values rather than magic number' \
$(_sc_search_regexp)
+# Check that we don't use $< in non-implicit Makefile rules.
+#
+# To find the Makefiles, trace AC_CONFIG_FILES. Using VC_LIST would
+# miss the Makefiles that are not under VC control (e.g., symlinks
+# installed for gettext). "Parsing" (recursive) uses of SUBDIRS seems
+# too delicate.
+#
+# Use GNU Make's --print-data-base to normalize the rules into some
+# easy to parse format: they are separated by two \n. Look for the
+# "section" about non-pattern rules (marked with "# Files") inside
+# which there are still the POSIX Make like implicit rules (".c.o").
+sc_prohibit_gnu_make_extensions_awk_ = \
+ BEGIN { \
+ RS = "\n\n"; \
+ in_rules = 0; \
+ } \
+ /^\# Files/ { \
+ in_rules = 1; \
+ } \
+ /\$$</ && in_rules && $$0 !~ /^(.*\n)*\.\w+(\.\w+)?:/ { \
+ print "Error: " file ": $$< in a non implicit rule\n" $$0; \
+ status = 1; \
+ } \
+ END { \
+ exit status; \
+ }
+sc_prohibit_gnu_make_extensions:
+ (cd $(srcdir) && autoconf --trace AC_CONFIG_FILES:'$$1') | \
+ tr ' ' '\n' | \
+ $(SED) -ne '/Makefile/{s/\.in$$//;p;}' | \
+ while read m; do \
+ $(MAKE) -qp -f $$m .DUMMY-TARGET 2>/dev/null | \
+ awk -v file=$$m -e '$($@_awk_)' || exit 1; \
+ done
+
# Using EXIT_SUCCESS as the first argument to error is misleading,
# since when that parameter is 0, error does not exit. Use '0' instead.
sc_error_exit_success:
^ permalink raw reply related [flat|nested] 24+ messages in thread
* Re: maintainer-makefile: catch uses of $< in non-implicit rules
2019-05-18 9:51 ` Akim Demaille
@ 2019-05-18 18:21 ` Paul Eggert
2019-05-19 5:42 ` Akim Demaille
2019-07-19 7:30 ` Bernhard Voelker
1 sibling, 1 reply; 24+ messages in thread
From: Paul Eggert @ 2019-05-18 18:21 UTC (permalink / raw)
To: Akim Demaille; +Cc: Gnulib bugs
Akim Demaille wrote:
> How about this?
Looks OK to me; thanks.
^ permalink raw reply [flat|nested] 24+ messages in thread
* Re: maintainer-makefile: catch uses of $< in non-implicit rules
2019-05-18 18:21 ` Paul Eggert
@ 2019-05-19 5:42 ` Akim Demaille
2019-06-17 9:57 ` Tim Rühsen
0 siblings, 1 reply; 24+ messages in thread
From: Akim Demaille @ 2019-05-19 5:42 UTC (permalink / raw)
To: Paul Eggert; +Cc: Gnulib bugs
> Le 18 mai 2019 à 20:21, Paul Eggert <eggert@cs.ucla.edu> a écrit :
>
> Akim Demaille wrote:
>
>> How about this?
>
> Looks OK to me; thanks.
Installed. Thanks!
^ permalink raw reply [flat|nested] 24+ messages in thread
* Re: maintainer-makefile: catch uses of $< in non-implicit rules
2019-05-19 5:42 ` Akim Demaille
@ 2019-06-17 9:57 ` Tim Rühsen
2019-06-17 9:59 ` Akim Demaille
0 siblings, 1 reply; 24+ messages in thread
From: Tim Rühsen @ 2019-06-17 9:57 UTC (permalink / raw)
To: Akim Demaille, Paul Eggert; +Cc: Gnulib bugs
[-- Attachment #1.1: Type: text/plain, Size: 727 bytes --]
Hi Akim,
On 5/19/19 7:42 AM, Akim Demaille wrote:
>
>> Le 18 mai 2019 à 20:21, Paul Eggert <eggert@cs.ucla.edu> a écrit :
>>
>> Akim Demaille wrote:
>>
>>> How about this?
>>
>> Looks OK to me; thanks.
>
> Installed. Thanks!
>
The patch uses awk -e which is understood only by GNU awk. This breaks
all Debian CI tests here since Debian installs 'mawk' by default (I
wasn't aware of that before).
It's not a big deal to install package 'gawk' everywhere, but I just
wanted to mention it. I can see no warning/hint in any of the patch's
comments.
Hmmm, this also implies documenting a new dependency in all projects
that use gnulib or disabling sc_prohibit_gnu_make_extensions.
Regards, Tim
[-- Attachment #2: OpenPGP digital signature --]
[-- Type: application/pgp-signature, Size: 833 bytes --]
^ permalink raw reply [flat|nested] 24+ messages in thread
* Re: maintainer-makefile: catch uses of $< in non-implicit rules
2019-06-17 9:57 ` Tim Rühsen
@ 2019-06-17 9:59 ` Akim Demaille
2019-06-17 10:04 ` Tim Rühsen
0 siblings, 1 reply; 24+ messages in thread
From: Akim Demaille @ 2019-06-17 9:59 UTC (permalink / raw)
To: Tim Rühsen; +Cc: Paul Eggert, Gnulib bugs
Hi Tim,
> Le 17 juin 2019 à 11:57, Tim Rühsen <tim.ruehsen@gmx.de> a écrit :
>
> Hi Akim,
>
> The patch uses awk -e which is understood only by GNU awk. This breaks
> all Debian CI tests here since Debian installs 'mawk' by default (I
> wasn't aware of that before).
>
> It's not a big deal to install package 'gawk' everywhere, but I just
> wanted to mention it. I can see no warning/hint in any of the patch's
> comments.
That was not my intention.
I expect that maintainers have gawk installed, so I think this check
should be skipped if awk is not gawk. WDYT?
^ permalink raw reply [flat|nested] 24+ messages in thread
* Re: maintainer-makefile: catch uses of $< in non-implicit rules
2019-06-17 9:59 ` Akim Demaille
@ 2019-06-17 10:04 ` Tim Rühsen
2019-06-22 15:53 ` Akim Demaille
0 siblings, 1 reply; 24+ messages in thread
From: Tim Rühsen @ 2019-06-17 10:04 UTC (permalink / raw)
To: Akim Demaille; +Cc: Paul Eggert, Gnulib bugs
[-- Attachment #1.1: Type: text/plain, Size: 723 bytes --]
Hi Akim,
On 6/17/19 11:59 AM, Akim Demaille wrote:
> Hi Tim,
>
>> Le 17 juin 2019 à 11:57, Tim Rühsen <tim.ruehsen@gmx.de> a écrit :
>>
>> Hi Akim,
>>
>> The patch uses awk -e which is understood only by GNU awk. This breaks
>> all Debian CI tests here since Debian installs 'mawk' by default (I
>> wasn't aware of that before).
>>
>> It's not a big deal to install package 'gawk' everywhere, but I just
>> wanted to mention it. I can see no warning/hint in any of the patch's
>> comments.
>
> That was not my intention.
>
> I expect that maintainers have gawk installed, so I think this check
> should be skipped if awk is not gawk. WDYT?
Thanks, sounds reasonable to me.
Regards, Tim
[-- Attachment #2: OpenPGP digital signature --]
[-- Type: application/pgp-signature, Size: 833 bytes --]
^ permalink raw reply [flat|nested] 24+ messages in thread
* Re: maintainer-makefile: catch uses of $< in non-implicit rules
2019-06-17 10:04 ` Tim Rühsen
@ 2019-06-22 15:53 ` Akim Demaille
2019-06-24 9:42 ` Tim Rühsen
0 siblings, 1 reply; 24+ messages in thread
From: Akim Demaille @ 2019-06-22 15:53 UTC (permalink / raw)
To: Tim Rühsen; +Cc: Paul Eggert, Gnulib bugs
Hi Tim,
> Le 17 juin 2019 à 12:04, Tim Rühsen <tim.ruehsen@gmx.de> a écrit :
>
> Hi Akim,
>
> On 6/17/19 11:59 AM, Akim Demaille wrote:
>> Hi Tim,
>>
>>> Le 17 juin 2019 à 11:57, Tim Rühsen <tim.ruehsen@gmx.de> a écrit :
>>>
>>> Hi Akim,
>>>
>>> The patch uses awk -e which is understood only by GNU awk. This breaks
>>> all Debian CI tests here since Debian installs 'mawk' by default (I
>>> wasn't aware of that before).
>>>
>>> It's not a big deal to install package 'gawk' everywhere, but I just
>>> wanted to mention it. I can see no warning/hint in any of the patch's
>>> comments.
>>
>> That was not my intention.
>>
>> I expect that maintainers have gawk installed, so I think this check
>> should be skipped if awk is not gawk. WDYT?
>
> Thanks, sounds reasonable to me.
Here is my proposal. Worked properly with the non GNU awk sitting on my machine.
commit b70c97f3ecf45a5c98b7f32189c1a4ae72a60788
Author: Akim Demaille <akim.demaille@gmail.com>
Date: Sat Jun 22 17:52:16 2019 +0200
maintainer-makefile: restore portability to non-GNU awks
Reported by Tim Rühsen.
* top/maint.mk (AWK): New variable. Use it.
(sc_prohibit_gnu_make_extensions): Skip if $(AWK) is not gawk.
diff --git a/ChangeLog b/ChangeLog
index cdc2b3d7a..dc7e52c0a 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,10 @@
+2019-06-22 Akim Demaille <akim@lrde.epita.fr>
+
+ maintainer-makefile: restore portability to non-GNU awks
+ Reported by Tim Rühsen.
+ * top/maint.mk (AWK): New variable. Use it.
+ (sc_prohibit_gnu_make_extensions): Skip if $(AWK) is not gawk.
+
2019-06-22 Akim Demaille <akim@lrde.epita.fr>
argmatch: put all the docs member last.
diff --git a/top/maint.mk b/top/maint.mk
index 3dbe9c378..16e936022 100644
--- a/top/maint.mk
+++ b/top/maint.mk
@@ -24,6 +24,7 @@ ME := maint.mk
# These variables ought to be defined through the configure.ac section
# of the module description. But some packages import this file directly,
# ignoring the module description.
+AWK ?= awk
GREP ?= grep
SED ?= sed
@@ -190,7 +191,7 @@ $(sc_z_rules_): %.z: %
@end=$$(date +%s.%N); \
start=$$(cat .sc-start-$*); \
rm -f .sc-start-$*; \
- awk -v s=$$start -v e=$$end \
+ $(AWK) -v s=$$start -v e=$$end \
'END {printf "%.2f $(patsubst sc_%,%,$*)\n", e - s}' < /dev/null
# The patsubst here is to replace each sc_% rule with its sc_%.z wrapper
@@ -435,13 +436,15 @@ sc_prohibit_gnu_make_extensions_awk_ = \
exit status; \
}
sc_prohibit_gnu_make_extensions:
- (cd $(srcdir) && autoconf --trace AC_CONFIG_FILES:'$$1') | \
- tr ' ' '\n' | \
- $(SED) -ne '/Makefile/{s/\.in$$//;p;}' | \
- while read m; do \
- $(MAKE) -qp -f $$m .DUMMY-TARGET 2>/dev/null | \
- awk -v file=$$m -e '$($@_awk_)' || exit 1; \
- done
+ @if $(AWK) --version | grep GNU >/dev/null 2>&1; then \
+ (cd $(srcdir) && autoconf --trace AC_CONFIG_FILES:'$$1') | \
+ tr ' ' '\n' | \
+ $(SED) -ne '/Makefile/{s/\.in$$//;p;}' | \
+ while read m; do \
+ $(MAKE) -qp -f $$m .DUMMY-TARGET 2>/dev/null | \
+ $(AWK) -v file=$$m -e '$($@_awk_)' || exit 1; \
+ done; \
+ fi
# Using EXIT_SUCCESS as the first argument to error is misleading,
# since when that parameter is 0, error does not exit. Use '0' instead.
@@ -1383,7 +1386,7 @@ gpg_key_ID ?= \
$$(cd $(srcdir) \
&& git cat-file tag v$(VERSION) \
| $(gpgv) --status-fd 1 --keyring /dev/null - - 2>/dev/null \
- | awk '/^\[GNUPG:\] ERRSIG / {print $$3; exit}')
+ | $(AWK) '/^\[GNUPG:\] ERRSIG / {print $$3; exit}')
translation_project_ ?= coordinator@translationproject.org
^ permalink raw reply related [flat|nested] 24+ messages in thread
* Re: maintainer-makefile: catch uses of $< in non-implicit rules
2019-06-22 15:53 ` Akim Demaille
@ 2019-06-24 9:42 ` Tim Rühsen
2019-06-24 15:56 ` Akim Demaille
0 siblings, 1 reply; 24+ messages in thread
From: Tim Rühsen @ 2019-06-24 9:42 UTC (permalink / raw)
To: Akim Demaille; +Cc: Paul Eggert, Gnulib bugs
[-- Attachment #1.1: Type: text/plain, Size: 4431 bytes --]
Hi Akim,
On 6/22/19 5:53 PM, Akim Demaille wrote:
> Hi Tim,
>
>> Le 17 juin 2019 à 12:04, Tim Rühsen <tim.ruehsen@gmx.de> a écrit :
>>
>> Hi Akim,
>>
>> On 6/17/19 11:59 AM, Akim Demaille wrote:
>>> Hi Tim,
>>>
>>>> Le 17 juin 2019 à 11:57, Tim Rühsen <tim.ruehsen@gmx.de> a écrit :
>>>>
>>>> Hi Akim,
>>>>
>>>> The patch uses awk -e which is understood only by GNU awk. This breaks
>>>> all Debian CI tests here since Debian installs 'mawk' by default (I
>>>> wasn't aware of that before).
>>>>
>>>> It's not a big deal to install package 'gawk' everywhere, but I just
>>>> wanted to mention it. I can see no warning/hint in any of the patch's
>>>> comments.
>>>
>>> That was not my intention.
>>>
>>> I expect that maintainers have gawk installed, so I think this check
>>> should be skipped if awk is not gawk. WDYT?
>>
>> Thanks, sounds reasonable to me.
>
> Here is my proposal. Worked properly with the non GNU awk sitting on my machine.
Your proposal works here on Debian after I switched to mawk via
'update-alternatives --config awk', selecting mawk. It detects two
occurrences of $< in our (project) Makefiles correctly.
Switching back to the old maint.mk, brings back the error message about
'-e'. I just did this to make sure.
Thanks for working on it !
Regards, Tim
>
> commit b70c97f3ecf45a5c98b7f32189c1a4ae72a60788
> Author: Akim Demaille <akim.demaille@gmail.com>
> Date: Sat Jun 22 17:52:16 2019 +0200
>
> maintainer-makefile: restore portability to non-GNU awks
>
> Reported by Tim Rühsen.
> * top/maint.mk (AWK): New variable. Use it.
> (sc_prohibit_gnu_make_extensions): Skip if $(AWK) is not gawk.
>
> diff --git a/ChangeLog b/ChangeLog
> index cdc2b3d7a..dc7e52c0a 100644
> --- a/ChangeLog
> +++ b/ChangeLog
> @@ -1,3 +1,10 @@
> +2019-06-22 Akim Demaille <akim@lrde.epita.fr>
> +
> + maintainer-makefile: restore portability to non-GNU awks
> + Reported by Tim Rühsen.
> + * top/maint.mk (AWK): New variable. Use it.
> + (sc_prohibit_gnu_make_extensions): Skip if $(AWK) is not gawk.
> +
> 2019-06-22 Akim Demaille <akim@lrde.epita.fr>
>
> argmatch: put all the docs member last.
> diff --git a/top/maint.mk b/top/maint.mk
> index 3dbe9c378..16e936022 100644
> --- a/top/maint.mk
> +++ b/top/maint.mk
> @@ -24,6 +24,7 @@ ME := maint.mk
> # These variables ought to be defined through the configure.ac section
> # of the module description. But some packages import this file directly,
> # ignoring the module description.
> +AWK ?= awk
> GREP ?= grep
> SED ?= sed
>
> @@ -190,7 +191,7 @@ $(sc_z_rules_): %.z: %
> @end=$$(date +%s.%N); \
> start=$$(cat .sc-start-$*); \
> rm -f .sc-start-$*; \
> - awk -v s=$$start -v e=$$end \
> + $(AWK) -v s=$$start -v e=$$end \
> 'END {printf "%.2f $(patsubst sc_%,%,$*)\n", e - s}' < /dev/null
>
> # The patsubst here is to replace each sc_% rule with its sc_%.z wrapper
> @@ -435,13 +436,15 @@ sc_prohibit_gnu_make_extensions_awk_ = \
> exit status; \
> }
> sc_prohibit_gnu_make_extensions:
> - (cd $(srcdir) && autoconf --trace AC_CONFIG_FILES:'$$1') | \
> - tr ' ' '\n' | \
> - $(SED) -ne '/Makefile/{s/\.in$$//;p;}' | \
> - while read m; do \
> - $(MAKE) -qp -f $$m .DUMMY-TARGET 2>/dev/null | \
> - awk -v file=$$m -e '$($@_awk_)' || exit 1; \
> - done
> + @if $(AWK) --version | grep GNU >/dev/null 2>&1; then \
> + (cd $(srcdir) && autoconf --trace AC_CONFIG_FILES:'$$1') | \
> + tr ' ' '\n' | \
> + $(SED) -ne '/Makefile/{s/\.in$$//;p;}' | \
> + while read m; do \
> + $(MAKE) -qp -f $$m .DUMMY-TARGET 2>/dev/null | \
> + $(AWK) -v file=$$m -e '$($@_awk_)' || exit 1; \
> + done; \
> + fi
>
> # Using EXIT_SUCCESS as the first argument to error is misleading,
> # since when that parameter is 0, error does not exit. Use '0' instead.
> @@ -1383,7 +1386,7 @@ gpg_key_ID ?= \
> $$(cd $(srcdir) \
> && git cat-file tag v$(VERSION) \
> | $(gpgv) --status-fd 1 --keyring /dev/null - - 2>/dev/null \
> - | awk '/^\[GNUPG:\] ERRSIG / {print $$3; exit}')
> + | $(AWK) '/^\[GNUPG:\] ERRSIG / {print $$3; exit}')
>
> translation_project_ ?= coordinator@translationproject.org
>
>
>
[-- Attachment #2: OpenPGP digital signature --]
[-- Type: application/pgp-signature, Size: 833 bytes --]
^ permalink raw reply [flat|nested] 24+ messages in thread
* Re: maintainer-makefile: catch uses of $< in non-implicit rules
2019-06-24 9:42 ` Tim Rühsen
@ 2019-06-24 15:56 ` Akim Demaille
2019-06-25 13:12 ` Tim Rühsen
2019-06-25 13:24 ` Tim Rühsen
0 siblings, 2 replies; 24+ messages in thread
From: Akim Demaille @ 2019-06-24 15:56 UTC (permalink / raw)
To: Tim Rühsen; +Cc: Paul Eggert, Gnulib bugs
Hi Tim,
> Le 24 juin 2019 à 11:42, Tim Rühsen <tim.ruehsen@gmx.de> a écrit :
>
> Hi Akim,
>
> Your proposal works here on Debian after I switched to mawk via
> 'update-alternatives --config awk', selecting mawk. It detects two
> occurrences of $< in our (project) Makefiles correctly.
>
> Switching back to the old maint.mk, brings back the error message about
> '-e'. I just did this to make sure.
Perfect, thanks. Installed.
^ permalink raw reply [flat|nested] 24+ messages in thread
* Re: maintainer-makefile: catch uses of $< in non-implicit rules
2019-06-24 15:56 ` Akim Demaille
@ 2019-06-25 13:12 ` Tim Rühsen
2019-06-25 13:24 ` Tim Rühsen
1 sibling, 0 replies; 24+ messages in thread
From: Tim Rühsen @ 2019-06-25 13:12 UTC (permalink / raw)
To: Akim Demaille; +Cc: Paul Eggert, Gnulib bugs
[-- Attachment #1.1: Type: text/plain, Size: 3572 bytes --]
Hi Akim,
On 6/24/19 5:56 PM, Akim Demaille wrote:
> Hi Tim,
>
>> Le 24 juin 2019 à 11:42, Tim Rühsen <tim.ruehsen@gmx.de> a écrit :
>>
>> Hi Akim,
>>
>> Your proposal works here on Debian after I switched to mawk via
>> 'update-alternatives --config awk', selecting mawk. It detects two
>> occurrences of $< in our (project) Makefiles correctly.
>>
>> Switching back to the old maint.mk, brings back the error message about
>> '-e'. I just did this to make sure.
>
> Perfect, thanks. Installed.
I updated gnulib to your commit
(47405621b3066c035b4b98d2db934d550aaed1ad) and - sorry to say - two CI
runners broke. That are Arch Linux and Fedora 30.
Output on Fedora 30 from 'make syntax-check':
prohibit_gnu_make_extensions
Error: lib/Makefile: $< in a non implicit rule
# makefile (from 'lib/Makefile', line 1310)
NEXT_STRING_H = <string.h>
# makefile (from 'lib/Makefile', line 1409)
REPLACE_LOCALECONV = 0
# makefile (from 'lib/Makefile', line 1231)
LTLIBICONV =
# makefile (from 'lib/Makefile', line 476)
ETAGS = etags
# environment
halt =
# makefile (from 'lib/Makefile', line 1450)
REPLACE_PTSNAME = 0
# automatic
?F = $(notdir $?)
# makefile (from 'lib/Makefile', line 784)
GNULIB_STRTOD = 0
# makefile (from 'lib/Makefile', line 1410)
REPLACE_LOCALTIME = 0
... (many more lines like these) ...
MAKE_VERSION := 4.2.1
# makefile (from 'lib/Makefile', line 540)
GNULIB_ATOLL = 0
# variable set hash-table stats:
# Load=1368/2048=67%, Rehash=1, Collisions=6067/4772=127%
Error: lib/Makefile: $< in a non implicit rule
%.lo: %.c
# recipe to execute (from 'lib/Makefile', line 2150):
$(AM_V_CC)depbase=`echo $@ | sed
's|[^/]*$$|$(DEPDIR)/&|;s|\.lo$$||'`;\
$(LTCOMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ $< &&\
$(am__mv) $$depbase.Tpo $$depbase.Plo
Error: lib/Makefile: $< in a non implicit rule
%.o: %.c
# recipe to execute (from 'lib/Makefile', line 2134):
$(AM_V_CC)depbase=`echo $@ | sed
's|[^/]*$$|$(DEPDIR)/&|;s|\.o$$||'`;\
$(COMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ $< &&\
$(am__mv) $$depbase.Tpo $$depbase.Po
Error: lib/Makefile: $< in a non implicit rule
%.obj: %.c
# recipe to execute (from 'lib/Makefile', line 2142):
$(AM_V_CC)depbase=`echo $@ | sed
's|[^/]*$$|$(DEPDIR)/&|;s|\.obj$$||'`;\
$(COMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@
`$(CYGPATH_W) '$<'` &&\
$(am__mv) $$depbase.Tpo $$depbase.Po
Error: lib/Makefile: $< in a non implicit rule
(%): %
# recipe to execute (built-in):
$(AR) $(ARFLAGS) $@ $<
Error: lib/Makefile: $< in a non implicit rule
%.out: %
# recipe to execute (built-in):
@rm -f $@
cp $< $@
Error: lib/Makefile: $< in a non implicit rule
%:: s.%
# recipe to execute (built-in):
$(GET) $(GFLAGS) $(SCCS_OUTPUT_OPTION) $<
Error: lib/Makefile: $< in a non implicit rule
%:: SCCS/s.%
# recipe to execute (built-in):
$(GET) $(GFLAGS) $(SCCS_OUTPUT_OPTION) $<
make: *** [maint.mk:439: sc_prohibit_gnu_make_extensions] Error 1
[root@61f4306ca485 wget2]# cd gnulib
[root@61f4306ca485 gnulib]# git branch
* (HEAD detached at 47405621b)
master
[root@61f4306ca485 gnulib]# git log
commit 47405621b3066c035b4b98d2db934d550aaed1ad (HEAD, origin/master,
origin/HEAD, master)
Author: Akim Demaille <akim.demaille@gmail.com>
Date: Tue Jun 25 08:11:34 2019 +0200
[root@61f4306ca485 gnulib]# awk --version
GNU Awk 4.2.1, API: 2.0 (GNU MPFR 3.1.6-p2, GNU MP 6.1.2)
Regards, Tim
[-- Attachment #2: OpenPGP digital signature --]
[-- Type: application/pgp-signature, Size: 833 bytes --]
^ permalink raw reply [flat|nested] 24+ messages in thread
* Re: maintainer-makefile: catch uses of $< in non-implicit rules
2019-06-24 15:56 ` Akim Demaille
2019-06-25 13:12 ` Tim Rühsen
@ 2019-06-25 13:24 ` Tim Rühsen
2019-06-25 14:37 ` Bruno Haible
2019-07-10 9:07 ` Tim Rühsen
1 sibling, 2 replies; 24+ messages in thread
From: Tim Rühsen @ 2019-06-25 13:24 UTC (permalink / raw)
To: Akim Demaille; +Cc: Paul Eggert, Gnulib bugs
[-- Attachment #1.1: Type: text/plain, Size: 1082 bytes --]
Hi Akim,
the command expands to
if gawk --version | grep GNU >/dev/null 2>&1; then \
(cd . && autoconf --trace AC_CONFIG_FILES:'$1') | \
tr ' ' '\n' | \
/usr/bin/sed -ne '/Makefile/{s/\.in$//;p;}' | \
while read m; do \
make -qp -f $m .DUMMY-TARGET 2>/dev/null | \
gawk -v file=$m -e 'BEGIN { RS = "\n\n"; in_rules = 0; } /^#
Files/ { in_rules = 1; } /\$</ && in_rules && $0 !~ /^(.*\n)*
\.\w+(\.\w+)?:/ { print "Error: " file ": $< in a non implicit rule\n"
$0; status = 1; } END { exit status; }' || exit 1; \
done; \
fi
# make --version
GNU Make 4.2.1
Built for x86_64-redhat-linux-gnu
# gawk --version
GNU Awk 4.2.1, API: 2.0 (GNU MPFR 3.1.6-p2, GNU MP 6.1.2)
# sed --version
sed (GNU sed) 4.5
# tr --version
tr (GNU coreutils) 8.31
# autoconf --version
autoconf (GNU Autoconf) 2.69
Regards, Tim
[-- Attachment #2: OpenPGP digital signature --]
[-- Type: application/pgp-signature, Size: 833 bytes --]
^ permalink raw reply [flat|nested] 24+ messages in thread
* Re: maintainer-makefile: catch uses of $< in non-implicit rules
2019-06-25 13:24 ` Tim Rühsen
@ 2019-06-25 14:37 ` Bruno Haible
2019-06-25 14:39 ` Tim Rühsen
2019-06-25 14:46 ` Tim Rühsen
2019-07-10 9:07 ` Tim Rühsen
1 sibling, 2 replies; 24+ messages in thread
From: Bruno Haible @ 2019-06-25 14:37 UTC (permalink / raw)
To: bug-gnulib; +Cc: Tim Rühsen, Akim Demaille
[-- Attachment #1: Type: text/plain, Size: 693 bytes --]
Hi Tim,
> the command expands to
>
> if gawk --version | grep GNU >/dev/null 2>&1; then \
> (cd . && autoconf --trace AC_CONFIG_FILES:'$1') | \
> tr ' ' '\n' | \
> /usr/bin/sed -ne '/Makefile/{s/\.in$//;p;}' | \
> while read m; do \
> make -qp -f $m .DUMMY-TARGET 2>/dev/null | \
> gawk -v file=$m -e 'BEGIN { RS = "\n\n"; in_rules = 0; } /^#
> Files/ { in_rules = 1; } /\$</ && in_rules && $0 !~ /^(.*\n)*
> \.\w+(\.\w+)?:/ { print "Error: " file ": $< in a non implicit rule\n"
Does the attached patch fix it?
Bruno
[-- Attachment #2: fix-attempt.diff --]
[-- Type: text/x-patch, Size: 480 bytes --]
diff --git a/top/maint.mk b/top/maint.mk
index 16e9360..cb52631 100644
--- a/top/maint.mk
+++ b/top/maint.mk
@@ -429,7 +429,7 @@ sc_prohibit_gnu_make_extensions_awk_ = \
in_rules = 1; \
} \
/\$$</ && in_rules && $$0 !~ /^(.*\n)*\.\w+(\.\w+)?:/ { \
- print "Error: " file ": $$< in a non implicit rule\n" $$0; \
+ print "Error: " file ": $$" "< in a non implicit rule\n" $$0; \
status = 1; \
} \
END { \
^ permalink raw reply related [flat|nested] 24+ messages in thread
* Re: maintainer-makefile: catch uses of $< in non-implicit rules
2019-06-25 14:37 ` Bruno Haible
@ 2019-06-25 14:39 ` Tim Rühsen
2019-06-25 14:46 ` Tim Rühsen
1 sibling, 0 replies; 24+ messages in thread
From: Tim Rühsen @ 2019-06-25 14:39 UTC (permalink / raw)
To: Bruno Haible, bug-gnulib; +Cc: Akim Demaille
[-- Attachment #1.1: Type: text/plain, Size: 814 bytes --]
Hi Bruno,
sorry, it doesn't.
On 6/25/19 4:37 PM, Bruno Haible wrote:
> Hi Tim,
>
>> the command expands to
>>
>> if gawk --version | grep GNU >/dev/null 2>&1; then \
>> (cd . && autoconf --trace AC_CONFIG_FILES:'$1') | \
>> tr ' ' '\n' | \
>> /usr/bin/sed -ne '/Makefile/{s/\.in$//;p;}' | \
>> while read m; do \
>> make -qp -f $m .DUMMY-TARGET 2>/dev/null | \
>> gawk -v file=$m -e 'BEGIN { RS = "\n\n"; in_rules = 0; } /^#
>> Files/ { in_rules = 1; } /\$</ && in_rules && $0 !~ /^(.*\n)*
>> \.\w+(\.\w+)?:/ { print "Error: " file ": $< in a non implicit rule\n"
>
> Does the attached patch fix it?
>
> Bruno
>
[-- Attachment #2: OpenPGP digital signature --]
[-- Type: application/pgp-signature, Size: 833 bytes --]
^ permalink raw reply [flat|nested] 24+ messages in thread
* Re: maintainer-makefile: catch uses of $< in non-implicit rules
2019-06-25 14:37 ` Bruno Haible
2019-06-25 14:39 ` Tim Rühsen
@ 2019-06-25 14:46 ` Tim Rühsen
1 sibling, 0 replies; 24+ messages in thread
From: Tim Rühsen @ 2019-06-25 14:46 UTC (permalink / raw)
To: Bruno Haible, bug-gnulib; +Cc: Akim Demaille
[-- Attachment #1.1.1: Type: text/plain, Size: 245 bytes --]
Here is a Dockerfile for reproducing the issue on Fedora 30.
docker build ...
docker run ...
git clone https://gitlab.com/gnuwget/wget2.git
cd wget2
git checkout tmp-stuff
./bootstrap
./configure
make syntax-check
Regards, Tim
[-- Attachment #1.1.2: Dockerfile --]
[-- Type: text/plain, Size: 688 bytes --]
FROM fedora:latest
LABEL maintainer "Tim Rühsen <tim.ruehsen@gmx.de>"
WORKDIR /usr/local
RUN dnf update -y
RUN dnf install -y --allowerasing \
git \
make \
gcc \
coreutils \
autoconf \
libtool \
gettext-devel \
automake \
autogen \
python \
valgrind \
libunistring-devel \
flex \
gnutls-devel \
libpsl-devel \
libnghttp2-devel \
zlib-devel \
libidn2-devel \
bzip2-devel \
xz-devel \
libmicrohttpd-devel \
gperf \
lzip \
rsync \
pandoc \
texinfo \
perl-IO-Socket-SSL \
perl-HTTP-Daemon \
gpgme-devel \
ccache \
which
RUN git clone https://git.savannah.gnu.org/git/gnulib.git
ENV GNULIB_SRCDIR /usr/local/gnulib
[-- Attachment #2: OpenPGP digital signature --]
[-- Type: application/pgp-signature, Size: 833 bytes --]
^ permalink raw reply [flat|nested] 24+ messages in thread
* Re: maintainer-makefile: catch uses of $< in non-implicit rules
2019-06-25 13:24 ` Tim Rühsen
2019-06-25 14:37 ` Bruno Haible
@ 2019-07-10 9:07 ` Tim Rühsen
2019-07-10 9:38 ` Tim Rühsen
1 sibling, 1 reply; 24+ messages in thread
From: Tim Rühsen @ 2019-07-10 9:07 UTC (permalink / raw)
To: Akim Demaille; +Cc: Paul Eggert, Gnulib bugs
[-- Attachment #1.1: Type: text/plain, Size: 2146 bytes --]
On 6/25/19 3:24 PM, Tim Rühsen wrote:
> Hi Akim,
>
> the command expands to
>
> if gawk --version | grep GNU >/dev/null 2>&1; then \
> (cd . && autoconf --trace AC_CONFIG_FILES:'$1') | \
> tr ' ' '\n' | \
> /usr/bin/sed -ne '/Makefile/{s/\.in$//;p;}' | \
> while read m; do \
> make -qp -f $m .DUMMY-TARGET 2>/dev/null | \
> gawk -v file=$m -e 'BEGIN { RS = "\n\n"; in_rules = 0; } /^#
> Files/ { in_rules = 1; } /\$</ && in_rules && $0 !~ /^(.*\n)*
> \.\w+(\.\w+)?:/ { print "Error: " file ": $< in a non implicit rule\n"
> $0; status = 1; } END { exit status; }' || exit 1; \
> done; \
> fi
>
> # make --version
> GNU Make 4.2.1
> Built for x86_64-redhat-linux-gnu
>
> # gawk --version
> GNU Awk 4.2.1, API: 2.0 (GNU MPFR 3.1.6-p2, GNU MP 6.1.2)
>
> # sed --version
> sed (GNU sed) 4.5
>
> # tr --version
> tr (GNU coreutils) 8.31
>
> # autoconf --version
> autoconf (GNU Autoconf) 2.69
Testing the above directly in bash works.
So after some testing I found a work-around:
LC_ALL=en_US.UTF-8 make syntax-check
The issue is seen on Fedora 30 and Arch Linux.
Arch `locale` output:
LANG=en_US.UTF-8
LC_CTYPE="en_US.UTF-8"
LC_NUMERIC="en_US.UTF-8"
LC_TIME="en_US.UTF-8"
LC_COLLATE="en_US.UTF-8"
LC_MONETARY="en_US.UTF-8"
LC_MESSAGES="en_US.UTF-8"
LC_PAPER="en_US.UTF-8"
LC_NAME="en_US.UTF-8"
LC_ADDRESS="en_US.UTF-8"
LC_TELEPHONE="en_US.UTF-8"
LC_MEASUREMENT="en_US.UTF-8"
LC_IDENTIFICATION="en_US.UTF-8"
LC_ALL=
The difference to a 'working' environment is that LC_ALL isn't set.
So the outcome of 'make syntax-check' (concrete:
sc_prohibit_gnu_make_extensions rule) is locale dependent.
Is that wanted behavior ?
Fun fact: Once you run `LC_ALL=en_US.UTF-8 make syntax-check`, all
following 'make syntax-check' succeed while LC_ALL still is empty. This
is on Arch.
I have no idea how to fix this properly.
Regards, Tim
[-- Attachment #2: OpenPGP digital signature --]
[-- Type: application/pgp-signature, Size: 833 bytes --]
^ permalink raw reply [flat|nested] 24+ messages in thread
* Re: maintainer-makefile: catch uses of $< in non-implicit rules
2019-07-10 9:07 ` Tim Rühsen
@ 2019-07-10 9:38 ` Tim Rühsen
2019-07-10 10:21 ` Tim Rühsen
0 siblings, 1 reply; 24+ messages in thread
From: Tim Rühsen @ 2019-07-10 9:38 UTC (permalink / raw)
To: Akim Demaille; +Cc: Paul Eggert, Gnulib bugs
[-- Attachment #1.1: Type: text/plain, Size: 3005 bytes --]
On 7/10/19 11:07 AM, Tim Rühsen wrote:
> On 6/25/19 3:24 PM, Tim Rühsen wrote:
>> Hi Akim,
>>
>> the command expands to
>>
>> if gawk --version | grep GNU >/dev/null 2>&1; then \
>> (cd . && autoconf --trace AC_CONFIG_FILES:'$1') | \
>> tr ' ' '\n' | \
>> /usr/bin/sed -ne '/Makefile/{s/\.in$//;p;}' | \
>> while read m; do \
>> make -qp -f $m .DUMMY-TARGET 2>/dev/null | \
>> gawk -v file=$m -e 'BEGIN { RS = "\n\n"; in_rules = 0; } /^#
>> Files/ { in_rules = 1; } /\$</ && in_rules && $0 !~ /^(.*\n)*
>> \.\w+(\.\w+)?:/ { print "Error: " file ": $< in a non implicit rule\n"
>> $0; status = 1; } END { exit status; }' || exit 1; \
>> done; \
>> fi
>>
>> # make --version
>> GNU Make 4.2.1
>> Built for x86_64-redhat-linux-gnu
>>
>> # gawk --version
>> GNU Awk 4.2.1, API: 2.0 (GNU MPFR 3.1.6-p2, GNU MP 6.1.2)
>>
>> # sed --version
>> sed (GNU sed) 4.5
>>
>> # tr --version
>> tr (GNU coreutils) 8.31
>>
>> # autoconf --version
>> autoconf (GNU Autoconf) 2.69
>
> Testing the above directly in bash works.
> So after some testing I found a work-around:
>
> LC_ALL=en_US.UTF-8 make syntax-check
>
> The issue is seen on Fedora 30 and Arch Linux.
>
> Arch `locale` output:
> LANG=en_US.UTF-8
> LC_CTYPE="en_US.UTF-8"
> LC_NUMERIC="en_US.UTF-8"
> LC_TIME="en_US.UTF-8"
> LC_COLLATE="en_US.UTF-8"
> LC_MONETARY="en_US.UTF-8"
> LC_MESSAGES="en_US.UTF-8"
> LC_PAPER="en_US.UTF-8"
> LC_NAME="en_US.UTF-8"
> LC_ADDRESS="en_US.UTF-8"
> LC_TELEPHONE="en_US.UTF-8"
> LC_MEASUREMENT="en_US.UTF-8"
> LC_IDENTIFICATION="en_US.UTF-8"
> LC_ALL=
>
> The difference to a 'working' environment is that LC_ALL isn't set.
>
> So the outcome of 'make syntax-check' (concrete:
> sc_prohibit_gnu_make_extensions rule) is locale dependent.
>
> Is that wanted behavior ?
>
> Fun fact: Once you run `LC_ALL=en_US.UTF-8 make syntax-check`, all
> following 'make syntax-check' succeed while LC_ALL still is empty. This
> is on Arch.
>
> I have no idea how to fix this properly.
Sorry, I have to backpaddle. After more tests with a fresh docker
container it seems not LC_ALL related. Instead after several 'make
syntax-check' those suddenly succeed.
All that changes my project directory is the files in '.deps/'. Removing
that directory, I am back at failing 'make syntax-check' (after several
invocations it then succeeds again).
It looks like the 'make' in the sc_prohibit_gnu_make_extensions rule
creates .Plo and .Po files. One group of files for each SUBDIR/Makefile
per 'make check'. If all files for all SUBDIRs have been created, make
'syntax-check' succeeds.
Knowing this, the issue is reproducible on Debian (unstable) as well.
I report more once tracked down.
Regards, Tim
[-- Attachment #2: OpenPGP digital signature --]
[-- Type: application/pgp-signature, Size: 833 bytes --]
^ permalink raw reply [flat|nested] 24+ messages in thread
* Re: maintainer-makefile: catch uses of $< in non-implicit rules
2019-07-10 9:38 ` Tim Rühsen
@ 2019-07-10 10:21 ` Tim Rühsen
2019-07-10 19:32 ` Akim Demaille
0 siblings, 1 reply; 24+ messages in thread
From: Tim Rühsen @ 2019-07-10 10:21 UTC (permalink / raw)
To: Akim Demaille; +Cc: Paul Eggert, Gnulib bugs
[-- Attachment #1.1: Type: text/plain, Size: 3547 bytes --]
On 7/10/19 11:38 AM, Tim Rühsen wrote:
>
>
> On 7/10/19 11:07 AM, Tim Rühsen wrote:
>> On 6/25/19 3:24 PM, Tim Rühsen wrote:
>>> Hi Akim,
>>>
>>> the command expands to
>>>
>>> if gawk --version | grep GNU >/dev/null 2>&1; then \
>>> (cd . && autoconf --trace AC_CONFIG_FILES:'$1') | \
>>> tr ' ' '\n' | \
>>> /usr/bin/sed -ne '/Makefile/{s/\.in$//;p;}' | \
>>> while read m; do \
>>> make -qp -f $m .DUMMY-TARGET 2>/dev/null | \
>>> gawk -v file=$m -e 'BEGIN { RS = "\n\n"; in_rules = 0; } /^#
>>> Files/ { in_rules = 1; } /\$</ && in_rules && $0 !~ /^(.*\n)*
>>> \.\w+(\.\w+)?:/ { print "Error: " file ": $< in a non implicit rule\n"
>>> $0; status = 1; } END { exit status; }' || exit 1; \
>>> done; \
>>> fi
>>>
>>> # make --version
>>> GNU Make 4.2.1
>>> Built for x86_64-redhat-linux-gnu
>>>
>>> # gawk --version
>>> GNU Awk 4.2.1, API: 2.0 (GNU MPFR 3.1.6-p2, GNU MP 6.1.2)
>>>
>>> # sed --version
>>> sed (GNU sed) 4.5
>>>
>>> # tr --version
>>> tr (GNU coreutils) 8.31
>>>
>>> # autoconf --version
>>> autoconf (GNU Autoconf) 2.69
>>
>> Testing the above directly in bash works.
>> So after some testing I found a work-around:
>>
>> LC_ALL=en_US.UTF-8 make syntax-check
>>
>> The issue is seen on Fedora 30 and Arch Linux.
>>
>> Arch `locale` output:
>> LANG=en_US.UTF-8
>> LC_CTYPE="en_US.UTF-8"
>> LC_NUMERIC="en_US.UTF-8"
>> LC_TIME="en_US.UTF-8"
>> LC_COLLATE="en_US.UTF-8"
>> LC_MONETARY="en_US.UTF-8"
>> LC_MESSAGES="en_US.UTF-8"
>> LC_PAPER="en_US.UTF-8"
>> LC_NAME="en_US.UTF-8"
>> LC_ADDRESS="en_US.UTF-8"
>> LC_TELEPHONE="en_US.UTF-8"
>> LC_MEASUREMENT="en_US.UTF-8"
>> LC_IDENTIFICATION="en_US.UTF-8"
>> LC_ALL=
>>
>> The difference to a 'working' environment is that LC_ALL isn't set.
>>
>> So the outcome of 'make syntax-check' (concrete:
>> sc_prohibit_gnu_make_extensions rule) is locale dependent.
>>
>> Is that wanted behavior ?
>>
>> Fun fact: Once you run `LC_ALL=en_US.UTF-8 make syntax-check`, all
>> following 'make syntax-check' succeed while LC_ALL still is empty. This
>> is on Arch.
>>
>> I have no idea how to fix this properly.
>
> Sorry, I have to backpaddle. After more tests with a fresh docker
> container it seems not LC_ALL related. Instead after several 'make
> syntax-check' those suddenly succeed.
>
> All that changes my project directory is the files in '.deps/'. Removing
> that directory, I am back at failing 'make syntax-check' (after several
> invocations it then succeeds again).
>
> It looks like the 'make' in the sc_prohibit_gnu_make_extensions rule
> creates .Plo and .Po files. One group of files for each SUBDIR/Makefile
> per 'make check'. If all files for all SUBDIRs have been created, make
> 'syntax-check' succeeds.
>
> Knowing this, the issue is reproducible on Debian (unstable) as well.
>
> I report more once tracked down.
Reproducible everywhere (needs gawk being installed, else the
sc_prohibit_gnu_make_extensions is a no-op).
Akim, at least with GNU make 4.2.1 the combination of -q and -p doesn't
do what you expect. From the make man page, I would say that both
options contradict. -q: don't print anything; -p: print the database
For now, I have to disable sc_prohibit_gnu_make_extensions in my projects.
Regards, Tim
[-- Attachment #2: OpenPGP digital signature --]
[-- Type: application/pgp-signature, Size: 833 bytes --]
^ permalink raw reply [flat|nested] 24+ messages in thread
* Re: maintainer-makefile: catch uses of $< in non-implicit rules
2019-07-10 10:21 ` Tim Rühsen
@ 2019-07-10 19:32 ` Akim Demaille
2019-07-11 8:00 ` Tim Rühsen
2019-07-11 8:46 ` Tim Rühsen
0 siblings, 2 replies; 24+ messages in thread
From: Akim Demaille @ 2019-07-10 19:32 UTC (permalink / raw)
To: Tim Rühsen; +Cc: Paul Eggert, Gnulib bugs
Hi Tim,
Sorry I dropped the ball...
> Reproducible everywhere (needs gawk being installed, else the
> sc_prohibit_gnu_make_extensions is a no-op).
Which is what I meant. So are you saying it work as (I) expected?
> Akim, at least with GNU make 4.2.1 the combination of -q and -p doesn't
> do what you expect. From the make man page, I would say that both
> options contradict. -q: don't print anything; -p: print the database
I'm using 4.2.1, and it does what I meant: -p prints the rules,
and -q (which is --question, not --quiet) avoids that we
fired a rule (i.e., "make -q" does not run "make all").
So I'm just clueless here. I don't know what to do to address
your issue.
Are you running "make syntax-check" on a configured builddir?
^ permalink raw reply [flat|nested] 24+ messages in thread
* Re: maintainer-makefile: catch uses of $< in non-implicit rules
2019-07-10 19:32 ` Akim Demaille
@ 2019-07-11 8:00 ` Tim Rühsen
2019-07-11 8:46 ` Tim Rühsen
1 sibling, 0 replies; 24+ messages in thread
From: Tim Rühsen @ 2019-07-11 8:00 UTC (permalink / raw)
To: Akim Demaille; +Cc: Paul Eggert, Gnulib bugs
[-- Attachment #1.1: Type: text/plain, Size: 1716 bytes --]
Hi Akim,
On 7/10/19 9:32 PM, Akim Demaille wrote:
> Hi Tim,
>
> Sorry I dropped the ball...
NP, I dropped it as well ;-)
>> Reproducible everywhere (needs gawk being installed, else the
>> sc_prohibit_gnu_make_extensions is a no-op).
>
> Which is what I meant. So are you saying it work as (I) expected?
It works as expected for mawk which effectively means the test is skipped.
>> Akim, at least with GNU make 4.2.1 the combination of -q and -p doesn't
>> do what you expect. From the make man page, I would say that both
>> options contradict. -q: don't print anything; -p: print the database
>
> I'm using 4.2.1, and it does what I meant: -p prints the rules,
> and -q (which is --question, not --quiet) avoids that we
> fired a rule (i.e., "make -q" does not run "make all").
I just summed up the man page and picked up the 'Do not ... print anything':
-q, --question
``Question mode''. Do not run any commands, or print anything;
just return an exit status that is zero if the
specified targets are already up to date, nonzero otherwise.
> So I'm just clueless here. I don't know what to do to address
> your issue.
It looks like this is not *my* issue. The issue shows up on different
installations which have gawk and make 4.2.1 in common.
I will check if the issue pops up with older make versions or with other
projects as well.
> Are you running "make syntax-check" on a configured builddir?
No sure what you mean. The command sequence to trigger the issue is
straight forward:
./bootstrap
./configure
make
make check
make syntax-check <- bang
What (C) project + environment are you using successfully ?
Regards, Tim
[-- Attachment #2: OpenPGP digital signature --]
[-- Type: application/pgp-signature, Size: 833 bytes --]
^ permalink raw reply [flat|nested] 24+ messages in thread
* Re: maintainer-makefile: catch uses of $< in non-implicit rules
2019-07-10 19:32 ` Akim Demaille
2019-07-11 8:00 ` Tim Rühsen
@ 2019-07-11 8:46 ` Tim Rühsen
2019-07-19 7:40 ` Bernhard Voelker
1 sibling, 1 reply; 24+ messages in thread
From: Tim Rühsen @ 2019-07-11 8:46 UTC (permalink / raw)
To: Akim Demaille; +Cc: Paul Eggert, Gnulib bugs
[-- Attachment #1.1: Type: text/plain, Size: 1174 bytes --]
On 7/10/19 9:32 PM, Akim Demaille wrote:
> I'm using 4.2.1, and it does what I meant: -p prints the rules,
> and -q (which is --question, not --quiet) avoids that we
> fired a rule (i.e., "make -q" does not run "make all").
>
> So I'm just clueless here. I don't know what to do to address
> your issue.
I can *NOT* reproduce the issue on Debian stretch (gawk 4.1.4, make 4.1).
Also, here the .deps/ directory is not being generated by make -qp.
Back to Debian unstable / Arch / Fedora 30.
I tested with good old wget and see the same issue.
The command sequence is
git clone https://gitlab.com/gnuwget/wget.git
cd wget
./bootstrap
cd gnulib
git checkout master
git pull
cd ..
git commit -m "update gnulib" gnulib
./bootstrap
./configure
make syntax-check
This also creates the .deps/ directory. So maybe make 4.2.1 has a bug as
it creates files though -q is given. But then, why can't you reproduce
with the same version of make ?
Earlier in this thread I attached a Dockerfile that makes it pretty easy
to reproduce. If you don't use docker, I could send you the complete
make -qp output.
Regards, Tim
[-- Attachment #2: OpenPGP digital signature --]
[-- Type: application/pgp-signature, Size: 833 bytes --]
^ permalink raw reply [flat|nested] 24+ messages in thread
* Re: maintainer-makefile: catch uses of $< in non-implicit rules
2019-05-18 9:51 ` Akim Demaille
2019-05-18 18:21 ` Paul Eggert
@ 2019-07-19 7:30 ` Bernhard Voelker
1 sibling, 0 replies; 24+ messages in thread
From: Bernhard Voelker @ 2019-07-19 7:30 UTC (permalink / raw)
To: Akim Demaille, Paul Eggert; +Cc: Gnulib bugs
Hi Akim,
On 5/18/19 11:51 AM, Akim Demaille wrote:
> commit 2e801e81bb362429d0e252d076233bfdac20e367
> Author: Akim Demaille <akim.demaille@gmail.com>
> Date: Sat May 18 08:46:00 2019 +0200
>
> maintainer-makefile: catch uses of $< in non-implicit rules
>
> * top/maint.mk (sc_prohibit_magic_number_exit): New.
Wrong sc rule - it should have been this:
* top/maint.mk (sc_prohibit_gnu_make_extensions_awk_): New.
(sc_prohibit_gnu_make_extensions): New.
Do we fix the ChangeLog in cases like this?
Thanks & have a nice day,
Berny
>
> diff --git a/ChangeLog b/ChangeLog
> index 1918041f0..8d5a4ca6e 100644
> --- a/ChangeLog
> +++ b/ChangeLog
> @@ -1,3 +1,8 @@
> +2019-05-18 Akim Demaille <akim@lrde.epita.fr>
> +
> + maintainer-makefile: catch uses of $< in non-implicit rules
> + * top/maint.mk (sc_prohibit_magic_number_exit): New.
> +
> 2019-05-14 Paul Eggert <eggert@cs.ucla.edu>
>
> close-stream, closein, closeout: simplify
> diff --git a/top/maint.mk b/top/maint.mk
> index e9d5ee7d4..3dbe9c378 100644
> --- a/top/maint.mk
> +++ b/top/maint.mk
> @@ -408,6 +408,41 @@ sc_prohibit_magic_number_exit:
> halt='use EXIT_* values rather than magic number' \
> $(_sc_search_regexp)
>
> +# Check that we don't use $< in non-implicit Makefile rules.
> +#
> +# To find the Makefiles, trace AC_CONFIG_FILES. Using VC_LIST would
> +# miss the Makefiles that are not under VC control (e.g., symlinks
> +# installed for gettext). "Parsing" (recursive) uses of SUBDIRS seems
> +# too delicate.
> +#
> +# Use GNU Make's --print-data-base to normalize the rules into some
> +# easy to parse format: they are separated by two \n. Look for the
> +# "section" about non-pattern rules (marked with "# Files") inside
> +# which there are still the POSIX Make like implicit rules (".c.o").
> +sc_prohibit_gnu_make_extensions_awk_ = \
> + BEGIN { \
> + RS = "\n\n"; \
> + in_rules = 0; \
> + } \
> + /^\# Files/ { \
> + in_rules = 1; \
> + } \
> + /\$$</ && in_rules && $$0 !~ /^(.*\n)*\.\w+(\.\w+)?:/ { \
> + print "Error: " file ": $$< in a non implicit rule\n" $$0; \
> + status = 1; \
> + } \
> + END { \
> + exit status; \
> + }
> +sc_prohibit_gnu_make_extensions:
> + (cd $(srcdir) && autoconf --trace AC_CONFIG_FILES:'$$1') | \
> + tr ' ' '\n' | \
> + $(SED) -ne '/Makefile/{s/\.in$$//;p;}' | \
> + while read m; do \
> + $(MAKE) -qp -f $$m .DUMMY-TARGET 2>/dev/null | \
> + awk -v file=$$m -e '$($@_awk_)' || exit 1; \
> + done
> +
> # Using EXIT_SUCCESS as the first argument to error is misleading,
> # since when that parameter is 0, error does not exit. Use '0' instead.
> sc_error_exit_success:
^ permalink raw reply [flat|nested] 24+ messages in thread
* Re: maintainer-makefile: catch uses of $< in non-implicit rules
2019-07-11 8:46 ` Tim Rühsen
@ 2019-07-19 7:40 ` Bernhard Voelker
0 siblings, 0 replies; 24+ messages in thread
From: Bernhard Voelker @ 2019-07-19 7:40 UTC (permalink / raw)
To: Tim Rühsen, Akim Demaille; +Cc: Paul Eggert, Gnulib bugs
On 7/11/19 10:46 AM, Tim Rühsen wrote:
> I can *NOT* reproduce the issue on Debian stretch (gawk 4.1.4, make 4.1).
> Also, here the .deps/ directory is not being generated by make -qp.
>
>
> Back to Debian unstable / Arch / Fedora 30.
> > I tested with good old wget and see the same issue.
> The command sequence is
> git clone https://gitlab.com/gnuwget/wget.git
> cd wget
> ./bootstrap
> cd gnulib
> git checkout master
> git pull
> cd ..
> git commit -m "update gnulib" gnulib
> ./bootstrap
> ./configure
> make syntax-check
I'm getting the same syntax-check error on openSUSE:Tumbleweed (GNU Awk 4.2.1,
GNU Make 4.2.1) for the GNU coreutils when trying to update gnulib to latest
(similar command sequence as above):
$ make syntax-check
...
prohibit_gnu_make_extensions
Error: gnulib-tests/Makefile: $< in a non implicit rule
Have a nice day,
Berny
^ permalink raw reply [flat|nested] 24+ messages in thread
end of thread, other threads:[~2019-07-19 7:40 UTC | newest]
Thread overview: 24+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2019-05-18 7:44 maintainer-makefile: catch uses of $< in non-implicit rules Akim Demaille
2019-05-18 7:52 ` Paul Eggert
2019-05-18 9:51 ` Akim Demaille
2019-05-18 18:21 ` Paul Eggert
2019-05-19 5:42 ` Akim Demaille
2019-06-17 9:57 ` Tim Rühsen
2019-06-17 9:59 ` Akim Demaille
2019-06-17 10:04 ` Tim Rühsen
2019-06-22 15:53 ` Akim Demaille
2019-06-24 9:42 ` Tim Rühsen
2019-06-24 15:56 ` Akim Demaille
2019-06-25 13:12 ` Tim Rühsen
2019-06-25 13:24 ` Tim Rühsen
2019-06-25 14:37 ` Bruno Haible
2019-06-25 14:39 ` Tim Rühsen
2019-06-25 14:46 ` Tim Rühsen
2019-07-10 9:07 ` Tim Rühsen
2019-07-10 9:38 ` Tim Rühsen
2019-07-10 10:21 ` Tim Rühsen
2019-07-10 19:32 ` Akim Demaille
2019-07-11 8:00 ` Tim Rühsen
2019-07-11 8:46 ` Tim Rühsen
2019-07-19 7:40 ` Bernhard Voelker
2019-07-19 7:30 ` Bernhard Voelker
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).