include_directories(${CMAKE_CURRENT_BINARY_DIR})

if ("${PROJECT_SOURCE_DIR}" STREQUAL "${ANOTHER_PROJ_SOURCE_DIR}")
  set(BUILD_SHARED_LIBS 1)

  # Construct a source file outside the tree whose full path is close to
  # the path length limit.  This will cause the full path to the object
  # file in the build tree to exceed the maximum path length which will
  # test cmLocalGenerator::CreateSafeUniqueObjectFileName.
  get_filename_component(DEEPDIR
    ${OutOfSource_BINARY_DIR}/../OutOfSourceDeep/deeper ABSOLUTE)

  # Test giving the generator a custom limit.
  set(CMAKE_OBJECT_PATH_MAX 220)

  # Use a separate variable for computation.
  set(MAXPATH "${CMAKE_OBJECT_PATH_MAX}")

  # 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|10)")
    math(EXPR MAXPATH "${MAXPATH} - 46")
  endif()

  # Ninja imposes a maximum path component count of 30.  Permit more
  # path components in the source path.
  if(${CMAKE_GENERATOR} MATCHES "Ninja")
    math(EXPR MAXPATH "${MAXPATH} - 44")
  endif()

  # 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)
    string(LENGTH "${DEEPDIR}" DEEPDIR_LEN)
  endwhile()
  set(DEEPSRC ${DEEPDIR}/simple.cxx)
  string(LENGTH "${DEEPSRC}" DEEPSRC_LEN)
  configure_file(simple.cxx.in ${DEEPSRC} COPYONLY)

  # Watcom WMake seems to have problems with long command lines.  Just
  # disable this part of the test until it is resolved.
  if(${CMAKE_GENERATOR} MATCHES "Watcom WMake")
    set(DEEPSRC "")
    add_definitions(-DNO_DEEPSRC)
  endif()

  add_library(testlib testlib.cxx)
  add_executable (simple simple.cxx ../simple.cxx ${DEEPSRC})
  target_link_libraries(simple testlib outlib)
endif ()

# test getting a definition from a subdir
set (WEASELS SIZZLING)

get_directory_property(incDirs INCLUDE_DIRECTORIES)
if(NOT incDirs)
   message(FATAL_ERROR "get_directory_property(INCLUDE_DIRECTORIES) returned empty list")
endif()
