summaryrefslogtreecommitdiff
path: root/cpp/src/Slice/SliceUtil.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'cpp/src/Slice/SliceUtil.cpp')
-rw-r--r--cpp/src/Slice/SliceUtil.cpp96
1 files changed, 34 insertions, 62 deletions
diff --git a/cpp/src/Slice/SliceUtil.cpp b/cpp/src/Slice/SliceUtil.cpp
index 09dd9e312ec..b148b91dea7 100644
--- a/cpp/src/Slice/SliceUtil.cpp
+++ b/cpp/src/Slice/SliceUtil.cpp
@@ -7,11 +7,15 @@
//
// **********************************************************************
+#include <IceUtil/DisableWarnings.h>
#include <Slice/Util.h>
+#include <Slice/FileTracker.h>
#include <IceUtil/FileUtil.h>
#include <IceUtil/StringUtil.h>
#include <IceUtil/StringConverter.h>
+#include <IceUtil/ConsoleUtil.h>
#include <climits>
+#include <cstring>
#ifndef _MSC_VER
# include <unistd.h> // For readlink()
@@ -19,6 +23,7 @@
using namespace std;
using namespace Slice;
+using namespace IceUtilInternal;
namespace
{
@@ -210,38 +215,19 @@ Slice::changeInclude(const string& p, const vector<string>& includePaths)
return result;
}
-namespace
-{
-
-ostream* errorStream = &cerr;
-
-}
-
-void
-Slice::setErrorStream(ostream& stream)
-{
- errorStream = &stream;
-}
-
-ostream&
-Slice::getErrorStream()
-{
- return *errorStream;
-}
-
void
Slice::emitError(const string& file, int line, const string& message)
{
if(!file.empty())
{
- *errorStream << file;
+ consoleErr << file;
if(line != -1)
{
- *errorStream << ':' << line;
+ consoleErr << ':' << line;
}
- *errorStream << ": ";
+ consoleErr << ": ";
}
- *errorStream << message << endl;
+ consoleErr << message << endl;
}
void
@@ -249,14 +235,14 @@ Slice::emitWarning(const string& file, int line, const string& message)
{
if(!file.empty())
{
- *errorStream << file;
+ consoleErr << file;
if(line != -1)
{
- *errorStream << ':' << line;
+ consoleErr << ':' << line;
}
- *errorStream << ": ";
+ consoleErr << ": ";
}
- *errorStream << "warning: " << message << endl;
+ consoleErr << "warning: " << message << endl;
}
void
@@ -264,14 +250,14 @@ Slice::emitError(const string& file, const std::string& line, const string& mess
{
if(!file.empty())
{
- *errorStream << file;
+ consoleErr << file;
if(!line.empty())
{
- *errorStream << ':' << line;
+ consoleErr << ':' << line;
}
- *errorStream << ": ";
+ consoleErr << ": ";
}
- *errorStream << message << endl;
+ consoleErr << message << endl;
}
void
@@ -279,20 +265,20 @@ Slice::emitWarning(const string& file, const std::string& line, const string& me
{
if(!file.empty())
{
- *errorStream << file;
+ consoleErr << file;
if(!line.empty())
{
- *errorStream << ':' << line;
+ consoleErr << ':' << line;
}
- *errorStream << ": ";
+ consoleErr << ": ";
}
- *errorStream << "warning: " << message << endl;
+ consoleErr << "warning: " << message << endl;
}
void
Slice::emitRaw(const char* message)
{
- *errorStream << message << flush;
+ consoleErr << message << flush;
}
vector<string>
@@ -398,41 +384,27 @@ Slice::printGeneratedHeader(IceUtilInternal::Output& out, const string& path, co
out << comment << "\n";
}
-Slice::DependOutputUtil::DependOutputUtil(string& file) : _file(file)
+void
+Slice::writeDependencies(const string& dependencies, const string& dependFile)
{
- if(!_file.empty())
+ if(dependFile.empty())
{
- _os.open(file.c_str(), ios::out);
+ consoleOut << dependencies << flush;
}
-}
-
-Slice::DependOutputUtil::~DependOutputUtil()
-{
- if(!_file.empty() && _os.is_open())
+ else
{
- _os.close();
- }
-}
-
-void
-Slice::DependOutputUtil::cleanup()
-{
- if(!_file.empty())
- {
- if(_os.is_open())
+ ofstream of(IceUtilInternal::streamFilename(dependFile).c_str()); // dependFile is a UTF-8 string
+ if(!of)
{
- _os.close();
+ ostringstream os;
+ os << "cannot open file `" << dependFile << "': " << strerror(errno);
+ throw Slice::FileException(__FILE__, __LINE__, os.str());
}
- IceUtilInternal::unlink(_file);
+ of << dependencies;
+ of.close();
}
}
-ostream&
-Slice::DependOutputUtil::os()
-{
- return _file.empty() ? cout : _os;
-}
-
#ifdef _WIN32
vector<string>
Slice::argvToArgs(int argc, wchar_t* argv[])