// GetAssemblyResourceFiles //------------------------------------------------------------------------------ void LinkerNode::GetAssemblyResourceFiles( Args & fullArgs, const AString & pre, const AString & post ) const { const Dependency * start = m_StaticDependencies.Begin() + m_AssemblyResourcesStartIndex; const Dependency * end = start + m_AssemblyResourcesNum; for ( const Dependency * i = start; i != end; ++i ) { Node * n( i->GetNode() ); if ( n->GetType() == Node::OBJECT_LIST_NODE ) { ObjectListNode * oln = n->CastTo< ObjectListNode >(); oln->GetInputFiles( fullArgs, pre, post, false ); continue; } if ( n->GetType() == Node::LIBRARY_NODE ) { LibraryNode * ln = n->CastTo< LibraryNode >(); ln->GetInputFiles( fullArgs, pre, post, false ); continue; } fullArgs += pre; fullArgs += n->GetName(); fullArgs += post; fullArgs.AddDelimiter(); } }
// GetAssemblyResourceFiles //------------------------------------------------------------------------------ void LinkerNode::GetAssemblyResourceFiles( Args & fullArgs, const AString & pre, const AString & post ) const { const Dependency * const end = m_AssemblyResources.End(); for ( Dependencies::Iter i = m_AssemblyResources.Begin(); i != end; i++ ) { Node * n( i->GetNode() ); if ( n->GetType() == Node::OBJECT_LIST_NODE ) { ObjectListNode * oln = n->CastTo< ObjectListNode >(); oln->GetInputFiles( fullArgs, pre, post ); continue; } if ( n->GetType() == Node::LIBRARY_NODE ) { LibraryNode * ln = n->CastTo< LibraryNode >(); ln->GetInputFiles( fullArgs, pre, post ); continue; } fullArgs += pre; fullArgs += n->GetName(); fullArgs += post; fullArgs.AddDelimiter(); } }
// GetInputFiles //------------------------------------------------------------------------------ void LinkerNode::GetInputFiles( Node * n, Args & fullArgs, const AString & pre, const AString & post ) const { if ( n->GetType() == Node::LIBRARY_NODE ) { const bool linkObjectsInsteadOfLibs = m_LinkerLinkObjects; if ( linkObjectsInsteadOfLibs ) { LibraryNode * ln = n->CastTo< LibraryNode >(); ln->GetInputFiles( fullArgs, pre, post, linkObjectsInsteadOfLibs ); } else { // not building a DLL, so link the lib directly fullArgs += pre; fullArgs += n->GetName(); fullArgs += post; } } else if ( n->GetType() == Node::OBJECT_LIST_NODE ) { const bool linkObjectsInsteadOfLibs = m_LinkerLinkObjects; ObjectListNode * ol = n->CastTo< ObjectListNode >(); ol->GetInputFiles( fullArgs, pre, post, linkObjectsInsteadOfLibs ); } else if ( n->GetType() == Node::DLL_NODE ) { // for a DLL, link to the import library DLLNode * dllNode = n->CastTo< DLLNode >(); AStackString<> importLibName; dllNode->GetImportLibName( importLibName ); fullArgs += pre; fullArgs += importLibName; fullArgs += post; } else if ( n->GetType() == Node::COPY_FILE_NODE ) { CopyFileNode * copyNode = n->CastTo< CopyFileNode >(); Node * srcNode = copyNode->GetSourceNode(); GetInputFiles( srcNode, fullArgs, pre, post ); } else { // link anything else directly fullArgs += pre; fullArgs += n->GetName(); fullArgs += post; } fullArgs.AddDelimiter(); }