From b3b7ee5268764177125aba6bfd2e214f9ccdd8b7 Mon Sep 17 00:00:00 2001 From: arkpar Date: Wed, 5 Aug 2015 14:34:56 +0200 Subject: [PATCH] fixed qt deployment for qt 5.5 --- alethzero/CMakeLists.txt | 15 ++++++- cmake/EthExecutableHelper.cmake | 2 +- cmake/scripts/macdeployfix.sh | 71 +++++++++++++++++++++++++++++++++ macdeployfix.sh | 45 --------------------- mix/CMakeLists.txt | 13 +++++- 5 files changed, 97 insertions(+), 49 deletions(-) create mode 100755 cmake/scripts/macdeployfix.sh delete mode 100755 macdeployfix.sh diff --git a/alethzero/CMakeLists.txt b/alethzero/CMakeLists.txt index 75576ecc1..e4f6c743f 100644 --- a/alethzero/CMakeLists.txt +++ b/alethzero/CMakeLists.txt @@ -20,8 +20,14 @@ include_directories(BEFORE ..) include_directories(${JSON_RPC_CPP_INCLUDE_DIRS}) include_directories(${Boost_INCLUDE_DIRS}) -find_package (Qt5WebEngine QUIET) -find_package (Qt5WebEngineWidgets QUIET) +find_package (Qt5WebEngine) +find_package (Qt5WebEngineWidgets) +if (APPLE) +# TODO: remove indirect dependencies once macdeployqt is fixed + find_package (Qt5WebEngineCore) + find_package (Qt5DBus) + find_package (Qt5PrintSupport) +endif() qt5_wrap_ui(ui_Main.h Main.ui) qt5_wrap_ui(ui_Connect.h Connect.ui) @@ -55,6 +61,11 @@ target_link_libraries(${EXECUTABLE} Qt5::Core) target_link_libraries(${EXECUTABLE} Qt5::Widgets) target_link_libraries(${EXECUTABLE} Qt5::WebEngine) target_link_libraries(${EXECUTABLE} Qt5::WebEngineWidgets) +if (APPLE) + target_link_libraries(${EXECUTABLE} Qt5::WebEngineCore) + target_link_libraries(${EXECUTABLE} Qt5::DBus) + target_link_libraries(${EXECUTABLE} Qt5::PrintSupport) +endif() target_link_libraries(${EXECUTABLE} webthree) target_link_libraries(${EXECUTABLE} ethereum) target_link_libraries(${EXECUTABLE} evm) diff --git a/cmake/EthExecutableHelper.cmake b/cmake/EthExecutableHelper.cmake index 43b85100b..40d4ae86a 100644 --- a/cmake/EthExecutableHelper.cmake +++ b/cmake/EthExecutableHelper.cmake @@ -95,7 +95,7 @@ macro(eth_install_executable EXECUTABLE) add_custom_command(TARGET ${EXECUTABLE} POST_BUILD COMMAND ${MACDEPLOYQT_APP} ${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_CFG_INTDIR}/${EXECUTABLE}.app -executable=${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_CFG_INTDIR}/${EXECUTABLE}.app/Contents/MacOS/${EXECUTABLE} ${eth_qml_dir} WORKING_DIRECTORY ${CMAKE_RUNTIME_OUTPUT_DIRECTORY} - COMMAND sh ${CMAKE_SOURCE_DIR}/macdeployfix.sh ${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_CFG_INTDIR}/${EXECUTABLE}.app/Contents + COMMAND sh ${CMAKE_SOURCE_DIR}/cmake/scripts/macdeployfix.sh ${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_CFG_INTDIR}/${EXECUTABLE}.app/Contents ) # This tool and next will inspect linked libraries in order to determine which dependencies are required diff --git a/cmake/scripts/macdeployfix.sh b/cmake/scripts/macdeployfix.sh new file mode 100755 index 000000000..8f60c321a --- /dev/null +++ b/cmake/scripts/macdeployfix.sh @@ -0,0 +1,71 @@ +#!/bin/bash + +# solves problem with macdeployqt on Qt 5.4 RC and Qt 5.5 +# http://qt-project.org/forums/viewthread/50118 + +BUILD_FOLDER_PATH=$1 +BUILD_QML_FOLDER_PATH="$BUILD_FOLDER_PATH/Resources/qml" +BUILD_PLUGINS_FOLDER_PATH="$BUILD_FOLDER_PATH/PlugIns" + +if [ -d ${BUILD_QML_FOLDER_PATH} ]; then + + declare -a BROKEN_FILES; + k=0; + for j in $(find ${BUILD_QML_FOLDER_PATH} -name *.dylib); do + BROKEN_FILES[${k}]=$j + + ((k=k+1)) + done + + + for i in "${BROKEN_FILES[@]}"; do + REPLACE_STRING="$BUILD_FOLDER_PATH/" + APP_CONTENT_FILE=${i//$REPLACE_STRING/""} + IFS='/' read -a array <<< "$APP_CONTENT_FILE" + LENGTH=${#array[@]} + LAST_ITEM_INDEX=$((LENGTH-1)) + FILE=${array[${LENGTH} - 1]} + + ORIGINE_PATH=$(find ${BUILD_PLUGINS_FOLDER_PATH} -name ${FILE}) + ORIGINE_PATH=${ORIGINE_PATH//$REPLACE_STRING/""} + s="" + for((l=0;l<${LAST_ITEM_INDEX};l++)) do + s=$s"../" + done + s=$s$ORIGINE_PATH + echo "s: $s" + + REMOVE_BROKEN_ALIAS=$(rm -rf $i) + RESULT=$(ln -s $s $i) + done +fi + +# replace framework links +declare -a BROKEN_FRAMEWORKS; +k=0; +BUILD_FRAMEWORKS_FOLDER_PATH="$BUILD_FOLDER_PATH/Frameworks" +for j in $(find ${BUILD_FRAMEWORKS_FOLDER_PATH} -name Qt*.framework); do + BROKEN_FRAMEWORKS[${k}]=$j + ((k=k+1)) +done +for i in "${BROKEN_FRAMEWORKS[@]}"; do + FRAMEWORK_FILE=$i/$(basename -s ".framework" $i) + otool -L $FRAMEWORK_FILE | grep -o /usr/.*Qt.*framework/\\w* | while read -a libs ; do + install_name_tool -change ${libs[0]} @loader_path/../../../`basename ${libs[0]}`.framework/`basename ${libs[0]}` $FRAMEWORK_FILE + done +done + +declare -a BROKEN_PLUGINS; +k=0; +BUILD_PLUGINS_FOLDER_PATH="$BUILD_FOLDER_PATH/PlugIns" +for j in $(find ${BUILD_PLUGINS_FOLDER_PATH} -name *.dylib); do + BROKEN_PLUGINS[${k}]=$j + ((k=k+1)) +done +for i in "${BROKEN_PLUGINS[@]}"; do + FRAMEWORK_FILE=$i + otool -L $FRAMEWORK_FILE | grep -o /usr/.*Qt.*framework/\\w* | while read -a libs ; do + install_name_tool -change ${libs[0]} @loader_path/../../Frameworks/`basename ${libs[0]}`.framework/`basename ${libs[0]}` $FRAMEWORK_FILE + done +done + diff --git a/macdeployfix.sh b/macdeployfix.sh deleted file mode 100755 index 9a6ce1ebc..000000000 --- a/macdeployfix.sh +++ /dev/null @@ -1,45 +0,0 @@ -#!/bin/bash - -# solves problem with macdeployqt on Qt 5.4 RC -# http://qt-project.org/forums/viewthread/50118 - -BUILD_FOLDER_PATH=$1 -BUILD_QML_FOLDER_PATH="$BUILD_FOLDER_PATH/Resources/qml" -BUILD_PLUGINS_FOLDER_PATH="$BUILD_FOLDER_PATH/PlugIns" - -if [ ! -d ${BUILD_QML_FOLDER_PATH} ]; then - # we are not using any qml files - # gracefully exit - exit 0 -fi - -declare -a BROKEN_FILES; -k=0; -for j in $(find ${BUILD_QML_FOLDER_PATH} -name *.dylib); do - BROKEN_FILES[${k}]=$j - - ((k=k+1)) -done - - -for i in "${BROKEN_FILES[@]}"; do - REPLACE_STRING="$BUILD_FOLDER_PATH/" - APP_CONTENT_FILE=${i//$REPLACE_STRING/""} - IFS='/' read -a array <<< "$APP_CONTENT_FILE" - LENGTH=${#array[@]} - LAST_ITEM_INDEX=$((LENGTH-1)) - FILE=${array[${LENGTH} - 1]} - - ORIGINE_PATH=$(find ${BUILD_PLUGINS_FOLDER_PATH} -name ${FILE}) - ORIGINE_PATH=${ORIGINE_PATH//$REPLACE_STRING/""} - s="" - for((l=0;l<${LAST_ITEM_INDEX};l++)) do - s=$s"../" - done - s=$s$ORIGINE_PATH - echo "s: $s" - - REMOVE_BROKEN_ALIAS=$(rm -rf $i) - RESULT=$(ln -s $s $i) -done - diff --git a/mix/CMakeLists.txt b/mix/CMakeLists.txt index c239edd47..44cd9c12a 100644 --- a/mix/CMakeLists.txt +++ b/mix/CMakeLists.txt @@ -20,7 +20,13 @@ if (("${CMAKE_CXX_COMPILER_ID}" MATCHES "Clang") AND NOT (CMAKE_CXX_COMPILER_VER set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wno-inconsistent-missing-override") endif () -find_package (Qt5WebEngine QUIET) +find_package (Qt5WebEngine) +if (APPLE) +# TODO: remove indirect dependencies once macdeployqt is fixed + find_package (Qt5WebEngineCore) + find_package (Qt5DBus) + find_package (Qt5PrintSupport) +endif() qt5_add_resources(UI_RESOURCES res.qrc qml.qrc) file(GLOB HEADERS "*.h") @@ -50,6 +56,11 @@ if (${ETH_HAVE_WEBENGINE}) add_definitions(-DETH_HAVE_WEBENGINE) list(APPEND LIBRARIES "Qt5::WebEngine") endif() +if (APPLE) + list(APPEND LIBRARIES "Qt5::WebEngineCore") + list(APPEND LIBRARIES "Qt5::DBus") + list(APPEND LIBRARIES "Qt5::PrintSupport") +endif() target_link_libraries(${EXECUTABLE} ${LIBRARIES})