1
2INCLUDE(ListHandle)
3
4#---------------------------------------------------
5# Macro: FILTER_OUT FILTERS INPUTS OUTPUT
6#
7# Mimicks Gnu Make's $(filter-out) which removes elements
8# from a list that match the pattern.
9# Arguments:
10#  FILTERS - list of patterns that need to be removed
11#  INPUTS  - list of inputs that will be worked on
12#  OUTPUT  - the filtered list to be returned
13#
14# Example:
15#  SET(MYLIST this that and the other)
16#  SET(FILTS this that)
17#
18#  FILTER_OUT("${FILTS}" "${MYLIST}" OUT)
19#  MESSAGE("OUTPUT = ${OUT}")
20#
21# The output -
22#   OUTPUT = and;the;other
23#
24#---------------------------------------------------
25MACRO(FILTER_OUT FILTERS INPUTS OUTPUT)
26    SET(FOUT "")
27    FOREACH(INP ${INPUTS})
28        SET(FILTERED 0)
29
30        FOREACH(FILT ${FILTERS})
31            IF(${FILTERED} EQUAL 0)
32                IF("${FILT}" STREQUAL "${INP}")
33                    SET(FILTERED 1)
34                ENDIF()
35            ENDIF()
36        ENDFOREACH()
37
38        IF(${FILTERED} EQUAL 0)
39            SET(FOUT ${FOUT} ${INP})
40        ENDIF()
41
42    ENDFOREACH(INP ${INPUTS})
43    SET(${OUTPUT} ${FOUT})
44ENDMACRO()
45
46#---------------------------------------------------
47# Macro: GET_HEADERS_EXTENSIONLESS DIR GLOB_PATTERN OUTPUT
48#
49#---------------------------------------------------
50MACRO(GET_HEADERS_EXTENSIONLESS DIR GLOB_PATTERN OUTPUT)
51    FILE(GLOB TMP "${DIR}/${GLOB_PATTERN}" )
52    #FOREACH(F ${TMP})
53    #    MESSAGE(STATUS "header-->${F}<--")
54    #ENDFOREACH(F ${TMP})
55    FILTER_OUT("${DIR}/CVS" "${TMP}" TMP)
56    FILTER_OUT("${DIR}/cvs" "${TMP}" ${OUTPUT})
57    FILTER_OUT("${DIR}/.svn" "${TMP}" ${OUTPUT})
58ENDMACRO()
59
60#---------------------------------------------------
61# Macro: ADD_DIRS_TO_ENV_VAR _VARNAME
62#
63#---------------------------------------------------
64
65MACRO(ADD_DIRS_TO_ENV_VAR _VARNAME )
66    FOREACH(_ADD_PATH ${ARGN})
67        FILE(TO_NATIVE_PATH ${_ADD_PATH} _ADD_NATIVE)
68        #SET(_CURR_ENV_PATH $ENV{PATH})
69        #LIST(SET _CURR_ENV_PATH ${_ADD_PATH})
70        #SET(ENV{PATH} ${_CURR_ENV_PATH})${_FILE}
71        IF(WIN32)
72            SET(ENV{${_VARNAME}} "$ENV{${_VARNAME}};${_ADD_NATIVE}")
73        ELSE()
74            SET(ENV{${_VARNAME}} "$ENV{${_VARNAME}}:${_ADD_NATIVE}")
75        ENDIF()
76        #MESSAGE(" env ${_VARNAME} --->$ENV{${_VARNAME}}<---")
77    ENDFOREACH()
78ENDMACRO()
79
80#---------------------------------------------------
81# Macro: CORRECT_PATH VAR PATH
82#
83# Corrects slashes in PATH to be cmake conformous ( / )
84# and puts result in VAR
85#---------------------------------------------------
86
87MACRO(CORRECT_PATH VAR PATH)
88    SET(${VAR} ${PATH})
89    IF(WIN32)
90        STRING(REGEX REPLACE "/" "\\\\" ${VAR} "${PATH}")
91    ENDIF()
92ENDMACRO()
93
94#---------------------------------------------------
95# Macro: TARGET_LOCATIONS_SET_FILE FILE
96# TODO: Ok, this seems a bit ridiculuous.
97#---------------------------------------------------
98
99MACRO(TARGET_LOCATIONS_SET_FILE FILE)
100    SET(ACCUM_FILE_TARGETS ${FILE})
101    FILE(WRITE ${ACCUM_FILE_TARGETS} "")
102ENDMACRO()
103
104#---------------------------------------------------
105# Macro: TARGET_LOCATIONS_ACCUM TARGET_NAME
106#
107#---------------------------------------------------
108
109MACRO(TARGET_LOCATIONS_ACCUM TARGET_NAME)
110    IF(ACCUM_FILE_TARGETS)
111        IF(EXISTS ${ACCUM_FILE_TARGETS})
112            GET_TARGET_PROPERTY(_FILE_LOCATION ${TARGET_NAME} LOCATION)
113            FILE(APPEND ${ACCUM_FILE_TARGETS} "${_FILE_LOCATION};")
114            #SET(_TARGETS_LIST ${_TARGETS_LIST} "${_FILE_LOCATION}" CACHE INTERNAL "lista dll")
115            #MESSAGE("adding target -->${TARGET_NAME}<-- file -->${_FILE_LOCATION}<-- to list -->${_TARGETS_LIST}<--")
116            #SET(ACCUM_FILE_TARGETS ${ACCUM_FILE_TARGETS} ${_FILE_LOCATION})
117        ENDIF()
118    ENDIF()
119ENDMACRO()
120
121#---------------------------------------------------
122# Macro: TARGET_LOCATIONS_GET_LIST _VAR
123#
124#---------------------------------------------------
125
126MACRO(TARGET_LOCATIONS_GET_LIST _VAR)
127    IF(ACCUM_FILE_TARGETS)
128        IF(EXISTS ${ACCUM_FILE_TARGETS})
129            FILE(READ ${ACCUM_FILE_TARGETS} ${_VAR})
130        ENDIF(EXISTS ${ACCUM_FILE_TARGETS})
131    ENDIF()
132ENDMACRO()
133
134#---------------------------------------------------
135# Macro: FIND_DEPENDENCY DEPNAME INCLUDEFILE LIBRARY SEARCHPATHLIST
136#
137#---------------------------------------------------
138
139MACRO(FIND_DEPENDENCY DEPNAME INCLUDEFILE LIBRARY SEARCHPATHLIST)
140    MESSAGE(STATUS "searching ${DEPNAME} -->${INCLUDEFILE}<-->${LIBRARY}<-->${SEARCHPATHLIST}<--")
141
142    SET(MY_PATH_INCLUDE )
143    SET(MY_PATH_LIB )
144    SET(MY_PATH_BIN )
145
146    FOREACH( MYPATH ${SEARCHPATHLIST} )
147        SET(MY_PATH_INCLUDE ${MY_PATH_INCLUDE} ${MYPATH}/include)
148        SET(MY_PATH_LIB ${MY_PATH_LIB} ${MYPATH}/lib)
149        SET(MY_PATH_BIN ${MY_PATH_BIN} ${MYPATH}/bin)
150    ENDFOREACH()
151
152    SET(MYLIBRARY "${LIBRARY}")
153    SEPARATE_ARGUMENTS(MYLIBRARY)
154
155    #MESSAGE( " include paths: -->${MY_PATH_INCLUDE}<--")
156
157    #MESSAGE( " ${DEPNAME}_INCLUDE_DIR --> ${${DEPNAME}_INCLUDE_DIR}<--")
158
159    FIND_PATH("${DEPNAME}_INCLUDE_DIR" ${INCLUDEFILE}
160        ${MY_PATH_INCLUDE}
161        )
162    MARK_AS_ADVANCED("${DEPNAME}_INCLUDE_DIR")
163    #MESSAGE( " ${DEPNAME}_INCLUDE_DIR --> ${${DEPNAME}_INCLUDE_DIR}<--")
164
165    FIND_LIBRARY("${DEPNAME}_LIBRARY"
166        NAMES ${MYLIBRARY}
167        PATHS ${MY_PATH_LIB}
168        )
169    IF(${DEPNAME}_LIBRARY)
170        GET_FILENAME_COMPONENT(MYLIBNAME ${${DEPNAME}_LIBRARY} NAME_WE)
171        GET_FILENAME_COMPONENT(MYBINPATH ${${DEPNAME}_LIBRARY} PATH)
172        GET_FILENAME_COMPONENT(MYBINPATH ${MYBINPATH} PATH)
173        SET(MYBINPATH "${MYBINPATH}/bin")
174        IF(EXISTS ${MYBINPATH})
175            SET(MYFOUND 0)
176            FOREACH(MYPATH ${MY_ACCUM_BINARY_DEP})
177                IF(MYPATH MATCHES ${MYBINPATH})
178                    SET(MYFOUND 1)
179                    #MESSAGE("found -->${MYPATH}<-->${MYBINPATH}<--")
180                ENDIF()
181            ENDFOREACH()
182            IF(MYFOUND EQUAL 0)
183                SET(MY_ACCUM_BINARY_DEP ${MY_ACCUM_BINARY_DEP} ${MYBINPATH})
184            ENDIF()
185        ENDIF()
186        #MESSAGE("${DEPNAME}_BINDEP searching -->${MYLIBNAME}${CMAKE_SHARED_MODULE_SUFFIX}<--in-->${MY_PATH_BIN}<--")
187        #    FIND_FILE("${DEPNAME}_BINDEP"
188        #        ${MYLIBNAME}${CMAKE_SHARED_MODULE_SUFFIX}
189        #      PATHS ${MY_PATH_BIN}
190        #    )
191        #    FIND_LIBRARY("${DEPNAME}_BINDEP"
192        #        NAMES ${MYLIBRARY}
193        #      PATHS ${MY_PATH_BIN}
194        #    )
195    ENDIF()
196
197    MARK_AS_ADVANCED("${DEPNAME}_LIBRARY")
198    #MESSAGE( " ${DEPNAME}_LIBRARY --> ${${DEPNAME}_LIBRARY}<--")
199    IF(${DEPNAME}_INCLUDE_DIR)
200        IF(${DEPNAME}_LIBRARY)
201            SET( ${DEPNAME}_FOUND "YES" )
202            SET( ${DEPNAME}_LIBRARIES ${${DEPNAME}_LIBRARY} )
203        ENDIF()
204    ENDIF()
205ENDMACRO()
206
207#---------------------------------------------------
208# Macro: MACRO_MESSAGE MYTEXT
209#
210#---------------------------------------------------
211
212#SET(MACRO_MESSAGE_DEBUG TRUE)
213MACRO(MACRO_MESSAGE MYTEXT)
214    IF(MACRO_MESSAGE_DEBUG)
215        MESSAGE("in file -->${CMAKE_CURRENT_LIST_FILE}<-- line -->${CMAKE_CURRENT_LIST_LINE}<-- message  ${MYTEXT}")
216    ELSE()
217        MESSAGE(STATUS "in file -->${CMAKE_CURRENT_LIST_FILE}<-- line -->${CMAKE_CURRENT_LIST_LINE}<-- message  ${MYTEXT}")
218    ENDIF()
219ENDMACRO()
220
221