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