소스 검색

BUG: Use link language for target name computation

The commit "Do not compute link language for LOCATION" was wrong.  The
variables

  CMAKE_STATIC_LIBRARY_PREFIX_Java
  CMAKE_STATIC_LIBRARY_SUFFIX_Java

are used for building Java .jar files.  This commit re-enables the
feature and documents the variables:

  CMAKE_EXECUTABLE_SUFFIX_<LANG>
  CMAKE_IMPORT_LIBRARY_PREFIX_<LANG>
  CMAKE_IMPORT_LIBRARY_SUFFIX_<LANG>
  CMAKE_SHARED_LIBRARY_PREFIX_<LANG>
  CMAKE_SHARED_LIBRARY_SUFFIX_<LANG>
  CMAKE_SHARED_MODULE_PREFIX_<LANG>
  CMAKE_SHARED_MODULE_SUFFIX_<LANG>
  CMAKE_STATIC_LIBRARY_PREFIX_<LANG>
  CMAKE_STATIC_LIBRARY_SUFFIX_<LANG>

Instead of making separate, repetitive entries for the _<LANG> variable
documentation, we just mention the per-language name in the text of the
platform-wide variable documentation.  Internally we keep undocumented
definitions of these properties to satisfy CMAKE_STRICT mode.
Brad King 16 년 전
부모
커밋
99e432508e
2개의 변경된 파일69개의 추가작업 그리고 26개의 파일을 삭제
  1. 54 26
      Source/cmDocumentVariables.cxx
  2. 15 0
      Source/cmTarget.cxx

+ 54 - 26
Source/cmDocumentVariables.cxx

@@ -203,8 +203,10 @@ void cmDocumentVariables::DefineVariables(cmake* cm)
     ("CMAKE_EXECUTABLE_SUFFIX", cmProperty::VARIABLE,
     ("CMAKE_EXECUTABLE_SUFFIX", cmProperty::VARIABLE,
      "The suffix for executables on this platform.",
      "The suffix for executables on this platform.",
      "The suffix to use for the end of an executable if any, "
      "The suffix to use for the end of an executable if any, "
-     ".exe on Windows.",false,
-     "Variables that Provide Information");
+     ".exe on Windows."
+     "\n"
+     "CMAKE_EXECUTABLE_SUFFIX_<LANG> overrides this for language <LANG>."
+     ,false, "Variables that Provide Information");
   cm->DefineProperty
   cm->DefineProperty
     ("CMAKE_MAJOR_VERSION", cmProperty::VARIABLE,
     ("CMAKE_MAJOR_VERSION", cmProperty::VARIABLE,
      "The Major version of cmake (i.e. the 2 in 2.X.X)",
      "The Major version of cmake (i.e. the 2 in 2.X.X)",
@@ -346,52 +348,60 @@ void cmDocumentVariables::DefineVariables(cmake* cm)
     ("CMAKE_IMPORT_LIBRARY_PREFIX", cmProperty::VARIABLE,
     ("CMAKE_IMPORT_LIBRARY_PREFIX", cmProperty::VARIABLE,
      "The prefix for import libraries that you link to.",
      "The prefix for import libraries that you link to.",
      "The prefix to use for the name of an import library if used "
      "The prefix to use for the name of an import library if used "
-     "on this platform.",
-     false,
-     "Variables that Provide Information");
+     "on this platform."
+     "\n"
+     "CMAKE_IMPORT_LIBRARY_PREFIX_<LANG> overrides this for language <LANG>."
+     ,false, "Variables that Provide Information");
   cm->DefineProperty
   cm->DefineProperty
     ("CMAKE_IMPORT_LIBRARY_SUFFIX", cmProperty::VARIABLE,
     ("CMAKE_IMPORT_LIBRARY_SUFFIX", cmProperty::VARIABLE,
      "The suffix for import  libraries that you link to.",
      "The suffix for import  libraries that you link to.",
      "The suffix to use for the end of an import library if used "
      "The suffix to use for the end of an import library if used "
-     "on this platform.",
-     false,
-     "Variables that Provide Information");
+     "on this platform."
+     "\n"
+     "CMAKE_IMPORT_LIBRARY_SUFFIX_<LANG> overrides this for language <LANG>."
+     ,false, "Variables that Provide Information");
   cm->DefineProperty
   cm->DefineProperty
     ("CMAKE_SHARED_LIBRARY_PREFIX", cmProperty::VARIABLE,
     ("CMAKE_SHARED_LIBRARY_PREFIX", cmProperty::VARIABLE,
      "The prefix for shared libraries that you link to.",
      "The prefix for shared libraries that you link to.",
-     "The prefix to use for the name of a shared library, lib on UNIX.",
-     false,
-     "Variables that Provide Information");
+     "The prefix to use for the name of a shared library, lib on UNIX."
+     "\n"
+     "CMAKE_SHARED_LIBRARY_PREFIX_<LANG> overrides this for language <LANG>."
+     ,false, "Variables that Provide Information");
   cm->DefineProperty
   cm->DefineProperty
     ("CMAKE_SHARED_LIBRARY_SUFFIX", cmProperty::VARIABLE,
     ("CMAKE_SHARED_LIBRARY_SUFFIX", cmProperty::VARIABLE,
      "The suffix for shared libraries that you link to.",
      "The suffix for shared libraries that you link to.",
-     "The suffix to use for the end of a shared library, .dll on Windows.",
-     false,
-     "Variables that Provide Information");
+     "The suffix to use for the end of a shared library, .dll on Windows."
+     "\n"
+     "CMAKE_SHARED_LIBRARY_SUFFIX_<LANG> overrides this for language <LANG>."
+     ,false, "Variables that Provide Information");
   cm->DefineProperty
   cm->DefineProperty
     ("CMAKE_SHARED_MODULE_PREFIX", cmProperty::VARIABLE,
     ("CMAKE_SHARED_MODULE_PREFIX", cmProperty::VARIABLE,
      "The prefix for loadable modules that you link to.",
      "The prefix for loadable modules that you link to.",
-     "The prefix to use for the name of a loadable module on this platform.",
-     false,
-     "Variables that Provide Information");
+     "The prefix to use for the name of a loadable module on this platform."
+     "\n"
+     "CMAKE_SHARED_MODULE_PREFIX_<LANG> overrides this for language <LANG>."
+     ,false, "Variables that Provide Information");
   cm->DefineProperty
   cm->DefineProperty
     ("CMAKE_SHARED_MODULE_SUFFIX", cmProperty::VARIABLE,
     ("CMAKE_SHARED_MODULE_SUFFIX", cmProperty::VARIABLE,
      "The suffix for shared libraries that you link to.",
      "The suffix for shared libraries that you link to.",
-     "The suffix to use for the end of a loadable module on this platform",
-     false,
-     "Variables that Provide Information");
+     "The suffix to use for the end of a loadable module on this platform"
+     "\n"
+     "CMAKE_SHARED_MODULE_SUFFIX_<LANG> overrides this for language <LANG>."
+     ,false, "Variables that Provide Information");
   cm->DefineProperty
   cm->DefineProperty
     ("CMAKE_STATIC_LIBRARY_PREFIX", cmProperty::VARIABLE,
     ("CMAKE_STATIC_LIBRARY_PREFIX", cmProperty::VARIABLE,
      "The prefix for static libraries that you link to.",
      "The prefix for static libraries that you link to.",
-     "The prefix to use for the name of a static library, lib on UNIX.",
-     false,
-     "Variables that Provide Information");
+     "The prefix to use for the name of a static library, lib on UNIX."
+     "\n"
+     "CMAKE_STATIC_LIBRARY_PREFIX_<LANG> overrides this for language <LANG>."
+     ,false, "Variables that Provide Information");
   cm->DefineProperty
   cm->DefineProperty
     ("CMAKE_STATIC_LIBRARY_SUFFIX", cmProperty::VARIABLE,
     ("CMAKE_STATIC_LIBRARY_SUFFIX", cmProperty::VARIABLE,
      "The suffix for static libraries that you link to.",
      "The suffix for static libraries that you link to.",
-     "The suffix to use for the end of a static library, .lib on Windows.",
-     false,
-     "Variables that Provide Information");
+     "The suffix to use for the end of a static library, .lib on Windows."
+     "\n"
+     "CMAKE_STATIC_LIBRARY_SUFFIX_<LANG> overrides this for language <LANG>."
+     ,false, "Variables that Provide Information");
   cm->DefineProperty
   cm->DefineProperty
     ("CMAKE_EXTRA_SHARED_LIBRARY_SUFFIXES", cmProperty::VARIABLE,
     ("CMAKE_EXTRA_SHARED_LIBRARY_SUFFIXES", cmProperty::VARIABLE,
      "Additional suffixes for shared libraries.",
      "Additional suffixes for shared libraries.",
@@ -1245,12 +1255,18 @@ void cmDocumentVariables::DefineVariables(cmake* cm)
                      cmProperty::VARIABLE,0,0);
                      cmProperty::VARIABLE,0,0);
   cm->DefineProperty("CMAKE_<LANG>_USE_RESPONSE_FILE_FOR_OBJECTS",
   cm->DefineProperty("CMAKE_<LANG>_USE_RESPONSE_FILE_FOR_OBJECTS",
                      cmProperty::VARIABLE,0,0);
                      cmProperty::VARIABLE,0,0);
+  cm->DefineProperty("CMAKE_EXECUTABLE_SUFFIX_<LANG>",
+                     cmProperty::VARIABLE,0,0);
   cm->DefineProperty("CMAKE_EXE_LINK_DYNAMIC_<LANG>_FLAGS",
   cm->DefineProperty("CMAKE_EXE_LINK_DYNAMIC_<LANG>_FLAGS",
                      cmProperty::VARIABLE,0,0);
                      cmProperty::VARIABLE,0,0);
   cm->DefineProperty("CMAKE_EXE_LINK_STATIC_<LANG>_FLAGS",
   cm->DefineProperty("CMAKE_EXE_LINK_STATIC_<LANG>_FLAGS",
                      cmProperty::VARIABLE,0,0);
                      cmProperty::VARIABLE,0,0);
   cm->DefineProperty("CMAKE_GENERATOR_<LANG>",
   cm->DefineProperty("CMAKE_GENERATOR_<LANG>",
                      cmProperty::VARIABLE,0,0);
                      cmProperty::VARIABLE,0,0);
+  cm->DefineProperty("CMAKE_IMPORT_LIBRARY_PREFIX_<LANG>",
+                     cmProperty::VARIABLE,0,0);
+  cm->DefineProperty("CMAKE_IMPORT_LIBRARY_SUFFIX_<LANG>",
+                     cmProperty::VARIABLE,0,0);
   cm->DefineProperty("CMAKE_INCLUDE_FLAG_<LANG>",
   cm->DefineProperty("CMAKE_INCLUDE_FLAG_<LANG>",
                      cmProperty::VARIABLE,0,0);
                      cmProperty::VARIABLE,0,0);
   cm->DefineProperty("CMAKE_INCLUDE_FLAG_SEP_<LANG>",
   cm->DefineProperty("CMAKE_INCLUDE_FLAG_SEP_<LANG>",
@@ -1269,6 +1285,10 @@ void cmDocumentVariables::DefineVariables(cmake* cm)
                      cmProperty::VARIABLE,0,0);
                      cmProperty::VARIABLE,0,0);
   cm->DefineProperty("CMAKE_SHARED_LIBRARY_LINK_STATIC_<LANG>_FLAGS",
   cm->DefineProperty("CMAKE_SHARED_LIBRARY_LINK_STATIC_<LANG>_FLAGS",
                      cmProperty::VARIABLE,0,0);
                      cmProperty::VARIABLE,0,0);
+  cm->DefineProperty("CMAKE_SHARED_LIBRARY_PREFIX_<LANG>",
+                     cmProperty::VARIABLE,0,0);
+  cm->DefineProperty("CMAKE_SHARED_LIBRARY_SUFFIX_<LANG>",
+                     cmProperty::VARIABLE,0,0);
   cm->DefineProperty("CMAKE_SHARED_LIBRARY_RUNTIME_<LANG>_FLAG",
   cm->DefineProperty("CMAKE_SHARED_LIBRARY_RUNTIME_<LANG>_FLAG",
                      cmProperty::VARIABLE,0,0);
                      cmProperty::VARIABLE,0,0);
   cm->DefineProperty("CMAKE_SHARED_LIBRARY_RUNTIME_<LANG>_FLAG_SEP",
   cm->DefineProperty("CMAKE_SHARED_LIBRARY_RUNTIME_<LANG>_FLAG_SEP",
@@ -1291,10 +1311,18 @@ void cmDocumentVariables::DefineVariables(cmake* cm)
                      cmProperty::VARIABLE,0,0);
                      cmProperty::VARIABLE,0,0);
   cm->DefineProperty("CMAKE_SHARED_MODULE_LINK_STATIC_<LANG>_FLAGS",
   cm->DefineProperty("CMAKE_SHARED_MODULE_LINK_STATIC_<LANG>_FLAGS",
                      cmProperty::VARIABLE,0,0);
                      cmProperty::VARIABLE,0,0);
+  cm->DefineProperty("CMAKE_SHARED_MODULE_PREFIX_<LANG>",
+                     cmProperty::VARIABLE,0,0);
+  cm->DefineProperty("CMAKE_SHARED_MODULE_SUFFIX_<LANG>",
+                     cmProperty::VARIABLE,0,0);
   cm->DefineProperty("CMAKE_SHARED_MODULE_RUNTIME_<LANG>_FLAG",
   cm->DefineProperty("CMAKE_SHARED_MODULE_RUNTIME_<LANG>_FLAG",
                      cmProperty::VARIABLE,0,0);
                      cmProperty::VARIABLE,0,0);
   cm->DefineProperty("CMAKE_SHARED_MODULE_RUNTIME_<LANG>_FLAG_SEP",
   cm->DefineProperty("CMAKE_SHARED_MODULE_RUNTIME_<LANG>_FLAG_SEP",
                      cmProperty::VARIABLE,0,0);
                      cmProperty::VARIABLE,0,0);
+  cm->DefineProperty("CMAKE_STATIC_LIBRARY_PREFIX_<LANG>",
+                     cmProperty::VARIABLE,0,0);
+  cm->DefineProperty("CMAKE_STATIC_LIBRARY_SUFFIX_<LANG>",
+                     cmProperty::VARIABLE,0,0);
   cm->DefineProperty("CMAKE_LINK_DEPENDENT_LIBRARY_FILES",
   cm->DefineProperty("CMAKE_LINK_DEPENDENT_LIBRARY_FILES",
                      cmProperty::VARIABLE,0,0);
                      cmProperty::VARIABLE,0,0);
   cm->DefineProperty("CMAKE_LINK_DEPENDENT_LIBRARY_DIRS",
   cm->DefineProperty("CMAKE_LINK_DEPENDENT_LIBRARY_DIRS",

+ 15 - 0
Source/cmTarget.cxx

@@ -2709,6 +2709,21 @@ void cmTarget::GetFullNameInternal(const char* config,
   const char* prefixVar = this->GetPrefixVariableInternal(implib);
   const char* prefixVar = this->GetPrefixVariableInternal(implib);
   const char* suffixVar = this->GetSuffixVariableInternal(implib);
   const char* suffixVar = this->GetSuffixVariableInternal(implib);
 
 
+  // Check for language-specific default prefix and suffix.
+  if(const char* ll = this->GetLinkerLanguage(config))
+    {
+    if(!targetSuffix && suffixVar && *suffixVar)
+      {
+      std::string langSuff = suffixVar + std::string("_") + ll;
+      targetSuffix = this->Makefile->GetDefinition(langSuff.c_str());
+      }
+    if(!targetPrefix && prefixVar && *prefixVar)
+      {
+      std::string langPrefix = prefixVar + std::string("_") + ll;
+      targetPrefix = this->Makefile->GetDefinition(langPrefix.c_str());
+      }
+    }
+
   // if there is no prefix on the target use the cmake definition
   // if there is no prefix on the target use the cmake definition
   if(!targetPrefix && prefixVar)
   if(!targetPrefix && prefixVar)
     {
     {