From f3093668739ab21e92f6eddbf9227bbe29fbb2a4 Mon Sep 17 00:00:00 2001
Message-Id: <f3093668739ab21e92f6eddbf9227bbe29fbb2a4.1351875227.git.brad.king@kitware.com>
From: Brad King <brad.king@kitware.com>
Date: Fri, 2 Nov 2012 12:49:44 -0400
Subject: [PATCH] Fix default PDB output directory (#13644)

The ComputePDBOutputDir added by commit 3f60dbf1 (Add
PDB_OUTPUT_DIRECTORY and PDB_NAME target properties, 2012-09-25) falls
back to the current binary directory instead of the target output
directory as before.  When no PDB_OUTPUT_DIRECTORY property is set we
instead should fall back to the target output directory where .pdb files
used to go before the new property was added.
---
 Source/cmTarget.cxx |   11 +++++++----
 Source/cmTarget.h   |    2 +-
 2 files changed, 8 insertions(+), 5 deletions(-)

diff --git a/Source/cmTarget.cxx b/Source/cmTarget.cxx
index 423b350..f3eb52b 100644
--- a/Source/cmTarget.cxx
+++ b/Source/cmTarget.cxx
@@ -2584,7 +2584,10 @@ cmTarget::OutputInfo const* cmTarget::GetOutputInfo(const char* config)
     OutputInfo info;
     this->ComputeOutputDir(config, false, info.OutDir);
     this->ComputeOutputDir(config, true, info.ImpDir);
-    this->ComputePDBOutputDir(config, info.PdbDir);
+    if(!this->ComputePDBOutputDir(config, info.PdbDir))
+      {
+      info.PdbDir = info.OutDir;
+      }
     OutputInfoMapType::value_type entry(config_upper, info);
     i = this->Internal->OutputInfoMap.insert(entry).first;
     }
@@ -3940,7 +3943,7 @@ bool cmTarget::ComputeOutputDir(const char* config,
 }
 
 //----------------------------------------------------------------------------
-void cmTarget::ComputePDBOutputDir(const char* config, std::string& out)
+bool cmTarget::ComputePDBOutputDir(const char* config, std::string& out)
 {
   // Look for a target property defining the target output directory
   // based on the target type.
@@ -3980,8 +3983,7 @@ void cmTarget::ComputePDBOutputDir(const char* config, std::string& out)
     }
   if(out.empty())
     {
-    // Default to the current output directory.
-    out = ".";
+    return false;
     }
 
   // Convert the output path to a full path in case it is
@@ -3996,6 +3998,7 @@ void cmTarget::ComputePDBOutputDir(const char* config, std::string& out)
     this->Makefile->GetLocalGenerator()->GetGlobalGenerator()->
       AppendDirectoryForConfig("/", config, "", out);
     }
+  return true;
 }
 
 //----------------------------------------------------------------------------
diff --git a/Source/cmTarget.h b/Source/cmTarget.h
index 558bfab..e442d25 100644
--- a/Source/cmTarget.h
+++ b/Source/cmTarget.h
@@ -577,7 +577,7 @@ private:
   struct OutputInfo;
   OutputInfo const* GetOutputInfo(const char* config);
   bool ComputeOutputDir(const char* config, bool implib, std::string& out);
-  void ComputePDBOutputDir(const char* config, std::string& out);
+  bool ComputePDBOutputDir(const char* config, std::string& out);
 
   // Cache import information from properties for each configuration.
   struct ImportInfo;
-- 
1.7.10.4

