FindSoci.cmake 2.92 KB
Newer Older
Benjamin REIS's avatar
Benjamin REIS committed
1 2 3 4 5 6 7
###############################################################################
# CMake module to search for SOCI library
#
# WARNING: This module is experimental work in progress.
#
# This module defines:
#  SOCI_INCLUDE_DIRS        = include dirs to be used when using the soci library
8
#  SOCI_LIBRARIES           = full path to the soci library
Benjamin REIS's avatar
Benjamin REIS committed
9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
#  SOCI_VERSION             = the soci version found (not yet. soci does not provide that info.)
#  SOCI_FOUND               = true if soci was found
#
# For each component you specify in find_package(), the following variables are set.
#
#  SOCI_${COMPONENT}_PLUGIN = full path to the soci plugin
#  SOCI_${COMPONENT}_FOUND
#
# Copyright (c) 2011 Michael Jansen <info@michael-jansen.biz>
#
# Redistribution and use is allowed according to the terms of the BSD license.
# For details see the accompanying COPYING-CMAKE-SCRIPTS file.
#
###############################################################################
#
### Global Configuration Section
#
26 27
SET(_SOCI_ALL_PLUGINS    mysql sqlite3)
SET(_SOCI_REQUIRED_VARS  SOCI_INCLUDE_DIRS SOCI_LIBRARIES)
28
SET(_SOCI_VERSION "_4_0")
Benjamin REIS's avatar
Benjamin REIS committed
29 30 31 32

#
### FIRST STEP: Find the soci headers.
#
jehan's avatar
jehan committed
33
FIND_PATH(SOCI_INCLUDE_DIRS soci/soci.h
Benjamin REIS's avatar
Benjamin REIS committed
34
    DOC "Soci (http://soci.sourceforge.net) include directory")
35
MARK_AS_ADVANCED(SOCI_INCLUDE_DIRS)
Benjamin REIS's avatar
Benjamin REIS committed
36 37 38 39

#
### SECOND STEP: Find the soci core library. Respect LIB_SUFFIX
#
40
FIND_LIBRARY(SOCI_LIBRARIES
41
    NAMES soci_core soci_core${_SOCI_VERSION}
42 43
    PATH_SUFFIXES lib lib64)
MARK_AS_ADVANCED(SOCI_LIBRARIES)
Benjamin REIS's avatar
Benjamin REIS committed
44

45
GET_FILENAME_COMPONENT(SOCI_LIBRARY_DIR ${SOCI_LIBRARIES} PATH)
Benjamin REIS's avatar
Benjamin REIS committed
46 47 48 49 50
MARK_AS_ADVANCED(SOCI_LIBRARY_DIR)

#
### THIRD STEP: Find all installed plugins if the library was found
#
51
IF(SOCI_INCLUDE_DIRS AND SOCI_LIBRARIES)
Benjamin REIS's avatar
Benjamin REIS committed
52 53 54 55 56 57

    MESSAGE(STATUS "Soci found: Looking for plugins")
    FOREACH(plugin IN LISTS _SOCI_ALL_PLUGINS)

        FIND_LIBRARY(
            SOCI_${plugin}_PLUGIN
58
            NAMES soci_${plugin} soci_${plugin}${_SOCI_VERSION}
59
            PATH_SUFFIXES lib lib64)
Benjamin REIS's avatar
Benjamin REIS committed
60 61 62 63 64
        MARK_AS_ADVANCED(SOCI_${plugin}_PLUGIN)

        IF(SOCI_${plugin}_PLUGIN)
            MESSAGE(STATUS "    * Plugin ${plugin} found ${SOCI_${plugin}_PLUGIN}.")
            SET(SOCI_${plugin}_FOUND True)
65 66 67 68

            if(IOS OR ANDROID)
                list(APPEND SOCI_LIBRARIES ${SOCI_${plugin}_PLUGIN})
            endif()
Benjamin REIS's avatar
Benjamin REIS committed
69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91
        ELSE()
            MESSAGE(STATUS "    * Plugin ${plugin} not found.")
            SET(SOCI_${plugin}_FOUND False)
        ENDIF()

    ENDFOREACH()

    #
    ### FOURTH CHECK: Check if the required components were all found
    #
    FOREACH(component ${Soci_FIND_COMPONENTS})
        IF(NOT SOCI_${component}_FOUND)
            MESSAGE(SEND_ERROR "Required component ${component} not found. It seems that Soci was built without support of ${component}, consider rebuilding it.")
        ENDIF()
    ENDFOREACH()

ENDIF()

#
### ADHERE TO STANDARDS
#
include(FindPackageHandleStandardArgs)
FIND_PACKAGE_HANDLE_STANDARD_ARGS(Soci DEFAULT_MSG ${_SOCI_REQUIRED_VARS})