summaryrefslogtreecommitdiffstats
path: root/Source
diff options
context:
space:
mode:
Diffstat (limited to 'Source')
-rw-r--r--Source/cmFileCommand.cxx41
-rw-r--r--Source/cmFileCommand.h17
2 files changed, 46 insertions, 12 deletions
diff --git a/Source/cmFileCommand.cxx b/Source/cmFileCommand.cxx
index 416ac66..3c9d1ab 100644
--- a/Source/cmFileCommand.cxx
+++ b/Source/cmFileCommand.cxx
@@ -70,9 +70,13 @@ bool cmFileCommand::InitialPass(std::vector<std::string> const& args)
{
return this->HandleRelativePathCommand(args);
}
- else if ( subCommand == "SYSTEM_PATH" )
+ else if ( subCommand == "TO_CMAKE_PATH" )
{
- return this->HandleSystemPathCommand(args);
+ return this->HandleCMakePathCommand(args, false);
+ }
+ else if ( subCommand == "TO_NATIVE_PATH" )
+ {
+ return this->HandleCMakePathCommand(args, true);
}
std::string e = "does not recognize sub-command "+subCommand;
@@ -971,8 +975,9 @@ bool cmFileCommand::HandleRemove(std::vector<std::string> const& args,
}
//----------------------------------------------------------------------------
-bool cmFileCommand::HandleSystemPathCommand(std::vector<std::string>
- const& args)
+bool cmFileCommand::HandleCMakePathCommand(std::vector<std::string>
+ const& args,
+ bool nativePath)
{
std::vector<std::string>::const_iterator i = args.begin();
if(args.size() != 3)
@@ -982,17 +987,39 @@ bool cmFileCommand::HandleSystemPathCommand(std::vector<std::string>
return false;
}
i++; // Get rid of subcommand
- std::vector<std::string> path;
- cmSystemTools::GetPath(path, i->c_str());
+#if defined(_WIN32) && !defined(__CYGWIN__)
+ char pathSep = ';';
+#else
+ char pathSep = ':';
+#endif
+ std::vector<cmsys::String> path = cmSystemTools::SplitString(i->c_str(),
+ pathSep);
i++;
const char* var = i->c_str();
std::string value;
- for(std::vector<std::string>::iterator j = path.begin();
+ for(std::vector<cmsys::String>::iterator j = path.begin();
j != path.end(); ++j)
{
+ if(!nativePath)
+ {
+ cmSystemTools::ConvertToUnixSlashes(*j);
+ }
+ else
+ {
+ *j = cmSystemTools::ConvertToOutputPath(j->c_str());
+ // remove double quotes in the path
+ cmsys::String& s = *j;
+
+ if(s.size() > 1 && s[0] == '\"' && s[s.size()-1] == '\"')
+ {
+ s = s.substr(1,s.size()-2);
+ }
+ }
value += *j;
value += ";";
}
this->Makefile->AddDefinition(var, value.c_str());
return true;
}
+
+
diff --git a/Source/cmFileCommand.h b/Source/cmFileCommand.h
index 324254f..926a0ad 100644
--- a/Source/cmFileCommand.h
+++ b/Source/cmFileCommand.h
@@ -73,7 +73,8 @@ public:
" FILE(REMOVE_RECURSE [directory]...)\n"
" FILE(MAKE_DIRECTORY [directory]...)\n"
" FILE(RELATIVE_PATH variable directory file)\n"
- " FILE(SYSTEM_PATH ENVIRONMENT_VARIABLE result)\n"
+ " FILE(TO_CMAKE_PATH path result)\n"
+ " FILE(TO_NATIVE_PATH path result)\n"
"WRITE will write a message into a file called 'filename'. It "
"overwrites the file if it already exists, and creates the file "
"if it does not exist.\n"
@@ -101,9 +102,14 @@ public:
" /dir/*.py - match all python files in /dir and subdirectories\n"
"MAKE_DIRECTORY will create a directory at the specified location\n"
"RELATIVE_PATH will determine relative path from directory to the given"
- " file."
- " SYSTEM_PATH will look up the environment variable named and "
- "convert its contents into a cmake list of unix style paths. ";
+ " file.\n"
+ "TO_CMAKE_PATH will convert path into a cmake sytle path with unix /. "
+ " The input can be a single path or a system path like \"$ENV{PATH}\". "
+ " Note the double quotes around the ENV call TO_CMAKE_PATH only takes "
+ " one argument.\n"
+ "TO_NATIVE_PATH works just like TO_CMAKE_PATH, but will convert from "
+ " a cmake style path into the native path style \\ for windows and / "
+ "for UNIX.";
}
cmTypeMacro(cmFileCommand, cmCommand);
@@ -116,7 +122,8 @@ protected:
bool HandleMakeDirectoryCommand(std::vector<std::string> const& args);
bool HandleInstallCommand(std::vector<std::string> const& args);
bool HandleRelativePathCommand(std::vector<std::string> const& args);
- bool HandleSystemPathCommand(std::vector<std::string> const& args);
+ bool HandleCMakePathCommand(std::vector<std::string> const& args,
+ bool nativePath);
};