|  | @@ -2835,10 +2835,31 @@ const char* cmake::GetCPackCommand()
 | 
	
		
			
				|  |  |      return this->CPackCommand.c_str();
 | 
	
		
			
				|  |  |  }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -// for target deps
 | 
	
		
			
				|  |  | -#define DOT_DEP_TARGET 1
 | 
	
		
			
				|  |  | -#define DOT_DEP_EXTERNAL 2
 | 
	
		
			
				|  |  | -#define DOT_DEP_NONE 0
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +static const char* getShapeForTarget(const cmTarget* target)
 | 
	
		
			
				|  |  | +{
 | 
	
		
			
				|  |  | +  if (!target)
 | 
	
		
			
				|  |  | +    {
 | 
	
		
			
				|  |  | +    return "ellipse";
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +  switch ( target->GetType() )
 | 
	
		
			
				|  |  | +    {
 | 
	
		
			
				|  |  | +    case cmTarget::EXECUTABLE:
 | 
	
		
			
				|  |  | +      return "house";
 | 
	
		
			
				|  |  | +    case cmTarget::STATIC_LIBRARY:
 | 
	
		
			
				|  |  | +      return "diamond";
 | 
	
		
			
				|  |  | +    case cmTarget::SHARED_LIBRARY:
 | 
	
		
			
				|  |  | +      return "polygon";
 | 
	
		
			
				|  |  | +    case cmTarget::MODULE_LIBRARY:
 | 
	
		
			
				|  |  | +      return "octagon";
 | 
	
		
			
				|  |  | +    default:
 | 
	
		
			
				|  |  | +      break;
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +  return "box";
 | 
	
		
			
				|  |  | +}
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  void cmake::GenerateGraphViz(const char* fileName) const
 | 
	
		
			
				|  |  |  {
 | 
	
	
		
			
				|  | @@ -2910,7 +2931,6 @@ void cmake::GenerateGraphViz(const char* fileName) const
 | 
	
		
			
				|  |  |    const std::vector<cmLocalGenerator*>& localGenerators =
 | 
	
		
			
				|  |  |        gg->GetLocalGenerators();
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -  std::map<cmStdString, int> targetDeps;
 | 
	
		
			
				|  |  |    std::map<cmStdString, const cmTarget*> targetPtrs;
 | 
	
		
			
				|  |  |    std::map<cmStdString, cmStdString> targetNamesNodes; // maps from the actual strings to node names in dot
 | 
	
		
			
				|  |  |    int cnt = 0;
 | 
	
	
		
			
				|  | @@ -2918,64 +2938,20 @@ void cmake::GenerateGraphViz(const char* fileName) const
 | 
	
		
			
				|  |  |                         graphNodePrefix);
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |    cnt += getAllExternalLibs(ignoreTargetsSet, targetNamesNodes, targetPtrs,
 | 
	
		
			
				|  |  | -                            targetDeps, graphNodePrefix);
 | 
	
		
			
				|  |  | +                            graphNodePrefix);
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |    // Write out nodes
 | 
	
		
			
				|  |  | -  for(std::map<cmStdString, int>::const_iterator depIt = targetDeps.begin();
 | 
	
		
			
				|  |  | -      depIt != targetDeps.end();
 | 
	
		
			
				|  |  | -      ++ depIt )
 | 
	
		
			
				|  |  | +  for(std::map<cmStdString, const cmTarget*>::const_iterator tarIt =
 | 
	
		
			
				|  |  | +         targetPtrs.begin(); tarIt != targetPtrs.end(); ++ tarIt )
 | 
	
		
			
				|  |  |      {
 | 
	
		
			
				|  |  | -    const char* newTargetName = depIt->first.c_str();
 | 
	
		
			
				|  |  | -    std::map<cmStdString, cmStdString>::const_iterator tarIt =
 | 
	
		
			
				|  |  | +    const char* newTargetName = tarIt->first.c_str();
 | 
	
		
			
				|  |  | +    std::map<cmStdString, cmStdString>::const_iterator nameIt =
 | 
	
		
			
				|  |  |                                            targetNamesNodes.find(newTargetName);
 | 
	
		
			
				|  |  | -    if ( tarIt == targetNamesNodes.end() )
 | 
	
		
			
				|  |  | -      {
 | 
	
		
			
				|  |  | -      // We should not be here.
 | 
	
		
			
				|  |  | -      std::cout << __LINE__ << " Cannot find library: " << newTargetName
 | 
	
		
			
				|  |  | -                << " even though it was added in the previous pass"
 | 
	
		
			
				|  |  | -                << std::endl;
 | 
	
		
			
				|  |  | -      abort();
 | 
	
		
			
				|  |  | -      }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -    str << "    \"" << tarIt->second.c_str() << "\" [ label=\""
 | 
	
		
			
				|  |  | -        << newTargetName <<  "\" shape=\"";
 | 
	
		
			
				|  |  | -    if ( depIt->second == DOT_DEP_TARGET )
 | 
	
		
			
				|  |  | -      {
 | 
	
		
			
				|  |  | -      std::map<cmStdString, const cmTarget*>::const_iterator tarTypeIt =
 | 
	
		
			
				|  |  | -                                                targetPtrs.find(newTargetName);
 | 
	
		
			
				|  |  | -      if ( tarTypeIt == targetPtrs.end() )
 | 
	
		
			
				|  |  | -        {
 | 
	
		
			
				|  |  | -        // We should not be here.
 | 
	
		
			
				|  |  | -        std::cout << __LINE__ << " Cannot find library: " << newTargetName
 | 
	
		
			
				|  |  | -                  << " even though it was added in the previous pass"
 | 
	
		
			
				|  |  | -                  << std::endl;
 | 
	
		
			
				|  |  | -        abort();
 | 
	
		
			
				|  |  | -        }
 | 
	
		
			
				|  |  | -      const cmTarget* tg = tarTypeIt->second;
 | 
	
		
			
				|  |  | -      switch ( tg->GetType() )
 | 
	
		
			
				|  |  | -        {
 | 
	
		
			
				|  |  | -      case cmTarget::EXECUTABLE:
 | 
	
		
			
				|  |  | -        str << "house";
 | 
	
		
			
				|  |  | -        break;
 | 
	
		
			
				|  |  | -      case cmTarget::STATIC_LIBRARY:
 | 
	
		
			
				|  |  | -        str << "diamond";
 | 
	
		
			
				|  |  | -        break;
 | 
	
		
			
				|  |  | -      case cmTarget::SHARED_LIBRARY:
 | 
	
		
			
				|  |  | -        str << "polygon";
 | 
	
		
			
				|  |  | -        break;
 | 
	
		
			
				|  |  | -      case cmTarget::MODULE_LIBRARY:
 | 
	
		
			
				|  |  | -        str << "octagon";
 | 
	
		
			
				|  |  | -        break;
 | 
	
		
			
				|  |  | -      default:
 | 
	
		
			
				|  |  | -        str << "box";
 | 
	
		
			
				|  |  | -        }
 | 
	
		
			
				|  |  | -      }
 | 
	
		
			
				|  |  | -    else
 | 
	
		
			
				|  |  | -      {
 | 
	
		
			
				|  |  | -      str << "ellipse";
 | 
	
		
			
				|  |  | -      }
 | 
	
		
			
				|  |  | -    str << "\"];" << std::endl;
 | 
	
		
			
				|  |  | +    str << "    \"" << nameIt->second.c_str() << "\" [ label=\""
 | 
	
		
			
				|  |  | +        << newTargetName <<  "\" shape=\"" << getShapeForTarget(tarIt->second)
 | 
	
		
			
				|  |  | +        << "\"];" << std::endl;
 | 
	
		
			
				|  |  |      }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |    // Now generate the connectivity
 | 
	
	
		
			
				|  | @@ -2989,13 +2965,13 @@ void cmake::GenerateGraphViz(const char* fileName) const
 | 
	
		
			
				|  |  |           tit != targets->end();
 | 
	
		
			
				|  |  |           ++ tit )
 | 
	
		
			
				|  |  |        {
 | 
	
		
			
				|  |  | -      std::map<cmStdString, int>::iterator dependIt
 | 
	
		
			
				|  |  | -                                         = targetDeps.find(tit->first.c_str());
 | 
	
		
			
				|  |  | -      if ( dependIt == targetDeps.end() )
 | 
	
		
			
				|  |  | +      std::map<cmStdString, const cmTarget* >::iterator cmakeTarIt
 | 
	
		
			
				|  |  | +                                         = targetPtrs.find(tit->first.c_str());
 | 
	
		
			
				|  |  | +      if ( cmakeTarIt == targetPtrs.end() ) // skip ignored targets
 | 
	
		
			
				|  |  |          {
 | 
	
		
			
				|  |  |          continue;
 | 
	
		
			
				|  |  |          }
 | 
	
		
			
				|  |  | -      std::map<cmStdString, cmStdString>::iterator cmakeTarIt =
 | 
	
		
			
				|  |  | +      std::map<cmStdString, cmStdString>::iterator targetNameIt =
 | 
	
		
			
				|  |  |                                       targetNamesNodes.find(tit->first.c_str());
 | 
	
		
			
				|  |  |        const cmTarget::LinkLibraryVectorType* ll =
 | 
	
		
			
				|  |  |                                       &(tit->second.GetOriginalLinkLibraries());
 | 
	
	
		
			
				|  | @@ -3005,17 +2981,17 @@ void cmake::GenerateGraphViz(const char* fileName) const
 | 
	
		
			
				|  |  |             ++ llit )
 | 
	
		
			
				|  |  |          {
 | 
	
		
			
				|  |  |          const char* libName = llit->first.c_str();
 | 
	
		
			
				|  |  | -        std::map<cmStdString, cmStdString>::const_iterator tarIt =
 | 
	
		
			
				|  |  | +        std::map<cmStdString, cmStdString>::const_iterator libNameIt =
 | 
	
		
			
				|  |  |                                                  targetNamesNodes.find(libName);
 | 
	
		
			
				|  |  | -        if ( tarIt == targetNamesNodes.end() )
 | 
	
		
			
				|  |  | +        if ( libNameIt == targetNamesNodes.end() )
 | 
	
		
			
				|  |  |            {
 | 
	
		
			
				|  |  |            // We should not be here.
 | 
	
		
			
				|  |  |            std::cout << __LINE__ << " Cannot find library: " << libName
 | 
	
		
			
				|  |  |              << " even though it was added in the previous pass" << std::endl;
 | 
	
		
			
				|  |  |            abort();
 | 
	
		
			
				|  |  |            }
 | 
	
		
			
				|  |  | -        str << "    \"" << cmakeTarIt->second.c_str() << "\" -> \""
 | 
	
		
			
				|  |  | -            << tarIt->second.c_str() << "\"" << std::endl;
 | 
	
		
			
				|  |  | +        str << "    \"" << targetNameIt->second.c_str() << "\" -> \""
 | 
	
		
			
				|  |  | +            << libNameIt->second.c_str() << "\"" << std::endl;
 | 
	
		
			
				|  |  |          }
 | 
	
		
			
				|  |  |        }
 | 
	
		
			
				|  |  |      }
 | 
	
	
		
			
				|  | @@ -3068,7 +3044,6 @@ int cmake::getAllTargets(const std::set<cmStdString>& ignoreTargetsSet,
 | 
	
		
			
				|  |  |  int cmake::getAllExternalLibs(const std::set<cmStdString>& ignoreTargetsSet,
 | 
	
		
			
				|  |  |                            std::map<cmStdString, cmStdString>& targetNamesNodes,
 | 
	
		
			
				|  |  |                            std::map<cmStdString, const cmTarget*>& targetPtrs,
 | 
	
		
			
				|  |  | -                          std::map<cmStdString, int>& targetDeps,
 | 
	
		
			
				|  |  |                            const char* graphNodePrefix) const
 | 
	
		
			
				|  |  |  {
 | 
	
		
			
				|  |  |    int cnt = 0;
 | 
	
	
		
			
				|  | @@ -3094,11 +3069,6 @@ int cmake::getAllExternalLibs(const std::set<cmStdString>& ignoreTargetsSet,
 | 
	
		
			
				|  |  |          }
 | 
	
		
			
				|  |  |        const cmTarget::LinkLibraryVectorType* ll =
 | 
	
		
			
				|  |  |                                       &(tit->second.GetOriginalLinkLibraries());
 | 
	
		
			
				|  |  | -      if ( ll->size() > 0 )
 | 
	
		
			
				|  |  | -        {
 | 
	
		
			
				|  |  | -        targetDeps[realTargetName] = DOT_DEP_TARGET;
 | 
	
		
			
				|  |  | -        fprintf(stderr, " + %s\n", realTargetName);
 | 
	
		
			
				|  |  | -        }
 | 
	
		
			
				|  |  |        for (cmTarget::LinkLibraryVectorType::const_iterator llit = ll->begin();
 | 
	
		
			
				|  |  |             llit != ll->end();
 | 
	
		
			
				|  |  |             ++ llit )
 | 
	
	
		
			
				|  | @@ -3110,26 +3080,17 @@ int cmake::getAllExternalLibs(const std::set<cmStdString>& ignoreTargetsSet,
 | 
	
		
			
				|  |  |            continue;
 | 
	
		
			
				|  |  |            }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -        std::map<cmStdString, cmStdString>::const_iterator tarIt =
 | 
	
		
			
				|  |  | -                                                targetNamesNodes.find(libName);
 | 
	
		
			
				|  |  | -        if ( tarIt == targetNamesNodes.end() )
 | 
	
		
			
				|  |  | +        std::map<cmStdString, const cmTarget*>::const_iterator tarIt =
 | 
	
		
			
				|  |  | +                                                      targetPtrs.find(libName);
 | 
	
		
			
				|  |  | +        if ( tarIt == targetPtrs.end() )
 | 
	
		
			
				|  |  |            {
 | 
	
		
			
				|  |  |            cmOStringStream ostr;
 | 
	
		
			
				|  |  |            ostr << graphNodePrefix << cnt++;
 | 
	
		
			
				|  |  | -          targetDeps[libName] = DOT_DEP_EXTERNAL;
 | 
	
		
			
				|  |  |            targetNamesNodes[libName] = ostr.str();
 | 
	
		
			
				|  |  | +          targetPtrs[libName] = NULL;
 | 
	
		
			
				|  |  |            //str << "    \"" << ostr.c_str() << "\" [ label=\"" << libName
 | 
	
		
			
				|  |  |            //<<  "\" shape=\"ellipse\"];" << std::endl;
 | 
	
		
			
				|  |  |            }
 | 
	
		
			
				|  |  | -        else
 | 
	
		
			
				|  |  | -          {
 | 
	
		
			
				|  |  | -          std::map<cmStdString, int>::const_iterator depIt =
 | 
	
		
			
				|  |  | -                                                      targetDeps.find(libName);
 | 
	
		
			
				|  |  | -          if ( depIt == targetDeps.end() )
 | 
	
		
			
				|  |  | -            {
 | 
	
		
			
				|  |  | -            targetDeps[libName] = DOT_DEP_TARGET;
 | 
	
		
			
				|  |  | -            }
 | 
	
		
			
				|  |  | -          }
 | 
	
		
			
				|  |  |          }
 | 
	
		
			
				|  |  |        }
 | 
	
		
			
				|  |  |      }
 |