cmDepends.cxx 2.72 KB
Newer Older
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
/*=========================================================================

  Program:   CMake - Cross-Platform Makefile Generator
  Module:    $RCSfile$
  Language:  C++
  Date:      $Date$
  Version:   $Revision$

  Copyright (c) 2002 Kitware, Inc., Insight Consortium.  All rights reserved.
  See Copyright.txt or http://www.cmake.org/HTML/Copyright.html for details.

     This software is distributed WITHOUT ANY WARRANTY; without even
     the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
     PURPOSE.  See the above copyright notices for more information.

=========================================================================*/
#include "cmDepends.h"

#include "cmGeneratedFileStream.h"
#include "cmSystemTools.h"

22 23
#include <assert.h>

24
//----------------------------------------------------------------------------
25
cmDepends::cmDepends()
26
{
27 28 29 30 31 32 33 34
  m_Verbose = false;
}

//----------------------------------------------------------------------------
cmDepends::~cmDepends()
{
}

35
//----------------------------------------------------------------------------
36
bool cmDepends::Write(const char *src, const char *obj, std::ostream &fout)
37
{
38
  return this->WriteDependencies(src, obj, fout);
39 40 41
}

//----------------------------------------------------------------------------
42
void cmDepends::Check(const char *file)
43
{
44 45
  // Dependency checks must be done in proper working directory.
  std::string oldcwd = ".";
46
  if(m_CompileDirectory != ".")
47
    {
48 49 50
    // Get the CWD but do not call CollapseFullPath because
    // we only need it to cd back, and the form does not matter
    oldcwd = cmSystemTools::GetCurrentWorkingDirectory(false);
51
    cmSystemTools::ChangeDirectory(m_CompileDirectory.c_str());
52 53
    }

54
  // Check whether dependencies must be regenerated.
55
  std::ifstream fin(file);
56 57 58
  if(!(fin && this->CheckDependencies(fin)))
    {
    // Clear all dependencies so they will be regenerated.
59
    this->Clear(file);
60
    }
61 62 63 64 65 66

  // Restore working directory.
  if(oldcwd != ".")
    {
    cmSystemTools::ChangeDirectory(oldcwd.c_str());
    }
67 68 69
}

//----------------------------------------------------------------------------
70
void cmDepends::Clear(const char *file)
71
{
72 73 74 75
  // Print verbose output.
  if(m_Verbose)
    {
    cmOStringStream msg;
76
    msg << "Clearing dependencies in \"" << file << "\"." << std::endl;
77 78 79
    cmSystemTools::Stdout(msg.str().c_str());
    }

80 81
  // Remove the dependency mark file to be sure dependencies will be
  // regenerated.
82 83 84 85
  std::string markFile = file;
  markFile += ".mark";
  cmSystemTools::RemoveFile(markFile.c_str());
  
86
  // Write an empty dependency file.
87
  cmGeneratedFileStream depFileStream(file);
88
  depFileStream
89
    << "# Empty dependencies file\n"
90 91 92
    << "# This may be replaced when dependencies are built." << std::endl;
}