From 188baef00c3b19c6ee6ed8c3735817bae50f110e Mon Sep 17 00:00:00 2001 From: Harry Mallon Date: Wed, 25 May 2016 18:18:47 +0100 Subject: [PATCH] find_path: Fix location of in a framework on OS X After finding it in `foo.Framework/Headers/dir/header.h`, we should report the `foo.Framework/Headers` directory, not `foo.Framework/Headers/dir`, because the former is what actually contains the path the caller wishes to include. --- Source/cmFindPathCommand.cxx | 2 +- .../Frameworks/Foo.framework/Headers/Some/Dir/Header.h | 0 Tests/RunCMake/find_path/FrameworksWithSubdirs-stdout.txt | 1 + Tests/RunCMake/find_path/FrameworksWithSubdirs.cmake | 3 +++ Tests/RunCMake/find_path/RunCMakeTest.cmake | 4 ++++ 5 files changed, 9 insertions(+), 1 deletion(-) create mode 100644 Tests/RunCMake/find_path/Frameworks/Foo.framework/Headers/Some/Dir/Header.h create mode 100644 Tests/RunCMake/find_path/FrameworksWithSubdirs-stdout.txt create mode 100644 Tests/RunCMake/find_path/FrameworksWithSubdirs.cmake diff --git a/Source/cmFindPathCommand.cxx b/Source/cmFindPathCommand.cxx index d24be6aeb..d71fc1ae9 100644 --- a/Source/cmFindPathCommand.cxx +++ b/Source/cmFindPathCommand.cxx @@ -117,7 +117,7 @@ std::string cmFindPathCommand::FindHeaderInFramework(std::string const& file, if (this->IncludeFileInPath) { return fheader; } - fheader = cmSystemTools::GetFilenamePath(fheader); + fheader.resize(fheader.size() - file.size()); return fheader; } return ""; diff --git a/Tests/RunCMake/find_path/Frameworks/Foo.framework/Headers/Some/Dir/Header.h b/Tests/RunCMake/find_path/Frameworks/Foo.framework/Headers/Some/Dir/Header.h new file mode 100644 index 000000000..e69de29bb diff --git a/Tests/RunCMake/find_path/FrameworksWithSubdirs-stdout.txt b/Tests/RunCMake/find_path/FrameworksWithSubdirs-stdout.txt new file mode 100644 index 000000000..001a3e9c7 --- /dev/null +++ b/Tests/RunCMake/find_path/FrameworksWithSubdirs-stdout.txt @@ -0,0 +1 @@ +-- SOME_INCLUDE_DIR='[^']*Tests/RunCMake/find_path/Frameworks/Foo.framework/Headers' diff --git a/Tests/RunCMake/find_path/FrameworksWithSubdirs.cmake b/Tests/RunCMake/find_path/FrameworksWithSubdirs.cmake new file mode 100644 index 000000000..b28602151 --- /dev/null +++ b/Tests/RunCMake/find_path/FrameworksWithSubdirs.cmake @@ -0,0 +1,3 @@ +set(CMAKE_FRAMEWORK_PATH "${CMAKE_CURRENT_SOURCE_DIR}/Frameworks") +find_path(SOME_INCLUDE_DIR "Some/Dir/Header.h") +message(STATUS "SOME_INCLUDE_DIR='${SOME_INCLUDE_DIR}'") diff --git a/Tests/RunCMake/find_path/RunCMakeTest.cmake b/Tests/RunCMake/find_path/RunCMakeTest.cmake index 5ce96e0e8..bf0fa8951 100644 --- a/Tests/RunCMake/find_path/RunCMakeTest.cmake +++ b/Tests/RunCMake/find_path/RunCMakeTest.cmake @@ -3,3 +3,7 @@ include(RunCMake) if(WIN32 OR CYGWIN) run_cmake(PrefixInPATH) endif() + +if(APPLE) + run_cmake(FrameworksWithSubdirs) +endif()