diff options
author | Bill Hoffman <bill.hoffman@kitware.com> | 2001-11-28 16:12:15 (GMT) |
---|---|---|
committer | Bill Hoffman <bill.hoffman@kitware.com> | 2001-11-28 16:12:15 (GMT) |
commit | fd516c022d96188507582f625d8d0dc1afccd8c4 (patch) | |
tree | 4f7a1c5a2c346cc7ed31800cac7ef0451c336593 | |
parent | af9bc3fa9fcf887e135c44dad067fb87af651ead (diff) | |
download | CMake-fd516c022d96188507582f625d8d0dc1afccd8c4.zip CMake-fd516c022d96188507582f625d8d0dc1afccd8c4.tar.gz CMake-fd516c022d96188507582f625d8d0dc1afccd8c4.tar.bz2 |
add new borland generator
-rw-r--r-- | Source/CMakeLists.txt | 1 | ||||
-rw-r--r-- | Source/cmBorlandMakefileGenerator2.cxx | 452 | ||||
-rw-r--r-- | Source/cmBorlandMakefileGenerator2.h | 112 | ||||
-rw-r--r-- | Source/cmNMakeMakefileGenerator.cxx | 37 | ||||
-rw-r--r-- | Source/cmNMakeMakefileGenerator.h | 4 | ||||
-rw-r--r-- | Source/cmake.cxx | 2 |
6 files changed, 590 insertions, 18 deletions
diff --git a/Source/CMakeLists.txt b/Source/CMakeLists.txt index 90dd1c6..9e751ad 100644 --- a/Source/CMakeLists.txt +++ b/Source/CMakeLists.txt @@ -37,6 +37,7 @@ ADD_DEFINITIONS(-DCMAKE_BUILD_WITH_CMAKE) IF (WIN32) SOURCE_FILES(SRCS cmDSWWriter.cxx cmDSPWriter.cxx cmMSProjectGenerator.cxx) + SOURCE_FILES(SRCS cmBorlandMakefileGenerator2.cxx) SOURCE_FILES(SRCS cmBorlandMakefileGenerator.cpp) SOURCE_FILES(SRCS cmNMakeMakefileGenerator.cxx) IF(NOT UNIX) diff --git a/Source/cmBorlandMakefileGenerator2.cxx b/Source/cmBorlandMakefileGenerator2.cxx new file mode 100644 index 0000000..6efb40a --- /dev/null +++ b/Source/cmBorlandMakefileGenerator2.cxx @@ -0,0 +1,452 @@ +/*========================================================================= + + Program: Insight Segmentation & Registration Toolkit + Module: $RCSfile$ + Language: C++ + Date: $Date$ + Version: $Revision$ + +Copyright (c) 2001 Insight Consortium +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + + * Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + + * Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + + * The name of the Insight Consortium, nor the names of any consortium members, + nor of any contributors, may be used to endorse or promote products derived + from this software without specific prior written permission. + + * Modified source versions must be plainly marked as such, and must not be + misrepresented as being the original software. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDER AND CONTRIBUTORS ``AS IS'' +AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHORS OR CONTRIBUTORS BE LIABLE FOR +ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR +SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, +OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +=========================================================================*/ +#include "cmBorlandMakefileGenerator2.h" +#include "cmMakefile.h" +#include "cmStandardIncludes.h" +#include "cmSystemTools.h" +#include "cmSourceFile.h" +#include "cmMakeDepend.h" +#include "cmCacheManager.h" +#include "cmGeneratedFileStream.h" +#include "windows.h" + + +cmBorlandMakefileGenerator2::cmBorlandMakefileGenerator2() +{ + this->SetLibraryPathOption("-L"); +} + +cmBorlandMakefileGenerator2::~cmBorlandMakefileGenerator2() +{ +} + + +void cmBorlandMakefileGenerator2::ComputeSystemInfo() +{ + // now load the settings + if(!m_Makefile->GetDefinition("CMAKE_ROOT")) + { + cmSystemTools::Error( + "CMAKE_ROOT has not been defined, bad GUI or driver program"); + return; + } + std::string fpath = + m_Makefile->GetDefinition("CMAKE_ROOT"); + fpath += "/Templates/CMakeWindowsBorlandConfig2.cmake"; + m_Makefile->ReadListFile(NULL,fpath.c_str()); +} + + + +void cmBorlandMakefileGenerator2::OutputMakeVariables(std::ostream& fout) +{ + fout << "# NMake Makefile generated by cmake\n"; + const char* variables = + "# general varibles used in the makefile\n" + "\n" + "# Path to cmake\n" + "CMAKE_COMMAND = ${CMAKE_COMMAND}\n" + "CMAKE_STANDARD_WINDOWS_LIBRARIES = @CMAKE_STANDARD_WINDOWS_LIBRARIES@\n" + "FLAGS_LINK_EXE = @FLAGS_LINK_EXE@ \n" + "FLAGS_LINK_LIB = @FLAGS_LINK_LIB@ \n" + "FLAGS_LINK_STATIC = @FLAGS_LINK_STATIC@ \n" + "CMAKE_C_COMPILER = @CMAKE_C_COMPILER@ \n" + "CMAKE_CFLAGS = @CMAKE_CFLAGS@ @BUILD_FLAGS@\n" + "CMAKE_CXX_COMPILER = @CMAKE_CXX_COMPILER@\n" + "CMAKE_CXXFLAGS = -P @CMAKE_CXX_FLAGS@ @BUILD_FLAGS@\n"; + std::string buildType = "CMAKE_CXX_FLAGS_"; + buildType += m_Makefile->GetDefinition("CMAKE_BUILD_TYPE"); + buildType = cmSystemTools::UpperCase(buildType); + m_Makefile->AddDefinition("BUILD_FLAGS", + m_Makefile->GetDefinition( + buildType.c_str())); + std::string replaceVars = variables; + m_Makefile->ExpandVariablesInString(replaceVars); + fout << replaceVars.c_str(); + fout << "CMAKE_CURRENT_SOURCE = " + << ShortPath(m_Makefile->GetStartDirectory() ) + << "\n"; + fout << "CMAKE_CURRENT_BINARY = " + << ShortPath(m_Makefile->GetStartOutputDirectory()) + << "\n"; + fout << "CMAKE_SOURCE_DIR = " + << ShortPath(m_Makefile->GetHomeDirectory()) << "\n"; + fout << "CMAKE_BINARY_DIR = " + << ShortPath(m_Makefile->GetHomeOutputDirectory() ) + << "\n"; + // Output Include paths + fout << "INCLUDE_FLAGS = "; + std::vector<std::string>& includes = m_Makefile->GetIncludeDirectories(); + std::vector<std::string>::iterator i; + fout << "-I" << cmSystemTools::EscapeSpaces(m_Makefile->GetStartDirectory()) << " "; + for(i = includes.begin(); i != includes.end(); ++i) + { + std::string include = *i; + // Don't output a -I for the standard include path "/usr/include". + // This can cause problems with certain standard library + // implementations because the wrong headers may be found first. + if(include != "/usr/include") + { + fout << "-I" << cmSystemTools::EscapeSpaces(i->c_str()).c_str() << " "; + } + } + fout << m_Makefile->GetDefineFlags(); + fout << "\n\n"; +} + + +void cmBorlandMakefileGenerator2::BuildInSubDirectory(std::ostream& fout, + const char* directory, + const char* target1, + const char* target2) +{ + if(target1) + { + std::string dir = directory; + cmSystemTools::ConvertToWindowsSlashes(dir); + fout << "\tif not exist " << cmSystemTools::EscapeSpaces(dir.c_str()) + << " " + << "$(MAKE) rebuild_cache\n" + << "\tcd .\\" << directory << "\n" + << "\t$(MAKE) -$(MAKEFLAGS) " << target1 << "\n"; + } + if(target2) + { + fout << "\t$(MAKE) -$(MAKEFLAGS) " << target2 << "\n"; + } + std::string currentDir = m_Makefile->GetCurrentOutputDirectory(); + cmSystemTools::ConvertToWindowsSlashes(currentDir); + fout << "\tcd " << cmSystemTools::EscapeSpaces(currentDir.c_str()) << "\n"; +} + + + + +// This needs to be overriden because nmake requires commands to be quoted +// if the are full paths to the executable???? + +void cmBorlandMakefileGenerator2::OutputMakeRule(std::ostream& fout, + const char* comment, + const char* target, + const char* depends, + const char* command, + const char* command2, + const char* command3, + const char* command4) +{ + if(!target) + { + cmSystemTools::Error("no target for OutputMakeRule"); + return; + } + + std::string replace; + if(comment) + { + replace = comment; + m_Makefile->ExpandVariablesInString(replace); + fout << "#---------------------------------------------------------\n"; + fout << "# " << comment; + fout << "\n#\n"; + } + fout << "\n"; + replace = target; + m_Makefile->ExpandVariablesInString(replace); + replace = cmSystemTools::EscapeSpaces(replace.c_str()); + fout << replace.c_str() << ": "; + if(depends) + { + replace = depends; + m_Makefile->ExpandVariablesInString(replace); + fout << replace.c_str(); + } + fout << "\n"; + const char* startCommand = "\t"; + const char* endCommand = "\n"; + if(command) + { + replace = ShortPathCommand(command); + m_Makefile->ExpandVariablesInString(replace); + fout << startCommand << replace.c_str() << endCommand; + } + if(command2) + { + replace = ShortPathCommand(command2); + m_Makefile->ExpandVariablesInString(replace); + fout << startCommand << replace.c_str() << endCommand; + } + if(command3) + { + replace = ShortPathCommand(command3); + m_Makefile->ExpandVariablesInString(replace); + fout << startCommand << replace.c_str() << endCommand; + } + if(command4) + { + replace = ShortPathCommand(command4); + m_Makefile->ExpandVariablesInString(replace); + fout << startCommand << replace.c_str() << endCommand; + } + fout << "\n"; + // reset m_QuoteNextCommand, as the default should be to quote the + // commands. We need the quotes when the command has a full path + // to an executable. However, the quotes break things like the + // linker command. + m_QuoteNextCommand = true; +} + +void +cmBorlandMakefileGenerator2:: +OutputBuildObjectFromSource(std::ostream& fout, + const char* shortName, + const cmSourceFile& source, + const char* extraCompileFlags, + bool shared) +{ + std::string comment = "Build "; + std::string objectFile = std::string(shortName) + + this->GetOutputExtension(source.GetSourceExtension().c_str()); + + comment += objectFile + " From "; + comment += source.GetFullPath(); + std::string compileCommand; + std::string ext = source.GetSourceExtension(); + if(ext == "c" ) + { + compileCommand = "$(CMAKE_C_COMPILER) $(CMAKE_CFLAGS) "; + compileCommand += extraCompileFlags; + if(shared) + { + compileCommand += "$(CMAKE_SHLIB_CFLAGS) "; + } + compileCommand += "$(INCLUDE_FLAGS) -c "; + compileCommand += + cmSystemTools::EscapeSpaces(source.GetFullPath().c_str()); + compileCommand += " /Fo"; + compileCommand += objectFile; + } + else if (ext == "rc") + { + compileCommand = "$(RC) /fo\""; + compileCommand += objectFile; + compileCommand += "\" "; + compileCommand += + cmSystemTools::EscapeSpaces(source.GetFullPath().c_str()); + } + else if (ext == "def") + { + // no rule to output for this one + return; + } + // assume c++ if not c rc or def + else + { + compileCommand = "$(CMAKE_CXX_COMPILER) $(CMAKE_CXXFLAGS) "; + compileCommand += extraCompileFlags; + if(shared) + { + compileCommand += "$(CMAKE_SHLIB_CFLAGS) "; + } + compileCommand += "$(INCLUDE_FLAGS) -c "; + compileCommand += + cmSystemTools::EscapeSpaces(source.GetFullPath().c_str()); + compileCommand += " /Fo"; + compileCommand += objectFile; + } + m_QuoteNextCommand = false; + this->OutputMakeRule(fout, + comment.c_str(), + objectFile.c_str(), + cmSystemTools::EscapeSpaces( + source.GetFullPath().c_str()).c_str(), + compileCommand.c_str()); +} + +void cmBorlandMakefileGenerator2::OutputSharedLibraryRule(std::ostream& fout, + const char* name, + const cmTarget &t) +{ + std::string target = m_LibraryOutputPath + name + ".dll"; + std::string depend = "$("; + depend += name; + depend += "_SRC_OBJS) $(" + std::string(name) + "_DEPEND_LIBS)"; + std::string command = "ilink32 /dll $(FLAGS_LINK_LIB) @&&|\n"; + command += "$(" + std::string(name) + "_SRC_OBJS) /out:"; + std::string dllpath = m_LibraryOutputPath + std::string(name) + ".dll "; + cmSystemTools::ConvertToWindowsSlashes(dllpath); + command += cmSystemTools::EscapeSpaces(dllpath.c_str()); + std::strstream linklibs; + this->OutputLinkLibraries(linklibs, name, t); + linklibs << std::ends; + command += linklibs.str(); + delete [] linklibs.str(); + const std::vector<cmSourceFile>& sources = t.GetSourceFiles(); + for(std::vector<cmSourceFile>::const_iterator i = sources.begin(); + i != sources.end(); ++i) + { + if(i->GetSourceExtension() == "def") + { + command += "/DEF:"; + command += i->GetFullPath(); + } + } + command += "\n|\n"; + m_QuoteNextCommand = false; + this->OutputMakeRule(fout, "rules for a shared library", + target.c_str(), + depend.c_str(), + command.c_str()); +} + +void cmBorlandMakefileGenerator2::OutputModuleLibraryRule(std::ostream& fout, + const char* name, + const cmTarget &target) +{ + this->OutputSharedLibraryRule(fout, name, target); +} + +void cmBorlandMakefileGenerator2::OutputStaticLibraryRule(std::ostream& fout, + const char* name, + const cmTarget &) +{ + std::string target = m_LibraryOutputPath + std::string(name) + ".lib"; + std::string depend = "$("; + depend += std::string(name) + "_SRC_OBJS)"; + std::string command = "tlib $(FLAGS_LINK_STATIC) @&&|\n\t /u "; + std::string deleteCommand = "del "; + deleteCommand += target; + std::string libpath = m_LibraryOutputPath + std::string(name) + ".lib"; + cmSystemTools::ConvertToWindowsSlashes(libpath); + command += cmSystemTools::EscapeSpaces(libpath.c_str()); + command += " $("; + command += std::string(name) + "_SRC_OBJS)"; + command += "\n|\n"; + std::string comment = "rule to build static library: "; + comment += name; + m_QuoteNextCommand = false; + this->OutputMakeRule(fout, + comment.c_str(), + target.c_str(), + depend.c_str(), + deleteCommand.c_str(), + command.c_str()); +} + +void cmBorlandMakefileGenerator2::OutputExecutableRule(std::ostream& fout, + const char* name, + const cmTarget &t) +{ + std::string target = m_ExecutableOutputPath + name; + target += ".exe"; + std::string depend = "$("; + depend += std::string(name) + "_SRC_OBJS) $(" + std::string(name) + "_DEPEND_LIBS)"; + std::string command = + "$(CMAKE_CXX_COMPILER) "; + command += "$(" + std::string(name) + "_SRC_OBJS) "; + std::string path = m_ExecutableOutputPath + name + ".exe"; + command += " -e" + + cmSystemTools::EscapeSpaces(path.c_str()); + if(t.GetType() == cmTarget::WIN32_EXECUTABLE) + { + command += " -tWM "; + } + else + { + command += " -tWC "; + } + + std::strstream linklibs; + this->OutputLinkLibraries(linklibs, 0, t); + linklibs << std::ends; + command += linklibs.str(); + std::string comment = "rule to build executable: "; + comment += name; + m_QuoteNextCommand = false; + this->OutputMakeRule(fout, + comment.c_str(), + target.c_str(), + depend.c_str(), + command.c_str()); +} + + + + +std::string cmBorlandMakefileGenerator2::GetOutputExtension(const char* s) +{ + std::string sourceExtension = s; + if(sourceExtension == "def") + { + return ""; + } + if(sourceExtension == "ico" || sourceExtension == "rc2") + { + return ""; + } + if(sourceExtension == "rc") + { + return ".res"; + } + return ".obj"; +} + + + +bool cmBorlandMakefileGenerator2::SamePath(const char* path1, const char* path2) +{ + // first check to see if they are the same anyway + if (strcmp(path1, path2) == 0) + { + return true; + } + // next short path and lower case both of them for the compare + return + cmSystemTools::LowerCase(ShortPath(path1)) == + cmSystemTools::LowerCase(ShortPath(path2)); +} + +void cmBorlandMakefileGenerator2::OutputBuildLibraryInDir(std::ostream& fout, + const char* path, + const char* s, + const char* fullpath) +{ + cmNMakeMakefileGenerator::OutputBuildLibraryInDir(fout, path, s, fullpath); +} diff --git a/Source/cmBorlandMakefileGenerator2.h b/Source/cmBorlandMakefileGenerator2.h new file mode 100644 index 0000000..58fb2fd --- /dev/null +++ b/Source/cmBorlandMakefileGenerator2.h @@ -0,0 +1,112 @@ +/*========================================================================= + + Program: Insight Segmentation & Registration Toolkit + Module: $RCSfile$ + Language: C++ + Date: $Date$ + Version: $Revision$ + +Copyright (c) 2001 Insight Consortium +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + + * Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + + * Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + + * The name of the Insight Consortium, nor the names of any consortium members, + nor of any contributors, may be used to endorse or promote products derived + from this software without specific prior written permission. + + * Modified source versions must be plainly marked as such, and must not be + misrepresented as being the original software. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDER AND CONTRIBUTORS ``AS IS'' +AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHORS OR CONTRIBUTORS BE LIABLE FOR +ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR +SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, +OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +=========================================================================*/ +#ifndef cmBorlandMakefileGenerator2_h +#define cmBorlandMakefileGenerator2_h + +#include "cmNMakeMakefileGenerator.h" + +/** \class cmBorlandMakefileGenerator2 + * \brief Write an NMake makefile. + * + * cmBorlandMakefileGenerator2 produces a Unix makefile from its + * member m_Makefile. + */ +class cmBorlandMakefileGenerator2 : public cmNMakeMakefileGenerator +{ +public: + ///! Set cache only and recurse to false by default. + cmBorlandMakefileGenerator2(); + + virtual ~cmBorlandMakefileGenerator2(); + + ///! Get the name for the generator. + virtual const char* GetName() {return "Borland Makefiles2";} + + ///! virtual copy constructor + virtual cmMakefileGenerator* CreateObject() + { return new cmBorlandMakefileGenerator2;} + + ///! figure out about the current system information + virtual void ComputeSystemInfo(); +protected: + virtual void OutputMakeVariables(std::ostream&); + virtual void BuildInSubDirectory(std::ostream& fout, + const char* directory, + const char* target1, + const char* target2); + void OutputMakeRule(std::ostream& fout, + const char* comment, + const char* target, + const char* depends, + const char* command, + const char* command2=0, + const char* command3=0, + const char* command4=0); + + + virtual void OutputBuildObjectFromSource(std::ostream& fout, + const char* shortName, + const cmSourceFile& source, + const char* extraCompileFlags, + bool sharedTarget); + virtual void OutputSharedLibraryRule(std::ostream&, const char* name, + const cmTarget &); + virtual void OutputModuleLibraryRule(std::ostream&, const char* name, + const cmTarget &); + virtual void OutputStaticLibraryRule(std::ostream&, const char* name, + const cmTarget &); + virtual void OutputExecutableRule(std::ostream&, const char* name, + const cmTarget &); + virtual std::string GetOutputExtension(const char* sourceExtension); + virtual void OutputBuildLibraryInDir(std::ostream& fout, + const char* path, + const char* library, + const char* fullpath); + ///! return true if the two paths are the same (checks short paths) + virtual bool SamePath(const char* path1, const char* path2); +private: + bool m_QuoteNextCommand; // if this is true, OutputMakeRule + // will not quote the next commands + // it is reset to false after each + // call to OutputMakeRule +}; + +#endif diff --git a/Source/cmNMakeMakefileGenerator.cxx b/Source/cmNMakeMakefileGenerator.cxx index ab43d2e..3ac21c1 100644 --- a/Source/cmNMakeMakefileGenerator.cxx +++ b/Source/cmNMakeMakefileGenerator.cxx @@ -48,9 +48,25 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. #include "cmGeneratedFileStream.h" #include "windows.h" + +cmNMakeMakefileGenerator::cmNMakeMakefileGenerator() +{ + m_LibraryPathOption = "-LIBPATH:"; + this->SetObjectFileExtension(".obj"); + this->SetExecutableExtension(".exe"); + this->SetLibraryPrefix(""); + this->SetSharedLibraryExtension(".dll"); + this->SetStaticLibraryExtension(".lib"); + m_QuoteNextCommand = true; // most of the time command should be quoted +} + +cmNMakeMakefileGenerator::~cmNMakeMakefileGenerator() +{ +} + // convert to windows short paths if there are spaces // in path -inline std::string ShortPath(const char* path) +std::string cmNMakeMakefileGenerator::ShortPath(const char* path) { std::string ret = path; // if there are no spaces in path, then just return path @@ -80,7 +96,7 @@ inline std::string ShortPath(const char* path) // convert a command to a short path if it has spaces // this separates the arguments from the command and puts // them back together -inline std::string ShortPathCommand(const char* command) +std::string cmNMakeMakefileGenerator::ShortPathCommand(const char* command) { if(!strchr(command, ' ')) { @@ -105,21 +121,6 @@ inline std::string ShortPathCommand(const char* command) } -cmNMakeMakefileGenerator::cmNMakeMakefileGenerator() -{ - this->SetObjectFileExtension(".obj"); - this->SetExecutableExtension(".exe"); - this->SetLibraryPrefix(""); - this->SetSharedLibraryExtension(".dll"); - this->SetStaticLibraryExtension(".lib"); - m_QuoteNextCommand = true; // most of the time command should be quoted -} - -cmNMakeMakefileGenerator::~cmNMakeMakefileGenerator() -{ -} - - void cmNMakeMakefileGenerator::ComputeSystemInfo() { // now load the settings @@ -480,7 +481,7 @@ void cmNMakeMakefileGenerator::OutputLinkLibraries(std::ostream& fout, std::string libpath = ShortPath(libDir->c_str()); if(emitted.insert(libpath).second) { - linkLibs += "-LIBPATH:"; + linkLibs += m_LibraryPathOption; linkLibs += libpath; linkLibs += " "; } diff --git a/Source/cmNMakeMakefileGenerator.h b/Source/cmNMakeMakefileGenerator.h index e71abe9..30be86a 100644 --- a/Source/cmNMakeMakefileGenerator.h +++ b/Source/cmNMakeMakefileGenerator.h @@ -67,6 +67,8 @@ public: ///! figure out about the current system information virtual void ComputeSystemInfo(); protected: + std::string ShortPath(const char* path); + std::string ShortPathCommand(const char* command); virtual void OutputMakeVariables(std::ostream&); virtual void BuildInSubDirectory(std::ostream& fout, const char* directory, @@ -106,11 +108,13 @@ protected: const char* fullpath); ///! return true if the two paths are the same (checks short paths) virtual bool SamePath(const char* path1, const char* path2); + void SetLibraryPathOption(const char* lib){ m_LibraryPathOption = lib;} private: bool m_QuoteNextCommand; // if this is true, OutputMakeRule // will not quote the next commands // it is reset to false after each // call to OutputMakeRule + std::string m_LibraryPathOption; }; #endif diff --git a/Source/cmake.cxx b/Source/cmake.cxx index 8b15357..d2c1f02 100644 --- a/Source/cmake.cxx +++ b/Source/cmake.cxx @@ -45,6 +45,7 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. #if defined(_WIN32) && !defined(__CYGWIN__) #include "cmMSProjectGenerator.h" #include "cmBorlandMakefileGenerator.h" +#include "cmBorlandMakefileGenerator2.h" #include "cmNMakeMakefileGenerator.h" #else #include "cmUnixMakefileGenerator.h" @@ -57,6 +58,7 @@ cmake::cmake() cmMakefileGenerator::RegisterGenerator(new cmMSProjectGenerator); cmMakefileGenerator::RegisterGenerator(new cmNMakeMakefileGenerator); cmMakefileGenerator::RegisterGenerator(new cmBorlandMakefileGenerator); + cmMakefileGenerator::RegisterGenerator(new cmBorlandMakefileGenerator2); #else cmMakefileGenerator::RegisterGenerator(new cmUnixMakefileGenerator); #endif |