Commit 1d8e7e94 authored by Bill Hoffman's avatar Bill Hoffman
Browse files

BUG: fix for bug 4423 set language fixes

parent 5c0a340a
......@@ -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)
{
......
# 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)
#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;
}
int foo()
{
int r = 10;
r++;
int ret = r+10;
return ret;
}
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment