GetPrerequisites: Exclude delay load dependencies on Windows

With some Windows toolchains we use `objdump` which does not mention
delay load dependencies in its output.  Therefore, to get consistent
behavior we should always ignore them.

Use the `dumpbin` message "Image has the following delay load
dependencies" that precedes the delay load dependencies to recognize and
skip them.  Fortunately, this message is not translated to the current
locale (at least on "Windows 7 French", "Windows 10 French" and "Windows
Server 2008 R2 French").

Fixes: #16241
This commit is contained in:
Pascal Thomet
2016-12-22 12:28:26 +01:00
committed by Brad King
parent 65c18b2141
commit a7c5d5fb0e

View File

@@ -810,6 +810,20 @@ function(get_prerequisites target prerequisites_var exclude_system recurse exepa
OUTPUT_VARIABLE gp_cmd_ov
ERROR_VARIABLE gp_ev
)
if(gp_tool STREQUAL "dumpbin")
# Exclude delay load dependencies under windows (they are listed in dumpbin output after the message below)
string(FIND "${gp_cmd_ov}" "Image has the following delay load dependencies" gp_delayload_pos)
if (${gp_delayload_pos} GREATER -1)
string(SUBSTRING "${gp_cmd_ov}" 0 ${gp_delayload_pos} gp_cmd_ov_no_delayload_deps)
string(SUBSTRING "${gp_cmd_ov}" ${gp_delayload_pos} -1 gp_cmd_ov_delayload_deps)
if (verbose)
message(STATUS "GetPrequisites(${target}) : ignoring the following delay load dependencies :\n ${gp_cmd_ov_delayload_deps}")
endif()
set(gp_cmd_ov ${gp_cmd_ov_no_delayload_deps})
endif()
endif()
if(NOT gp_rv STREQUAL "0")
if(gp_tool STREQUAL "dumpbin")
# dumpbin error messages seem to go to stdout