diff options
author | Dan Goodliffe <dan@randomdan.homeip.net> | 2016-10-24 00:31:04 +0100 |
---|---|---|
committer | Dan Goodliffe <dan@randomdan.homeip.net> | 2016-10-24 01:55:09 +0100 |
commit | e00e219def0fcebda19492f79c0dcc871792b239 (patch) | |
tree | 6b388313425894e111d96bcb4d7542bc6dc0791d | |
parent | Use AdHoc FileUtils to RAII guarantees. (diff) | |
download | icespider-e00e219def0fcebda19492f79c0dcc871792b239.tar.bz2 icespider-e00e219def0fcebda19492f79c0dcc871792b239.tar.xz icespider-e00e219def0fcebda19492f79c0dcc871792b239.zip |
Start writing some bits to a .h file
-rw-r--r-- | icespider/compile/icespider.jam | 4 | ||||
-rw-r--r-- | icespider/compile/routeCompiler.cpp | 34 | ||||
-rw-r--r-- | icespider/compile/routeCompiler.h | 2 | ||||
-rw-r--r-- | icespider/unittests/Jamfile.jam | 4 |
4 files changed, 29 insertions, 15 deletions
diff --git a/icespider/compile/icespider.jam b/icespider/compile/icespider.jam index ea2488f..f165434 100644 --- a/icespider/compile/icespider.jam +++ b/icespider/compile/icespider.jam @@ -5,12 +5,12 @@ import toolset : flags ; type.register JSON : json ; -generators.register-standard icespider.routes2cpp : JSON : CPP(icespider-routes-%) ; +generators.register-standard icespider.routes2cpp : JSON : CPP(icespider-routes-%) H(icespider-routes-%) ; flags icespider.routes2cpp INCLUDES <include> ; actions icespider.routes2cpp bind ICESPIDER { - icespider -I"$(INCLUDES)" $(2) $(1) + icespider -I"$(INCLUDES)" $(2) $(1[1]) } IMPORT $(__name__) : icespider.routes2cpp : : icespider.routes2cpp ; diff --git a/icespider/compile/routeCompiler.cpp b/icespider/compile/routeCompiler.cpp index d6ad73a..31716ad 100644 --- a/icespider/compile/routeCompiler.cpp +++ b/icespider/compile/routeCompiler.cpp @@ -149,6 +149,7 @@ namespace IceSpider { { auto configuration = loadConfiguration(input); auto units = loadUnits(configuration); + auto outputh = boost::filesystem::change_extension(output, ".h"); applyDefaults(configuration, units); AdHoc::ScopeExit uDestroy([&units]() { @@ -158,14 +159,21 @@ namespace IceSpider { }); FILE * out = fopen(output.c_str(), "w"); - if (!out) { - throw std::runtime_error("Failed to open output file"); + FILE * outh = fopen(outputh.c_str(), "w"); + if (!out || !outh) { + throw std::runtime_error("Failed to open output files"); } AdHoc::ScopeExit outClose( - [out]() { fclose(out); }, + [out,outh]() { + fclose(out); + fclose(outh); + }, NULL, - [&output]() { boost::filesystem::remove(output); }); - processConfiguration(out, configuration, units); + [&output,&outputh]() { + boost::filesystem::remove(output); + boost::filesystem::remove(outputh); + }); + processConfiguration(out, outh, output.stem().string(), configuration, units); } RouteCompiler::Units @@ -259,15 +267,21 @@ namespace IceSpider { } void - RouteCompiler::processConfiguration(FILE * output, RouteConfigurationPtr c, const Units & units) const + RouteCompiler::processConfiguration(FILE * output, FILE * outputh, const std::string & name, RouteConfigurationPtr c, const Units & units) const { fprintf(output, "// This source files was generated by IceSpider.\n"); fprintbf(output, "// Configuration name: %s\n\n", c->name); - fprintf(output, "// Standard headers.\n"); - fprintf(output, "#include <irouteHandler.h>\n"); - fprintf(output, "#include <core.h>\n"); - fprintf(output, "#include <slicer/serializer.h>\n"); + fprintf(outputh, "// This source files was generated by IceSpider.\n"); + fprintbf(outputh, "// Configuration name: %s\n\n", c->name); + + fprintf(output, "// Configuration headers.\n"); + fprintbf(output, "#include \"%s.h\"\n", name); + + fprintf(outputh, "// Standard headers.\n"); + fprintf(outputh, "#include <irouteHandler.h>\n"); + fprintf(outputh, "#include <core.h>\n"); + fprintf(outputh, "#include <slicer/serializer.h>\n"); fprintf(output, "\n// Interface headers.\n"); for (const auto & s : c->slices) { diff --git a/icespider/compile/routeCompiler.h b/icespider/compile/routeCompiler.h index 1f107fe..6116d51 100644 --- a/icespider/compile/routeCompiler.h +++ b/icespider/compile/routeCompiler.h @@ -27,7 +27,7 @@ namespace IceSpider { private: typedef std::map<std::string, int> Proxies; - void processConfiguration(FILE * output, RouteConfigurationPtr, const Units &) const; + void processConfiguration(FILE * output, FILE * outputh, const std::string & name, RouteConfigurationPtr, const Units &) const; void registerOutputSerializers(FILE * output, RoutePtr) const; void releaseOutputSerializers(FILE * output, RoutePtr) const; Proxies initializeProxies(FILE * output, RoutePtr) const; diff --git a/icespider/unittests/Jamfile.jam b/icespider/unittests/Jamfile.jam index 513f41f..1b6366d 100644 --- a/icespider/unittests/Jamfile.jam +++ b/icespider/unittests/Jamfile.jam @@ -7,14 +7,14 @@ import toolset : flags ; type.register JSON : json ; -generators.register-standard $(__name__).routes2cpp : JSON : CPP ; +generators.register-standard $(__name__).routes2cpp : JSON : CPP H ; feature icespider : : free dependency ; flags routes2cpp ICESPIDER <icespider> ; flags routes2cpp INCLUDES <include> ; actions routes2cpp bind ICESPIDER { - "$(ICESPIDER)" -I"$(INCLUDES)" $(2) $(1) + "$(ICESPIDER)" -I"$(INCLUDES)" $(2) $(1[1]) } lib adhocutil : : : : <include>/usr/include/adhocutil ; |