80 const string& src_rel = *p;
97 GetApp().GetRegSettings().m_CompilersSubdir);
100 GetApp().GetBuildType().GetTypeStr());
103 GetApp().GetRegSettings().m_ProjectsSubdir);
107 (
GetApp().GetProjectTreeInfo().m_Src,
112 if (lib_dir.empty()) {
115 GetApp().GetRegSettings().m_CompilersSubdir);
118 GetApp().GetBuildType().GetTypeStr());
128 string t, try_dir, inc_dir;
131 GetApp().GetConfig().
Get(
"ProjectTree",
"include"));
147 const string& src_rel = *p;
160 include_dirs.
insert(incl_dir);
165 GetApp().GetProjectTreeInfo().m_Impl);
167 include_dirs.
insert(impl_dir);
173 list<string> headers_in_include;
174 list<string> inlines_in_include;
176 list<string>::const_iterator h, hs;
179 for (
i = include_dirs.
begin();
i != include_dirs.
end(); ++
i) {
180 for (h = headers_in_include.begin(); h != headers_in_include.end(); ++h) {
183 for (h = inlines_in_include.begin(); h != inlines_in_include.end(); ++h) {
187 list<string> headers_in_src;
188 list<string> inlines_in_src;
192 for (h = headers_in_src.begin(); h != headers_in_src.end(); ++h) {
195 for (h = inlines_in_src.begin(); h != inlines_in_src.end(); ++h) {
214 list<string> installed_3party;
218 const string& lib_id = *p;
219 if (
GetApp().GetSite().IsLibWithChoice(lib_id) ) {
226 ITERATE(list<string>,
i, installed_3party) {
227 const string& component = *
i;
229 ITERATE(list<SConfigInfo>, j,
GetApp().GetRegSettings().m_ConfigInfo) {
233 if (find( lib_info.
m_Macro.begin(), lib_info.
m_Macro.end(), lib_id) ==
259 if (
GetApp().GetIncompleteBuildTree()) {
261 if (
GetApp().GetIncompleteBuildTree()->m_Projects.find(proj_key) ==
262 GetApp().GetIncompleteBuildTree()->m_Projects.end()) {
265 }
else if (curr_tree) {
269 bool depfound =
false;
301 list<string> add_include_dirs_list;
305 if (!
GetApp().m_IncDir.empty()) {
308 add_include_dirs_list.push_back( config_inc );
312 string tree_inc_abs(
GetApp().GetProjectTreeInfo().m_Include);
315 add_include_dirs_list.push_back( tree_inc );
325 const string& dir_abs = *p;
326 if (dir_abs == tree_inc_abs) {
333 dirs.push_back(dir_abs);
335 for (list<string>::const_iterator
i = dirs.begin();
i != dirs.end(); ++
i) {
338 add_include_dirs_list.push_back(
347 list<string> makefile_add_incl_dirs;
349 &makefile_add_incl_dirs);
351 ITERATE(list<string>, p, makefile_add_incl_dirs) {
352 const string& dir = *p;
360 add_include_dirs_list.push_back(dir_abs);
364 list<string> libs_list;
366 ITERATE(list<string>, p, libs_list) {
368 for (list<string>::const_iterator
i = dirs.begin();
i != dirs.end(); ++
i) {
370 if ( !dir.empty() ) {
374 if (find(add_include_dirs_list.begin(),
375 add_include_dirs_list.end(), dir) !=add_include_dirs_list.end()) {
378 add_include_dirs_list.push_back(dir);
387 GetApp().GetConfig().
Get(
"ProjectTree",
"include"));
396 add_include_dirs_list.push_back( ext_inc );
403 return NStr::Join(add_include_dirs_list,
";");
410 list<string> additional_libs;
414 list<string> libs_list;
416 ITERATE(list<string>, p, libs_list) {
417 const string& reqs = *p;
418 if (
site.Is3PartyLibWithChoice(reqs)) {
424 site.GetLibInfo(reqs, cfg_info, &lib_info);
425 if (
site.IsLibOk(lib_info) &&
426 GetApp().GetSite().IsLibEnabledInConfig(reqs, cfg_info)) {
427 if ( !lib_info.
m_Libs.empty() ) {
429 back_inserter(additional_libs));
433 back_inserter(additional_libs));
439 <<
" unavailable: missing additional libraries: "
448 string ncbi_lib = *p +
".lib";
449 additional_libs.push_back(ncbi_lib);
471 if (!
GetApp().m_BuildRoot.empty()) {
473 "Library not found: " << lib_path);
476 "Library not found: " << lib_path);
479 additional_libs.push_back(lib.
GetName());
486 additional_libs.sort();
487 additional_libs.unique();
493 string CMsvcPrjProjectContext::AdditionalLibrarianOptions
503 list<string> dir_list;
528 list<string> libs_list;
530 ITERATE(list<string>, p, libs_list) {
531 const string& reqs = *p;
532 if (
site.Is3PartyLibWithChoice(reqs)) {
538 site.GetLibInfo(reqs, cfg_info, &lib_info);
539 if (
site.IsLibOk(lib_info) &&
540 site.IsLibEnabledInConfig(reqs, cfg_info) ) {
548 <<
" unavailable: library folder ignored: "
566 const string& lib = *p;
567 list<string> components;
569 copy(components.begin(),
570 components.end(), back_inserter(*libs_list));
588 GetApp().GetRegSettings().m_CompilersSubdir);
592 (
const_cast<unique_ptr<CMsvcCombinedProjectMakefile>&
>
606 const string& reqs = *p;
607 if ( !
GetApp().GetSite().IsProvided(reqs) &&
608 !
GetApp().GetSite().IsProvided(reqs,
false) ) {
620 string* unmet,
string* unmet_req)
const
622 list<string> libs_3party;
624 const string& lib = *p;
625 list<string> components;
627 copy(components.begin(),
628 components.end(), back_inserter(libs_3party));
630 list<string> libs_required;
632 const string& lib = *p;
633 list<string> components;
635 if (components.empty()) {
636 libs_required.push_back(lib);
638 copy(components.begin(),
639 components.end(), back_inserter(libs_required));
647 libs_3party.unique();
652 ITERATE(list<string>, p, libs_3party) {
653 const string& reqs = *p;
661 if ((reqs ==
"MT" && st) || (reqs ==
"-MT" && !st)) {
663 if (!unmet->empty()) {
673 bool disabled =
false;
674 if ( !
site.IsLibEnabledInConfig(reqs,
config) ) {
676 if (!unmet->empty()) {
681 if (find( libs_required.begin(), libs_required.end(), reqs )
682 != libs_required.end()) {
688 if ( !
site.IsLibOk(lib_info,
true) && !
site.Is3PartyLibWithChoice(reqs) ) {
690 if (find( libs_required.begin(), libs_required.end(), reqs )
691 != libs_required.end()) {
693 if (!unmet_req->empty()) {
715 list<string> libs_list;
717 ITERATE(list<string>, p, libs_list) {
718 const string& lib_id = *p;
719 if (
GetApp().GetSite().Is3PartyLibWithChoice(lib_id)) {
729 back_inserter(defines));
747 const string& project_id,
748 const string& source_file_full_path,
762 project_id, source_file_full_path, tree_src_dir);
772 if (section ==
"UsePch" && entry ==
"UsePch" && !
m_Project.
m_Pch.empty()) {
791 m_MsvcMetaMakefile(
GetApp().GetMetaMakefile())
818 GetApp().GetRegSettings().m_CompilersSubdir);
821 GetApp().GetBuildType().GetTypeStr());
844 GetApp().GetRegSettings().m_CompilersSubdir +
847 string project_dir = prj_context.
ProjectDir();
848 string output_dir_prefix =
851 project_dir.find(project_tag) + project_tag.length());
855 GetApp().GetBuildType().GetTypeStr());
870 string output_dir_abs =
912 (general_context, project_context));
934 (general_context,project_context));
1089 if (
s_IsExe(general_context, project_context) )
1097 if (
s_IsLib(general_context, project_context) )
1105 if (
s_IsUtility(general_context, project_context) )
1113 if (
s_IsDll(general_context, project_context) )
1145 if (
s_IsExe (general_context, project_context) )
1158 if (
s_IsLib(general_context, project_context) ||
1163 if (
s_IsDll (general_context, project_context) )
1183 if (
s_IsLib (general_context, project_context) )
1200 if (
s_IsDll (general_context, project_context) &&
1201 s_IsDebug(general_context, project_context) )
1208 if (
s_IsDll (general_context, project_context) &&
1216 if (
s_IsExe (general_context, project_context) &&
1217 s_IsDebug(general_context, project_context) )
1225 if (
s_IsExe (general_context, project_context) &&
static EMsvcPlatform GetMsvcPlatform(void)
static string GetMsvcSection(void)
static string GetConfigNameKeyword(void)
Combining of rules and project makefile.
virtual void GetInlinesInSrc(const SConfigInfo &config, list< string > *files) const
virtual void GetCustomBuildInfo(list< SCustomBuildInfo > *info) const
virtual void GetHeadersInInclude(const SConfigInfo &config, list< string > *files) const
virtual void GetAdditionalIncludeDirs(const SConfigInfo &config, list< string > *files) const
virtual void GetInlinesInInclude(const SConfigInfo &config, list< string > *files) const
virtual void GetHeadersInSrc(const SConfigInfo &config, list< string > *files) const
CMsvcPrjGeneralContext –.
string OutputDirectory(void) const
const CMsvcMetaMakefile & GetMsvcMetaMakefile(void) const
string ConfigurationName(void) const
CMsvcPrjGeneralContext(void)
Prohibited to:
CMsvcPrjProjectContext –.
string AdditionalLinkerOptions(const SConfigInfo &cfg_info) const
string GetConfigData(const string §ion, const string &entry, const SConfigInfo &config) const
list< string > m_Requires
bool IsConfigEnabled(const SConfigInfo &config, string *unmet, string *unmet_req) const
string AdditionalLibraryDirectories(const SConfigInfo &cfg_info) const
list< string > m_SourcesDirsAbs
bool IsPchEnabled(const SConfigInfo &config) const
list< CProjKey > m_PreBuilds
static map< string, set< string > > s_EnabledPackages
list< string > m_ProjectLibs
const CProjItem & m_Project
const list< CProjKey > & PreBuilds(void) const
list< string > m_IncludeDirsAbs
list< SCustomBuildInfo > m_CustomBuildInfo
string AdditionalIncludeDirectories(const SConfigInfo &cfg_info) const
unique_ptr< CMsvcProjectMakefile > m_MsvcProjectMakefile
const string & ProjectDir(void) const
list< string > m_ProjectIncludeDirs
static map< string, set< string > > s_DisabledPackages
list< string > m_InlineDirsAbs
void CreateLibsList(list< string > *libs_list) const
unique_ptr< CMsvcCombinedProjectMakefile > m_MsvcCombinedProjectMakefile
string GetPchHeader(const string &project_id, const string &source_file_full_path, const string &tree_src_dir, const SConfigInfo &config) const
static bool IsRequiresOk(const CProjItem &prj, string *unmet)
list< string > m_NcbiCLibs
const list< string > Defines(const SConfigInfo &cfg_info) const
EMakeFileType GetMakeType(void) const
CMsvcPrjProjectContext(void)
CProjItem::TProjType ProjectType(void) const
const string & ProjectId(void) const
CProjItem::TProjType m_ProjType
const CMsvcCombinedProjectMakefile & GetMsvcProjectMakefile(void) const
void GetLibInclude(const string &lib_id, const SConfigInfo &cfg_info, list< string > *includes) const
void GetThirdPartyLibsToInstall(list< string > *libs) const
void GetLibInfo(const string &lib, const SConfigInfo &config, SLibInfo *libinfo) const
void GetComponents(const string &entry, list< string > *components) const
Get components from site.
CProjBulderAppException –.
const CProjectItemsTree * GetCurrentBuildTree(void) const
const CMsvcMetaMakefile & GetMetaMakefile(void)
const CProjectItemsTree * GetIncompleteBuildTree(void) const
const SProjectTreeInfo & GetProjectTreeInfo(void)
const string & GetBuildRoot(void) const
const CMsvcSite & GetSite(void)
list< string > m_Requires
What this project requires to have (in user site).
list< string > m_IncludeDirs
Resolved contents of CPPFLAG ( -I<m_IncludeDir> -I/..) Absolute pathes.
list< string > m_Sources
List of source files without extension ( *.cpp or *.c ) - with relative pathes from m_SourcesBaseDir.
set< CProjKey > m_UnconditionalDepends
list< CProjKey > m_Depends
What projects this project is depend upon (IDs).
TProjType m_ProjType
Type of the project.
EMakeFileType m_MakeType
Type of the project.
string m_ID
ID of atomic project.
list< string > m_Defines
Defines like USE_MS_DBLIB.
string m_Pch
Precompiled header.
list< string > m_Includes
list< string > m_NcbiCLibs
Libraries from NCBI C Toolkit to link with.
list< string > m_Libs3Party
Resolved contents of LIBS flag (Third-party libs)
string m_SourcesBaseDir
Base directory of source files (....c++/src/a/ )
const string & Id(void) const
TProjType Type(void) const
static bool IsDefine(const string ¶m)
container_type::const_iterator const_iterator
const_iterator end() const
iterator_bool insert(const value_type &val)
const_iterator find(const key_type &key) const
iterator_bool insert(const value_type &val)
const_iterator begin() const
const_iterator end() const
#define ITERATE(Type, Var, Cont)
ITERATE macro to sequence through container elements.
#define NCBI_THROW(exception_class, err_code, message)
Generic macro to throw an exception, given the exception class, error code and message string.
static string NormalizePath(const string &path, EFollowLinks follow_links=eIgnoreLinks)
Normalize a path.
string GetDir(EIfEmptyPath mode=eIfEmptyPath_Current) const
Get the directory component for this directory entry.
virtual bool Exists(void) const
Check the entry existence.
static string AddTrailingPathSeparator(const string &path)
Add trailing path separator, if needed.
static string CreateRelativePath(const string &path_from, const string &path_to)
Create a relative path between two points in the file system specified by their absolute paths.
static char GetPathSeparator(void)
Get path separator symbol specific for the current platform.
static string ConcatPath(const string &first, const string &second)
Concatenate two parts of the path for the current OS.
string GetName(void) const
Get the base entry name with extension (if any).
static void SplitPath(const string &path, string *dir=0, string *base=0, string *ext=0)
Split a path string into its basic components.
#define END_NCBI_SCOPE
End previously defined NCBI scope.
#define BEGIN_NCBI_SCOPE
Define ncbi namespace.
static bool StringToBool(const CTempString str)
Convert string to bool.
static int CompareNocase(const CTempString s1, SIZE_TYPE pos, SIZE_TYPE n, const char *s2)
Case-insensitive compare of a substring with another string.
static string IntToString(int value, TNumToStringFlags flags=0, int base=10)
Convert int to string.
static string Join(const TContainer &arr, const CTempString &delim)
Join strings using the specified delimiter.
string GetDllHost(const CProjectItemsTree &tree, const string &lib)
string CreateMsvcProjectMakefileName(const string &project_name, CProjItem::TProjType type)
Create project makefile name.
#define MSVC_DEFAULT_LIBS_TAG
bool SameRootDirs(const string &dir1, const string &dir2)
Checks if 2 dirs has the same root.
string CreateProjectName(const CProjKey &project_id)
Project naming schema.
static ILibrarianTool * s_CreateLibrarianTool(const CMsvcPrjGeneralContext &general_context, const CMsvcPrjProjectContext &project_context)
static bool s_IsExe(const CMsvcPrjGeneralContext &general_context, const CMsvcPrjProjectContext &project_context)
static bool s_IsLib(const CMsvcPrjGeneralContext &general_context, const CMsvcPrjProjectContext &project_context)
static bool s_IsUtility(const CMsvcPrjGeneralContext &general_context, const CMsvcPrjProjectContext &project_context)
static IResourceCompilerTool * s_CreateResourceCompilerTool(const CMsvcPrjGeneralContext &general_context, const CMsvcPrjProjectContext &project_context)
static bool s_IsRelease(const CMsvcPrjGeneralContext &general_context, const CMsvcPrjProjectContext &project_context)
static IConfiguration * s_CreateConfiguration(const CMsvcPrjGeneralContext &general_context, const CMsvcPrjProjectContext &project_context)
static ICompilerTool * s_CreateCompilerTool(const CMsvcPrjGeneralContext &general_context, const CMsvcPrjProjectContext &project_context)
static bool s_IsDebug(const CMsvcPrjGeneralContext &general_context, const CMsvcPrjProjectContext &project_context)
static bool s_IsDll(const CMsvcPrjGeneralContext &general_context, const CMsvcPrjProjectContext &project_context)
static ILinkerTool * s_CreateLinkerTool(const CMsvcPrjGeneralContext &general_context, const CMsvcPrjProjectContext &project_context)
const TYPE & Get(const CNamedParameterList *param)
void copy(Njn::Matrix< S > *matrix_, const Njn::Matrix< T > &matrix0_)
CProjBulderApp & GetApp(void)
access to App singleton
#define PTB_ERROR_EX(file, err_code, msg)
#define PTB_WARNING_EX(file, err_code, msg)
string GetConfigFullName(void) const
list< string > m_LibDefines
static bool IsConfigurableDefine(const string &define)
string m_Compilers
<compilers> branch of tree