Isolated install (#130)
* Simplify merge install policy. * Add merge install test. * Change UCLIENT_MERGE_INSTALL flag by UCLIENT_ISOLATED_INSTALL. * Attend PR comments. * Update CMakeLists.txt Co-authored-by: Borja Outerelo <borjaouterelo@gmail.com>
This commit is contained in:
parent
ad5e1a2fdb
commit
5d16a887ce
|
@ -26,7 +26,7 @@ option(UCLIENT_BUILD_EXAMPLES "Build examples." OFF)
|
|||
option(UCLIENT_VERBOSE_SERIALIZATION "Build with serialization verbosity." OFF)
|
||||
option(UCLIENT_VERBOSE_MESSAGE "Build with message verbosity." OFF)
|
||||
option(UCLIENT_PIC "Control Position Independent Code." ON)
|
||||
option(UCLIENT_MERGE_INSTALL "Install dependencies and Client into the same prefix." OFF)
|
||||
option(UCLIENT_ISOLATED_INSTALL "Install the project and dependencies into separeted folders with version control." ON)
|
||||
option(BUILD_SHARED_LIBS "Control shared/static library building." OFF)
|
||||
|
||||
option(UCLIENT_BUILD_CI_TESTS "Build CI test cases." OFF)
|
||||
|
@ -48,7 +48,7 @@ set(UCLIENT_CONFIG "${CMAKE_CURRENT_SOURCE_DIR}/client.config" CACHE PATH "Confi
|
|||
# Dependencies
|
||||
###############################################################################
|
||||
set(_microcdr_version 1.1.2)
|
||||
set(_microcdr_tag v1.1.2)
|
||||
set(_microcdr_tag develop)
|
||||
|
||||
set(_deps "")
|
||||
list(APPEND _deps "microcdr\;${_microcdr_version}")
|
||||
|
@ -176,17 +176,15 @@ set(SRCS
|
|||
###############################################################################
|
||||
# Set install directories
|
||||
###############################################################################
|
||||
if(UCLIENT_MERGE_INSTALL)
|
||||
set(_install_prefix "")
|
||||
else()
|
||||
set(_install_prefix ${PROJECT_NAME}-${PROJECT_VERSION}/)
|
||||
if(UCLIENT_ISOLATED_INSTALL)
|
||||
set(CMAKE_INSTALL_PREFIX "${CMAKE_INSTALL_PREFIX}/${PROJECT_NAME}-${PROJECT_VERSION}")
|
||||
endif()
|
||||
|
||||
include(GNUInstallDirs)
|
||||
set(BIN_INSTALL_DIR ${_install_prefix}${CMAKE_INSTALL_BINDIR} CACHE PATH "Installation directory for binaries")
|
||||
set(INCLUDE_INSTALL_DIR ${_install_prefix}${CMAKE_INSTALL_INCLUDEDIR} CACHE PATH "Installation directory for C headers")
|
||||
set(LIB_INSTALL_DIR ${_install_prefix}${CMAKE_INSTALL_LIBDIR} CACHE PATH "Installation directory for libraries")
|
||||
set(DATA_INSTALL_DIR ${_install_prefix}${CMAKE_INSTALL_DATADIR} CACHE PATH "Installation directory for data")
|
||||
set(BIN_INSTALL_DIR ${CMAKE_INSTALL_BINDIR} CACHE PATH "Installation directory for binaries")
|
||||
set(INCLUDE_INSTALL_DIR ${CMAKE_INSTALL_INCLUDEDIR} CACHE PATH "Installation directory for C headers")
|
||||
set(LIB_INSTALL_DIR ${CMAKE_INSTALL_LIBDIR} CACHE PATH "Installation directory for libraries")
|
||||
set(DATA_INSTALL_DIR ${CMAKE_INSTALL_DATADIR} CACHE PATH "Installation directory for data")
|
||||
if(WIN32)
|
||||
set(LICENSE_INSTALL_DIR . CACHE PATH "Installation directory for licenses")
|
||||
else()
|
||||
|
@ -409,22 +407,17 @@ install(
|
|||
)
|
||||
|
||||
# Install dependencies.
|
||||
if(UCLIENT_MERGE_INSTALL)
|
||||
set(_install_suffix /)
|
||||
else()
|
||||
set(_install_suffix "")
|
||||
endif()
|
||||
|
||||
if(EXISTS ${CMAKE_BINARY_DIR}/temp_install/)
|
||||
foreach(dependency ${UCLIENT_DEPENDS})
|
||||
file(GLOB _deps RELATIVE ${CMAKE_BINARY_DIR}/temp_install ${CMAKE_BINARY_DIR}/temp_install/*)
|
||||
foreach(_d ${_deps})
|
||||
install(
|
||||
DIRECTORY
|
||||
${CMAKE_BINARY_DIR}/temp_install/${dependency}${_install_suffix}
|
||||
${CMAKE_BINARY_DIR}/temp_install/${_d}$<IF:$<BOOL:${UCLIENT_ISOLATED_INSTALL}>,,/>
|
||||
DESTINATION
|
||||
${CMAKE_INSTALL_PREFIX}
|
||||
${CMAKE_INSTALL_PREFIX}$<IF:$<BOOL:${UCLIENT_ISOLATED_INSTALL}>,/../,>
|
||||
COMPONENT
|
||||
${dependency}
|
||||
${_d}
|
||||
USE_SOURCE_PERMISSIONS
|
||||
)
|
||||
endforeach()
|
||||
endif()
|
||||
endif()
|
||||
|
|
|
@ -38,13 +38,13 @@ if(_have_c_fprofile_abs_path)
|
|||
set(_c_flags "${_c_flags} -fprofile-abs-path")
|
||||
endif()
|
||||
|
||||
ExternalProject_Add(microxrcedds_client
|
||||
ExternalProject_Add(microxrcedds_client_isolated
|
||||
SOURCE_DIR
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/../../
|
||||
BINARY_DIR
|
||||
${PROJECT_BINARY_DIR}/microxrcedds_client-build
|
||||
INSTALL_DIR
|
||||
${PROJECT_BINARY_DIR}/temp_install
|
||||
${PROJECT_BINARY_DIR}/temp_install/isolated
|
||||
TEST_AFTER_INSTALL
|
||||
TRUE
|
||||
TEST_COMMAND
|
||||
|
@ -61,5 +61,35 @@ ExternalProject_Add(microxrcedds_client
|
|||
-DCMAKE_SHARED_LINKER_FLAGS:STRING=${_shared_linker_flags}
|
||||
-DCMAKE_INSTALL_PREFIX:PATH=<INSTALL_DIR>
|
||||
-DUCLIENT_BUILD_CI_TESTS:BOOL=ON
|
||||
-DUCLIENT_ISOLATED_INSTALL:BOOL=ON
|
||||
-DGTEST_INDIVIDUAL:BOOL=ON
|
||||
)
|
||||
|
||||
ExternalProject_Add(microxrcedds_client_non-isolated
|
||||
SOURCE_DIR
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/../../
|
||||
BINARY_DIR
|
||||
${PROJECT_BINARY_DIR}/microxrcedds_client-build
|
||||
INSTALL_DIR
|
||||
${PROJECT_BINARY_DIR}/temp_install/non-isolated
|
||||
TEST_AFTER_INSTALL
|
||||
TRUE
|
||||
BUILD_COMMAND
|
||||
""
|
||||
TEST_COMMAND
|
||||
COMMAND ${CMAKE_CTEST_COMMAND} -VV -T Test -R "test-case*"
|
||||
CMAKE_CACHE_ARGS
|
||||
-DCMAKE_CXX_COMPILER:FILEPATH=${CMAKE_CXX_COMPILER}
|
||||
-DCMAKE_C_COMPILER:FILEPATH=${CMAKE_C_COMPILER}
|
||||
-DCMAKE_BUILD_TYPE:STRING=${CMAKE_BUILD_TYPE}
|
||||
-DCMAKE_C_FLAGS:STRING=${_c_flags}
|
||||
-DCMAKE_CXX_FLAGS:STRING=${_cxx_flags}
|
||||
-DCMAKE_EXE_LINKER_FLAGS:STRING=${_exe_linker_flags}
|
||||
-DCMAKE_SHARED_LINKER_FLAGS:STRING=${_shared_linker_flags}
|
||||
-DCMAKE_INSTALL_PREFIX:PATH=<INSTALL_DIR>
|
||||
-DUCLIENT_BUILD_CI_TESTS:BOOL=ON
|
||||
-DUCLIENT_ISOLATED_INSTALL:BOOL=OFF
|
||||
-DGTEST_INDIVIDUAL:BOOL=ON
|
||||
DEPENDS
|
||||
microxrcedds_client_isolated
|
||||
)
|
|
@ -15,7 +15,6 @@
|
|||
include(ExternalProject)
|
||||
|
||||
unset(_deps)
|
||||
unset(_versioned_deps)
|
||||
|
||||
enable_language(C)
|
||||
enable_language(CXX)
|
||||
|
@ -32,7 +31,7 @@ if(NOT microcdr_FOUND)
|
|||
PREFIX
|
||||
${PROJECT_BINARY_DIR}/microcdr
|
||||
INSTALL_DIR
|
||||
${PROJECT_BINARY_DIR}/temp_install/microcdr-${_microcdr_version}
|
||||
${PROJECT_BINARY_DIR}/temp_install
|
||||
CMAKE_CACHE_ARGS
|
||||
-DCMAKE_CXX_COMPILER:FILEPATH=${CMAKE_CXX_COMPILER}
|
||||
-DCMAKE_C_COMPILER:FILEPATH=${CMAKE_C_COMPILER}
|
||||
|
@ -46,7 +45,6 @@ if(NOT microcdr_FOUND)
|
|||
-DUCDR_PIC=${UCLIENT_PIC}
|
||||
)
|
||||
list(APPEND _deps microcdr)
|
||||
list(APPEND _versioned_deps microcdr-${_microcdr_version})
|
||||
endif()
|
||||
|
||||
if(UCLIENT_BUILD_TESTS)
|
||||
|
@ -78,7 +76,6 @@ if(UCLIENT_BUILD_TESTS)
|
|||
set(GTEST_ROOT ${PROJECT_BINARY_DIR}/temp_install/googletest CACHE PATH "" FORCE)
|
||||
set(GMOCK_ROOT ${PROJECT_BINARY_DIR}/temp_install/googletest CACHE PATH "" FORCE)
|
||||
list(APPEND _deps googletest)
|
||||
list(APPEND _versioned_deps googletest)
|
||||
endif()
|
||||
endif()
|
||||
|
||||
|
@ -94,6 +91,4 @@ ExternalProject_Add(uclient
|
|||
""
|
||||
DEPENDS
|
||||
${_deps}
|
||||
)
|
||||
|
||||
set(UCLIENT_DEPENDS "${_versioned_deps}" CACHE INTERNAL "")
|
||||
)
|
|
@ -18,7 +18,6 @@ add_test(
|
|||
COMMAND
|
||||
${CMAKE_COMMAND}
|
||||
-DINSTALL_PATH=${CMAKE_INSTALL_PREFIX}
|
||||
-DINSTALL_SUFFIX=${PROJECT_NAME}-${PROJECT_VERSION}
|
||||
-DLIBRARY_NAME=$<TARGET_FILE_NAME:${PROJECT_NAME}>
|
||||
-DREQUIRED_VERSION=${PROJECT_VERSION}
|
||||
-P ${CMAKE_CURRENT_SOURCE_DIR}/installation/InstallationTest.cmake
|
||||
|
@ -30,7 +29,7 @@ add_test(
|
|||
COMMAND
|
||||
${CMAKE_COMMAND}
|
||||
-DORIGINAL_DIR=${CMAKE_CURRENT_SOURCE_DIR}/packaging
|
||||
-DCMAKE_PREFIX_PATH=${CMAKE_INSTALL_PREFIX}
|
||||
-DCMAKE_PREFIX_PATH=${CMAKE_INSTALL_PREFIX}$<IF:$<BOOL:${UCLIENT_ISOLATED_INSTALL}>,/../,>
|
||||
-DREQUIRED_VERSION=${PROJECT_VERSION}
|
||||
-DCMAKE_GENERATOR_TOOLSET=${CMAKE_GENERATOR_TOOLSET}
|
||||
-DCMAKE_GENERATOR_PLATFORM=${CMAKE_GENERATOR_PLATFORM}
|
||||
|
|
|
@ -15,12 +15,12 @@
|
|||
# Check directories.
|
||||
set(_directories "lib" "include" "share")
|
||||
foreach(_dir ${_directories})
|
||||
if(NOT EXISTS ${INSTALL_PATH}/${INSTALL_SUFFIX}/${_dir})
|
||||
if(NOT EXISTS ${INSTALL_PATH}/${_dir})
|
||||
message(FATAL_ERROR "Directory ${_dir} not found.")
|
||||
endif()
|
||||
endforeach()
|
||||
|
||||
# Check library.
|
||||
if(NOT EXISTS ${INSTALL_PATH}/${INSTALL_SUFFIX}/lib/${LIBRARY_NAME})
|
||||
if(NOT EXISTS ${INSTALL_PATH}/lib/${LIBRARY_NAME})
|
||||
message(FATAL_ERROR "Library lib/${LIBRARY_NAME} not found.")
|
||||
endif()
|
Loading…
Reference in New Issue