|
@@ -1,6 +1,6 @@
|
|
|
include(CMakeParseArguments)
|
|
|
|
|
|
-set(DEPENDENCY_CACHE_DIR ${CMAKE_SOURCE_DIR}/Dependencies CACHE PATH "Cache downloaded deps in this directory")
|
|
|
+set(DEPENDENCY_CACHE_DIR ${CMAKE_BINARY_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)
|
|
@@ -9,38 +9,48 @@ elseif(WIN32)
|
|
|
set(OS "windows-i386")
|
|
|
set(ARCHSTR "windows-i386")
|
|
|
elseif(UNIX)
|
|
|
- set(ARCHSTR ${PLEX_BUILD_TYPE})
|
|
|
+ set(ARCHSTR ${PLEX_BUILD_TARGET})
|
|
|
endif(APPLE)
|
|
|
|
|
|
|
|
|
function(get_content_of_url)
|
|
|
set(ARGS URL CONTENT_VAR FILENAME)
|
|
|
- cmake_parse_arguments(CU "" "${ARGS}" "" ${ARGN})
|
|
|
+ cmake_parse_arguments(CU "ALWAYS" "${ARGS}" "" ${ARGN})
|
|
|
if(NOT DEFINED CU_FILENAME)
|
|
|
get_filename_component(CU_FILENAME ${CU_URL} NAME)
|
|
|
endif(NOT DEFINED CU_FILENAME)
|
|
|
|
|
|
- if(NOT EXISTS ${DEPENDENCY_CACHE_DIR}/${CU_FILENAME})
|
|
|
+ if(EXISTS ${DEPENDENCY_CACHE_DIR}/${CU_FILENAME})
|
|
|
+ if(CU_ALWAYS)
|
|
|
+ file(REMOVE ${DEPENDENCY_CACHE_DIR}/${CU_FILENAME})
|
|
|
+ else()
|
|
|
+ file(STRINGS ${DEPENDENCY_CACHE_DIR}/${CU_FILENAME} CVAR LIMIT_COUNT 1)
|
|
|
+ endif()
|
|
|
+ endif()
|
|
|
+
|
|
|
+ if(NOT CVAR)
|
|
|
message(STATUS "Downloading ${CU_URL} to ${CU_FILENAME}...")
|
|
|
|
|
|
file(
|
|
|
DOWNLOAD ${CU_URL} ${DEPENDENCY_CACHE_DIR}/${CU_FILENAME}
|
|
|
STATUS DL_STATUS
|
|
|
+ LOG DL_LOG
|
|
|
)
|
|
|
|
|
|
list(GET DL_STATUS 0 SUCCESS)
|
|
|
if(NOT SUCCESS EQUAL 0)
|
|
|
- message(FATAL_ERROR "Failed to download ${CU_URL}")
|
|
|
+ list(GET DL_STATUS 1 ERROR_MESSAGE)
|
|
|
+ file(REMOVE ${DEPENDENCY_CACHE_DIR}/${CU_FILENAME})
|
|
|
+ message(FATAL_ERROR "Failed to download ${CU_URL}: ${ERROR_MESSAGE}\n${DL_LOG}")
|
|
|
endif(NOT SUCCESS EQUAL 0)
|
|
|
|
|
|
- endif(NOT EXISTS ${DEPENDENCY_CACHE_DIR}/${CU_FILENAME})
|
|
|
-
|
|
|
- file(STRINGS ${DEPENDENCY_CACHE_DIR}/${CU_FILENAME} CVAR LIMIT_COUNT 1)
|
|
|
+ get_content_of_url(URL ${CU_URL} CONTENT_VAR CVAR FILENAME ${CU_FILENAME})
|
|
|
+ endif()
|
|
|
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)
|
|
|
+ set(ARGS DIRECTORY BUILD_NUMBER ARTIFACTNAME VARIANT DEPHASH ARCHSTR DYLIB_SCRIPT_PATH)
|
|
|
cmake_parse_arguments(DD "" "${ARGS}" "" ${ARGN})
|
|
|
|
|
|
if(NOT DEFINED DD_VARIANT)
|
|
@@ -59,11 +69,19 @@ function(download_deps DD_NAME)
|
|
|
set(DD_ARCHSTR ${ARCHSTR})
|
|
|
endif(NOT DEFINED DD_ARCHSTR)
|
|
|
|
|
|
+ if(DD_BUILD_NUMBER STREQUAL latest)
|
|
|
+ set(DD_ALWAYS_DOWNLOAD ALWAYS)
|
|
|
+ endif()
|
|
|
+
|
|
|
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})
|
|
|
+ get_content_of_url(URL ${BASE_URL}/hash.txt CONTENT_VAR DEP_HASH FILENAME ${HASH_FILENAME} ${DD_ALWAYS_DOWNLOAD})
|
|
|
+
|
|
|
+ if(NOT DEP_HASH)
|
|
|
+ message(FATAL_ERROR "Failed to get hash for dependencies. Abort abort abort...")
|
|
|
+ endif()
|
|
|
|
|
|
message(STATUS "Dependency hash is: ${DEP_HASH}")
|
|
|
|
|
@@ -76,45 +94,59 @@ function(download_deps DD_NAME)
|
|
|
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})
|
|
|
+ if(NOT EXISTS ${DEP_DIR}/${DEP_DIRNAME}/_FINISHED)
|
|
|
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
|
|
|
+ LOG DEP_LOG
|
|
|
+ EXPECTED_HASH SHA1=${CONTENT_HASH}
|
|
|
)
|
|
|
|
|
|
list(GET DEP_STATUS 0 DEP_SUCCESS)
|
|
|
|
|
|
if(NOT DEP_SUCCESS EQUAL 0)
|
|
|
- message(FATAL_ERROR "Failed to download ${DEP_URL}")
|
|
|
+ list(GET DEP_STATUS 1 DEP_ERROR)
|
|
|
+ message(FATAL_ERROR "Failed to download ${DEP_URL}: ${DEP_ERROR}\n${DEP_LOG}")
|
|
|
endif()
|
|
|
|
|
|
message(STATUS "Unpacking ${DEP_FILENAME}...")
|
|
|
execute_process(
|
|
|
COMMAND ${CMAKE_COMMAND} -E tar xjf ${DEPENDENCY_CACHE_DIR}/${DEP_FILENAME}
|
|
|
WORKING_DIRECTORY ${DEP_DIR}
|
|
|
+ RESULT_VARIABLE UNPACK_RESULT
|
|
|
)
|
|
|
- if(APPLE)
|
|
|
+
|
|
|
+ if(NOT UNPACK_RESULT EQUAL 0)
|
|
|
+ message(FATAL_ERROR "Failed to unpack deps..")
|
|
|
+ endif(NOT UNPACK_RESULT EQUAL 0)
|
|
|
+
|
|
|
+ if(APPLE AND DD_DYLIB_SCRIPT_PATH)
|
|
|
message(STATUS "Fixing install library names...${DEP_DIR}/${DEP_DIRNAME}")
|
|
|
execute_process(
|
|
|
- COMMAND ${PROJECT_SOURCE_DIR}/scripts/fix-install-names.py ${DEP_DIR}/${DEP_DIRNAME}
|
|
|
+ COMMAND ${DD_DYLIB_SCRIPT_PATH} ${DEP_DIR}/${DEP_DIRNAME}
|
|
|
WORKING_DIRECTORY ${DEP_DIR}
|
|
|
+ RESULT_VARIABLE DYLIB_RESULT
|
|
|
)
|
|
|
+ if(NOT DYLIB_RESULT EQUAL 0)
|
|
|
+ message(FATAL_ERROR "Failed to run ${DD_DYLIB_SCRIPT_PATH}")
|
|
|
+ endif()
|
|
|
message(STATUS "Done")
|
|
|
- endif(APPLE)
|
|
|
+ endif()
|
|
|
|
|
|
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)
|
|
|
|
|
|
- else(NOT EXISTS ${DEP_DIR}/${DEP_DIRNAME})
|
|
|
+ file(WRITE "${DEP_DIR}/${DEP_DIRNAME}/_FINISHED" "Dummy")
|
|
|
+ else(NOT EXISTS ${DEP_DIR}/${DEP_DIRNAME}/_FINISHED)
|
|
|
message(STATUS "Directory ${DEP_DIR}/${DEP_DIRNAME} already exists, remove it to redownload")
|
|
|
- endif(NOT EXISTS ${DEP_DIR}/${DEP_DIRNAME})
|
|
|
+ endif(NOT EXISTS ${DEP_DIR}/${DEP_DIRNAME}/_FINISHED)
|
|
|
endfunction(download_deps DD_NAME)
|