cmSourceFile: Move LANGUAGE to GetPropertyForUser

- Remove the special case from cmGetSourceFilePropertyCommand

Tests: check LANGUAGE for source file
- use target_sources to add file
- use get_property to read property value
This commit is contained in:
Tushar Maheshwari 2019-08-27 12:19:43 +05:30
parent 8cb3cffa42
commit a40744c81a
3 changed files with 17 additions and 11 deletions

View File

@ -24,10 +24,6 @@ bool cmGetSourceFilePropertyCommand::InitialPass(
sf = this->Makefile->CreateSource(file);
}
if (sf) {
if (args[2] == "LANGUAGE") {
this->Makefile->AddDefinition(var, sf->GetOrDetermineLanguage());
return true;
}
const char* prop = nullptr;
if (!args[2].empty()) {
prop = sf->GetPropertyForUser(args[2]);

View File

@ -272,6 +272,13 @@ const char* cmSourceFile::GetPropertyForUser(const std::string& prop)
this->GetFullPath();
}
// Similarly, LANGUAGE can be determined by the file extension
// if it is requested by the user.
if (prop == propLANGUAGE) {
// The c_str pointer is valid until `this->Language` is modified.
return this->GetOrDetermineLanguage().c_str();
}
// Perform the normal property lookup.
return this->GetProperty(prop);
}

View File

@ -1,19 +1,22 @@
cmake_minimum_required(VERSION 3.0)
cmake_minimum_required(VERSION 3.1)
project(SourceFileProperty C)
set(sources)
if (EXISTS icasetest.c)
# If a file exists by this name, use it.
set_source_files_properties(icasetest.c
PROPERTIES
COMPILE_FLAGS -DNEEDED_TO_WORK)
COMPILE_DEFINITIONS NEEDED_TO_WORK)
else ()
# Work on case-sensitive file systems as well.
set_source_files_properties(main.c
PROPERTIES
COMPILE_FLAGS -DNO_NEED_TO_CALL)
COMPILE_DEFINITIONS NO_NEED_TO_CALL)
endif ()
list(APPEND sources ICaseTest.c)
add_executable(SourceFileProperty main.c ${sources})
add_executable(SourceFileProperty main.c)
target_sources(SourceFileProperty PRIVATE ICaseTest.c)
get_property(LANG SOURCE ICaseTest.c PROPERTY LANGUAGE)
if (NOT "${LANG}" STREQUAL "C")
message(FATAL_ERROR "Bad language for file ICaseTest.c")
endif ()