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:
Brad King 2007-12-28 23:07:26 -05:00
parent f872c10b7e
commit 3efc6e40cb
3 changed files with 14 additions and 22 deletions

View File

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

View File

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

View File

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