aboutsummaryrefslogtreecommitdiffstats
path: root/cmake/modules/FindVLD.cmake
blob: cc9cdd736bce7f9499b2844be69b595ba63d1624 (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
#
# - Find Visual Leak Detector
#
#  VLD_LINK_FLAGS - MSVC linker flags that enable VLD
#  VLD_FILES - files that should be copied to dll output directory
#  VLD_VALID - TRUE if Visual Leak Detector was found

set(_PF86 "PROGRAMFILES(x86)")
set(_vld_arch Win64)
set(_vld_dll vld_x64.dll)
set(_vld_pdb vld_x64.pdb)
if(WIRESHARK_TARGET_PLATFORM MATCHES "win32")
	set(_vld_arch Win32)
	set(_vld_dll vld_x86.dll)
	set(_vld_pdb vld_x86.pdb)
endif()

find_library(VLD_LIBRARY
	NAMES
		vld
	HINTS
		"$ENV{PROGRAMFILES}/Visual Leak Detector/lib/${_vld_arch}"
		"$ENV{${_PF86}}/Visual Leak Detector/lib/${_vld_arch}"
		"$ENV{PROGRAMW6432}/Visual Leak Detector/lib/${_vld_arch}"
)

function(find_vld_file _vld_file _filename)
	find_file(${_vld_file}
		NAMES
			${_filename}
		HINTS
			"$ENV{PROGRAMFILES}/Visual Leak Detector/bin/${_vld_arch}"
			"$ENV{${_PF86}}/Visual Leak Detector/bin/${_vld_arch}"
			"$ENV{PROGRAMW6432}/Visual Leak Detector/bin/${_vld_arch}"
	)
	if(${${_vld_file}} STREQUAL "${_vld_file}-NOTFOUND")
		set(${_vld_file} "" PARENT_SCOPE)
	endif()
endfunction()

find_vld_file(VLD_DLL ${_vld_dll})
find_vld_file(VLD_DBGHELP_DLL "dbghelp.dll")
find_vld_file(VLD_MANIFEST "Microsoft.DTfW.DHL.manifest")
find_vld_file(VLD_PDB ${_vld_pdb})

#library, dlls and manifest are mandatory, while pdb is optional
IF(VLD_LIBRARY AND (EXISTS ${VLD_DLL}) AND (EXISTS ${VLD_DBGHELP_DLL}) AND (EXISTS ${VLD_MANIFEST}))
	# Link against VLD library and force it to be linked by referencing symbol
	# Adding VLD_LINK_FLAGS to linker flags enables Visual Leak Detector
	set(VLD_LINK_FLAGS "\"${VLD_LIBRARY}\" /include:__imp_?g_vld@@3VVisualLeakDetector@@A")
	file(GLOB VLD_FILES
		"${VLD_DLL}"
		"${VLD_DBGHELP_DLL}"
		"${VLD_MANIFEST}"
		"${VLD_PDB}"
	)
	set(VLD_FOUND TRUE)
else()
	set(VLD_LINK_FLAGS)
	set(VLD_FILES)
	set(VLD_FOUND FALSE)
endif()