cmDepends.cxx 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101
  1. /*=========================================================================
  2. Program: CMake - Cross-Platform Makefile Generator
  3. Module: $RCSfile$
  4. Language: C++
  5. Date: $Date$
  6. Version: $Revision$
  7. Copyright (c) 2002 Kitware, Inc., Insight Consortium. All rights reserved.
  8. See Copyright.txt or http://www.cmake.org/HTML/Copyright.html for details.
  9. This software is distributed WITHOUT ANY WARRANTY; without even
  10. the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
  11. PURPOSE. See the above copyright notices for more information.
  12. =========================================================================*/
  13. #include "cmDepends.h"
  14. #include "cmGeneratedFileStream.h"
  15. #include "cmSystemTools.h"
  16. //----------------------------------------------------------------------------
  17. cmDepends::cmDepends(const char* dir, const char* targetFile):
  18. m_Directory(dir),
  19. m_TargetFile(targetFile),
  20. m_DependsMakeFile(dir),
  21. m_DependsMarkFile(dir)
  22. {
  23. // Construct the path to the make and mark files. Append
  24. // appropriate extensions to their names.
  25. m_DependsMakeFile += "/";
  26. m_DependsMarkFile += "/";
  27. m_DependsMakeFile += m_TargetFile;
  28. m_DependsMarkFile += m_TargetFile;
  29. m_DependsMakeFile += ".depends.make";
  30. m_DependsMarkFile += ".depends";
  31. }
  32. //----------------------------------------------------------------------------
  33. cmDepends::~cmDepends()
  34. {
  35. }
  36. //----------------------------------------------------------------------------
  37. bool cmDepends::Write()
  38. {
  39. // Try to generate dependencies for the target file.
  40. cmGeneratedFileStream fout(m_DependsMakeFile.c_str());
  41. fout << "# Dependencies for " << m_TargetFile.c_str() << std::endl;
  42. if(this->WriteDependencies(fout) && fout)
  43. {
  44. // Dependencies were generated. Touch the mark file.
  45. std::ofstream fmark(m_DependsMarkFile.c_str());
  46. fmark << "Dependencies updated for " << m_TargetFile.c_str() << std::endl;
  47. return true;
  48. }
  49. else
  50. {
  51. return false;
  52. }
  53. }
  54. //----------------------------------------------------------------------------
  55. void cmDepends::Check()
  56. {
  57. // Check whether dependencies must be regenerated.
  58. std::ifstream fin(m_DependsMakeFile.c_str());
  59. if(!(fin && this->CheckDependencies(fin)))
  60. {
  61. // Clear all dependencies so they will be regenerated.
  62. this->Clear();
  63. }
  64. }
  65. //----------------------------------------------------------------------------
  66. void cmDepends::Clear()
  67. {
  68. // Remove the dependency mark file to be sure dependencies will be
  69. // regenerated.
  70. cmSystemTools::RemoveFile(m_DependsMarkFile.c_str());
  71. // Write an empty dependency file.
  72. cmGeneratedFileStream depFileStream(m_DependsMakeFile.c_str());
  73. depFileStream
  74. << "# Empty dependencies file for " << m_TargetFile.c_str() << ".\n"
  75. << "# This may be replaced when dependencies are built." << std::endl;
  76. }
  77. //----------------------------------------------------------------------------
  78. const char* cmDepends::GetMakeFileName()
  79. {
  80. // Skip over the directory part of the name.
  81. return m_DependsMakeFile.c_str() + m_Directory.length() + 1;
  82. }
  83. //----------------------------------------------------------------------------
  84. const char* cmDepends::GetMarkFileName()
  85. {
  86. // Skip over the directory part of the name.
  87. return m_DependsMarkFile.c_str() + m_Directory.length() + 1;
  88. }