+ // in order to register the configurations in the correct sequence
+ // all agents need to be ordered with respect to the required
+ // libraries. Ordering relies on the naming convention
+ // libAliHLT<Module>.so
+ TList agents;
+ for (pAgent=AliHLTModuleAgent::GetFirstAgent();
+ pAgent && iResult>=0;
+ pAgent=AliHLTModuleAgent::GetNextAgent()) {
+ AliHLTModuleAgent* pPrevDep=NULL;
+ TString dependencies=pAgent->GetRequiredComponentLibraries();
+ TObjArray* pTokens=dependencies.Tokenize(" ");
+ if (pTokens) {
+ for (int n=0; n<pTokens->GetEntriesFast(); n++) {
+ TString module=((TObjString*)pTokens->At(n))->GetString();
+ HLTDebug(" checking %s", module.Data());
+ module.ReplaceAll("libAliHLT", "");
+ module.ReplaceAll(".so", "");
+
+ for (AliHLTModuleAgent* pCurrent=dynamic_cast<AliHLTModuleAgent*>(pPrevDep==NULL?agents.First():agents.After(pPrevDep));
+ pCurrent!=NULL; pCurrent=dynamic_cast<AliHLTModuleAgent*>(agents.After(pCurrent))) {
+ HLTDebug(" checking %s == %s", module.Data(), pCurrent->GetModuleId());
+
+ if (module.CompareTo(pCurrent->GetModuleId())==0) {
+ pPrevDep=pCurrent;
+ break;
+ }
+ }
+ }
+ delete pTokens;
+ }
+
+ if (pPrevDep) {
+ // insert right after the last dependency
+ agents.AddAfter(pPrevDep, pAgent);
+ HLTDebug("insert %s after %s", pAgent->GetModuleId(), pPrevDep->GetModuleId());
+ } else {
+ // insert at the beginning
+ agents.AddFirst(pAgent);
+ HLTDebug("insert %s at beginning", pAgent->GetModuleId());
+ }
+ }
+
+ // now we load the configurations
+ if (agents.GetEntries()) {
+ TIter next(&agents);
+ while ((pAgent = dynamic_cast<AliHLTModuleAgent*>(next()))) {
+ HLTDebug("load configurations for agent %s (%p)", pAgent->GetName(), pAgent);
+ pAgent->CreateConfigurations(fpConfigurationHandler, rawReader, runloader);
+ }
+ }
+