summaryrefslogtreecommitdiffstats
path: root/Tests/RunCMake/CPack/tests/DUPLICATE_FILE/test.cmake
blob: 89d678446555f845c05240f20978af257a2bb7fb (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
# Create files named 1 to 9
foreach(i RANGE 1 9)
    file(WRITE "${CMAKE_CURRENT_BINARY_DIR}/${i}.txt" "This is file ${i}")
endforeach()

set(COMPONENT_NAMES c1 c2 c3 c4 c5)
foreach(j RANGE 1 5)
    # Select 4 file and install to the component
    math(EXPR COMPONENT_IDX "${j} - 1")
    list(GET COMPONENT_NAMES "${COMPONENT_IDX}" SELECTED_COMPONENT)
    math(EXPR END_FILE "${j} + 4")
    foreach(k RANGE ${j} ${END_FILE})
        install(FILES "${CMAKE_CURRENT_BINARY_DIR}/${k}.txt" DESTINATION "files" COMPONENT ${SELECTED_COMPONENT})
    endforeach()
endforeach()

if(RunCMake_SUBTEST_SUFFIX STREQUAL "conflict_file")
    file(WRITE "${CMAKE_CURRENT_BINARY_DIR}/conflict/1.txt" "This should create a conflict.")
    install(FILES "${CMAKE_CURRENT_BINARY_DIR}/conflict/1.txt" DESTINATION "files" COMPONENT c2)
endif ()

# You cannot create symlink in Windows test environment. Instead mock the symlink.
if(NOT CMAKE_HOST_WIN32)
    file(CREATE_LINK "${CMAKE_CURRENT_BINARY_DIR}/2.txt" "${CMAKE_CURRENT_BINARY_DIR}/symlink2" SYMBOLIC)
else()
    file(WRITE "${CMAKE_CURRENT_BINARY_DIR}/symlink2" "This is file 2")
endif()
install(FILES "${CMAKE_CURRENT_BINARY_DIR}/symlink2" DESTINATION "files" COMPONENT c1)

if(RunCMake_SUBTEST_SUFFIX STREQUAL "conflict_symlink" AND NOT CMAKE_HOST_WIN32)
    file(MAKE_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/conflict)
    file(CREATE_LINK "${CMAKE_CURRENT_BINARY_DIR}/1.txt" "${CMAKE_CURRENT_BINARY_DIR}/conflict/symlink2" SYMBOLIC)
    install(FILES "${CMAKE_CURRENT_BINARY_DIR}/conflict/symlink2" DESTINATION "files" COMPONENT c2)
elseif(RunCMake_SUBTEST_SUFFIX STREQUAL "conflict_symlink" AND CMAKE_HOST_WIN32)
    file(WRITE "${CMAKE_CURRENT_BINARY_DIR}/conflict/symlink2" "This should create a conflict.")
    install(FILES "${CMAKE_CURRENT_BINARY_DIR}/conflict/symlink2" DESTINATION "files" COMPONENT c2)
else()
    install(FILES "${CMAKE_CURRENT_BINARY_DIR}/symlink2" DESTINATION "files" COMPONENT c2)
endif ()


if(PACKAGING_TYPE STREQUAL "COMPONENT")
    set(CPACK_COMPONENTS_ALL_IN_ONE_PACKAGE ON)
    set(CPACK_COMPONENTS_ALL "c1;c2;c3;c4")
elseif(PACKAGING_TYPE STREQUAL "GROUP")
    set(CPACK_COMPONENTS_ONE_PACKAGE_PER_GROUP ON)
    set(CPACK_ARCHIVE_COMPONENT_INSTALL ON)
    include(CPackComponent)

    cpack_add_component_group(g1 DISPLAY_NAME "Group 1")
    cpack_add_component_group(g2 DISPLAY_NAME "Group 2")
    cpack_add_component(c1
            DISPLAY_NAME "Group 1"
            DESCRIPTION "Component for Group 1"
            GROUP g1
    )
    cpack_add_component(c2
            DISPLAY_NAME "Group 1"
            DESCRIPTION "Component for Group 1"
            GROUP g1
    )
    cpack_add_component(c3
            DISPLAY_NAME "Group 2"
            DESCRIPTION "Component for Group 2"
            GROUP g2
    )
    cpack_add_component(c4
            DISPLAY_NAME "Group 2"
            DESCRIPTION "Component for Group 2"
            GROUP g2
    )

    set(CPACK_${GENERATOR_TYPE}_PACKAGE_GROUP g1 g2)
endif ()