From 62381effba418cdccff0b18f234e3a307446d635 Mon Sep 17 00:00:00 2001
From: Saleem Abdulrasool <compnerd@compnerd.org>
Date: Mon, 20 May 2019 08:40:07 -0700
Subject: Ninja,Swift: reuse `SWIFT_MODULE_NAME` for `SWIFT_MODULE`

Rather than compute the value of `SWIFT_MODULE`, use the computed value
of `SWIFT_MODULE_NAME`.  This is helpful strictly for Windows where you
have multiple configuration variants with differing ABIs that need must
co-exist.  In particular, this re-use permits the use of
`CMAKE_DEBUG_POSTFIX` to have the import library and the DLL be named
with the trailing suffix but have the same import name for the swift
module and interface.
---
 Source/cmNinjaNormalTargetGenerator.cxx | 23 ++++++++++-------------
 1 file changed, 10 insertions(+), 13 deletions(-)

diff --git a/Source/cmNinjaNormalTargetGenerator.cxx b/Source/cmNinjaNormalTargetGenerator.cxx
index 06063b2..31afd9e 100644
--- a/Source/cmNinjaNormalTargetGenerator.cxx
+++ b/Source/cmNinjaNormalTargetGenerator.cxx
@@ -814,10 +814,15 @@ void cmNinjaNormalTargetGenerator::WriteLinkStatement()
       return targetNames.Base;
     }();
 
-    vars["SWIFT_MODULE"] = [this]() -> std::string {
-      cmGeneratorTarget::Names targetNames =
-        this->GetGeneratorTarget()->GetLibraryNames(this->GetConfigName());
+    vars["SWIFT_MODULE_NAME"] = [this]() -> std::string {
+      if (const char* name =
+            this->GetGeneratorTarget()->GetProperty("Swift_MODULE_NAME")) {
+        return name;
+      }
+      return this->GetGeneratorTarget()->GetName();
+    }();
 
+    vars["SWIFT_MODULE"] = [this](const std::string& module) -> std::string {
       std::string directory =
         this->GetLocalGenerator()->GetCurrentBinaryDirectory();
       if (const char* prop = this->GetGeneratorTarget()->GetProperty(
@@ -825,7 +830,7 @@ void cmNinjaNormalTargetGenerator::WriteLinkStatement()
         directory = prop;
       }
 
-      std::string name = targetNames.Base + ".swiftmodule";
+      std::string name = module + ".swiftmodule";
       if (const char* prop =
             this->GetGeneratorTarget()->GetProperty("Swift_MODULE")) {
         name = prop;
@@ -834,15 +839,7 @@ void cmNinjaNormalTargetGenerator::WriteLinkStatement()
       return this->GetLocalGenerator()->ConvertToOutputFormat(
         this->ConvertToNinjaPath(directory + "/" + name),
         cmOutputConverter::SHELL);
-    }();
-
-    vars["SWIFT_MODULE_NAME"] = [this]() -> std::string {
-      if (const char* name =
-            this->GetGeneratorTarget()->GetProperty("Swift_MODULE_NAME")) {
-        return name;
-      }
-      return this->GetGeneratorTarget()->GetName();
-    }();
+    }(vars["SWIFT_MODULE_NAME"]);
 
     vars["SWIFT_OUTPUT_FILE_MAP"] =
       this->GetLocalGenerator()->ConvertToOutputFormat(
-- 
cgit v0.12