From 75a51cd065b7353f5008aa7a2c7dd10a377a641a Mon Sep 17 00:00:00 2001 From: Brad King Date: Tue, 20 Mar 2007 08:16:35 -0400 Subject: [PATCH] BUG: Work around VS8 conversion to a relative path for the long source name. It takes the nice full path we give it, converts to relative, and then repacks relative on top of the build directory resulting in a path longer than its own maxpath even though the original path given was short enough. Even VS6 dealt with it better. --- .../OutOfSource/OutOfSourceSubdir/CMakeLists.txt | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-) diff --git a/Tests/OutOfSource/OutOfSourceSubdir/CMakeLists.txt b/Tests/OutOfSource/OutOfSourceSubdir/CMakeLists.txt index 4daf42586..c5eb71e98 100644 --- a/Tests/OutOfSource/OutOfSourceSubdir/CMakeLists.txt +++ b/Tests/OutOfSource/OutOfSourceSubdir/CMakeLists.txt @@ -9,8 +9,20 @@ IF ("${PROJECT_SOURCE_DIR}" STREQUAL "${ANOTHER_PROJ_SOURCE_DIR}") # test cmLocalGenerator::CreateSafeUniqueObjectFileName. GET_FILENAME_COMPONENT(DEEPDIR ${OutOfSource_BINARY_DIR}/../OutOfSourceDeep/deeper ABSOLUTE) - # MAXPATH = 250 less 25 for /and/deeper/simple.cxx part and small safety - MATH(EXPR MAXPATH "250 - 25") + + # The maximum allowed path length on Windows is near this value. + SET(MAXPATH "250") + + # VS8 adds "OutOfSource/SubDir/OutOfSourceSubdir/../../../" to the + # path of the source file for no good reason. Reduce the length + # limit by 46 characters to account for it. It should still be long + # enough to require special object file name conversion. + IF(${CMAKE_GENERATOR} MATCHES "Visual Studio 8") + MATH(EXPR MAXPATH "${MAXPATH} - 46") + ENDIF(${CMAKE_GENERATOR} MATCHES "Visual Studio 8") + + # MAXPATH less 25 for last /and/deeper/simple.cxx part and small safety + MATH(EXPR MAXPATH "${MAXPATH} - 25") STRING(LENGTH "${DEEPDIR}" DEEPDIR_LEN) WHILE("${DEEPDIR_LEN}" LESS "${MAXPATH}") SET(DEEPDIR ${DEEPDIR}/and/deeper)