-rw-r--r-- | include/sitecing/sitecing_exception.h | 29 | ||||
-rw-r--r-- | lib/component_factory.cc | 3 |
2 files changed, 30 insertions, 2 deletions
diff --git a/include/sitecing/sitecing_exception.h b/include/sitecing/sitecing_exception.h index bf475ac..cb5edd9 100644 --- a/include/sitecing/sitecing_exception.h +++ b/include/sitecing/sitecing_exception.h | |||
@@ -1,55 +1,84 @@ | |||
1 | #ifndef __SITECING_SITECING_EXCEPTION_H | 1 | #ifndef __SITECING_SITECING_EXCEPTION_H |
2 | #define __SITECING_SITECING_EXCEPTION_H | 2 | #define __SITECING_SITECING_EXCEPTION_H |
3 | 3 | ||
4 | #include <konforka/exception.h> | 4 | #include <konforka/exception.h> |
5 | 5 | ||
6 | /** | 6 | /** |
7 | * @file | 7 | * @file |
8 | * @brief The site-C-ing specific exception. | 8 | * @brief The site-C-ing specific exception. |
9 | */ | 9 | */ |
10 | 10 | ||
11 | namespace sitecing { | 11 | namespace sitecing { |
12 | 12 | ||
13 | /** | 13 | /** |
14 | * The comonent failed to link. | ||
15 | */ | ||
16 | class link_error : public konforka::exception { | ||
17 | public: | ||
18 | /** | ||
19 | * The component path | ||
20 | */ | ||
21 | string component_path; | ||
22 | |||
23 | /** | ||
24 | * @param w the message. | ||
25 | * @param cp component path. | ||
26 | */ | ||
27 | link_error(const string& w,const string& cp) | ||
28 | : konforka::exception(NOCODEPOINT,w), component_path(cp) { } | ||
29 | /** | ||
30 | * @param fi the file name where the exception is thrown from. | ||
31 | * @param fu the function name where the exception originates from. | ||
32 | * @param l the line number where the exception originates from. | ||
33 | * @param w the message. | ||
34 | * @param cp component path. | ||
35 | */ | ||
36 | link_error(const string& fi,const string& fu,int l,const string& w,const string& cp) | ||
37 | : konforka::exception(fi,fu,l,w), component_path(cp) { } | ||
38 | ~link_error() throw() { } | ||
39 | }; | ||
40 | |||
41 | /** | ||
14 | * The component failed to compile. | 42 | * The component failed to compile. |
15 | */ | 43 | */ |
16 | class compile_error : public konforka::exception { | 44 | class compile_error : public konforka::exception { |
17 | public: | 45 | public: |
18 | /** | 46 | /** |
19 | * The component path | 47 | * The component path |
20 | */ | 48 | */ |
21 | string component_path; | 49 | string component_path; |
22 | 50 | ||
23 | /** | 51 | /** |
24 | * @param w the message. | 52 | * @param w the message. |
25 | * @param cp component path. | 53 | * @param cp component path. |
26 | */ | 54 | */ |
27 | compile_error(const string& w,const string& cp) | 55 | compile_error(const string& w,const string& cp) |
28 | : konforka::exception(NOCODEPOINT,w), component_path(cp) { } | 56 | : konforka::exception(NOCODEPOINT,w), component_path(cp) { } |
29 | /** | 57 | /** |
30 | * @param whe point in code. | 58 | * @param whe point in code. |
31 | * @param wha the message. | 59 | * @param wha the message. |
32 | * @param cp component path. | 60 | * @param cp component path. |
33 | */ | 61 | */ |
34 | compile_error(const string &whe,const string& wha,const string& cp) | 62 | compile_error(const string &whe,const string& wha,const string& cp) |
35 | : konforka::exception(whe,wha), component_path(cp) { } | 63 | : konforka::exception(whe,wha), component_path(cp) { } |
36 | /** | 64 | /** |
37 | * @param fi the file name where the exception is thrown from. | 65 | * @param fi the file name where the exception is thrown from. |
38 | * @param fu the function name where the exception originates from. | 66 | * @param fu the function name where the exception originates from. |
39 | * @param l the line number where the exception originates from. | 67 | * @param l the line number where the exception originates from. |
68 | * @param w the message. | ||
40 | * @param cp component path. | 69 | * @param cp component path. |
41 | */ | 70 | */ |
42 | compile_error(const string &fi,const string& fu,int l,const string& w,const string& cp) | 71 | compile_error(const string &fi,const string& fu,int l,const string& w,const string& cp) |
43 | : konforka::exception(fi,fu,l,w), component_path(cp) { } | 72 | : konforka::exception(fi,fu,l,w), component_path(cp) { } |
44 | ~compile_error() throw() { } | 73 | ~compile_error() throw() { } |
45 | }; | 74 | }; |
46 | 75 | ||
47 | /** | 76 | /** |
48 | * Failed to preprocess component source. | 77 | * Failed to preprocess component source. |
49 | */ | 78 | */ |
50 | class preprocessor_error : public konforka::exception { | 79 | class preprocessor_error : public konforka::exception { |
51 | public: | 80 | public: |
52 | /** | 81 | /** |
53 | * Component name. | 82 | * Component name. |
54 | */ | 83 | */ |
55 | string component_name; | 84 | string component_name; |
diff --git a/lib/component_factory.cc b/lib/component_factory.cc index a5ced6b..2a2eefe 100644 --- a/lib/component_factory.cc +++ b/lib/component_factory.cc | |||
@@ -159,34 +159,33 @@ namespace sitecing { | |||
159 | if(co_ld_flags) { | 159 | if(co_ld_flags) { |
160 | args.insert(args.end(),co_ld_flags->ld_flags.begin(),co_ld_flags->ld_flags.end()); | 160 | args.insert(args.end(),co_ld_flags->ld_flags.begin(),co_ld_flags->ld_flags.end()); |
161 | } | 161 | } |
162 | args.push_back("-shared"); | 162 | args.push_back("-shared"); |
163 | args.push_back(o); | 163 | args.push_back(o); |
164 | file_list_t ancestors; | 164 | file_list_t ancestors; |
165 | get_ancestors(noro,ancestors); | 165 | get_ancestors(noro,ancestors); |
166 | for(file_list_t::const_iterator i=ancestors.begin();i!=ancestors.end();++i) { | 166 | for(file_list_t::const_iterator i=ancestors.begin();i!=ancestors.end();++i) { |
167 | string aso=root_so+*i+".so"; | 167 | string aso=root_so+*i+".so"; |
168 | make(aso); | 168 | make(aso); |
169 | args.push_back(aso); | 169 | args.push_back(aso); |
170 | } | 170 | } |
171 | args.push_back("-o"); args.push_back(dp); | 171 | args.push_back("-o"); args.push_back(dp); |
172 | // TODO: "g++" configurable | 172 | // TODO: "g++" configurable |
173 | int rv = execute("g++",args,stdO,stdE); | 173 | int rv = execute("g++",args,stdO,stdE); |
174 | if(! (WIFEXITED(rv) && !WEXITSTATUS(rv)) ) | 174 | if(! (WIFEXITED(rv) && !WEXITSTATUS(rv)) ) |
175 | // TODO:TODO: linker_error | 175 | throw link_error(CODEPOINT,"failed to link component",noro); |
176 | throw compile_error(CODEPOINT,"failed to link component",noro); | ||
177 | return; | 176 | return; |
178 | }catch(utility_no_prefix& unp) { | 177 | }catch(utility_no_prefix& unp) { |
179 | throw konforka::exception(CODEPOINT,"component is outside of component root"); | 178 | throw konforka::exception(CODEPOINT,"component is outside of component root"); |
180 | }catch(utility_no_suffix& uns) { } | 179 | }catch(utility_no_suffix& uns) { } |
181 | try { | 180 | try { |
182 | string noro = strip_prefix(dp,root_intermediate); | 181 | string noro = strip_prefix(dp,root_intermediate); |
183 | // compiler targets | 182 | // compiler targets |
184 | for(int cct=0;cct<sizeof(cc_targets)/sizeof(*cc_targets);cct++) { | 183 | for(int cct=0;cct<sizeof(cc_targets)/sizeof(*cc_targets);cct++) { |
185 | try { | 184 | try { |
186 | string nos = strip_suffix(noro,cc_targets[cct]); | 185 | string nos = strip_suffix(noro,cc_targets[cct]); |
187 | string cc = root_intermediate+nos+".cc"; | 186 | string cc = root_intermediate+nos+".cc"; |
188 | string o = root_intermediate+nos+".o"; | 187 | string o = root_intermediate+nos+".o"; |
189 | if(access(cc.c_str(),R_OK)) | 188 | if(access(cc.c_str(),R_OK)) |
190 | throw konforka::exception(CODEPOINT,string("can't access preprocessed component code (")+cc+")"); | 189 | throw konforka::exception(CODEPOINT,string("can't access preprocessed component code (")+cc+")"); |
191 | make_path(dir_name(cc),0755); | 190 | make_path(dir_name(cc),0755); |
192 | string pwd = dir_name(root_source+nos); | 191 | string pwd = dir_name(root_source+nos); |