kde-playground/kdepim/cmake/modules/FindAssuan2.cmake
2015-04-14 21:49:29 +00:00

245 lines
7.6 KiB
CMake

# - Try :to find the assuan v2 library
# Variables set:
# ASSUAN2_{INCLUDES,FOUND,LIBRARIES} will be set for each of the above
#if this is built-in, please replace, if it isn't, export into a MacroToBool.cmake of it's own
macro( macro_bool_to_bool FOUND_VAR )
foreach( _current_VAR ${ARGN} )
if ( ${FOUND_VAR} )
set( ${_current_VAR} TRUE )
else()
set( ${_current_VAR} FALSE )
endif()
endforeach()
endmacro()
include (MacroBoolTo01)
if ( WIN32 )
# On Windows, we don't have a libassuan-config script, so we need to
# look for the stuff ourselves:
# in cmake, AND and OR have the same precedence, there's no
# subexpressions, and expressions are evaluated short-circuit'ed
# IOW: CMake if() suxx.
set( _seem_to_have_cached_assuan2 false )
if ( ASSUAN2_INCLUDES )
if ( ASSUAN2_VANILLA_LIBRARIES )#OR ASSUAN2_QT_LIBRARIES OR ASSUAN2_GLIB_LIBRARIES )
set( _seem_to_have_cached_assuan2 true )
endif()
endif()
if ( _seem_to_have_cached_assuan2 )
macro_bool_to_bool( ASSUAN2_VANILLA_LIBRARIES ASSUAN2_VANILLA_FOUND )
# this would have been preferred:
#set( ASSUAN2_*_FOUND macro_bool_to_bool(ASSUAN2_*_LIBRARIES) )
if ( ASSUAN2_VANILLA_FOUND ) #OR ASSUAN2_GLIB_FOUND OR ASSUAN2_QT_FOUND )
set( ASSUAN2_FOUND true )
else()
set( ASSUAN2_FOUND false )
endif()
else()
set( ASSUAN2_FOUND false )
set( ASSUAN2_VANILLA_FOUND false )
#set( ASSUAN2_GLIB_FOUND false )
#set( ASSUAN2_QT_FOUND false )
find_path( ASSUAN2_INCLUDES assuan.h
${CMAKE_INCLUDE_PATH}
${CMAKE_INSTALL_PREFIX}/include
)
find_library( _assuan2_library NAMES assuan2 libassuan2 assuan-0 libassuan-0 #sic!
PATHS
${CMAKE_LIBRARY_PATH}
${CMAKE_INSTALL_PREFIX}/lib
)
find_library( _gpg_error_library NAMES gpg-error libgpg-error gpg-error-0 libgpg-error-0
PATHS
${CMAKE_LIBRARY_PATH}
${CMAKE_INSTALL_PREFIX}/lib
)
set( ASSUAN2_INCLUDES ${ASSUAN2_INCLUDES} )
if ( _assuan2_library AND _gpg_error_library )
set( ASSUAN2_LIBRARIES ${_assuan2_library} ${_gpg_error_library} ws2_32 )
set( ASSUAN2_FOUND true )
endif()
endif()
macro_bool_to_01( ASSUAN2_FOUND HAVE_ASSUAN2 )
else() # not WIN32
# On *nix, we have the libassuan-config script which can tell us all we
# need to know:
# see WIN32 case for an explanation of what this does:
set( _seem_to_have_cached_assuan2 false )
if ( ASSUAN2_INCLUDES AND ASSUAN2_LIBRARIES )
set( _seem_to_have_cached_assuan2 true )
endif()
if ( _seem_to_have_cached_assuan2 )
set( ASSUAN2_FOUND true )
else()
set( ASSUAN2_FOUND false )
find_program( _ASSUAN2CONFIG_EXECUTABLE NAMES libassuan-config )
# if libassuan-config has been found
if ( _ASSUAN2CONFIG_EXECUTABLE )
message( STATUS "Found libassuan-config at ${_ASSUAN2CONFIG_EXECUTABLE}" )
exec_program( ${_ASSUAN2CONFIG_EXECUTABLE} ARGS --version OUTPUT_VARIABLE ASSUAN2_VERSION )
set( _ASSUAN2_MIN_VERSION "2.0.0" )
if( ASSUAN2_VERSION VERSION_GREATER ${_ASSUAN2_MIN_VERSION} )
set( _ASSUAN2_INSTALLED_VERSION_OK TRUE )
endif()
if ( NOT _ASSUAN2_INSTALLED_VERSION_OK )
message( STATUS "The installed version of assuan is too old: ${ASSUAN2_VERSION} (required: >= ${_ASSUAN2_MIN_VERSION})" )
else()
message( STATUS "Found assuan v${ASSUAN2_VERSION}" )
exec_program( ${_ASSUAN2CONFIG_EXECUTABLE} ARGS --libs OUTPUT_VARIABLE _assuan2_config_libs RETURN_VALUE _ret )
if ( _ret )
set( _assuan2_config_libs )
endif()
# append -lgpg-error to the list of libraries, if necessary
if ( _assuan2_config_libs AND NOT _assuan2_config_libs MATCHES "lgpg-error" )
set( _assuan2_config_libs "${_assuan2_config_libs} -lgpg-error" )
endif()
if ( _assuan2_config_libs )
exec_program( ${_ASSUAN2CONFIG_EXECUTABLE} ARGS --cflags OUTPUT_VARIABLE _ASSUAN2_CFLAGS )
if ( _ASSUAN2_CFLAGS )
string( REGEX REPLACE "(\r?\n)+$" " " _ASSUAN2_CFLAGS "${_ASSUAN2_CFLAGS}" )
string( REGEX REPLACE " *-I" ";" ASSUAN2_INCLUDES "${_ASSUAN2_CFLAGS}" )
endif()
if ( _assuan2_config_libs )
set( _assuan2_library_dirs )
set( _assuan2_library_names )
string( REGEX REPLACE " +" ";" _assuan2_config_libs "${_assuan2_config_libs}" )
foreach( _flag ${_assuan2_config_libs} )
if ( "${_flag}" MATCHES "^-L" )
string( REGEX REPLACE "^-L" "" _dir "${_flag}" )
file( TO_CMAKE_PATH "${_dir}" _dir )
set( _assuan2_library_dirs ${_assuan2_library_dirs} "${_dir}" )
elseif( "${_flag}" MATCHES "^-l" )
string( REGEX REPLACE "^-l" "" _name "${_flag}" )
set( _assuan2_library_names ${_assuan2_library_names} "${_name}" )
endif()
endforeach()
set( ASSUAN2_FOUND true )
foreach( _name ${_assuan2_library_names} )
set( _assuan2_${_name}_lib )
# if -L options were given, look only there
if ( _assuan2_library_dirs )
find_library( _assuan2_${_name}_lib NAMES ${_name} PATHS ${_assuan2_library_dirs} NO_DEFAULT_PATH )
endif()
# if not found there, look in system directories
if ( NOT _assuan2_${_name}_lib )
find_library( _assuan2_${_name}_lib NAMES ${_name} )
endif()
# if still not found, then the whole flavour isn't found
if ( NOT _assuan2_${_name}_lib )
if ( ASSUAN2_FOUND )
set( ASSUAN2_FOUND false )
set( _not_found_reason "dependant library ${_name} wasn't found" )
endif()
endif()
set( ASSUAN2_LIBRARIES ${ASSUAN2_LIBRARIES} "${_assuan2_${_name}_lib}" )
endforeach()
#check_c_library_exists_explicit( assuan assuan_check_version "${_ASSUAN2_CFLAGS}" "${ASSUAN2_LIBRARIES}" ASSUAN2_FOUND )
if ( ASSUAN2_FOUND )
message( STATUS " Checking whether assuan is usable...yes" )
else()
message( STATUS " Checking whether assuan is usable...no" )
message( STATUS " (${_not_found_reason})" )
endif()
endif()
# ensure that they are cached
set( ASSUAN2_INCLUDES ${ASSUAN2_INCLUDES} )
set( ASSUAN2_LIBRARIES ${ASSUAN2_LIBRARIES} )
endif()
endif()
endif()
endif()
macro_bool_to_01( ASSUAN2_FOUND HAVE_ASSUAN2 )
endif() # WIN32 | Unix
if ( NOT Assuan2_FIND_QUIETLY )
if ( ASSUAN2_FOUND )
message( STATUS "Usable assuan found." )
message( STATUS " Includes: ${ASSUAN2_INCLUDES}" )
message( STATUS " Libraries: ${ASSUAN2_LIBRARIES}" )
else()
message( STATUS "No usable assuan found." )
endif()
if( Assuan2_FIND_REQUIRED )
set( _ASSUAN2_TYPE "REQUIRED" )
else()
set( _ASSUAN2_TYPE "OPTIONAL" )
endif()
if ( WIN32 )
set( _assuan2_homepage "http://www.gpg4win.org" )
else()
set( _assuan2_homepage "http://www.gnupg.org/related_software/libassuan" )
endif()
set_package_properties(ASSUAN2 PROPERTIES DESCRIPTION "Assuan v2 IPC library"
URL ${_assuan2_homepage}
TYPE ${_ASSUAN2_TYPE}
PURPOSE "Needed for Kleopatra to act as the GnuPG UI Server"
)
else()
if ( Assuan2_FIND_REQUIRED AND NOT ASSUAN2_FOUND )
message( FATAL_ERROR "Assuan2 is required but was not found." )
endif()
endif()