BUG: fix for bug 4423 set language fixes

This commit is contained in:
Bill Hoffman 2007-02-20 09:35:21 -05:00
parent 5c0a340a9e
commit 1d8e7e9411
6 changed files with 61 additions and 4 deletions

View File

@ -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"

View File

@ -421,13 +421,17 @@ 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.
const char* dependsValue = (*sf)->GetProperty("OBJECT_DEPENDS");

View File

@ -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)
{

View File

@ -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)

21
Tests/SetLang/bar.c Normal file
View File

@ -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;
}

7
Tests/SetLang/foo.c Normal file
View File

@ -0,0 +1,7 @@
int foo()
{
int r = 10;
r++;
int ret = r+10;
return ret;
}