Home | History | Annotate | Download | only in cmake
      1 # - Try to find libsoup
      2 # Find libsoup headers, libraries and the answer to all questions.
      3 #
      4 #  LIBSOUP2_FOUND                True if libsoup2 got found
      5 #  LIBSOUP2_INCLUDE_DIRS         Location of libsoup2 headers 
      6 #  LIBSOUP2_LIBRARIES            List of libaries to use libsoup2
      7 #  LIBSOUP2_LIBRARY_DIRS         Location of libsoup2 library
      8 #
      9 #  LIBSOUP22_FOUND               True if libsoup2.2 got found
     10 #  LIBSOUP22_INCLUDE_DIRS        Location of libsoup2.2 headers 
     11 #  LIBSOUP22_LIBRARIES           List of libaries to use libsoup2.2
     12 #  LIBSOUP22_LIBRARY_DIRS        Location of libsoup2.2 library
     13 #
     14 #  LIBSOUP24_FOUND               True if libsoup2.4 got found
     15 #  LIBSOUP24_INCLUDE_DIRS        Location of libsoup2.4 headers 
     16 #  LIBSOUP24_LIBRARIES           List of libaries to use libsoup2.4
     17 #  LIBSOUP24_LIBRARY_DIRS        Location of libsoup2.4 library
     18 #
     19 #  Set LIBSOUP2_MIN_VERSION to find libsoup2.2 or libsoup2.4 if only 
     20 #  one of both libraries is supported
     21 #
     22 #  Don't use LIBSOUP2_MIN_VERSION if you want to support 
     23 #  libsoup2.2 and libsoup2.4. 
     24 #  Instead use LIBSPOUP22_MIN_VERSION and LIBSPOUP24_MIN_VERSION.
     25 #
     26 #  Set LIBSPOUP22_MIN_VERSION to find libsoup2.2 which version is
     27 #  greater than LIBSPOUP22_MIN_VERSION
     28 #
     29 #  Set LIBSPOUP24_MIN_VERSION to find libsoup2.4 which version is
     30 #  greater than LIBSPOUP24_MIN_VERSION
     31 #
     32 #  WARNING: It is not possible to set LIBSPOUP22_MIN_VERSION 
     33 #  and support any version of libsoup2.4 at the same time.
     34 #  In this situation you have to set LIBSPOUP24_MIN_VERSION also.
     35 #  The same applies to LIBSPOUP24_MIN_VERSION and libsoup2.2.
     36 #
     37 #  Copyright (c) 2007 Daniel Gollub <gollub (a] b1-systems.de>
     38 #  Copyright (c) 2008 Bjoern Ricks  <bjoern.ricks (a] gmail.com>
     39 #
     40 # Redistribution and use in source and binary forms, with or without
     41 # modification, are permitted provided that the following conditions
     42 # are met:
     43 # 
     44 # 1. Redistributions of source code must retain the copyright
     45 #    notice, this list of conditions and the following disclaimer.
     46 # 2. Redistributions in binary form must reproduce the copyright
     47 #    notice, this list of conditions and the following disclaimer in the
     48 #    documentation and/or other materials provided with the distribution.
     49 # 3. The name of the author may not be used to endorse or promote products
     50 #    derived from this software without specific prior written permission.
     51 # 
     52 # THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
     53 # IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
     54 # OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
     55 # IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
     56 # INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
     57 # NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
     58 # DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
     59 # THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
     60 # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
     61 # THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
     62 #
     63 
     64 INCLUDE( FindPkgConfig )
     65 
     66 IF ( LibSoup2_FIND_VERSION AND NOT LIBSOUP2_MIN_VERSION AND NOT LIBSOUP24_MIN_VERSION )
     67 	SET( LIBSOUP2_MIN_VERSION "${LibSoup2_FIND_VERSION}" )
     68 	SET( LIBSOUP24_MIN_VERSION "${LibSoup2_FIND_VERSION}" )
     69 ENDIF ( LibSoup2_FIND_VERSION AND NOT LIBSOUP2_MIN_VERSION AND NOT LIBSOUP24_MIN_VERSION )
     70 
     71 IF ( LibSoup2_FIND_REQUIRED )
     72 	SET( _pkgconfig_REQUIRED "REQUIRED" )
     73 ELSE( LibSoup2_FIND_REQUIRED )
     74 	SET( _pkgconfig_REQUIRED "" )
     75 ENDIF ( LibSoup2_FIND_REQUIRED )
     76 
     77 IF ( LIBSOUP2_MIN_VERSION )
     78 	STRING(REGEX REPLACE "^(2)(\\.)([0-9]*)(\\.?)(.*)" "\\3" LIBSOUP2_VERSION_MINOR "${LIBSOUP2_MIN_VERSION}")
     79 	IF ( LIBSOUP2_VERSION_MINOR EQUAL "2" )
     80 		SET( LIBSOUP22_MIN_VERSION "${LIBSOUP2_MIN_VERSION}" )
     81 	ELSE ( LIBSOUP2_VERSION_MINOR EQUAL "2" )
     82 		SET( LIBSOUP24_MIN_VERSION "${LIBSOUP2_MIN_VERSION}" )
     83 	ENDIF ( LIBSOUP2_VERSION_MINOR EQUAL "2" )
     84 ENDIF ( LIBSOUP2_MIN_VERSION )
     85 
     86 # try to find libsoup2.2>=LIBSOUP22_MIN_VERSION
     87 IF ( LIBSOUP22_MIN_VERSION )
     88 	PKG_SEARCH_MODULE( LIBSOUP22 libsoup-2.2>=${LIBSOUP22_MIN_VERSION} libsoup2>=${LIBSOUP22_MIN_VERSION} )
     89 ENDIF ( LIBSOUP22_MIN_VERSION )
     90 
     91 # try to find libsoup2.4>=LIBSOUP24_MIN_VERSION
     92 IF ( LIBSOUP24_MIN_VERSION )
     93 	PKG_SEARCH_MODULE( LIBSOUP24 libsoup-2.4>=${LIBSOUP24_MIN_VERSION} libsoup2>=${LIBSOUP24_MIN_VERSION} )
     94 ENDIF ( LIBSOUP24_MIN_VERSION )	
     95 
     96 # try to find any version of libsoup2.4 if LIBSOUP22_MIN_VERSION is not set
     97 IF ( NOT LIBSOUP24_FOUND AND NOT LIBSOUP22_MIN_VERSION AND NOT LIBSOUP24_MIN_VERSION )
     98 	PKG_SEARCH_MODULE( LIBSOUP24 libsoup-2.4 libsoup2 )
     99 ENDIF ( NOT LIBSOUP24_FOUND AND NOT LIBSOUP22_MIN_VERSION AND NOT LIBSOUP24_MIN_VERSION )
    100 
    101 # try to find any version of libsoup2.2 if LIBSOUP24_MIN_VERSION is not set
    102 IF ( NOT LIBSOUP22_FOUND AND NOT LIBSOUP24_MIN_VERSION AND NOT LIBSOUP24_MIN_VERSION )
    103 	PKG_SEARCH_MODULE( LIBSOUP22 libsoup-2.2 libsoup2 )
    104 ENDIF ( NOT LIBSOUP22_FOUND AND NOT LIBSOUP24_MIN_VERSION AND NOT LIBSOUP24_MIN_VERSION )
    105 
    106 # set LIBSOUP2_ variables
    107 IF ( LIBSOUP24_FOUND )
    108 	# prefer libsoup2.4 to libsoup2.2 if both are found
    109 	SET( LIBSOUP2_FOUND ${LIBSOUP24_FOUND} CACHE INTERNAL "" )
    110 	SET( LIBSOUP2_INCLUDE_DIRS ${LIBSOUP24_INCLUDE_DIRS} CACHE INTERNAL "" )
    111 	SET( LIBSOUP2_LIBRARIES ${LIBSOUP24_LIBRARIES} CACHE INTERNAL "" )
    112 	SET( LIBSOUP2_LIBRARY_DIRS ${LIBSOUP24_LIBRARY_DIRS} CACHE INTERNAL "" )
    113 	SET( LIBSOUP2_VERSION ${LIBSOUP24_VERSION} CACHE INTERNAL "" )
    114 ELSEIF ( LIBSOUP22_FOUND )
    115 	SET( LIBSOUP2_FOUND ${LIBSOUP22_FOUND} CACHE INTERNAL "" )
    116 	SET( LIBSOUP2_INCLUDE_DIRS ${LIBSOUP22_INCLUDE_DIRS} CACHE INTERNAL "" )
    117 	SET( LIBSOUP2_LIBRARIES ${LIBSOUP22_LIBRARIES} CACHE INTERNAL "" )
    118 	SET( LIBSOUP2_LIBRARY_DIRS ${LIBSOUP22_LIBRARY_DIRS} CACHE INTERNAL "" )
    119 	SET( LIBSOUP2_VERSION ${LIBSOUP22_VERSION} CACHE INTERNAL "" )
    120 ELSEIF( PKG_CONFIG_FOUND AND LibSoup2_FIND_REQUIRED )
    121 	# raise an error if both libs are not found 
    122 	# and FIND_PACKAGE( LibSoup2 REQUIRED ) was called
    123 	MESSAGE( FATAL_ERROR "package libsoup2 not found" )
    124 ENDIF ( LIBSOUP24_FOUND )
    125 
    126 IF( NOT LIBSOUP2_FOUND AND NOT PKG_CONFIG_FOUND )
    127 	# WARNING:
    128 	# This case is executed if pkg-config isn't installed.
    129 	# Currently in this case it is only checked if libsoup2.2 is available.
    130 	# Therefore please don't use this cmake module without pkg-config!
    131 	FIND_PATH( _libsoup2_include_DIR libsoup/soup.h PATH_SUFFIXES libsoup libsoup-2.2 )
    132 	FIND_LIBRARY( _libsoup2_LIBRARY soup-2.2)
    133 
    134 	IF ( _libsoup2_include_DIR AND _libsoup2_LIBRARY )
    135 		SET ( _libsoup2_FOUND TRUE )
    136 	ENDIF ( _libsoup2_include_DIR AND _libsoup2_LIBRARY )
    137 
    138 	IF ( _libsoup2_FOUND )
    139 		SET ( LIBSOUP2_INCLUDE_DIRS ${_libsoup2_include_DIR} )
    140 		SET ( LIBSOUP2_LIBRARIES ${_libsoup2_LIBRARY} )
    141 	
    142 		# find requited glib2
    143 		IF( NOT GLIB2_FOUND )
    144 			FIND_PACKAGE( GLIB2 REQUIRED )
    145 			IF ( GLIB2_FOUND )
    146 				SET ( LIBSOUP2_INCLUDE_DIRS ${LIBSOUP2_INCLUDE_DIRS} ${GLIB2_INCLUDE_DIRS} )
    147 				SET ( LIBSOUP2_LIBRARIES ${LIBSOUP2_LIBRARIES} ${GLIB2_LIBRARIES} )
    148 			ENDIF ( GLIB2_FOUND )
    149 		ENDIF( NOT GLIB2_FOUND )
    150 		
    151 		# find required libxml2
    152 		IF( NOT LIBXML2_FOUND )
    153 			FIND_PACKAGE( LibXml2 REQUIRED )
    154 			IF ( LIBXML2_FOUND )
    155 				SET ( LIBSOUP2_INCLUDE_DIRS ${LIBSOUP2_INCLUDE_DIRS} ${LIBXML2_INCLUDE_DIRS} )
    156 				SET ( LIBSOUP2_LIBRARIES ${LIBSOUP2_LIBRARIES} ${LIBXML2_LIBRARIES} )
    157 			ENDIF( LIBXML2_FOUND )
    158 		ENDIF( NOT LIBXML2_FOUND )
    159 		
    160 		# find required gnutls
    161 		IF( NOT GNUTLS_FOUND )
    162 			FIND_PACKAGE( GNUTLS REQUIRED )
    163 			IF ( GNUTLS_FOUND )
    164 				SET ( LIBSOUP2_INCLUDE_DIRS ${LIBSOUP2_INCLUDE_DIRS} ${GNUTLS_INCLUDE_DIRS} )
    165 				SET ( LIBSOUP2_LIBRARIES ${LIBSOUP2_LIBRARIES} ${GNUTLS_LIBRARIES} )
    166 			ENDIF( GNUTLS_FOUND )
    167 		ENDIF( NOT GNUTLS_FOUND )
    168 	ENDIF ( _libsoup2_FOUND )
    169 
    170 	MARK_AS_ADVANCED( _libsoup2_include_DIR  _libsoup2_LIBRARY )
    171 
    172 	# Report results
    173 	IF ( LIBSOUP2_LIBRARIES AND LIBSOUP2_INCLUDE_DIRS AND _libsoup2_FOUND )	
    174 		SET( LIBSOUP2_FOUND 1 )
    175 		IF ( NOT LibSoup2_FIND_QUIETLY )
    176 			MESSAGE( STATUS "Found libsoup2: ${_libsoup2_LIBRARY}" )
    177 		ENDIF ( NOT LibSoup2_FIND_QUIETLY )
    178 	ELSE ( LIBSOUP2_LIBRARIES AND LIBSOUP_INCLUDE_DIRS AND _libsoup2_FOUND )	
    179 		IF ( LibSoup2_FIND_REQUIRED )
    180 			MESSAGE( SEND_ERROR "Could NOT find libsoup2" )
    181 		ELSE ( LibSoup2_FIND_REQUIRED )
    182 			IF ( NOT LibSoup2_FIND_QUIETLY )
    183 				MESSAGE( STATUS "Could NOT find libsoup2" )	
    184 			ENDIF ( NOT LibSoup2_FIND_QUIETLY )
    185 		ENDIF ( LibSoup2_FIND_REQUIRED )
    186 	ENDIF ( LIBSOUP2_LIBRARIES AND LIBSOUP2_INCLUDE_DIRS AND _libsoup2_FOUND )
    187 ENDIF( NOT LIBSOUP2_FOUND AND NOT PKG_CONFIG_FOUND )
    188 
    189 # Hide advanced variables from CMake GUIs
    190 MARK_AS_ADVANCED( LIBSOUP2_LIBRARIES LIBSOUP2_INCLUDE_DIRS )
    191 
    192