BUG: fix for bug 4423 set language fixes
This commit is contained in:
parent
5c0a340a9e
commit
1d8e7e9411
|
@ -697,6 +697,16 @@ IF(BUILD_TESTING)
|
|||
-DCMAKE_TEST_SYSTEM_LIBRARIES:BOOL=${CMAKE_TEST_SYSTEM_LIBRARIES}
|
||||
--test-command complex)
|
||||
|
||||
ADD_TEST(SetLang ${CMAKE_CTEST_COMMAND}
|
||||
--build-and-test
|
||||
"${CMake_SOURCE_DIR}/Tests/SetLang"
|
||||
"${CMake_BINARY_DIR}/Tests/SetLang"
|
||||
--build-two-config
|
||||
--build-generator ${CMAKE_TEST_GENERATOR}
|
||||
--build-makeprogram ${CMAKE_TEST_MAKEPROGRAM}
|
||||
--build-project SetLang
|
||||
--test-command bar)
|
||||
|
||||
# ADD_TEST(ConvLibrary ${CMAKE_CTEST_COMMAND}
|
||||
# --build-and-test
|
||||
# "${CMake_SOURCE_DIR}/Tests/ConvLibrary"
|
||||
|
@ -707,6 +717,7 @@ IF(BUILD_TESTING)
|
|||
# --build-project ConvLibrary
|
||||
# --test-command bartest)
|
||||
|
||||
|
||||
# ADD_TEST(complexRelativePaths ${CMAKE_CTEST_COMMAND}
|
||||
# --build-and-test
|
||||
# "${CMake_SOURCE_DIR}/Tests/ComplexRelativePaths"
|
||||
|
|
|
@ -421,12 +421,16 @@ void cmLocalVisualStudio6Generator
|
|||
compileFlags += cflags;
|
||||
}
|
||||
|
||||
const char* lang = this->GlobalGenerator->
|
||||
GetLanguageFromExtension((*sf)->GetSourceExtension().c_str());
|
||||
const char* lang = this->GetSourceFileLanguage(*(*sf));
|
||||
if(lang && strcmp(lang, "CXX") == 0)
|
||||
{
|
||||
// force a C++ file type
|
||||
compileFlags += " /TP ";
|
||||
}
|
||||
else if(strcmp(lang, "C") == 0)
|
||||
{
|
||||
// force to c file type
|
||||
compileFlags += " /TC ";
|
||||
}
|
||||
|
||||
// Check for extra object-file dependencies.
|
||||
|
|
|
@ -1148,9 +1148,16 @@ void cmLocalVisualStudio7Generator
|
|||
}
|
||||
const char* lang = this->GlobalGenerator->GetLanguageFromExtension
|
||||
((*sf)->GetSourceExtension().c_str());
|
||||
const char* sourceLang = this->GetSourceFileLanguage(*(*sf));
|
||||
const char* linkLanguage = target.GetLinkerLanguage
|
||||
(this->GetGlobalGenerator());
|
||||
|
||||
bool needForceLang = false;
|
||||
// source file does not match its extension language
|
||||
if(lang && sourceLang && strcmp(lang, sourceLang) != 0)
|
||||
{
|
||||
needForceLang = true;
|
||||
lang = sourceLang;
|
||||
}
|
||||
// If lang is set, the compiler will generate code automatically.
|
||||
// If HEADER_FILE_ONLY is set, we must suppress this generation in
|
||||
// the project file
|
||||
|
@ -1159,7 +1166,7 @@ void cmLocalVisualStudio7Generator
|
|||
|
||||
// if the source file does not match the linker language
|
||||
// then force c or c++
|
||||
if(linkLanguage && lang && strcmp(lang, linkLanguage) != 0)
|
||||
if(needForceLang || (linkLanguage && lang && strcmp(lang, linkLanguage) != 0))
|
||||
{
|
||||
if(strcmp(lang, "CXX") == 0)
|
||||
{
|
||||
|
|
|
@ -0,0 +1,7 @@
|
|||
# test forcing a source file language to c++ from c
|
||||
project(SetLang)
|
||||
add_library(foo foo.c)
|
||||
add_executable(bar bar.c)
|
||||
set_source_files_properties(foo.c bar.c PROPERTIES LANGUAGE CXX)
|
||||
target_link_libraries(bar foo)
|
||||
set_target_properties(bar PROPERTIES LINKER_LANGUAGE CXX)
|
|
@ -0,0 +1,21 @@
|
|||
#include <stdio.h>
|
||||
|
||||
int foo();
|
||||
class A
|
||||
{
|
||||
public:
|
||||
A() {this->i = foo();}
|
||||
int i;
|
||||
};
|
||||
|
||||
int main()
|
||||
{
|
||||
A a;
|
||||
if(a.i == 21)
|
||||
{
|
||||
printf("passed foo is 21\n");
|
||||
return 0;
|
||||
}
|
||||
printf("Failed foo is not 21\n");
|
||||
return -1;
|
||||
}
|
|
@ -0,0 +1,7 @@
|
|||
int foo()
|
||||
{
|
||||
int r = 10;
|
||||
r++;
|
||||
int ret = r+10;
|
||||
return ret;
|
||||
}
|
Loading…
Reference in New Issue