Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Changes to enable building of MRtrix3 extensions #2939

Draft
wants to merge 3 commits into
base: dev
Choose a base branch
from
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
15 changes: 13 additions & 2 deletions CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -38,6 +38,17 @@ else()
set(QT_MAJOR_VERSION 6)
endif()

# If MRTRIX_SUBPROJECT_INSTALL_PREFIX is set, it will be used as the install prefix
# for all targets in this project. This is useful when MRtrix3 is built as a
# subproject of another project (e.g. via add_subdirectory or FetchContent).
if(NOT DEFINED MRTRIX_SUBPROJECT_INSTALL_PREFIX)
set(MRTRIX_SUBPROJECT_INSTALL_PREFIX "")
endif()
set(MRTRIX_INSTALL_BINDIR ${MRTRIX_SUBPROJECT_INSTALL_PREFIX}/${CMAKE_INSTALL_BINDIR} CACHE INTERNAL "" FORCE)
set(MRTRIX_INSTALL_LIBDIR ${MRTRIX_SUBPROJECT_INSTALL_PREFIX}/${CMAKE_INSTALL_LIBDIR} CACHE INTERNAL "" FORCE)
set(MRTRIX_INSTALL_INCLUDEDIR ${MRTRIX_SUBPROJECT_INSTALL_PREFIX}/${CMAKE_INSTALL_INCLUDEDIR} CACHE INTERNAL "" FORCE)
set(MRTRIX_INSTALL_DATADIR ${MRTRIX_SUBPROJECT_INSTALL_PREFIX}/${CMAKE_INSTALL_DATADIR} CACHE INTERNAL "" FORCE)

set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
set(CMAKE_EXPORT_COMPILE_COMMANDS ON)
Expand All @@ -57,8 +68,8 @@ else()
endif()

file(RELATIVE_PATH relDir
${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_INSTALL_BINDIR}
${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_INSTALL_LIBDIR}
${CMAKE_CURRENT_BINARY_DIR}/${MRTRIX_INSTALL_BINDIR}
${CMAKE_CURRENT_BINARY_DIR}/${MRTRIX_INSTALL_LIBDIR}
)

set(CMAKE_INSTALL_RPATH ${base} ${base}/${relDir})
Expand Down
8 changes: 6 additions & 2 deletions cmake/FindVersion.cmake
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
if(GIT_EXECUTABLE)
if(GIT_EXECUTABLE AND PROJECT_IS_TOP_LEVEL)
message(VERBOSE "Git found: ${GIT_EXECUTABLE}")
# Get tag
execute_process(
Expand Down Expand Up @@ -31,7 +31,11 @@ endif()

if(NOT MRTRIX_VERSION)
set(MRTRIX_VERSION ${MRTRIX_BASE_VERSION})
message(STATUS "Failed to determine version from Git, using default base version: ${MRTRIX_BASE_VERSION}")
if(PROJECT_IS_TOP_LEVEL)
message(STATUS "Failed to determine version from Git, using default base version: ${MRTRIX_BASE_VERSION}")
else()
message(VERBOSE "MRtrix3 version is set to version: ${MRTRIX_BASE_VERSION}")
endif()
endif()


Expand Down
10 changes: 9 additions & 1 deletion cmake/MakePythonExecutable.cmake
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,14 @@
# Inputs:
# - CMDNAME: Name of the command
# - OUTPUT_DIR: Directory in which to create the executable
# - EXTERNAL_PROJECT_COMMAND: Boolean indicating whether the command is part of an MRtrix3 external project

set(PYTHON_LIB_PATH "os.path.normpath(os.path.join(os.path.dirname(os.path.realpath(__file__)), os.pardir, 'lib'))")

# For external projects the python library sources are located in ../lib/mrtrix3/lib
if(EXTERNAL_PROJECT_COMMAND)
set(PYTHON_LIB_PATH "os.path.normpath(os.path.join(os.path.dirname(os.path.realpath(__file__)), os.pardir, 'lib', 'mrtrix3', 'lib'))")
endif()

set(BINPATH_CONTENTS
"#!/usr/bin/python3\n"
Expand All @@ -11,7 +19,7 @@ set(BINPATH_CONTENTS
"import os\n"
"import sys\n"
"\n"
"mrtrix_lib_path = os.path.normpath(os.path.join(os.path.dirname(os.path.realpath(__file__)), os.pardir, 'lib'))\n"
"mrtrix_lib_path = ${PYTHON_LIB_PATH}\n"
"sys.path.insert(0, mrtrix_lib_path)\n"
"from mrtrix3.app import _execute\n"
"\n"
Expand Down
4 changes: 2 additions & 2 deletions cmd/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -44,8 +44,8 @@ function(add_cmd CMD_SRC IS_GUI)
endif ()

install(TARGETS ${CMD_NAME}
RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
BUNDLE DESTINATION ${CMAKE_INSTALL_BINDIR}
RUNTIME DESTINATION ${MRTRIX_INSTALL_BINDIR}
BUNDLE DESTINATION ${MRTRIX_INSTALL_BINDIR}
)
endfunction()

Expand Down
4 changes: 2 additions & 2 deletions core/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -96,6 +96,6 @@ target_include_directories(mrtrix-core PUBLIC
)

install(TARGETS mrtrix-core
RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
RUNTIME DESTINATION ${MRTRIX_INSTALL_BINDIR}
LIBRARY DESTINATION ${MRTRIX_INSTALL_LIBDIR}
)
4 changes: 2 additions & 2 deletions python/mrtrix3/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -66,10 +66,10 @@ add_custom_target(PythonLibFiles

install(FILES ${PYTHON_LIB_FILES}
PERMISSIONS OWNER_READ OWNER_WRITE GROUP_READ WORLD_READ
DESTINATION ${CMAKE_INSTALL_LIBDIR}/mrtrix3
DESTINATION ${MRTRIX_INSTALL_LIBDIR}/mrtrix3
)

install(FILES ${PYTHON_VERSION_FILE}
PERMISSIONS OWNER_READ OWNER_WRITE GROUP_READ WORLD_READ
DESTINATION ${CMAKE_INSTALL_LIBDIR}/mrtrix3
DESTINATION ${MRTRIX_INSTALL_LIBDIR}/mrtrix3
)
6 changes: 3 additions & 3 deletions python/mrtrix3/commands/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -63,7 +63,7 @@ foreach(PYTHON_SRC_PATH ${PYTHON_ALL_COMMANDS_FILES})
get_filename_component(DST_INSTALLDIR ${DST_RELPATH} DIRECTORY)
install(FILES ${PYTHON_SRC_PATH}
PERMISSIONS OWNER_READ OWNER_WRITE GROUP_READ WORLD_READ
DESTINATION ${CMAKE_INSTALL_LIBDIR}/mrtrix3/commands/${DST_INSTALLDIR}
DESTINATION ${MRTRIX_INSTALL_LIBDIR}/mrtrix3/commands/${DST_INSTALLDIR}
)
list(APPEND PYTHON_BUILD_COMMAND_FILES ${DST_PATH})
endforeach()
Expand Down Expand Up @@ -100,10 +100,10 @@ add_custom_target(PythonCommands

install(FILES ${PYTHON_BIN_FILES}
PERMISSIONS OWNER_READ OWNER_WRITE OWNER_EXECUTE GROUP_READ GROUP_EXECUTE WORLD_READ WORLD_EXECUTE
DESTINATION ${CMAKE_INSTALL_BINDIR}
DESTINATION ${MRTRIX_INSTALL_BINDIR}
)

install(FILES ${PYTHON_COMMANDS_INIT_FILE}
PERMISSIONS OWNER_READ OWNER_WRITE GROUP_READ WORLD_READ
DESTINATION ${CMAKE_INSTALL_LIBDIR}/mrtrix3/commands/
DESTINATION ${MRTRIX_INSTALL_LIBDIR}/mrtrix3/commands/
)
8 changes: 4 additions & 4 deletions share/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -5,17 +5,17 @@ add_custom_target(copy-share-data ALL
)

install(DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/mrtrix3/
DESTINATION ${CMAKE_INSTALL_DATADIR}/mrtrix3
DESTINATION ${MRTRIX_INSTALL_DATADIR}/mrtrix3
)

install(DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/icons/hicolor
DESTINATION ${CMAKE_INSTALL_DATADIR}/icons
DESTINATION ${MRTRIX_INSTALL_DATADIR}/icons
)

install(FILES ${CMAKE_CURRENT_SOURCE_DIR}/applications/mrview.desktop
DESTINATION ${CMAKE_INSTALL_DATADIR}/applications
DESTINATION ${MRTRIX_INSTALL_DATADIR}/applications
)

install(FILES ${CMAKE_CURRENT_SOURCE_DIR}/mime/mrtrix-mime.xml
DESTINATION ${CMAKE_INSTALL_DATADIR}/mime
DESTINATION ${MRTRIX_INSTALL_DATADIR}/mime
)
8 changes: 4 additions & 4 deletions src/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -112,13 +112,13 @@ if(WIN32)
endif()

install(TARGETS mrtrix-headless
RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
RUNTIME DESTINATION ${MRTRIX_INSTALL_BINDIR}
LIBRARY DESTINATION ${MRTRIX_INSTALL_LIBDIR}
)

if(MRTRIX_BUILD_GUI)
install(TARGETS mrtrix-gui
RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
RUNTIME DESTINATION ${MRTRIX_INSTALL_BINDIR}
LIBRARY DESTINATION ${MRTRIX_INSTALL_LIBDIR}
)
endif()
Loading