[bug #16132] Quoting problem in 3.81rc1
Follow-up Comment #3, bug #16132 (project make): What kind of sh.exe are you using, and how (with what compiler and development environment) did you build Make 3.81rc1? I use Windows XP SP2. I have built make3.81rc1 with both VC6 and VC7.1 (giving the same results). I am using sh.exe from cygwin. (cygwin1.dll version 1.5.18-1) I will try to see if the latest cygwin (1.5.19-4) fixes the issue... ___ Reply to this item at: http://savannah.gnu.org/bugs/?func=detailitemitem_id=16132 ___ Message sent via/by Savannah http://savannah.gnu.org/ ___ Bug-make mailing list Bug-make@gnu.org http://lists.gnu.org/mailman/listinfo/bug-make
[bug #16140] make 3.81rc2: performance decrease when searching builtin implicit rules compared to 3.80
URL: http://savannah.gnu.org/bugs/?func=detailitemitem_id=16140 Summary: make 3.81rc2: performance decrease when searching builtin implicit rules compared to 3.80 Project: make Submitted by: None Submitted on: Di 21.03.2006 um 14:33 Severity: 3 - Normal Item Group: Enhancement Status: None Privacy: Public Assigned to: None Open/Closed: Open Component Version: CVS Platform Version: Any Fixed Release: None ___ Details: make 3.81rc2 shows a performance decrease of a factor 3 (at least in my case) compared to make 3.80 in the everything up to date case. This can be narrowed to the part searching the builtin implicit rules. Running 'make -r' (because the builtins are not necessary in my case) produces identical times for 3.80 and 3.81rc2. A significant amount of time is spent in set_file_variables() inside pattern_search() which has not been called in 3.80 before. OTOH, less time is spent in file_impossible_p() and file_exists_p() (see attached gprof reports). ___ File Attachments: --- Date: Di 21.03.2006 um 14:33 Name: gprof-reports.tar.gz Size: 21,19KB By: None gprof reports for make 3.80 and 3.81rc2 http://savannah.gnu.org/bugs/download.php?item_id=16140item_file_id=3511 ___ Reply to this item at: http://savannah.gnu.org/bugs/?func=detailitemitem_id=16140 ___ Nachricht geschickt von/durch Savannah http://savannah.gnu.org/ ___ Bug-make mailing list Bug-make@gnu.org http://lists.gnu.org/mailman/listinfo/bug-make
[bug #16132] Quoting problem in 3.81rc1
Follow-up Comment #4, bug #16132 (project make): Latest cygwin didn't help... ___ Reply to this item at: http://savannah.gnu.org/bugs/?func=detailitemitem_id=16132 ___ Message sent via/by Savannah http://savannah.gnu.org/ ___ Bug-make mailing list Bug-make@gnu.org http://lists.gnu.org/mailman/listinfo/bug-make
[bug #16132] Quoting problem in 3.81rc1
Follow-up Comment #5, bug #16132 (project make): Can you please remove the @ prefix from your echo commands, and then re-run your test. Show us the output make prints (which are the commands that it's sending to the shell) against the command you expect to be run and what actually gets invoked by the shell. Can you also try the latest rc2 version (ftp://alpha.gnu.org/gnu/make/make-3.81rc2.tar.gz)? There were some small Windows-related fixes in that version. ___ Reply to this item at: http://savannah.gnu.org/bugs/?func=detailitemitem_id=16132 ___ Message sent via/by Savannah http://savannah.gnu.org/ ___ Bug-make mailing list Bug-make@gnu.org http://lists.gnu.org/mailman/listinfo/bug-make
[bug #16132] Quoting problem in 3.81rc1
Follow-up Comment #6, bug #16132 (project make): Hi Paul, here it is: D:\GNUMake\testPATH PATH=C:\cygwin\bin;C:\WINDOWS;C:\WINDOWS\system32 D:\GNUMake\testgmake381rc2 --version GNU Make 3.81rc2 Copyright (C) 2006 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. This program built for Windows32 D:\GNUMake\testgmake381rc2 echo -aap=noot -aap=noot echo '-aap=noot' -aap=\noot echo -aap=\noot\ -aap=\noot echo -aap=noot -mies=wim -aap=noot -mies=wim echo '-aap=noot -mies=wim' -aap=noot -mies=wim echo -aap=\noot\ -mies=\wim\ -aap=\noot -mies=wim ___ Reply to this item at: http://savannah.gnu.org/bugs/?func=detailitemitem_id=16132 ___ Message sent via/by Savannah http://savannah.gnu.org/ ___ Bug-make mailing list Bug-make@gnu.org http://lists.gnu.org/mailman/listinfo/bug-make
[bug #16132] Quoting problem in 3.81rc1
Follow-up Comment #7, bug #16132 (project make): (And this is the makefile (with TABS of course:) BLA1 := -aap=noot BLA2 := '-aap=noot' BLA3 := -aap=\noot\ BLA4 := -aap=noot -mies=wim BLA5 := '-aap=noot -mies=wim' BLA6 := -aap=\noot\ -mies=\wim\ all: echo $(BLA1) echo $(BLA2) echo $(BLA3) echo $(BLA4) echo $(BLA5) echo $(BLA6) ___ Reply to this item at: http://savannah.gnu.org/bugs/?func=detailitemitem_id=16132 ___ Message sent via/by Savannah http://savannah.gnu.org/ ___ Bug-make mailing list Bug-make@gnu.org http://lists.gnu.org/mailman/listinfo/bug-make
[bug #16132] Quoting problem in 3.81rc1
Follow-up Comment #8, bug #16132 (project make): I also tried with #define HAVE_CYGWIN_SHELL in config.h but this gives the same result. Eli/Paul, can you suggest another sh.exe (instead of cygwin) that I could use/try ? ___ Reply to this item at: http://savannah.gnu.org/bugs/?func=detailitemitem_id=16132 ___ Message sent via/by Savannah http://savannah.gnu.org/ ___ Bug-make mailing list Bug-make@gnu.org http://lists.gnu.org/mailman/listinfo/bug-make
[bug #16132] Quoting problem in 3.81rc1
Follow-up Comment #10, bug #16132 (project make): Lastly, this is the result when no sh.exe is in PATH: D:\GNUMake\testPATH PATH=C:\WINDOWS;C:\WINDOWS\system32 D:\GNUMake\testgmake381rc2.exe echo -aap=noot -aap=noot echo '-aap=noot' '-aap=noot' echo -aap=\noot\ -aap=\noot\ echo -aap=noot -mies=wim -aap=noot -mies=wim echo '-aap=noot -mies=wim' '-aap=noot -mies=wim' echo -aap=\noot\ -mies=\wim\ -aap=\noot\ -mies=\wim\ So this seems to work correctly... ___ Reply to this item at: http://savannah.gnu.org/bugs/?func=detailitemitem_id=16132 ___ Message sent via/by Savannah http://savannah.gnu.org/ ___ Bug-make mailing list Bug-make@gnu.org http://lists.gnu.org/mailman/listinfo/bug-make
[bug #16145] .SECONDARY: prevents non-existent dependency from forcing rebuild
URL: http://savannah.gnu.org/bugs/?func=detailitemitem_id=16145 Summary: .SECONDARY: prevents non-existent dependency from forcing rebuild Project: make Submitted by: jayberkenbilt Submitted on: Tue 03/21/06 at 20:29 Severity: 3 - Normal Item Group: Bug Status: None Privacy: Public Assigned to: None Open/Closed: Open Component Version: CVS Platform Version: None Fixed Release: None ___ Details: This is with 3.81rc2 as checked out of CVS on March 21, 2006. With the following makefile: # -- ifdef BREAK_MAKE .SECONDARY: endif all: a.2 a.1: touch a.1 a.2: a.1 a.h a.h: %.2: %.1 touch $@ clean: rm a.1 a.2 # -- running make once causes a.1 and a.2 to be updated, and running make subsequently causes a.2 to be updated as expected because a.2 depends upon the non-existent a.h, and a.h has a target with no dependencies and no rules. (This is normal for automatically generated dependency files.) make -d -rR on a subsequent run shows the following output with 3.81rc2 (without BREAK_MAKE defined): GNU Make 3.81rc2 Copyright (C) 2006 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. This program built for i686-redhat-linux-gnu Reading makefiles... Reading makefile `/tmp/m'... Updating makefiles Considering target file `/tmp/m'. Looking for an implicit rule for `/tmp/m'. No implicit rule found for `/tmp/m'. Finished prerequisites of target file `/tmp/m'. No need to remake target `/tmp/m'. Updating goal targets Considering target file `all'. File `all' does not exist. Looking for an implicit rule for `all'. No implicit rule found for `all'. Considering target file `a.2'. Looking for an implicit rule for `a.2'. Trying pattern rule with stem `a'. Trying implicit prerequisite `a.1'. Found an implicit rule for `a.2'. Considering target file `a.1'. Finished prerequisites of target file `a.1'. No need to remake target `a.1'. Pruning file `a.1'. Considering target file `a.h'. File `a.h' does not exist. Looking for an implicit rule for `a.h'. No implicit rule found for `a.h'. Finished prerequisites of target file `a.h'. Must remake target `a.h'. Successfully remade target file `a.h'. Finished prerequisites of target file `a.2'. Prerequisite `a.1' is older than target `a.2'. Prerequisite `a.1' is older than target `a.2'. Prerequisite `a.h' of target `a.2' does not exist. Must remake target `a.2'. touch a.2 Putting child 0x096823f8 (a.2) PID 14360 on the chain. Live child 0x096823f8 (a.2) PID 14360 Reaping winning child 0x096823f8 PID 14360 Removing child 0x096823f8 PID 14360 from chain. Successfully remade target file `a.2'. Finished prerequisites of target file `all'. Must remake target `all'. Successfully remade target file `all'. The output is identical with 3.80 except for cosmetic differences. With BREAK_MAKE defined (i.e., an empty .SECONDARY: rule), the results are the same with 3.80, but 3.81rc2 (and 3.81rc1 as well) generate this with make -d -rR BREAK_MAKE=1: GNU Make 3.81rc2 Copyright (C) 2006 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. This program built for i686-redhat-linux-gnu Reading makefiles... Reading makefile `/tmp/m'... Updating makefiles Considering target file `/tmp/m'. Looking for an implicit rule for `/tmp/m'. No implicit rule found for `/tmp/m'. Finished prerequisites of target file `/tmp/m'. No need to remake target `/tmp/m'. Updating goal targets Considering target file `all'. File `all' does not exist. Looking for an implicit rule for `all'. No implicit rule found for `all'. Considering target file `a.2'. Looking for an implicit rule for `a.2'. Trying pattern rule with stem `a'. Trying implicit prerequisite `a.1'. Found an implicit rule for `a.2'. Considering target file `a.1'. Finished prerequisites of target file `a.1'. No need to remake target `a.1'. Pruning file `a.1'. Looking for an implicit rule for `a.h'. No implicit rule found for `a.h'. Finished prerequisites of target file `a.2'. Prerequisite `a.1' is older than target `a.2'. Prerequisite `a.1' is older than target `a.2'. Prerequisite `a.h' of target `a.2' does not exist. No need to remake target `a.2'. Finished prerequisites of target file `all'. Must remake target `all'. Successfully remade target file `all'. make: Nothing to be done for `all'. Observe that make recognizes that a.h does not exist, but then still
[bug #16132] Quoting problem in 3.81rc1
Follow-up Comment #11, bug #16132 (project make): The result without sh.exe is the expected one. So Make is working correctly, and the problem is is (in)compatibility with the Cygwin shell. When I need a Unixy shell, I use the old port of zsh. You should be able to find it on the net (sorry, I don't have a URL handy). It isn't ideal, since it has bugs that prevent it from running a typical configure script, but it works very well for Makefiles that expect a Unixy shell. ___ Reply to this item at: http://savannah.gnu.org/bugs/?func=detailitemitem_id=16132 ___ Message sent via/by Savannah http://savannah.gnu.org/ ___ Bug-make mailing list Bug-make@gnu.org http://lists.gnu.org/mailman/listinfo/bug-make
[bug #16140] make 3.81rc2: performance decrease when searching builtin implicit rules compared to 3.80
Update of bug #16140 (project make): Assigned to:None = bosk ___ Follow-up Comment #1: I took a quick look and it appears that we call set_file_variables even if none of the dependencies require it. I think we should call set_file_variables only after we see the first dependency that requires second expansion. Paul, is it ok with you if I fix this for 3.81? ___ Reply to this item at: http://savannah.gnu.org/bugs/?func=detailitemitem_id=16140 ___ Message sent via/by Savannah http://savannah.gnu.org/ ___ Bug-make mailing list Bug-make@gnu.org http://lists.gnu.org/mailman/listinfo/bug-make
[bug #16140] make 3.81rc2: performance decrease when searching builtin implicit rules compared to 3.80
Follow-up Comment #2, bug #16140 (project make): If it's a simple-enough change and doesn't cause problems with the regression tests it's fine with me to fix it. Do you have access to valgrind and/or gprof to check the performance etc.? ___ Reply to this item at: http://savannah.gnu.org/bugs/?func=detailitemitem_id=16140 ___ Message sent via/by Savannah http://savannah.gnu.org/ ___ Bug-make mailing list Bug-make@gnu.org http://lists.gnu.org/mailman/listinfo/bug-make
[bug #16145] .SECONDARY: prevents non-existent dependency from forcing rebuild
Follow-up Comment #1, bug #16145 (project make): I believe this is intended behavior as described in GNU make manual. See bug #15584 (starting from comment #6) for more information. In your case *all* targets are SECONDARY. The reason it worked differently in 3.80 is because this version does not handle .SECONDARY: without prereqs. This was fixed for 3.81. ___ Reply to this item at: http://savannah.gnu.org/bugs/?func=detailitemitem_id=16145 ___ Message sent via/by Savannah http://savannah.gnu.org/ ___ Bug-make mailing list Bug-make@gnu.org http://lists.gnu.org/mailman/listinfo/bug-make
[bug #16145] .SECONDARY: prevents non-existent dependency from forcing rebuild
Follow-up Comment #3, bug #16145 (project make): I think you have two choices, at least one of which should work :-). Either way I think you have to get the .SECONDARY: global target out of there. Anyway, you can do two things: first, you can mention all the files that would otherwise be considered intermediate and removed (which is what you're trying to avoid by using the global .SECONDARY:, right?) as prerequisites of a target. It doesn't take much at all to convince make that a target is not intermediate: _any_ mention of it will do the trick. You don't really show in your example why you want .SECONDARY: globally: none of the targets there would be considered intermediate anyway. But suppose you had some, you could create a new target which depended on the intermediate files. This target might even be USEFUL in some situations, if someone just wanted to build those files. The other thing you can do is change the global .SECONDARY: to a .SECONDARY with a list of just those items you want to be considered secondary... and hopefully that wouldn't include the foo.h ones :-/. This would solve the problem as well. I think to be more specific we'd need to understand why you needed global .SECONDARY: in the first place. ___ Reply to this item at: http://savannah.gnu.org/bugs/?func=detailitemitem_id=16145 ___ Message sent via/by Savannah http://savannah.gnu.org/ ___ Bug-make mailing list Bug-make@gnu.org http://lists.gnu.org/mailman/listinfo/bug-make
[bug #16145] .SECONDARY: prevents non-existent dependency from forcing rebuild
Follow-up Comment #4, bug #16145 (project make): Either of your proposed solutions will work fine for me, and the first one (mentioning things explicitly to prevent them from being removed) is what I've done for years and was doing until I decided that, after having been using gnu make for 10 years, it was time to reread the documentation all the way through see what new features had been introduced! I failed to realize that one of the side effects of a target being declared secondary is that make doesn't consider it out of date when it doesn't exist, but when I think about it, that's pretty obviously the correct behavior since otherwise every build would end up regenerating it if it disappeared. I can't convince you that I need a global .SECONDARY because I don't believe it myself now that I actually correctly understand what it does. :-) I generally prefer to have my intermediate targets stick around, but there are ways to make this happen, as you pointed out. Actually, I don't think my current build system has any implicit intermediate targets at the moment since it invokes make with -rR anyway, though I might have coded some chain of implicit rules at some point and forgotten about it. No matter though. Thanks for the prompt responses. I consider this issue resolved. Feel free to close it. ___ Reply to this item at: http://savannah.gnu.org/bugs/?func=detailitemitem_id=16145 ___ Message sent via/by Savannah http://savannah.gnu.org/ ___ Bug-make mailing list Bug-make@gnu.org http://lists.gnu.org/mailman/listinfo/bug-make
[bug #16145] .SECONDARY: prevents non-existent dependency from forcing rebuild
Update of bug #16145 (project make): Status:None = Not A Bug Open/Closed:Open = Closed ___ Follow-up Comment #5: Ok, closing as per request. Cheers! ___ Reply to this item at: http://savannah.gnu.org/bugs/?func=detailitemitem_id=16145 ___ Message sent via/by Savannah http://savannah.gnu.org/ ___ Bug-make mailing list Bug-make@gnu.org http://lists.gnu.org/mailman/listinfo/bug-make
[bug #16132] Quoting problem in 3.81rc1
Follow-up Comment #13, bug #16132 (project make): Did the OP build the previous versions of Make with the same compiler as the release candidate? If not, perhaps therein lies the reason for the difference, especially if the other versions are Cygwin ports (as opposed to to rc1 that was built with Microsoft Visual C). We did change the backslash handling, but only before the newline, and there are no such combinations in the Makefile presented here. I don't have the Cygwin shell installed on any of my machines, so I cannot test this myself. If the OP can debug this, I'm willing to provide guidance. ___ Reply to this item at: http://savannah.gnu.org/bugs/?func=detailitemitem_id=16132 ___ Message sent via/by Savannah http://savannah.gnu.org/ ___ Bug-make mailing list Bug-make@gnu.org http://lists.gnu.org/mailman/listinfo/bug-make