No objection from me. -kto
On Nov 29, 2011, at 3:09 PM, Stuart Marks wrote: > Thanks Kelly (and David). > > Any objection if I were to push this into the TL forest? A test build on all > the platforms (including Windows) was successful. > > s'marks > > On 11/29/11 11:13 AM, Kelly O'Hair wrote: >> Looks fine to me. >> >> -kto >> >> On Nov 28, 2011, at 8:00 PM, Stuart Marks wrote: >> >>> >>> >>> On 11/28/11 7:00 PM, David Holmes wrote: >>>> On 29/11/2011 10:42 AM, Stuart Marks wrote: >>>>> Please review this change to add to the javac make rule some messages >>>>> about the number of files being compiled, the current working directory, >>>>> and a new message to demarcate the end of javac output. >>>>> >>>>> This will help capture and analyze javac output, in particular, warning >>>>> messages. >>>>> diff -r 6fbd69f8e3ab make/common/Rules.gmk >>>>> --- a/make/common/Rules.gmk Fri Nov 18 09:03:43 2011 +0000 >>>>> +++ b/make/common/Rules.gmk Mon Nov 28 16:34:34 2011 -0800 >>>>> @@ -236,9 +236,10 @@ >>>>> @if [ `$(CAT) $<.filtered | $(WC) -l` -ge 1 ] ; then \ >>>>> $(ECHO) "# Java sources to be compiled: (listed in file $<)"; \ >>>>> $(CAT) $<.filtered; \ >>>>> - $(ECHO) "# Running javac:"; \ >>>>> + $(ECHO) "# Running javac: `$(WC) -l< $<.filtered` files; in `pwd`"; \ >>>> >>>> Can we do this without running wc a second time? >>>> >>>> Also shouldn't the current working directory be known from when the current >>>> sub-dir is entered by make? >>> >>> We can store the result of wc in a shell variable, but it has to be part of >>> the same command as the if-statement that uses it, since successive lines >>> of a make rule are executed by different shells. I've done this; see below. >>> >>> The current directory can probably be deduced, but it's not as simple as >>> tracking the current subdirectory. Often the current directory is arrived >>> at after having left a subdirectory. For example, this rule is invoked >>> after this fragment of enter/leave messages from make have occurred: >>> >>> make[2]: Entering directory `/home/smarks/src/jdk8-jdk/make/java/java' >>> make[3]: Entering directory `/home/smarks/src/jdk8-jdk/make/java/nio' >>> make[3]: Leaving directory `/home/smarks/src/jdk8-jdk/make/java/nio' >>> >>> The current directory is now ..../make/java/java which isn't from the most >>> recent "Entering" message, nor is it the parent of the most recent >>> "Leaving" message. In this case make/java/java/Makefile calls a recursive >>> make in ../nio! So, a script would have to track all the enter/leave >>> messages and keep a stack of directories entered and left in order to >>> determine the current one. I could enhance the parsing scripts to do this, >>> but it seems complex and error-prone. >>> >>> If you're concerned about build performance, it *might* save a fork to >>> replace a call to `pwd` with a make variable reference to $(CURDIR). The wc >>> refactoring also saves a fork of the cat command. (Though I admit I don't >>> know whether these actually speed things up or whether any change is >>> measurable.) >>> >>> Revised diff below. Note that I've indented the entire if-statement as well >>> as its contents, which is why so many more lines are changed. >>> >>> s'marks >>> >>> >>> >>> diff -r 6fbd69f8e3ab make/common/Rules.gmk >>> --- a/make/common/Rules.gmk Fri Nov 18 09:03:43 2011 +0000 >>> +++ b/make/common/Rules.gmk Mon Nov 28 19:40:34 2011 -0800 >>> @@ -233,13 +233,15 @@ >>> @$(MKDIR) -p $(CLASSDESTDIR) >>> @$(RM) $<.filtered >>> @$(CAT) $< | $(NAWK) 'length>0' | $(SORT) -u> $<.filtered >>> - @if [ `$(CAT) $<.filtered | $(WC) -l` -ge 1 ] ; then \ >>> - $(ECHO) "# Java sources to be compiled: (listed in file $<)"; \ >>> - $(CAT) $<.filtered; \ >>> - $(ECHO) "# Running javac:"; \ >>> - $(ECHO) $(JAVAC_CMD) -sourcepath "$(SOURCEPATH)" -d >>> $(CLASSDESTDIR) @$<.filtered; \ >>> - $(JAVAC_CMD) -sourcepath "$(SOURCEPATH)" -d $(CLASSDESTDIR) >>> @$<.filtered; \ >>> - fi >>> + @numfiles=`$(WC) -l< $<.filtered` ; \ >>> + if [ $$numfiles -ge 1 ] ; then \ >>> + $(ECHO) "# Java sources to be compiled: (listed in file $<)"; \ >>> + $(CAT) $<.filtered; \ >>> + $(ECHO) "# Running javac: $$numfiles files; in $(CURDIR)"; \ >>> + $(ECHO) $(JAVAC_CMD) -sourcepath "$(SOURCEPATH)" -d >>> $(CLASSDESTDIR) @$<.filtered; \ >>> + $(JAVAC_CMD) -sourcepath "$(SOURCEPATH)" -d $(CLASSDESTDIR) >>> @$<.filtered; \ >>> + $(ECHO) "# javac finished"; \ >>> + fi >>> @$(java-vm-cleanup) >>> >>> clobber clean:: >>