You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
125 lines
3.5 KiB
125 lines
3.5 KiB
cmake_minimum_required(VERSION 3.20.0)
|
|
|
|
project(superpro LANGUAGES NONE)
|
|
|
|
add_subdirectory(superpro)
|
|
|
|
include(Subproject.cmake)
|
|
add_subproject(static_lib DIR subpro_a_static_lib)
|
|
add_subproject(shared_lib DIR subpro_b_shared_lib)
|
|
add_subproject(nested_lib DIR subpro_c_nested_lib NO_INSTALL)
|
|
add_subproject(executable DIR subpro_d_executable
|
|
DEPENDS
|
|
static_lib
|
|
shared_lib
|
|
nested_lib
|
|
)
|
|
|
|
include(CTest)
|
|
if(BUILD_TESTING)
|
|
enable_language(CXX) # required by GNUInstallDirs
|
|
include(GNUInstallDirs)
|
|
|
|
macro(testme _name _path _symlink)
|
|
add_test(
|
|
NAME "${_name}"
|
|
WORKING_DIRECTORY "${CMAKE_BINARY_DIR}"
|
|
COMMAND
|
|
"${CMAKE_COMMAND}"
|
|
"-DFILE_PATH=${CMAKE_INSTALL_PREFIX}/${_path}"
|
|
"-DEXPECT_SYMLINK:BOOL=${_symlink}"
|
|
"-DEXPECT_ABSOLUTE:BOOL=${ARGN}"
|
|
"-P" "${CMAKE_SOURCE_DIR}/Test.cmake"
|
|
)
|
|
endmacro()
|
|
|
|
set(_mode $ENV{CMAKE_INSTALL_MODE})
|
|
if(NOT "${_mode}" OR "${_mode}" STREQUAL "COPY")
|
|
set(expect_symlink NO)
|
|
elseif("${_mode}" MATCHES "(REL_)?SYMLINK(_OR_COPY)?")
|
|
set(expect_symlink YES)
|
|
set(expect_absolute NO)
|
|
elseif("${_mode}" MATCHES "ABS_SYMLINK(_OR_COPY)?")
|
|
set(expect_symlink YES)
|
|
set(expect_absolute YES)
|
|
endif()
|
|
|
|
# toplevel project should respect CMAKE_INSTALL_MODE
|
|
|
|
testme(superproj_file_copy
|
|
"file_copy.txt" NO)
|
|
testme(superproj_file_copy_file
|
|
"file_copy_file.txt" NO)
|
|
testme(superproj_file_install
|
|
"file_install.txt"
|
|
${expect_symlink}
|
|
${expect_absolute})
|
|
testme(superproj_file_create_link_symbolic
|
|
"file_create_link_symbolic.txt" YES YES)
|
|
|
|
# subprojects should receive and respect CMAKE_INSTALL_MODE too
|
|
|
|
testme(subpro_a_static_lib_header
|
|
"${CMAKE_INSTALL_INCLUDEDIR}/static_lib.h"
|
|
${expect_symlink}
|
|
${expect_absolute}
|
|
)
|
|
testme(subpro_a_static_lib_libfile
|
|
"${CMAKE_INSTALL_LIBDIR}/${CMAKE_STATIC_LIBRARY_PREFIX}the_static_lib${CMAKE_STATIC_LIBRARY_SUFFIX}"
|
|
${expect_symlink}
|
|
${expect_absolute}
|
|
)
|
|
|
|
testme(subpro_b_shared_lib_header
|
|
"${CMAKE_INSTALL_INCLUDEDIR}/shared_lib.h"
|
|
${expect_symlink}
|
|
${expect_absolute}
|
|
)
|
|
|
|
if(CMAKE_SHARED_LIBRARY_SONAME_CXX_FLAG AND
|
|
"${CMAKE_CXX_CREATE_SHARED_MODULE}" MATCHES "SONAME_FLAG")
|
|
# due to semver, this is always a link
|
|
testme(subpro_b_shared_lib_libfile
|
|
"${CMAKE_INSTALL_LIBDIR}/${CMAKE_SHARED_LIBRARY_PREFIX}the_shared_lib${CMAKE_SHARED_LIBRARY_SUFFIX}"
|
|
YES
|
|
${expect_absolute}
|
|
)
|
|
# this is the actual shared lib, so should follow CMAKE_INSTALL_MODE rules
|
|
testme(subpro_b_shared_lib_libfile_versuffix
|
|
"${CMAKE_INSTALL_LIBDIR}/${CMAKE_SHARED_LIBRARY_PREFIX}the_shared_lib${CMAKE_SHARED_LIBRARY_SUFFIX}.2.3.4"
|
|
${expect_symlink}
|
|
${expect_absolute}
|
|
)
|
|
endif()
|
|
|
|
testme(subpro_d_executable_exefile
|
|
"${CMAKE_INSTALL_BINDIR}/the_executable${CMAKE_EXECUTABLE_SUFFIX}"
|
|
${expect_symlink}
|
|
${expect_absolute}
|
|
)
|
|
|
|
# nested subprojects should receive and respect CMAKE_INSTALL_MODE too
|
|
|
|
testme(subsubpro_c1_header
|
|
"${CMAKE_INSTALL_INCLUDEDIR}/c1_lib.h"
|
|
${expect_symlink}
|
|
${expect_absolute}
|
|
)
|
|
testme(subsubpro_c1_libfile
|
|
"${CMAKE_INSTALL_LIBDIR}/${CMAKE_STATIC_LIBRARY_PREFIX}the_c1_lib${CMAKE_STATIC_LIBRARY_SUFFIX}"
|
|
${expect_symlink}
|
|
${expect_absolute}
|
|
)
|
|
|
|
testme(subsubpro_c2_header
|
|
"${CMAKE_INSTALL_INCLUDEDIR}/c2_lib.h"
|
|
${expect_symlink}
|
|
${expect_absolute}
|
|
)
|
|
testme(subsubpro_c2_libfile
|
|
"${CMAKE_INSTALL_LIBDIR}/${CMAKE_STATIC_LIBRARY_PREFIX}the_c2_lib${CMAKE_STATIC_LIBRARY_SUFFIX}"
|
|
${expect_symlink}
|
|
${expect_absolute}
|
|
)
|
|
endif()
|