Browse Source

include_directories: Fix regression in BEFORE option (#15693)

Refactoring in commit 6ed9c7e0 (cmState: Host buildsystem properties for
directories, 2015-07-18) broke include_directories(BEFORE).  Fix it and
add a test case.
Brad King 10 years ago
parent
commit
a4bd30104f

+ 5 - 6
Source/cmState.cxx

@@ -1296,22 +1296,21 @@ void cmState::Directory::PrependIncludeDirectoriesEntry(
       this->DirectoryState->IncludeDirectories.begin()
       + this->Snapshot_.Position->IncludeDirectoryPosition;
 
-  std::vector<std::string>::const_reverse_iterator rend =
+  std::vector<std::string>::reverse_iterator rend =
       this->DirectoryState->IncludeDirectories.rend();
   std::vector<std::string>::reverse_iterator rbegin =
       cmMakeReverseIterator(entryEnd);
-  std::vector<std::string>::const_reverse_iterator crbegin = rbegin;
-  crbegin = std::find(crbegin, rend, cmPropertySentinal);
+  rbegin = std::find(rbegin, rend, cmPropertySentinal);
 
-  std::vector<std::string>::const_iterator entryIt = crbegin.base();
-  std::vector<std::string>::const_iterator entryBegin =
+  std::vector<std::string>::iterator entryIt = rbegin.base();
+  std::vector<std::string>::iterator entryBegin =
       this->DirectoryState->IncludeDirectories.begin();
 
   std::vector<cmListFileBacktrace>::iterator btIt =
       this->DirectoryState->IncludeDirectoryBacktraces.begin()
       + std::distance(entryBegin, entryIt);
 
-  this->DirectoryState->IncludeDirectories.insert(rbegin.base(), vec);
+  this->DirectoryState->IncludeDirectories.insert(entryIt, vec);
   this->DirectoryState->IncludeDirectoryBacktraces.insert(btIt, lfbt);
 
   this->Snapshot_.Position->IncludeDirectoryPosition =

+ 1 - 0
Tests/RunCMake/include_directories/DirectoryBefore-stdout.txt

@@ -0,0 +1 @@
+-- INCLUDE_DIRECTORIES: '[^;]*/Tests/RunCMake/include_directories/BeforeDir;[^;]*/Tests/RunCMake/include_directories/AfterDir'

+ 4 - 0
Tests/RunCMake/include_directories/DirectoryBefore.cmake

@@ -0,0 +1,4 @@
+include_directories(AfterDir)
+include_directories(BEFORE BeforeDir)
+get_property(dirs DIRECTORY PROPERTY INCLUDE_DIRECTORIES)
+message(STATUS "INCLUDE_DIRECTORIES: '${dirs}'")

+ 1 - 0
Tests/RunCMake/include_directories/RunCMakeTest.cmake

@@ -5,6 +5,7 @@ set(RunCMake_TEST_OPTIONS "-DCMAKE_INSTALL_PREFIX=${RunCMake_BINARY_DIR}/NotDefa
 
 run_cmake(NotFoundContent)
 run_cmake(DebugIncludes)
+run_cmake(DirectoryBefore)
 run_cmake(TID-bad-target)
 run_cmake(ImportedTarget)
 run_cmake(CMP0021)