Skip to content

Commit

Permalink
Merge pull request #3795 from jpfeuffer/fix/knime_linux_package
Browse files Browse the repository at this point in the history
[Fix] knime linux package
  • Loading branch information
jpfeuffer committed Oct 16, 2018
2 parents 2e4bcee + 6b1f05e commit 5d0557d
Show file tree
Hide file tree
Showing 3 changed files with 44 additions and 6 deletions.
9 changes: 8 additions & 1 deletion CMakeLists.txt
Expand Up @@ -323,7 +323,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/")
Expand Down
22 changes: 22 additions & 0 deletions cmake/knime/knime_copy_deps.cmake
@@ -0,0 +1,22 @@
INCLUDE(GetPrerequisites)

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 (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)
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()
19 changes: 14 additions & 5 deletions cmake/knime_package_support.cmake
Expand Up @@ -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 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)
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/)

Expand Down Expand Up @@ -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
Expand Down Expand Up @@ -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)
Expand All @@ -211,6 +213,13 @@ else()
COMMAND ${CMAKE_COMMAND} -E copy $<TARGET_FILE:Qt5::${KNIME_TOOLS_QT5_DEPENDENCY}> ${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="$<TARGET_FILE:${KNIME_DEPENDENCY}>" -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.
Expand Down

0 comments on commit 5d0557d

Please sign in to comment.