From b29eadd8f38fcfd7b0635501f5e1429e7cb69865 Mon Sep 17 00:00:00 2001 From: Brad King Date: Mon, 3 Jan 2011 10:02:16 -0500 Subject: [PATCH] Map multiple /FI flags for VS < 10 (#11649) The /FI flag may be repeated so the flag table entry needs to be marked with SemicolonAppendable. This was already the case for VS 10. --- Source/cmLocalVisualStudio7Generator.cxx | 2 +- Tests/CMakeLists.txt | 1 + Tests/ForceInclude/CMakeLists.txt | 10 ++++++++++ Tests/ForceInclude/foo.c | 7 +++++++ Tests/ForceInclude/foo1.h | 1 + Tests/ForceInclude/foo2.h | 1 + 6 files changed, 21 insertions(+), 1 deletion(-) create mode 100644 Tests/ForceInclude/CMakeLists.txt create mode 100644 Tests/ForceInclude/foo.c create mode 100644 Tests/ForceInclude/foo1.h create mode 100644 Tests/ForceInclude/foo2.h diff --git a/Source/cmLocalVisualStudio7Generator.cxx b/Source/cmLocalVisualStudio7Generator.cxx index b22c429d5..418b8b4f6 100644 --- a/Source/cmLocalVisualStudio7Generator.cxx +++ b/Source/cmLocalVisualStudio7Generator.cxx @@ -427,7 +427,7 @@ cmVS7FlagTable cmLocalVisualStudio7GeneratorFlagTable[] = // The YX and Yu options are in a per-global-generator table because // their values differ based on the VS IDE version. {"ForcedIncludeFiles", "FI", "Forced include files", "", - cmVS7FlagTable::UserValueRequired}, + cmVS7FlagTable::UserValueRequired | cmVS7FlagTable::SemicolonAppendable}, // boolean flags {"BufferSecurityCheck", "GS", "Buffer security check", "TRUE", 0}, diff --git a/Tests/CMakeLists.txt b/Tests/CMakeLists.txt index 289e6327a..7aaa10a34 100644 --- a/Tests/CMakeLists.txt +++ b/Tests/CMakeLists.txt @@ -1044,6 +1044,7 @@ ${CMake_BINARY_DIR}/bin/cmake -DVERSION=master -P ${CMake_SOURCE_DIR}/Utilities/ LIST(APPEND TEST_BUILD_DIRS "${CMake_BINARY_DIR}/Tests/SubDir") IF(CMAKE_TEST_MSVC) + ADD_TEST_MACRO(ForceInclude foo) ADD_TEST_MACRO(PrecompiledHeader foo) ADD_TEST_MACRO(ModuleDefinition example_exe) ENDIF(CMAKE_TEST_MSVC) diff --git a/Tests/ForceInclude/CMakeLists.txt b/Tests/ForceInclude/CMakeLists.txt new file mode 100644 index 000000000..5c02ebbd0 --- /dev/null +++ b/Tests/ForceInclude/CMakeLists.txt @@ -0,0 +1,10 @@ +cmake_minimum_required(VERSION 2.8.3.20110103) +project(ForceInclude C) + +# Make sure the proper compiler is in use. +if(NOT MSVC AND NOT "${CMAKE_C_COMPILER_ID}" MATCHES "^(Intel)$") + message(FATAL_ERROR "The ForceInclude test works only with MSVC or Intel") +endif() + +add_executable(foo foo.c) +set_property(SOURCE foo.c PROPERTY COMPILE_FLAGS "/FIfoo1.h /FIfoo2.h") diff --git a/Tests/ForceInclude/foo.c b/Tests/ForceInclude/foo.c new file mode 100644 index 000000000..af898f4aa --- /dev/null +++ b/Tests/ForceInclude/foo.c @@ -0,0 +1,7 @@ +#ifndef FOO_1 +# error "foo1.h not included by /FI" +#endif +#ifndef FOO_2 +# error "foo2.h not included by /FI" +#endif +int main(void) { return 0; } diff --git a/Tests/ForceInclude/foo1.h b/Tests/ForceInclude/foo1.h new file mode 100644 index 000000000..2c1cb7bb3 --- /dev/null +++ b/Tests/ForceInclude/foo1.h @@ -0,0 +1 @@ +#define FOO_1 diff --git a/Tests/ForceInclude/foo2.h b/Tests/ForceInclude/foo2.h new file mode 100644 index 000000000..e47524dfa --- /dev/null +++ b/Tests/ForceInclude/foo2.h @@ -0,0 +1 @@ +#define FOO_2