# - finds the Poco C++ libraries # This module finds the Applied Informatics Poco libraries. # It supports the following components: # # Util (loaded by default) # Foundation (loaded by default) # JSON # XML # Zip # Crypto # Data # Net # NetSSL # OSP # # Usage: # set(ENV{Poco_DIR} path/to/poco/sdk) # find_package(Poco REQUIRED OSP Data Crypto) # # On completion, the script defines the following variables: # # - Compound variables: # Poco_FOUND # - true if all requested components were found. # Poco_LIBRARIES # - contains release (and debug if available) libraries for all requested components. # It has the form "optimized LIB1 debug LIBd1 optimized LIB2 ...", ready for use with the target_link_libraries command. # Poco_INCLUDE_DIRS # - Contains include directories for all requested components. # # - Component variables: # Poco_Xxx_FOUND # - Where Xxx is the properly cased component name (eg. 'Util', 'OSP'). # True if a component's library or debug library was found successfully. # Poco_Xxx_LIBRARY # - Library for component Xxx. # Poco_Xxx_LIBRARY_DEBUG # - debug library for component Xxx # Poco_Xxx_INCLUDE_DIR # - include directory for component Xxx # # - OSP BundleCreator variables: (i.e. bundle.exe on windows, bundle on unix-likes) # (is only discovered if OSP is a requested component) # Poco_OSP_Bundle_EXECUTABLE_FOUND # - true if the bundle-creator executable was found. # Poco_OSP_Bundle_EXECUTABLE # - the path to the bundle-creator executable. # # Author: Andreas Stahl andreas.stahl@tu-dresden.de set(Poco_HINTS /usr/local C:/AppliedInformatics ${Poco_DIR} $ENV{Poco_DIR} ) if(NOT Poco_ROOT_DIR) # look for the root directory, first for the source-tree variant find_path(Poco_ROOT_DIR NAMES Foundation/include/Poco/Poco.h HINTS ${Poco_HINTS} ) if(NOT Poco_ROOT_DIR) # this means poco may have a different directory structure, maybe it was installed, let's check for that message(STATUS "Looking for Poco install directory structure.") find_path(Poco_ROOT_DIR NAMES include/Poco/Poco.h HINTS ${Poco_HINTS} ) if(NOT Poco_ROOT_DIR) # poco was still not found -> Fail if(Poco_FIND_REQUIRED) message(FATAL_ERROR "Poco: Could not find Poco install directory") endif() if(NOT Poco_FIND_QUIETLY) message(STATUS "Poco: Could not find Poco install directory") endif() return() else() # poco was found with the make install directory structure message(STATUS "Assuming Poco install directory structure at ${Poco_ROOT_DIR}.") set(Poco_INSTALLED true) endif() endif() endif() # add dynamic library directory if(WIN32) find_path(Poco_RUNTIME_LIBRARY_DIRS NAMES PocoFoundation.dll HINTS ${Poco_ROOT_DIR} PATH_SUFFIXES bin lib ) endif() # if installed directory structure, set full include dir if(Poco_INSTALLED) set(Poco_INCLUDE_DIRS ${Poco_ROOT_DIR}/include/ CACHE PATH "The global include path for Poco") endif() # append the default minimum components to the list to find list(APPEND components ${Poco_FIND_COMPONENTS} # default components: "Util" "Foundation" ) list(REMOVE_DUPLICATES components) # remove duplicate defaults foreach( component ${components} ) #if(NOT Poco_${component}_FOUND) # include directory for the component if(NOT Poco_${component}_INCLUDE_DIR) if(component STREQUAL "NetSSL") set(component_INCLUDE_NAMES "Poco/Net/NetSSL.h" ) else() set(component_INCLUDE_NAMES "Poco/${component}.h" # e.g. Foundation.h "Poco/${component}/${component}.h" # e.g. OSP/OSP.h Util/Util.h ) endif() find_path(Poco_${component}_INCLUDE_DIR NAMES ${component_INCLUDE_NAMES} HINTS ${Poco_ROOT_DIR} PATH_SUFFIXES include ${component}/include ) endif() if(NOT Poco_${component}_INCLUDE_DIR) message(FATAL_ERROR "Poco_${component}_INCLUDE_DIR NOT FOUND") else() list(APPEND Poco_INCLUDE_DIRS ${Poco_${component}_INCLUDE_DIR}) endif() # release library if(NOT Poco_${component}_LIBRARY) find_library( Poco_${component}_LIBRARY NAMES Poco${component} HINTS ${Poco_ROOT_DIR} PATH_SUFFIXES lib bin ) if(Poco_${component}_LIBRARY) message(STATUS "Found Poco ${component}: ${Poco_${component}_LIBRARY}") endif() endif() if(Poco_${component}_LIBRARY) list(APPEND Poco_LIBRARIES "optimized" ${Poco_${component}_LIBRARY} ) mark_as_advanced(Poco_${component}_LIBRARY) endif() # debug library if(NOT Poco_${component}_LIBRARY_DEBUG) find_library( Poco_${component}_LIBRARY_DEBUG Names Poco${component}d HINTS ${Poco_ROOT_DIR} PATH_SUFFIXES lib bin ) if(Poco_${component}_LIBRARY_DEBUG) message(STATUS "Found Poco ${component} (debug): ${Poco_${component}_LIBRARY_DEBUG}") endif() endif(NOT Poco_${component}_LIBRARY_DEBUG) if(Poco_${component}_LIBRARY_DEBUG) list(APPEND Poco_LIBRARIES "debug" ${Poco_${component}_LIBRARY_DEBUG}) mark_as_advanced(Poco_${component}_LIBRARY_DEBUG) endif() # mark component as found or handle not finding it if(Poco_${component}_LIBRARY_DEBUG OR Poco_${component}_LIBRARY) set(Poco_${component}_FOUND TRUE) elseif(NOT Poco_FIND_QUIETLY) message(FATAL_ERROR "Could not find Poco component ${component}!") endif() endforeach() if(DEFINED Poco_LIBRARIES) set(Poco_FOUND true) endif() if(${Poco_OSP_FOUND}) # find the osp bundle program find_program( Poco_OSP_Bundle_EXECUTABLE NAMES bundle HINTS ${Poco_RUNTIME_LIBRARY_DIRS} ${Poco_ROOT_DIR} PATH_SUFFIXES bin OSP/BundleCreator/bin/Darwin/x86_64 OSP/BundleCreator/bin/Darwin/i386 DOC "The executable that bundles OSP packages according to a .bndlspec specification." ) if(Poco_OSP_Bundle_EXECUTABLE) set(Poco_OSP_Bundle_EXECUTABLE_FOUND true) endif() # include bundle script file find_file(Poco_OSP_Bundles_file NAMES PocoBundles.cmake HINTS ${CMAKE_MODULE_PATH}) if(${Poco_OSP_Bundles_file}) include(${Poco_OSP_Bundles_file}) endif() endif() message(STATUS "Found Poco: ${Poco_LIBRARIES}")