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:
Julián Bermúdez Ortega 2020-01-24 13:23:25 +01:00 committed by Borja Outerelo
parent ad5e1a2fdb
commit 5d16a887ce
5 changed files with 51 additions and 34 deletions

View File

@ -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()

View File

@ -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
)

View File

@ -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 "")
)

View File

@ -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}

View File

@ -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()