From e00e219def0fcebda19492f79c0dcc871792b239 Mon Sep 17 00:00:00 2001 From: Dan Goodliffe Date: Mon, 24 Oct 2016 00:31:04 +0100 Subject: Start writing some bits to a .h file --- icespider/compile/icespider.jam | 4 ++-- icespider/compile/routeCompiler.cpp | 34 ++++++++++++++++++++++++---------- icespider/compile/routeCompiler.h | 2 +- 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 ; 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 \n"); - fprintf(output, "#include \n"); - fprintf(output, "#include \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 \n"); + fprintf(outputh, "#include \n"); + fprintf(outputh, "#include \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 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 ; flags routes2cpp INCLUDES ; actions routes2cpp bind ICESPIDER { - "$(ICESPIDER)" -I"$(INCLUDES)" $(2) $(1) + "$(ICESPIDER)" -I"$(INCLUDES)" $(2) $(1[1]) } lib adhocutil : : : : /usr/include/adhocutil ; -- cgit v1.2.3