From 212e4f9ccaddf80d8bc9f8a09dc48bd4270c0578 Mon Sep 17 00:00:00 2001 From: elisa-lj11 Date: Tue, 5 Jul 2016 10:38:35 -0700 Subject: [PATCH] making quazip work --- cmake/externals/quazip/CMakeLists.txt | 53 ++++++++++++------- cmake/modules/FindQuaZip.cmake | 46 ++++++++-------- interface/src/Application.cpp | 2 +- interface/src/Application.h | 2 + libraries/script-engine/CMakeLists.txt | 2 + .../src/FileScriptingInterface.cpp | 35 +++++++----- .../src/FileScriptingInterface.h | 12 ++--- 7 files changed, 87 insertions(+), 65 deletions(-) diff --git a/cmake/externals/quazip/CMakeLists.txt b/cmake/externals/quazip/CMakeLists.txt index 5795e6bc5d..413a07efec 100644 --- a/cmake/externals/quazip/CMakeLists.txt +++ b/cmake/externals/quazip/CMakeLists.txt @@ -1,37 +1,52 @@ set(EXTERNAL_NAME quazip) - -if (ANDROID) - set(ANDROID_CMAKE_ARGS "-DCMAKE_TOOLCHAIN_FILE=${CMAKE_TOOLCHAIN_FILE}" "-DANDROID_NATIVE_API_LEVEL=19") -endif () +string(TOUPPER ${EXTERNAL_NAME} EXTERNAL_NAME_UPPER) +cmake_policy(SET CMP0046 OLD) include(ExternalProject) + +if (WIN32) + # windows shell does not like backslashes expanded on the command line, + # so convert all backslashes in the QT path to forward slashes + string(REPLACE \\ / QT_CMAKE_PREFIX_PATH $ENV{QT_CMAKE_PREFIX_PATH}) +elseif ($ENV{QT_CMAKE_PREFIX_PATH}) + set(QT_CMAKE_PREFIX_PATH $ENV{QT_CMAKE_PREFIX_PATH}) +endif () + ExternalProject_Add( ${EXTERNAL_NAME} - URL http://headache.hungry.com/~seth/hifi/quazip-0.7.1.tar.gz - URL_MD5 e4a14ad41b9a1ce494f8dd9add56429e - # BUILD_COMMAND ${MAKE_COMMAND} tbb_os=macos - # CONFIGURE_COMMAND "" - # INSTALL_COMMAND ${PLATFORM_BUILD_COMMAND} - CMAKE_ARGS ${ANDROID_CMAKE_ARGS} -DCMAKE_INSTALL_PREFIX:PATH= + URL http://s3-us-west-1.amazonaws.com/hifi-production/dependencies/quazip-0.6.2.zip + URL_MD5 514851970f1a14d815bdc3ad6267af4d BINARY_DIR ${EXTERNAL_PROJECT_PREFIX}/build + CMAKE_ARGS -DCMAKE_INSTALL_PREFIX:PATH= -DCMAKE_PREFIX_PATH=${QT_CMAKE_PREFIX_PATH} -DCMAKE_INSTALL_NAME_DIR:PATH=/lib -DZLIB_ROOT=${ZLIB_ROOT} LOG_DOWNLOAD 1 LOG_CONFIGURE 1 LOG_BUILD 1 ) +add_dependencies(quazip zlib) + # Hide this external target (for ide users) -set_target_properties(${EXTERNAL_NAME} PROPERTIES FOLDER "hidden/externals") +set_target_properties(${EXTERNAL_NAME} PROPERTIES + FOLDER "hidden/externals" + INSTALL_NAME_DIR ${INSTALL_DIR}/lib + BUILD_WITH_INSTALL_RPATH True) ExternalProject_Get_Property(${EXTERNAL_NAME} INSTALL_DIR) +set(${EXTERNAL_NAME_UPPER}_INCLUDE_DIR ${INSTALL_DIR}/include CACHE PATH "List of QuaZip include directories") +set(${EXTERNAL_NAME_UPPER}_INCLUDE_DIRS ${${EXTERNAL_NAME_UPPER}_INCLUDE_DIR} CACHE PATH "List of QuaZip include directories") +set(${EXTERNAL_NAME_UPPER}_DLL_PATH ${INSTALL_DIR}/lib CACHE FILEPATH "Location of QuaZip DLL") -string(TOUPPER ${EXTERNAL_NAME} EXTERNAL_NAME_UPPER) - -if (WIN32) - set(${EXTERNAL_NAME_UPPER}_LIBRARY_DEBUG ${INSTALL_DIR}/lib/Debug/QUAZIP_LIB.lib CACHE FILEPATH "Path to QuaZip debug library") - set(${EXTERNAL_NAME_UPPER}_LIBRARY_RELEASE ${INSTALL_DIR}/lib/Release/QUAZIP_LIB.lib CACHE FILEPATH "Path to QuaZip release library") +if (APPLE) + set(${EXTERNAL_NAME_UPPER}_LIBRARY_RELEASE ${INSTALL_DIR}/lib/libquazip.1.0.0.dylib CACHE FILEPATH "Location of QuaZip release library") +elseif (WIN32) + set(${EXTERNAL_NAME_UPPER}_LIBRARY_RELEASE ${INSTALL_DIR}/lib/quazip.lib CACHE FILEPATH "Location of QuaZip release library") else () - set(${EXTERNAL_NAME_UPPER}_LIBRARY_DEBUG "" CACHE FILEPATH "Path to QuaZip debug library") - set(${EXTERNAL_NAME_UPPER}_LIBRARY_RELEASE ${INSTALL_DIR}/lib/libquazip.so CACHE FILEPATH "Path to QuaZip release library") + set(${EXTERNAL_NAME_UPPER}_LIBRARY_RELEASE ${INSTALL_DIR}/lib/libquazip.so CACHE FILEPATH "Location of QuaZip release library") endif () -set(${EXTERNAL_NAME_UPPER}_INCLUDE_DIRS ${INSTALL_DIR}/include CACHE FILEPATH "Path to QuaZip include directory") \ No newline at end of file +include(SelectLibraryConfigurations) +select_library_configurations(${EXTERNAL_NAME_UPPER}) + +# Force selected libraries into the cache +set(${EXTERNAL_NAME_UPPER}_LIBRARY ${${EXTERNAL_NAME_UPPER}_LIBRARY} CACHE FILEPATH "Location of QuaZip libraries") +set(${EXTERNAL_NAME_UPPER}_LIBRARIES ${${EXTERNAL_NAME_UPPER}_LIBRARIES} CACHE FILEPATH "Location of QuaZip libraries") \ No newline at end of file diff --git a/cmake/modules/FindQuaZip.cmake b/cmake/modules/FindQuaZip.cmake index a9f53ec788..2b2a577919 100644 --- a/cmake/modules/FindQuaZip.cmake +++ b/cmake/modules/FindQuaZip.cmake @@ -1,33 +1,29 @@ # -# FindQuaZip.cmake -# -# Once done this will define -# -# QUAZIP_FOUND - system found QuaZip -# QUAZIP_INCLUDE_DIRS - the QuaZip include directory -# QUAZIP_LIBRARIES - link to this to use QuaZip -# -# Created on 2015-8-1 by Seth Alves -# Copyright 2015 High Fidelity, Inc. -# -# Distributed under the Apache License, Version 2.0. -# See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html +# FindQuaZip.h +# StackManagerQt/cmake/modules # +# Created by Mohammed Nafees. +# Copyright (c) 2014 High Fidelity. All rights reserved. +# + +# QUAZIP_FOUND - QuaZip library was found +# QUAZIP_INCLUDE_DIR - Path to QuaZip include dir +# QUAZIP_INCLUDE_DIRS - Path to QuaZip and zlib include dir (combined from QUAZIP_INCLUDE_DIR + ZLIB_INCLUDE_DIR) +# QUAZIP_LIBRARIES - List of QuaZip libraries +# QUAZIP_ZLIB_INCLUDE_DIR - The include dir of zlib headers include("${MACRO_DIR}/HifiLibrarySearchHints.cmake") hifi_library_search_hints("quazip") -find_path(QUAZIP_INCLUDE_DIRS quazip.h PATH_SUFFIXES include HINTS ${QUAZIP_SEARCH_DIRS}) +if (WIN32) + find_path(QUAZIP_INCLUDE_DIRS quazip.h PATH_SUFFIXES include/quazip HINTS ${QUAZIP_SEARCH_DIRS}) +elseif (APPLE) + find_path(QUAZIP_INCLUDE_DIRS quazip.h PATH_SUFFIXES include/quazip HINTS ${QUAZIP_SEARCH_DIRS}) +else () + find_path(QUAZIP_INCLUDE_DIRS quazip.h PATH_SUFFIXES quazip HINTS ${QUAZIP_SEARCH_DIRS}) +endif () -find_library(QUAZIP_LIBRARY_DEBUG NAMES QUAZIP QUAZIP_LIB PATH_SUFFIXES lib/Debug HINTS ${QUAZIP_SEARCH_DIRS}) -find_library(QUAZIP_LIBRARY_RELEASE NAMES QUAZIP QUAZIP_LIB PATH_SUFFIXES lib/Release lib HINTS ${QUAZIP_SEARCH_DIRS}) +include(FindPackageHandleStandardArgs) +find_package_handle_standard_args(QUAZIP DEFAULT_MSG QUAZIP_INCLUDE_DIRS) -include(SelectLibraryConfigurations) -select_library_configurations(QUAZIP) - -set(QUAZIP_LIBRARIES ${QUAZIP_LIBRARY}) - -find_package_handle_standard_args(QUAZIP "Could NOT find QuaZip, try to set the path to QuaZip root folder in the system variable QUAZIP_ROOT_DIR or create a directory quazip in HIFI_LIB_DIR and paste the necessary files there" - QUAZIP_INCLUDE_DIRS QUAZIP_LIBRARIES) - -mark_as_advanced(QUAZIP_INCLUDE_DIRS QUAZIP_LIBRARIES QUAZIP_SEARCH_DIRS) \ No newline at end of file +mark_as_advanced(QUAZIP_INCLUDE_DIRS QUAZIP_SEARCH_DIRS) \ No newline at end of file diff --git a/interface/src/Application.cpp b/interface/src/Application.cpp index 08788cb5bc..4be9a3c5c1 100644 --- a/interface/src/Application.cpp +++ b/interface/src/Application.cpp @@ -2016,7 +2016,7 @@ bool Application::importSVOFromURL(const QString& urlString) { } // attempt to start ZIP download project -bool Appplication::importZIPFromURL(const QString& urlString) { +bool Application::importZIPFromURL(const QString& urlString) { emit zipImportRequested(urlString); return true; } diff --git a/interface/src/Application.h b/interface/src/Application.h index 0af65f665f..d8f02f41b7 100644 --- a/interface/src/Application.h +++ b/interface/src/Application.h @@ -250,6 +250,7 @@ public: signals: void svoImportRequested(const QString& url); + void zipImportRequested(const QString& url); void fullAvatarURLChanged(const QString& newValue, const QString& modelName); @@ -385,6 +386,7 @@ private: bool importJSONFromURL(const QString& urlString); bool importSVOFromURL(const QString& urlString); + bool importZIPFromURL(const QString& urlString); bool nearbyEntitiesAreReadyForPhysics(); int processOctreeStats(ReceivedMessage& message, SharedNodePointer sendingNode); diff --git a/libraries/script-engine/CMakeLists.txt b/libraries/script-engine/CMakeLists.txt index 79fa7a1504..b484937ea5 100644 --- a/libraries/script-engine/CMakeLists.txt +++ b/libraries/script-engine/CMakeLists.txt @@ -1,6 +1,8 @@ set(TARGET_NAME script-engine) setup_hifi_library(Gui Network Script ScriptTools WebSockets Widgets) +target_zlib() + add_dependency_external_projects(quazip) find_package(QuaZip REQUIRED) target_include_directories(${TARGET_NAME} SYSTEM PUBLIC ${QUAZIP_INCLUDE_DIRS}) diff --git a/libraries/script-engine/src/FileScriptingInterface.cpp b/libraries/script-engine/src/FileScriptingInterface.cpp index 6e9652e134..017c3f83e1 100644 --- a/libraries/script-engine/src/FileScriptingInterface.cpp +++ b/libraries/script-engine/src/FileScriptingInterface.cpp @@ -11,17 +11,20 @@ #include #include +#include +#include #include #include #include +#include #include -#include +#include #include "ResourceManager.h" #include "FileScriptingInterface.h" -FileScriptingInterface::FileScriptingInterface(QObject* parent) { +FileScriptingInterface::FileScriptingInterface(QObject* parent) : QObject(parent) { // nothing for now } @@ -45,11 +48,11 @@ void FileScriptingInterface::unzipFile() { buffer.open(QIODevice::ReadOnly); QString dirName = dir.path(); - JICompress::extractDir(buffer, dirName); + JlCompress::extractDir(buffer, dirName); QFileInfoList files = dir.entryInfoList(); foreach (QFileInfo file, files) { - recursiveFileScan(file); + recursiveFileScan(file, &dirName); } @@ -89,22 +92,26 @@ void FileScriptingInterface::unzipFile() { } -void FileScriptingInterface::recursiveFileScan(QFileInfo file) { +void FileScriptingInterface::recursiveFileScan(QFileInfo file, QString* dirName) { if (!file.isDir()) { - qDebug() << "Regular file logged:" + file.fileName(); + qDebug() << "Regular file logged: " + file.fileName(); return; } + QFileInfoList files; + if (file.fileName().contains(".zip")) { - - } + JlCompress::extractDir(file); + qDebug() << "Extracting archive: " + file.fileName(); + } + files = file.entryInfoList(); - QFileInfoList files = file.entryInfoList(); - if (files.empty()) { + /*if (files.empty()) { files = JlCompress::getFileList(file.fileName()); - } - foreach (QFileInfo file, files) { - if (file.fileName().contains(".zip")) { + }*/ - } + foreach (QFileInfo file, files) { + qDebug() << "Looking into file: " + file.fileName(); + recursiveFileScan(file, &dirName); } + return; } diff --git a/libraries/script-engine/src/FileScriptingInterface.h b/libraries/script-engine/src/FileScriptingInterface.h index 89e3434382..cf965afa34 100644 --- a/libraries/script-engine/src/FileScriptingInterface.h +++ b/libraries/script-engine/src/FileScriptingInterface.h @@ -13,6 +13,7 @@ #define hifi_FileScriptingInterface_h #include +#include class FileScriptingInterface : public QObject { Q_OBJECT @@ -26,12 +27,11 @@ public slots: signals: void downloadZip(); +private: + //void downloadZip(); + //void unzipFile(); + void recursiveFileScan(QFileInfo file, QString* dirName); + }; -private: - void downloadZip(); - void unzipFile(); - - - #endif // hifi_FileScriptingInterface_h \ No newline at end of file