summaryrefslogtreecommitdiffabout
path: root/lib
authorMichael Krelin <hacker@klever.net>2005-04-24 19:37:17 (UTC)
committer Michael Krelin <hacker@klever.net>2005-04-24 19:37:17 (UTC)
commit54e344b7e3623e807b893b7febad3adfc6c1648f (patch) (side-by-side diff)
treeded792083882fbe452992b6808487baec269526a /lib
parent83cf01018c67e7eb5e1cca7d698bac731f8e1e9d (diff)
downloadsitecing-54e344b7e3623e807b893b7febad3adfc6c1648f.zip
sitecing-54e344b7e3623e807b893b7febad3adfc6c1648f.tar.gz
sitecing-54e344b7e3623e807b893b7febad3adfc6c1648f.tar.bz2
1. setting up of SITECING_PATH_INFO environment variable
2. bumped up kingate version requirement 3. fixed a bug in component build process
Diffstat (limited to 'lib') (more/less context) (show whitespace changes)
-rw-r--r--lib/component_factory.cc2
-rw-r--r--lib/file_factory.cc2
2 files changed, 2 insertions, 2 deletions
diff --git a/lib/component_factory.cc b/lib/component_factory.cc
index b5e95af..d9692de 100644
--- a/lib/component_factory.cc
+++ b/lib/component_factory.cc
@@ -63,65 +63,65 @@ namespace sitecing {
string str;
while(!imports.eof()) {
imports >> 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");
}
}
// XXX: intermediate_deps should be broken down
config_options *co_intermediate_deps = config.lookup_config(nos,config_options::flag_intermediate_deps);
if(co_intermediate_deps) {
for(list<string>::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_suffix& uns) { }
}
// compiler targets
for(int cct=0;cct<sizeof(cc_targets)/sizeof(*cc_targets);cct++) {
try {
string nos = strip_suffix(noro,cc_targets[cct]);
deps.push_back(root_intermediate+nos+".cc");
config_options *co_cpp_deps = config.lookup_config(noro,config_options::flag_cpp_deps);
if( (!co_cpp_deps) || co_cpp_deps->cpp_deps) {
- ifstream df((root_intermediate+noro+".d").c_str(),ios::in);
+ ifstream df((root_intermediate+nos+".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: intermediate_deps should be broken down
config_options *co_intermediate_deps = config.lookup_config(nos,config_options::flag_intermediate_deps);
if(co_intermediate_deps) {
for(list<string>::const_iterator i=co_intermediate_deps->intermediate_deps.begin();i!=co_intermediate_deps->intermediate_deps.end();++i)
deps.push_back(*i);
}
}catch(utility_no_suffix& uns) { }
}
}catch(utility_no_prefix& unp) { }
}
bool component_factory::is_uptodate(const string& dst,file_list_t *deps) {
string dp = normalize_path(dst,strip_trailing_slash);
try {
string noro = strip_prefix(dp,root_intermediate);
for(int ppt=0;(ppt+1)<sizeof(pp_targets)/sizeof(*pp_targets);ppt++) {
try {
string nos = strip_suffix(noro,pp_targets[ppt]);
return file_factory::is_uptodate(root_intermediate+nos+".pp_stamp",deps);
}catch(utility_no_suffix& uns) { }
}
bool rv = file_factory::is_uptodate(dst,deps);
return rv;
diff --git a/lib/file_factory.cc b/lib/file_factory.cc
index 7ca7b86..c22fac2 100644
--- a/lib/file_factory.cc
+++ b/lib/file_factory.cc
@@ -1,53 +1,53 @@
#ifdef USE_PCH
#include "pch.h"
#else
#include <sys/types.h>
#include <sys/stat.h>
#include <unistd.h>
#include <konforka/exception.h>
using namespace std;
#include "sitecing/file_factory.h"
#endif
namespace sitecing {
bool file_factory::is_uptodate(const string& dst,file_list_t* deps) {
file_list_t deplist;
file_list_t *fl = deps?deps:&deplist;
get_dependencies(dst,*fl);
struct stat stdst;
if(stat(dst.c_str(),&stdst))
return false;
- for(file_list_t::const_iterator i=fl->begin();i!=fl->end();i++) {
+ for(file_list_t::const_iterator i=fl->begin();i!=fl->end();++i) {
struct stat stdep;
if(stat(i->c_str(),&stdep))
return false;
if(stdst.st_mtime<stdep.st_mtime)
return false;
if(!is_uptodate(*i))
return false;
}
return true;
}
void file_factory::make(const string& dst) {
try {
depth++;
if(depth>25)
throw konforka::exception(CODEPOINT,"recursed too deeply.");
file_list_t deps;
if(!is_uptodate(dst,&deps)) {
for(file_list_t::const_iterator i=deps.begin();i!=deps.end();i++)
make(*i);
if(!is_uptodate(dst,&deps))
build(dst);
}
depth--;
}catch(konforka::exception& ke) {
depth--;
ke.see(CODEPOINT);
throw;
}catch(...) {
depth--;
throw;
}