From 9caa572672d5fc59049f05dea432b9b50578a50c Mon Sep 17 00:00:00 2001 From: jpfeuffer Date: Mon, 8 Oct 2018 15:26:23 +0000 Subject: [PATCH 1/6] Trying to package all non-system dependencies in KNIME plugin to avoid additional installations. --- cmake/knime_package_support.cmake | 19 ++++++++++++++----- 1 file changed, 14 insertions(+), 5 deletions(-) diff --git a/cmake/knime_package_support.cmake b/cmake/knime_package_support.cmake index 32f93e4b7bf..f03c939a188 100644 --- a/cmake/knime_package_support.cmake +++ b/cmake/knime_package_support.cmake @@ -49,6 +49,12 @@ set(PAYLOAD_BIN_PATH ${PAYLOAD_PATH}/bin) set(PAYLOAD_LIB_PATH ${PAYLOAD_PATH}/lib) set(PAYLOAD_SHARE_PATH ${PAYLOAD_PATH}/share) +# Find Qt5 includes for pyOpenMS +find_package(Qt5 COMPONENTS ${OpenMS_QT_COMPONENTS} REQUIRED) +get_target_property(QT_QMAKE_EXECUTABLE Qt5::qmake IMPORTED_LOCATION) +exec_program(${QT_QMAKE_EXECUTABLE} ARGS "-query QT_INSTALL_LIBS" OUTPUT_VARIABLE QT_INSTALL_LIBS) +exec_program(${QT_QMAKE_EXECUTABLE} ARGS "-query QT_INSTALL_BINS" OUTPUT_VARIABLE QT_INSTALL_BINS) + # script directory set(SCRIPT_DIRECTORY ${PROJECT_SOURCE_DIR}/cmake/knime/) @@ -88,10 +94,6 @@ set(CTD_executables ${TOPP_TOOLS} ${UTILS_TOOLS}) # remove tools that do not produce CTDs or should not be shipped (because of dependencies or specifics that can not be resolved in KNIME) list(REMOVE_ITEM CTD_executables OpenMSInfo ExecutePipeline INIUpdater ImageCreator GenericWrapper InspectAdapter MascotAdapter SvmTheoreticalSpectrumGeneratorTrainer OpenSwathMzMLFileCacher PepNovoAdapter) -## we have to find again so the target variables are reloaded (on linux) -set(PACKAGE_QT_COMPONENTS "${OpenMS_QT_COMPONENTS};${OpenMS_GUI_QT_COMPONENTS}") -find_package(Qt5 COMPONENTS ${PACKAGE_QT_COMPONENTS}) - # pseudo-ctd target add_custom_target( create_ctds @@ -195,7 +197,7 @@ if (APPLE) ## On APPLE use our script because the executables need to be relinke TARGET prepare_knime_payload_libs POST_BUILD COMMAND ${PROJECT_SOURCE_DIR}/cmake/MacOSX/fix_dependencies.rb -l ${PAYLOAD_LIB_PATH} -b ${PAYLOAD_BIN_PATH} ) -else() +elseif(WIN32) ## Assemble common required libraries for win and lnx ## Note that we do not need the QT plugins or QTGui libraries since we do not include GUI tools here. foreach (KNIME_TOOLS_DEPENDENCY OpenMS OpenSwathAlgo SuperHirn) @@ -211,6 +213,13 @@ else() COMMAND ${CMAKE_COMMAND} -E copy $ ${PAYLOAD_LIB_PATH} ) endforeach() +else() + foreach (KNIME_DEPENDENCY OpenMS OpenSwathAlgo SuperHirn) + add_custom_command( + TARGET prepare_knime_payload_libs POST_BUILD + COMMAND ${CMAKE_COMMAND} -V -DDEPS="$" -DTARGET="${PAYLOAD_LIB_PATH}" -DLOOKUP_DIRS="${OPENMS_CONTRIB_LIBS}/lib\;${QT_INSTALL_BINS}\;${QT_INSTALL_LIBS}" -P ${SCRIPT_DIRECTORY}knime_copy_deps.cmake + ) + endforeach() endif() if(WIN32) ## Add dynamic libraries if you linked to them. From 28c0a4a82159533cf7bc01ad613585228e1cfb3e Mon Sep 17 00:00:00 2001 From: jpfeuffer Date: Mon, 15 Oct 2018 09:17:34 +0000 Subject: [PATCH 2/6] Forgot to add mini script --- cmake/knime_copy_deps.cmake | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) create mode 100755 cmake/knime_copy_deps.cmake diff --git a/cmake/knime_copy_deps.cmake b/cmake/knime_copy_deps.cmake new file mode 100755 index 00000000000..f0e1da17937 --- /dev/null +++ b/cmake/knime_copy_deps.cmake @@ -0,0 +1,17 @@ +INCLUDE(GetPrerequisites) +message ("WTF") +get_prerequisites(${DEPS} DEPENDENCIES 0 1 "" "${LOOKUP_DIRS}") + +get_filename_component(BIN_DIR ${DEPS} DIRECTORY) +set(LOOKUP_DIRS "${BIN_DIR};${LOOKUP_DIRS}") + +foreach(DEPENDENCY_FILE ${DEPENDENCIES}) + ## Skip things like glibc, gomp, stdcpp + if (NOT DEPENDENCY_FILE MATCHES "^/lib/.*" AND NOT DEPENDENCY_FILE MATCHES "libstdc\\+\\+") + gp_resolve_item(${DEPS} "${DEPENDENCY_FILE}" "" "${LOOKUP_DIRS}" resolved_file) + + get_filename_component(resolved_file_nosymlink ${resolved_file} REALPATH) + message("realpath of resolved dependency " ${resolved_file} " is " ${resolved_file_nosymlink}) + file(COPY ${resolved_file_nosymlink} DESTINATION ${TARGET}) + endif() +endforeach() From c6e62f793cbf893267d33981d0ff84ffe1496800 Mon Sep 17 00:00:00 2001 From: jpfeuffer Date: Mon, 15 Oct 2018 09:31:12 +0000 Subject: [PATCH 3/6] Moved file into correct subfolder --- cmake/{ => knime}/knime_copy_deps.cmake | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename cmake/{ => knime}/knime_copy_deps.cmake (100%) diff --git a/cmake/knime_copy_deps.cmake b/cmake/knime/knime_copy_deps.cmake similarity index 100% rename from cmake/knime_copy_deps.cmake rename to cmake/knime/knime_copy_deps.cmake From a53dbf9f1acb3abadcfbe726fffe349a3ab05de2 Mon Sep 17 00:00:00 2001 From: jpfeuffer Date: Mon, 15 Oct 2018 13:39:22 +0000 Subject: [PATCH 4/6] Fixes for KNIME packaging. Shipping every non-system lib now. --- CMakeLists.txt | 9 ++++++++- cmake/knime/knime_copy_deps.cmake | 9 +++++++-- 2 files changed, 15 insertions(+), 3 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index c8e8a38058f..154678526eb 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -324,7 +324,14 @@ SET(CMAKE_SKIP_BUILD_RPATH FALSE) # when building, don't use the install RPATH already # (but later on when installing) -SET(CMAKE_BUILD_WITH_INSTALL_RPATH FALSE) +if (ENABLE_PREPARE_KNIME_PACKAGE) + ## Since we rely on copying instead of "installing" for KNIME packaging + ## we need to do it during building already. + ## In this case, make sure that QT is in a system path if you want to test it locally. + SET(CMAKE_BUILD_WITH_INSTALL_RPATH TRUE) +else() + SET(CMAKE_BUILD_WITH_INSTALL_RPATH FALSE) +endif() # the RPATH to be used when installing SET(CMAKE_INSTALL_RPATH "$ORIGIN/../lib/") diff --git a/cmake/knime/knime_copy_deps.cmake b/cmake/knime/knime_copy_deps.cmake index f0e1da17937..35b8e87b7e7 100755 --- a/cmake/knime/knime_copy_deps.cmake +++ b/cmake/knime/knime_copy_deps.cmake @@ -1,17 +1,22 @@ INCLUDE(GetPrerequisites) -message ("WTF") -get_prerequisites(${DEPS} DEPENDENCIES 0 1 "" "${LOOKUP_DIRS}") get_filename_component(BIN_DIR ${DEPS} DIRECTORY) set(LOOKUP_DIRS "${BIN_DIR};${LOOKUP_DIRS}") +get_prerequisites(${DEPS} DEPENDENCIES 0 1 "${BIN_DIR}" "${LOOKUP_DIRS}" "\$ORIGIN/../lib") + foreach(DEPENDENCY_FILE ${DEPENDENCIES}) ## Skip things like glibc, gomp, stdcpp if (NOT DEPENDENCY_FILE MATCHES "^/lib/.*" AND NOT DEPENDENCY_FILE MATCHES "libstdc\\+\\+") gp_resolve_item(${DEPS} "${DEPENDENCY_FILE}" "" "${LOOKUP_DIRS}" resolved_file) get_filename_component(resolved_file_nosymlink ${resolved_file} REALPATH) + get_filename_component(resolved_file_nosymlink_name ${resolved_file_nosymlink} NAME) + get_filename_component(resolved_filename ${resolved_file} NAME) message("realpath of resolved dependency " ${resolved_file} " is " ${resolved_file_nosymlink}) file(COPY ${resolved_file_nosymlink} DESTINATION ${TARGET}) + file(RENAME ${TARGET}/${resolved_file_nosymlink_name} ${TARGET}/${resolved_filename}) + else() + message("Skipped system dependency " ${DEPENDENCY_FILE}) endif() endforeach() From 2ef126165af06b037ded155c4776a175a4762397 Mon Sep 17 00:00:00 2001 From: jpfeuffer Date: Mon, 15 Oct 2018 15:42:45 +0200 Subject: [PATCH 5/6] copy paste error --- cmake/knime_package_support.cmake | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cmake/knime_package_support.cmake b/cmake/knime_package_support.cmake index f03c939a188..df90658f0bf 100644 --- a/cmake/knime_package_support.cmake +++ b/cmake/knime_package_support.cmake @@ -49,7 +49,7 @@ set(PAYLOAD_BIN_PATH ${PAYLOAD_PATH}/bin) set(PAYLOAD_LIB_PATH ${PAYLOAD_PATH}/lib) set(PAYLOAD_SHARE_PATH ${PAYLOAD_PATH}/share) -# Find Qt5 includes for pyOpenMS +# Find Qt5 includes for KNIME packaging find_package(Qt5 COMPONENTS ${OpenMS_QT_COMPONENTS} REQUIRED) get_target_property(QT_QMAKE_EXECUTABLE Qt5::qmake IMPORTED_LOCATION) exec_program(${QT_QMAKE_EXECUTABLE} ARGS "-query QT_INSTALL_LIBS" OUTPUT_VARIABLE QT_INSTALL_LIBS) From 21fd4f8978b60af039122825f24ef1abc09ab9e6 Mon Sep 17 00:00:00 2001 From: jpfeuffer Date: Mon, 15 Oct 2018 14:41:33 +0000 Subject: [PATCH 6/6] Also added libz and libbz --- cmake/knime/knime_copy_deps.cmake | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cmake/knime/knime_copy_deps.cmake b/cmake/knime/knime_copy_deps.cmake index 35b8e87b7e7..918b6d0bc4f 100755 --- a/cmake/knime/knime_copy_deps.cmake +++ b/cmake/knime/knime_copy_deps.cmake @@ -7,7 +7,7 @@ get_prerequisites(${DEPS} DEPENDENCIES 0 1 "${BIN_DIR}" "${LOOKUP_DIRS}" "\$ORIG foreach(DEPENDENCY_FILE ${DEPENDENCIES}) ## Skip things like glibc, gomp, stdcpp - if (NOT DEPENDENCY_FILE MATCHES "^/lib/.*" AND NOT DEPENDENCY_FILE MATCHES "libstdc\\+\\+") + if (DEPENDENCY_FILE MATCHES "libz" OR DEPENDENCY_FILE MATCHES "libbz" OR NOT DEPENDENCY_FILE MATCHES "^/lib/.*" AND NOT DEPENDENCY_FILE MATCHES "libstdc\\+\\+") gp_resolve_item(${DEPS} "${DEPENDENCY_FILE}" "" "${LOOKUP_DIRS}" resolved_file) get_filename_component(resolved_file_nosymlink ${resolved_file} REALPATH)