From 9c755a29c43bcf4a3a1bbd55ae7e590fc6ff2e21 Mon Sep 17 00:00:00 2001 From: Michael Krelin Date: Thu, 31 Mar 2005 12:39:41 +0000 Subject: saving ticks on dependencies processing --- diff --git a/lib/component_factory.cc b/lib/component_factory.cc index 1253111..a5ced6b 100644 --- a/lib/component_factory.cc +++ b/lib/component_factory.cc @@ -36,8 +36,7 @@ namespace sitecing { try { // XXX: or just compare it off? string noro = strip_prefix(dp,root_source); return; - }catch(utility_no_affix& una) { - } + }catch(utility_no_affix& una) { } // .so binaries try { string noso = strip_suffix(dp,".so"); @@ -51,65 +50,61 @@ namespace sitecing { return; }catch(utility_no_prefix& unp) { throw konforka::exception(CODEPOINT,"component is outside of component root"); - }catch(utility_no_suffix& uns) { - } - // preprocessor targets - for(int ppt=0;ppt> str; - if(!str.empty()) - deps.push_back(root_intermediate+str+".classname"); + }catch(utility_no_suffix& uns) { } + try { + // preprocessor targets + string noro = strip_prefix(dp,root_intermediate); + for(int ppt=0;ppt> str; + if(!str.empty()) + deps.push_back(root_intermediate+str+".classname"); + } + } + ifstream ancestors((root_intermediate+nos+".ancestors").c_str(),ios::in); + if(ancestors.good()) { + string str; + while(!ancestors.eof()) { + ancestors >> str; + if(!str.empty()) + deps.push_back(root_intermediate+str+".classname"); + } } - } - ifstream ancestors((root_intermediate+noro+".ancestors").c_str(),ios::in); - if(ancestors.good()) { - string str; - while(!ancestors.eof()) { - ancestors >> str; - if(!str.empty()) - deps.push_back(root_intermediate+str+".classname"); + config_options *co_intermediate_deps = config.lookup_config(nos,config_options::flag_intermediate_deps); + if(co_intermediate_deps) { + for(list::const_iterator i=co_intermediate_deps->intermediate_deps.begin();i!=co_intermediate_deps->intermediate_deps.end();++i) + deps.push_back(*i); } - } - config_options *co_intermediate_deps = config.lookup_config(noro,config_options::flag_intermediate_deps); - if(co_intermediate_deps) { - for(list::const_iterator i=co_intermediate_deps->intermediate_deps.begin();i!=co_intermediate_deps->intermediate_deps.end();++i) - deps.push_back(*i); - } - return; - }catch(utility_no_affix& una) { - // do nothing. must be a cpp dependency. + return; + }catch(utility_no_suffix& uns) { } } - } - // compiler targets - for(int cct=0;cctcpp_deps) { - ifstream df((root_intermediate+noro+".d").c_str(),ios::in); - if(df.good()) { - string str; - while(!df.eof()) { - df >> str; - if(str.find_first_of("\\:")==string::npos) - deps.push_back(combine_path(config.root_source+noro,str)); + // compiler targets + for(int cct=0;cctcpp_deps) { + ifstream df((root_intermediate+noro+".d").c_str(),ios::in); + if(df.good()) { + string str; + while(!df.eof()) { + df >> str; + if(str.find_first_of("\\:")==string::npos) + deps.push_back(combine_path(config.root_source+nos,str)); + } } } - } - // XXX: extra deps like IntermediateDeps? - }catch(utility_no_affix& una) { - // do nothing. + // XXX: extra deps like IntermediateDeps? + }catch(utility_no_suffix& uns) { } } - } + }catch(utility_no_prefix& unp) { } } bool component_factory::is_uptodate(const string& dst,file_list_t *deps) { @@ -140,8 +135,7 @@ namespace sitecing { string noro = strip_prefix(dp,root_source); // building the sources is left up to developer return; - }catch(utility_no_prefix& unp) { - } + }catch(utility_no_prefix& unp) { } // .so files try { string noso = strip_suffix(dp,".so"); @@ -183,89 +177,85 @@ namespace sitecing { return; }catch(utility_no_prefix& unp) { throw konforka::exception(CODEPOINT,"component is outside of component root"); - }catch(utility_no_suffix& uns) { - } - // compiler targets - for(int cct=0;cct args; - config_options *co_cpp_flags = config.lookup_config(noro,config_options::flag_cpp_flags); - if(co_cpp_flags) { - args.insert(args.end(),co_cpp_flags->cpp_flags.begin(),co_cpp_flags->cpp_flags.end()); - } - // TODO: maybe move it to separare config option like CoreCPPFLags? - args.push_back("-I"+root_intermediate); - args.push_back("-I"+root_source); - args.push_back("-MD"); args.push_back("-MF"); args.push_back(root_intermediate+noro+".d"); - args.push_back("-c"); - args.push_back(cc); - args.push_back("-o"); args.push_back(o); - // TODO: "g++" configurable - int rv = execute("g++",args,stdO,stdE); - if(! (WIFEXITED(rv) && !WEXITSTATUS(rv)) ) - throw compile_error(CODEPOINT,"failed to compile component",noro); - return; - }catch(utility_no_affix& una) { - // do nothing, not a compiler target + }catch(utility_no_suffix& uns) { } + try { + string noro = strip_prefix(dp,root_intermediate); + // compiler targets + for(int cct=0;cct args; + config_options *co_cpp_flags = config.lookup_config(nos,config_options::flag_cpp_flags); + if(co_cpp_flags) { + args.insert(args.end(),co_cpp_flags->cpp_flags.begin(),co_cpp_flags->cpp_flags.end()); + } + // TODO: maybe move it to separare config option like CoreCPPFLags? + args.push_back("-I"+root_intermediate); + args.push_back("-I"+root_source); + args.push_back("-MD"); args.push_back("-MF"); args.push_back(root_intermediate+nos+".d"); + args.push_back("-c"); + args.push_back(cc); + args.push_back("-o"); args.push_back(o); + // TODO: "g++" configurable + int rv = execute("g++",args,stdO,stdE); + if(! (WIFEXITED(rv) && !WEXITSTATUS(rv)) ) + throw compile_error(CODEPOINT,"failed to compile component",nos); + return; + }catch(utility_no_suffix& uns) { } } - } - // preprocessor targets - for(int ppt=0;pptskeleton; - static const char *id_chars = "abcdefghijklmnopqrstuvwxyz0123456789_ABCDEFGHIJKLMNOPQRSTUVWXYZ"; - parser.class_name = normalize_path(noro,strip_leading_slash|strip_trailing_slash); - for(string::size_type illc = parser.class_name.find_first_not_of(id_chars);illc!=string::npos;illc=parser.class_name.find_first_not_of(id_chars,illc)) { - string::size_type lc = parser.class_name.find_first_of(id_chars,illc); - int n = ((lc==string::npos)?parser.class_name.length():lc)-illc; - parser.class_name.replace(illc,n,n,'_'); - } - parser.class_name = "_SCC_"+parser.class_name; - parser.output_basename = nos; - parser.component_basename = noro; + // preprocessor targets + for(int ppt=0;pptskeleton; + static const char *id_chars = "abcdefghijklmnopqrstuvwxyz0123456789_ABCDEFGHIJKLMNOPQRSTUVWXYZ"; + parser.class_name = normalize_path(nos,strip_leading_slash|strip_trailing_slash); + for(string::size_type illc = parser.class_name.find_first_not_of(id_chars);illc!=string::npos;illc=parser.class_name.find_first_not_of(id_chars,illc)) { + string::size_type lc = parser.class_name.find_first_of(id_chars,illc); + int n = ((lc==string::npos)?parser.class_name.length():lc)-illc; + parser.class_name.replace(illc,n,n,'_'); + } + parser.class_name = "_SCC_"+parser.class_name; + parser.output_basename = root_intermediate+nos; + parser.component_basename = nos; + try { + parser.preprocess(src); + string sf = root_intermediate+nos+".pp_stamp"; + ofstream sfs(sf.c_str(),ios::trunc|ios::out); // touch .pp_stamp + }catch(preprocessor_error& pe) { + pe.component_name = nos; + pe.see(CODEPOINT); + throw; + } + return; + }catch(utility_no_suffix& uns) { } } - } + }catch(utility_no_prefix& unp) { } cerr << "ignoring build request for " << dp << endl; } -- cgit v0.9.0.2