Re: [PATCH 09/25] syntax-check: fix violations and re-enable sc_makefile_at_at_check.
On 11/15/2011 09:22 PM, Gary V. Vaughan wrote: Hi Chuck, Eric, Thanks both for the review! On 15 Nov 2011, at 23:07, Charles Wilson wrote: On 11/15/2011 7:53 AM, Gary V. Vaughan wrote: tests/mdemo/Makefile.am -## use @LIBLTDL@ because some broken makes do not accept macros in targets +## use $(LIBLTDL) because some broken makes do not accept macros in targets This comment now makes zero sense. If you are now forcing the following rule: +$(LIBLTDL): $(top_distdir)/libtool \ then (a) remove the comment completely, and (b) document somewhere that we now require non-broken make which DOES allow $(macros) in targets. + - At some point we were supporting some undetermined `broken make', as +evidenced by having carried the following code since 2003: + + ## use @LIBLTDL@ because some broken makes do not accept macros in + ## targets, we can only do this because our LIBLTDL does not contain + ## $(top_builddir) + @LIBLTDL@: $(top_distdir)/libtool \ + ... By the way, such make implementations (that don't work with $(macros) in targets) exist: https://lists.gnu.org/archive/html/automake-patches/2008-12/msg00027.html At least IRIX and HP-UX vendor make fail to handle macros in the target. + +However, we've also had *many* cases of macros in targets for just as +long, so most likely we never fully supported makes allegedly broken +in this way. As of this release, we explicitly no longer support +make implementations that do not accept macros in targets. I suppose we can resuscitate make portability if anyone complains loudly enough. We may want to also ask on the automake list if this is still a real limitation, or whether automake has given up on worrying about this as well. -- Eric Blake ebl...@redhat.com+1-919-301-3266 Libvirt virtualization library http://libvirt.org signature.asc Description: OpenPGP digital signature
Re: [PATCH 09/25] syntax-check: fix violations and re-enable sc_makefile_at_at_check.
[adding automake list in CC] Hi Eric. On Wednesday 16 November 2011, Eric Blake wrote: + - At some point we were supporting some undetermined `broken make', as +evidenced by having carried the following code since 2003: + + ## use @LIBLTDL@ because some broken makes do not accept macros in + ## targets, we can only do this because our LIBLTDL does not contain + ## $(top_builddir) + @LIBLTDL@: $(top_distdir)/libtool \ + ... By the way, such make implementations (that don't work with $(macros) in targets) exist: https://lists.gnu.org/archive/html/automake-patches/2008-12/msg00027.html This links says nothing about make not accepting macros in targets; it says that using macros on the left side of a *macro assignment* is not portable: # Bad, not portable. foo$(var) = bar # But this should be OK. foo$(var): @echo crating $@. At least IRIX and HP-UX vendor make fail to handle macros in the target. Are you sure? I'm seeing this in the master branch of automake: $ grep -C1 '^$(.*) *:' lib/am/*.am lib/am/check.am- lib/am/check.am:$(TEST_SUITE_LOG): $(TEST_LOGS) lib/am/check.am-@$(am__sh_e_setup); \ -- lib/am/configure.am-if %?REGEN-ACLOCAL-M4% lib/am/configure.am:$(ACLOCAL_M4): %MAINTAINER-MODE% $(am__aclocal_m4_deps) lib/am/configure.am-?TOPDIR_P? $(am__cd) $(srcdir) $(ACLOCAL) $(ACLOCAL_AMFLAGS) -- lib/am/configure.am-## Avoid the deleted header file problem for the dependencies. lib/am/configure.am:$(am__aclocal_m4_deps): lib/am/configure.am-endif %?REGEN-ACLOCAL-M4% -- lib/am/lisp.am-## an empty target. lib/am/lisp.am:$(am__ELCFILES): elc-stamp lib/am/lisp.am-## Recover from the removal of $@. -- lib/am/subdirs.am- lib/am/subdirs.am:$(RECURSIVE_TARGETS): lib/am/subdirs.am-## Using $failcom allows -k to keep its natural meaning when running a -- lib/am/subdirs.am-## bombs. lib/am/subdirs.am:$(RECURSIVE_CLEAN_TARGETS): lib/am/subdirs.am-## Using $failcom allows -k to keep its natural meaning when running a ... but Ralf Wildnehues used to test automake somewhat regularly on both IRIX and HP-UX, and to my knowledge never reported an error related to the contructs above. + +However, we've also had *many* cases of macros in targets for just as +long, so most likely we never fully supported makes allegedly broken +in this way. As of this release, we explicitly no longer support +make implementations that do not accept macros in targets. I suppose we can resuscitate make portability if anyone complains loudly enough. We may want to also ask on the automake list if this is still a real limitation, or whether automake has given up on worrying about this as well. See above. Regards, Stefano
Re: [PATCH 09/25] syntax-check: fix violations and re-enable sc_makefile_at_at_check.
Hi Stefano, Eric, On 17 Nov 2011, at 00:27, Stefano Lattarini wrote: On Wednesday 16 November 2011, Eric Blake wrote: + - At some point we were supporting some undetermined `broken make', as +evidenced by having carried the following code since 2003: + + ## use @LIBLTDL@ because some broken makes do not accept macros in + ## targets, we can only do this because our LIBLTDL does not contain + ## $(top_builddir) + @LIBLTDL@: $(top_distdir)/libtool \ + ... By the way, such make implementations (that don't work with $(macros) in targets) exist: https://lists.gnu.org/archive/html/automake-patches/2008-12/msg00027.html This links says nothing about make not accepting macros in targets; it says that using macros on the left side of a *macro assignment* is not portable: # Bad, not portable. foo$(var) = bar # But this should be OK. foo$(var): @echo crating $@. Right, and even when I wrote the dubious comment quoted above in 2003, other parts of libtool were still using macro expansions in make targets, so I think the whole thing is probably a red herring. Libtool has never fully supported any make that can't deal with macros in targets, and we've never received a complaint or bug report, which makes me think that if such a make exists, no one wants to use it with libtool, so we can safely ignore the whole thing. The NEWS entry I wrote for this commit is purely for future repo archaeology. At least IRIX and HP-UX vendor make fail to handle macros in the target. Are you sure? I'm seeing this in the master branch of automake: $ grep -C1 '^$(.*) *:' lib/am/*.am lib/am/check.am- lib/am/check.am:$(TEST_SUITE_LOG): $(TEST_LOGS) lib/am/check.am-@$(am__sh_e_setup); \ -- lib/am/configure.am-if %?REGEN-ACLOCAL-M4% lib/am/configure.am:$(ACLOCAL_M4): %MAINTAINER-MODE% $(am__aclocal_m4_deps) lib/am/configure.am-?TOPDIR_P? $(am__cd) $(srcdir) $(ACLOCAL) $(ACLOCAL_AMFLAGS) -- lib/am/configure.am-## Avoid the deleted header file problem for the dependencies. lib/am/configure.am:$(am__aclocal_m4_deps): lib/am/configure.am-endif %?REGEN-ACLOCAL-M4% -- lib/am/lisp.am-## an empty target. lib/am/lisp.am:$(am__ELCFILES): elc-stamp lib/am/lisp.am-## Recover from the removal of $@. -- lib/am/subdirs.am- lib/am/subdirs.am:$(RECURSIVE_TARGETS): lib/am/subdirs.am-## Using $failcom allows -k to keep its natural meaning when running a -- lib/am/subdirs.am-## bombs. lib/am/subdirs.am:$(RECURSIVE_CLEAN_TARGETS): lib/am/subdirs.am-## Using $failcom allows -k to keep its natural meaning when running a ... but Ralf Wildnehues used to test automake somewhat regularly on both IRIX and HP-UX, and to my knowledge never reported an error related to the contructs above. + +However, we've also had *many* cases of macros in targets for just as +long, so most likely we never fully supported makes allegedly broken +in this way. As of this release, we explicitly no longer support +make implementations that do not accept macros in targets. I suppose we can resuscitate make portability if anyone complains loudly enough. We may want to also ask on the automake list if this is still a real limitation, or whether automake has given up on worrying about this as well. See above. When my Internet comes back reliably and I can do more than just put mail in qmail's queue for the next time I have a bit of bandwidth, I'll make sure to test the HEAD of libtool master on the architectures I have access to, including both HP/UX and IRIX. Cheers, -- Gary V. Vaughan (gary AT gnu DOT org)
Re: [PATCH 09/25] syntax-check: fix violations and re-enable sc_makefile_at_at_check.
On 11/16/2011 06:04 PM, Gary V. Vaughan wrote: Right, and even when I wrote the dubious comment quoted above in 2003, other parts of libtool were still using macro expansions in make targets, so I think the whole thing is probably a red herring. Libtool has never fully supported any make that can't deal with macros in targets, and we've never received a complaint or bug report, which makes me think that if such a make exists, no one wants to use it with libtool, so we can safely ignore the whole thing. The NEWS entry I wrote for this commit is purely for future repo archaeology. Then it's not NEWS-worthy. It's worth keeping that analysis in the git commit message (as you say, for repo archaeology), but let's limit it to just there, rather than potentially causing users to worry about some perceived loss of portability when they read NEWS. -- Eric Blake ebl...@redhat.com+1-919-301-3266 Libvirt virtualization library http://libvirt.org signature.asc Description: OpenPGP digital signature
Re: [PATCH 09/25] syntax-check: fix violations and re-enable sc_makefile_at_at_check.
[[automake list removed from Cc:]] On 17 Nov 2011, at 08:08, Eric Blake wrote: On 11/16/2011 06:04 PM, Gary V. Vaughan wrote: Right, and even when I wrote the dubious comment quoted above in 2003, other parts of libtool were still using macro expansions in make targets, so I think the whole thing is probably a red herring. Libtool has never fully supported any make that can't deal with macros in targets, and we've never received a complaint or bug report, which makes me think that if such a make exists, no one wants to use it with libtool, so we can safely ignore the whole thing. The NEWS entry I wrote for this commit is purely for future repo archaeology. Then it's not NEWS-worthy. It's worth keeping that analysis in the git commit message (as you say, for repo archaeology), but let's limit it to just there, rather than potentially causing users to worry about some perceived loss of portability when they read NEWS. Good point. I've moved the NEWS content to the gitlog message ready for when I push the series. Cheers, -- Gary V. Vaughan (gary AT gnu DOT org)
[PATCH 09/25] syntax-check: fix violations and re-enable sc_makefile_at_at_check.
* cfg.mk (local-checks-to-fix): Remove sc_makefile_at_at_check from list of disabled checks. * configure.ac (order-only prerequisites): Test with the order-only pipe symbol in a macro. * Makefile.am, tests/mdemo/Makefile.am: Convert all @FOO@ to $(FOO). Signed-off-by: Gary V. Vaughan g...@gnu.org --- Makefile.am | 42 +- cfg.mk |1 - configure.ac|3 ++- tests/mdemo/Makefile.am | 12 ++-- 4 files changed, 29 insertions(+), 29 deletions(-) diff --git a/Makefile.am b/Makefile.am index b559b5e..97de896 100644 --- a/Makefile.am +++ b/Makefile.am @@ -325,7 +325,7 @@ libtool: $(ltmain_sh) $(config_status) $(dotversion) .PHONY: configure-subdirs configure-subdirs distdir: $(DIST_MAKEFILE_LIST) -@DIST_MAKEFILE_LIST@: +$(DIST_MAKEFILE_LIST): $(AM_V_at)dir=`echo '$@' |'$(SED)' 's,^[^/]*$$,.,;s,/[^/]*$$,,'`; \ test -d $$dir || mkdir $$dir || exit 1; \ abs_srcdir=`$(lt__cd) '$(srcdir)' pwd`; \ @@ -417,7 +417,7 @@ EXTRA_DIST += $(doc_dir)/gendocs_template # info_TEXINFOS = $(doc_dir)/libtool.texi # # Producing the following error, even though srcdir is implicitly set: -# cannot open ./@srcdir@/doc/libtool.texi: No such file or directory +# cannot open ./$(srcdir)/doc/libtool.texi: No such file or directory info_TEXINFOS = doc/libtool.texi doc_libtool_TEXINFOS = $(doc_dir)/PLATFORMS $(doc_dir)/fdl.texi \ $(notes_texi) @@ -726,12 +726,12 @@ $(testsuite): $(package_m4) $(TESTSUITE_AT) Makefile.am $(package_m4): $(dotversion) Makefile.am $(AM_V_GEN){ \ echo '# Signature of the current package.'; \ - echo 'm4_define([AT_PACKAGE_NAME], [@PACKAGE_NAME@])'; \ - echo 'm4_define([AT_PACKAGE_TARNAME], [@PACKAGE_TARNAME@])'; \ - echo 'm4_define([AT_PACKAGE_VERSION], [@PACKAGE_VERSION@])'; \ - echo 'm4_define([AT_PACKAGE_STRING],[@PACKAGE_STRING@])'; \ - echo 'm4_define([AT_PACKAGE_BUGREPORT], [@PACKAGE_BUGREPORT@])'; \ - echo 'm4_define([AT_PACKAGE_URL], [@PACKAGE_URL@])'; \ + echo 'm4_define([AT_PACKAGE_NAME], [$(PACKAGE_NAME)])'; \ + echo 'm4_define([AT_PACKAGE_TARNAME], [$(PACKAGE_TARNAME)])'; \ + echo 'm4_define([AT_PACKAGE_VERSION], [$(PACKAGE_VERSION)])'; \ + echo 'm4_define([AT_PACKAGE_STRING],[$(PACKAGE_STRING)])'; \ + echo 'm4_define([AT_PACKAGE_BUGREPORT], [$(PACKAGE_BUGREPORT)])'; \ + echo 'm4_define([AT_PACKAGE_URL], [$(PACKAGE_URL)])'; \ } '$@' tests/atconfig: $(config_status) @@ -966,13 +966,13 @@ INTERACTIVE_TESTS = \ tests/cdemo-undef-exec.log:tests/cdemo-undef-make.log tests/cdemo-undef-make.log:tests/cdemo-undef.log -tests/cdemo-undef.log: @ORDER@ tests/cdemo-shared-exec.log +tests/cdemo-undef.log: $(ORDER)tests/cdemo-shared-exec.log tests/cdemo-shared-exec.log: tests/cdemo-shared-make.log tests/cdemo-shared-make.log: tests/cdemo-shared.log -tests/cdemo-shared.log: @ORDER@tests/cdemo-exec.log +tests/cdemo-shared.log: $(ORDER) tests/cdemo-exec.log tests/cdemo-exec.log: tests/cdemo-make.log tests/cdemo-make.log: tests/cdemo-conf.log -tests/cdemo-conf.log: @ORDER@ tests/cdemo-static-exec.log +tests/cdemo-conf.log: $(ORDER) tests/cdemo-static-exec.log tests/cdemo-static-exec.log: tests/cdemo-static-make.log tests/cdemo-static-make.log: tests/cdemo-static.log @@ -983,24 +983,24 @@ tests/demo-hardcode.log: tests/demo-shared-inst.log tests/demo-shared-inst.log:tests/demo-shared-exec.log tests/demo-shared-exec.log:tests/demo-shared-make.log tests/demo-shared-make.log:tests/demo-shared.log -tests/demo-shared.log: @ORDER@ tests/demo-nopic-exec.log +tests/demo-shared.log: $(ORDER)tests/demo-nopic-exec.log tests/demo-nopic-exec.log: tests/demo-nopic-make.log tests/demo-nopic-make.log: tests/demo-nopic.log -tests/demo-nopic.log: @ORDER@ tests/demo-pic-exec.log +tests/demo-nopic.log: $(ORDER) tests/demo-pic-exec.log tests/demo-pic-exec.log: tests/demo-pic-make.log tests/demo-pic-make.log: tests/demo-pic.log -tests/demo-pic.log: @ORDER@tests/demo-nofast-unst.log +tests/demo-pic.log: $(ORDER) tests/demo-nofast-unst.log tests/demo-nofast-unst.log:tests/demo-nofast-inst.log tests/demo-nofast-inst.log:tests/demo-nofast-exec.log tests/demo-nofast-exec.log:tests/demo-nofast-make.log tests/demo-nofast-make.log:tests/demo-nofast.log -tests/demo-nofast.log: @ORDER@ tests/demo-deplibs.log +tests/demo-nofast.log: $(ORDER)tests/demo-deplibs.log tests/demo-deplibs.log:tests/demo-unst.log tests/demo-unst.log: tests/demo-inst.log tests/demo-inst.log: tests/demo-exec.log tests/demo-exec.log: tests/demo-make.log tests/demo-make.log: tests/demo-conf.log -tests/demo-conf.log: @ORDER@
Re: [PATCH 09/25] syntax-check: fix violations and re-enable sc_makefile_at_at_check.
On 11/15/2011 7:53 AM, Gary V. Vaughan wrote: tests/mdemo/Makefile.am -## use @LIBLTDL@ because some broken makes do not accept macros in targets +## use $(LIBLTDL) because some broken makes do not accept macros in targets This comment now makes zero sense. If you are now forcing the following rule: +$(LIBLTDL): $(top_distdir)/libtool \ then (a) remove the comment completely, and (b) document somewhere that we now require non-broken make which DOES allow $(macros) in targets. -- Chuck
Re: [PATCH 09/25] syntax-check: fix violations and re-enable sc_makefile_at_at_check.
On 11/15/2011 09:49 AM, Charles Wilson wrote: On 11/15/2011 7:53 AM, Gary V. Vaughan wrote: tests/mdemo/Makefile.am -## use @LIBLTDL@ because some broken makes do not accept macros in targets +## use $(LIBLTDL) because some broken makes do not accept macros in targets This comment now makes zero sense. If you are now forcing the following rule: +$(LIBLTDL): $(top_distdir)/libtool \ then (a) remove the comment completely, and (b) document somewhere that we now require non-broken make which DOES allow $(macros) in targets. As an alternative, revert this change, and instead add a setting of _makefile_at_at_check_exceptions in cfg.mk that exempts just @LIBLTDL@. -- Eric Blake ebl...@redhat.com+1-919-301-3266 Libvirt virtualization library http://libvirt.org signature.asc Description: OpenPGP digital signature
Re: [PATCH 09/25] syntax-check: fix violations and re-enable sc_makefile_at_at_check.
Hi Chuck, Eric, Thanks both for the review! On 15 Nov 2011, at 23:07, Charles Wilson wrote: On 11/15/2011 7:53 AM, Gary V. Vaughan wrote: tests/mdemo/Makefile.am -## use @LIBLTDL@ because some broken makes do not accept macros in targets +## use $(LIBLTDL) because some broken makes do not accept macros in targets This comment now makes zero sense. If you are now forcing the following rule: +$(LIBLTDL): $(top_distdir)/libtool \ then (a) remove the comment completely, and (b) document somewhere that we now require non-broken make which DOES allow $(macros) in targets. Yikes, that's what comes of making changes with emacs macros. Nicely caught! On 16 Nov 2011, at 00:03, Eric Blake wrote: On 11/15/2011 09:49 AM, Charles Wilson wrote: On 11/15/2011 7:53 AM, Gary V. Vaughan wrote: tests/mdemo/Makefile.am -## use @LIBLTDL@ because some broken makes do not accept macros in targets +## use $(LIBLTDL) because some broken makes do not accept macros in targets This comment now makes zero sense. If you are now forcing the following rule: +$(LIBLTDL): $(top_distdir)/libtool \ then (a) remove the comment completely, and (b) document somewhere that we now require non-broken make which DOES allow $(macros) in targets. As an alternative, revert this change, and instead add a setting of _makefile_at_at_check_exceptions in cfg.mk that exempts just @LIBLTDL@. Well in the same patch, we also change the @DIST_MAKEFILE_LIST@ target to $(DIST_MAKEFILE_LIST)... Anyway, that comment appeared out of the blue in the commit that introduced the whole of tests/mdemo, in the face of which we already had other Makefile rules with macro expansions in targets. I don't remember why I wrote that, or what bizarre or imagined make implementation I was using at the time... but I seriously doubt the veracity of the comment, or at least that if such a make still exists in the wild, we ever truly supported it. Here's a new version of the patch with that comment removed, and a NEWS item explaining why: * cfg.mk (local-checks-to-fix): Remove sc_makefile_at_at_check from list of disabled checks. * configure.ac (order-only prerequisites): Test with the order-only pipe symbol in a macro. * Makefile.am, tests/mdemo/Makefile.am: Convert all @FOO@ to $(FOO). * NEWS: Mention that support for make implementations that do not accept macros in targets has been broken for quite some time. Signed-off-by: Gary V. Vaughan g...@gnu.org --- Makefile.am | 42 +- NEWS| 14 ++ cfg.mk |1 - configure.ac|3 ++- tests/mdemo/Makefile.am | 12 +--- 5 files changed, 42 insertions(+), 30 deletions(-) diff --git a/Makefile.am b/Makefile.am index b559b5e..97de896 100644 --- a/Makefile.am +++ b/Makefile.am @@ -325,7 +325,7 @@ libtool: $(ltmain_sh) $(config_status) $(dotversion) .PHONY: configure-subdirs configure-subdirs distdir: $(DIST_MAKEFILE_LIST) -@DIST_MAKEFILE_LIST@: +$(DIST_MAKEFILE_LIST): $(AM_V_at)dir=`echo '$@' |'$(SED)' 's,^[^/]*$$,.,;s,/[^/]*$$,,'`; \ test -d $$dir || mkdir $$dir || exit 1; \ abs_srcdir=`$(lt__cd) '$(srcdir)' pwd`; \ @@ -417,7 +417,7 @@ EXTRA_DIST += $(doc_dir)/gendocs_template # info_TEXINFOS = $(doc_dir)/libtool.texi # # Producing the following error, even though srcdir is implicitly set: -# cannot open ./@srcdir@/doc/libtool.texi: No such file or directory +# cannot open ./$(srcdir)/doc/libtool.texi: No such file or directory info_TEXINFOS = doc/libtool.texi doc_libtool_TEXINFOS = $(doc_dir)/PLATFORMS $(doc_dir)/fdl.texi \ $(notes_texi) @@ -726,12 +726,12 @@ $(testsuite): $(package_m4) $(TESTSUITE_AT) Makefile.am $(package_m4): $(dotversion) Makefile.am $(AM_V_GEN){ \ echo '# Signature of the current package.'; \ - echo 'm4_define([AT_PACKAGE_NAME], [@PACKAGE_NAME@])'; \ - echo 'm4_define([AT_PACKAGE_TARNAME], [@PACKAGE_TARNAME@])'; \ - echo 'm4_define([AT_PACKAGE_VERSION], [@PACKAGE_VERSION@])'; \ - echo 'm4_define([AT_PACKAGE_STRING],[@PACKAGE_STRING@])'; \ - echo 'm4_define([AT_PACKAGE_BUGREPORT], [@PACKAGE_BUGREPORT@])'; \ - echo 'm4_define([AT_PACKAGE_URL], [@PACKAGE_URL@])'; \ + echo 'm4_define([AT_PACKAGE_NAME], [$(PACKAGE_NAME)])'; \ + echo 'm4_define([AT_PACKAGE_TARNAME], [$(PACKAGE_TARNAME)])'; \ + echo 'm4_define([AT_PACKAGE_VERSION], [$(PACKAGE_VERSION)])'; \ + echo 'm4_define([AT_PACKAGE_STRING],[$(PACKAGE_STRING)])'; \ + echo 'm4_define([AT_PACKAGE_BUGREPORT], [$(PACKAGE_BUGREPORT)])'; \ + echo 'm4_define([AT_PACKAGE_URL], [$(PACKAGE_URL)])'; \ } '$@' tests/atconfig: $(config_status) @@ -966,13 +966,13 @@ INTERACTIVE_TESTS = \ tests/cdemo-undef-exec.log:tests/cdemo-undef-make.log