Merge topic 'toolchain-include_directories'

588fa1bb9e Restore support for include_directories() in toolchain files

Acked-by: Kitware Robot <kwrobot@kitware.com>
Merge-request: !3140
This commit is contained in:
Brad King 2019-03-26 14:56:27 +00:00 committed by Kitware Robot
commit 8494bc2713
7 changed files with 34 additions and 1 deletions

View File

@ -51,6 +51,7 @@ function(CMAKE_DETERMINE_COMPILER_ABI lang src)
OUTPUT_VARIABLE OUTPUT
COPY_FILE "${BIN}"
COPY_FILE_ERROR _copy_error
__CMAKE_INTERNAL ABI
)
# Restore original LC_ALL, LC_MESSAGES, and LANG

View File

@ -123,6 +123,7 @@ int cmCoreTryCompile::TryCompileCode(std::vector<std::string> const& argv,
std::string targetName;
std::vector<std::string> cmakeFlags(1, "CMAKE_FLAGS"); // fake argv[0]
std::vector<std::string> compileDefs;
std::string cmakeInternal;
std::string outputVariable;
std::string copyFile;
std::string copyFileError;
@ -174,7 +175,8 @@ int cmCoreTryCompile::TryCompileCode(std::vector<std::string> const& argv,
DoingCExtensions,
DoingCxxExtensions,
DoingCudaExtensions,
DoingSources
DoingSources,
DoingCMakeInternal
};
Doing doing = useSources ? DoingSources : DoingNone;
for (size_t i = 3; i < argv.size(); ++i) {
@ -223,6 +225,8 @@ int cmCoreTryCompile::TryCompileCode(std::vector<std::string> const& argv,
} else if (argv[i] == "CUDA_EXTENSIONS") {
doing = DoingCudaExtensions;
didCudaExtensions = true;
} else if (argv[i] == "__CMAKE_INTERNAL") {
doing = DoingCMakeInternal;
} else if (doing == DoingCMakeFlags) {
cmakeFlags.push_back(argv[i]);
} else if (doing == DoingCompileDefinitions) {
@ -296,6 +300,9 @@ int cmCoreTryCompile::TryCompileCode(std::vector<std::string> const& argv,
doing = DoingNone;
} else if (doing == DoingSources) {
sources.push_back(argv[i]);
} else if (doing == DoingCMakeInternal) {
cmakeInternal = argv[i];
doing = DoingNone;
} else if (i == 3) {
this->SrcFileSignature = false;
projectName = argv[i].c_str();
@ -508,6 +515,14 @@ int cmCoreTryCompile::TryCompileCode(std::vector<std::string> const& argv,
}
}
fprintf(fout, "project(CMAKE_TRY_COMPILE%s)\n", projectLangs.c_str());
if (cmakeInternal == "ABI") {
// This is the ABI detection step, also used for implicit includes.
// Erase any include_directories() calls from the toolchain file so
// that we do not see them as implicit. Our ABI detection source
// does not include any system headers anyway.
fprintf(fout,
"set_property(DIRECTORY PROPERTY INCLUDE_DIRECTORIES \"\")\n");
}
fprintf(fout, "set(CMAKE_VERBOSE_MAKEFILE 1)\n");
for (std::string const& li : testLangs) {
std::string langFlags = "CMAKE_" + li + "_FLAGS";

View File

@ -0,0 +1 @@
include_directories(${CMAKE_CURRENT_LIST_DIR}/IncludeDirectories)

View File

@ -0,0 +1,5 @@
#include <IncDir.h>
void IncDir(void)
{
}

View File

@ -0,0 +1,2 @@
enable_language(C)
add_library(IncDir STATIC IncludeDirectories.c)

View File

@ -0,0 +1 @@
/* IncDir.h */

View File

@ -9,3 +9,11 @@ run_cmake_toolchain(CallEnableLanguage)
run_cmake_toolchain(CallProject)
run_cmake_toolchain(FlagsInit)
run_cmake_toolchain(LinkFlagsInit)
function(run_IncludeDirectories)
run_cmake_toolchain(IncludeDirectories)
set(RunCMake_TEST_BINARY_DIR ${RunCMake_BINARY_DIR}/IncludeDirectories-build)
set(RunCMake_TEST_NO_CLEAN 1)
run_cmake_command(IncludeDirectories-build ${CMAKE_COMMAND} --build . --config Debug)
endfunction()
run_IncludeDirectories()