221 lines
7.1 KiB
CMake
221 lines
7.1 KiB
CMake
|
|
INCLUDE(ListHandle)
|
|
|
|
#---------------------------------------------------
|
|
# Macro: FILTER_OUT FILTERS INPUTS OUTPUT
|
|
#
|
|
# Mimicks Gnu Make's $(filter-out) which removes elements
|
|
# from a list that match the pattern.
|
|
# Arguments:
|
|
# FILTERS - list of patterns that need to be removed
|
|
# INPUTS - list of inputs that will be worked on
|
|
# OUTPUT - the filtered list to be returned
|
|
#
|
|
# Example:
|
|
# SET(MYLIST this that and the other)
|
|
# SET(FILTS this that)
|
|
#
|
|
# FILTER_OUT("${FILTS}" "${MYLIST}" OUT)
|
|
# MESSAGE("OUTPUT = ${OUT}")
|
|
#
|
|
# The output -
|
|
# OUTPUT = and;the;other
|
|
#
|
|
#---------------------------------------------------
|
|
MACRO(FILTER_OUT FILTERS INPUTS OUTPUT)
|
|
SET(FOUT "")
|
|
FOREACH(INP ${INPUTS})
|
|
SET(FILTERED 0)
|
|
|
|
FOREACH(FILT ${FILTERS})
|
|
IF(${FILTERED} EQUAL 0)
|
|
IF("${FILT}" STREQUAL "${INP}")
|
|
SET(FILTERED 1)
|
|
ENDIF()
|
|
ENDIF()
|
|
ENDFOREACH()
|
|
|
|
IF(${FILTERED} EQUAL 0)
|
|
SET(FOUT ${FOUT} ${INP})
|
|
ENDIF()
|
|
|
|
ENDFOREACH(INP ${INPUTS})
|
|
SET(${OUTPUT} ${FOUT})
|
|
ENDMACRO()
|
|
|
|
#---------------------------------------------------
|
|
# Macro: GET_HEADERS_EXTENSIONLESS DIR GLOB_PATTERN OUTPUT
|
|
#
|
|
#---------------------------------------------------
|
|
MACRO(GET_HEADERS_EXTENSIONLESS DIR GLOB_PATTERN OUTPUT)
|
|
FILE(GLOB TMP "${DIR}/${GLOB_PATTERN}" )
|
|
#FOREACH(F ${TMP})
|
|
# MESSAGE(STATUS "header-->${F}<--")
|
|
#ENDFOREACH(F ${TMP})
|
|
FILTER_OUT("${DIR}/CVS" "${TMP}" TMP)
|
|
FILTER_OUT("${DIR}/cvs" "${TMP}" ${OUTPUT})
|
|
FILTER_OUT("${DIR}/.svn" "${TMP}" ${OUTPUT})
|
|
ENDMACRO()
|
|
|
|
#---------------------------------------------------
|
|
# Macro: ADD_DIRS_TO_ENV_VAR _VARNAME
|
|
#
|
|
#---------------------------------------------------
|
|
|
|
MACRO(ADD_DIRS_TO_ENV_VAR _VARNAME )
|
|
FOREACH(_ADD_PATH ${ARGN})
|
|
FILE(TO_NATIVE_PATH ${_ADD_PATH} _ADD_NATIVE)
|
|
#SET(_CURR_ENV_PATH $ENV{PATH})
|
|
#LIST(SET _CURR_ENV_PATH ${_ADD_PATH})
|
|
#SET(ENV{PATH} ${_CURR_ENV_PATH})${_FILE}
|
|
IF(WIN32)
|
|
SET(ENV{${_VARNAME}} "$ENV{${_VARNAME}};${_ADD_NATIVE}")
|
|
ELSE()
|
|
SET(ENV{${_VARNAME}} "$ENV{${_VARNAME}}:${_ADD_NATIVE}")
|
|
ENDIF()
|
|
#MESSAGE(" env ${_VARNAME} --->$ENV{${_VARNAME}}<---")
|
|
ENDFOREACH()
|
|
ENDMACRO()
|
|
|
|
#---------------------------------------------------
|
|
# Macro: CORRECT_PATH VAR PATH
|
|
#
|
|
# Corrects slashes in PATH to be cmake conformous ( / )
|
|
# and puts result in VAR
|
|
#---------------------------------------------------
|
|
|
|
MACRO(CORRECT_PATH VAR PATH)
|
|
SET(${VAR} ${PATH})
|
|
IF(WIN32)
|
|
STRING(REGEX REPLACE "/" "\\\\" ${VAR} "${PATH}")
|
|
ENDIF()
|
|
ENDMACRO()
|
|
|
|
#---------------------------------------------------
|
|
# Macro: TARGET_LOCATIONS_SET_FILE FILE
|
|
# TODO: Ok, this seems a bit ridiculuous.
|
|
#---------------------------------------------------
|
|
|
|
MACRO(TARGET_LOCATIONS_SET_FILE FILE)
|
|
SET(ACCUM_FILE_TARGETS ${FILE})
|
|
FILE(WRITE ${ACCUM_FILE_TARGETS} "")
|
|
ENDMACRO()
|
|
|
|
#---------------------------------------------------
|
|
# Macro: TARGET_LOCATIONS_ACCUM TARGET_NAME
|
|
#
|
|
#---------------------------------------------------
|
|
|
|
MACRO(TARGET_LOCATIONS_ACCUM TARGET_NAME)
|
|
IF(ACCUM_FILE_TARGETS)
|
|
IF(EXISTS ${ACCUM_FILE_TARGETS})
|
|
GET_TARGET_PROPERTY(_FILE_LOCATION ${TARGET_NAME} LOCATION)
|
|
FILE(APPEND ${ACCUM_FILE_TARGETS} "${_FILE_LOCATION};")
|
|
#SET(_TARGETS_LIST ${_TARGETS_LIST} "${_FILE_LOCATION}" CACHE INTERNAL "lista dll")
|
|
#MESSAGE("adding target -->${TARGET_NAME}<-- file -->${_FILE_LOCATION}<-- to list -->${_TARGETS_LIST}<--")
|
|
#SET(ACCUM_FILE_TARGETS ${ACCUM_FILE_TARGETS} ${_FILE_LOCATION})
|
|
ENDIF()
|
|
ENDIF()
|
|
ENDMACRO()
|
|
|
|
#---------------------------------------------------
|
|
# Macro: TARGET_LOCATIONS_GET_LIST _VAR
|
|
#
|
|
#---------------------------------------------------
|
|
|
|
MACRO(TARGET_LOCATIONS_GET_LIST _VAR)
|
|
IF(ACCUM_FILE_TARGETS)
|
|
IF(EXISTS ${ACCUM_FILE_TARGETS})
|
|
FILE(READ ${ACCUM_FILE_TARGETS} ${_VAR})
|
|
ENDIF(EXISTS ${ACCUM_FILE_TARGETS})
|
|
ENDIF()
|
|
ENDMACRO()
|
|
|
|
#---------------------------------------------------
|
|
# Macro: FIND_DEPENDENCY DEPNAME INCLUDEFILE LIBRARY SEARCHPATHLIST
|
|
#
|
|
#---------------------------------------------------
|
|
|
|
MACRO(FIND_DEPENDENCY DEPNAME INCLUDEFILE LIBRARY SEARCHPATHLIST)
|
|
MESSAGE(STATUS "searching ${DEPNAME} -->${INCLUDEFILE}<-->${LIBRARY}<-->${SEARCHPATHLIST}<--")
|
|
|
|
SET(MY_PATH_INCLUDE )
|
|
SET(MY_PATH_LIB )
|
|
SET(MY_PATH_BIN )
|
|
|
|
FOREACH( MYPATH ${SEARCHPATHLIST} )
|
|
SET(MY_PATH_INCLUDE ${MY_PATH_INCLUDE} ${MYPATH}/include)
|
|
SET(MY_PATH_LIB ${MY_PATH_LIB} ${MYPATH}/lib)
|
|
SET(MY_PATH_BIN ${MY_PATH_BIN} ${MYPATH}/bin)
|
|
ENDFOREACH()
|
|
|
|
SET(MYLIBRARY "${LIBRARY}")
|
|
SEPARATE_ARGUMENTS(MYLIBRARY)
|
|
|
|
#MESSAGE( " include paths: -->${MY_PATH_INCLUDE}<--")
|
|
|
|
#MESSAGE( " ${DEPNAME}_INCLUDE_DIR --> ${${DEPNAME}_INCLUDE_DIR}<--")
|
|
|
|
FIND_PATH("${DEPNAME}_INCLUDE_DIR" ${INCLUDEFILE}
|
|
${MY_PATH_INCLUDE}
|
|
)
|
|
MARK_AS_ADVANCED("${DEPNAME}_INCLUDE_DIR")
|
|
#MESSAGE( " ${DEPNAME}_INCLUDE_DIR --> ${${DEPNAME}_INCLUDE_DIR}<--")
|
|
|
|
FIND_LIBRARY("${DEPNAME}_LIBRARY"
|
|
NAMES ${MYLIBRARY}
|
|
PATHS ${MY_PATH_LIB}
|
|
)
|
|
IF(${DEPNAME}_LIBRARY)
|
|
GET_FILENAME_COMPONENT(MYLIBNAME ${${DEPNAME}_LIBRARY} NAME_WE)
|
|
GET_FILENAME_COMPONENT(MYBINPATH ${${DEPNAME}_LIBRARY} PATH)
|
|
GET_FILENAME_COMPONENT(MYBINPATH ${MYBINPATH} PATH)
|
|
SET(MYBINPATH "${MYBINPATH}/bin")
|
|
IF(EXISTS ${MYBINPATH})
|
|
SET(MYFOUND 0)
|
|
FOREACH(MYPATH ${MY_ACCUM_BINARY_DEP})
|
|
IF(MYPATH MATCHES ${MYBINPATH})
|
|
SET(MYFOUND 1)
|
|
#MESSAGE("found -->${MYPATH}<-->${MYBINPATH}<--")
|
|
ENDIF()
|
|
ENDFOREACH()
|
|
IF(MYFOUND EQUAL 0)
|
|
SET(MY_ACCUM_BINARY_DEP ${MY_ACCUM_BINARY_DEP} ${MYBINPATH})
|
|
ENDIF()
|
|
ENDIF()
|
|
#MESSAGE("${DEPNAME}_BINDEP searching -->${MYLIBNAME}${CMAKE_SHARED_MODULE_SUFFIX}<--in-->${MY_PATH_BIN}<--")
|
|
# FIND_FILE("${DEPNAME}_BINDEP"
|
|
# ${MYLIBNAME}${CMAKE_SHARED_MODULE_SUFFIX}
|
|
# PATHS ${MY_PATH_BIN}
|
|
# )
|
|
# FIND_LIBRARY("${DEPNAME}_BINDEP"
|
|
# NAMES ${MYLIBRARY}
|
|
# PATHS ${MY_PATH_BIN}
|
|
# )
|
|
ENDIF()
|
|
|
|
MARK_AS_ADVANCED("${DEPNAME}_LIBRARY")
|
|
#MESSAGE( " ${DEPNAME}_LIBRARY --> ${${DEPNAME}_LIBRARY}<--")
|
|
IF(${DEPNAME}_INCLUDE_DIR)
|
|
IF(${DEPNAME}_LIBRARY)
|
|
SET( ${DEPNAME}_FOUND "YES" )
|
|
SET( ${DEPNAME}_LIBRARIES ${${DEPNAME}_LIBRARY} )
|
|
ENDIF()
|
|
ENDIF()
|
|
ENDMACRO()
|
|
|
|
#---------------------------------------------------
|
|
# Macro: MACRO_MESSAGE MYTEXT
|
|
#
|
|
#---------------------------------------------------
|
|
|
|
#SET(MACRO_MESSAGE_DEBUG TRUE)
|
|
MACRO(MACRO_MESSAGE MYTEXT)
|
|
IF(MACRO_MESSAGE_DEBUG)
|
|
MESSAGE("in file -->${CMAKE_CURRENT_LIST_FILE}<-- line -->${CMAKE_CURRENT_LIST_LINE}<-- message ${MYTEXT}")
|
|
ELSE()
|
|
MESSAGE(STATUS "in file -->${CMAKE_CURRENT_LIST_FILE}<-- line -->${CMAKE_CURRENT_LIST_LINE}<-- message ${MYTEXT}")
|
|
ENDIF()
|
|
ENDMACRO()
|
|
|