diff options
-rw-r--r-- | Source/cmBorlandMakefileGenerator.cxx | 36 | ||||
-rw-r--r-- | Source/cmNMakeMakefileGenerator.cxx | 26 | ||||
-rw-r--r-- | Source/cmUnixMakefileGenerator.cxx | 69 | ||||
-rw-r--r-- | Source/cmUnixMakefileGenerator.h | 2 |
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; |