@@ -578,22 +578,25 @@ def signature(self):
578578 try : return self .cache_sig [0 ]
579579 except AttributeError : pass
580580
581- m = md5 ()
581+ self . m = md5 ()
582582
583583 # explicit deps
584584 exp_sig = self .sig_explicit_deps ()
585- m .update (exp_sig )
586-
587- # implicit deps
588- imp_sig = self .scan and self .sig_implicit_deps () or SIG_NIL
589- m .update (imp_sig )
590585
591586 # env vars
592587 var_sig = self .sig_vars ()
593- m .update (var_sig )
588+
589+ # implicit deps
590+
591+ imp_sig = SIG_NIL
592+ if self .scan :
593+ try :
594+ imp_sig = self .sig_implicit_deps ()
595+ except ValueError :
596+ return self .signature ()
594597
595598 # we now have the signature (first element) and the details (for debugging)
596- ret = m .digest ()
599+ ret = self . m .digest ()
597600 self .cache_sig = (ret , exp_sig , imp_sig , var_sig )
598601 return ret
599602
@@ -771,7 +774,7 @@ def v(x):
771774
772775 def sig_explicit_deps (self ):
773776 bld = self .generator .bld
774- m = md5 ()
777+ up = self . m . update
775778
776779 # the inputs
777780 for x in self .inputs + getattr (self , 'dep_nodes' , []):
@@ -780,7 +783,7 @@ def sig_explicit_deps(self):
780783
781784 variant = x .variant (self .env )
782785 try :
783- m . update (bld .node_sigs [variant ][x .id ])
786+ up (bld .node_sigs [variant ][x .id ])
784787 except KeyError :
785788 raise Utils .WafError ('Missing node signature for %r (required by %r)' % (x , self ))
786789
@@ -803,29 +806,28 @@ def sig_explicit_deps(self):
803806 raise Utils .WafError ('Missing node signature for %r (required by %r)' % (v , self ))
804807 elif hasattr (v , '__call__' ):
805808 v = v () # dependency is a function, call it
806- m . update (v )
809+ up (v )
807810
808811 for x in self .deps_nodes :
809812 v = bld .node_sigs [x .variant (self .env )][x .id ]
810- m . update (v )
813+ up (v )
811814
812- return m .digest ()
815+ return self . m .digest ()
813816
814817 def sig_vars (self ):
815- m = md5 ()
816818 bld = self .generator .bld
817819 env = self .env
818820
819821 # dependencies on the environment vars
820822 act_sig = bld .hash_env_vars (env , self .__class__ .vars )
821- m .update (act_sig )
823+ self . m .update (act_sig )
822824
823825 # additional variable dependencies, if provided
824826 dep_vars = getattr (self , 'dep_vars' , None )
825827 if dep_vars :
826- m .update (bld .hash_env_vars (env , dep_vars ))
828+ self . m .update (bld .hash_env_vars (env , dep_vars ))
827829
828- return m .digest ()
830+ return self . m .digest ()
829831
830832 #def scan(self, node):
831833 # """this method returns a tuple containing:
@@ -852,6 +854,8 @@ def sig_implicit_deps(self):
852854 return prev_sigs [2 ]
853855 except (KeyError , OSError ):
854856 pass
857+ del bld .task_sigs [key ]
858+ raise ValueError ('rescan' )
855859
856860 # no previous run or the signature of the dependencies has changed, rescan the dependencies
857861 (nodes , names ) = self .scan ()
@@ -878,8 +882,7 @@ def compute_sig_implicit_deps(self):
878882 """it is intended for .cpp and inferred .h files
879883 there is a single list (no tree traversal)
880884 this is the hot spot so ... do not touch"""
881- m = md5 ()
882- upd = m .update
885+ upd = self .m .update
883886
884887 bld = self .generator .bld
885888 tstamp = bld .node_sigs
@@ -897,7 +900,7 @@ def compute_sig_implicit_deps(self):
897900 else :
898901 upd (tstamp [env .variant ()][k .id ])
899902
900- return m .digest ()
903+ return self . m .digest ()
901904
902905def funex (c ):
903906 dc = {}
@@ -1132,7 +1135,7 @@ def extract_deps(tasks):
11321135 except : # this is on purpose
11331136 pass
11341137
1135- variant = x .env .variant ()
1138+ v = x .env .variant ()
11361139 key = x .unique_id ()
11371140 for k in x .generator .bld .node_deps .get (x .unique_id (), []):
11381141 try : dep_to_task [(v , k .id )].append (x )
0 commit comments