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.

This commit is contained in:
Brad King 2007-03-20 08:16:35 -04:00
parent 32984af6d1
commit 75a51cd065
1 changed files with 14 additions and 2 deletions

View File

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