diff options
author | Brad King <brad.king@kitware.com> | 2023-02-16 21:53:52 (GMT) |
---|---|---|
committer | Brad King <brad.king@kitware.com> | 2023-02-17 23:02:45 (GMT) |
commit | 841272eb35cbc76e18609d1b447aaabf1ffd6cda (patch) | |
tree | 6d6ef273b5e04a44eb8838fb0cec2621b84eb2e1 /Tests/CMakeCommands | |
parent | 2a758e34ea7fc28d085460b575a5640a6e18232d (diff) | |
download | CMake-841272eb35cbc76e18609d1b447aaabf1ffd6cda.zip CMake-841272eb35cbc76e18609d1b447aaabf1ffd6cda.tar.gz CMake-841272eb35cbc76e18609d1b447aaabf1ffd6cda.tar.bz2 |
Xcode: Restore suppression of header maps
In commit 8527f42b96 (Xcode: Explicitly disable deprecated user include
path feature, 2023-01-31, v3.26.0-rc1~7^2) we dropped the Xcode build
setting `USE_HEADERMAP = NO` because Xcode 14's "Build Documentation"
feature (`xcodebuild RUN_DOCUMENTATION_COMPILER=YES`) fails in some
cases without header maps. However, enabling header maps causes Xcode
to add `-iquote .../foo.hmap` and `-I .../bar.hmap` flags that can
change the intended header file search order based on the contents of
the header maps. This can break existing projects. Restore the
`USE_HEADERMAP = NO` setting to fix the header file search order.
Further investigation will be needed to resolve the problematic cases
with the Xcode 14 "Build Documentation" feature. Meanwhile projects
encountering such cases can set the `XCODE_ATTRIBUTE_USE_HEADERMAP`
target property to `YES` themselves.
Fixes: #24418
Issue: #24379
Diffstat (limited to 'Tests/CMakeCommands')
4 files changed, 14 insertions, 0 deletions
diff --git a/Tests/CMakeCommands/target_include_directories/CMakeLists.txt b/Tests/CMakeCommands/target_include_directories/CMakeLists.txt index 0702ab5..3de9ef7 100644 --- a/Tests/CMakeCommands/target_include_directories/CMakeLists.txt +++ b/Tests/CMakeCommands/target_include_directories/CMakeLists.txt @@ -83,3 +83,8 @@ get_target_property(_res imp INCLUDE_DIRECTORIES) if (_res) message(SEND_ERROR "include_directories populated the INCLUDE_DIRECTORIES target property") endif() + +# Test selecting lexicographically-later header of same name via include order. +# Xcode 'USE_HEADERMAP = YES' breaks this. +add_library(same STATIC same.c same_one/same.h same_two/same.h) +target_include_directories(same PRIVATE same_two) diff --git a/Tests/CMakeCommands/target_include_directories/same.c b/Tests/CMakeCommands/target_include_directories/same.c new file mode 100644 index 0000000..8fb8d29 --- /dev/null +++ b/Tests/CMakeCommands/target_include_directories/same.c @@ -0,0 +1,7 @@ +#include "same.h" +#ifndef CORRECT_SAME_H_INCLUDED +# error "Correct \"same.h\" not included!" +#endif +void same(void) +{ +} diff --git a/Tests/CMakeCommands/target_include_directories/same_one/same.h b/Tests/CMakeCommands/target_include_directories/same_one/same.h new file mode 100644 index 0000000..e71fe01 --- /dev/null +++ b/Tests/CMakeCommands/target_include_directories/same_one/same.h @@ -0,0 +1 @@ +#error "Wrong \"same.h\" included!" diff --git a/Tests/CMakeCommands/target_include_directories/same_two/same.h b/Tests/CMakeCommands/target_include_directories/same_two/same.h new file mode 100644 index 0000000..91ac63c --- /dev/null +++ b/Tests/CMakeCommands/target_include_directories/same_two/same.h @@ -0,0 +1 @@ +#define CORRECT_SAME_H_INCLUDED |