URL: <http://savannah.gnu.org/bugs/?43221>
Summary: Random string corruption when recursively evaluating guile code. Project: make Submitted by: ahmedtd Submitted on: Sun 14 Sep 2014 07:38:49 AM GMT Severity: 3 - Normal Item Group: Bug Status: None Privacy: Public Assigned to: None Open/Closed: Open Discussion Lock: Any Component Version: 4.0 Operating System: POSIX-Based Fixed Release: None Triage Status: None _______________________________________________________ Details: I am working on a build system that extensively uses GNU Make's new guile integration. One of my goals is to simplify the creation and use of non-recursive makefiles (in the Recursive Make Considered Harmful sense). I created a guile function (augmk/enter) that sets up some automatic bookkeeping and then executes 'include <subdir>/Rules.mk' using gmk-eval. This seems to mostly work, but under certain conditions causes random corruption. I have attached an example project that shows random string corruption on two different systems. If you run 'make clean' from the top-level project directory, the expected output is something like: $ make clean rm -rf aaaaaaaaaaaaaaaaa rm -rf bbbbbbbbbbbbbbbbb ... rm -rf hhhhhhhhhhhhhhhhh However, most of the time, one of the output lines will be something like this: rm -rf <blank> or rm -rf <utf-8 nonsense> or rm -rf r/share/.... <some actual path from /usr on my system, but with the leading "/us" cut off> Removing any of these factors from the example project causes the corruption to go away: 1) Making the targets in question 16 characters or less. 2) Not emitting the code for the 'clean' target from guile, but instead putting it directly in ./Rules.mk. 3) Not including each Rules.mk file from guile (via augmk/enter), but rather directly writing 'include <subdir>/Rules.mk. I can reproduce this corruption using both Make 4.0 (from the Gentoo repositories) and with the latest master checkin from git. I suspect that the "real" part of the problem comes from calling 'include' from within guile. I've tried one mitigation strategy already, to no effect: in guile.c, use scm_without_guile() to ensure that eval() is never called in guile mode. _______________________________________________________ File Attachments: ------------------------------------------------------- Date: Sun 14 Sep 2014 07:38:49 AM GMT Name: example.tar.gz Size: 1kB By: ahmedtd A small example project that reproduces the error. <http://savannah.gnu.org/bugs/download.php?file_id=32092> _______________________________________________________ Reply to this item at: <http://savannah.gnu.org/bugs/?43221> _______________________________________________ Message sent via/by Savannah http://savannah.gnu.org/ _______________________________________________ Bug-make mailing list Bug-make@gnu.org https://lists.gnu.org/mailman/listinfo/bug-make