downloader.cmake 4.45 KB
Newer Older
1 2 3 4 5 6 7 8 9 10
#
# The script downloads ICV package
#
# On return this will define:
# OPENCV_ICV_PATH - path to unpacked downloaded package
#

function(_icv_downloader)
  # Define actual ICV versions
  if(APPLE)
11 12
    set(OPENCV_ICV_PACKAGE_NAME "ippicv_macosx_20141027.tgz")
    set(OPENCV_ICV_PACKAGE_HASH "9662fe0694a67e59491a0dcc82fa26e0")
13
    set(OPENCV_ICV_PLATFORM "macosx")
Alexander Alekhin's avatar
Alexander Alekhin committed
14
    set(OPENCV_ICV_PACKAGE_SUBDIR "/ippicv_osx")
15 16 17 18
  elseif(UNIX)
    if(ANDROID AND (NOT ANDROID_ABI STREQUAL x86))
      return()
    endif()
19 20
    set(OPENCV_ICV_PACKAGE_NAME "ippicv_linux_20141027.tgz")
    set(OPENCV_ICV_PACKAGE_HASH "8b449a536a2157bcad08a2b9f266828b")
21
    set(OPENCV_ICV_PLATFORM "linux")
Alexander Alekhin's avatar
Alexander Alekhin committed
22
    set(OPENCV_ICV_PACKAGE_SUBDIR "/ippicv_lnx")
23
  elseif(WIN32 AND NOT ARM)
24 25
    set(OPENCV_ICV_PACKAGE_NAME "ippicv_windows_20141027.zip")
    set(OPENCV_ICV_PACKAGE_HASH "b59f865d1ba16e8c84124e19d78eec57")
26
    set(OPENCV_ICV_PLATFORM "windows")
Alexander Alekhin's avatar
Alexander Alekhin committed
27
    set(OPENCV_ICV_PACKAGE_SUBDIR "/ippicv_win")
28 29 30 31
  else()
    return() # Not supported
  endif()

Alexander Alekhin's avatar
Alexander Alekhin committed
32 33
  set(OPENCV_ICV_UNPACK_PATH "${CMAKE_CURRENT_LIST_DIR}/unpack")
  set(OPENCV_ICV_PATH "${OPENCV_ICV_UNPACK_PATH}${OPENCV_ICV_PACKAGE_SUBDIR}")
34 35 36 37 38 39 40 41

  if(DEFINED OPENCV_ICV_PACKAGE_DOWNLOADED
       AND OPENCV_ICV_PACKAGE_DOWNLOADED STREQUAL OPENCV_ICV_PACKAGE_HASH
       AND EXISTS ${OPENCV_ICV_PATH})
    # Package has been downloaded and checked by the previous build
    set(OPENCV_ICV_PATH "${OPENCV_ICV_PATH}" PARENT_SCOPE)
    return()
  else()
Alexander Alekhin's avatar
Alexander Alekhin committed
42 43 44
    if(EXISTS ${OPENCV_ICV_UNPACK_PATH})
      message(STATUS "ICV: Removing previous unpacked package: ${OPENCV_ICV_UNPACK_PATH}")
      file(REMOVE_RECURSE ${OPENCV_ICV_UNPACK_PATH})
45 46 47
    endif()
  endif()
  unset(OPENCV_ICV_PACKAGE_DOWNLOADED CACHE)
48

49 50 51 52 53 54 55 56 57 58
  set(OPENCV_ICV_PACKAGE_ARCHIVE "${CMAKE_CURRENT_LIST_DIR}/downloads/${OPENCV_ICV_PLATFORM}-${OPENCV_ICV_PACKAGE_HASH}/${OPENCV_ICV_PACKAGE_NAME}")
  get_filename_component(OPENCV_ICV_PACKAGE_ARCHIVE_DIR "${OPENCV_ICV_PACKAGE_ARCHIVE}" PATH)
  if(EXISTS "${OPENCV_ICV_PACKAGE_ARCHIVE}")
    file(MD5 "${OPENCV_ICV_PACKAGE_ARCHIVE}" archive_md5)
    if(NOT archive_md5 STREQUAL OPENCV_ICV_PACKAGE_HASH)
      message(WARNING "ICV: Local copy of ICV package has invalid MD5 hash: ${archive_md5} (expected: ${OPENCV_ICV_PACKAGE_HASH})")
      file(REMOVE "${OPENCV_ICV_PACKAGE_ARCHIVE}")
      file(REMOVE_RECURSE "${OPENCV_ICV_PACKAGE_ARCHIVE_DIR}")
    endif()
  endif()
59

60 61
  if(NOT EXISTS "${OPENCV_ICV_PACKAGE_ARCHIVE}")
    if(NOT DEFINED OPENCV_ICV_URL)
62 63 64 65
      if(DEFINED ENV{OPENCV_ICV_URL})
        set(OPENCV_ICV_URL $ENV{OPENCV_ICV_URL})
      else()
        set(OPENCV_ICV_URL "http://sourceforge.net/projects/opencvlibrary/files/3rdparty/ippicv")
66 67
      endif()
    endif()
68

69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84
    file(MAKE_DIRECTORY ${OPENCV_ICV_PACKAGE_ARCHIVE_DIR})
    message(STATUS "ICV: Downloading ${OPENCV_ICV_PACKAGE_NAME}...")
    file(DOWNLOAD "${OPENCV_ICV_URL}/${OPENCV_ICV_PACKAGE_NAME}" "${OPENCV_ICV_PACKAGE_ARCHIVE}"
         TIMEOUT 600 STATUS __status
         EXPECTED_MD5 ${OPENCV_ICV_PACKAGE_HASH})
    if(NOT __status EQUAL 0)
      message(FATAL_ERROR "ICV: Failed to download ICV package: ${OPENCV_ICV_PACKAGE_NAME}. Status=${__status}")
    else()
      # Don't remove this code, because EXPECTED_MD5 parameter doesn't fail "file(DOWNLOAD)" step
      # on wrong hash 
      file(MD5 "${OPENCV_ICV_PACKAGE_ARCHIVE}" archive_md5)
      if(NOT archive_md5 STREQUAL OPENCV_ICV_PACKAGE_HASH)
        message(FATAL_ERROR "ICV: Downloaded copy of ICV package has invalid MD5 hash: ${archive_md5} (expected: ${OPENCV_ICV_PACKAGE_HASH})")
      endif()
    endif()
  endif()
85

86
  ocv_assert(EXISTS "${OPENCV_ICV_PACKAGE_ARCHIVE}")
Alexander Alekhin's avatar
Alexander Alekhin committed
87 88 89
  ocv_assert(NOT EXISTS "${OPENCV_ICV_UNPACK_PATH}")
  file(MAKE_DIRECTORY ${OPENCV_ICV_UNPACK_PATH})
  ocv_assert(EXISTS "${OPENCV_ICV_UNPACK_PATH}")
90

Alexander Alekhin's avatar
Alexander Alekhin committed
91
  message(STATUS "ICV: Unpacking ${OPENCV_ICV_PACKAGE_NAME} to ${OPENCV_ICV_UNPACK_PATH}...")
92
  execute_process(COMMAND ${CMAKE_COMMAND} -E tar xz "${OPENCV_ICV_PACKAGE_ARCHIVE}"
Alexander Alekhin's avatar
Alexander Alekhin committed
93
                  WORKING_DIRECTORY "${OPENCV_ICV_UNPACK_PATH}"
94 95 96
                  RESULT_VARIABLE __result)

  if(NOT __result EQUAL 0)
Alexander Alekhin's avatar
Alexander Alekhin committed
97
    message(FATAL_ERROR "ICV: Failed to unpack ICV package from ${OPENCV_ICV_PACKAGE_ARCHIVE} to ${OPENCV_ICV_UNPACK_PATH} with error ${__result}")
98 99
  endif()

Alexander Alekhin's avatar
Alexander Alekhin committed
100 101
  ocv_assert(EXISTS "${OPENCV_ICV_PATH}")

102
  set(OPENCV_ICV_PACKAGE_DOWNLOADED "${OPENCV_ICV_PACKAGE_HASH}" CACHE INTERNAL "ICV package hash")
103

104 105 106 107 108
  message(STATUS "ICV: Package successfully downloaded")
  set(OPENCV_ICV_PATH "${OPENCV_ICV_PATH}" PARENT_SCOPE)
endfunction()

_icv_downloader()