aboutsummaryrefslogtreecommitdiff
path: root/scripts/cmake/vcpkg_copy_tool_dependencies.cmake
blob: 0cb0bbcefbf48de8d5ada67b6d63b924284513b4 (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
#[===[.md:
# vcpkg_copy_tool_dependencies

Copy all DLL dependencies of built tools into the tool folder.

## Usage
```cmake
vcpkg_copy_tool_dependencies(<${CURRENT_PACKAGES_DIR}/tools/${PORT}>)
```
## Parameters
The path to the directory containing the tools.

## Notes
This command should always be called by portfiles after they have finished rearranging the binary output, if they have any tools.

## Examples

* [glib](https://github.com/Microsoft/vcpkg/blob/master/ports/glib/portfile.cmake)
* [fltk](https://github.com/Microsoft/vcpkg/blob/master/ports/fltk/portfile.cmake)
#]===]

function(vcpkg_copy_tool_dependencies TOOL_DIR)
    if (VCPKG_TARGET_IS_WINDOWS)
        find_program(PWSH_EXE pwsh)
        if (NOT PWSH_EXE)
            if(UNIX AND NOT CYGWIN)
                message(FATAL_ERROR "Could not find PowerShell Core; install PowerShell Core as described here: https://docs.microsoft.com/en-us/powershell/scripting/install/installing-powershell-core-on-linux")
            endif()
            message(FATAL_ERROR "Could not find PowerShell Core; please open an issue to report this.")
        endif()
        macro(search_for_dependencies PATH_TO_SEARCH)
            file(GLOB TOOLS "${TOOL_DIR}/*.exe" "${TOOL_DIR}/*.dll" "${TOOL_DIR}/*.pyd")
            foreach(TOOL IN LISTS TOOLS)
                vcpkg_execute_required_process(
                    COMMAND "${PWSH_EXE}" -noprofile -executionpolicy Bypass -nologo
                        -file "${SCRIPTS}/buildsystems/msbuild/applocal.ps1"
                        -targetBinary "${TOOL}"
                        -installedDir "${PATH_TO_SEARCH}"
                    WORKING_DIRECTORY "${VCPKG_ROOT_DIR}"
                    LOGNAME copy-tool-dependencies
                )
            endforeach()
        endmacro()
        search_for_dependencies("${CURRENT_PACKAGES_DIR}/bin")
        search_for_dependencies("${CURRENT_INSTALLED_DIR}/bin")
    endif()
endfunction()