MACRO (BuildDependency arg_name arg_srcdir arg_workdir arg_installprefix arg_all_in_one)
  MESSAGE (STATUS "... Processing dependency ${arg_name}")
  MESSAGE (STATUS "... Copying ${arg_name}")
  MESSAGE (STATUS "... ... ${CMAKE_COMMAND} -E copy_directory ${arg_srcdir} ${arg_workdir}")
  EXECUTE_PROCESS(
    COMMAND "${CMAKE_COMMAND}" -E copy_directory "${arg_srcdir}" "${arg_workdir}"
    )
  IF (${arg_all_in_one})
    MESSAGE (STATUS "... Setting up ${arg_name}, generator ${CMAKE_GENERATOR}, build type ${CMAKE_BUILD_TYPE}, install prefix ${arg_installprefix}, ALL_IN_ONE mode")
    EXECUTE_PROCESS(
      COMMAND "${CMAKE_COMMAND}" -G "${CMAKE_GENERATOR}" . -DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE} -DCMAKE_INSTALL_PREFIX=${arg_installprefix} -DALL_IN_ONE=ON
      WORKING_DIRECTORY "${arg_workdir}"
      )
  ELSE ()
    MESSAGE (STATUS "... Setting up ${arg_name}, generator ${CMAKE_GENERATOR}, build type ${CMAKE_BUILD_TYPE}, install prefix ${arg_installprefix}")
    EXECUTE_PROCESS(
      COMMAND "${CMAKE_COMMAND}" -G "${CMAKE_GENERATOR}" . -DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE} -DCMAKE_INSTALL_PREFIX=${arg_installprefix}
      WORKING_DIRECTORY "${arg_workdir}"
      )
  ENDIF ()
  MESSAGE (STATUS "... Building and installing ${arg_name}")
  EXECUTE_PROCESS(
    COMMAND "${CMAKE_MAKE_PROGRAM}" install
    WORKING_DIRECTORY "${arg_workdir}"
    )
ENDMACRO ()