set(ALL_FILES_GLOB "*.dmg")

function(getPackageContent FILE RESULT_VAR)
  get_filename_component(path_ "${FILE}" DIRECTORY)
  file(REMOVE_RECURSE "${path_}/content")
  file(MAKE_DIRECTORY "${path_}/content")
  execute_process(COMMAND ${HDIUTIL_EXECUTABLE} attach -mountroot ${path_}/content -nobrowse ${FILE}
          RESULT_VARIABLE attach_result_
          ERROR_VARIABLE attach_error_
          OUTPUT_STRIP_TRAILING_WHITESPACE)

  if(attach_result_)
    message(FATAL_ERROR "Failed to attach DMG: '${attach_result_}';"
          " '${attach_error_}'.")
  endif()

  file(GLOB_RECURSE package_content_ LIST_DIRECTORIES true RELATIVE
      "${path_}/content" "${path_}/content/*")
  # Some versions of macOS have .Trashes, others do not.
  list(FILTER package_content_ EXCLUDE REGEX "/.Trashes$")
  set(${RESULT_VAR} "${package_content_}" PARENT_SCOPE)

  execute_process(COMMAND ${HDIUTIL_EXECUTABLE} detach ${path_}/content/volume-name
          RESULT_VARIABLE detach_result_
          ERROR_VARIABLE detach_error_
          OUTPUT_STRIP_TRAILING_WHITESPACE)

  if(detach_result_)
    message(FATAL_ERROR "Failed to detach DMG: '${detach_result_}';"
          " '${detach_error_}'.")
  endif()
endfunction()

function(getPackageNameGlobexpr NAME COMPONENT VERSION REVISION FILE_NO RESULT_VAR)
  if(COMPONENT)
    set(COMPONENT "-${COMPONENT}")
  endif()

  set(${RESULT_VAR} "${NAME}-${VERSION}-Darwin${COMPONENT}.dmg" PARENT_SCOPE)
endfunction()

function(getPackageContentList FILE RESULT_VAR)
  getPackageContent("${FILE}" package_content_)

  set(${RESULT_VAR} "${package_content_}" PARENT_SCOPE)
endfunction()

function(toExpectedContentList FILE_NO CONTENT_VAR)
  set(prefix_ "volume-name")
  list(TRANSFORM ${CONTENT_VAR} PREPEND "${prefix_}" OUTPUT_VARIABLE prepared_)
  list(APPEND prepared_ "${prefix_}")

  set(${CONTENT_VAR} "${prepared_}" PARENT_SCOPE)
endfunction()
