diff options
Diffstat (limited to 'Source')
-rw-r--r-- | Source/cmLocalUnixMakefileGenerator3.cxx | 73 | ||||
-rw-r--r-- | Source/cmLocalUnixMakefileGenerator3.h | 7 | ||||
-rw-r--r-- | Source/cmLocalVisualStudio7Generator.cxx | 75 | ||||
-rw-r--r-- | Source/cmLocalVisualStudio7Generator.h | 2 | ||||
-rw-r--r-- | Source/cmMakefileExecutableTargetGenerator.cxx | 8 | ||||
-rw-r--r-- | Source/cmMakefileLibraryTargetGenerator.cxx | 12 | ||||
-rw-r--r-- | Source/cmMakefileTargetGenerator.cxx | 15 | ||||
-rw-r--r-- | Source/cmTarget.cxx | 76 | ||||
-rw-r--r-- | Source/cmTarget.h | 4 |
9 files changed, 99 insertions, 173 deletions
diff --git a/Source/cmLocalUnixMakefileGenerator3.cxx b/Source/cmLocalUnixMakefileGenerator3.cxx index 9869977..365ce56 100644 --- a/Source/cmLocalUnixMakefileGenerator3.cxx +++ b/Source/cmLocalUnixMakefileGenerator3.cxx @@ -78,8 +78,17 @@ void cmLocalUnixMakefileGenerator3::Configure() //---------------------------------------------------------------------------- void cmLocalUnixMakefileGenerator3::Generate() { - // Setup our configuration variables for this directory. - this->ConfigureOutputPaths(); + // Store the configuration name that will be generated. + if(const char* config = this->Makefile->GetDefinition("CMAKE_BUILD_TYPE")) + { + // Use the build type given by the user. + this->ConfigurationName = config; + } + else + { + // No configuration type given. + this->ConfigurationName = ""; + } // Record whether some options are enabled to avoid checking many // times later. @@ -182,66 +191,6 @@ void cmLocalUnixMakefileGenerator3::WriteAllProgressVariable() } //---------------------------------------------------------------------------- -void cmLocalUnixMakefileGenerator3::ConfigureOutputPaths() -{ - // Format the library and executable output paths. - if(const char* libOut = - this->Makefile->GetDefinition("LIBRARY_OUTPUT_PATH")) - { - this->LibraryOutputPath = libOut; - this->FormatOutputPath(this->LibraryOutputPath, "LIBRARY"); - } - if(const char* exeOut = - this->Makefile->GetDefinition("EXECUTABLE_OUTPUT_PATH")) - { - this->ExecutableOutputPath = exeOut; - this->FormatOutputPath(this->ExecutableOutputPath, "EXECUTABLE"); - } - - // Store the configuration name that will be generated. - if(const char* config = this->Makefile->GetDefinition("CMAKE_BUILD_TYPE")) - { - // Use the build type given by the user. - this->ConfigurationName = config; - } - else - { - // No configuration type given. - this->ConfigurationName = ""; - } -} - -//---------------------------------------------------------------------------- -void cmLocalUnixMakefileGenerator3::FormatOutputPath(std::string& path, - const char* name) -{ - if(!path.empty()) - { - // Convert the output path to a full path in case it is - // specified as a relative path. Treat a relative path as - // relative to the current output directory for this makefile. - path = cmSystemTools::CollapseFullPath - (path.c_str(), this->Makefile->GetStartOutputDirectory()); - - // Add a trailing slash for easy appending later. - if(path.empty() || path[path.size()-1] != '/') - { - path += "/"; - } - - // Make sure the output path exists on disk. - if(!cmSystemTools::MakeDirectory(path.c_str())) - { - cmSystemTools::Error("Error failed to create ", - name, "_OUTPUT_PATH directory:", path.c_str()); - } - - // Add this as a link directory automatically. - this->Makefile->AddLinkDirectory(path.c_str()); - } -} - -//---------------------------------------------------------------------------- void cmLocalUnixMakefileGenerator3::WriteLocalMakefile() { // generate the includes diff --git a/Source/cmLocalUnixMakefileGenerator3.h b/Source/cmLocalUnixMakefileGenerator3.h index 0d0a37f..9d2b4c3 100644 --- a/Source/cmLocalUnixMakefileGenerator3.h +++ b/Source/cmLocalUnixMakefileGenerator3.h @@ -254,11 +254,6 @@ public: void GetTargetObjectFileDirectories(cmTarget* target, std::vector<std::string>& dirs); protected: - // these two methods just compute reasonable values for LibraryOutputPath - // and ExecutableOutputPath - void ConfigureOutputPaths(); - void FormatOutputPath(std::string& path, const char* name); - void WriteLocalMakefile(); @@ -332,8 +327,6 @@ private: int MakefileVariableSize; std::string IncludeDirective; std::string MakeSilentFlag; - std::string ExecutableOutputPath; - std::string LibraryOutputPath; std::string ConfigurationName; std::string NativeEchoCommand; bool NativeEchoWindows; diff --git a/Source/cmLocalVisualStudio7Generator.cxx b/Source/cmLocalVisualStudio7Generator.cxx index abfaa71..bd13095 100644 --- a/Source/cmLocalVisualStudio7Generator.cxx +++ b/Source/cmLocalVisualStudio7Generator.cxx @@ -105,35 +105,6 @@ void cmLocalVisualStudio7Generator::OutputVCProjFile() } } - this->LibraryOutputPath = ""; - if (this->Makefile->GetDefinition("LIBRARY_OUTPUT_PATH")) - { - this->LibraryOutputPath = - this->Makefile->GetDefinition("LIBRARY_OUTPUT_PATH"); - } - if(this->LibraryOutputPath.size()) - { - // make sure there is a trailing slash - if(this->LibraryOutputPath[this->LibraryOutputPath.size()-1] != '/') - { - this->LibraryOutputPath += "/"; - } - } - this->ExecutableOutputPath = ""; - if (this->Makefile->GetDefinition("EXECUTABLE_OUTPUT_PATH")) - { - this->ExecutableOutputPath = - this->Makefile->GetDefinition("EXECUTABLE_OUTPUT_PATH"); - } - if(this->ExecutableOutputPath.size()) - { - // make sure there is a trailing slash - if(this->ExecutableOutputPath[this->ExecutableOutputPath.size()-1] != '/') - { - this->ExecutableOutputPath += "/"; - } - } - // Create the VCProj or set of VCProj's for libraries and executables // clear project names @@ -627,22 +598,15 @@ void cmLocalVisualStudio7Generator::WriteConfiguration(std::ostream& fout, targetOptions.OutputPreprocessorDefinitions(fout, "\t\t\t\t", "\n"); fout << "\t\t\t\tAssemblerListingLocation=\"" << configName << "\"\n"; fout << "\t\t\t\tObjectFile=\"$(IntDir)\\\"\n"; - if(targetOptions.UsingDebugPDB()) + if(targetOptions.UsingDebugPDB() && + (target.GetType() == cmTarget::EXECUTABLE || + target.GetType() == cmTarget::STATIC_LIBRARY || + target.GetType() == cmTarget::SHARED_LIBRARY || + target.GetType() == cmTarget::MODULE_LIBRARY)) { - if(target.GetType() == cmTarget::EXECUTABLE) - { - fout << "\t\t\t\tProgramDataBaseFileName=\"" - << this->ExecutableOutputPath - << "$(OutDir)/" << target.GetPDBName(configName) << "\"\n"; - } - else if(target.GetType() == cmTarget::STATIC_LIBRARY || - target.GetType() == cmTarget::SHARED_LIBRARY || - target.GetType() == cmTarget::MODULE_LIBRARY) - { - fout << "\t\t\t\tProgramDataBaseFileName=\"" - << this->LibraryOutputPath - << "$(OutDir)/" << target.GetPDBName(configName) << "\"\n"; - } + fout << "\t\t\t\tProgramDataBaseFileName=\"" + << target.GetOutputDir() << "/$(OutDir)/" + << target.GetPDBName(configName) << "\"\n"; } fout << "/>\n"; // end of <Tool Name=VCCLCompilerTool fout << "\t\t\t<Tool\n\t\t\t\tName=\"VCCustomBuildTool\"/>\n"; @@ -764,8 +728,9 @@ void cmLocalVisualStudio7Generator::OutputBuildTool(std::ostream& fout, case cmTarget::STATIC_LIBRARY: { std::string targetNameFull = target.GetFullName(configName); - std::string libpath = this->LibraryOutputPath + - "$(OutDir)/" + targetNameFull; + std::string libpath = target.GetOutputDir(); + libpath += "/$(OutDir)/"; + libpath += targetNameFull; fout << "\t\t\t<Tool\n" << "\t\t\t\tName=\"VCLibrarianTool\"\n"; if(const char* libflags = target.GetProperty("STATIC_LIBRARY_FLAGS")) @@ -830,7 +795,8 @@ void cmLocalVisualStudio7Generator::OutputBuildTool(std::ostream& fout, << " "; this->OutputLibraries(fout, linkLibs); fout << "\"\n"; - temp = this->LibraryOutputPath; + temp = target.GetOutputDir(); + temp += "/"; temp += configName; temp += "/"; temp += targetNameFull; @@ -842,8 +808,8 @@ void cmLocalVisualStudio7Generator::OutputBuildTool(std::ostream& fout, this->OutputLibraryDirectories(fout, linkDirs); fout << "\"\n"; this->OutputModuleDefinitionFile(fout, target); - temp = this->LibraryOutputPath; - temp += "$(OutDir)/"; + temp = target.GetOutputDir(); + temp += "/$(OutDir)/"; temp += targetNamePDB; fout << "\t\t\t\tProgramDataBaseFile=\"" << this->ConvertToXMLOutputPathSingle(temp.c_str()) << "\"\n"; @@ -860,7 +826,8 @@ void cmLocalVisualStudio7Generator::OutputBuildTool(std::ostream& fout, { fout << "\t\t\t\tStackReserveSize=\"" << stackVal << "\"\n"; } - temp = this->LibraryOutputPath; + temp = target.GetOutputDir(); + temp += "/"; temp += configName; temp += "/"; temp += targetNameImport; @@ -908,7 +875,8 @@ void cmLocalVisualStudio7Generator::OutputBuildTool(std::ostream& fout, << " "; this->OutputLibraries(fout, linkLibs); fout << "\"\n"; - temp = this->ExecutableOutputPath; + temp = target.GetOutputDir(); + temp += "/"; temp += configName; temp += "/"; temp += targetNameFull; @@ -919,8 +887,9 @@ void cmLocalVisualStudio7Generator::OutputBuildTool(std::ostream& fout, fout << "\t\t\t\tAdditionalLibraryDirectories=\""; this->OutputLibraryDirectories(fout, linkDirs); fout << "\"\n"; - fout << "\t\t\t\tProgramDataBaseFile=\"" << this->ExecutableOutputPath - << "$(OutDir)\\" << targetNamePDB << "\"\n"; + fout << "\t\t\t\tProgramDataBaseFile=\"" + << target.GetOutputDir() << "\\$(OutDir)\\" << targetNamePDB + << "\"\n"; if(strcmp(configName, "Debug") == 0 || strcmp(configName, "RelWithDebInfo") == 0) { diff --git a/Source/cmLocalVisualStudio7Generator.h b/Source/cmLocalVisualStudio7Generator.h index 22147c7..820b69b 100644 --- a/Source/cmLocalVisualStudio7Generator.h +++ b/Source/cmLocalVisualStudio7Generator.h @@ -125,8 +125,6 @@ private: virtual std::string GetTargetDirectory(cmTarget&); std::vector<std::string> CreatedProjectNames; - std::string LibraryOutputPath; - std::string ExecutableOutputPath; std::string ModuleDefinitionFile; int Version; std::string PlatformName; // Win32 or x64 diff --git a/Source/cmMakefileExecutableTargetGenerator.cxx b/Source/cmMakefileExecutableTargetGenerator.cxx index c59ec76..0bbcb73 100644 --- a/Source/cmMakefileExecutableTargetGenerator.cxx +++ b/Source/cmMakefileExecutableTargetGenerator.cxx @@ -116,12 +116,8 @@ void cmMakefileExecutableTargetGenerator::WriteExecutableRule(bool relink) this->LocalGenerator->ConfigurationName.c_str()); // Construct the full path version of the names. - std::string outpath = this->LocalGenerator->ExecutableOutputPath; - if(outpath.length() == 0) - { - outpath = this->Makefile->GetStartOutputDirectory(); - outpath += "/"; - } + std::string outpath = this->Target->GetOutputDir(); + outpath += "/"; #ifdef __APPLE__ if(this->Target->GetPropertyAsBool("MACOSX_BUNDLE")) { diff --git a/Source/cmMakefileLibraryTargetGenerator.cxx b/Source/cmMakefileLibraryTargetGenerator.cxx index 17c2fab..36021dc 100644 --- a/Source/cmMakefileLibraryTargetGenerator.cxx +++ b/Source/cmMakefileLibraryTargetGenerator.cxx @@ -245,12 +245,7 @@ void cmMakefileLibraryTargetGenerator::WriteLibraryRules this->LocalGenerator->ConfigurationName.c_str()); // Construct the full path version of the names. - std::string outpath = this->LocalGenerator->LibraryOutputPath; - if(outpath.length() == 0) - { - outpath = this->Makefile->GetStartOutputDirectory(); - outpath += "/"; - } + std::string outpath; if(relink) { outpath = this->Makefile->GetStartOutputDirectory(); @@ -259,6 +254,11 @@ void cmMakefileLibraryTargetGenerator::WriteLibraryRules cmSystemTools::MakeDirectory(outpath.c_str()); outpath += "/"; } + else + { + outpath = this->Target->GetOutputDir(); + outpath += "/"; + } std::string targetFullPath = outpath + targetName; std::string targetFullPathPDB = outpath + targetNamePDB; std::string targetFullPathSO = outpath + targetNameSO; diff --git a/Source/cmMakefileTargetGenerator.cxx b/Source/cmMakefileTargetGenerator.cxx index 50f9e12..2e9ec76 100644 --- a/Source/cmMakefileTargetGenerator.cxx +++ b/Source/cmMakefileTargetGenerator.cxx @@ -466,16 +466,13 @@ cmMakefileTargetGenerator { std::string targetFullPathPDB; const char* configName = this->LocalGenerator->ConfigurationName.c_str(); - if(this->Target->GetType() == cmTarget::EXECUTABLE) + if(this->Target->GetType() == cmTarget::EXECUTABLE || + this->Target->GetType() == cmTarget::STATIC_LIBRARY || + this->Target->GetType() == cmTarget::SHARED_LIBRARY || + this->Target->GetType() == cmTarget::MODULE_LIBRARY) { - targetFullPathPDB = this->LocalGenerator->ExecutableOutputPath; - targetFullPathPDB += this->Target->GetPDBName(configName); - } - else if(this->Target->GetType() == cmTarget::STATIC_LIBRARY || - this->Target->GetType() == cmTarget::SHARED_LIBRARY || - this->Target->GetType() == cmTarget::MODULE_LIBRARY) - { - targetFullPathPDB = this->LocalGenerator->LibraryOutputPath; + targetFullPathPDB = this->Target->GetOutputDir(); + targetFullPathPDB += "/"; targetFullPathPDB += this->Target->GetPDBName(configName); } targetOutPathPDB = diff --git a/Source/cmTarget.cxx b/Source/cmTarget.cxx index 5feb3bc..8298751 100644 --- a/Source/cmTarget.cxx +++ b/Source/cmTarget.cxx @@ -1093,34 +1093,7 @@ void cmTarget::SetProperty(const char* prop, const char* value) const char* cmTarget::GetDirectory(const char* config) { - switch( this->GetType() ) - { - case cmTarget::STATIC_LIBRARY: - case cmTarget::MODULE_LIBRARY: - case cmTarget::SHARED_LIBRARY: - this->Directory = - this->Makefile->GetSafeDefinition("LIBRARY_OUTPUT_PATH"); - break; - case cmTarget::EXECUTABLE: - this->Directory = - this->Makefile->GetSafeDefinition("EXECUTABLE_OUTPUT_PATH"); - break; - default: - this->Directory = this->Makefile->GetStartOutputDirectory(); - break; - } - if(this->Directory.empty()) - { - this->Directory = this->Makefile->GetStartOutputDirectory(); - } - // if LIBRARY_OUTPUT_PATH or EXECUTABLE_OUTPUT_PATH was relative - // then make them full paths because this directory MUST - // be a full path or things will not work!!! - if(!cmSystemTools::FileIsFullPath(this->Directory.c_str())) - { - this->Directory = this->Makefile->GetCurrentOutputDirectory() + - std::string("/") + this->Directory; - } + this->Directory = this->GetOutputDir(); if(config) { // Add the configuration's subdirectory. @@ -1956,3 +1929,50 @@ std::string cmTarget::GetInstallNameDirForInstallTree(const char*) return ""; } } + +//---------------------------------------------------------------------------- +const char* cmTarget::GetOutputDir() +{ + if(this->OutputDir.empty()) + { + // Lookup the output path for this target type. + switch(this->GetType()) + { + case cmTarget::STATIC_LIBRARY: + case cmTarget::MODULE_LIBRARY: + case cmTarget::SHARED_LIBRARY: + this->OutputDir = + this->Makefile->GetSafeDefinition("LIBRARY_OUTPUT_PATH"); + break; + case cmTarget::EXECUTABLE: + this->OutputDir = + this->Makefile->GetSafeDefinition("EXECUTABLE_OUTPUT_PATH"); + break; + } + if(this->OutputDir.empty()) + { + this->OutputDir = "."; + } + + // Convert the output path to a full path in case it is + // specified as a relative path. Treat a relative path as + // relative to the current output directory for this makefile. + this->OutputDir = + cmSystemTools::CollapseFullPath + (this->OutputDir.c_str(), this->Makefile->GetStartOutputDirectory()); + + // Make sure the output path exists on disk. + if(!cmSystemTools::MakeDirectory(this->OutputDir.c_str())) + { + cmSystemTools::Error("Error failed to create output directory:", + this->OutputDir.c_str()); + } + + // TODO: This came from cmLocalUnixMakefileGenerator3::FormatOutputPath. + // Where should it go. Is it still needed? + // Add this as a link directory automatically. + // this->Makefile->AddLinkDirectory(path.c_str()); + } + + return this->OutputDir.c_str(); +} diff --git a/Source/cmTarget.h b/Source/cmTarget.h index e12870b..4e5bf6e 100644 --- a/Source/cmTarget.h +++ b/Source/cmTarget.h @@ -213,6 +213,9 @@ public: makefile and the configuration type. */ std::string GetFullPath(const char* config=0, bool implib = false); + /** Get the full path to the target output directory. */ + const char* GetOutputDir(); + /** Get the names of the library needed to generate a build rule that takes into account shared library version numbers. This should be called only on a library target. */ @@ -357,6 +360,7 @@ private: bool HaveInstallRule; std::string InstallPath; std::string RuntimeInstallPath; + std::string OutputDir; std::string Directory; std::string Location; std::set<cmStdString> Utilities; |