cmake/Modules/LibFindMacros.cmake
author saiam
Wed, 05 Nov 2008 20:55:09 +0000
changeset 9 7ab1f683e4fb
parent 6 faa4e777cc6e
permissions -rw-r--r--
New versions
6
faa4e777cc6e fiddle with cmake, fix some compile errors
terom
parents:
diff changeset
     1
# Works the same as find_package, but forwards the "REQUIRED" and "QUIET" arguments
faa4e777cc6e fiddle with cmake, fix some compile errors
terom
parents:
diff changeset
     2
# used for the current package. For this to work, the first parameter must be the
faa4e777cc6e fiddle with cmake, fix some compile errors
terom
parents:
diff changeset
     3
# prefix of the current package, then the prefix of the new package etc, which are
faa4e777cc6e fiddle with cmake, fix some compile errors
terom
parents:
diff changeset
     4
# passed to find_package.
faa4e777cc6e fiddle with cmake, fix some compile errors
terom
parents:
diff changeset
     5
macro (libfind_package PREFIX)
faa4e777cc6e fiddle with cmake, fix some compile errors
terom
parents:
diff changeset
     6
  set (LIBFIND_PACKAGE_ARGS ${ARGN})
faa4e777cc6e fiddle with cmake, fix some compile errors
terom
parents:
diff changeset
     7
  if (${PREFIX}_FIND_QUIETLY)
faa4e777cc6e fiddle with cmake, fix some compile errors
terom
parents:
diff changeset
     8
    set (LIBFIND_PACKAGE_ARGS ${LIBFIND_PACKAGE_ARGS} QUIET)
faa4e777cc6e fiddle with cmake, fix some compile errors
terom
parents:
diff changeset
     9
  endif (${PREFIX}_FIND_QUIETLY)
faa4e777cc6e fiddle with cmake, fix some compile errors
terom
parents:
diff changeset
    10
  if (${PREFIX}_FIND_REQUIRED)
faa4e777cc6e fiddle with cmake, fix some compile errors
terom
parents:
diff changeset
    11
    set (LIBFIND_PACKAGE_ARGS ${LIBFIND_PACKAGE_ARGS} REQUIRED)
faa4e777cc6e fiddle with cmake, fix some compile errors
terom
parents:
diff changeset
    12
  endif (${PREFIX}_FIND_REQUIRED)
faa4e777cc6e fiddle with cmake, fix some compile errors
terom
parents:
diff changeset
    13
  find_package(${LIBFIND_PACKAGE_ARGS})
faa4e777cc6e fiddle with cmake, fix some compile errors
terom
parents:
diff changeset
    14
endmacro (libfind_package)
faa4e777cc6e fiddle with cmake, fix some compile errors
terom
parents:
diff changeset
    15
faa4e777cc6e fiddle with cmake, fix some compile errors
terom
parents:
diff changeset
    16
# Damn CMake developers made the UsePkgConfig system deprecated in the same release (2.6)
faa4e777cc6e fiddle with cmake, fix some compile errors
terom
parents:
diff changeset
    17
# where they added pkg_check_modules. Consequently I need to support both in my scripts
faa4e777cc6e fiddle with cmake, fix some compile errors
terom
parents:
diff changeset
    18
# to avoid those deprecated warnings. Here's a helper that does just that.
faa4e777cc6e fiddle with cmake, fix some compile errors
terom
parents:
diff changeset
    19
# Works identically to pkg_check_modules, except that no checks are needed prior to use.
faa4e777cc6e fiddle with cmake, fix some compile errors
terom
parents:
diff changeset
    20
macro (libfind_pkg_check_modules PREFIX PKGNAME)
faa4e777cc6e fiddle with cmake, fix some compile errors
terom
parents:
diff changeset
    21
  if (${CMAKE_MAJOR_VERSION} EQUAL 2 AND ${CMAKE_MINOR_VERSION} EQUAL 4)
faa4e777cc6e fiddle with cmake, fix some compile errors
terom
parents:
diff changeset
    22
    include(UsePkgConfig)
faa4e777cc6e fiddle with cmake, fix some compile errors
terom
parents:
diff changeset
    23
    pkgconfig(${PKGNAME} ${PREFIX}_INCLUDE_DIRS ${PREFIX}_LIBRARY_DIRS ${PREFIX}_LDFLAGS ${PREFIX}_CFLAGS)
faa4e777cc6e fiddle with cmake, fix some compile errors
terom
parents:
diff changeset
    24
  else (${CMAKE_MAJOR_VERSION} EQUAL 2 AND ${CMAKE_MINOR_VERSION} EQUAL 4)
faa4e777cc6e fiddle with cmake, fix some compile errors
terom
parents:
diff changeset
    25
    find_package(PkgConfig)
faa4e777cc6e fiddle with cmake, fix some compile errors
terom
parents:
diff changeset
    26
    if (PKG_CONFIG_FOUND)
faa4e777cc6e fiddle with cmake, fix some compile errors
terom
parents:
diff changeset
    27
      pkg_check_modules(${PREFIX} ${PKGNAME})
faa4e777cc6e fiddle with cmake, fix some compile errors
terom
parents:
diff changeset
    28
    endif (PKG_CONFIG_FOUND)
faa4e777cc6e fiddle with cmake, fix some compile errors
terom
parents:
diff changeset
    29
  endif (${CMAKE_MAJOR_VERSION} EQUAL 2 AND ${CMAKE_MINOR_VERSION} EQUAL 4)
faa4e777cc6e fiddle with cmake, fix some compile errors
terom
parents:
diff changeset
    30
endmacro (libfind_pkg_check_modules)
faa4e777cc6e fiddle with cmake, fix some compile errors
terom
parents:
diff changeset
    31
faa4e777cc6e fiddle with cmake, fix some compile errors
terom
parents:
diff changeset
    32
# Do the final processing once the paths have been detected.
faa4e777cc6e fiddle with cmake, fix some compile errors
terom
parents:
diff changeset
    33
# If include dirs are needed, ${PREFIX}_PROCESS_INCLUDES should be set to contain
faa4e777cc6e fiddle with cmake, fix some compile errors
terom
parents:
diff changeset
    34
# all the variables, each of which contain one include directory.
faa4e777cc6e fiddle with cmake, fix some compile errors
terom
parents:
diff changeset
    35
# Ditto for ${PREFIX}_PROCESS_LIBS and library files.
faa4e777cc6e fiddle with cmake, fix some compile errors
terom
parents:
diff changeset
    36
# Will set ${PREFIX}_FOUND, ${PREFIX}_INCLUDE_DIRS and ${PREFIX}_LIBRARIES.
faa4e777cc6e fiddle with cmake, fix some compile errors
terom
parents:
diff changeset
    37
# Also handles errors in case library detection was required, etc.
faa4e777cc6e fiddle with cmake, fix some compile errors
terom
parents:
diff changeset
    38
macro (libfind_process PREFIX)
faa4e777cc6e fiddle with cmake, fix some compile errors
terom
parents:
diff changeset
    39
  # Skip processing if already processed during this run
faa4e777cc6e fiddle with cmake, fix some compile errors
terom
parents:
diff changeset
    40
  if (NOT ${PREFIX}_FOUND)
faa4e777cc6e fiddle with cmake, fix some compile errors
terom
parents:
diff changeset
    41
    # Start with the assumption that the library was found
faa4e777cc6e fiddle with cmake, fix some compile errors
terom
parents:
diff changeset
    42
    set (${PREFIX}_FOUND TRUE)
faa4e777cc6e fiddle with cmake, fix some compile errors
terom
parents:
diff changeset
    43
faa4e777cc6e fiddle with cmake, fix some compile errors
terom
parents:
diff changeset
    44
    # Process all includes and set _FOUND to false if any are missing
faa4e777cc6e fiddle with cmake, fix some compile errors
terom
parents:
diff changeset
    45
    foreach (i ${${PREFIX}_PROCESS_INCLUDES})
faa4e777cc6e fiddle with cmake, fix some compile errors
terom
parents:
diff changeset
    46
      if (${i})
faa4e777cc6e fiddle with cmake, fix some compile errors
terom
parents:
diff changeset
    47
        set (${PREFIX}_INCLUDE_DIRS ${${PREFIX}_INCLUDE_DIRS} ${${i}})
9
7ab1f683e4fb New versions
saiam
parents: 6
diff changeset
    48
        mark_as_advanced(${i})
6
faa4e777cc6e fiddle with cmake, fix some compile errors
terom
parents:
diff changeset
    49
      else (${i})
faa4e777cc6e fiddle with cmake, fix some compile errors
terom
parents:
diff changeset
    50
        set (${PREFIX}_FOUND FALSE)
faa4e777cc6e fiddle with cmake, fix some compile errors
terom
parents:
diff changeset
    51
      endif (${i})
faa4e777cc6e fiddle with cmake, fix some compile errors
terom
parents:
diff changeset
    52
    endforeach (i)
faa4e777cc6e fiddle with cmake, fix some compile errors
terom
parents:
diff changeset
    53
faa4e777cc6e fiddle with cmake, fix some compile errors
terom
parents:
diff changeset
    54
    # Process all libraries and set _FOUND to false if any are missing
faa4e777cc6e fiddle with cmake, fix some compile errors
terom
parents:
diff changeset
    55
    foreach (i ${${PREFIX}_PROCESS_LIBS})
faa4e777cc6e fiddle with cmake, fix some compile errors
terom
parents:
diff changeset
    56
      if (${i})
faa4e777cc6e fiddle with cmake, fix some compile errors
terom
parents:
diff changeset
    57
        set (${PREFIX}_LIBRARIES ${${PREFIX}_LIBRARIES} ${${i}})
9
7ab1f683e4fb New versions
saiam
parents: 6
diff changeset
    58
        mark_as_advanced(${i})
6
faa4e777cc6e fiddle with cmake, fix some compile errors
terom
parents:
diff changeset
    59
      else (${i})
faa4e777cc6e fiddle with cmake, fix some compile errors
terom
parents:
diff changeset
    60
        set (${PREFIX}_FOUND FALSE)
faa4e777cc6e fiddle with cmake, fix some compile errors
terom
parents:
diff changeset
    61
      endif (${i})
faa4e777cc6e fiddle with cmake, fix some compile errors
terom
parents:
diff changeset
    62
    endforeach (i)
faa4e777cc6e fiddle with cmake, fix some compile errors
terom
parents:
diff changeset
    63
faa4e777cc6e fiddle with cmake, fix some compile errors
terom
parents:
diff changeset
    64
    # Print message and/or exit on fatal error
faa4e777cc6e fiddle with cmake, fix some compile errors
terom
parents:
diff changeset
    65
    if (${PREFIX}_FOUND)
faa4e777cc6e fiddle with cmake, fix some compile errors
terom
parents:
diff changeset
    66
      if (NOT ${PREFIX}_FIND_QUIETLY)
9
7ab1f683e4fb New versions
saiam
parents: 6
diff changeset
    67
        message (STATUS "Found ${PREFIX} ${${PREFIX}_VERSION}")
6
faa4e777cc6e fiddle with cmake, fix some compile errors
terom
parents:
diff changeset
    68
      endif (NOT ${PREFIX}_FIND_QUIETLY)
faa4e777cc6e fiddle with cmake, fix some compile errors
terom
parents:
diff changeset
    69
    else (${PREFIX}_FOUND)
faa4e777cc6e fiddle with cmake, fix some compile errors
terom
parents:
diff changeset
    70
      if (${PREFIX}_FIND_REQUIRED)
faa4e777cc6e fiddle with cmake, fix some compile errors
terom
parents:
diff changeset
    71
        foreach (i ${${PREFIX}_PROCESS_INCLUDES} ${${PREFIX}_PROCESS_LIBS})
faa4e777cc6e fiddle with cmake, fix some compile errors
terom
parents:
diff changeset
    72
          message("${i}=${${i}}")
faa4e777cc6e fiddle with cmake, fix some compile errors
terom
parents:
diff changeset
    73
        endforeach (i)
faa4e777cc6e fiddle with cmake, fix some compile errors
terom
parents:
diff changeset
    74
        message (FATAL_ERROR "Required library ${PREFIX} NOT FOUND.\nInstall the library (dev version) and try again. If the library is already installed, use ccmake to set the missing variables manually.")
faa4e777cc6e fiddle with cmake, fix some compile errors
terom
parents:
diff changeset
    75
      endif (${PREFIX}_FIND_REQUIRED)
faa4e777cc6e fiddle with cmake, fix some compile errors
terom
parents:
diff changeset
    76
    endif (${PREFIX}_FOUND)
faa4e777cc6e fiddle with cmake, fix some compile errors
terom
parents:
diff changeset
    77
  endif (NOT ${PREFIX}_FOUND)
faa4e777cc6e fiddle with cmake, fix some compile errors
terom
parents:
diff changeset
    78
endmacro (libfind_process)
faa4e777cc6e fiddle with cmake, fix some compile errors
terom
parents:
diff changeset
    79
9
7ab1f683e4fb New versions
saiam
parents: 6
diff changeset
    80
macro(libfind_library PREFIX basename)
7ab1f683e4fb New versions
saiam
parents: 6
diff changeset
    81
  set(TMP "")
7ab1f683e4fb New versions
saiam
parents: 6
diff changeset
    82
  if(MSVC80)
7ab1f683e4fb New versions
saiam
parents: 6
diff changeset
    83
    set(TMP -vc80)
7ab1f683e4fb New versions
saiam
parents: 6
diff changeset
    84
  endif(MSVC80)
7ab1f683e4fb New versions
saiam
parents: 6
diff changeset
    85
  if(MSVC90)
7ab1f683e4fb New versions
saiam
parents: 6
diff changeset
    86
    set(TMP -vc90)
7ab1f683e4fb New versions
saiam
parents: 6
diff changeset
    87
  endif(MSVC90)
7ab1f683e4fb New versions
saiam
parents: 6
diff changeset
    88
  set(${PREFIX}_LIBNAMES ${basename}${TMP})
7ab1f683e4fb New versions
saiam
parents: 6
diff changeset
    89
  if(${ARGC} GREATER 2)
7ab1f683e4fb New versions
saiam
parents: 6
diff changeset
    90
    set(${PREFIX}_LIBNAMES ${basename}${TMP}-${ARGV2})
7ab1f683e4fb New versions
saiam
parents: 6
diff changeset
    91
    string(REGEX REPLACE "\\." "_" TMP ${${PREFIX}_LIBNAMES})
7ab1f683e4fb New versions
saiam
parents: 6
diff changeset
    92
    set(${PREFIX}_LIBNAMES ${${PREFIX}_LIBNAMES} ${TMP})
7ab1f683e4fb New versions
saiam
parents: 6
diff changeset
    93
  endif(${ARGC} GREATER 2)
7ab1f683e4fb New versions
saiam
parents: 6
diff changeset
    94
  find_library(${PREFIX}_LIBRARY
7ab1f683e4fb New versions
saiam
parents: 6
diff changeset
    95
    NAMES ${${PREFIX}_LIBNAMES}
7ab1f683e4fb New versions
saiam
parents: 6
diff changeset
    96
    PATHS ${${PREFIX}_PKGCONF_LIBRARY_DIRS}
7ab1f683e4fb New versions
saiam
parents: 6
diff changeset
    97
  )
7ab1f683e4fb New versions
saiam
parents: 6
diff changeset
    98
endmacro(libfind_library)
7ab1f683e4fb New versions
saiam
parents: 6
diff changeset
    99