From bf1345828ec10a03a0c86168a1f2c3f3eb64bd8a Mon Sep 17 00:00:00 2001 From: Shawn Quick Date: Mon, 11 Nov 2019 19:47:21 -0800 Subject: [PATCH] adding cmake --- cmake/findPoco.cmake | 219 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 219 insertions(+) create mode 100644 cmake/findPoco.cmake diff --git a/cmake/findPoco.cmake b/cmake/findPoco.cmake new file mode 100644 index 0000000..7b572af --- /dev/null +++ b/cmake/findPoco.cmake @@ -0,0 +1,219 @@ +# - 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}") +