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,11 +2753,14 @@ cmLocalGenerator
|
|||
// extension.
|
||||
if(!source.GetPropertyAsBool("KEEP_EXTENSION"))
|
||||
{
|
||||
// Remove the original extension.
|
||||
std::string::size_type dot_pos = objectName.rfind(".");
|
||||
if(dot_pos != std::string::npos)
|
||||
// Remove the original extension for CMake 2.4 compatibility.
|
||||
if(this->NeedBackwardsCompatibility(2, 4))
|
||||
{
|
||||
objectName = objectName.substr(0, dot_pos);
|
||||
std::string::size_type dot_pos = objectName.rfind(".");
|
||||
if(dot_pos != std::string::npos)
|
||||
{
|
||||
objectName = objectName.substr(0, dot_pos);
|
||||
}
|
||||
}
|
||||
|
||||
// Store the new extension.
|
||||
|
|
|
@ -18,37 +18,26 @@ TRY_COMPILE(EXTERNAL_OBJECT_BUILT
|
|||
external
|
||||
OUTPUT_VARIABLE OUTPUT
|
||||
)
|
||||
SET(EXTERNAL_OBJECT_NAME "external_object${CMAKE_CXX_OUTPUT_EXTENSION}")
|
||||
IF(EXTERNAL_OBJECT_BUILT)
|
||||
MESSAGE(
|
||||
"Building ${EXTERNAL_OBJECT_NAME} succeeded with the following output:\n"
|
||||
"Building external_object.cxx succeeded with the following output:\n"
|
||||
"[${OUTPUT}]"
|
||||
)
|
||||
ELSE(EXTERNAL_OBJECT_BUILT)
|
||||
MESSAGE(FATAL_ERROR
|
||||
"Building ${EXTERNAL_OBJECT_NAME} failed with the following output:\n"
|
||||
"Building external_object.cxx failed with the following output:\n"
|
||||
"[${OUTPUT}]"
|
||||
)
|
||||
ENDIF(EXTERNAL_OBJECT_BUILT)
|
||||
|
||||
# Find the external object file.
|
||||
SET(BASE ${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
|
||||
"${ExternalOBJ_BINARY_DIR}/Object/${EXTERNAL_OBJECT_NAME}")
|
||||
ENDIF(NOT EXTERNAL_OBJECT)
|
||||
SET(DIR ${ExternalOBJ_BINARY_DIR}/Object)
|
||||
FILE(GLOB_RECURSE EXTERNAL_OBJECT
|
||||
"${DIR}/external_object*${CMAKE_CXX_OUTPUT_EXTENSION}")
|
||||
IF(EXTERNAL_OBJECT)
|
||||
MESSAGE("Found \"${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)
|
||||
|
||||
# Test creation of external objects by custom commands.
|
||||
|
|
|
@ -6,7 +6,7 @@ ADD_EXECUTABLE(toclean toclean.cxx)
|
|||
# List some build-time-generated files.
|
||||
GET_TARGET_PROPERTY(TOCLEAN_FILES toclean LOCATION)
|
||||
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.
|
||||
FILE(WRITE "${ToClean_BINARY_DIR}/Registered.txt"
|
||||
|
|
Loading…
Reference in New Issue