From a4bd30104fe6df3e4a6a37d0abb640a28126009d Mon Sep 17 00:00:00 2001 From: Brad King Date: Fri, 21 Aug 2015 13:42:04 -0400 Subject: [PATCH] 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. --- Source/cmState.cxx | 11 +++++------ .../include_directories/DirectoryBefore-stdout.txt | 1 + .../include_directories/DirectoryBefore.cmake | 4 ++++ Tests/RunCMake/include_directories/RunCMakeTest.cmake | 1 + 4 files changed, 11 insertions(+), 6 deletions(-) create mode 100644 Tests/RunCMake/include_directories/DirectoryBefore-stdout.txt create mode 100644 Tests/RunCMake/include_directories/DirectoryBefore.cmake diff --git a/Source/cmState.cxx b/Source/cmState.cxx index f42586114..4ad6d3b2e 100644 --- a/Source/cmState.cxx +++ b/Source/cmState.cxx @@ -1296,22 +1296,21 @@ void cmState::Directory::PrependIncludeDirectoriesEntry( this->DirectoryState->IncludeDirectories.begin() + this->Snapshot_.Position->IncludeDirectoryPosition; - std::vector::const_reverse_iterator rend = + std::vector::reverse_iterator rend = this->DirectoryState->IncludeDirectories.rend(); std::vector::reverse_iterator rbegin = cmMakeReverseIterator(entryEnd); - std::vector::const_reverse_iterator crbegin = rbegin; - crbegin = std::find(crbegin, rend, cmPropertySentinal); + rbegin = std::find(rbegin, rend, cmPropertySentinal); - std::vector::const_iterator entryIt = crbegin.base(); - std::vector::const_iterator entryBegin = + std::vector::iterator entryIt = rbegin.base(); + std::vector::iterator entryBegin = this->DirectoryState->IncludeDirectories.begin(); std::vector::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 = diff --git a/Tests/RunCMake/include_directories/DirectoryBefore-stdout.txt b/Tests/RunCMake/include_directories/DirectoryBefore-stdout.txt new file mode 100644 index 000000000..e9860820b --- /dev/null +++ b/Tests/RunCMake/include_directories/DirectoryBefore-stdout.txt @@ -0,0 +1 @@ +-- INCLUDE_DIRECTORIES: '[^;]*/Tests/RunCMake/include_directories/BeforeDir;[^;]*/Tests/RunCMake/include_directories/AfterDir' diff --git a/Tests/RunCMake/include_directories/DirectoryBefore.cmake b/Tests/RunCMake/include_directories/DirectoryBefore.cmake new file mode 100644 index 000000000..be3f66381 --- /dev/null +++ b/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}'") diff --git a/Tests/RunCMake/include_directories/RunCMakeTest.cmake b/Tests/RunCMake/include_directories/RunCMakeTest.cmake index 54d5e9773..57e827493 100644 --- a/Tests/RunCMake/include_directories/RunCMakeTest.cmake +++ b/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)