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}
|
-DCMAKE_TEST_SYSTEM_LIBRARIES:BOOL=${CMAKE_TEST_SYSTEM_LIBRARIES}
|
||||||
--test-command complex)
|
--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}
|
# ADD_TEST(ConvLibrary ${CMAKE_CTEST_COMMAND}
|
||||||
# --build-and-test
|
# --build-and-test
|
||||||
# "${CMake_SOURCE_DIR}/Tests/ConvLibrary"
|
# "${CMake_SOURCE_DIR}/Tests/ConvLibrary"
|
||||||
|
@ -707,6 +717,7 @@ IF(BUILD_TESTING)
|
||||||
# --build-project ConvLibrary
|
# --build-project ConvLibrary
|
||||||
# --test-command bartest)
|
# --test-command bartest)
|
||||||
|
|
||||||
|
|
||||||
# ADD_TEST(complexRelativePaths ${CMAKE_CTEST_COMMAND}
|
# ADD_TEST(complexRelativePaths ${CMAKE_CTEST_COMMAND}
|
||||||
# --build-and-test
|
# --build-and-test
|
||||||
# "${CMake_SOURCE_DIR}/Tests/ComplexRelativePaths"
|
# "${CMake_SOURCE_DIR}/Tests/ComplexRelativePaths"
|
||||||
|
|
|
@ -421,13 +421,17 @@ void cmLocalVisualStudio6Generator
|
||||||
compileFlags += cflags;
|
compileFlags += cflags;
|
||||||
}
|
}
|
||||||
|
|
||||||
const char* lang = this->GlobalGenerator->
|
const char* lang = this->GetSourceFileLanguage(*(*sf));
|
||||||
GetLanguageFromExtension((*sf)->GetSourceExtension().c_str());
|
|
||||||
if(lang && strcmp(lang, "CXX") == 0)
|
if(lang && strcmp(lang, "CXX") == 0)
|
||||||
{
|
{
|
||||||
// force a C++ file type
|
// force a C++ file type
|
||||||
compileFlags += " /TP ";
|
compileFlags += " /TP ";
|
||||||
}
|
}
|
||||||
|
else if(strcmp(lang, "C") == 0)
|
||||||
|
{
|
||||||
|
// force to c file type
|
||||||
|
compileFlags += " /TC ";
|
||||||
|
}
|
||||||
|
|
||||||
// Check for extra object-file dependencies.
|
// Check for extra object-file dependencies.
|
||||||
const char* dependsValue = (*sf)->GetProperty("OBJECT_DEPENDS");
|
const char* dependsValue = (*sf)->GetProperty("OBJECT_DEPENDS");
|
||||||
|
|
|
@ -1148,9 +1148,16 @@ void cmLocalVisualStudio7Generator
|
||||||
}
|
}
|
||||||
const char* lang = this->GlobalGenerator->GetLanguageFromExtension
|
const char* lang = this->GlobalGenerator->GetLanguageFromExtension
|
||||||
((*sf)->GetSourceExtension().c_str());
|
((*sf)->GetSourceExtension().c_str());
|
||||||
|
const char* sourceLang = this->GetSourceFileLanguage(*(*sf));
|
||||||
const char* linkLanguage = target.GetLinkerLanguage
|
const char* linkLanguage = target.GetLinkerLanguage
|
||||||
(this->GetGlobalGenerator());
|
(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 lang is set, the compiler will generate code automatically.
|
||||||
// If HEADER_FILE_ONLY is set, we must suppress this generation in
|
// If HEADER_FILE_ONLY is set, we must suppress this generation in
|
||||||
// the project file
|
// the project file
|
||||||
|
@ -1159,7 +1166,7 @@ void cmLocalVisualStudio7Generator
|
||||||
|
|
||||||
// if the source file does not match the linker language
|
// if the source file does not match the linker language
|
||||||
// then force c or c++
|
// 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)
|
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