summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--Source/cmLocalVisualStudio7Generator.cxx34
-rw-r--r--Source/cmLocalVisualStudio7Generator.h2
-rw-r--r--Source/cmLocalVisualStudioGenerator.cxx30
-rw-r--r--Source/cmLocalVisualStudioGenerator.h6
4 files changed, 42 insertions, 30 deletions
diff --git a/Source/cmLocalVisualStudio7Generator.cxx b/Source/cmLocalVisualStudio7Generator.cxx
index 31fcb1dc80..ddeeb83901 100644
--- a/Source/cmLocalVisualStudio7Generator.cxx
+++ b/Source/cmLocalVisualStudio7Generator.cxx
@@ -1674,33 +1674,6 @@ void cmLocalVisualStudio7Generator::WriteVCProjEndGroup(std::ostream& fout)
fout << "\t\t</Filter>\n";
}
-void cmLocalVisualStudio7Generator::MaybeCreateImplibDir(cmTarget& target,
- const char* config,
- EventWriter& event)
-{
- // If an executable exports symbols then VS wants to create an
- // import library but forgets to create the output directory.
- if(target.GetType() != cmTarget::EXECUTABLE) { return; }
- std::string outDir = target.GetDirectory(config, false);
- std::string impDir = target.GetDirectory(config, true);
- if(impDir == outDir) { return; }
-
- // Add a pre-build event to create the directory.
- cmCustomCommandLine command;
- command.push_back(this->Makefile->GetRequiredDefinition("CMAKE_COMMAND"));
- command.push_back("-E");
- command.push_back("make_directory");
- command.push_back(impDir);
- std::vector<std::string> no_output;
- std::vector<std::string> no_depends;
- cmCustomCommandLines commands;
- commands.push_back(command);
- cmCustomCommand cc(no_output, no_depends, commands, 0, 0);
- cc.SetEscapeOldStyle(false);
- cc.SetEscapeAllowMakeVars(true);
- event.Write(cc);
-}
-
// look for custom rules on a target and collect them together
void cmLocalVisualStudio7Generator
@@ -1720,7 +1693,12 @@ void cmLocalVisualStudio7Generator
this->FortranProject? "VFPreBuildEventTool":"VCPreBuildEventTool";
event.Start(tool);
event.Write(target.GetPreBuildCommands());
- this->MaybeCreateImplibDir(target, configName, event);
+ cmsys::auto_ptr<cmCustomCommand> pcc(
+ this->MaybeCreateImplibDir(target, configName));
+ if(pcc.get())
+ {
+ event.Write(*pcc);
+ }
event.Finish();
// Add pre-link event.
diff --git a/Source/cmLocalVisualStudio7Generator.h b/Source/cmLocalVisualStudio7Generator.h
index 0a62f23a4f..8796130a2e 100644
--- a/Source/cmLocalVisualStudio7Generator.h
+++ b/Source/cmLocalVisualStudio7Generator.h
@@ -125,8 +125,6 @@ private:
class EventWriter;
friend class EventWriter;
- void MaybeCreateImplibDir(cmTarget& target, const char* config,
- EventWriter& event);
cmVS7FlagTable const* ExtraFlagTable;
std::string ModuleDefinitionFile;
diff --git a/Source/cmLocalVisualStudioGenerator.cxx b/Source/cmLocalVisualStudioGenerator.cxx
index 66be038573..4706a966ba 100644
--- a/Source/cmLocalVisualStudioGenerator.cxx
+++ b/Source/cmLocalVisualStudioGenerator.cxx
@@ -34,6 +34,36 @@ cmLocalVisualStudioGenerator::~cmLocalVisualStudioGenerator()
}
//----------------------------------------------------------------------------
+cmsys::auto_ptr<cmCustomCommand>
+cmLocalVisualStudioGenerator::MaybeCreateImplibDir(cmTarget& target,
+ const char* config)
+{
+ cmsys::auto_ptr<cmCustomCommand> pcc;
+
+ // If an executable exports symbols then VS wants to create an
+ // import library but forgets to create the output directory.
+ if(target.GetType() != cmTarget::EXECUTABLE) { return pcc; }
+ std::string outDir = target.GetDirectory(config, false);
+ std::string impDir = target.GetDirectory(config, true);
+ if(impDir == outDir) { return pcc; }
+
+ // Add a pre-build event to create the directory.
+ cmCustomCommandLine command;
+ command.push_back(this->Makefile->GetRequiredDefinition("CMAKE_COMMAND"));
+ command.push_back("-E");
+ command.push_back("make_directory");
+ command.push_back(impDir);
+ std::vector<std::string> no_output;
+ std::vector<std::string> no_depends;
+ cmCustomCommandLines commands;
+ commands.push_back(command);
+ pcc.reset(new cmCustomCommand(no_output, no_depends, commands, 0, 0));
+ pcc->SetEscapeOldStyle(false);
+ pcc->SetEscapeAllowMakeVars(true);
+ return pcc;
+}
+
+//----------------------------------------------------------------------------
bool cmLocalVisualStudioGenerator::SourceFileCompiles(const cmSourceFile* sf)
{
// Identify the language of the source file.
diff --git a/Source/cmLocalVisualStudioGenerator.h b/Source/cmLocalVisualStudioGenerator.h
index 64ce01ddfc..bddf898b64 100644
--- a/Source/cmLocalVisualStudioGenerator.h
+++ b/Source/cmLocalVisualStudioGenerator.h
@@ -19,6 +19,8 @@
#include "cmLocalGenerator.h"
+#include <cmsys/auto_ptr.hxx>
+
class cmSourceFile;
class cmSourceGroup;
@@ -35,6 +37,10 @@ public:
virtual ~cmLocalVisualStudioGenerator();
protected:
+ /** Construct a custom command to make exe import lib dir. */
+ cmsys::auto_ptr<cmCustomCommand>
+ MaybeCreateImplibDir(cmTarget& target, const char* config);
+
/** Construct a script from the given list of command lines. */
std::string ConstructScript(const cmCustomCommandLines& commandLines,
const char* workingDirectory,