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 ; | 
