<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
<!DOCTYPE bugzilla SYSTEM "https://bugs.webkit.org/page.cgi?id=bugzilla.dtd">

<bugzilla version="5.0.4.1"
          urlbase="https://bugs.webkit.org/"
          
          maintainer="admin@webkit.org"
>

    <bug>
          <bug_id>76970</bug_id>
          
          <creation_ts>2012-01-24 17:53:38 -0800</creation_ts>
          <short_desc>[meta] When any IDL is updated, all IDLs are rebuilt</short_desc>
          <delta_ts>2023-02-08 22:22:10 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebCore JavaScript</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>CONFIGURATION CHANGED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>77510</dependson>
          <blocked>76836</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Kentaro Hara">haraken</reporter>
          <assigned_to name="Kentaro Hara">haraken</assigned_to>
          <cc>abarth</cc>
    
    <cc>darin</cc>
    
    <cc>fujii</cc>
    
    <cc>japhet</cc>
    
    <cc>morrita</cc>
    
    <cc>simon.fraser</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>541910</commentid>
    <comment_count>0</comment_count>
    <who name="Kentaro Hara">haraken</who>
    <bug_when>2012-01-24 17:53:38 -0800</bug_when>
    <thetext>I&apos;ve been trying to stop rebuilding .h/.cpp files generated by unchanged IDLs (bug 76836), but the approach was wrong. We should invalidate patches committed in r105697, r105766, r105809 and r105805.

In r105697, r105766, r105809 and r105805, I modified CodeGenerator*.pm so that they overwrite .h/.cpp files only when the bytes differ. By this fix, we were able to stop rebuilding .h/.cpp files that are not changed.

However, the fix has made generate-bindings.pl run for almost all IDLs every time. The reason is as follows:

(0) Assume that there are A.idl, B.idl and C.idl.

(1) Modify A.idl.
(2) First build.
(3) supplemental_dependency.tmp is updated.
(4) generate-bindings.pl runs for A.idl, B.idl and C.idl.
(5) A.h and A.cpp are updated. B.h, B.cpp, C.h and C.cpp are not updated.

(6) Second build.
(7) Since B.h, B.cpp, C.h and C.cpp are older than supplemental_dependency.tmp, generate-bindings.pl runs for B.idl and C.idl.
(8) B.h, B.cpp, C.h and C.cpp are not updated.

(9) Third build.
(10) Since B.h, B.cpp, C.h and C.cpp are older than supplemental_dependency.tmp, generate-bindings.pl runs for B.idl and C.idl.
(11) B.h, B.cpp, C.h and C.cpp are not updated.

...

We should fix the bug somehow, but how to fix it is not obvious to me. For the time being, let me commit a patch that invalidates r105697, r105766, r105809 and r105805.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>541915</commentid>
    <comment_count>1</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2012-01-24 17:57:02 -0800</bug_when>
    <thetext>This is what I was driving at when I asked how we would write the makefiles! I don’t remember what bug that comment was in.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>541917</commentid>
    <comment_count>2</comment_count>
      <attachid>123863</attachid>
    <who name="Kentaro Hara">haraken</who>
    <bug_when>2012-01-24 17:58:56 -0800</bug_when>
    <thetext>Created attachment 123863
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>541918</commentid>
    <comment_count>3</comment_count>
    <who name="Kentaro Hara">haraken</who>
    <bug_when>2012-01-24 17:59:53 -0800</bug_when>
    <thetext>(In reply to comment #1)
&gt; This is what I was driving at when I asked how we would write the makefiles! I don’t remember what bug that comment was in.

Sorry, I noticed, now...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>541920</commentid>
    <comment_count>4</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2012-01-24 18:01:00 -0800</bug_when>
    <thetext>Sounds like we need another plan to solve the original problem.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>541921</commentid>
    <comment_count>5</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2012-01-24 18:01:36 -0800</bug_when>
    <thetext>Found it, &lt;https://bugs.webkit.org/show_bug.cgi?id=74900#c20&gt;.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>541953</commentid>
    <comment_count>6</comment_count>
      <attachid>123863</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-01-24 18:47:24 -0800</bug_when>
    <thetext>Comment on attachment 123863
Patch

Clearing flags on attachment: 123863

Committed r105844: &lt;http://trac.webkit.org/changeset/105844&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>541954</commentid>
    <comment_count>7</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-01-24 18:47:30 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>543908</commentid>
    <comment_count>8</comment_count>
    <who name="Kentaro Hara">haraken</who>
    <bug_when>2012-01-27 01:56:40 -0800</bug_when>
    <thetext>Adam, darin: This might be a hack (or might be still wrong:-), but how about the following idea?

==== Current behavior ====

supplemental_dependency.tmp : $(ALL_IDL_FILES)
    perl resolve-supplemental.pl $(ALL_IDL_FILES)   # resolve-supplemental.pl generates supplemental_dependency.tmp.

JS%.h : %.idl supplemental_dependency.tmp
    perl generate-bindings.pl supplemental_dependency.tmp $&lt;    # generate-bindings.pl generates JS%.h and JS%.cpp.


==== New behavior ====

supplemental_dependency.tmp : $(ALL_IDL_FILES)
    perl resolve-supplemental.pl $(ALL_IDL_FILES)   # resolve-supplemental.pl generates supplemental_dependency.tmp.

supplemental_dependency_with_effective_timestamp.tmp : supplemental_dependency.tmp
    cp ... # copy supplemental_dependency.tmp to supplemental_dependency_with_effective_timestamp.tmp only when the bytes differ.

JS%.h : %.idl supplemental_dependency_with_effective_timestamp.tmp
    perl generate-bindings.pl supplemental_dependency_with_effective_timestamp.tmp $&lt;    # generate-bindings.pl generates JS%.h and JS%.cpp.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>543928</commentid>
    <comment_count>9</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2012-01-27 03:05:59 -0800</bug_when>
    <thetext>So, the copy rule will always fire, but we ought not worry because it will be fast?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>543929</commentid>
    <comment_count>10</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2012-01-27 03:07:23 -0800</bug_when>
    <thetext>Isn&apos;t there a problem if I touch the contents of DOMWindowWebSockets.idl ?  supplemental_dependency_with_effective_timestamp.tmp won&apos;t change but JSDOMWindow.cpp won&apos;t be re-built.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>544041</commentid>
    <comment_count>11</comment_count>
    <who name="Kentaro Hara">haraken</who>
    <bug_when>2012-01-27 07:04:36 -0800</bug_when>
    <thetext>(In reply to comment #9)
&gt; So, the copy rule will always fire, but we ought not worry because it will be fast?

Yes. Some command must always fire anyway. So the basic idea is to make the command faster.

(In reply to comment #10)
&gt; Isn&apos;t there a problem if I touch the contents of DOMWindowWebSockets.idl ?  supplemental_dependency_with_effective_timestamp.tmp won&apos;t change but JSDOMWindow.cpp won&apos;t be re-built.

Ah, right. More simple, a problem happens when we just touch Element.idl. supplemental_dependency_with_effective_timestamp.tmp won&apos;t change, and JSElement.cpp won&apos;t be re-built.

The problem here is that supplemental_dependency_with_effective_timestamp.tmp is not updated when the update is required. Then how about adding a hash (e.g. MD5) of each IDL to supplemental_dependency.tmp, like this?

    A.idl (r843wqrdjwaoufe)
    B.idl (ru3oafjslajfe) B_supplemental.idl (fjdskafeiuwo32) B_Supplemental2.idl (r4owafnsfdlkre)
    C.idl (r483qokesafsda)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>544182</commentid>
    <comment_count>12</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2012-01-27 10:54:55 -0800</bug_when>
    <thetext>Here&apos;s another idea;

1) Whenever any IDL file changes, run resolve-supplemental, and for each line in supplemental_dependency.tmp, if the main IDL file is older than any of the supplemental IDL files, touch the main IDL file.
2) Have JSFoo.cpp depend only on JSFoo.idl (the main IDL file).

Thoughts?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>544192</commentid>
    <comment_count>13</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2012-01-27 11:02:11 -0800</bug_when>
    <thetext>(In reply to comment #12)
&gt; Here&apos;s another idea;
&gt; 
&gt; 1) Whenever any IDL file changes, run resolve-supplemental, and for each line in supplemental_dependency.tmp, if the main IDL file is older than any of the supplemental IDL files, touch the main IDL file.
&gt; 2) Have JSFoo.cpp depend only on JSFoo.idl (the main IDL file).
&gt; 
&gt; Thoughts?

Here’s another version of this that doesn’t rely on touching source files. Maybe not worded quite correctly:

1) For each main IDL file, have a make rule that creates/touches a corresponding .cpp-needs-to-be-gnerated file.

2) For each supplemental IDL file, have a make rule that createes/touches the main .cpp-needs-to-be-gnerated files as well as whatever file is generated to track the fact that the supplemental file was processed. This need not be done all at once with resolve-supplemental, or could be done for each supplemental file individually. There is no order dependency between this and (1).

3) In a separate pass (needs to be after [2], yet not dependent on [2]), have JSFoo.cpp depend on JSFoo.idl-needs-compliation.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>544199</commentid>
    <comment_count>14</comment_count>
    <who name="Kentaro Hara">haraken</who>
    <bug_when>2012-01-27 11:10:01 -0800</bug_when>
    <thetext>(In reply to comment #12)
&gt; Here&apos;s another idea;
&gt; 
&gt; 1) Whenever any IDL file changes, run resolve-supplemental, and for each line in supplemental_dependency.tmp, if the main IDL file is older than any of the supplemental IDL files, touch the main IDL file.
&gt; 2) Have JSFoo.cpp depend only on JSFoo.idl (the main IDL file).
&gt; 
&gt; Thoughts?

Thanks! I might be misunderstanding, but you mean something like this?

supplemental_dependency.tmp : $(ALL_IDL_FILES)
    perl resolve-supplemental.pl $(ALL_IDL_FILES)   # resolve-supplemental.pl generates supplemental_dependency.tmp. It also touches main IDLs that must be updated.

JS%.cpp : %.idl
    perl generate-bindings.pl supplemental_dependency.tmp $&lt;    # generate-bindings.pl generates JS%.h and JS%.cpp.

In this case, the order dependency between generate-bindings.pl and resolve-supplemental.pl does not appear in the makefile. How can we confirm that generate-bindings.pl runs after resolve-supplemental.pl?

# I am looking into darin&apos;s version.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>544214</commentid>
    <comment_count>15</comment_count>
    <who name="Kentaro Hara">haraken</who>
    <bug_when>2012-01-27 11:30:40 -0800</bug_when>
    <thetext>(In reply to comment #13)
&gt; (In reply to comment #12)
&gt; Here’s another version of this that doesn’t rely on touching source files. Maybe not worded quite correctly:
&gt; 
&gt; 1) For each main IDL file, have a make rule that creates/touches a corresponding .cpp-needs-to-be-gnerated file.
&gt; 
&gt; 2) For each supplemental IDL file, have a make rule that createes/touches the main .cpp-needs-to-be-gnerated files as well as whatever file is generated to track the fact that the supplemental file was processed. This need not be done all at once with resolve-supplemental, or could be done for each supplemental file individually. There is no order dependency between this and (1).
&gt; 
&gt; 3) In a separate pass (needs to be after [2], yet not dependent on [2]), have JSFoo.cpp depend on JSFoo.idl-needs-compliation.

Thanks, darin! I might be misunderstanding your idea, but you mean something like this?

supplemental_dependency.tmp : $(ALL_IDL_FILES)
    perl resolve-supplemental.pl $(ALL_IDL_FILES)   # Generates supplemental_dependency.tmp.

%.cpp-needs-to-be-generated : %.idl supplemental_dependency.tmp
    perl touch-cpp-needs-to-be-generated.pl $&lt;    # touches %.cpp-needs-to-be-generated and all *.cpp-needs-to-be-generated s that %.idl is supplementing.

JS%.cpp : %.cpp-needs-to-be-generated
    perl generate-bindings.pl supplemental_dependency.tmp $&lt;    # Generates JS%.h and JS%.cpp.


In this case, how can we guarantee that generate-bindings.pl for JSxxxx.cpp runs after xxxx.cpp-needs-to-be-generated is touched by all touch-cpp-needs-to-be-generated.pl s that may touch xxxx.cpp-needs-to-be-generated?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>544359</commentid>
    <comment_count>16</comment_count>
    <who name="Kentaro Hara">haraken</who>
    <bug_when>2012-01-27 14:19:22 -0800</bug_when>
    <thetext>I guess that we need to guarantee that generate-bindings.pl for each IDL must run after all supplemental dependencies are resolved. This implies that JS%.cpp must (directly or indirectly) depend on a file that describes all the supplemental dependencies (i.e. supplemental_dependency.tmp) as a explicit rule in makefile, like this:

    JS%.cpp : %.idl supplemental_dependency.tmp
        perl generate-bindings.pl ...

In other words, the following rules won&apos;t work as expected:

    JS%.cpp : %.idl
        perl generate-bindings.pl ...

or

    JS%.cpp : %.cpp-needs-to-be-generated
        perl generate-bindings.pl ...


=====================

Is the hash idea too hacky?

supplemental_dependency.tmp : $(ALL_IDL_FILES)
    perl resolve-supplemental.pl $(ALL_IDL_FILES)   # Generates supplemental_dependency.tmp, with a hash of each IDL.

supplemental_dependency_with_effective_timestamp.tmp : supplemental_dependency.tmp
    cp ... # copy supplemental_dependency.tmp to supplemental_dependency_with_effective_timestamp.tmp only when the bytes differ.

JS%.cpp : %.idl supplemental_dependency_with_effective_timestamp.tmp
    perl generate-bindings.pl supplemental_dependency_with_effective_timestamp.tmp $&lt;    # Generates JS%.h and JS%.cpp.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>545090</commentid>
    <comment_count>17</comment_count>
    <who name="Kentaro Hara">haraken</who>
    <bug_when>2012-01-30 07:29:21 -0800</bug_when>
    <thetext>(In reply to comment #16)
&gt; I guess that we need to guarantee that generate-bindings.pl for each IDL must run after all supplemental dependencies are resolved. This implies that JS%.cpp must (directly or indirectly) depend on a file that describes all the supplemental dependencies (i.e. supplemental_dependency.tmp) as a explicit rule in makefile, like this:
&gt; 
&gt;     JS%.cpp : %.idl supplemental_dependency.tmp
&gt;         perl generate-bindings.pl ...
&gt; 
&gt; In other words, the following rules won&apos;t work as expected:
&gt; 
&gt;     JS%.cpp : %.idl
&gt;         perl generate-bindings.pl ...
&gt; 
&gt; or
&gt; 
&gt;     JS%.cpp : %.cpp-needs-to-be-generated
&gt;         perl generate-bindings.pl ...
&gt; 
&gt; 
&gt; =====================
&gt; 
&gt; Is the hash idea too hacky?
&gt; 
&gt; supplemental_dependency.tmp : $(ALL_IDL_FILES)
&gt;     perl resolve-supplemental.pl $(ALL_IDL_FILES)   # Generates supplemental_dependency.tmp, with a hash of each IDL.
&gt; 
&gt; supplemental_dependency_with_effective_timestamp.tmp : supplemental_dependency.tmp
&gt;     cp ... # copy supplemental_dependency.tmp to supplemental_dependency_with_effective_timestamp.tmp only when the bytes differ.
&gt; 
&gt; JS%.cpp : %.idl supplemental_dependency_with_effective_timestamp.tmp
&gt;     perl generate-bindings.pl supplemental_dependency_with_effective_timestamp.tmp $&lt;    # Generates JS%.h and JS%.cpp.

Adam, Darin: I would like to fix the issue somehow before starting WebKit modularization. If the hash idea would be acceptable, I am happy to implement it. Or I would like to look for another idea based on the ideas you suggested above.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>545491</commentid>
    <comment_count>18</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2012-01-30 15:28:28 -0800</bug_when>
    <thetext>&gt; Adam, Darin: I would like to fix the issue somehow before starting WebKit modularization. If the hash idea would be acceptable, I am happy to implement it. Or I would like to look for another idea based on the ideas you suggested above.

The approach in Comment #17 will still cause all the CPP files to be regenerated whenever any IDL file changes.

I thought about this for a while but I couldn&apos;t come up with anything great.  I think my make foo isn&apos;t strong enough.  The thing I don&apos;t know how to do is to make one thing run after another but not be dependent on it.  Is there an idiom in Make for doing that?  If so, Darin&apos;s approach from Comment #13 seems fine.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>545554</commentid>
    <comment_count>19</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2012-01-30 16:16:03 -0800</bug_when>
    <thetext>(In reply to comment #18)
&gt; The thing I don&apos;t know how to do is to make one thing run after another but not be dependent on it.  Is there an idiom in Make for doing that?

The idiom is to put a phony target in the list of &quot;all&quot; dependencies before $(JS_DOM_HEADERS). That operation will run before the JS%.h rules runs. The order of dependencies matters.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>545556</commentid>
    <comment_count>20</comment_count>
    <who name="Kentaro Hara">haraken</who>
    <bug_when>2012-01-30 16:16:47 -0800</bug_when>
    <thetext>(In reply to comment #18)
&gt; &gt; Adam, Darin: I would like to fix the issue somehow before starting WebKit modularization. If the hash idea would be acceptable, I am happy to implement it. Or I would like to look for another idea based on the ideas you suggested above.
&gt; 
&gt; The approach in Comment #17 will still cause all the CPP files to be regenerated whenever any IDL file changes.

Thanks Adam, now I got it. A dependency DAG of Makefile is created statically (i.e. before any rule is fired)... Specifically,

B : A
    X

C : B
    Y

Even if X does not update B, Y is fired.

&gt; The thing I don&apos;t know how to do is to make one thing run after another but not be dependent on it.  Is there an idiom in Make for doing that?  If so, Darin&apos;s approach from Comment #13 seems fine.

Yeah. Another problem is whether qmake, cmake and GYP also have the similar idiom.

Another idea is to use &quot;recursive make&quot;, i.e. generate the required dependency dynamically. But I am not sure if it is possible in qmake, cmake and even GYP.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>545595</commentid>
    <comment_count>21</comment_count>
    <who name="Kentaro Hara">haraken</who>
    <bug_when>2012-01-30 16:39:56 -0800</bug_when>
    <thetext>(In reply to comment #19)
&gt; (In reply to comment #18)
&gt; &gt; The thing I don&apos;t know how to do is to make one thing run after another but not be dependent on it.  Is there an idiom in Make for doing that?
&gt; 
&gt; The idiom is to put a phony target in the list of &quot;all&quot; dependencies before $(JS_DOM_HEADERS). That operation will run before the JS%.h rules runs. The order of dependencies matters.

Thanks Darin, maybe more modest way is &quot;order-only-prerequisites&quot;:
http://www.gnu.org/software/make/manual/make.html#Prerequisite-Types

I guess this is what we need. I&apos;ll try Darin&apos;s idea using &quot;order-only-prerequisites&quot;.

But I am not still sure the similar idiom is available in qmake, cmake and GYP.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>545759</commentid>
    <comment_count>22</comment_count>
    <who name="Kentaro Hara">haraken</who>
    <bug_when>2012-01-30 20:48:31 -0800</bug_when>
    <thetext>(In reply to comment #19)
&gt; (In reply to comment #18)
&gt; &gt; The thing I don&apos;t know how to do is to make one thing run after another but not be dependent on it.  Is there an idiom in Make for doing that?
&gt; 
&gt; The idiom is to put a phony target in the list of &quot;all&quot; dependencies before $(JS_DOM_HEADERS). That operation will run before the JS%.h rules runs. The order of dependencies matters.

Darin: Sorry if I am misunderstanding your idea, but I am afraid that the phony target won&apos;t work well if make runs in parallel. Here are experimental results. 

#### test.mk from here ####
all: phony A.cpp B.cpp

dependency.txt: A.idl B.idl
        touch $@

%.touch: %.idl dependency.txt
        touch $@

%.cpp: %.touch
        touch $@

.PHONY: phony
phony: A.touch B.touch
        sleep 5
        echo &quot;sleep end&quot;
#### test.mk to here ####

#### The result from here ####
$ touch A.idl &amp;&amp; make -j 2 -f test.mk
touch dependency.txt
touch A.touch
touch B.touch
touch A.cpp
sleep 5
touch B.cpp
echo &quot;sleep end&quot;
sleep end
#### The result to here ####

As you can see, &quot;touch A.cpp&quot; and &quot;touch B.cpp&quot; are fired without waiting for the phony.

Below is the result of order-only-prerequisites.

#### test2.mk from here ####
all: A.cpp B.cpp

dependency.txt: A.idl B.idl
        touch $@

A.touch: A.idl dependency.txt
        touch $@

B.touch: B.idl dependency.txt
        sleep 5
        touch $@

%.cpp: %.touch | A.touch B.touch
        touch $@
#### test2.mk to here ####

#### The result from here ####
$ touch A.idl &amp;&amp; make -j 2 -f test2.mk
touch dependency.txt
touch A.touch
sleep 5
touch B.touch
touch A.cpp
touch B.cpp
#### The result to here ####

As you can see, &quot;touch A.cpp&quot; and &quot;touch C.cpp&quot; are fired after waiting &quot;touch A.cpp&quot; and &quot;touch B.cpp&quot;.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>545827</commentid>
    <comment_count>23</comment_count>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2012-01-31 00:21:15 -0800</bug_when>
    <thetext>If there&apos;s work that remains here, this bug needs to be reopened, or a new one filed. If reusing this bug, please fix the title.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>545835</commentid>
    <comment_count>24</comment_count>
    <who name="Kentaro Hara">haraken</who>
    <bug_when>2012-01-31 00:51:37 -0800</bug_when>
    <thetext>Let me reopen this bug as a meta bug to track the issue.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>546094</commentid>
    <comment_count>25</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2012-01-31 08:43:19 -0800</bug_when>
    <thetext>(In reply to comment #22)
&gt; I am afraid that the phony target won&apos;t work well if make runs in parallel.

Good point. I think we have solved this in the past with multiple makefiles. I’ll let you know if I think of anything more elegant.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>546100</commentid>
    <comment_count>26</comment_count>
    <who name="Kentaro Hara">haraken</who>
    <bug_when>2012-01-31 08:46:21 -0800</bug_when>
    <thetext>(In reply to comment #25)
&gt; Good point. I think we have solved this in the past with multiple makefiles. I’ll let you know if I think of anything more elegant.

Thanks! For now I am trying to make a patch using order-only-prerequisites in DerivedSources.make for AppleWebKit.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>546813</commentid>
    <comment_count>27</comment_count>
    <who name="Kentaro Hara">haraken</who>
    <bug_when>2012-01-31 22:20:27 -0800</bug_when>
    <thetext>Darin, Adam: I implemented Darin&apos;s idea in AppleWebKit, but it did not work...

supplemental_dependency.tmp : $(ALL_IDLS)
    perl resolve-supplemental.pl $(ALL_IDLS)   # Generates supplemental_dependency.tmp

%.idl-needs-rebuild : %.idl supplemental_dependency.tmp
    perl update-idl-needs-rebuild.pl $&lt; $@    # Updates %.idl-needs-rebuild only if the dependency about %.idl is changed

JS%.cpp : %.idl-needs-rebuild | *.idl-needs-rebuild
    perl generate-bindings.pl supplemental_dependency.tmp $&lt;    # Generates JS%.cpp


Please consider the case where we edit Element.idl.

(1) resolve-supplemental.pl generates supplemental_dependency.tmp
(2) update-idl-needs-rebuild.pl runs for all IDLs, especially for Element.idl, but it does not update Element.idl-needs-rebuild because the dependency about Element.idl is not changed
(3) Consequently, generate-bindings.pl does not run for Element.idl...

Maybe we can solve this issue by adding a &quot;hash&quot; of Element.idl to Element.idl-needs-rebuild, so that update-idl-needs-rebuild.pl can touch Element.idl-needs-rebuild when the dependency about Element.idl is changed *and* Element.idl itself is changed. However, if we use a hash, my previous hash idea would be simpler.


What I&apos;ve been misunderstanding is the following point:

&gt; A dependency DAG of Makefile is created statically (i.e. before any rule is fired)... Specifically,
&gt; 
&gt; B : A
&gt;     X
&gt; 
&gt; C : B
&gt;     Y
&gt; 
&gt; Even if X does not update B, Y is fired.

This is wrong. If X does not update B, then Y does not fire. But if so, I think that my previous hash idea might work well.

Any idea?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>546841</commentid>
    <comment_count>28</comment_count>
    <who name="Kentaro Hara">haraken</who>
    <bug_when>2012-01-31 23:51:49 -0800</bug_when>
    <thetext>Adam, Darin: Sorry for the looooong discussion.

I discussed with Adam Barth in IRC and reached the following trick:

supplemental_dependency.tmp : $(ALL_IDLS)
    perl resolve-supplemental.pl $(ALL_IDLS)

%.idl-needs-rebuild : %.idl | supplemental_dependency.tmp
    touch %.idl-needs-rebuild
    perl update-idl-needs-rebuild.pl $&lt; $@ # update-idl-needs-rebuild.pl touches the &quot;main&quot; IDL file&apos;s idl-needs-rebuild if the idl-needs-rebuild is older than %.idl

JS%.cpp : %.idl-needs-rebuild | *.idl-needs-rebuild
    perl generate-bindings.pl supplemental_dependency.tmp $&lt;    # Generates JS%.cpp


But... I found that it might not work in parallel. The problem is that update-idl-needs-rebuild.pl can touch xxxx.idl-needs-rebuild that does not appear on the left hand side of the make rule, and in that case &quot;| *.idl-needs-rebuild&quot; does not guarantee that the update of xxxx.idl-needs-rebuild has finished.

For simplicity, consider the following example:

=========================
all : A B

X : foo
    sleep 3
    touch Y  # Touches a file that does not appear on the left hand side

Y : foo

A : X
    touch A

B : Y | X
    touch B
=========================

The result is as follows:

$ touch foo
$ make -j 2   # First try
sleep 3
touch Y
touch A
$ make -j 2   # Second try
sleep 3
touch Y
touch A
touch B
$ make -j 2   # Third try
sleep 3
touch Y
touch A
$ make -j 2   # Fourth try
sleep 3
touch Y
touch A
touch B

Thus, &quot;touch B&quot; is certainly executed after &quot;touch Y&quot;, but &quot;touch B&quot; is not always executed. That&apos;s a problem...

Maybe can we use &quot;recursive make&quot;? (But in that case it will become more difficult to implement the same logic in GYP)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>547013</commentid>
    <comment_count>29</comment_count>
    <who name="Kentaro Hara">haraken</who>
    <bug_when>2012-02-01 05:03:00 -0800</bug_when>
    <thetext>Please ignore Comment #28, that observation was wrong.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1932247</commentid>
    <comment_count>30</comment_count>
    <who name="Fujii Hironori">fujii</who>
    <bug_when>2023-02-08 22:22:10 -0800</bug_when>
    <thetext>I think this problem is gone.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>123863</attachid>
            <date>2012-01-24 17:58:56 -0800</date>
            <delta_ts>2012-01-24 18:47:24 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-76970-20120124175854.patch</filename>
            <type>text/plain</type>
            <size>9117</size>
            <attacher name="Kentaro Hara">haraken</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTA1ODM3CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNmMwYjE1MGI0OWRjMjA0
MzMzZmUzOGFiZjVkY2U2MzNkZjY1YjQ2My4uNTRhZGYyNDY1ZWY2ZGVjM2NmODk1YmM2MjhkYTgz
ZDk0M2VjNDVmZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDU1IEBACisyMDEyLTAxLTI0ICBLZW50
YXJvIEhhcmEgIDxoYXJha2VuQGNocm9taXVtLm9yZz4KKworICAgICAgICBJbnZhbGlkYXRlIHIx
MDU2OTcsIHIxMDU3NjYsIHIxMDU4MDkgYW5kIHIxMDU4MDUKKyAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTc2OTcwCisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
Tk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgSSd2ZSBiZWVuIHRyeWluZyB0byBzdG9wIHJlYnVp
bGRpbmcgLmgvLmNwcCBmaWxlcyBnZW5lcmF0ZWQgYnkKKyAgICAgICAgdW5jaGFuZ2VkIElETHMg
KGJ1ZyA3NjgzNiksIGJ1dCB0aGUgYXBwcm9hY2ggd2FzIHdyb25nLgorICAgICAgICBUaGlzIHBh
dGNoIGludmFsaWRhdGVzIHBhdGNoZXMgY29tbWl0dGVkIGluIHIxMDU2OTcsIHIxMDU3NjYsCisg
ICAgICAgIHIxMDU4MDkgYW5kIHIxMDU4MDUuCisKKyAgICAgICAgSW4gcjEwNTY5NywgcjEwNTc2
NiwgcjEwNTgwOSBhbmQgcjEwNTgwNSwgSSBtb2RpZmllZCBDb2RlR2VuZXJhdG9yKi5wbQorICAg
ICAgICBzbyB0aGF0IHRoZXkgb3ZlcndyaXRlIC5oLy5jcHAgZmlsZXMgb25seSB3aGVuIHRoZSBi
eXRlcyBkaWZmZXIuCisgICAgICAgIEJ5IHRoaXMgZml4LCB3ZSB3ZXJlIGFibGUgdG8gc3RvcCBy
ZWJ1aWxkaW5nIC5oLy5jcHAgZmlsZXMgdGhhdCBhcmUgbm90CisgICAgICAgIGNoYW5nZWQuIEhv
d2V2ZXIsIHRoZSBmaXggaGFzIG1hZGUgZ2VuZXJhdGUtYmluZGluZ3MucGwgcnVuIGZvciBhbG1v
c3QKKyAgICAgICAgYWxsIElETHMgZXZlcnkgdGltZS4gVGhlIHJlYXNvbiBpcyBhcyBmb2xsb3dz
OgorCisgICAgICAgICgwKSBBc3N1bWUgdGhhdCB0aGVyZSBhcmUgQS5pZGwsIEIuaWRsIGFuZCBD
LmlkbC4KKworICAgICAgICAoMSkgTW9kaWZ5IEEuaWRsLgorICAgICAgICAoMikgRmlyc3QgYnVp
bGQuCisgICAgICAgICgzKSBzdXBwbGVtZW50YWxfZGVwZW5kZW5jeS50bXAgaXMgdXBkYXRlZC4K
KyAgICAgICAgKDQpIGdlbmVyYXRlLWJpbmRpbmdzLnBsIHJ1bnMgZm9yIEEuaWRsLCBCLmlkbCBh
bmQgQy5pZGwuCisgICAgICAgICg1KSBBLmggYW5kIEEuY3BwIGFyZSB1cGRhdGVkLiBCLmgsIEIu
Y3BwLCBDLmggYW5kIEMuY3BwIGFyZSBub3QgdXBkYXRlZC4KKworICAgICAgICAoNikgU2Vjb25k
IGJ1aWxkLgorICAgICAgICAoNykgU2luY2UgQi5oLCBCLmNwcCwgQy5oIGFuZCBDLmNwcCBhcmUg
b2xkZXIgdGhhbiBzdXBwbGVtZW50YWxfZGVwZW5kZW5jeS50bXAsIGdlbmVyYXRlLWJpbmRpbmdz
LnBsIHJ1bnMgZm9yIEIuaWRsIGFuZCBDLmlkbC4KKyAgICAgICAgKDgpIEIuaCwgQi5jcHAsIEMu
aCBhbmQgQy5jcHAgYXJlIG5vdCB1cGRhdGVkLgorCisgICAgICAgICg5KSBUaGlyZCBidWlsZC4K
KyAgICAgICAgKDEwKSBTaW5jZSBCLmgsIEIuY3BwLCBDLmggYW5kIEMuY3BwIGFyZSBvbGRlciB0
aGFuIHN1cHBsZW1lbnRhbF9kZXBlbmRlbmN5LnRtcCwgZ2VuZXJhdGUtYmluZGluZ3MucGwgcnVu
cyBmb3IgQi5pZGwgYW5kIEMuaWRsLgorICAgICAgICAoMTEpIEIuaCwgQi5jcHAsIEMuaCBhbmQg
Qy5jcHAgYXJlIG5vdCB1cGRhdGVkLgorICAgICAgICAuLi4KKworICAgICAgICBXZSBzaG91bGQg
Zml4IHRoZSBidWcgc29tZWhvdywgYnV0IGhvdyB0byBmaXggaXQgaXMgbm90IG9idmlvdXMuCisg
ICAgICAgIEZvciB0aGUgdGltZSBiZWluZywgdGhpcyBwYXRjaCBpbnZhbGlkYXRlcyByMTA1Njk3
LCByMTA1NzY2LCByMTA1ODA5CisgICAgICAgIGFuZCByMTA1ODA1LgorCisgICAgICAgIE5vIHRl
c3RzLiBObyBjaGFuZ2UgaW4gYmVoYXZpb3IuCisKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRz
L0NvZGVHZW5lcmF0b3IucG06CisgICAgICAgIChVcGRhdGVGaWxlKToKKyAgICAgICAgKiBiaW5k
aW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JDUFAucG06CisgICAgICAgIChXcml0ZURhdGEpOgor
ICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvckpTLnBtOgorICAgICAgICAo
V3JpdGVEYXRhKToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JPYmpD
LnBtOgorICAgICAgICAoV3JpdGVEYXRhKToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL0Nv
ZGVHZW5lcmF0b3JWOC5wbToKKyAgICAgICAgKFdyaXRlRGF0YSk6CisKIDIwMTItMDEtMjQgIEtl
biBCdWNoYW5hbiAgPGtlbnJiQGNocm9taXVtLm9yZz4KIAogICAgICAgICBDcmFzaCBpbiB1cGRh
dGVGaXJzdExldHRlcigpIGZyb20gdW5uZWNlc3NhcnkgYW5vbnltb3VzIGJsb2NrCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3IucG0gYi9T
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3IucG0KaW5kZXggYzM5
OWQ2ZWU3OTgwYThhMWIyMTJlZmE1OWI5MjI5ODlkODZhNWMxZi4uMmFkOThlNmM3YjEzZGIwZGRj
ZjBmNWE3Yzc1MDU5ZjQ5NTJlOWVmMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGlu
Z3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9yLnBtCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L3NjcmlwdHMvQ29kZUdlbmVyYXRvci5wbQpAQCAtMTYxLDI4ICsxNjEsMTUgQEAgc3ViIEZpbGVO
YW1lUHJlZml4CiAgICAgcmV0dXJuICRjb2RlR2VuZXJhdG9yLT5GaWxlTmFtZVByZWZpeCgpOwog
fQogCi1zdWIgVXBkYXRlRmlsZUlmQ2hhbmdlZAorc3ViIFVwZGF0ZUZpbGUKIHsKICAgICBteSAk
b2JqZWN0ID0gc2hpZnQ7CiAgICAgbXkgJGZpbGVOYW1lID0gc2hpZnQ7CiAgICAgbXkgJGNvbnRl
bnRzID0gc2hpZnQ7CiAKLSAgICBteSAkc2hvdWxkVXBkYXRlID0gMDsKLQotICAgIGlmIChvcGVu
IEZILCAkZmlsZU5hbWUpIHsKLSAgICAgICAgbG9jYWwgJC8gPSB1bmRlZjsKLSAgICAgICAgbXkg
JG9sZENvbnRlbnRzID0gPEZIPjsKLSAgICAgICAgJHNob3VsZFVwZGF0ZSA9IDEgaWYgJG9sZENv
bnRlbnRzIG5lICRjb250ZW50czsKLSAgICAgICAgY2xvc2UgRkg7Ci0gICAgfSBlbHNlIHsKLSAg
ICAgICAgJHNob3VsZFVwZGF0ZSA9IDE7Ci0gICAgfQotCi0gICAgaWYgKCRzaG91bGRVcGRhdGUp
IHsKLSAgICAgICAgb3BlbiBGSCwgIj4gJGZpbGVOYW1lIiBvciBkaWUgIkNvdWxkbid0IG9wZW4g
JGZpbGVOYW1lOiAkIVxuIjsKLSAgICAgICAgcHJpbnQgRkggJGNvbnRlbnRzOwotICAgICAgICBj
bG9zZSBGSDsKLSAgICB9CisgICAgb3BlbiBGSCwgIj4gJGZpbGVOYW1lIiBvciBkaWUgIkNvdWxk
bid0IG9wZW4gJGZpbGVOYW1lOiAkIVxuIjsKKyAgICBwcmludCBGSCAkY29udGVudHM7CisgICAg
Y2xvc2UgRkg7CiB9CiAKIHN1YiBGb3JBbGxQYXJlbnRzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JDUFAucG0gYi9Tb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JDUFAucG0KaW5kZXggMDAwNWM1NTgwOGVi
ZTI0MTBmZWEzNmI5YTdkNmU5M2RiMTVhYjM4YS4uYzg4MWJmOWE3YjBjNTlkNzYwMDI5ZGRlYzU3
YTA1YTQyMzk0MDM4YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0
cy9Db2RlR2VuZXJhdG9yQ1BQLnBtCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Njcmlw
dHMvQ29kZUdlbmVyYXRvckNQUC5wbQpAQCAtOTUyLDcgKzk1Miw3IEBAIHN1YiBXcml0ZURhdGEK
ICAgICBteSAkaGFzRm9yd2FyZERlY2xhcmF0aW9ucyA9IGtleXMoJWhlYWRlckZvcndhcmREZWNs
YXJhdGlvbnMpOwogICAgICRjb250ZW50cyAuPSAiXG4iIGlmICRoYXNGb3J3YXJkRGVjbGFyYXRp
b25zOwogICAgICRjb250ZW50cyAuPSBqb2luICIiLCBAaGVhZGVyQ29udGVudDsKLSAgICAkY29k
ZUdlbmVyYXRvci0+VXBkYXRlRmlsZUlmQ2hhbmdlZCgkaGVhZGVyRmlsZU5hbWUsICRjb250ZW50
cyk7CisgICAgJGNvZGVHZW5lcmF0b3ItPlVwZGF0ZUZpbGUoJGhlYWRlckZpbGVOYW1lLCAkY29u
dGVudHMpOwogCiAgICAgQGhlYWRlckNvbnRlbnRIZWFkZXIgPSAoKTsKICAgICBAaGVhZGVyQ29u
dGVudCA9ICgpOwpAQCAtOTY4LDcgKzk2OCw3IEBAIHN1YiBXcml0ZURhdGEKICAgICB9CiAKICAg
ICAkY29udGVudHMgLj0gam9pbiAiIiwgQGltcGxDb250ZW50OwotICAgICRjb2RlR2VuZXJhdG9y
LT5VcGRhdGVGaWxlSWZDaGFuZ2VkKCRpbXBsRmlsZU5hbWUsICRjb250ZW50cyk7CisgICAgJGNv
ZGVHZW5lcmF0b3ItPlVwZGF0ZUZpbGUoJGltcGxGaWxlTmFtZSwgJGNvbnRlbnRzKTsKIAogICAg
IEBpbXBsQ29udGVudEhlYWRlciA9ICgpOwogICAgIEBpbXBsQ29udGVudCA9ICgpOwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9ySlMucG0g
Yi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JKUy5wbQppbmRl
eCAyMDM5YjdiYzAyMjVmYzIzYWFhNzgyOWIzZDdlOGYwNDg0OWE2NzQ0Li44MjNiNGY2Nzg3NzZi
OTg3Njc5ZDU4OWM4MTRlODdjYTM2Nzk0NzdkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JKUy5wbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JKUy5wbQpAQCAtMzI2NSw3ICszMjY1LDcgQEAg
c3ViIFdyaXRlRGF0YQogICAgIH0KIAogICAgICRjb250ZW50cyAuPSBqb2luICIiLCBAaW1wbENv
bnRlbnQ7Ci0gICAgJGNvZGVHZW5lcmF0b3ItPlVwZGF0ZUZpbGVJZkNoYW5nZWQoJGltcGxGaWxl
TmFtZSwgJGNvbnRlbnRzKTsKKyAgICAkY29kZUdlbmVyYXRvci0+VXBkYXRlRmlsZSgkaW1wbEZp
bGVOYW1lLCAkY29udGVudHMpOwogCiAgICAgQGltcGxDb250ZW50SGVhZGVyID0gKCk7CiAgICAg
QGltcGxDb250ZW50ID0gKCk7CkBAIC0zMjkzLDcgKzMyOTMsNyBAQCBzdWIgV3JpdGVEYXRhCiAg
ICAgZm9yZWFjaCBteSAkaW5jbHVkZSAoc29ydCBAaW5jbHVkZXMpIHsKICAgICAgICAgJGNvbnRl
bnRzIC49ICIjaW5jbHVkZSAkaW5jbHVkZVxuIjsKICAgICB9Ci0gICAgJGNvZGVHZW5lcmF0b3It
PlVwZGF0ZUZpbGVJZkNoYW5nZWQoJGhlYWRlckZpbGVOYW1lLCAkY29udGVudHMpOworICAgICRj
b2RlR2VuZXJhdG9yLT5VcGRhdGVGaWxlKCRoZWFkZXJGaWxlTmFtZSwgJGNvbnRlbnRzKTsKIAog
ICAgIEBoZWFkZXJDb250ZW50SGVhZGVyID0gKCk7CiAgICAgQGhlYWRlckNvbnRlbnQgPSAoKTsK
QEAgLTMzMDMsNyArMzMwMyw3IEBAIHN1YiBXcml0ZURhdGEKICAgICBpZiAoQGRlcHNDb250ZW50
KSB7CiAgICAgICAgICMgVXBkYXRlIGEgLmRlcCBmaWxlIGlmIHRoZSBjb250ZW50cyBhcmUgY2hh
bmdlZC4KICAgICAgICAgJGNvbnRlbnRzID0gam9pbiAiIiwgQGRlcHNDb250ZW50OwotICAgICAg
ICAkY29kZUdlbmVyYXRvci0+VXBkYXRlRmlsZUlmQ2hhbmdlZCgkZGVwc0ZpbGVOYW1lLCAkY29u
dGVudHMpOworICAgICAgICAkY29kZUdlbmVyYXRvci0+VXBkYXRlRmlsZSgkZGVwc0ZpbGVOYW1l
LCAkY29udGVudHMpOwogCiAgICAgICAgIEBkZXBzQ29udGVudCA9ICgpOwogICAgIH0KZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvck9iakMu
cG0gYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JPYmpDLnBt
CmluZGV4IDExM2Y4YjM0ZGVmOTdiMjJlOGZjZTJmYzU2ZGJjMDhmZjdmZGFjMmQuLmFkZDgxZDI1
MmFmNTIzZTczZjE4Njk5M2YwYmE5NDQ5MWUwNGVlMGYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvck9iakMucG0KKysrIGIvU291cmNlL1dl
YkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9yT2JqQy5wbQpAQCAtMTc3OSw3ICsx
Nzc5LDcgQEAgc3ViIFdyaXRlRGF0YQogICAgIG15ICRoYXNGb3J3YXJkRGVjbGFyYXRpb25zID0g
a2V5cyglaGVhZGVyRm9yd2FyZERlY2xhcmF0aW9ucykgKyBrZXlzKCVoZWFkZXJGb3J3YXJkRGVj
bGFyYXRpb25zRm9yUHJvdG9jb2xzKTsKICAgICAkY29udGVudHMgLj0gIlxuIiBpZiAkaGFzRm9y
d2FyZERlY2xhcmF0aW9uczsKICAgICAkY29udGVudHMgLj0gam9pbiAiIiwgQGhlYWRlckNvbnRl
bnQ7Ci0gICAgJGNvZGVHZW5lcmF0b3ItPlVwZGF0ZUZpbGVJZkNoYW5nZWQoJGhlYWRlckZpbGVO
YW1lLCAkY29udGVudHMpOworICAgICRjb2RlR2VuZXJhdG9yLT5VcGRhdGVGaWxlKCRoZWFkZXJG
aWxlTmFtZSwgJGNvbnRlbnRzKTsKIAogICAgIEBoZWFkZXJDb250ZW50SGVhZGVyID0gKCk7CiAg
ICAgQGhlYWRlckNvbnRlbnQgPSAoKTsKQEAgLTE3OTQsNyArMTc5NCw3IEBAIHN1YiBXcml0ZURh
dGEKICAgICAgICAgJGhhc0ZvcndhcmREZWNsYXJhdGlvbnMgPSBrZXlzKCVwcml2YXRlSGVhZGVy
Rm9yd2FyZERlY2xhcmF0aW9ucykgKyBrZXlzKCVwcml2YXRlSGVhZGVyRm9yd2FyZERlY2xhcmF0
aW9uc0ZvclByb3RvY29scyk7CiAgICAgICAgICRjb250ZW50cyAuPSAiXG4iIGlmICRoYXNGb3J3
YXJkRGVjbGFyYXRpb25zOwogICAgICAgICAkY29udGVudHMgLj0gam9pbiAiIiwgQHByaXZhdGVI
ZWFkZXJDb250ZW50OwotICAgICAgICAkY29kZUdlbmVyYXRvci0+VXBkYXRlRmlsZUlmQ2hhbmdl
ZCgkcHJpdmF0ZUhlYWRlckZpbGVOYW1lLCAkY29udGVudHMpOworICAgICAgICAkY29kZUdlbmVy
YXRvci0+VXBkYXRlRmlsZSgkcHJpdmF0ZUhlYWRlckZpbGVOYW1lLCAkY29udGVudHMpOwogCiAg
ICAgICAgIEBwcml2YXRlSGVhZGVyQ29udGVudEhlYWRlciA9ICgpOwogICAgICAgICBAcHJpdmF0
ZUhlYWRlckNvbnRlbnQgPSAoKTsKQEAgLTE4MDcsNyArMTgwNyw3IEBAIHN1YiBXcml0ZURhdGEK
ICAgICAgICAgJGNvbnRlbnRzID0gam9pbiAiIiwgQGltcGxDb250ZW50SGVhZGVyOwogICAgICAg
ICBtYXAgeyAkY29udGVudHMgLj0gIiNpbXBvcnQgXCIkX1wiXG4iIH0gc29ydCBrZXlzKCVpbXBs
SW5jbHVkZXMpOwogICAgICAgICAkY29udGVudHMgLj0gam9pbiAiIiwgQGltcGxDb250ZW50Owot
ICAgICAgICAkY29kZUdlbmVyYXRvci0+VXBkYXRlRmlsZUlmQ2hhbmdlZCgkaW1wbEZpbGVOYW1l
LCAkY29udGVudHMpOworICAgICAgICAkY29kZUdlbmVyYXRvci0+VXBkYXRlRmlsZSgkaW1wbEZp
bGVOYW1lLCAkY29udGVudHMpOwogCiAgICAgICAgIEBpbXBsQ29udGVudEhlYWRlciA9ICgpOwog
ICAgICAgICBAaW1wbENvbnRlbnQgPSAoKTsKQEAgLTE4MTYsNyArMTgxNiw3IEBAIHN1YiBXcml0
ZURhdGEKIAogICAgIGlmIChAaW50ZXJuYWxIZWFkZXJDb250ZW50ID4gMCkgewogICAgICAgICAk
Y29udGVudHMgPSBqb2luICIiLCBAaW50ZXJuYWxIZWFkZXJDb250ZW50OwotICAgICAgICAkY29k
ZUdlbmVyYXRvci0+VXBkYXRlRmlsZUlmQ2hhbmdlZCgkaW50ZXJuYWxIZWFkZXJGaWxlTmFtZSwg
JGNvbnRlbnRzKTsKKyAgICAgICAgJGNvZGVHZW5lcmF0b3ItPlVwZGF0ZUZpbGUoJGludGVybmFs
SGVhZGVyRmlsZU5hbWUsICRjb250ZW50cyk7CiAKICAgICAgICAgQGludGVybmFsSGVhZGVyQ29u
dGVudCA9ICgpOwogICAgIH0KQEAgLTE4MjQsNyArMTgyNCw3IEBAIHN1YiBXcml0ZURhdGEKICAg
ICAjIFdyaXRlIGRlcGVuZGVuY3kgZmlsZS4KICAgICBpZiAoQGRlcHNDb250ZW50KSB7CiAgICAg
ICAgICRjb250ZW50cyA9IGpvaW4gIiIsIEBkZXBzQ29udGVudDsKLSAgICAgICAgJGNvZGVHZW5l
cmF0b3ItPlVwZGF0ZUZpbGVJZkNoYW5nZWQoJGRlcHNGaWxlTmFtZSwgJGNvbnRlbnRzKTsKKyAg
ICAgICAgJGNvZGVHZW5lcmF0b3ItPlVwZGF0ZUZpbGUoJGRlcHNGaWxlTmFtZSwgJGNvbnRlbnRz
KTsKIAogICAgICAgICBAZGVwc0NvbnRlbnQgPSAoKTsKICAgICB9CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JWOC5wbSBiL1NvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvclY4LnBtCmluZGV4IDQzMTUwY2Fj
ODBhZDNhZjkxNmEwMzUxYTgyMzdlNTZlYmM2ODkyNzEuLjhlMDRjZmNiNGM0ZDU1NTNhODkyY2Vh
MjIyNGMzMzRhNTg0NTcyMGUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Nj
cmlwdHMvQ29kZUdlbmVyYXRvclY4LnBtCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Nj
cmlwdHMvQ29kZUdlbmVyYXRvclY4LnBtCkBAIC0zODM1LDcgKzM4MzUsNyBAQCBzdWIgV3JpdGVE
YXRhCiAKICAgICAkY29udGVudHMgLj0gIlxuIjsKICAgICAkY29udGVudHMgLj0gam9pbiAiIiwg
QGltcGxDb250ZW50RGVjbHMsIEBpbXBsQ29udGVudDsKLSAgICAkY29kZUdlbmVyYXRvci0+VXBk
YXRlRmlsZUlmQ2hhbmdlZCgkaW1wbEZpbGVOYW1lLCAkY29udGVudHMpOworICAgICRjb2RlR2Vu
ZXJhdG9yLT5VcGRhdGVGaWxlKCRpbXBsRmlsZU5hbWUsICRjb250ZW50cyk7CiAKICAgICAlaW1w
bEluY2x1ZGVzID0gKCk7CiAgICAgQGltcGxGaXhlZEhlYWRlciA9ICgpOwpAQCAtMzg0NCw3ICsz
ODQ0LDcgQEAgc3ViIFdyaXRlRGF0YQogCiAgICAgIyBVcGRhdGUgYSAuaCBmaWxlIGlmIHRoZSBj
b250ZW50cyBhcmUgY2hhbmdlZC4KICAgICAkY29udGVudHMgPSBqb2luICIiLCBAaGVhZGVyQ29u
dGVudDsKLSAgICAkY29kZUdlbmVyYXRvci0+VXBkYXRlRmlsZUlmQ2hhbmdlZCgkaGVhZGVyRmls
ZU5hbWUsICRjb250ZW50cyk7CisgICAgJGNvZGVHZW5lcmF0b3ItPlVwZGF0ZUZpbGUoJGhlYWRl
ckZpbGVOYW1lLCAkY29udGVudHMpOwogCiAgICAgQGhlYWRlckNvbnRlbnQgPSAoKTsKIH0K
</data>

          </attachment>
      

    </bug>

</bugzilla>