Closed Bug 908977 Opened 11 years ago Closed 11 years ago

Build system can't detect xpidl additions or deletions

Categories

(Firefox Build System :: General, defect)

x86_64
All
defect
Not set
critical

Tracking

(Not tracked)

RESOLVED FIXED
mozilla26

People

(Reporter: emk, Assigned: gps)

References

Details

Attachments

(7 files)

Steps to reproduce:
1. Pull https://hg.mozilla.org/mozilla-central/rev/17143a9a0d83
2. mach clobber && mach build (took 87:58.82 on my machine)
3. Apply the attached patch (attachment 792456 [details] [diff] [review] with rebased to the latest trunk).
4. mach build (took 16:37.80)
   Linking xul.dll failed with the following error:
16:37.55 HTMLAnchorElementBinding.obj : error LNK2005: "public: void __thiscall
mozilla::dom::HTMLAnchorElement::SetText(class nsAString_internal const &,class
mozilla::ErrorResult &)" (?SetText@HTMLAnchorElement@dom@mozilla@@QAEXABVnsAStri
ng_internal@@AAVErrorResult@3@@Z) は既に HTMLAnchorElement.obj で定義されていま
す。
5. mach clobber && mach build (took 92:16.11)
   Build succeeded.
6. Unapply the patch.
7. mach build (took 4:52.20)
   Build failed with the following error:
 0:01.42 C:/mozilla-build/msys/bin/sh.exe -c c:/mozilla-build/python/python.exe
h:/m/mozilla-central/build/pymake/make.py -f client.mk -s
 0:04.23 TEST-PASS | check-sync-dirs.py | h:\m\mozilla-central\js\src\config <=
h:\m\mozilla-central\config
 0:06.06 Build configuration changed. Regenerating backend.
 0:16.29 Reticulating splines...
 0:16.29 Finished reading 1204 moz.build files into 3476 descriptors in 2.96s
 0:16.29 Backend executed in 5.99s
 0:16.29 2407 total backend files. 0 created; 4 updated; 2411 unchanged
 0:16.29 Total wall time: 9.65s; CPU time: 9.65s; Efficiency: 100%
 3:58.65 Purging unaccounted files from object directory...
 3:58.65 Deleted 3463 files and 264 directories from dist/bin.
 3:58.65 Deleted 1012 files and 51 directories from dist/include.
 3:58.65 Deleted 157 files and 2 directories from dist/private.
 3:58.65 Deleted 0 files and 0 directories from dist/public.
 3:58.65 Deleted 33 files and 2 directories from dist/sdk.
 3:58.65 Deleted 15257 files and 580 directories from _tests.
 3:58.65 Deleted 0 files and 0 directories from config/makefiles/xpidl.
 3:58.65 Finished purging.
 4:48.83 From ../../../dist/idl: Kept 1157 existing; Added/updated 1; Removed 0
files and 0 directories.
 4:51.59 No rule to make target 'h:/m/mozilla-central/xpcom/typelib/xpt/tools/xp
t.py:' needed by ['<command-line>', 'h:/m/mozilla-central/xpcom/typelib/xpt/tool
s/xpt.py:']
 4:51.98 Traceback (most recent call last):
 4:51.98   File "h:/m/mozilla-central/config/nsinstall.py", line 180, in <module
>
 4:51.98     sys.exit(_nsinstall_internal(argv[1:]))
 4:51.99   File "h:/m/mozilla-central/config/nsinstall.py", line 145, in _nsinst
all_internal
 4:51.99     copy_all_entries(args, target)
 4:51.99   File "h:/m/mozilla-central/config/nsinstall.py", line 106, in copy_al
l_entries
 4:51.99     handleTarget(e, dest)
 4:51.99   File "h:/m/mozilla-central/config/nsinstall.py", line 133, in handleT
arget
 4:51.99     shutil.copy2(srcpath, targetpath)
 4:51.99   File "c:\mozilla-build\python\Lib\shutil.py", line 130, in copy2
 4:51.99     copyfile(src, dst)
 4:51.99   File "c:\mozilla-build\python\Lib\shutil.py", line 82, in copyfile
 4:51.99     with open(src, 'rb') as fsrc:
 4:51.99 IOError: [Errno 2] No such file or directory: u'h:\\m\\mozilla-central\
\obj-i686-pc-mingw32\\config\\makefiles\\xpidl\\headers\\nsIDOMHTMLAnchorElement
.h'
 4:51.99 h:\m\mozilla-central\obj-i686-pc-mingw32\config\makefiles\xpidl\Makefil
e:1092:0: command 'h:/m/mozilla-central/obj-i686-pc-mingw32/_virtualenv/Scripts/
python.exe h:/m/mozilla-central/config/nsinstall.py -t headers/nsIDOMHTMLAnchorE
lement.h ../../../dist/include' failed, return code 1
 4:51.99 <xpidl>: Found error
 4:51.99 h:\m\mozilla-central\obj-i686-pc-mingw32\config\makefiles\precompile\Ma
kefile:44:0: command 'c:/mozilla-build/python/python.exe h:/m/mozilla-central/bu
ild/pymake/pymake/../make.py -C ../../../config/makefiles/xpidl xpidl' failed, r
eturn code 2
 4:51.99 <export>: Found error
 4:51.99 h:\m\mozilla-central\obj-i686-pc-mingw32\config\makefiles\precompile\Ma
kefile:29:0: command 'c:/mozilla-build/python/python.exe h:/m/mozilla-central/bu
ild/pymake/pymake/../make.py export' failed, return code 2
 4:51.99 evaluation from h:\m\mozilla-central\obj-i686-pc-mingw32\Makefile:108:2
4:3:0: command 'c:/mozilla-build/python/python.exe h:/m/mozilla-central/build/py
make/pymake/../make.py -C config/makefiles/precompile ' failed, return code 2
 4:51.99 h:\m\mozilla-central\obj-i686-pc-mingw32\Makefile:105:0: command 'c:/mo
zilla-build/python/python.exe h:/m/mozilla-central/build/pymake/pymake/../make.p
y  tier_precompile' failed, return code 2
 4:52.00 h:\m\mozilla-central\client.mk:372:0: command 'c:/mozilla-build/python/
python.exe h:/m/mozilla-central/build/pymake/pymake/../make.py -j4 -C obj-i686-p
c-mingw32' failed, return code 2
 4:52.00 h:\m\mozilla-central\client.mk:172:0: command 'c:/mozilla-build/python/
python.exe h:/m/mozilla-central/build/pymake/pymake/../make.py -f h:/m/mozilla-c
entral/client.mk realbuild' failed, return code 2
 4:52.20 944 compiler warnings present.
2

I had to mach clobber to work around the problem (and wasting another 90 minutes).
Thank you very much for disturbing my work over and over!
Patch works fine on Linux (and presumably OS X). Will verify with Windows once I have a build.
Although after popping that patch and rebuilding, I got:

 0:00.43 Build configuration changed. Regenerating backend.
 0:00.54 Reticulating splines...
 0:03.07 Finished reading 1182 moz.build files into 3421 descriptors in 0.44s
 0:03.07 Backend executed in 1.49s
 0:03.07 2363 total backend files. 0 created; 4 updated; 2367 unchanged
 0:03.07 Total wall time: 2.53s; CPU time: 2.53s; Efficiency: 100%
 0:04.98 Purging unaccounted files from object directory...
 0:04.98 Deleted 365 files and 20 directories from dist/bin.
 0:04.98 Deleted 1006 files and 48 directories from dist/include.
 0:04.98 Deleted 155 files and 2 directories from dist/private.
 0:04.98 Deleted 0 files and 0 directories from dist/public.
 0:04.98 Deleted 28 files and 2 directories from dist/sdk.
 0:04.98 Deleted 4804 files and 191 directories from _tests.
 0:04.98 Deleted 0 files and 0 directories from config/makefiles/xpidl.
 0:04.98 Finished purging.
 0:07.92 From ../../../dist/idl: Kept 1142 existing; Added/updated 1; Removed 0 files and 0 directories.
 0:07.99 /home/gps/src/firefox/obj-firefox/config/nsinstall: cannot access headers/nsIDOMHTMLAnchorElement.h: No such file or directory
 0:08.00 gmake[6]: *** [../../../dist/include/nsIDOMHTMLAnchorElement.h] Error 1
 0:08.00 gmake[5]: *** [xpidl] Error 2
 0:08.00 gmake[5]: *** Waiting for unfinished jobs....
 0:08.67 gmake[4]: *** [default] Error 2
 0:08.67 gmake[3]: *** [tier_precompile] Error 2
The first reference of nsIDOMHTMLAnchorElement.h during debug output:

  Considering target file `../../../dist/include/nsIDOMHTMLAnchorElement.h'.
   File `../../../dist/include/nsIDOMHTMLAnchorElement.h' does not exist.
    Considering target file `headers/nsIDOMHTMLAnchorElement.h'.
     File `headers/nsIDOMHTMLAnchorElement.h' does not exist.
     Looking for an implicit rule for `headers/nsIDOMHTMLAnchorElement.h'.
     No implicit rule found for `headers/nsIDOMHTMLAnchorElement.h'.
      Pruning file `xpt/dom_html.xpt'.
     Finished prerequisites of target file `headers/nsIDOMHTMLAnchorElement.h'.
    Must remake target `headers/nsIDOMHTMLAnchorElement.h'.
    Successfully remade target file `headers/nsIDOMHTMLAnchorElement.h'.
   Finished prerequisites of target file `../../../dist/include/nsIDOMHTMLAnchorElement.h'.
  Must remake target `../../../dist/include/nsIDOMHTMLAnchorElement.h'.
make: Entering directory `/home/gps/src/firefox/obj-firefox/config/makefiles/xpidl'
/home/gps/src/firefox/obj-firefox/config/nsinstall -R headers/nsIDOMHTMLAnchorElement.h ../../../dist/include

The autogenerated make file has the following:

$(idl_xpt_dir)/dom_html.xpt:
	@echo "$(notdir $@)"
	$(idlprocess) $(basename $(notdir $@)) nsIDOMHTMLAnchorElement nsIDOMHTMLAppletElement nsIDOMHTMLAreaElement nsIDOMHTMLAudioElement nsIDOMHTMLBRElement nsIDOMHTMLBaseElement nsIDOMHTMLBodyElement nsIDOMHTMLButtonElement nsIDOMHTMLByteRanges nsIDOMHTMLCanvasElement nsIDOMHTMLCollection nsIDOMHTMLDirectoryElement nsIDOMHTMLDivElement nsIDOMHTMLDocument nsIDOMHTMLElement nsIDOMHTMLEmbedElement nsIDOMHTMLFieldSetElement nsIDOMHTMLFormElement nsIDOMHTMLFrameElement nsIDOMHTMLFrameSetElement nsIDOMHTMLHRElement nsIDOMHTMLHeadElement nsIDOMHTMLHeadingElement nsIDOMHTMLHtmlElement nsIDOMHTMLIFrameElement nsIDOMHTMLImageElement nsIDOMHTMLInputElement nsIDOMHTMLLIElement nsIDOMHTMLLabelElement nsIDOMHTMLLinkElement nsIDOMHTMLMapElement nsIDOMHTMLMediaElement nsIDOMHTMLMenuElement nsIDOMHTMLMenuItemElement nsIDOMHTMLMetaElement nsIDOMHTMLOListElement nsIDOMHTMLObjectElement nsIDOMHTMLOptGroupElement nsIDOMHTMLOptionElement nsIDOMHTMLOptionsCollection nsIDOMHTMLParagraphElement nsIDOMHTMLPreElement nsIDOMHTMLQuoteElement nsIDOMHTMLScriptElement nsIDOMHTMLSelectElement nsIDOMHTMLSourceElement nsIDOMHTMLStyleElement nsIDOMHTMLTableCaptionElem nsIDOMHTMLTableCellElement nsIDOMHTMLTableElement nsIDOMHTMLTextAreaElement nsIDOMHTMLTitleElement nsIDOMHTMLUListElement nsIDOMHTMLVideoElement nsIDOMMediaError nsIDOMMozBrowserFrame nsIDOMTimeRanges nsIDOMValidityState nsIMozBrowserFrame

$(idl_headers_dir)/nsIDOMHTMLAnchorElement.h $(idl_headers_dir)/nsIDOMHTMLAppletElement.h $(idl_headers_dir)/nsIDOMHTMLAreaElement.h $(idl_headers_dir)/nsIDOMHTMLAudioElement.h $(idl_headers_dir)/nsIDOMHTMLBRElement.h $(idl_headers_dir)/nsIDOMHTMLBaseElement.h $(idl_headers_dir)/nsIDOMHTMLBodyElement.h $(idl_headers_dir)/nsIDOMHTMLButtonElement.h $(idl_headers_dir)/nsIDOMHTMLByteRanges.h $(idl_headers_dir)/nsIDOMHTMLCanvasElement.h $(idl_headers_dir)/nsIDOMHTMLCollection.h $(idl_headers_dir)/nsIDOMHTMLDirectoryElement.h $(idl_headers_dir)/nsIDOMHTMLDivElement.h $(idl_headers_dir)/nsIDOMHTMLDocument.h $(idl_headers_dir)/nsIDOMHTMLElement.h $(idl_headers_dir)/nsIDOMHTMLEmbedElement.h $(idl_headers_dir)/nsIDOMHTMLFieldSetElement.h $(idl_headers_dir)/nsIDOMHTMLFormElement.h $(idl_headers_dir)/nsIDOMHTMLFrameElement.h $(idl_headers_dir)/nsIDOMHTMLFrameSetElement.h $(idl_headers_dir)/nsIDOMHTMLHRElement.h $(idl_headers_dir)/nsIDOMHTMLHeadElement.h $(idl_headers_dir)/nsIDOMHTMLHeadingElement.h $(idl_headers_dir)/nsIDOMHTMLHtmlElement.h $(idl_headers_dir)/nsIDOMHTMLIFrameElement.h $(idl_headers_dir)/nsIDOMHTMLImageElement.h $(idl_headers_dir)/nsIDOMHTMLInputElement.h $(idl_headers_dir)/nsIDOMHTMLLIElement.h $(idl_headers_dir)/nsIDOMHTMLLabelElement.h $(idl_headers_dir)/nsIDOMHTMLLinkElement.h $(idl_headers_dir)/nsIDOMHTMLMapElement.h $(idl_headers_dir)/nsIDOMHTMLMediaElement.h $(idl_headers_dir)/nsIDOMHTMLMenuElement.h $(idl_headers_dir)/nsIDOMHTMLMenuItemElement.h $(idl_headers_dir)/nsIDOMHTMLMetaElement.h $(idl_headers_dir)/nsIDOMHTMLOListElement.h $(idl_headers_dir)/nsIDOMHTMLObjectElement.h $(idl_headers_dir)/nsIDOMHTMLOptGroupElement.h $(idl_headers_dir)/nsIDOMHTMLOptionElement.h $(idl_headers_dir)/nsIDOMHTMLOptionsCollection.h $(idl_headers_dir)/nsIDOMHTMLParagraphElement.h $(idl_headers_dir)/nsIDOMHTMLPreElement.h $(idl_headers_dir)/nsIDOMHTMLQuoteElement.h $(idl_headers_dir)/nsIDOMHTMLScriptElement.h $(idl_headers_dir)/nsIDOMHTMLSelectElement.h $(idl_headers_dir)/nsIDOMHTMLSourceElement.h $(idl_headers_dir)/nsIDOMHTMLStyleElement.h $(idl_headers_dir)/nsIDOMHTMLTableCaptionElem.h $(idl_headers_dir)/nsIDOMHTMLTableCellElement.h $(idl_headers_dir)/nsIDOMHTMLTableElement.h $(idl_headers_dir)/nsIDOMHTMLTextAreaElement.h $(idl_headers_dir)/nsIDOMHTMLTitleElement.h $(idl_headers_dir)/nsIDOMHTMLUListElement.h $(idl_headers_dir)/nsIDOMHTMLVideoElement.h $(idl_headers_dir)/nsIDOMMediaError.h $(idl_headers_dir)/nsIDOMMozBrowserFrame.h $(idl_headers_dir)/nsIDOMTimeRanges.h $(idl_headers_dir)/nsIDOMValidityState.h $(idl_headers_dir)/nsIMozBrowserFrame.h: $(idl_xpt_dir)/dom_html.xpt

dom_html.xpt is examined earlier in the evaluation. Make thinks dom_html.xpt is up to date, so it's pruning it. Ugh.
I switched the main target to just be $(dist_headers). Debug output shows make is looking at things in the proper order:

  Considering target file `../../../dist/include/nsIDOMHTMLAnchorElement.h'.
   File `../../../dist/include/nsIDOMHTMLAnchorElement.h' does not exist.
    Considering target file `headers/nsIDOMHTMLAnchorElement.h'.
     File `headers/nsIDOMHTMLAnchorElement.h' does not exist.
     Looking for an implicit rule for `headers/nsIDOMHTMLAnchorElement.h'.
     No implicit rule found for `headers/nsIDOMHTMLAnchorElement.h'.
      Considering target file `xpt/dom_html.xpt'.
        Pruning file `../../../dist/idl/domstubs.idl'.
        Pruning file `../../../dist/idl/nsIDOMDocument.idl'.
        Pruning file `../../../dist/idl/nsIDOMElement.idl'.
        Considering target file `../../../dist/idl/nsIDOMHTMLAppletElement.idl'.
         Looking for an implicit rule for `../../../dist/idl/nsIDOMHTMLAppletElement.idl'.
         No implicit rule found for `../../../dist/idl/nsIDOMHTMLAppletElement.idl'.
         Finished prerequisites of target file `../../../dist/idl/nsIDOMHTMLAppletElement.idl'.
        No commands for `../../../dist/idl/nsIDOMHTMLAppletElement.idl' and no prerequisites actually changed.
        No need to remake target `../../../dist/idl/nsIDOMHTMLAppletElement.idl'.
.
.
.
        Pruning file `../../../dist/idl/nsISupports.idl'.
        Pruning file `../../../dist/idl/nsIVariant.idl'.
        Pruning file `../../../dist/idl/nsrootidl.idl'.
       Pruning file `xpt/.mkdir.done'.
       Finished prerequisites of target file `xpt/dom_html.xpt'.
       Prerequisite `../../../dist/idl/domstubs.idl' is older than target `xpt/dom_html.xpt'.
       Prerequisite `../../../dist/idl/nsIDOMDocument.idl' is older than target `xpt/dom_html.xpt'.
       Prerequisite `../../../dist/idl/nsIDOMElement.idl' is older than target `xpt/dom_html.xpt'.
       Prerequisite `../../../dist/idl/nsIDOMHTMLAppletElement.idl' is older than target `xpt/dom_html.xpt'.
       Prerequisite `xpt/.mkdir.done' is older than target `xpt/dom_html.xpt'.
      No need to remake target `xpt/dom_html.xpt'.
     Finished prerequisites of target file `headers/nsIDOMHTMLAnchorElement.h'.
    Must remake target `headers/nsIDOMHTMLAnchorElement.h'.
    Successfully remade target file `headers/nsIDOMHTMLAnchorElement.h'.
   Finished prerequisites of target file `../../../dist/include/nsIDOMHTMLAnchorElement.h'.
  Must remake target `../../../dist/include/nsIDOMHTMLAnchorElement.h'.
make[1]: Entering directory `/home/gps/src/firefox/obj-firefox/config/makefiles/xpidl'
/home/gps/src/firefox/obj-firefox/config/nsinstall -R headers/nsIDOMHTMLAnchorElement.h ../../../dist/include

Notably absent from that debug output is references to nsIDOMHTMLAnchorElement. The reason: the autogenerated .pp file from the revision without nsIDOMHTMLAnchorElement doesn't reference it (obviously).
Here is the log after applying the patch that broke the build:

$ ../build/pymake/make.py -C config/makefiles/precompile xpidl
make.py[0]: Entering directory 'c:\dev\src\mozilla-central\obj-ff\config/makefil
es/precompile'
Build configuration changed. Regenerating backend.
Reticulating splines...
Finished reading 1181 moz.build files into 3433 descriptors in 0.64s
Backend executed in 1.53s
2361 total backend files. 0 created; 4 updated; 2365 unchanged
Total wall time: 2.68s; CPU time: 2.68s; Efficiency: 100%
make.py[1]: Entering directory 'c:\dev\src\mozilla-central\obj-ff\config\makefil
es\precompile\../../../xpcom/idl-parser'
make.py[1]: Leaving directory 'c:\dev\src\mozilla-central\obj-ff\config\makefile
s\precompile\../../../xpcom/idl-parser'
c:\dev\src\mozilla-central\obj-ff\config\makefiles\precompile\Makefile:43:0$ c:/
dev/src/mozilla-central/obj-ff/_virtualenv/Scripts/python.exe -m mozbuild.action
.process_install_manifest ../../../dist/idl ../../../_build_manifests/install/di
st_idl
From ../../../dist/idl: Kept 1153 existing; Added/updated 1; Removed 1 files and
 0 directories.
make.py[1]: Entering directory 'c:\dev\src\mozilla-central\obj-ff\config\makefil
es\precompile\../../../config/makefiles/xpidl'
No rule to make target 'c:/dev/src/mozilla-central/xpcom/typelib/xpt/tools/xpt.p
y:' needed by ['<command-line>', 'c:/dev/src/mozilla-central/xpcom/typelib/xpt/t
ools/xpt.py:']
dom_html.xpt
c:\dev\src\mozilla-central\obj-ff\config\makefiles\xpidl\Makefile:314:0$ c:/dev/
src/mozilla-central/obj-ff/_virtualenv/Scripts/python.exe c:/dev/src/mozilla-cen
tral/config/pythonpath.py -Ic:/dev/src/mozilla-central/other-licenses/ply -Ic:/d
ev/src/mozilla-central/xpcom/idl-parser -I../../../xpcom/idl-parser c:/dev/src/m
ozilla-central/python/mozbuild/mozbuild/action/xpidl-process.py --cache-dir ../.
./../xpcom/idl-parser ../../../dist/idl headers xpt .deps dom_html nsIDOMHTMLApp
letElement nsIDOMHTMLAreaElement nsIDOMHTMLAudioElement nsIDOMHTMLBRElement nsID
OMHTMLBaseElement nsIDOMHTMLBodyElement nsIDOMHTMLButtonElement nsIDOMHTMLByteRa
nges nsIDOMHTMLCanvasElement nsIDOMHTMLCollection nsIDOMHTMLDirectoryElement nsI
DOMHTMLDivElement nsIDOMHTMLDocument nsIDOMHTMLElement nsIDOMHTMLEmbedElement ns
IDOMHTMLFieldSetElement nsIDOMHTMLFormElement nsIDOMHTMLFrameElement nsIDOMHTMLF
rameSetElement nsIDOMHTMLHRElement nsIDOMHTMLHeadElement nsIDOMHTMLHeadingElemen
t nsIDOMHTMLHtmlElement nsIDOMHTMLIFrameElement nsIDOMHTMLImageElement nsIDOMHTM
LInputElement nsIDOMHTMLLIElement nsIDOMHTMLLabelElement nsIDOMHTMLLinkElement n
sIDOMHTMLMapElement nsIDOMHTMLMediaElement nsIDOMHTMLMenuElement nsIDOMHTMLMenuI
temElement nsIDOMHTMLMetaElement nsIDOMHTMLOListElement nsIDOMHTMLObjectElement
nsIDOMHTMLOptGroupElement nsIDOMHTMLOptionElement nsIDOMHTMLOptionsCollection ns
IDOMHTMLParagraphElement nsIDOMHTMLPreElement nsIDOMHTMLQuoteElement nsIDOMHTMLS
criptElement nsIDOMHTMLSelectElement nsIDOMHTMLSourceElement nsIDOMHTMLStyleElem
ent nsIDOMHTMLTableCaptionElem nsIDOMHTMLTableCellElement nsIDOMHTMLTableElement
 nsIDOMHTMLTextAreaElement nsIDOMHTMLTitleElement nsIDOMHTMLUListElement nsIDOMH
TMLVideoElement nsIDOMMediaError nsIDOMMozBrowserFrame nsIDOMTimeRanges nsIDOMVa
lidityState nsIMozBrowserFrame
c:\dev\src\mozilla-central\obj-ff\config\makefiles\xpidl\Makefile:1086:0$ c:/dev
/src/mozilla-central/obj-ff/_virtualenv/Scripts/python.exe c:/dev/src/mozilla-ce
ntral/config/nsinstall.py -t headers/inIDOMView.h ../../../dist/include
make.py[1]: Leaving directory 'c:\dev\src\mozilla-central\obj-ff\config\makefile
s\precompile\../../../config/makefiles/xpidl'
make.py[0]: Leaving directory 'c:\dev\src\mozilla-central\obj-ff\config/makefile
s/precompile'

It seems to be doing the right things in xpt land.

With the just-submitted patch applied and the offending patch popped, the log is:

$ ../build/pymake/make.py -C config/makefiles/precompile xpidl
make.py[0]: Entering directory 'c:\dev\src\mozilla-central\obj-ff\config/makefil
es/precompile'
Build configuration changed. Regenerating backend.
Reticulating splines...
Finished reading 1181 moz.build files into 3433 descriptors in 0.64s
Backend executed in 1.53s
2361 total backend files. 0 created; 4 updated; 2365 unchanged
Total wall time: 2.68s; CPU time: 2.68s; Efficiency: 100%
make.py[1]: Entering directory 'c:\dev\src\mozilla-central\obj-ff\config\makefil
es\precompile\../../../xpcom/idl-parser'
make.py[1]: Leaving directory 'c:\dev\src\mozilla-central\obj-ff\config\makefile
s\precompile\../../../xpcom/idl-parser'
c:\dev\src\mozilla-central\obj-ff\config\makefiles\precompile\Makefile:43:0$ c:/
dev/src/mozilla-central/obj-ff/_virtualenv/Scripts/python.exe -m mozbuild.action
.process_install_manifest ../../../dist/idl ../../../_build_manifests/install/di
st_idl
From ../../../dist/idl: Kept 1153 existing; Added/updated 1; Removed 1 files and
 0 directories.
make.py[1]: Entering directory 'c:\dev\src\mozilla-central\obj-ff\config\makefil
es\precompile\../../../config/makefiles/xpidl'
No rule to make target 'c:/dev/src/mozilla-central/xpcom/typelib/xpt/tools/xpt.p
y:' needed by ['<command-line>', 'c:/dev/src/mozilla-central/xpcom/typelib/xpt/t
ools/xpt.py:']
dom_html.xpt
c:\dev\src\mozilla-central\obj-ff\config\makefiles\xpidl\Makefile:314:0$ c:/dev/
src/mozilla-central/obj-ff/_virtualenv/Scripts/python.exe c:/dev/src/mozilla-cen
tral/config/pythonpath.py -Ic:/dev/src/mozilla-central/other-licenses/ply -Ic:/d
ev/src/mozilla-central/xpcom/idl-parser -I../../../xpcom/idl-parser c:/dev/src/m
ozilla-central/python/mozbuild/mozbuild/action/xpidl-process.py --cache-dir ../.
./../xpcom/idl-parser ../../../dist/idl headers xpt .deps dom_html nsIDOMHTMLApp
letElement nsIDOMHTMLAreaElement nsIDOMHTMLAudioElement nsIDOMHTMLBRElement nsID
OMHTMLBaseElement nsIDOMHTMLBodyElement nsIDOMHTMLButtonElement nsIDOMHTMLByteRa
nges nsIDOMHTMLCanvasElement nsIDOMHTMLCollection nsIDOMHTMLDirectoryElement nsI
DOMHTMLDivElement nsIDOMHTMLDocument nsIDOMHTMLElement nsIDOMHTMLEmbedElement ns
IDOMHTMLFieldSetElement nsIDOMHTMLFormElement nsIDOMHTMLFrameElement nsIDOMHTMLF
rameSetElement nsIDOMHTMLHRElement nsIDOMHTMLHeadElement nsIDOMHTMLHeadingElemen
t nsIDOMHTMLHtmlElement nsIDOMHTMLIFrameElement nsIDOMHTMLImageElement nsIDOMHTM
LInputElement nsIDOMHTMLLIElement nsIDOMHTMLLabelElement nsIDOMHTMLLinkElement n
sIDOMHTMLMapElement nsIDOMHTMLMediaElement nsIDOMHTMLMenuElement nsIDOMHTMLMenuI
temElement nsIDOMHTMLMetaElement nsIDOMHTMLOListElement nsIDOMHTMLObjectElement
nsIDOMHTMLOptGroupElement nsIDOMHTMLOptionElement nsIDOMHTMLOptionsCollection ns
IDOMHTMLParagraphElement nsIDOMHTMLPreElement nsIDOMHTMLQuoteElement nsIDOMHTMLS
criptElement nsIDOMHTMLSelectElement nsIDOMHTMLSourceElement nsIDOMHTMLStyleElem
ent nsIDOMHTMLTableCaptionElem nsIDOMHTMLTableCellElement nsIDOMHTMLTableElement
 nsIDOMHTMLTextAreaElement nsIDOMHTMLTitleElement nsIDOMHTMLUListElement nsIDOMH
TMLVideoElement nsIDOMMediaError nsIDOMMozBrowserFrame nsIDOMTimeRanges nsIDOMVa
lidityState nsIMozBrowserFrame
c:\dev\src\mozilla-central\obj-ff\config\makefiles\xpidl\Makefile:1086:0$ c:/dev
/src/mozilla-central/obj-ff/_virtualenv/Scripts/python.exe c:/dev/src/mozilla-ce
ntral/config/nsinstall.py -t headers/inIDOMView.h ../../../dist/include
make.py[1]: Leaving directory 'c:\dev\src\mozilla-central\obj-ff\config\makefile
s\precompile\../../../config/makefiles/xpidl'
make.py[0]: Leaving directory 'c:\dev\src\mozilla-central\obj-ff\config/makefile
s/precompile'

This looks right to me.
(In reply to Masatoshi Kimura [:emk] from comment #0)
> 5. mach clobber && mach build (took 92:16.11)

Most build times in this range are from only having 2 physical cores in your machine. With the amount of C++ in our tree, your clobber times won't be much better until you throw more cores at builds. I highly recommend you upgrade to 4+ physical cores if possible.
Feedback for https://bugzilla.mozilla.org/page.cgi?id=splinter.html&bug=908777&attachment=795008 (attached to the wrong bug):

This feels like the wrong fix. These dependencies (and more) are already in the generated .pp files.
This bug is very painful. If we are not going to have a fix very soon then we should back out the changes in bug 850380. The build system must work correctly.
Severity: normal → critical
OS: Windows 8 → All
(In reply to Gregory Szorc [:gps] from comment #6)
> Most build times in this range are from only having 2 physical cores in your
> machine. With the amount of C++ in our tree, your clobber times won't be
> much better until you throw more cores at builds. I highly recommend you
> upgrade to 4+ physical cores if possible.

Are you saying this is my poor hardware's fault? Thanks for the very helpful advice!
Then tbpl should always clobber so that the dumb build system don't have to care about what files are updated.
Uploading to proper bug and with inline comment explaining why we do
things like this.

If you don't like this solution, please suggest another one. The only
other solutions that come to mind involve touching files during
config.status. Not sure if we want to pursue that.
Attachment #795226 - Flags: review?(mh+mozilla)
Assignee: nobody → gps
Status: NEW → ASSIGNED
While we're here, this is needed to make partial tree builds work. We
can't go through the xpidl make file because the precompile make
file/target does install manifest work.
Attachment #795227 - Flags: review?(mh+mozilla)
(In reply to Brian Smith (:briansmith, was :bsmith@mozilla.com) from comment #9)
> This bug is very painful. If we are not going to have a fix very soon then
> we should back out the changes in bug 850380. The build system must work
> correctly.

Yes, I know. If you look at the timeline, I investigated this minutes after it was filed and had a patch uploaded that night - a Friday night at that! I uploaded the patch to the wrong bug and was AFK most of the weekend, so that was suboptimal. But I'm on it now and this is high priority for me. We should be able to fix this without having to back out bug 850380.

(In reply to Masatoshi Kimura [:emk] from comment #10)
> (In reply to Gregory Szorc [:gps] from comment #6)
> > Most build times in this range are from only having 2 physical cores in your
> > machine. With the amount of C++ in our tree, your clobber times won't be
> > much better until you throw more cores at builds. I highly recommend you
> > upgrade to 4+ physical cores if possible.
> 
> Are you saying this is my poor hardware's fault? Thanks for the very helpful
> advice!
> Then tbpl should always clobber so that the dumb build system don't have to
> care about what files are updated.

I was trying to be helpful. Please keep your comments helpful.
Comment on attachment 795226 [details] [diff] [review]
Ensure added XPIDL files result in xpt rebuild

Review of attachment 795226 [details] [diff] [review]:
-----------------------------------------------------------------

I'd rather find why the *existing* dependencies in the .pp files, which are exactly the same, don't work.
Attachment #795226 - Flags: review?(mh+mozilla) → review-
Attachment #795227 - Flags: review?(mh+mozilla) → review+
(In reply to Mike Hommey [:glandium] from comment #14)
> Comment on attachment 795226 [details] [diff] [review]
> Ensure added XPIDL files result in xpt rebuild
> 
> Review of attachment 795226 [details] [diff] [review]:
> -----------------------------------------------------------------
> 
> I'd rather find why the *existing* dependencies in the .pp files, which are
> exactly the same, don't work.

That being said, if we can't the right fix in a timely fashion, I'm okay with this landing, provided is *does* fix it, and provided this bug stays open for the right fix.
(In reply to Mike Hommey [:glandium] from comment #14)
> Comment on attachment 795226 [details] [diff] [review]
> Ensure added XPIDL files result in xpt rebuild
> 
> Review of attachment 795226 [details] [diff] [review]:
> -----------------------------------------------------------------
> 
> I'd rather find why the *existing* dependencies in the .pp files, which are
> exactly the same, don't work.

This is explained in the logs in previous comments. Make sees that the new .h file doesn't exist and fingers the .xpt target rule as what would create it. However, because it has already evaluated the .xpt rule and *thinks* it is already up to date (because there is no dependency on the new file yet), it prunes this dependency, leaving it with no rules and thus leaving the .h file unbuilt.

More complicated version.

State 1:

<main>
module.xpt:
    $(process)

foo.h: module.xpt

<dep>
module.xpt: foo.idl

State 2 (bar.idl is added):

<main>
module.xpt:
    $(process)

foo.h: module.xpt
bar.h: module.xpt

<dep>
module.xpt: foo.idl

<bar.h doesn't exist and needs built>
<the rule that produces module.xpt produces bar.h, so check module.xpt>
<module.xpt depends on foo.idl, foo.idl is up to date, so no need to run $(process)>
<bar.h fails to get built>

What this patch does is change state 2 to:

<main>
module.xpt: foo.idl bar.idl

foo.h: module.xpt
bar.h: module.xpt

<dep>
module.xpt: foo.idl

Now, when make examines module.xpt, it sees that bar.idl is a dependency and that bar.idl (is likely older), so it invokes $(process), building bar.h and all is well.

The patch fixes the bug.

I know there are other ways to address this, including excessive touching and performing some test -f's as part of the rules, but I think the existing patch is clean and sufficient. Am I wrong?
https://hg.mozilla.org/integration/mozilla-inbound/rev/06ec05a75711
https://hg.mozilla.org/integration/mozilla-inbound/rev/298a72a6c39c

This fixes at least some deps issues on all platforms. We still have a deps issue on Windows and the just-landed patch may be iterated on, so leaving open.
Attached file build.log
Build log on Windows after applying attachment #795005 [details] [diff] [review].

I'm trying to pin down the source of the linking error:

HTMLAnchorElementBinding.obj : error LNK2005: "public: void __thiscall mozilla::dom::HTMLAnchorElement::SetText(class nsAString_internal const &,class mozilla::ErrorResult &)" (?SetText@HTMLAnchorElement@dom@mozilla@@QAEXABVnsAString_internal@@AAVErrorResult@3@@Z) already defined in HTMLAnchorElement.obj

If you look at the full log, HTMLAnchorElement.obj is clearly built. However, there's no sign of HTMLAnchorElementBinding being rebuilt. I think that's the real bug here: we modify something that should cause the WebIDL-derived HTMLAnchorElementBinding.cpp to be rebuilt, but it's not rebuilt. Will upload it's .pp file shortly...
Comment on attachment 795255 [details]
HTMLAnchorElementBinding.obj.pp (Windows)

Look at the beginning of the file. WTF? ALL of my obj.pp files on Windows look like this! Bad dependency file causing files to not get rebuilt properly?
Attachment #795255 - Attachment description: HTMLAnchorElementBinding.obj.pp → HTMLAnchorElementBinding.obj.pp (Windows)
All my Windows .obj.pp files look like this?! WTF? Is my system on crack or did we regress something in the recent cl.py patches?
Flags: needinfo?(mh+mozilla)
It's not just you, my clobber from this afternoon has this too.
I suspect cl.py regressed in bug 906240 (57f4731f0a86), bug 908052 (927e48de12e1), or bug 904743 (bfc0c8ad9608). However, I'm about to go AFK until the AM. So someone else will need to take a look if this is to be resolved in less than 12 hours. A backout to restore partially busted dependency foo is probably more desirable than a non-backout resulting in near complete busted dependency foo.

If .o.pp files aren't working on Windows, there's going to be a lot of required clobbering and unhappy developers, so we need this resolved soon.
Summary: Build system can't detect xpidl additions or deletions → Build system can't detect xpidl additions or deletions / malformed.o.pp files on Windows
Whiteboard: [leave open]
I fixed the latter with a fixup to bug 904743. Thanks to cl.py running with -O and skipping asserts.
Flags: needinfo?(mh+mozilla)
Summary: Build system can't detect xpidl additions or deletions / malformed.o.pp files on Windows → Build system can't detect xpidl additions or deletions
Blocks: 909508
See Also: → 911453
Now that dist/include is under manifest control, we should be able to
generate headers directly into dist/include. So, let's do that. This
makes the rules simpler and eliminates discrepancy between windows and
elsewhere from symlinks.

https://tbpl.mozilla.org/?tree=Try&rev=b2a8a7979859
Attachment #799763 - Flags: review?(mh+mozilla)
Comment on attachment 799763 [details] [diff] [review]
Generate XPIDL-derived headers directly into dist/include

Review of attachment 799763 [details] [diff] [review]:
-----------------------------------------------------------------

::: CLOBBER
@@ +17,5 @@
>  #
>  # Modifying this file will now automatically clobber the buildbot machines \o/
>  #
>  
> +Bug 908977 - Generate XPIDL headers directly into dist/include

I actually see no reason for a forced clobber.
Attachment #799763 - Flags: review?(mh+mozilla) → review+
The forced clobber is required.

The purge manifest for the IDL files doesn't contain the headers/*.h files anymore, so they get purged during XPIDL processing. Since we removed the $(DIST)/include/%.h rules, make doesn't know it needs to reprocess things. The build blows up because the symlinks in $(DIST)/include go to .h files that don't exist.

I could have made this work without a clobber, but it would have been a lot of work that would need to linger with the build system for ages. I think a one-time transition via clobber is easier.
https://hg.mozilla.org/integration/mozilla-inbound/rev/ba4acc701c7e

Can we remove [leave open]? Not sure what else we hope to accomplish here.
I'll reopen if the problem persists.
Status: ASSIGNED → RESOLVED
Closed: 11 years ago
Resolution: --- → FIXED
Whiteboard: [leave open]
Target Milestone: --- → mozilla26
Product: Core → Firefox Build System
You need to log in before you can comment on or make changes to this bug.

Attachment

General

Created:
Updated:
Size: