You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

166 lines
4.4 KiB

  1. # - Try to find the CAIRO library
  2. # Once done this will define
  3. #
  4. # CAIRO_ROOT_DIR - Set this variable to the root installation of CAIRO
  5. #
  6. # Read-Only variables:
  7. # CAIRO_FOUND - system has the CAIRO library
  8. # CAIRO_INCLUDE_DIR - the CAIRO include directory
  9. # CAIRO_LIBRARIES - The libraries needed to use CAIRO
  10. # CAIRO_VERSION - This is set to $major.$minor.$revision (eg. 0.9.8)
  11. #=============================================================================
  12. # Copyright 2012 Dmitry Baryshnikov <polimax at mail dot ru>
  13. #
  14. # Distributed under the OSI-approved BSD License (the "License");
  15. # see accompanying file Copyright.txt for details.
  16. #
  17. # This software is distributed WITHOUT ANY WARRANTY; without even the
  18. # implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
  19. # See the License for more information.
  20. #=============================================================================
  21. # (To distribute this file outside of CMake, substitute the full
  22. # License text for the above reference.)
  23. find_package(PkgConfig)
  24. if(PKG_CONFIG_FOUND)
  25. pkg_check_modules(_CAIRO cairo)
  26. endif (PKG_CONFIG_FOUND)
  27. SET(_CAIRO_ROOT_HINTS
  28. $ENV{CAIRO}
  29. ${CAIRO_ROOT_DIR}
  30. )
  31. SET(_CAIRO_ROOT_PATHS
  32. $ENV{CAIRO}/src
  33. /usr
  34. /usr/local
  35. )
  36. SET(_CAIRO_ROOT_HINTS_AND_PATHS
  37. HINTS ${_CAIRO_ROOT_HINTS}
  38. PATHS ${_CAIRO_ROOT_PATHS}
  39. )
  40. FIND_PATH(CAIRO_INCLUDE_DIR
  41. NAMES
  42. cairo.h
  43. HINTS
  44. ${_CAIRO_INCLUDEDIR}
  45. ${_CAIRO_ROOT_HINTS_AND_PATHS}
  46. PATH_SUFFIXES
  47. include
  48. "include/cairo"
  49. )
  50. IF(NOT PKGCONFIG_FOUND AND WIN32 AND NOT CYGWIN)
  51. # MINGW should go here too
  52. IF(MSVC)
  53. # Implementation details:
  54. # We are using the libraries located in the VC subdir instead of the parent directory eventhough :
  55. FIND_LIBRARY(CAIRO_DEBUG
  56. NAMES
  57. cairod
  58. ${_CAIRO_ROOT_HINTS_AND_PATHS}
  59. PATH_SUFFIXES
  60. "lib"
  61. "VC"
  62. "lib/VC"
  63. )
  64. FIND_LIBRARY(CAIRO_RELEASE
  65. NAMES
  66. cairo
  67. ${_CAIRO_ROOT_HINTS_AND_PATHS}
  68. PATH_SUFFIXES
  69. "lib"
  70. "VC"
  71. "lib/VC"
  72. )
  73. if( CMAKE_CONFIGURATION_TYPES OR CMAKE_BUILD_TYPE )
  74. if(NOT CAIRO_DEBUG)
  75. set(CAIRO_DEBUG ${CAIRO_RELEASE})
  76. endif(NOT CAIRO_DEBUG)
  77. set( CAIRO_LIBRARIES
  78. optimized ${CAIRO_RELEASE} debug ${CAIRO_DEBUG}
  79. )
  80. else()
  81. set( CAIRO_LIBRARIES ${CAIRO_RELEASE})
  82. endif()
  83. MARK_AS_ADVANCED(CAIRO_DEBUG CAIRO_RELEASE)
  84. ELSEIF(MINGW)
  85. # same player, for MingW
  86. FIND_LIBRARY(CAIRO
  87. NAMES
  88. cairo
  89. ${_CAIRO_ROOT_HINTS_AND_PATHS}
  90. PATH_SUFFIXES
  91. "lib"
  92. "lib/MinGW"
  93. )
  94. MARK_AS_ADVANCED(CAIRO)
  95. set( CAIRO_LIBRARIES ${CAIRO})
  96. ELSE(MSVC)
  97. # Not sure what to pick for -say- intel, let's use the toplevel ones and hope someone report issues:
  98. FIND_LIBRARY(CAIRO
  99. NAMES
  100. cairo
  101. HINTS
  102. ${_CAIRO_LIBDIR}
  103. ${_CAIRO_ROOT_HINTS_AND_PATHS}
  104. PATH_SUFFIXES
  105. lib
  106. )
  107. MARK_AS_ADVANCED(CAIRO)
  108. set( CAIRO_LIBRARIES ${CAIRO} )
  109. ENDIF(MSVC)
  110. ELSE()
  111. FIND_LIBRARY(CAIRO_LIBRARY
  112. NAMES
  113. cairo
  114. HINTS
  115. ${_CAIRO_LIBDIR}
  116. ${_CAIRO_ROOT_HINTS_AND_PATHS}
  117. PATH_SUFFIXES
  118. "lib"
  119. "local/lib"
  120. )
  121. MARK_AS_ADVANCED(CAIRO_LIBRARY)
  122. # compat defines
  123. SET(CAIRO_LIBRARIES ${CAIRO_LIBRARY})
  124. ENDIF()
  125. #message( STATUS "Cairo_FIND_VERSION=${Cairo_FIND_VERSION}.")
  126. #message( STATUS "CAIRO_INCLUDE_DIR=${CAIRO_INCLUDE_DIR}.")
  127. # Fetch version from cairo-version.h if a version was requested by find_package()
  128. if(CAIRO_INCLUDE_DIR AND Cairo_FIND_VERSION)
  129. file(READ "${CAIRO_INCLUDE_DIR}/cairo-version.h" _CAIRO_VERSION_H_CONTENTS)
  130. string(REGEX REPLACE "^(.*\n)?#define[ \t]+CAIRO_VERSION_MAJOR[ \t]+([0-9]+).*"
  131. "\\2" CAIRO_VERSION_MAJOR ${_CAIRO_VERSION_H_CONTENTS})
  132. string(REGEX REPLACE "^(.*\n)?#define[ \t]+CAIRO_VERSION_MINOR[ \t]+([0-9]+).*"
  133. "\\2" CAIRO_VERSION_MINOR ${_CAIRO_VERSION_H_CONTENTS})
  134. string(REGEX REPLACE "^(.*\n)?#define[ \t]+CAIRO_VERSION_MICRO[ \t]+([0-9]+).*"
  135. "\\2" CAIRO_VERSION_MICRO ${_CAIRO_VERSION_H_CONTENTS})
  136. set(CAIRO_VERSION ${CAIRO_VERSION_MAJOR}.${CAIRO_VERSION_MINOR}.${CAIRO_VERSION_MICRO}
  137. CACHE INTERNAL "The version number for Cairo libraries")
  138. endif()
  139. include(FindPackageHandleStandardArgs)
  140. find_package_handle_standard_args(Cairo
  141. REQUIRED_VARS
  142. CAIRO_LIBRARIES
  143. CAIRO_INCLUDE_DIR
  144. VERSION_VAR
  145. CAIRO_VERSION
  146. )
  147. MARK_AS_ADVANCED(CAIRO_INCLUDE_DIR CAIRO_LIBRARIES)