summaryrefslogtreecommitdiffstats
path: root/cmake_modules/InstallImported.cmake
blob: 740753c0fb232259a83d99c51df3bc5a2bfea86e (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
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
function (install_imported)

    cmake_parse_arguments (ARG "" "DESTINATION" "TARGETS" ${ARGN})

    if (NOT DEFINED ARG_DESTINATION)
        message (FATAL_ERROR "DESTINATION not defined")
    endif ()

    foreach (target ${ARG_TARGETS})

        get_target_property (location ${target} LOCATION)
        get_target_property (version ${target} VERSION)
        get_target_property (soversion ${target} SOVERSION)
        get_target_property (output_name ${target} OUTPUT_NAME)
        get_target_property (suffix ${target} SUFFIX)
        get_target_property (type ${target} TYPE)

        if (NOT ${type} STREQUAL "SHARED_LIBRARY")
            message (FATAL_ERROR "install_imported: ${type} not supported")
        endif ()

        if (${location} STREQUAL "${target}-NOTFOUND")
            return ()
        endif ()

        if (NOT ${version} STREQUAL "version-NOTFOUND")
            set (version ".${version}")
        else ()
            set (version "")
        endif ()

        if (NOT ${soversion} STREQUAL "soversion-NOTFOUND")
            set (soversion ".${soversion}")
        else ()
            set (soversion "")
        endif ()

        if (${output_name} STREQUAL "output_name-NOTFOUND")
            set (output_name ${target})
        endif ()

        set (name_noversion "${CMAKE_SHARED_LIBRARY_PREFIX}${output_name}${CMAKE_SHARED_LIBRARY_SUFFIX}")

        if (APPLE)
            set (name_version "${CMAKE_SHARED_LIBRARY_PREFIX}${output_name}${version}${CMAKE_SHARED_LIBRARY_SUFFIX}")
            set (name_soversion "${CMAKE_SHARED_LIBRARY_PREFIX}${output_name}${soversion}${CMAKE_SHARED_LIBRARY_SUFFIX}")
        else ()
            set (name_version "${CMAKE_SHARED_LIBRARY_PREFIX}${output_name}${CMAKE_SHARED_LIBRARY_SUFFIX}${version}")
            set (name_soversion "${CMAKE_SHARED_LIBRARY_PREFIX}${output_name}${CMAKE_SHARED_LIBRARY_SUFFIX}${soversion}")
        endif ()

        if (NOT IS_ABSOLUTE ${location})
            set (location ${CMAKE_CURRENT_SOURCE_DIR}/${location})
        endif ()

        if (NOT ${name_noversion} STREQUAL ${name_soversion})
            add_custom_command (
                OUTPUT ${name_noversion}
                COMMAND ${CMAKE_COMMAND} -E create_symlink ${name_soversion} ${name_noversion} WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}
                MAIN_DEPENDENCY ${name_soversion}
            )

            install (FILES ${CMAKE_CURRENT_BINARY_DIR}/${name_noversion} DESTINATION ${ARG_DESTINATION})
        endif ()

        if (NOT ${name_soversion} STREQUAL ${name_version})
            add_custom_command (
                OUTPUT ${name_soversion}
                COMMAND ${CMAKE_COMMAND} -E create_symlink ${name_version} ${name_soversion} WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}
                MAIN_DEPENDENCY ${name_version}
            )

            install (FILES ${CMAKE_CURRENT_BINARY_DIR}/${name_soversion} DESTINATION ${ARG_DESTINATION})
        endif ()

        add_custom_command (
            OUTPUT ${name_version}
            COMMAND ${CMAKE_COMMAND} -E copy "${location}" "${CMAKE_CURRENT_BINARY_DIR}/${name_version}"
            MAIN_DEPENDENCY ${location}
        )

        install (FILES ${CMAKE_CURRENT_BINARY_DIR}/${name_version} DESTINATION ${ARG_DESTINATION})

        add_custom_target(
            imported_${output_name} ALL
            DEPENDS ${name_version} ${name_noversion} ${name_soversion}
        )

    endforeach ()

endfunction ()