From 36c8f1d15792192790f0841d5658a105f44b420b Mon Sep 17 00:00:00 2001 From: Bill Hoffman Date: Wed, 27 Oct 2004 10:53:01 -0400 Subject: [PATCH] ENH: put error checking for missing linker languages --- Source/cmLocalGenerator.cxx | 18 +++++++++++++++++ Source/cmLocalUnixMakefileGenerator.cxx | 25 +++++++++++++++++++++++- Source/cmLocalVisualStudio6Generator.cxx | 6 ++++++ Source/cmLocalVisualStudio7Generator.cxx | 22 +++++++++++++++++++-- 4 files changed, 68 insertions(+), 3 deletions(-) diff --git a/Source/cmLocalGenerator.cxx b/Source/cmLocalGenerator.cxx index 5b72a8098..a454e526e 100644 --- a/Source/cmLocalGenerator.cxx +++ b/Source/cmLocalGenerator.cxx @@ -598,6 +598,12 @@ void cmLocalGenerator::CreateCustomTargetsAndCommands(std::set cons case cmTarget::EXECUTABLE: { const char* llang = target.GetLinkerLanguage(this->GetGlobalGenerator()); + if(!llang) + { + cmSystemTools::Error("CMake can not determine linker language for target:", + target.GetName()); + return; + } // if the language is not in the set lang then create custom // commands to build the target if(lang.count(llang) == 0) @@ -988,6 +994,12 @@ void cmLocalGenerator::GetTargetFlags(std::string& linkLibs, linkFlags += " "; } const char* linkLanguage = target.GetLinkerLanguage(this->GetGlobalGenerator()); + if(!linkLanguage) + { + cmSystemTools::Error("CMake can not determine linker language for target:", + target.GetName()); + return; + } std::string langVar = "CMAKE_"; langVar += linkLanguage; std::string flagsVar = langVar + "_FLAGS"; @@ -1056,6 +1068,12 @@ void cmLocalGenerator::OutputLinkLibraries(std::ostream& fout, buildType = cmSystemTools::UpperCase(buildType); const char* linkLanguage = tgt.GetLinkerLanguage(this->GetGlobalGenerator()); + if(!linkLanguage) + { + cmSystemTools::Error("CMake can not determine linker language for target:", + tgt.GetName()); + return; + } std::string runTimeFlagVar = "CMAKE_SHARED_LIBRARY_RUNTIME_"; runTimeFlagVar += linkLanguage; runTimeFlagVar += "_FLAG"; diff --git a/Source/cmLocalUnixMakefileGenerator.cxx b/Source/cmLocalUnixMakefileGenerator.cxx index 827ad72ad..9ff5624c3 100644 --- a/Source/cmLocalUnixMakefileGenerator.cxx +++ b/Source/cmLocalUnixMakefileGenerator.cxx @@ -876,6 +876,12 @@ void cmLocalUnixMakefileGenerator::OutputSharedLibraryRule(std::ostream& fout, const cmTarget &t) { const char* linkLanguage = t.GetLinkerLanguage(this->GetGlobalGenerator()); + if(!linkLanguage) + { + cmSystemTools::Error("CMake can not determine linker language target:", + t.GetName()); + return; + } std::string createRule = "CMAKE_"; createRule += linkLanguage; createRule += "_CREATE_SHARED_LIBRARY"; @@ -922,6 +928,12 @@ void cmLocalUnixMakefileGenerator::OutputModuleLibraryRule(std::ostream& fout, const cmTarget &t) { const char* linkLanguage = t.GetLinkerLanguage(this->GetGlobalGenerator()); + if(!linkLanguage) + { + cmSystemTools::Error("CMake can not determine linker language for target:", + t.GetName()); + return; + } std::string createRule = "CMAKE_"; createRule += linkLanguage; createRule += "_CREATE_SHARED_MODULE"; @@ -954,6 +966,12 @@ void cmLocalUnixMakefileGenerator::OutputStaticLibraryRule(std::ostream& fout, const cmTarget &t) { const char* linkLanguage = t.GetLinkerLanguage(this->GetGlobalGenerator()); + if(!linkLanguage) + { + cmSystemTools::Error("CMake can not determine linker language for target:", + t.GetName()); + return; + } std::string createRule = "CMAKE_"; createRule += linkLanguage; createRule += "_CREATE_STATIC_LIBRARY"; @@ -1034,7 +1052,12 @@ void cmLocalUnixMakefileGenerator::OutputExecutableRule(std::ostream& fout, linkFlags += " "; } const char* linkLanguage = t.GetLinkerLanguage(this->GetGlobalGenerator()); - + if(!linkLanguage) + { + cmSystemTools::Error("CMake can not determine linker language for target:", + t.GetName()); + return; + } std::string langVar = "CMAKE_"; langVar += linkLanguage; diff --git a/Source/cmLocalVisualStudio6Generator.cxx b/Source/cmLocalVisualStudio6Generator.cxx index 56308e3cf..0f74c20ac 100644 --- a/Source/cmLocalVisualStudio6Generator.cxx +++ b/Source/cmLocalVisualStudio6Generator.cxx @@ -1065,6 +1065,12 @@ void cmLocalVisualStudio6Generator::WriteDSPHeader(std::ostream& fout, const cha target.GetType() <= cmTarget::MODULE_LIBRARY) { const char* linkLanguage = target.GetLinkerLanguage(this->GetGlobalGenerator()); + if(!linkLanguage) + { + cmSystemTools::Error("CMake can not determine linker language for target:", + target.GetName()); + return; + } // if CXX is on and the target contains cxx code then add the cxx flags std::string baseFlagVar = "CMAKE_"; baseFlagVar += linkLanguage; diff --git a/Source/cmLocalVisualStudio7Generator.cxx b/Source/cmLocalVisualStudio7Generator.cxx index 0087b3e47..4718974b9 100644 --- a/Source/cmLocalVisualStudio7Generator.cxx +++ b/Source/cmLocalVisualStudio7Generator.cxx @@ -329,6 +329,12 @@ void cmLocalVisualStudio7Generator::WriteConfiguration(std::ostream& fout, if(strcmp(configType, "10") != 0) { const char* linkLanguage = target.GetLinkerLanguage(this->GetGlobalGenerator()); + if(!linkLanguage) + { + cmSystemTools::Error("CMake can not determine linker language for target:", + target.GetName()); + return; + } std::string baseFlagVar = "CMAKE_"; baseFlagVar += linkLanguage; baseFlagVar += "_FLAGS"; @@ -629,6 +635,12 @@ void cmLocalVisualStudio7Generator::OutputBuildTool(std::ostream& fout, fout << "\t\t\t\tGenerateDebugInformation=\"TRUE\"\n"; } const char* linkLanguage = target.GetLinkerLanguage(this->GetGlobalGenerator()); + if(!linkLanguage) + { + cmSystemTools::Error("CMake can not determine linker language for target:", + target.GetName()); + return; + } std::string stackVar = "CMAKE_"; stackVar += linkLanguage; stackVar += "_STACK_SIZE"; @@ -697,8 +709,14 @@ void cmLocalVisualStudio7Generator::OutputBuildTool(std::ostream& fout, { fout << "\t\t\t\tSubSystem=\"1\"\n"; } - const char* linkLanguage = target.GetLinkerLanguage(this->GetGlobalGenerator()); - std::string stackVar = "CMAKE_"; + const char* linkLanguage = target.GetLinkerLanguage(this->GetGlobalGenerator()); + if(!linkLanguage) + { + cmSystemTools::Error("CMake can not determine linker language for target:", + target.GetName()); + return; + } + std::string stackVar = "CMAKE_"; stackVar += linkLanguage; stackVar += "_STACK_SIZE"; const char* stackVal = m_Makefile->GetDefinition(stackVar.c_str());