-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 @@ -2,24 +2,52 @@ #define __SITECING_SITECING_EXCEPTION_H #include <konforka/exception.h> /** * @file * @brief The site-C-ing specific exception. */ namespace sitecing { /** + * The comonent failed to link. + */ + class link_error : public konforka::exception { + public: + /** + * The component path + */ + string component_path; + + /** + * @param w the message. + * @param cp component path. + */ + link_error(const string& w,const string& cp) + : konforka::exception(NOCODEPOINT,w), component_path(cp) { } + /** + * @param fi the file name where the exception is thrown from. + * @param fu the function name where the exception originates from. + * @param l the line number where the exception originates from. + * @param w the message. + * @param cp component path. + */ + link_error(const string& fi,const string& fu,int l,const string& w,const string& cp) + : konforka::exception(fi,fu,l,w), component_path(cp) { } + ~link_error() throw() { } + }; + + /** * The component failed to compile. */ class compile_error : public konforka::exception { public: /** * The component path */ string component_path; /** * @param w the message. * @param cp component path. @@ -28,24 +56,25 @@ namespace sitecing { : konforka::exception(NOCODEPOINT,w), component_path(cp) { } /** * @param whe point in code. * @param wha the message. * @param cp component path. */ compile_error(const string &whe,const string& wha,const string& cp) : konforka::exception(whe,wha), component_path(cp) { } /** * @param fi the file name where the exception is thrown from. * @param fu the function name where the exception originates from. * @param l the line number where the exception originates from. + * @param w the message. * @param cp component path. */ compile_error(const string &fi,const string& fu,int l,const string& w,const string& cp) : konforka::exception(fi,fu,l,w), component_path(cp) { } ~compile_error() throw() { } }; /** * Failed to preprocess component source. */ class preprocessor_error : public konforka::exception { public: 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 @@ -163,26 +163,25 @@ namespace sitecing { args.push_back(o); file_list_t ancestors; get_ancestors(noro,ancestors); for(file_list_t::const_iterator i=ancestors.begin();i!=ancestors.end();++i) { string aso=root_so+*i+".so"; make(aso); args.push_back(aso); } args.push_back("-o"); args.push_back(dp); // TODO: "g++" configurable int rv = execute("g++",args,stdO,stdE); if(! (WIFEXITED(rv) && !WEXITSTATUS(rv)) ) - // TODO:TODO: linker_error - throw compile_error(CODEPOINT,"failed to link component",noro); + throw link_error(CODEPOINT,"failed to link component",noro); return; }catch(utility_no_prefix& unp) { throw konforka::exception(CODEPOINT,"component is outside of component root"); }catch(utility_no_suffix& uns) { } try { string noro = strip_prefix(dp,root_intermediate); // compiler targets for(int cct=0;cct<sizeof(cc_targets)/sizeof(*cc_targets);cct++) { try { string nos = strip_suffix(noro,cc_targets[cct]); string cc = root_intermediate+nos+".cc"; string o = root_intermediate+nos+".o"; |