Browse Source

CMake: download and install web-client as plain files

Instead of using the Qt resource system we want to read the files
directly from disk instead. So we redid how resources are copied and
installed.
Tobias Hieta 7 years ago
parent
commit
4ebf69d3b5
3 changed files with 38 additions and 48 deletions
  1. 3 0
      CMakeLists.txt
  2. 25 29
      CMakeModules/WebClientResources.cmake
  3. 10 19
      src/CMakeLists.txt

+ 3 - 0
CMakeLists.txt

@@ -43,6 +43,7 @@ include(utils)
 include(CompilerFlags)
 include(DependencyConfiguration)
 include(QtConfiguration)
+include(WebClientResources)
 include(VersionConfiguration)
 include(NameConfiguration)
 include(PlayerConfiguration)
@@ -51,6 +52,8 @@ include(FindBreakpad)
 include(BreakpadSymbols)
 include(ClangTidy)
 
+add_definitions(-DQS_LOG_LINE_NUMBERS -DQS_LOG_SEPARATE_THREAD)
+
 if(APPLE)
   include(AppleConfiguration)
 elseif(WIN32)

+ 25 - 29
CMakeModules/WebClientResources.cmake

@@ -1,41 +1,37 @@
 include(WebClientVariables)
 
+set(WEB_CLIENT_VERSTR "${WEB_CLIENT_VERSION_NR}-${WEB_CLIENT_VERSION}")
 option(SKIP_WEB_CLIENT "Skip downloading the web client" OFF)
+set(WEB_CLIENT_FILE plex-web-client-pmp-${WEB_CLIENT_VERSTR}.tbz2)
+set(WEB_CLIENT_DIR ${CMAKE_BINARY_DIR}/web-client-${WEB_CLIENT_VERSTR})
+message(STATUS "web-client version: ${WEB_CLIENT_VERSTR}")
 
 if(NOT SKIP_WEB_CLIENT)
-  set(WEB_CLIENT_CPP plex-web-client-konvergo-${WEB_CLIENT_VERSION}.cpp)
-  set(WEB_CLIENT_URL https://nightlies.plex.tv/directdl/plex-dependencies/plex-web-client-plexmediaplayer/${WEB_CLIENT_BUILDNR}/plex-web-client-konvergo-${WEB_CLIENT_VERSION}.cpp.tbz2)
+  set(WEB_CLIENT_URL https://nightlies.plex.tv/directdl/plex-dependencies/plex-web-client-plexmediaplayer/${WEB_CLIENT_BUILDNR}/${WEB_CLIENT_FILE})
+  if(NOT EXISTS ${WEB_CLIENT_DIR}/index.html)
+    if(NOT EXISTS ${CMAKE_BINARY_DIR}/${WEB_CLIENT_FILE})
+      safe_download(${WEB_CLIENT_URL}
+        FILENAME ${CMAKE_BINARY_DIR}/${WEB_CLIENT_FILE}
+        SHOW_PROGRESS
+        SHA1 ${WEB_CLIENT_HASH}
+      )
+    endif()
 
-  message(STATUS "web-client version: ${WEB_CLIENT_VERSION}")
-
-  set(LOCAL_WEB_CLIENT false)
-  if(EXISTS "${CMAKE_CURRENT_BINARY_DIR}/${WEB_CLIENT_CPP}.tbz2")
-    file(SHA1 "${CMAKE_CURRENT_BINARY_DIR}/${WEB_CLIENT_CPP}.tbz2" EXISTING_HASH)
-    if("${EXISTING_HASH}" STREQUAL "${WEB_CLIENT_HASH}")
-        set(LOCAL_WEB_CLIENT true)
-    endif("${EXISTING_HASH}" STREQUAL "${WEB_CLIENT_HASH}")
-  endif(EXISTS "${CMAKE_CURRENT_BINARY_DIR}/${WEB_CLIENT_CPP}.tbz2")
-
-  if(NOT LOCAL_WEB_CLIENT)
-    file(
-      DOWNLOAD ${WEB_CLIENT_URL} ${CMAKE_CURRENT_BINARY_DIR}/${WEB_CLIENT_CPP}.tbz2
-      EXPECTED_HASH SHA1=${WEB_CLIENT_HASH}
-      INACTIVITY_TIMEOUT 20
-      TIMEOUT 3600
-      SHOW_PROGRESS
+    file(MAKE_DIRECTORY ${WEB_CLIENT_DIR})
+    message(STATUS "Unpacking web-client...")
+    execute_process(
+      COMMAND ${CMAKE_COMMAND} -E tar -xjf ${CMAKE_BINARY_DIR}/${WEB_CLIENT_FILE}
+      WORKING_DIRECTORY ${WEB_CLIENT_DIR}
+      RESULT_VARIABLE STATUS
     )
-  endif(NOT LOCAL_WEB_CLIENT)
 
-  add_custom_command(
-    OUTPUT ${WEB_CLIENT_CPP}
-    COMMAND ${CMAKE_COMMAND} -E tar xjf ${CMAKE_CURRENT_BINARY_DIR}/${WEB_CLIENT_CPP}.tbz2
-    DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/${WEB_CLIENT_CPP}.tbz2
-    COMMENT "Unpacking: ${WEB_CLIENT_CPP}.tbz2"
-  )
+    if(NOT STATUS EQUAL 0)
+      message(FATAL_ERROR "Failed to unpack web-client")
+      file(REMOVE_RECURSE ${CMAKE_BINARY_DIR}/${WEB_CLIENT_FILE})
+    endif()
 
-  add_custom_target(UnpackWebClientResource
-    DEPENDS ${WEB_CLIENT_CPP}
-  )
+    file(REMOVE ${CMAKE_BINARY_DIR}/${WEB_CLIENT_FILE})
+  endif()
 else(NOT SKIP_WEB_CLIENT)
   message(WARNING "Skipping web-client, you will not a functioning end product")
 endif(NOT SKIP_WEB_CLIENT)

+ 10 - 19
src/CMakeLists.txt

@@ -86,25 +86,23 @@ add_custom_command(OUTPUT qrc_resources.cpp
 )
 set_source_files_properties(qrc_resources.cpp PROPERTIES GENERATED TRUE)
 
-# handle Web-Client resource
-include(WebClientResources)
-
-set_source_files_properties(${PROJECT_SOURCE_DIR}/bundle/osx/Plex.icns PROPERTIES MACOSX_PACKAGE_LOCATION Resources)
-list(APPEND RESOURCE_FILES qrc_resources.cpp ${WEB_CLIENT_CPP})
+list(APPEND RESOURCE_FILES qrc_resources.cpp)
 
 if(APPLE)
-  list(APPEND RESOURCE_FILES ${PROJECT_SOURCE_DIR}/bundle/osx/Plex.icns)
   if(HAVE_UPDATER)
-    list(APPEND RESOURCE_FILES ${UPDATER_PATH})
-    set_source_files_properties(${UPDATER_PATH} PROPERTIES MACOSX_PACKAGE_LOCATION Resources)
+    add_resources(TARGET ${MAIN_TARGET} SOURCES ${UPDATER_PATH} DEST Resources)
   endif(HAVE_UPDATER)
 
   set_source_files_properties(
-    /HIDRemote/HIDRemote.h
     input/apple/HIDRemote/HIDRemote.m
     PROPERTIES COMPILE_FLAGS -fno-objc-arc
   )
 
+  # copy the qt.conf so that when running PMP from a debugger it finds the plugins and QML files
+  if(EXISTS ${QTROOT}/bin/qt.conf)
+    add_resources(TARGET ${MAIN_TARGET} SOURCES ${QTROOT}/bin/qt.conf DEST Resources)
+  endif()
+
   set(PLISTPARSER plistparser)
 endif()
 
@@ -118,6 +116,8 @@ if(WIN32)
   list(APPEND RESOURCE_FILES ${CMAKE_SOURCE_DIR}/bundle/win/iconres.rc)
 endif()
 
+add_resources(TARGET ${MAIN_TARGET} SOURCES ${WEB_CLIENT_DIR} DEST Resources/web-client-${WEB_CLIENT_VERSTR})
+
 get_property(BUNDLED_FILES GLOBAL PROPERTY CONFIG_BUNDLED_FILES)
 add_executable(${MAIN_TARGET} WIN32 MACOSX_BUNDLE ${SOURCES} ${BUNDLED_FILES} ${RESOURCE_FILES})
 std_target_properties(${MAIN_TARGET})
@@ -126,18 +126,9 @@ set_target_properties(${MAIN_TARGET} PROPERTIES
   INSTALL_RPATH "${QTROOT}/lib"
   OUTPUT_NAME ${MAIN_NAME}
 )
-
+copy_resources(${MAIN_TARGET})
 clang_tidy(${MAIN_TARGET})
 
-# copy the qt.conf so that when running PMP from a debugger it finds the plugins and QML files
-if(APPLE AND EXISTS ${QTROOT}/bin/qt.conf)
-  add_custom_command(
-    TARGET ${MAIN_TARGET} POST_BUILD
-    COMMAND ${CMAKE_COMMAND} -E copy ${QTROOT}/bin/qt.conf $<TARGET_FILE_DIR:${MAIN_TARGET}>/../Resources
-    COMMENT "Copy qt.conf to main bundle"
-  )
-endif()
-
 target_link_libraries(${MAIN_TARGET}
   shared
   qhttp