summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--Source/cmBorlandMakefileGenerator.cxx36
-rw-r--r--Source/cmNMakeMakefileGenerator.cxx26
-rw-r--r--Source/cmUnixMakefileGenerator.cxx69
-rw-r--r--Source/cmUnixMakefileGenerator.h2
4 files changed, 120 insertions, 13 deletions
diff --git a/Source/cmBorlandMakefileGenerator.cxx b/Source/cmBorlandMakefileGenerator.cxx
index e90c1af..30a3844 100644
--- a/Source/cmBorlandMakefileGenerator.cxx
+++ b/Source/cmBorlandMakefileGenerator.cxx
@@ -69,6 +69,15 @@ void cmBorlandMakefileGenerator::ComputeSystemInfo()
"CMAKE_ROOT has not been defined, bad GUI or driver program");
return;
}
+ std::string outdir = m_Makefile->GetCurrentOutputDirectory();
+ if(outdir.find('-') != std::string::npos)
+ {
+ std::string message = "The Borland command line tools do not support path names that have - in them. Please re-name your output directory and use _ instead of -.";
+ message += "\nYour path currently is: ";
+ message += outdir;
+ cmSystemTools::Error(message.c_str());
+ }
+
std::string fpath =
m_Makefile->GetDefinition("CMAKE_ROOT");
fpath += "/Templates/CMakeBorlandWindowsSystemConfig.cmake";
@@ -357,11 +366,18 @@ void cmBorlandMakefileGenerator::OutputSharedLibraryRule(std::ostream& fout,
}
command += "\n|\n";
+ std::string customCommands = this->CreateTargetRules(t, name);
+ const char* cc = 0;
+ if(customCommands.size() > 0)
+ {
+ cc = customCommands.c_str();
+ }
this->OutputMakeRule(fout, "rules for a shared library",
target.c_str(),
depend.c_str(),
command.c_str(),
- command2.c_str());
+ command2.c_str(),
+ cc);
}
void cmBorlandMakefileGenerator::OutputModuleLibraryRule(std::ostream& fout,
@@ -373,7 +389,7 @@ void cmBorlandMakefileGenerator::OutputModuleLibraryRule(std::ostream& fout,
void cmBorlandMakefileGenerator::OutputStaticLibraryRule(std::ostream& fout,
const char* name,
- const cmTarget &)
+ const cmTarget &t)
{
std::string target = m_LibraryOutputPath + std::string(name) + ".lib";
cmSystemTools::ConvertToWindowsSlashes(target);
@@ -391,12 +407,18 @@ void cmBorlandMakefileGenerator::OutputStaticLibraryRule(std::ostream& fout,
command += "\n|\n";
std::string comment = "rule to build static library: ";
comment += name;
+ std::string customCommands = this->CreateTargetRules(t, name);
+ const char* cc = 0;
+ if(customCommands.size() > 0)
+ {
+ cc = customCommands.c_str();
+ }
this->OutputMakeRule(fout,
comment.c_str(),
target.c_str(),
depend.c_str(),
deleteCommand.c_str(),
- command.c_str());
+ command.c_str(), cc);
}
void cmBorlandMakefileGenerator::OutputExecutableRule(std::ostream& fout,
@@ -428,11 +450,17 @@ void cmBorlandMakefileGenerator::OutputExecutableRule(std::ostream& fout,
std::string comment = "rule to build executable: ";
comment += name;
+ std::string customCommands = this->CreateTargetRules(t, name);
+ const char* cc = 0;
+ if(customCommands.size() > 0)
+ {
+ cc = customCommands.c_str();
+ }
this->OutputMakeRule(fout,
comment.c_str(),
target.c_str(),
depend.c_str(),
- command.c_str());
+ command.c_str(), cc);
}
diff --git a/Source/cmNMakeMakefileGenerator.cxx b/Source/cmNMakeMakefileGenerator.cxx
index bfb612b..5c1a9de 100644
--- a/Source/cmNMakeMakefileGenerator.cxx
+++ b/Source/cmNMakeMakefileGenerator.cxx
@@ -459,10 +459,16 @@ void cmNMakeMakefileGenerator::OutputSharedLibraryRule(std::ostream& fout,
command += "<<\n";
}
+ std::string customCommands = this->CreateTargetRules(t, name);
+ const char* cc = 0;
+ if(customCommands.size() > 0)
+ {
+ cc = customCommands.c_str();
+ }
this->OutputMakeRule(fout, "rules for a shared library",
target.c_str(),
depend.c_str(),
- command.c_str());
+ command.c_str(), cc);
}
void cmNMakeMakefileGenerator::OutputModuleLibraryRule(std::ostream& fout,
@@ -474,7 +480,7 @@ void cmNMakeMakefileGenerator::OutputModuleLibraryRule(std::ostream& fout,
void cmNMakeMakefileGenerator::OutputStaticLibraryRule(std::ostream& fout,
const char* name,
- const cmTarget &)
+ const cmTarget &t)
{
std::string target = m_LibraryOutputPath + std::string(name) + m_StaticLibraryExtension;
std::string depend = "$(";
@@ -498,11 +504,17 @@ void cmNMakeMakefileGenerator::OutputStaticLibraryRule(std::ostream& fout,
std::string comment = "rule to build static library: ";
comment += name;
+ std::string customCommands = this->CreateTargetRules(t, name);
+ const char* cc = 0;
+ if(customCommands.size() > 0)
+ {
+ cc = customCommands.c_str();
+ }
this->OutputMakeRule(fout,
comment.c_str(),
target.c_str(),
depend.c_str(),
- command.c_str());
+ command.c_str(), cc);
}
void cmNMakeMakefileGenerator::OutputExecutableRule(std::ostream& fout,
@@ -541,11 +553,17 @@ void cmNMakeMakefileGenerator::OutputExecutableRule(std::ostream& fout,
std::string comment = "rule to build executable: ";
comment += name;
+ std::string customCommands = this->CreateTargetRules(t, name);
+ const char* cc = 0;
+ if(customCommands.size() > 0)
+ {
+ cc = customCommands.c_str();
+ }
this->OutputMakeRule(fout,
comment.c_str(),
target.c_str(),
depend.c_str(),
- command.c_str());
+ command.c_str(), cc);
}
diff --git a/Source/cmUnixMakefileGenerator.cxx b/Source/cmUnixMakefileGenerator.cxx
index 23a2337..3b53240 100644
--- a/Source/cmUnixMakefileGenerator.cxx
+++ b/Source/cmUnixMakefileGenerator.cxx
@@ -545,6 +545,36 @@ void cmUnixMakefileGenerator::OutputLinkLibraries(std::ostream& fout,
}
+std::string cmUnixMakefileGenerator::CreateTargetRules(const cmTarget &target,
+ const char* targetName)
+{
+ std::string customRuleCode = "";
+ bool initNext = false;
+ for (std::vector<cmCustomCommand>::const_iterator cr =
+ target.GetCustomCommands().begin();
+ cr != target.GetCustomCommands().end(); ++cr)
+ {
+ cmCustomCommand cc(*cr);
+ cc.ExpandVariables(*m_Makefile);
+ if (cc.GetSourceName() == targetName)
+ {
+ if(initNext)
+ {
+ customRuleCode += "\n\t";
+ }
+ else
+ {
+ initNext = true;
+ }
+ std::string command = cmSystemTools::EscapeSpaces(cc.GetCommand().c_str());
+ command = this->ConvertToNativePath(command.c_str());
+ customRuleCode += command + " " + cc.GetArguments();
+ }
+ }
+ return customRuleCode;
+}
+
+
void cmUnixMakefileGenerator::OutputSharedLibraryRule(std::ostream& fout,
const char* name,
const cmTarget &t)
@@ -566,11 +596,18 @@ void cmUnixMakefileGenerator::OutputSharedLibraryRule(std::ostream& fout,
linklibs << std::ends;
command2 += linklibs.str();
delete [] linklibs.str();
+ std::string customCommands = this->CreateTargetRules(t, name);
+ const char* cc = 0;
+ if(customCommands.size() > 0)
+ {
+ cc = customCommands.c_str();
+ }
this->OutputMakeRule(fout, "rules for a shared library",
target.c_str(),
depend.c_str(),
command.c_str(),
- command2.c_str());
+ command2.c_str(),
+ cc);
}
void cmUnixMakefileGenerator::OutputModuleLibraryRule(std::ostream& fout,
@@ -591,17 +628,24 @@ void cmUnixMakefileGenerator::OutputModuleLibraryRule(std::ostream& fout,
linklibs << std::ends;
command2 += linklibs.str();
delete [] linklibs.str();
+ std::string customCommands = this->CreateTargetRules(t, name);
+ const char* cc = 0;
+ if(customCommands.size() > 0)
+ {
+ cc = customCommands.c_str();
+ }
this->OutputMakeRule(fout, "rules for a shared module library",
target.c_str(),
depend.c_str(),
command.c_str(),
- command2.c_str());
+ command2.c_str(),
+ cc);
}
void cmUnixMakefileGenerator::OutputStaticLibraryRule(std::ostream& fout,
const char* name,
- const cmTarget &)
+ const cmTarget &t)
{
std::string target = m_LibraryOutputPath + "lib" + std::string(name) + ".a";
std::string depend = "$(";
@@ -618,12 +662,19 @@ void cmUnixMakefileGenerator::OutputStaticLibraryRule(std::ostream& fout,
command2 += std::string(name) + ".a";
std::string comment = "rule to build static library: ";
comment += name;
+ std::string customCommands = this->CreateTargetRules(t, name);
+ const char* cc = 0;
+ if(customCommands.size() > 0)
+ {
+ cc = customCommands.c_str();
+ }
this->OutputMakeRule(fout,
comment.c_str(),
target.c_str(),
depend.c_str(),
command.c_str(),
- command2.c_str());
+ command2.c_str(),
+ cc);
}
void cmUnixMakefileGenerator::OutputExecutableRule(std::ostream& fout,
@@ -643,11 +694,19 @@ void cmUnixMakefileGenerator::OutputExecutableRule(std::ostream& fout,
command += " -o " + m_ExecutableOutputPath + name;
std::string comment = "rule to build executable: ";
comment += name;
+
+ std::string customCommands = this->CreateTargetRules(t, name);
+ const char* cc = 0;
+ if(customCommands.size() > 0)
+ {
+ cc = customCommands.c_str();
+ }
this->OutputMakeRule(fout,
comment.c_str(),
target.c_str(),
depend.c_str(),
- command.c_str());
+ command.c_str(),
+ cc);
}
diff --git a/Source/cmUnixMakefileGenerator.h b/Source/cmUnixMakefileGenerator.h
index b1145f4..b5a3901 100644
--- a/Source/cmUnixMakefileGenerator.h
+++ b/Source/cmUnixMakefileGenerator.h
@@ -165,6 +165,8 @@ protected:
void SetSharedLibraryExtension(const char* e) {m_SharedLibraryExtension = e;}
void SetLibraryPrefix(const char* e) { m_LibraryPrefix = e;}
virtual std::string ConvertToNativePath(const char* s) { return s; }
+ std::string cmUnixMakefileGenerator::CreateTargetRules(const cmTarget &target,
+ const char* targetName);
protected:
std::string m_ExecutableOutputPath;
std::string m_LibraryOutputPath;