BUG: Do not remove the source file extension when computing an object file name. This addresses bug #6169. If CMAKE_BACKWARDS_COMPATIBILITY is 2.4 or lower maintain the old behavior so that existing build trees and old project releases are not affected.
This commit is contained in:
parent
f872c10b7e
commit
3efc6e40cb
|
@ -2753,12 +2753,15 @@ cmLocalGenerator
|
||||||
// extension.
|
// extension.
|
||||||
if(!source.GetPropertyAsBool("KEEP_EXTENSION"))
|
if(!source.GetPropertyAsBool("KEEP_EXTENSION"))
|
||||||
{
|
{
|
||||||
// Remove the original extension.
|
// Remove the original extension for CMake 2.4 compatibility.
|
||||||
|
if(this->NeedBackwardsCompatibility(2, 4))
|
||||||
|
{
|
||||||
std::string::size_type dot_pos = objectName.rfind(".");
|
std::string::size_type dot_pos = objectName.rfind(".");
|
||||||
if(dot_pos != std::string::npos)
|
if(dot_pos != std::string::npos)
|
||||||
{
|
{
|
||||||
objectName = objectName.substr(0, dot_pos);
|
objectName = objectName.substr(0, dot_pos);
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// Store the new extension.
|
// Store the new extension.
|
||||||
objectName +=
|
objectName +=
|
||||||
|
|
|
@ -18,37 +18,26 @@ TRY_COMPILE(EXTERNAL_OBJECT_BUILT
|
||||||
external
|
external
|
||||||
OUTPUT_VARIABLE OUTPUT
|
OUTPUT_VARIABLE OUTPUT
|
||||||
)
|
)
|
||||||
SET(EXTERNAL_OBJECT_NAME "external_object${CMAKE_CXX_OUTPUT_EXTENSION}")
|
|
||||||
IF(EXTERNAL_OBJECT_BUILT)
|
IF(EXTERNAL_OBJECT_BUILT)
|
||||||
MESSAGE(
|
MESSAGE(
|
||||||
"Building ${EXTERNAL_OBJECT_NAME} succeeded with the following output:\n"
|
"Building external_object.cxx succeeded with the following output:\n"
|
||||||
"[${OUTPUT}]"
|
"[${OUTPUT}]"
|
||||||
)
|
)
|
||||||
ELSE(EXTERNAL_OBJECT_BUILT)
|
ELSE(EXTERNAL_OBJECT_BUILT)
|
||||||
MESSAGE(FATAL_ERROR
|
MESSAGE(FATAL_ERROR
|
||||||
"Building ${EXTERNAL_OBJECT_NAME} failed with the following output:\n"
|
"Building external_object.cxx failed with the following output:\n"
|
||||||
"[${OUTPUT}]"
|
"[${OUTPUT}]"
|
||||||
)
|
)
|
||||||
ENDIF(EXTERNAL_OBJECT_BUILT)
|
ENDIF(EXTERNAL_OBJECT_BUILT)
|
||||||
|
|
||||||
# Find the external object file.
|
# Find the external object file.
|
||||||
SET(BASE ${ExternalOBJ_BINARY_DIR}/Object)
|
SET(DIR ${ExternalOBJ_BINARY_DIR}/Object)
|
||||||
SET(EXTERNAL_OBJECT)
|
|
||||||
FOREACH(dir external.dir . ${CMAKE_CONFIGURATION_TYPES})
|
|
||||||
IF(NOT EXTERNAL_OBJECT)
|
|
||||||
IF(EXISTS ${BASE}/${dir}/${EXTERNAL_OBJECT_NAME})
|
|
||||||
SET(EXTERNAL_OBJECT ${BASE}/${dir}/${EXTERNAL_OBJECT_NAME})
|
|
||||||
ENDIF(EXISTS ${BASE}/${dir}/${EXTERNAL_OBJECT_NAME})
|
|
||||||
ENDIF(NOT EXTERNAL_OBJECT)
|
|
||||||
ENDFOREACH(dir)
|
|
||||||
IF(NOT EXTERNAL_OBJECT)
|
|
||||||
FILE(GLOB_RECURSE EXTERNAL_OBJECT
|
FILE(GLOB_RECURSE EXTERNAL_OBJECT
|
||||||
"${ExternalOBJ_BINARY_DIR}/Object/${EXTERNAL_OBJECT_NAME}")
|
"${DIR}/external_object*${CMAKE_CXX_OUTPUT_EXTENSION}")
|
||||||
ENDIF(NOT EXTERNAL_OBJECT)
|
|
||||||
IF(EXTERNAL_OBJECT)
|
IF(EXTERNAL_OBJECT)
|
||||||
MESSAGE("Found \"${EXTERNAL_OBJECT}\".")
|
MESSAGE("Found \"${EXTERNAL_OBJECT}\".")
|
||||||
ELSE(EXTERNAL_OBJECT)
|
ELSE(EXTERNAL_OBJECT)
|
||||||
MESSAGE(FATAL_ERROR "Could not find ${EXTERNAL_OBJECT_NAME}.")
|
MESSAGE(FATAL_ERROR "Could not find external object.")
|
||||||
ENDIF(EXTERNAL_OBJECT)
|
ENDIF(EXTERNAL_OBJECT)
|
||||||
|
|
||||||
# Test creation of external objects by custom commands.
|
# Test creation of external objects by custom commands.
|
||||||
|
|
|
@ -6,7 +6,7 @@ ADD_EXECUTABLE(toclean toclean.cxx)
|
||||||
# List some build-time-generated files.
|
# List some build-time-generated files.
|
||||||
GET_TARGET_PROPERTY(TOCLEAN_FILES toclean LOCATION)
|
GET_TARGET_PROPERTY(TOCLEAN_FILES toclean LOCATION)
|
||||||
SET(TOCLEAN_FILES ${TOCLEAN_FILES}
|
SET(TOCLEAN_FILES ${TOCLEAN_FILES}
|
||||||
"${ToClean_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/toclean.dir/toclean${CMAKE_CXX_OUTPUT_EXTENSION}")
|
"${ToClean_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/toclean.dir/toclean.cxx${CMAKE_CXX_OUTPUT_EXTENSION}")
|
||||||
|
|
||||||
# Create a file that must be registered for cleaning.
|
# Create a file that must be registered for cleaning.
|
||||||
FILE(WRITE "${ToClean_BINARY_DIR}/Registered.txt"
|
FILE(WRITE "${ToClean_BINARY_DIR}/Registered.txt"
|
||||||
|
|
Loading…
Reference in New Issue