⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 proj_tree_builder.cpp

📁 ncbi源码
💻 CPP
📖 第 1 页 / 共 4 页
字号:
                                      list<CProjKey>*     depends_ids){    depends_ids->clear();    ITERATE(list<string>, p, depends_libs)    {        const string& id = *p;        depends_ids->push_back(CProjKey(CProjKey::eLib, id));    }}bool SMakeProjectT::IsConfigurableDefine(const string& define){    return  NStr::StartsWith(define, "@")  &&            NStr::EndsWith  (define, "@");}string SMakeProjectT::StripConfigurableDefine(const string& define){    return IsConfigurableDefine(define) ?                 define.substr(1, define.length() - 2): "";}//-----------------------------------------------------------------------------void SAppProjectT::CreateNcbiCToolkitLibs(const CSimpleMakeFileContents& makefile,                                          list<string>* libs_list){    CSimpleMakeFileContents::TContents::const_iterator k =     makefile.m_Contents.find("NCBI_C_LIBS");    if (k == makefile.m_Contents.end()) {        return;    }    const list<string>& values = k->second;    ITERATE(list<string>, p, values) {        const string& val = *p;        if ( NStr::StartsWith(val, "-l") ) {            string lib_id = val.substr(2);            libs_list->push_back(lib_id);        } else {            libs_list->push_back(val);        }    }    libs_list->sort();    libs_list->unique();}CProjKey SAppProjectT::DoCreate(const string& source_base_dir,                                const string& proj_name,                                const string& applib_mfilepath,                                const TFiles& makeapp ,                                 CProjectItemsTree* tree){    CProjectItemsTree::TFiles::const_iterator m = makeapp.find(applib_mfilepath);    if (m == makeapp.end()) {        LOG_POST(Info << "No Makefile.*.app for Makefile.in :"                  + applib_mfilepath);        return CProjKey();    }        const CSimpleMakeFileContents& makefile = m->second;    CSimpleMakeFileContents::TContents::const_iterator k =         makefile.m_Contents.find("SRC");    if (k == makefile.m_Contents.end()) {        LOG_POST(Warning << "No SRC key in Makefile.*.app :"                  + applib_mfilepath);        return CProjKey();    }    //sources - relative  pathes from source_base_dir    //We'll create relative pathes from them    CProjSRCResolver src_resolver(applib_mfilepath,                                   source_base_dir, k->second);    list<string> sources;    src_resolver.ResolveTo(&sources);    //depends    list<string> depends;    k = makefile.m_Contents.find("LIB");    if (k != makefile.m_Contents.end())        depends = k->second;    //Adjust depends by information from msvc Makefile    CMsvcProjectMakefile project_makefile                       ((CDirEntry::ConcatPath                          (source_base_dir,                            CreateMsvcProjectMakefileName(proj_name,                                                          CProjKey::eApp))));    list<string> added_depends;    project_makefile.GetAdditionalLIB(SConfigInfo(), &added_depends);    list<string> excluded_depends;    project_makefile.GetExcludedLIB(SConfigInfo(), &excluded_depends);    list<string> adj_depends(depends);    copy(added_depends.begin(),          added_depends.end(), back_inserter(adj_depends));    adj_depends.sort();    adj_depends.unique();    PLibExclude pred(excluded_depends);    EraseIf(adj_depends, pred);    list<CProjKey> depends_ids;    SMakeProjectT::ConvertLibDepends(adj_depends, &depends_ids);    ///////////////////////////////////    //requires    list<string> requires;    k = makefile.m_Contents.find("REQUIRES");    if (k != makefile.m_Contents.end())        requires = k->second;    //project name    k = makefile.m_Contents.find("APP");    if (k == makefile.m_Contents.end()  ||                                             k->second.empty()) {        LOG_POST(Error << "No APP key or empty in Makefile.*.app :"                  + applib_mfilepath);        return CProjKey();    }    string proj_id = k->second.front();    //LIBS    list<string> libs_3_party;    k = makefile.m_Contents.find("LIBS");    if (k != makefile.m_Contents.end()) {        const list<string> libs_flags = k->second;        SMakeProjectT::Create3PartyLibs(libs_flags, &libs_3_party);    }        //CPPFLAGS    list<string> include_dirs;    list<string> defines;    k = makefile.m_Contents.find("CPPFLAGS");    if (k != makefile.m_Contents.end()) {        const list<string> cpp_flags = k->second;        SMakeProjectT::CreateIncludeDirs(cpp_flags,                                          source_base_dir, &include_dirs);        SMakeProjectT::CreateDefines(cpp_flags, &defines);    }    //NCBI_C_LIBS - Special case for NCBI C Toolkit    k = makefile.m_Contents.find("NCBI_C_LIBS");    list<string> ncbi_clibs;    if (k != makefile.m_Contents.end()) {        libs_3_party.push_back("NCBI_C_LIBS");        CreateNcbiCToolkitLibs(makefile, &ncbi_clibs);    }        CProjItem project(CProjKey::eApp,                       proj_name,                       proj_id,                      source_base_dir,                      sources,                       depends_ids,                      requires,                      libs_3_party,                      include_dirs,                      defines);    //    project.m_NcbiCLibs = ncbi_clibs;    //DATATOOL_SRC    k = makefile.m_Contents.find("DATATOOL_SRC");    if ( k != makefile.m_Contents.end() ) {        //Add depends from datatoool for ASN projects        project.m_Depends.push_back(CProjKey(CProjKey::eApp, GetApp().GetDatatoolId()));        const list<string> datatool_src_list = k->second;        ITERATE(list<string>, i, datatool_src_list) {            const string& src = *i;            //Will process .asn or .dtd files            string source_file_path =                 CDirEntry::ConcatPath(source_base_dir, src);            source_file_path = CDirEntry::NormalizePath(source_file_path);            if ( CDirEntry(source_file_path + ".asn").Exists() )                source_file_path += ".asn";            else if ( CDirEntry(source_file_path + ".dtd").Exists() )                source_file_path += ".dtd";            CDataToolGeneratedSrc data_tool_src;            CDataToolGeneratedSrc::LoadFrom(source_file_path, &data_tool_src);            if ( !data_tool_src.IsEmpty() )                project.m_DatatoolSources.push_back(data_tool_src);        }    }    CProjKey proj_key(CProjKey::eApp, proj_id);    tree->m_Projects[proj_key] = project;    return proj_key;}//-----------------------------------------------------------------------------CProjKey SLibProjectT::DoCreate(const string& source_base_dir,                                const string& proj_name,                                const string& applib_mfilepath,                                const TFiles& makelib ,                                 CProjectItemsTree* tree){    TFiles::const_iterator m = makelib.find(applib_mfilepath);    if (m == makelib.end()) {        LOG_POST(Info << "No Makefile.*.lib for Makefile.in :"                  + applib_mfilepath);        return CProjKey();    }    CSimpleMakeFileContents::TContents::const_iterator k =         m->second.m_Contents.find("SRC");    if (k == m->second.m_Contents.end()) {        LOG_POST(Warning << "No SRC key in Makefile.*.lib :"                  + applib_mfilepath);        return CProjKey();    }    // sources - relative pathes from source_base_dir    // We'll create relative pathes from them)    CProjSRCResolver src_resolver(applib_mfilepath,                                   source_base_dir, k->second);    list<string> sources;    src_resolver.ResolveTo(&sources);    // depends - TODO    list<CProjKey> depends_ids;    k = m->second.m_Contents.find("ASN_DEP");    if (k != m->second.m_Contents.end()) {        const list<string> depends = k->second;        SMakeProjectT::ConvertLibDepends(depends, &depends_ids);    }    //requires    list<string> requires;    k = m->second.m_Contents.find("REQUIRES");    if (k != m->second.m_Contents.end())        requires = k->second;    //project name    k = m->second.m_Contents.find("LIB");    if (k == m->second.m_Contents.end()  ||                                             k->second.empty()) {        LOG_POST(Error << "No LIB key or empty in Makefile.*.lib :"                  + applib_mfilepath);        return CProjKey();    }    string proj_id = k->second.front();    //LIBS    list<string> libs_3_party;    k = m->second.m_Contents.find("LIBS");    if (k != m->second.m_Contents.end()) {        const list<string> libs_flags = k->second;        SMakeProjectT::Create3PartyLibs(libs_flags, &libs_3_party);    }    //CPPFLAGS    list<string> include_dirs;    list<string> defines;    k = m->second.m_Contents.find("CPPFLAGS");    if (k != m->second.m_Contents.end()) {        const list<string> cpp_flags = k->second;        SMakeProjectT::CreateIncludeDirs(cpp_flags,                                          source_base_dir, &include_dirs);        SMakeProjectT::CreateDefines(cpp_flags, &defines);    }    CProjKey proj_key(CProjKey::eLib, proj_id);    tree->m_Projects[proj_key] = CProjItem(CProjKey::eLib,                                           proj_name,                                            proj_id,                                           source_base_dir,                                           sources,                                            depends_ids,                                           requires,                                           libs_3_party,                                           include_dirs,                                           defines);    return proj_key;}//-----------------------------------------------------------------------------CProjKey SAsnProjectT::DoCreate(const string& source_base_dir,                                const string& proj_name,                                const string& applib_mfilepath,                                const TFiles& makeapp,                                 const TFiles& makelib,                                 CProjectItemsTree* tree){    TAsnType asn_type = GetAsnProjectType(applib_mfilepath, makeapp, makelib);    if (asn_type == eMultiple) {        return SAsnProjectMultipleT::DoCreate(source_base_dir,                                              proj_name,                                              applib_mfilepath,                                              makeapp,                                               makelib,                                               tree);    }    if(asn_type == eSingle) {        return SAsnProjectSingleT::DoCreate(source_base_dir,                                              proj_name,                                              applib_mfilepath,                                              makeapp,                                               makelib,                                               tree);    }    LOG_POST(Error << "Unsupported ASN project" + NStr::IntToString(asn_type));    return CProjKey();}SAsnProjectT::TAsnType SAsnProjectT::GetAsnProjectType(const string& applib_mfilepath,                                                       const TFiles& makeapp,                                                       const TFiles& makelib){    TFiles::const_iterator p = makeapp.find(applib_mfilepath);    if ( p != makeapp.end() ) {        const CSimpleMakeFileContents& fc = p->second;        if (fc.m_Contents.find("ASN") != fc.m_Contents.end() )            return eMultiple;        else            return eSingle;    }    p = makelib.find(applib_mfilepath);    if ( p != makelib.end() ) {        const CSimpleMakeFileContents& fc = p->second;        if (fc.m_Contents.find("ASN") != fc.m_Contents.end() )            return eMultiple;        else            return eSingle;    }    LOG_POST(Error << "Can not define ASN project: " + applib_mfilepath);    return eNoAsn;}//-----------------------------------------------------------------------------CProjKey SAsnProjectSingleT::DoCreate(const string& source_base_dir,

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -