[bug #16132] Quoting problem in 3.81rc1

2006-03-21 Thread anonymous

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

2006-03-21 Thread anonymous

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

2006-03-21 Thread anonymous

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

2006-03-21 Thread Paul D. Smith

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

2006-03-21 Thread anonymous

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

2006-03-21 Thread anonymous

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

2006-03-21 Thread anonymous

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

2006-03-21 Thread anonymous

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

2006-03-21 Thread Jay Berkenbilt

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

2006-03-21 Thread Eli Zaretskii

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

2006-03-21 Thread Boris Kolpackov

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

2006-03-21 Thread Paul D. Smith

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

2006-03-21 Thread Boris Kolpackov

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

2006-03-21 Thread Paul D. Smith

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

2006-03-21 Thread Jay Berkenbilt

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

2006-03-21 Thread Paul D. Smith

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

2006-03-21 Thread Eli Zaretskii

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