summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--Source/cmake.cxx24
-rw-r--r--Source/cmake.h2
2 files changed, 26 insertions, 0 deletions
diff --git a/Source/cmake.cxx b/Source/cmake.cxx
index a1a3a68..0c03b65 100644
--- a/Source/cmake.cxx
+++ b/Source/cmake.cxx
@@ -1986,8 +1986,32 @@ int cmake::Configure()
}
+bool cmake::RejectUnsupportedPaths(const char* desc, std::string const& path)
+{
+ // Some characters are not well-supported by native build systems.
+ std::string::size_type pos = path.find_first_of("=");
+ if(pos == std::string::npos)
+ {
+ return false;
+ }
+ cmOStringStream e;
+ e << "The path to the " << desc << " directory:\n"
+ << " " << path << "\n"
+ << "contains unsupported character '" << path[pos] << "'.\n"
+ << "Please use a different " << desc << " directory name.";
+ cmListFileBacktrace bt;
+ this->IssueMessage(cmake::FATAL_ERROR, e.str(), bt);
+ return true;
+}
+
int cmake::ActualConfigure()
{
+ if(this->RejectUnsupportedPaths("source", this->cmHomeDirectory) ||
+ this->RejectUnsupportedPaths("binary", this->HomeOutputDirectory))
+ {
+ return 1;
+ }
+
// Construct right now our path conversion table before it's too late:
this->UpdateConversionPathTable();
this->CleanupCommandsAndMacros();
diff --git a/Source/cmake.h b/Source/cmake.h
index 1bb42d3..70fcaa8 100644
--- a/Source/cmake.h
+++ b/Source/cmake.h
@@ -451,6 +451,8 @@ protected:
///! Find the full path to one of the cmake programs like ctest, cpack, etc.
std::string FindCMakeProgram(const char* name) const;
+
+ bool RejectUnsupportedPaths(const char* desc, std::string const& path);
private:
cmake(const cmake&); // Not implemented.
void operator=(const cmake&); // Not implemented.