Move to use the same FetchDependencies as we have in PMS

This can give us faster deps downloading since they can be locally
cached.
This commit is contained in:
Tobias Hieta 2016-01-19 09:49:00 +01:00
parent 7d0b1dcc8a
commit fc9737dbac
3 changed files with 122 additions and 91 deletions

View File

@ -4,13 +4,22 @@ option(DISABLE_BUNDLED_DEPS "Disable the bundled deps on certain platforms" OFF)
include(FetchDependencies)
if(APPLE AND NOT DISABLE_BUNDLED_DEPS)
download_deps("plexmediaplayer-dependencies" dir DEPS_HASH)
download_deps(
"plexmediaplayer-dependencies"
ARTIFACTNAME konvergo-depends
DIRECTORY dir
)
message("dependencies are: ${dir}")
set(DEFAULT_ROOT ${dir})
endif(APPLE AND NOT DISABLE_BUNDLED_DEPS)
if(WIN32)
download_deps("plexmediaplayer-windows-dependencies" dir DEPS_HASH)
download_deps(
"plexmediaplayer-windows-dependencies"
DIRECTORY dir
ARTIFACTNAME konvergo-depends-windows
ARCHSTR mingw32-x86_64
)
message("dependencies are: ${dir}")
set(DEFAULT_ROOT "${dir}")
endif(WIN32)
@ -37,4 +46,4 @@ if(WIN32)
SHOW_PROGRESS
EXPECTED_HASH SHA1=d3b4f70d6542fa42c8edd2b9b93fd0916bf20f07
TLS_VERIFY OFF)
endif(WIN32)
endif(WIN32)

View File

@ -1,103 +1,120 @@
set(DEP_DIR ${CMAKE_BINARY_DIR}/dependencies)
include(CMakeParseArguments)
set(DEPENDENCY_CACHE_DIR ${CMAKE_SOURCE_DIR}/Dependencies CACHE PATH "Cache downloaded deps in this directory")
set(DEPENDENCY_UNTAR_DIR ${CMAKE_BINARY_DIR}/dependencies CACHE PATH "Where to untar deps")
if(APPLE)
set(OS "darwin")
set(ARCHSTR "darwin-x86_64")
elseif(WIN32)
set(OS "windows")
set(OS "windows-i386")
set(ARCHSTR "windows-i386")
elseif(UNIX)
set(OS "linux")
endif()
set(ARCHSTR ${PLEX_BUILD_TYPE})
endif(APPLE)
# note that hardcoding the ARCH here is not correct.
set(ARCHSTR "${OS}-x86_64")
function(download_deps depname dirpath dephash)
file(MAKE_DIRECTORY ${DEP_DIR})
function(get_content_of_url)
set(ARGS URL CONTENT_VAR FILENAME)
cmake_parse_arguments(CU "" "${ARGS}" "" ${ARGN})
if(NOT DEFINED CU_FILENAME)
get_filename_component(CU_FILENAME ${CU_URL} NAME)
endif(NOT DEFINED CU_FILENAME)
message(STATUS "Downloading ${depname}.hash.txt...")
file(
DOWNLOAD "https://nightlies.plex.tv/directdl/plex-dependencies/${depname}/latest/hash.txt" ${DEP_DIR}/${depname}-hash.txt
STATUS HASH_STATUS
)
list(GET HASH_STATUS 0 SUCCESS)
if(NOT EXISTS ${DEPENDENCY_CACHE_DIR}/${CU_FILENAME})
message(STATUS "Downloading ${CU_URL} to ${CU_FILENAME}...")
if(SUCCESS EQUAL 0)
file(STRINGS ${DEP_DIR}/${depname}-hash.txt DEP_HASH LIMIT_COUNT 1)
file(
DOWNLOAD ${CU_URL} ${DEPENDENCY_CACHE_DIR}/${CU_FILENAME}
STATUS DL_STATUS
)
if(depname STREQUAL plexmediaplayer-qt)
set(DEP_DIRNAME "konvergo-qt-${ARCHSTR}-release-${DEP_HASH}")
elseif(depname STREQUAL plexmediaplayer-dependencies)
set(DEP_DIRNAME "konvergo-depends-${ARCHSTR}-release-${DEP_HASH}")
elseif(depname STREQUAL plexmediaplayer-windows-dependencies)
set(ARCHSTR "mingw32-x86_64")
set(DEP_DIRNAME "konvergo-depends-windows-${ARCHSTR}-release-${DEP_HASH}")
else()
set(DEP_DIRNAME "${depname}-${ARCHSTR}-release-${DEP_HASH}")
list(GET DL_STATUS 0 SUCCESS)
if(NOT SUCCESS EQUAL 0)
message(FATAL_ERROR "Failed to download ${CU_URL}")
endif(NOT SUCCESS EQUAL 0)
endif(NOT EXISTS ${DEPENDENCY_CACHE_DIR}/${CU_FILENAME})
file(STRINGS ${DEPENDENCY_CACHE_DIR}/${CU_FILENAME} CVAR LIMIT_COUNT 1)
set(${CU_CONTENT_VAR} ${CVAR} PARENT_SCOPE)
endfunction(get_content_of_url)
function(download_deps DD_NAME)
set(ARGS DIRECTORY BUILD_NUMBER ARTIFACTNAME VARIANT DEPHASH ARCHSTR)
cmake_parse_arguments(DD "" "${ARGS}" "" ${ARGN})
if(NOT DEFINED DD_VARIANT)
set(DD_VARIANT "release")
endif(NOT DEFINED DD_VARIANT)
if(NOT DEFINED DD_ARTIFACTNAME)
set(DD_ARTIFACTNAME ${DD_NAME})
endif(NOT DEFINED DD_ARTIFACTNAME)
if(NOT DEFINED DD_BUILD_NUMBER)
set(DD_BUILD_NUMBER "latest")
endif(NOT DEFINED DD_BUILD_NUMBER)
if(NOT DEFINED DD_ARCHSTR)
set(DD_ARCHSTR ${ARCHSTR})
endif(NOT DEFINED DD_ARCHSTR)
set(BASE_URL "https://nightlies.plex.tv/directdl/plex-dependencies/${DD_NAME}/${DD_BUILD_NUMBER}")
set(DEP_DIR ${DEPENDENCY_UNTAR_DIR}/${DD_ARCHSTR}-${DD_NAME}/${DD_BUILD_NUMBER}/)
set(HASH_FILENAME ${DD_NAME}-${DD_BUILD_NUMBER}-hash.txt)
get_content_of_url(URL ${BASE_URL}/hash.txt CONTENT_VAR DEP_HASH FILENAME ${HASH_FILENAME})
message(STATUS "Dependency hash is: ${DEP_HASH}")
set(DEP_DIRNAME "${DD_ARTIFACTNAME}-${DD_ARCHSTR}-${DD_VARIANT}-${DEP_HASH}")
set(DEP_FILENAME ${DEP_DIRNAME}.tbz2)
set(${DD_DIRECTORY} ${DEP_DIR}/${DEP_DIRNAME} PARENT_SCOPE)
set(${DD_DEP_HASH} ${DEP_HASH} PARENT_SCOPE)
set(DEP_URL "${BASE_URL}/${DEP_FILENAME}")
get_content_of_url(URL ${DEP_URL}.sha.txt CONTENT_VAR CONTENT_HASH)
if(NOT EXISTS ${DEP_DIR}/${DEP_DIRNAME})
message(STATUS "Clearing out old dependencies ...")
execute_process(COMMAND ${CMAKE_COMMAND} -E remove_directory ${DEPENDENCY_UNTAR_DIR}/${DD_ARCHSTR}-${DD_NAME})
file(MAKE_DIRECTORY ${DEP_DIR})
message(STATUS "Downloading ${DEP_FILENAME}...")
file(
DOWNLOAD ${DEP_URL} ${DEPENDENCY_CACHE_DIR}/${DEP_FILENAME}
SHOW_PROGRESS
STATUS DEP_STATUS
)
list(GET DEP_STATUS 0 DEP_SUCCESS)
if(NOT DEP_SUCCESS EQUAL 0)
message(FATAL_ERROR "Failed to download ${DEP_URL}")
endif()
set(DEP_FILENAME ${DEP_DIRNAME}.tbz2)
set(DEP_URL "https://nightlies.plex.tv/directdl/plex-dependencies/${depname}/latest/${DEP_FILENAME}")
message(STATUS "Unpacking ${DEP_FILENAME}...")
execute_process(
COMMAND ${CMAKE_COMMAND} -E tar xjf ${DEPENDENCY_CACHE_DIR}/${DEP_FILENAME}
WORKING_DIRECTORY ${DEP_DIR}
)
if(APPLE)
message(STATUS "Fixing install library names...")
execute_process(
COMMAND ${PROJECT_SOURCE_DIR}/scripts/darwin/fix-install-names.py ${DEP_DIR}/${DEP_DIRNAME}
WORKING_DIRECTORY ${DEP_DIR}
)
message(STATUS "Done")
endif(APPLE)
set(${dirpath} ${DEP_DIR}/${DEP_DIRNAME} PARENT_SCOPE)
set(${dephash} ${DEP_HASH} PARENT_SCOPE)
if(EXISTS ${DEP_DIR}/${DEP_DIRNAME}/etc)
message(STATUS "Removing etc in dependency bundle")
file(REMOVE_RECURSE ${DEP_DIR}/${DEP_DIRNAME}/etc)
endif(EXISTS ${DEP_DIR}/${DEP_DIRNAME}/etc)
if(NOT EXISTS ${DEP_DIR}/${DEP_DIRNAME})
message(STATUS "Downloading ${DEP_FILENAME}.sha.txt...")
file(DOWNLOAD ${DEP_URL}.sha.txt ${DEP_DIR}/${DEP_FILENAME}.sha.txt STATUS SHA_STATUS)
list(GET SHA_STATUS 0 SHASUCCESS)
if(SHASUCCESS EQUAL 0)
file(STRINGS ${DEP_DIR}/${DEP_FILENAME}.sha.txt CONTENT_HASH_RAW LIMIT_COUNT 1)
string(SUBSTRING ${CONTENT_HASH_RAW} 0 40 CONTENT_HASH)
message(STATUS "Downloading ${DEP_FILENAME}...")
file(
DOWNLOAD ${DEP_URL} ${DEP_DIR}/${DEP_FILENAME}
EXPECTED_HASH SHA1=${CONTENT_HASH}
SHOW_PROGRESS
STATUS DEP_STATUS
)
list(GET DEP_STATUS 0 DEP_SUCCESS)
if(NOT DEP_SUCCESS EQUAL 0)
message(FATAL_ERROR "Failed to download ${DEP_URL}")
endif()
if(NOT EXISTS ${DEP_DIR}/${DEP_DIRNAME})
message(STATUS "Unpacking ${DEP_FILENAME}...")
execute_process(
COMMAND ${CMAKE_COMMAND} -E tar xjf ${DEP_DIR}/${DEP_FILENAME}
WORKING_DIRECTORY ${DEP_DIR}
)
if(APPLE)
message(STATUS "Fixing install library names...")
execute_process(
COMMAND ${PROJECT_SOURCE_DIR}/scripts/fix-install-names.py ${DEP_DIR}/${DEP_DIRNAME}
WORKING_DIRECTORY ${DEP_DIR}
)
message(STATUS "Done")
endif(APPLE)
if(WIN32 AND EXISTS ${DEP_DIR}/${DEP_DIRNAME}/bin/mpv-1.def)
message(STATUS "Fixing mpv.lib...")
execute_process(
COMMAND LIB /def:bin\\mpv-1.def /out:lib\\mpv.lib /MACHINE:X64
WORKING_DIRECTORY ${DEP_DIR}/${DEP_DIRNAME}
)
endif(WIN32 AND EXISTS ${DEP_DIR}/${DEP_DIRNAME}/bin/mpv-1.def)
endif()
else(SHASUCCESS EQUAL 0)
list(GET SHA_STATUS 1 SHAERROR)
message(FATAL_ERROR "Failed to download ${DEP_FILENAME}.sha.txt error: ${SHAERROR}")
endif(SHASUCCESS EQUAL 0)
else(NOT EXISTS ${DEP_DIR}/${DEP_DIRNAME})
message(STATUS "Directory ${DEP_DIR}/${DEP_DIRNAME} already exists, remove it to redownload")
endif(NOT EXISTS ${DEP_DIR}/${DEP_DIRNAME})
else(SUCCESS EQUAL 0)
list(GET HASH_STATUS 1 HASHERROR)
message(FATAL_ERROR "Failed to download ${depname}.hash.txt error: ${HASHERROR}")
endif(SUCCESS EQUAL 0)
endfunction(download_deps depname)
endfunction(download_deps DD_NAME)

View File

@ -1,7 +1,12 @@
include(FetchDependencies)
if(NOT IS_DIRECTORY ${QTROOT})
download_deps("plexmediaplayer-qt" dir QT_DEPS_HASH)
download_deps(
"plexmediaplayer-qt"
DIRECTORY dir
DEPHASH QT_DEPS_HASH
ARTIFACTNAME konvergo-qt
)
set(QTROOT ${dir})
endif()
list(APPEND CMAKE_FIND_ROOT_PATH ${QTROOT})