summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDan Goodliffe <dan@randomdan.homeip.net>2016-10-24 00:31:04 +0100
committerDan Goodliffe <dan@randomdan.homeip.net>2016-10-24 01:55:09 +0100
commite00e219def0fcebda19492f79c0dcc871792b239 (patch)
tree6b388313425894e111d96bcb4d7542bc6dc0791d
parentUse AdHoc FileUtils to RAII guarantees. (diff)
downloadicespider-e00e219def0fcebda19492f79c0dcc871792b239.tar.bz2
icespider-e00e219def0fcebda19492f79c0dcc871792b239.tar.xz
icespider-e00e219def0fcebda19492f79c0dcc871792b239.zip
Start writing some bits to a .h file
-rw-r--r--icespider/compile/icespider.jam4
-rw-r--r--icespider/compile/routeCompiler.cpp34
-rw-r--r--icespider/compile/routeCompiler.h2
-rw-r--r--icespider/unittests/Jamfile.jam4
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 ;