From 3efc6e40cb6ae2f3c73a6a1b9d483ca12f9861d6 Mon Sep 17 00:00:00 2001 From: Brad King Date: Fri, 28 Dec 2007 23:07:26 -0500 Subject: 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. --- Source/cmLocalGenerator.cxx | 11 +++++++---- Tests/ExternalOBJ/CMakeLists.txt | 23 ++++++----------------- Tests/MakeClean/ToClean/CMakeLists.txt | 2 +- 3 files changed, 14 insertions(+), 22 deletions(-) diff --git a/Source/cmLocalGenerator.cxx b/Source/cmLocalGenerator.cxx index 78db8ed..d22a2ef 100644 --- a/Source/cmLocalGenerator.cxx +++ b/Source/cmLocalGenerator.cxx @@ -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. diff --git a/Tests/ExternalOBJ/CMakeLists.txt b/Tests/ExternalOBJ/CMakeLists.txt index 5ad2a5a..1db0515 100644 --- a/Tests/ExternalOBJ/CMakeLists.txt +++ b/Tests/ExternalOBJ/CMakeLists.txt @@ -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. diff --git a/Tests/MakeClean/ToClean/CMakeLists.txt b/Tests/MakeClean/ToClean/CMakeLists.txt index 05ea15c..bc51876 100644 --- a/Tests/MakeClean/ToClean/CMakeLists.txt +++ b/Tests/MakeClean/ToClean/CMakeLists.txt @@ -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" -- cgit v0.12