13
13
# To provide a hint to this module where to find the mallocMC installation,
14
14
# set the MALLOCMC_ROOT environment variable. You can also set the
15
15
# MALLOCMC_ROOT CMake variable, which will take precedence over the environment
16
- # variable.
16
+ # variable. Boths hints are preferred over the DEFAULT_PATHS.
17
17
#
18
18
# This module requires CUDA and Boost. When calling it, make sure to call
19
19
# find_package(CUDA) and find_package(Boost) first.
22
22
# mallocMC_INCLUDE_DIRS - Include directories for the mallocMC headers.
23
23
# mallocMC_FOUND - TRUE if FindmallocMC found a working install
24
24
# mallocMC_VERSION - Version in format Major.Minor.Patch
25
+ # and for individual COMPONENTS:
26
+ # mallocMC_<COMPONENT>_FOUND - TRUE if FindmallocMC found that component
25
27
#
26
28
# The following variables are optional and only defined if the selected
27
29
# components require them:
52
54
53
55
# Required cmake version ######################################################
54
56
#
55
- cmake_minimum_required (VERSION 2.8.5 )
56
-
57
-
58
- # mallocMC ####################################################################
59
- #
60
- set (mallocMC_FOUND TRUE )
57
+ cmake_minimum_required (VERSION 2.8.12.2 )
61
58
62
59
63
60
# dependencies ################################################################
@@ -73,14 +70,22 @@ find_path(mallocMC_ROOT_DIR
73
70
PATHS ${MALLOCMC_ROOT} ENV MALLOCMC_ROOT
74
71
PATH_SUFFIXES "src"
75
72
DOC "mallocMC ROOT location"
76
- )
73
+ NO_DEFAULT_PATH
74
+ )
75
+ find_path (mallocMC_ROOT_DIR
76
+ NAMES include /mallocMC/mallocMC.hpp
77
+ PATH_SUFFIXES "src"
78
+ DOC "mallocMC ROOT location"
79
+ )
77
80
78
81
set (mallocMC_REQUIRED_VARS_LIST mallocMC_ROOT_DIR mallocMC_INCLUDE_DIRS )
82
+ mark_as_advanced (mallocMC_ROOT_DIR )
79
83
80
84
if (mallocMC_ROOT_DIR )
81
85
82
86
# find version ##############################################################
83
87
#
88
+ # to do: regex me
84
89
file (STRINGS "${mallocMC_ROOT_DIR} /include/mallocMC/version.hpp"
85
90
mallocMC_VERSION_MAJOR_HPP REGEX "#define MALLOCMC_VERSION_MAJOR " )
86
91
file (STRINGS "${mallocMC_ROOT_DIR} /include/mallocMC/version.hpp"
@@ -93,10 +98,17 @@ if(mallocMC_ROOT_DIR)
93
98
${mallocMC_VERSION_MINOR_HPP} )
94
99
string (REGEX MATCH "([0-9]+)" mallocMC_VERSION_PATCH
95
100
${mallocMC_VERSION_PATCH_HPP} )
101
+ unset (mallocMC_VERSION_MAJOR_HPP )
102
+ unset (mallocMC_VERSION_MINOR_HPP )
103
+ unset (mallocMC_VERSION_PATCH_HPP )
96
104
97
105
# mallocMC variables ########################################################
98
106
#
99
107
set (mallocMC_VERSION "${mallocMC_VERSION_MAJOR} .${mallocMC_VERSION_MINOR} .${mallocMC_VERSION_PATCH} " )
108
+ unset (mallocMC_VERSION_MAJOR )
109
+ unset (mallocMC_VERSION_MINOR )
110
+ unset (mallocMC_VERSION_PATCH )
111
+
100
112
set (mallocMC_INCLUDE_DIRS ${mallocMC_ROOT_DIR} /include )
101
113
102
114
# check additional components ###############################################
@@ -109,39 +121,54 @@ if(mallocMC_ROOT_DIR)
109
121
# halloc linked library #################################################
110
122
#
111
123
list (APPEND mallocMC_REQUIRED_VARS_LIST mallocMC_LIBRARIES )
112
- find_library (${COMPONENT} _LIBRARY
124
+ find_library (mallocMC_ ${COMPONENT}_LIBRARY
113
125
NAMES libhalloc.a
114
- PATHS "${mallocMC_ROOT_DIR} /../halloc/" ENV HALLOC_ROOT
126
+ PATHS ${HALLOC_ROOT} "${mallocMC_ROOT_DIR} /../halloc/" ENV HALLOC_ROOT
115
127
PATH_SUFFIXES "lib" "bin"
116
- )
117
- if (${COMPONENT} _LIBRARY )
118
- list (APPEND mallocMC_LIBRARIES ${${COMPONENT}_LIBRARY} )
119
- else (${COMPONENT} _LIBRARY )
128
+ DOC "Libraries for the mallocMC component ${COMPONENT} ."
129
+ NO_DEFAULT_PATH
130
+ )
131
+ find_library (mallocMC_${COMPONENT}_LIBRARY
132
+ NAMES libhalloc.a
133
+ PATH_SUFFIXES "lib" "bin"
134
+ DOC "Libraries for the mallocMC component ${COMPONENT} ."
135
+ )
136
+ if (mallocMC_${COMPONENT}_LIBRARY )
137
+ list (APPEND mallocMC_LIBRARIES ${mallocMC_${COMPONENT}_LIBRARY} )
138
+ else (mallocMC_${COMPONENT}_LIBRARY )
120
139
if (mallocMC_FIND_REQUIRED OR NOT mallocMC_FIND_QUIETLY )
121
140
message (WARNING "libhalloc.a not found. Ensure it is compiled correctly and set HALLOC_ROOT" )
122
141
endif ()
123
- set (mallocMC_${COMPONENT}_FOUND FALSE )
124
- endif (${COMPONENT} _LIBRARY )
142
+ unset (mallocMC_${COMPONENT}_FOUND )
143
+ endif (mallocMC_ ${COMPONENT}_LIBRARY )
125
144
126
145
# halloc headers ########################################################
127
146
#
128
- find_path (${COMPONENT} _INCLUDE_DIR
147
+ find_path (mallocMC_${COMPONENT}_INCLUDE_DIR
148
+ NAMES halloc.h
149
+ PATHS ${HALLOC_ROOT} "${mallocMC_ROOT_DIR} /../halloc/" ENV HALLOC_ROOT
150
+ PATH_SUFFIXES "include" "src"
151
+ DOC "Includes for the mallocMC component ${COMPONENT} ."
152
+ NO_DEFAULT_PATH
153
+ )
154
+ find_path (mallocMC_${COMPONENT}_INCLUDE_DIR
129
155
NAMES halloc.h
130
- PATHS "${mallocMC_ROOT_DIR} /../halloc/" ENV HALLOC_ROOT
131
156
PATH_SUFFIXES "include" "src"
132
- )
133
- if (${COMPONENT} _INCLUDE_DIR )
134
- list (APPEND mallocMC_INCLUDE_DIRS ${${COMPONENT}_INCLUDE_DIR} )
135
- else (${COMPONENT} _INCLUDE_DIR )
136
- set (mallocMC_${COMPONENT}_FOUND FALSE )
137
- endif (${COMPONENT} _INCLUDE_DIR )
157
+ DOC "Includes for the mallocMC component ${COMPONENT} ."
158
+ )
159
+ if (mallocMC_${COMPONENT}_INCLUDE_DIR )
160
+ list (APPEND mallocMC_INCLUDE_DIRS ${mallocMC_${COMPONENT}_INCLUDE_DIR} )
161
+ else (mallocMC_${COMPONENT}_INCLUDE_DIR )
162
+ unset (mallocMC_${COMPONENT}_FOUND )
163
+ endif (mallocMC_${COMPONENT}_INCLUDE_DIR )
138
164
139
165
# set separable compilation #############################################
140
166
#
141
167
if (mallocMC_${COMPONENT}_FOUND )
142
168
set (CUDA_SEPARABLE_COMPILATION ON PARENT_SCOPE )
143
169
endif (mallocMC_${COMPONENT}_FOUND )
144
170
171
+ mark_as_advanced (mallocMC_${COMPONENT}_INCLUDE_DIR mallocMC_${COMPONENT}_LIBRARY )
145
172
endif (${COMPONENT} STREQUAL "halloc" )
146
173
147
174
endforeach (COMPONENT ${mallocMC_FIND_COMPONENTS} )
@@ -158,5 +185,27 @@ find_package_handle_standard_args(mallocMC
158
185
REQUIRED_VARS ${mallocMC_REQUIRED_VARS_LIST}
159
186
VERSION_VAR mallocMC_VERSION
160
187
HANDLE_COMPONENTS
161
- )
188
+ )
189
+
190
+ # clean up
191
+ #
192
+ # unset cached variables in case we did not find a valid install
193
+ # (e.g., we only found an outdated version)
194
+ if (NOT mallocMC_FOUND )
195
+ # default vars
196
+ unset (mallocMC_VERSION )
197
+ foreach (REQ_VAR ${mallocMC_REQUIRED_VARS_LIST} )
198
+ unset (${REQ_VAR} )
199
+ unset (${REQ_VAR} CACHE )
200
+ endforeach ()
201
+
202
+ # user-level component vars
203
+ foreach (COMPONENT ${mallocMC_FIND_COMPONENTS} )
204
+ unset (mallocMC_${COMPONENT}_FOUND )
205
+ unset (mallocMC_${COMPONENT}_LIBRARY CACHE )
206
+ unset (mallocMC_${COMPONENT}_INCLUDE_DIR CACHE )
207
+ endforeach ()
208
+ endif ()
209
+
210
+ # always clean internal required vars list
162
211
unset (mallocMC_REQUIRED_VARS_LIST )
0 commit comments