|
@@ -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()
|
|
|
-
|
|
|
-# 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})
|
|
|
-
|
|
|
- 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(SUCCESS EQUAL 0)
|
|
|
- file(STRINGS ${DEP_DIR}/${depname}-hash.txt DEP_HASH LIMIT_COUNT 1)
|
|
|
-
|
|
|
- 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}")
|
|
|
+ set(ARCHSTR ${PLEX_BUILD_TYPE})
|
|
|
+endif(APPLE)
|
|
|
+
|
|
|
+
|
|
|
+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)
|
|
|
+
|
|
|
+ if(NOT EXISTS ${DEPENDENCY_CACHE_DIR}/${CU_FILENAME})
|
|
|
+ message(STATUS "Downloading ${CU_URL} to ${CU_FILENAME}...")
|
|
|
+
|
|
|
+ file(
|
|
|
+ DOWNLOAD ${CU_URL} ${DEPENDENCY_CACHE_DIR}/${CU_FILENAME}
|
|
|
+ STATUS DL_STATUS
|
|
|
+ )
|
|
|
+
|
|
|
+ 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}")
|
|
|
-
|
|
|
- set(${dirpath} ${DEP_DIR}/${DEP_DIRNAME} PARENT_SCOPE)
|
|
|
- set(${dephash} ${DEP_HASH} PARENT_SCOPE)
|
|
|
-
|
|
|
- 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)
|
|
|
+ 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)
|
|
|
+
|
|
|
+ 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})
|
|
|
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)
|