diff Resources/CMake/DownloadPackage.cmake @ 2:67a6978503b7

fixing Windows build
author Jodogne@Laptop
date Thu, 19 Jul 2012 22:33:27 +0200
parents 3959d33612cc
children 29bfa3095207
line wrap: on
line diff
--- a/Resources/CMake/DownloadPackage.cmake	Thu Jul 19 14:32:22 2012 +0200
+++ b/Resources/CMake/DownloadPackage.cmake	Thu Jul 19 22:33:27 2012 +0200
@@ -1,61 +1,101 @@
-macro(GetUrlFilename TargetVariable Url)
-  string(REGEX REPLACE "^.*/" "" ${TargetVariable} "${Url}")
-endmacro()
-
-
-macro(GetUrlExtension TargetVariable Url)
-  #string(REGEX REPLACE "^.*/[^.]*\\." "" TMP "${Url}")
-  string(REGEX REPLACE "^.*\\." "" TMP "${Url}")
-  string(TOLOWER "${TMP}" "${TargetVariable}")
-endmacro()
-
-
-macro(DownloadPackage Url TargetDirectory PreloadedVariable UncompressArguments)
-  if (NOT IS_DIRECTORY "${TargetDirectory}")
-    GetUrlFilename(TMP_FILENAME "${Url}")
-    if ("${PreloadedVariable}" STREQUAL "")
-      set(TMP_PATH "${CMAKE_SOURCE_DIR}/ThirdPartyDownloads/${TMP_FILENAME}")
-      if (NOT EXISTS "${TMP_PATH}")
-        message("Downloading ${Url}")
-        file(DOWNLOAD "${Url}" "${TMP_PATH}" SHOW_PROGRESS)
-      else()
-        message("Already downloaded ${Url}")
-      endif()
-    else()
-      message("Using preloaded archive ${PreloadedVariable} for ${Url}")
-      set(TMP_PATH "${PreloadedVariable}")
-    endif()
-
-    GetUrlExtension(TMP_EXTENSION "${Url}")
-    #message(${TMP_EXTENSION})
-
-    if ("${CMAKE_HOST_SYSTEM_NAME}" STREQUAL "Linux")
-      if ("${TMP_EXTENSION}" STREQUAL "zip")
-        execute_process(
-          COMMAND sh -c "unzip ${TMP_PATH} ${UncompressArguments}"
-          WORKING_DIRECTORY ${CMAKE_BINARY_DIR}
-          )
-      elseif (("${TMP_EXTENSION}" STREQUAL "gz") OR ("${TMP_EXTENSION}" STREQUAL "tgz"))
-        #message("tar xvfz ${TMP_PATH} ${UncompressArguments}")
-        execute_process(
-          COMMAND sh -c "tar xvfz ${TMP_PATH} ${UncompressArguments}"
-          WORKING_DIRECTORY ${CMAKE_BINARY_DIR}
-          )
-      elseif ("${TMP_EXTENSION}" STREQUAL "bz2")
-        execute_process(
-          COMMAND sh -c "tar xvfj ${TMP_PATH} ${UncompressArguments}"
-          WORKING_DIRECTORY ${CMAKE_BINARY_DIR}
-          )
-      else()
-        message(FATAL_ERROR "Unknown package format.")
-      endif()
-    else()
-      message(FATAL_ERROR "Support your platform here")
-    endif()
-
-    if (NOT IS_DIRECTORY "${TargetDirectory}")
-      message(FATAL_ERROR "The package was not uncompressed at the proper location. Check the CMake instructions.")
-    endif()
-  endif()
-endmacro()
-
+macro(GetUrlFilename TargetVariable Url)
+  string(REGEX REPLACE "^.*/" "" ${TargetVariable} "${Url}")
+endmacro()
+
+
+macro(GetUrlExtension TargetVariable Url)
+  #string(REGEX REPLACE "^.*/[^.]*\\." "" TMP "${Url}")
+  string(REGEX REPLACE "^.*\\." "" TMP "${Url}")
+  string(TOLOWER "${TMP}" "${TargetVariable}")
+endmacro()
+
+
+macro(DownloadPackage Url TargetDirectory PreloadedVariable UncompressArguments)
+  if (NOT IS_DIRECTORY "${TargetDirectory}")
+    GetUrlFilename(TMP_FILENAME "${Url}")
+    if ("${PreloadedVariable}" STREQUAL "")
+      set(TMP_PATH "${CMAKE_SOURCE_DIR}/ThirdPartyDownloads/${TMP_FILENAME}")
+      if (NOT EXISTS "${TMP_PATH}")
+        message("Downloading ${Url}")
+        file(DOWNLOAD "${Url}" "${TMP_PATH}" SHOW_PROGRESS)
+      else()
+        message("Already downloaded ${Url}")
+      endif()
+    else()
+      message("Using preloaded archive ${PreloadedVariable} for ${Url}")
+      set(TMP_PATH "${PreloadedVariable}")
+    endif()
+
+    GetUrlExtension(TMP_EXTENSION "${Url}")
+    #message(${TMP_EXTENSION})
+
+    if ("${CMAKE_HOST_SYSTEM_NAME}" STREQUAL "Linux")
+      if ("${TMP_EXTENSION}" STREQUAL "zip")
+        execute_process(
+          COMMAND sh -c "unzip ${TMP_PATH} ${UncompressArguments}"
+          WORKING_DIRECTORY ${CMAKE_BINARY_DIR}
+          )
+      elseif (("${TMP_EXTENSION}" STREQUAL "gz") OR ("${TMP_EXTENSION}" STREQUAL "tgz"))
+        #message("tar xvfz ${TMP_PATH} ${UncompressArguments}")
+        execute_process(
+          COMMAND sh -c "tar xvfz ${TMP_PATH} ${UncompressArguments}"
+          WORKING_DIRECTORY ${CMAKE_BINARY_DIR}
+          )
+      elseif ("${TMP_EXTENSION}" STREQUAL "bz2")
+        execute_process(
+          COMMAND sh -c "tar xvfj ${TMP_PATH} ${UncompressArguments}"
+          WORKING_DIRECTORY ${CMAKE_BINARY_DIR}
+          )
+      else()
+        message(FATAL_ERROR "Unknown package format.")
+      endif()
+
+    elseif ("${CMAKE_HOST_SYSTEM_NAME}" STREQUAL "Windows")
+      FIND_PROGRAM(ZIP_EXECUTABLE 7z PATHS "$ENV{ProgramFiles}/7-Zip") 
+
+      if (("${TMP_EXTENSION}" STREQUAL "gz") OR ("${TMP_EXTENSION}" STREQUAL "tgz"))
+        execute_process(
+          COMMAND ${ZIP_EXECUTABLE} e ${TMP_PATH}
+          WORKING_DIRECTORY ${CMAKE_BINARY_DIR}
+          )
+        set(ARGS ${UncompressArguments})
+        SEPARATE_ARGUMENTS(ARGS)
+        list(LENGTH ARGS TMP_LENGTH)
+
+        if ("${TMP_EXTENSION}" STREQUAL "tgz")
+          string(REGEX REPLACE ".tgz$" ".tar" TMP_FILENAME2 "${TMP_FILENAME}")
+        else()
+          string(REGEX REPLACE ".gz$" "" TMP_FILENAME2 "${TMP_FILENAME}")
+        endif()
+
+        if (TMP_LENGTH EQUAL 0)
+          execute_process(
+            COMMAND ${ZIP_EXECUTABLE} x ${TMP_FILENAME2}
+            WORKING_DIRECTORY ${CMAKE_BINARY_DIR}
+            )
+        else()
+          foreach(SUBDIR ${ARGS})
+            execute_process(
+              COMMAND ${ZIP_EXECUTABLE} x "-i!${SUBDIR}" "${TMP_FILENAME2}"
+              WORKING_DIRECTORY ${CMAKE_BINARY_DIR}
+              )
+          endforeach()
+        endif()
+      elseif ("${TMP_EXTENSION}" STREQUAL "zip")
+        execute_process(
+          COMMAND ${ZIP_EXECUTABLE} x ${TMP_PATH}
+          WORKING_DIRECTORY ${CMAKE_BINARY_DIR}
+          )
+      else()
+        message(FATAL_ERROR "Support your platform here")
+      endif()
+    else()
+      message(FATAL_ERROR "Support your platform here")
+    endif()
+
+    if (NOT IS_DIRECTORY "${TargetDirectory}")
+      message(FATAL_ERROR "The package was not uncompressed at the proper location. Check the CMake instructions.")
+    endif()
+  endif()
+endmacro()
+