summaryrefslogtreecommitdiffabout
path: root/src/sitecing-build.cc
Unidiff
Diffstat (limited to 'src/sitecing-build.cc') (more/less context) (ignore whitespace changes)
-rw-r--r--src/sitecing-build.cc5
1 files changed, 3 insertions, 2 deletions
diff --git a/src/sitecing-build.cc b/src/sitecing-build.cc
index 4cad0a3..887ef83 100644
--- a/src/sitecing-build.cc
+++ b/src/sitecing-build.cc
@@ -1,21 +1,22 @@
1#include <sys/types.h> 1#include <sys/types.h>
2#include <dirent.h> 2#include <dirent.h>
3#include <getopt.h> 3#include <getopt.h>
4#include <iostream> 4#include <iostream>
5#include <memory> 5#include <memory>
6#include <fstream> 6#include <fstream>
7#include <cassert> 7#include <cassert>
8#include <set> 8#include <set>
9using namespace std; 9using namespace std;
10#include <konforka/util.h>
10#include "sitecing/sitecing_util.h" 11#include "sitecing/sitecing_util.h"
11#include "sitecing/util.h" 12#include "sitecing/util.h"
12#include "sitecing/sitespace.h" 13#include "sitecing/sitespace.h"
13#include "sitecing/sitecing_interface_cgi.h" 14#include "sitecing/sitecing_interface_cgi.h"
14#include "sitecing/cgi_component.h" 15#include "sitecing/cgi_component.h"
15#include "sitecing/configuration.h" 16#include "sitecing/configuration.h"
16#include "sitecing/magic.h" 17#include "sitecing/magic.h"
17#include "sitecing/sitecing_exception.h" 18#include "sitecing/sitecing_exception.h"
18#include "sitecing/exception.h" 19#include "sitecing/exception.h"
19using namespace sitecing; 20using namespace sitecing;
20 21
21#include "config.h" 22#include "config.h"
@@ -69,25 +70,25 @@ void build_imports(const string& component) {
69 while(!ifs.eof()) { 70 while(!ifs.eof()) {
70 ifs >> import; 71 ifs >> import;
71 if(!import.empty()) 72 if(!import.empty())
72 build_with_imports(import); 73 build_with_imports(import);
73 } 74 }
74 } 75 }
75} 76}
76 77
77void build_http_status_handlers(const string& target) { 78void build_http_status_handlers(const string& target) {
78 assert(site_space); 79 assert(site_space);
79 set<string> stop_list; 80 set<string> stop_list;
80 string t = "/"; 81 string t = "/";
81 t += normalize_path(target,strip_leading_slash); 82 t += konforka::normalize_path(target,konforka::strip_leading_slash);
82 for(;;) { 83 for(;;) {
83 if(t[t.length()-1]=='/') { 84 if(t[t.length()-1]=='/') {
84 loaded_options* lo = site_space->config.lookup_loaded_options(t); 85 loaded_options* lo = site_space->config.lookup_loaded_options(t);
85 if( lo && (lo->flags&config_options::flag_http_status_handlers) ) { 86 if( lo && (lo->flags&config_options::flag_http_status_handlers) ) {
86 for(config_options::http_status_handlers_t::const_iterator i=lo->http_status_handlers.begin();i!=lo->http_status_handlers.end();++i) { 87 for(config_options::http_status_handlers_t::const_iterator i=lo->http_status_handlers.begin();i!=lo->http_status_handlers.end();++i) {
87 if(stop_list.find(i->first)==stop_list.end()) { 88 if(stop_list.find(i->first)==stop_list.end()) {
88 build_with_imports(i->second); 89 build_with_imports(i->second);
89 stop_list.insert(i->first); 90 stop_list.insert(i->first);
90 } 91 }
91 } 92 }
92 } 93 }
93 } 94 }
@@ -138,25 +139,25 @@ void build(const string& target) {
138 if(S_ISREG(st.st_mode)) { 139 if(S_ISREG(st.st_mode)) {
139 build_target(target); 140 build_target(target);
140 }else if(S_ISDIR(st.st_mode)) { 141 }else if(S_ISDIR(st.st_mode)) {
141 build_http_status_handlers(target); 142 build_http_status_handlers(target);
142 DIR *d=opendir(target_source.c_str()); 143 DIR *d=opendir(target_source.c_str());
143 if(!d) 144 if(!d)
144 throw konforka::exception(CODEPOINT,"failed to opendir()"); 145 throw konforka::exception(CODEPOINT,"failed to opendir()");
145 for(struct dirent *de=readdir(d);de;de=readdir(d)) { 146 for(struct dirent *de=readdir(d);de;de=readdir(d)) {
146 if(!strcmp(de->d_name,".")) 147 if(!strcmp(de->d_name,"."))
147 continue; 148 continue;
148 if(!strcmp(de->d_name,"..")) 149 if(!strcmp(de->d_name,".."))
149 continue; 150 continue;
150 string subtarget = normalize_path(target+"/"+de->d_name); 151 string subtarget = konforka::normalize_path(target+"/"+de->d_name);
151 struct stat sts; 152 struct stat sts;
152 if(stat((site_space->config.root_source+subtarget).c_str(),&sts)) 153 if(stat((site_space->config.root_source+subtarget).c_str(),&sts))
153 throw konforka::exception(CODEPOINT,"failed to stat() subtarget"); 154 throw konforka::exception(CODEPOINT,"failed to stat() subtarget");
154 if(S_ISDIR(sts.st_mode)) { 155 if(S_ISDIR(sts.st_mode)) {
155 build(subtarget); 156 build(subtarget);
156 }else{ 157 }else{
157 if(site_space->config.match_autobuild_files(target,de->d_name)){ 158 if(site_space->config.match_autobuild_files(target,de->d_name)){
158 build_target(subtarget); 159 build_target(subtarget);
159 } 160 }
160 } 161 }
161 } 162 }
162 closedir(d); 163 closedir(d);