

if(UNIX  AND  "${CMAKE_GENERATOR}" MATCHES "Makefile")

  # Test whether the make is GNU make, and only add the test in this case,
  # since the configured makefile in this test uses $(shell ...), which
  # is AFAIK a GNU make extension. Alex
  execute_process(COMMAND ${CMAKE_MAKE_PROGRAM} -v
                  OUTPUT_VARIABLE makeVersionOutput
                  ERROR_QUIET
                  TIMEOUT 10)
  string(TOUPPER "${makeVersionOutput}" MAKE_VERSION_OUTPUT)
  if("${MAKE_VERSION_OUTPUT}" MATCHES ".*GNU MAKE.*")

    # build a library which we can search during the test
    add_library(foo STATIC foo.cpp)

    # configure a FindFoo.cmake so it knows where the library can be found
    configure_file(FindFoo.cmake.in ${CMAKE_CURRENT_BINARY_DIR}/FindFoo.cmake @ONLY)

    # now set up the test:
    if (NOT CMAKE_VERSION VERSION_LESS 2.8.12)
      file(GENERATE OUTPUT "${CMAKE_CURRENT_BINARY_DIR}/cmakeExecutable.mk"
        CONTENT "CMAKE = \"$<TARGET_FILE:cmake>\"\n"
      )
    else()
      get_target_property(cmakeLocation cmake LOCATION)
      file(WRITE "${CMAKE_CURRENT_BINARY_DIR}/cmakeExecutable.mk"
        "CMAKE = \"${cmakeLocation}\"\n"
      )
    endif()
    configure_file(${CMAKE_CURRENT_SOURCE_DIR}/Makefile.in ${CMAKE_CURRENT_BINARY_DIR}/ConfMakefile @ONLY)
    configure_file(${CMAKE_CURRENT_SOURCE_DIR}/main.cpp ${CMAKE_CURRENT_BINARY_DIR}/main.cpp COPYONLY)

    add_test(FindPackageModeMakefileTest ${CMAKE_MAKE_PROGRAM} -f ${CMAKE_CURRENT_BINARY_DIR}/ConfMakefile )

  endif()

endif()
