From 874a4e56e2a34579267eb9f1a01a56106b6bc37a Mon Sep 17 00:00:00 2001 From: Michi Henning Date: Wed, 7 Sep 2005 06:44:51 +0000 Subject: Bug 355. --- cpp/src/slice2cpp/Gen.cpp | 40 ++++++++++++++++++++++++++++++++++++++-- 1 file changed, 38 insertions(+), 2 deletions(-) (limited to 'cpp/src/slice2cpp/Gen.cpp') diff --git a/cpp/src/slice2cpp/Gen.cpp b/cpp/src/slice2cpp/Gen.cpp index 9d9d7d4ee4b..66db0d096b1 100644 --- a/cpp/src/slice2cpp/Gen.cpp +++ b/cpp/src/slice2cpp/Gen.cpp @@ -21,11 +21,13 @@ using namespace Slice; using namespace IceUtil; Slice::Gen::Gen(const string& name, const string& base, const string& headerExtension, - const string& sourceExtension, const string& include, const vector& includePaths, - const string& dllExport, const string& dir, bool imp, bool checksum, bool stream) : + const string& sourceExtension, const vector& extraHeaders, const string& include, + const vector& includePaths, const string& dllExport, const string& dir, + bool imp, bool checksum, bool stream) : _base(base), _headerExtension(headerExtension), _sourceExtension(sourceExtension), + _extraHeaders(extraHeaders), _include(include), _includePaths(includePaths), _dllExport(dllExport), @@ -167,6 +169,40 @@ Slice::Gen::generate(const UnitPtr& p) { validateMetaData(p); + // + // Output additional header includes first. + // + vector::const_iterator i; + for(i = _extraHeaders.begin(); i != _extraHeaders.end(); ++i) + { + string hdr = *i; + string guard; + string::size_type pos = hdr.rfind(','); + if(pos != string::npos) + { + hdr = i->substr(0, pos); + guard = i->substr(pos + 1); + } + if(!guard.empty()) + { + C << "\n#ifndef " << guard; + C << "\n#define " << guard; + } + C << "\n#include <"; + if(!_include.empty()) + { + C << _include << '/'; + } + C << hdr << '>'; + if(!guard.empty()) + { + C << "\n#endif"; + } + } + + // + // Output remaining includes. + // C << "\n#include <"; if(_include.size()) { -- cgit v1.2.3