@@ -1094,6 +1094,7 @@ def set_dependencies(self):
10941094
10951095 provides = {}
10961096 requires = {}
1097+ optional = {}
10971098
10981099 for group in self .config ['groups' ]:
10991100 for comp in group ['components' ]:
@@ -1126,12 +1127,32 @@ def set_dependencies(self):
11261127 else :
11271128 self .logger .warn ("%s has an empty requires list!" % comp ['id' ])
11281129
1130+ if 'optional-requires' in comp :
1131+ if comp .get ('optional-requires' ):
1132+ for entry in comp .get ('optional-requires' ):
1133+ if optional .get (entry ):
1134+ optional [entry ].append (comp ['id' ])
1135+ else :
1136+ optional [entry ] = [comp ['id' ]]
1137+ else :
1138+ self .logger .warn ("%s has an empty optional requires list!" % comp ['id' ])
1139+
1140+ met_optionals = [k for k in optional if k in provides ]
11291141 unmet = [k for k in requires if k not in provides ]
11301142
11311143 if len (unmet ) > 0 :
11321144 self .logger .critical ("Unmet requirements were detected! %s" % unmet )
11331145 unmet_deps = True
11341146
1147+ if len (optional ) > 0 :
1148+ self .logger .debug ("Detected the following optional requirements available: %s" % met_optionals )
1149+
1150+ for entry in met_optionals :
1151+ if requires .get (entry ):
1152+ requires [entry ].extend (optional [entry ])
1153+ else :
1154+ requires [entry ] = optional [entry ]
1155+
11351156 # Add a pseudo node that depends on all other nodes, to get a starting point to be able to iterate through all
11361157 # nodes with simple algorithms
11371158 master_node = Node ({'id' : 'master_node' })
0 commit comments