You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

87 lines
2.2 KiB

  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 "cmIncludeDirectoryCommand.h"
  14. // cmIncludeDirectoryCommand
  15. bool cmIncludeDirectoryCommand
  16. ::InitialPass(std::vector<std::string> const& args)
  17. {
  18. if(args.size() < 1 )
  19. {
  20. return true;
  21. }
  22. std::vector<std::string>::const_iterator i = args.begin();
  23. bool before = this->Makefile->IsOn("CMAKE_INCLUDE_DIRECTORIES_BEFORE");
  24. bool system = false;
  25. if ((*i) == "BEFORE")
  26. {
  27. before = true;
  28. ++i;
  29. }
  30. else if ((*i) == "AFTER")
  31. {
  32. before = false;
  33. ++i;
  34. }
  35. for(; i != args.end(); ++i)
  36. {
  37. if(*i == "SYSTEM")
  38. {
  39. system = true;
  40. continue;
  41. }
  42. if(i->size() == 0)
  43. {
  44. const char* versionValue =
  45. this->Makefile->GetDefinition("CMAKE_BACKWARDS_COMPATIBILITY");
  46. const char* errorMessage
  47. = "Empty Include Directory Passed into INCLUDE_DIRECTORIES command.";
  48. if(atof(versionValue) < 2.5)
  49. {
  50. cmSystemTools::Error(errorMessage);
  51. }
  52. else
  53. {
  54. this->SetError(errorMessage);
  55. return 0;
  56. }
  57. }
  58. std::string unixPath = *i;
  59. if (!cmSystemTools::IsOff(unixPath.c_str()))
  60. {
  61. cmSystemTools::ConvertToUnixSlashes(unixPath);
  62. if(!cmSystemTools::FileIsFullPath(unixPath.c_str()))
  63. {
  64. std::string tmp = this->Makefile->GetStartDirectory();
  65. tmp += "/";
  66. tmp += unixPath;
  67. unixPath = tmp;
  68. }
  69. }
  70. this->Makefile->AddIncludeDirectory(unixPath.c_str(), before);
  71. if(system)
  72. {
  73. this->Makefile->AddSystemIncludeDirectory(unixPath.c_str());
  74. }
  75. }
  76. return true;
  77. }