summaryrefslogtreecommitdiffstats
path: root/CMakeLists.txt
diff options
context:
space:
mode:
authorVsevolod Stakhov <vsevolod@highsecure.ru>2015-07-07 19:16:26 +0100
committerVsevolod Stakhov <vsevolod@highsecure.ru>2015-07-07 19:16:26 +0100
commit8e6dc6924ac62dc9d8c3ac8cb9f75a4f05a8da78 (patch)
tree5807b4d24806e3a1f4c6447f8536cfd32a07691b /CMakeLists.txt
parent3c0c3bf0926c0cc1f0b76f3714b2979256d1c0a6 (diff)
downloadrspamd-8e6dc6924ac62dc9d8c3ac8cb9f75a4f05a8da78.tar.gz
rspamd-8e6dc6924ac62dc9d8c3ac8cb9f75a4f05a8da78.zip
Rework ProcessPackage macro.
Diffstat (limited to 'CMakeLists.txt')
-rw-r--r--CMakeLists.txt181
1 files changed, 75 insertions, 106 deletions
diff --git a/CMakeLists.txt b/CMakeLists.txt
index 4ac511a3d..9b5eaa348 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -263,115 +263,84 @@ ENDFUNCTION(INSTALL_IF_NOT_EXISTS)
# Process required package by using FindPackage and calling for INCLUDE_DIRECTORIES and
# setting list of required libraries
-MACRO(ProcessPackage var _name0)
- IF(NOT RSPAMD_SEARCH_PATH)
- PKG_SEARCH_MODULE(${var} "${_name0}" ${ARGN})
- IF(${var}_FOUND)
- SET(WITH_${var} 1)
- IF(ENABLE_STATIC MATCHES "ON")
- SET(_XPREFIX "${var}_STATIC")
- ELSE(ENABLE_STATIC MATCHES "ON")
- SET(_XPREFIX "${var}")
- ENDIF(ENABLE_STATIC MATCHES "ON")
- FOREACH(_arg ${${_XPREFIX}_INCLUDE_DIRS})
- INCLUDE_DIRECTORIES("${_arg}")
- SET(${var}_INCLUDE "${_arg}")
- ENDFOREACH(_arg ${${_XPREFIX}_INCLUDE_DIRS})
- FOREACH(_arg ${${_XPREFIX}_LIBRARY_DIRS})
- LINK_DIRECTORIES("${_arg}")
- SET(${var}_LIBRARY "${_arg}")
- ENDFOREACH(_arg ${${_XPREFIX}_LIBRARY_DIRS})
- # Handle other CFLAGS and LDFLAGS
- FOREACH(_arg ${${_XPREFIX}_CFLAGS_OTHER})
- SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${_arg}")
- ENDFOREACH(_arg ${${_XPREFIX}_CFLAGS_OTHER})
- FOREACH(_arg ${${_XPREFIX}_LDFLAGS_OTHER})
- SET(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} ${_arg}")
- ENDFOREACH(_arg ${${_XPREFIX}_LDFLAGS_OTHER})
- LIST(APPEND RSPAMD_REQUIRED_LIBRARIES "${${_XPREFIX}_LIBRARIES}")
- ELSE(${var}_FOUND)
- # Try some more heuristic
- FIND_LIBRARY(_lib NAMES "${_name0}" ${ARGN}
- HINTS
- "${RSPAMD_SEARCH_PATH}"
- PATH_SUFFIXES lib64 lib
- PATHS ${RSPAMD_DEFAULT_LIBRARY_PATHS})
- IF(NOT _lib)
- MESSAGE(FATAL_ERROR "Packages ${_name0} ${ARGN} could not be found, no library")
- ENDIF(NOT _lib)
-
- FIND_PATH(_incl "${_name0}.h"
- HINTS "${RSPAMD_SEARCH_PATH}"
- PATH_SUFFIXES "include" "include/${_name0}" ${ARGN}
- PATHS ${RSPAMD_DEFAULT_INCLUDE_PATHS})
- IF(NOT _incl)
- MESSAGE(FATAL_ERROR "Packages ${_name0} ${ARGN} could not be found, no header")
- ENDIF(NOT _incl)
-
- GET_FILENAME_COMPONENT(_lib_path "${_lib}" PATH)
- INCLUDE_DIRECTORIES("${_incl}")
- LINK_DIRECTORIES("${_lib_path}")
- LIST(APPEND RSPAMD_REQUIRED_LIBRARIES ${_lib})
- SET(${var}_INCLUDE "${_incl}")
- SET(${var}_LIBRARY "${_lib_path}")
- MESSAGE(STATUS "Found ${_name0} ${ARGN} in '${_lib_path}' (library) and '${_incl}' (include).")
- ENDIF(${var}_FOUND)
- ELSE(NOT RSPAMD_SEARCH_PATH)
- # Try heuristic first
- FIND_LIBRARY(_lib NAMES "${_name0}" ${ARGN}
+# Usage:
+# ProcessPackage(VAR [OPTIONAL] [ROOT path] [INCLUDE path]
+# [LIBRARY path] [INCLUDE_SUFFIXES path1 path2 ...] [LIB_SUFFIXES path1 path2 ...]
+# [MODULES module1 module2 ...])
+# params:
+# OPTIONAL - do not fail if a package has not been found
+# ROOT - defines root directory for a package
+# INCLUDE - name of the include file to check
+# LIBRARY - name of the library to check
+# INCLUDE_SUFFIXES - list of include suffixes (relative to ROOT)
+# LIB_SUFFIXES - list of library suffixes
+# MODULES - modules to search using pkg_config
+MACRO(ProcessPackage PKG_NAME)
+ CMAKE_PARSE_ARGUMENTS(PKG "OPTIONAL" "ROOT;INCLUDE;LIBRARY" "INCLUDE_SUFFIXES;LIB_SUFFIXES;MODULES" ${ARGN})
+ IF(NOT PKG_NAME)
+ MESSAGE(FATAL_ERROR "No package name specified")
+ ENDIF()
+ IF(NOT PKG_LIBRARY)
+ SET(PKG_LIBRARY "${PKG_NAME}")
+ ENDIF()
+ IF(NOT PKG_INCLUDE)
+ SET(PKG_INCLUDE "${PKG_NAME}.h")
+ ENDIF()
+
+ IF(NOT PKG_ROOT AND PKG_MODULES)
+ PKG_SEARCH_MODULE(${PKG_NAME} ${PKG_MODULES})
+ ENDIF()
+
+ IF(${PKG_NAME}_FOUND)
+ SET(WITH_${PKG_NAME} 1)
+ IF(ENABLE_STATIC MATCHES "ON")
+ SET(_XPREFIX "${PKG_NAME}_STATIC")
+ ELSE(ENABLE_STATIC MATCHES "ON")
+ SET(_XPREFIX "${PKG_NAME}")
+ ENDIF(ENABLE_STATIC MATCHES "ON")
+ FOREACH(_arg ${${_XPREFIX}_INCLUDE_DIRS})
+ INCLUDE_DIRECTORIES("${_arg}")
+ SET(${var}_INCLUDE "${_arg}")
+ ENDFOREACH(_arg ${${_XPREFIX}_INCLUDE_DIRS})
+ FOREACH(_arg ${${_XPREFIX}_LIBRARY_DIRS})
+ LINK_DIRECTORIES("${_arg}")
+ SET(${var}_LIBRARY "${_arg}")
+ ENDFOREACH(_arg ${${_XPREFIX}_LIBRARY_DIRS})
+ # Handle other CFLAGS and LDFLAGS
+ FOREACH(_arg ${${_XPREFIX}_CFLAGS_OTHER})
+ SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${_arg}")
+ ENDFOREACH(_arg ${${_XPREFIX}_CFLAGS_OTHER})
+ FOREACH(_arg ${${_XPREFIX}_LDFLAGS_OTHER})
+ SET(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} ${_arg}")
+ ENDFOREACH(_arg ${${_XPREFIX}_LDFLAGS_OTHER})
+ LIST(APPEND RSPAMD_REQUIRED_LIBRARIES "${${_XPREFIX}_LIBRARIES}")
+ ELSE()
+ # Try some more heuristic
+ FIND_LIBRARY(_lib NAMES ${PKG_LIBRARY}
HINTS
- "${RSPAMD_SEARCH_PATH}"
- PATH_SUFFIXES lib64 lib
+ "${PKG_ROOT}" "${RSPAMD_SEARCH_PATH}"
+ PATH_SUFFIXES "${PKG_LIB_SUFFIXES}" lib64 lib
PATHS ${RSPAMD_DEFAULT_LIBRARY_PATHS})
- IF(_lib)
- FIND_PATH(_incl "${_name0}.h"
- HINTS "${RSPAMD_SEARCH_PATH}"
- PATH_SUFFIXES "include" "include/${_name0}" ${ARGN}
- PATHS ${RSPAMD_DEFAULT_INCLUDE_PATHS})
- IF(_incl)
- GET_FILENAME_COMPONENT(_lib_path "${_lib}" PATH)
- INCLUDE_DIRECTORIES("${_incl}")
- LINK_DIRECTORIES("${_lib_path}")
- MESSAGE(STATUS "Found ${_name0} ${ARGN} in '${_lib_path}' (library) and '${_incl}' (include).")
- SET(${var}_INCLUDE "${_incl}")
- SET(${var}_LIBRARY "${_lib_path}")
- LIST(APPEND RSPAMD_REQUIRED_LIBRARIES ${_lib})
- ENDIF(_incl)
- ENDIF(_lib)
+ IF(NOT _lib)
+ MESSAGE(FATAL_ERROR "Cannot find library ${PKG_LIBRARY} for package ${PKG_NAME}")
+ ENDIF(NOT _lib)
+
+ FIND_PATH(_incl "${PKG_INCLUDE}"
+ HINTS "${PKG_ROOT}" "${RSPAMD_SEARCH_PATH}"
+ PATH_SUFFIXES "${PKG_INCLUDE_SUFFIXES}" "include"
+ PATHS ${RSPAMD_DEFAULT_INCLUDE_PATHS})
+ IF(NOT _incl)
+ MESSAGE(FATAL_ERROR "Cannot find header ${PKG_INCLUDE} for package ${PKG_NAME}")
+ ENDIF(NOT _incl)
- IF(NOT _incl OR NOT _lib)
- PKG_SEARCH_MODULE(${var} "${_name0}" ${ARGN})
- IF(${var}_FOUND)
- SET(WITH_${var} 1)
- IF(ENABLE_STATIC MATCHES "ON")
- SET(_XPREFIX "${var}_STATIC")
- ELSE(ENABLE_STATIC MATCHES "ON")
- SET(_XPREFIX "${var}")
- ENDIF(ENABLE_STATIC MATCHES "ON")
- FOREACH(_arg ${${_XPREFIX}_INCLUDE_DIRS})
- INCLUDE_DIRECTORIES("${_arg}")
- SET(${var}_INCLUDE "${_arg}")
- ENDFOREACH(_arg ${${_XPREFIX}_INCLUDE_DIRS})
- FOREACH(_arg ${${_XPREFIX}_LIBRARY_DIRS})
- LINK_DIRECTORIES("${_arg}")
- SET(${var}_LIBRARY "${_arg}")
- ENDFOREACH(_arg ${${_XPREFIX}_LIBRARY_DIRS})
- # Handle other CFLAGS and LDFLAGS
- FOREACH(_arg ${${_XPREFIX}_CFLAGS_OTHER})
- SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${_arg}")
- ENDFOREACH(_arg ${${_XPREFIX}_CFLAGS_OTHER})
- FOREACH(_arg ${${_XPREFIX}_LDFLAGS_OTHER})
- SET(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} ${_arg}")
- ENDFOREACH(_arg ${${_XPREFIX}_LDFLAGS_OTHER})
- LIST(APPEND RSPAMD_REQUIRED_LIBRARIES "${${_XPREFIX}_LIBRARIES}")
- ELSE(${var}_FOUND)
- MESSAGE(FATAL_ERROR "Packages ${_name0} ${ARGN} could not be found")
- ENDIF(${var}_FOUND)
- ENDIF(NOT _incl OR NOT _lib)
- ENDIF(NOT RSPAMD_SEARCH_PATH)
- # Cleanup
- UNSET(_lib CACHE)
- UNSET(_incl CACHE)
+ GET_FILENAME_COMPONENT(_lib_path "${_lib}" PATH)
+ INCLUDE_DIRECTORIES("${_incl}")
+ LINK_DIRECTORIES("${_lib_path}")
+ LIST(APPEND RSPAMD_REQUIRED_LIBRARIES ${_lib})
+ SET(${var}_INCLUDE "${_incl}")
+ SET(${var}_LIBRARY "${_lib_path}")
+ MESSAGE(STATUS "Found ${_name0} ${ARGN} in '${_lib_path}' (library) and '${_incl}' (include).")
+ ENDIF(${PKG_NAME}_FOUND)
ENDMACRO(ProcessPackage name)
MACRO(ADD_PRECOMPILED_HEADER _target _input)