Browse Source

Move to use the same FetchDependencies as we have in PMS

This can give us faster deps downloading since they can be locally
cached.
Tobias Hieta 9 years ago
parent
commit
fc9737dbac

+ 12 - 3
CMakeModules/DependencyConfiguration.cmake

@@ -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)

+ 111 - 94
CMakeModules/FetchDependencies.cmake

@@ -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)

+ 6 - 1
CMakeModules/QtConfiguration.cmake

@@ -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})