45 #if defined(NCBI_COMPILER_MSVC) || defined(NCBI_XCODE_BUILD) || defined(PSEUDO_XCODE)
46 if (
CFile(file_path).Exists()) {
64 const string&
value,
const string& section,
const string& opt)
71 string name(section+
"_"+opt+
"_"+
value);
73 "Translate", name,
value);
85 string data(
value), raw_macro, macro, definition;
86 string::size_type start, end,
done = 0;
88 if ((start =
data.find(
"$(",
done)) == string::npos) {
91 end =
data.find(
")", start);
92 if (end == string::npos) {
95 raw_macro =
data.substr(start,end-start+1);
98 definition = meta.
m_MakeFile.
Get(
"Translate",
string(
"Macro_") + macro);
99 if (definition.empty()) {
114 string sec(
"Configuration");
121 string sec(
"Compiler");
129 string sec(
"Linker");
137 string sec(
"Librarian");
145 string sec(
"ResourceCompiler");
163 (
const string& project_id,
164 const string& source_file_full_path,
165 const string& tree_src_dir)
const
175 string source_file_dir;
179 size_t max_match = 0;
183 const string& branch_subdir = p->first;
184 string abs_branch_subdir =
188 if (
IsSubdir(abs_branch_subdir, source_file_dir) ) {
189 if ( branch_subdir.length() > max_match ) {
190 max_match = branch_subdir.length();
191 pch_file = p->second;
216 string irrelevant[] = {
"UsePch",
"PchUsageDefine",
"DefaultPch",
"DoNotUsePch",
""};
218 list<string> projects_with_pch_dirs;
220 ITERATE(list<string>, p, projects_with_pch_dirs) {
221 const string&
key = *p;
223 for (
int i=0;
ok && !irrelevant[
i].empty(); ++
i) {
224 ok =
key != irrelevant[
i];
247 string name(
"Makefile.");
249 name += project_name +
'.';
312 string::size_type start, end;
313 if ((start =
value.find(
"$(")) != string::npos &&
314 (end =
value.find(
")")) != string::npos && (end > start)) {
315 string raw_define =
value.substr(start+2,end-start-2);
317 if (!new_val.empty()) {
318 redef.push_back(
"$(" + new_val +
")");
323 string raw_define =
value.substr(1,
value.length()-2);
325 if (!new_val.empty()) {
326 redef.push_back(
"@" + new_val +
"@");
332 if (!new_val.empty()) {
347 redef.insert(redef.end(),
value.begin(),
value.end());
352 redef.insert(redef.end(),newval.begin(), newval.end());
365 values.push_back(def);
369 values.insert(values.end(), redef.begin(), redef.end());
371 values.push_back(def);
379 values.insert(values.end(), def.begin(), def.end());
381 ITERATE(list<string>, k, def) {
394 return val !=
"FALSE";
399 list<string>* files)
const
401 string files_string =
409 list<string>* lib_ids)
const
419 list<string>* files)
const
421 string files_string =
423 "ExcludedFromProject",
"SourceFiles",
config);
430 list<string>* lib_ids)
const
434 "ExcludedFromProject",
"LIB",
config);
441 list<string>* dirs)
const
450 list<string>* files)
const
456 list<string>* files)
const
473 files->push_back(
"*.h");
474 files->push_back(
"*.hpp");
479 list<string>* files)
const
482 files->push_back(
"*.inl");
486 list<string>* files)
const
489 files->push_back(
"*.inl");
497 string source_files_str =
499 if (source_files_str.empty()) {
503 list<string> source_files;
506 ITERATE(list<string>, p, source_files){
507 const string& source_file = *p;
510 string source_file_path_abs =
526 info->push_back(build_info);
541 list<string>* files)
const
543 string files_string =
551 string prefix(
"ExtraFileGroup.");
552 list<string> sections;
554 ITERATE(list<string>, s, sections) {
557 string group_name =
NStr::Replace(s->substr(prefix.size()),
"_",
" ");
559 list<string> raw_files, files;
562 bool started =
false;
563 ITERATE(list<string>,
f, raw_files) {
565 if (part[0] ==
'\"' && !started) {
566 fname = part.substr(1);
570 else if (part[part.size()-1] ==
'\"') {
572 fname += part.substr(0,part.size()-1);
582 files.push_back(fname);
586 if (!group_name.empty() && !files.empty()) {
587 (*files_map)[group_name] = files;
602 string priority_string =
605 if ( priority_string.empty() )
616 string name =
"Makefile." + reqs;
617 switch (project_type) {
636 const string& rules_basedir,
637 const list<string> requires_list)
638 :m_ProjectMakefile(project_makefile)
640 ITERATE(list<string>, p, requires_list) {
641 const string& reqs = *p;
642 string rule_path = rules_basedir;
649 if ( !rule->IsEmpty() )
659 #define IMPLEMENT_COMBINED_MAKEFILE_OPT(X) \
660 string CMsvcCombinedProjectMakefile::X(const string& opt, \
661 const SConfigInfo& config) const \
663 string prj_val = m_ProjectMakefile->X(opt, config); \
664 if ( !prj_val.empty() ) \
668 ITERATE(TRules, p, m_Rules) { \
669 const TRule& rule = *p; \
670 string rule_val = rule->X(opt, config); \
671 if ( !rule_val.empty() && priority < rule->GetRulePriority(config)) { \
673 priority = rule->GetRulePriority(config); \
693 const list<string>& rules_paths_list,
694 const string& project_base_dir,
695 list<string>* project_paths_list)
697 project_paths_list->clear();
698 ITERATE(list<string>, p, rules_paths_list) {
699 const string& rules_path = *p;
700 string rules_abs_path =
702 string project_path =
704 project_paths_list->push_back(project_path);
709 #define IMPLEMENT_COMBINED_MAKEFILE_VALUES(X) \
710 void CMsvcCombinedProjectMakefile::X(const SConfigInfo& config, \
711 list<string>* values_list) const \
713 list<string> prj_val; \
714 m_ProjectMakefile->X(config, &prj_val); \
715 if ( !prj_val.empty() ) { \
716 *values_list = prj_val; \
721 ITERATE(TRules, p, m_Rules) { \
722 const TRule& rule = *p; \
723 list<string> rule_val; \
724 rule->X(config, &rule_val); \
725 if ( !rule_val.empty() && priority < rule->GetRulePriority(config)) { \
727 priority = rule->GetRulePriority(config); \
730 *values_list = val; \
734 #define IMPLEMENT_COMBINED_MAKEFILE_FILESLIST(X) \
735 void CMsvcCombinedProjectMakefile::X(const SConfigInfo& config, \
736 list<string>* values_list) const \
738 list<string> prj_val; \
739 m_ProjectMakefile->X(config, &prj_val); \
740 if ( !prj_val.empty() ) { \
741 *values_list = prj_val; \
746 string rule_base_dir; \
747 ITERATE(TRules, p, m_Rules) { \
748 const TRule& rule = *p; \
749 list<string> rule_val; \
750 rule->X(config, &rule_val); \
751 if ( !rule_val.empty() && priority < rule->GetRulePriority(config)) { \
753 priority = rule->GetRulePriority(config); \
754 rule_base_dir = rule->m_ProjectBaseDir; \
757 s_ConvertRelativePaths(rule_base_dir, \
759 m_ProjectMakefile->m_ProjectBaseDir, \
781 (list<SCustomBuildInfo>*
info)
const
static EMsvcPlatform GetMsvcPlatform(void)
static EMsvcVersion GetMsvcVersion(void)
Combining of rules and project makefile.
virtual void GetCustomBuildInfo(list< SCustomBuildInfo > *info) const
TProjectMakefile m_ProjectMakefile
CMsvcCombinedProjectMakefile(void)
virtual bool IsExcludeProject(bool default_val) const
virtual void GetExtraFiles(map< string, list< string > > *files) const
void GetCustomScriptInfo(SCustomScriptInfo &info, const string §ion) const
virtual ~CMsvcCombinedProjectMakefile(void)
CMsvcProjectMakefile(void)
virtual void GetHeadersInInclude(const SConfigInfo &config, list< string > *files) const
virtual bool IsExcludeProject(bool default_val) const
virtual void GetResourceFiles(const SConfigInfo &config, list< string > *files) const
bool Redefine(const string &value, list< string > &redef) const
void x_GetHeaders(const SConfigInfo &config, const string &entry, list< string > *files) const
virtual void GetAdditionalIncludeDirs(const SConfigInfo &config, list< string > *files) const
virtual void GetCustomBuildInfo(list< SCustomBuildInfo > *info) const
virtual void GetInlinesInInclude(const SConfigInfo &config, list< string > *files) const
string GetGUID(void) const
virtual void GetHeadersInSrc(const SConfigInfo &config, list< string > *files) const
virtual void GetInlinesInSrc(const SConfigInfo &config, list< string > *files) const
void Append(list< string > &values, const string &def) const
virtual void GetAdditionalLIB(const SConfigInfo &config, list< string > *lib_ids) const
virtual void GetAdditionalSourceFiles(const SConfigInfo &config, list< string > *files) const
void GetCustomScriptInfo(SCustomScriptInfo &info, const string §ion) const
virtual void GetExtraFiles(map< string, list< string > > *files) const
virtual void GetExcludedLIB(const SConfigInfo &config, list< string > *lib_ids) const
virtual void GetExcludedSourceFiles(const SConfigInfo &config, list< string > *files) const
Abstraction of rule for generation of project settings based on component usage.
int GetRulePriority(const SConfigInfo &config) const
CMsvcProjectRuleMakefile(void)
string ProcessMacros(string data, bool preserve_unresolved=true) const
CProjBulderAppException –.
const CMsvcMetaMakefile & GetMetaMakefile(void)
const CMsvc7RegSettings & GetRegSettings(void)
const CMsvcSite & GetSite(void)
TProjType m_ProjType
Type of the project.
string m_Name
Name of atomic project.
void EnumerateSections(list< string > *sections) const
void EnumerateEntries(const string §ion, list< string > *entries) const
void Read(CNcbiIstream &is)
string Get(const string §ion, const string &name) const
string GetString(const string §ion, const string &name, const string &default_value=kEmptyStr) const
static string StripDefine(const string &define)
static bool IsDefine(const string ¶m)
The NCBI C++ standard methods for dealing with std::string.
#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.
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 string ConvertToOSPath(const string &path)
Convert "path" on any OS to the current OS-dependent path.
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.
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.
IO_PREFIX::ifstream CNcbiIfstream
Portable alias for ifstream.
static bool StringToBool(const CTempString str)
Convert string to bool.
static int StringToInt(const CTempString str, TStringToNumFlags flags=0, int base=10)
Convert string to int.
static list< string > & Split(const CTempString str, const CTempString delim, list< string > &arr, TSplitFlags flags=0, vector< SIZE_TYPE > *token_pos=NULL)
Split a string using specified delimiters.
static bool EndsWith(const CTempString str, const CTempString end, ECase use_case=eCase)
Check if a string ends with a specified suffix value.
static string IntToString(int value, TNumToStringFlags flags=0, int base=10)
Convert int to string.
static string & Replace(const string &src, const string &search, const string &replace, string &dst, SIZE_TYPE start_pos=0, SIZE_TYPE max_replace=0, SIZE_TYPE *num_replace=0)
Replace occurrences of a substring within a string.
static bool StartsWith(const CTempString str, const CTempString start, ECase use_case=eCase)
Check if a string starts with a specified prefix value.
@ fSplit_MergeDelimiters
Merge adjacent delimiters.
string GetLibrarianOpt(const IMsvcMetaMakefile &meta_file, const IMsvcMetaMakefile &project_file, const string &opt, const SConfigInfo &config)
Librarian.
#define IMPLEMENT_COMBINED_MAKEFILE_FILESLIST(X)
string GetResourceCompilerOpt(const IMsvcMetaMakefile &meta_file, const IMsvcMetaMakefile &project_file, const string &opt, const SConfigInfo &config)
ResourceCompiler.
#define IMPLEMENT_COMBINED_MAKEFILE_VALUES(X)
static string s_CreateRuleMakefileFilename(CProjItem::TProjType project_type, const string &reqs)
string GetConfigurationOpt(const IMsvcMetaMakefile &meta_file, const IMsvcMetaMakefile &project_file, const string &opt, const SConfigInfo &config)
Get option with taking into account 2 makefiles : matafile and project_file.
#define IMPLEMENT_COMBINED_MAKEFILE_OPT(X)
string GetCompilerOpt(const IMsvcMetaMakefile &meta_file, const IMsvcMetaMakefile &project_file, const string &opt, const SConfigInfo &config)
Compiler.
string GetLinkerOpt(const IMsvcMetaMakefile &meta_file, const IMsvcMetaMakefile &project_file, const string &opt, const SConfigInfo &config)
Linker.
static void s_ConvertRelativePaths(const string &rule_base_dir, const list< string > &rules_paths_list, const string &project_base_dir, list< string > *project_paths_list)
string CreateMsvcProjectMakefileName(const string &project_name, CProjItem::TProjType type)
Create project makefile name.
#define LIST_SEPARATOR
Separator for list values in registry.
string GetOpt(const CPtbRegistry ®istry, const string §ion, const string &opt, const string &config)
bool IsSubdir(const string &abs_parent_dir, const string &abs_dir)
Is abs_dir a parent of abs_parent_dir.
const struct ncbi::grid::netcache::search::fields::KEY key
const GenericPointer< typename T::ValueType > T2 value
std::istream & in(std::istream &in_, double &x_)
CProjBulderApp & GetApp(void)
access to App singleton
string m_AdditionalDependencies