From b96f6fc2aabed8a77cd45c0f87af7abb6a687576 Mon Sep 17 00:00:00 2001 From: Brad King Date: Mon, 26 Nov 2012 16:44:56 -0500 Subject: [PATCH 1/2] Teach find_(path|file) about Linux multiarch (#13742) Implement support for multiarch include directories as specified here: https://wiki.ubuntu.com/MultiarchCross Generalize the multiarch feature added in commit b41ad3b3 (Teach find_(library|package) about Linux multiarch, 2011-06-08) to the find_path and find_file commands. Teach them to search /include/ whenever they would search /include. --- Source/cmFindBase.cxx | 4 ++-- Source/cmFindPathCommand.cxx | 6 ++++-- 2 files changed, 6 insertions(+), 4 deletions(-) diff --git a/Source/cmFindBase.cxx b/Source/cmFindBase.cxx index 1de3982f4e..7ce0032165 100644 --- a/Source/cmFindBase.cxx +++ b/Source/cmFindBase.cxx @@ -360,13 +360,13 @@ void cmFindBase::AddPrefixPaths(std::vector const& in_paths, { dir += "/"; } - if(subdir == "lib") + if(subdir == "include" || subdir == "lib") { const char* arch = this->Makefile->GetDefinition("CMAKE_LIBRARY_ARCHITECTURE"); if(arch && *arch) { - this->AddPathInternal(dir+"lib/"+arch, pathType); + this->AddPathInternal(dir+subdir+"/"+arch, pathType); } } std::string add = dir + subdir; diff --git a/Source/cmFindPathCommand.cxx b/Source/cmFindPathCommand.cxx index 952492463b..6a432984d4 100644 --- a/Source/cmFindPathCommand.cxx +++ b/Source/cmFindPathCommand.cxx @@ -45,8 +45,10 @@ void cmFindPathCommand::GenerateDocumentation() "SEARCH_XXX", "file in a directory"); cmSystemTools::ReplaceString(this->GenericDocumentation, "XXX_SUBDIR", "include"); - cmSystemTools::ReplaceString(this->GenericDocumentation, - "XXX_EXTRA_PREFIX_ENTRY", ""); + cmSystemTools::ReplaceString( + this->GenericDocumentation, + "XXX_EXTRA_PREFIX_ENTRY", + " /include/ if CMAKE_LIBRARY_ARCHITECTURE is set, and\n"); cmSystemTools::ReplaceString(this->GenericDocumentation, "CMAKE_FIND_ROOT_PATH_MODE_XXX", "CMAKE_FIND_ROOT_PATH_MODE_INCLUDE"); From da1d9bac63d486d430b0c61ee8d3928f8d09ab26 Mon Sep 17 00:00:00 2001 From: Brad King Date: Mon, 26 Nov 2012 17:01:43 -0500 Subject: [PATCH 2/2] Test find_path multiarch support (#13742) --- Tests/CMakeOnly/CMakeLists.txt | 1 + Tests/CMakeOnly/find_path/CMakeLists.txt | 31 +++++++++++++++++++ .../find_path/include/arch/test1arch.h | 0 Tests/CMakeOnly/find_path/include/test1.h | 0 4 files changed, 32 insertions(+) create mode 100644 Tests/CMakeOnly/find_path/CMakeLists.txt create mode 100644 Tests/CMakeOnly/find_path/include/arch/test1arch.h create mode 100644 Tests/CMakeOnly/find_path/include/test1.h diff --git a/Tests/CMakeOnly/CMakeLists.txt b/Tests/CMakeOnly/CMakeLists.txt index 1b4ebc4250..be7ddbc21a 100644 --- a/Tests/CMakeOnly/CMakeLists.txt +++ b/Tests/CMakeOnly/CMakeLists.txt @@ -32,6 +32,7 @@ add_CMakeOnly_test(SelectLibraryConfigurations) add_CMakeOnly_test(TargetScope) add_CMakeOnly_test(find_library) +add_CMakeOnly_test(find_path) add_test(CMakeOnly.ProjectInclude ${CMAKE_CMAKE_COMMAND} -DTEST=ProjectInclude diff --git a/Tests/CMakeOnly/find_path/CMakeLists.txt b/Tests/CMakeOnly/find_path/CMakeLists.txt new file mode 100644 index 0000000000..0e64ed4674 --- /dev/null +++ b/Tests/CMakeOnly/find_path/CMakeLists.txt @@ -0,0 +1,31 @@ +cmake_minimum_required(VERSION 2.8) +project(FindPathTest NONE) + +set(CMAKE_FIND_DEBUG_MODE 1) + +macro(test_find_path expected) + unset(HDR CACHE) + find_path(HDR ${ARGN} + NO_CMAKE_ENVIRONMENT_PATH + NO_SYSTEM_ENVIRONMENT_PATH + ) + if(HDR) + # Convert to relative path for comparison to expected location. + file(RELATIVE_PATH REL_HDR "${CMAKE_CURRENT_SOURCE_DIR}" "${HDR}") + + # Check and report failure. + if(NOT "${REL_HDR}" STREQUAL "${expected}") + message(SEND_ERROR "Header ${expected} found as [${REL_HDR}]") + elseif(CMAKE_FIND_DEBUG_MODE) + message(STATUS "Header ${expected} found as [${REL_HDR}]") + endif() + else() + message(SEND_ERROR "Header ${expected} NOT FOUND") + endif() +endmacro() + +set(CMAKE_SYSTEM_PREFIX_PATH ${CMAKE_CURRENT_SOURCE_DIR}) +set(CMAKE_LIBRARY_ARCHITECTURE arch) + +test_find_path(include NAMES test1.h) +test_find_path(include/arch NAMES test1arch.h) diff --git a/Tests/CMakeOnly/find_path/include/arch/test1arch.h b/Tests/CMakeOnly/find_path/include/arch/test1arch.h new file mode 100644 index 0000000000..e69de29bb2 diff --git a/Tests/CMakeOnly/find_path/include/test1.h b/Tests/CMakeOnly/find_path/include/test1.h new file mode 100644 index 0000000000..e69de29bb2