|
| 1 | +# |
| 2 | +# Copyright 2010-2017 Amazon.com, Inc. or its affiliates. All Rights Reserved. |
| 3 | +# |
| 4 | +# Licensed under the Apache License, Version 2.0 (the "License"). |
| 5 | +# You may not use this file except in compliance with the License. |
| 6 | +# A copy of the License is located at |
| 7 | +# |
| 8 | +# http://aws.amazon.com/apache2.0 |
| 9 | +# |
| 10 | +# or in the "license" file accompanying this file. This file is distributed |
| 11 | +# on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either |
| 12 | +# express or implied. See the License for the specific language governing |
| 13 | +# permissions and limitations under the License. |
| 14 | +# |
| 15 | + |
| 16 | +# When using AWSSDK package, users need to tell the installation root dir |
| 17 | +# by setting up variable as set(AWSSDK_ROOT_DIR, "<path/to/dir>") |
| 18 | +# In Windows the dir is like C:/Progra~1/AWSSDK/ |
| 19 | +# In Unix like system the dir is like /usr/local/ |
| 20 | +# if AWSSDK_ROOT_DIR doesn't appear, this module will identify it automatically |
| 21 | + |
| 22 | +# By default: |
| 23 | +# The cmake files will all be in <prefix>/lib/cmake dir |
| 24 | +# The hearders will all be in <prefix>/include dir |
| 25 | + |
| 26 | +# The libraries will all be in <prefix>/lib/<platform_prefix> dir |
| 27 | +# The binaries will all be in <prefix>/bin/<platform_prefix> dir |
| 28 | +# The archives will all be in <prefix>/lib/<platform_prefix> dir if target is shared, |
| 29 | +# otherwise will be in <prefix>/bin/<platform_prefix> dir. |
| 30 | + |
| 31 | +# Platfrom_prefix is determined on compile time nbu option SIMPLE_INSTALL |
| 32 | +# such as "<linux/intel64>" |
| 33 | + |
| 34 | +unset(AWSSDK_FOUND CACHE) |
| 35 | + |
| 36 | +# set default platform prefix to "", but it could be inherited from platfromDeps if any |
| 37 | +unset(AWSSDK_PLATFORM_PREFIX CACHE) |
| 38 | + |
| 39 | +include(${CMAKE_CURRENT_LIST_DIR}/AWSSDKConfigVersion.cmake) |
| 40 | +include(${CMAKE_CURRENT_LIST_DIR}/sdksCommon.cmake) |
| 41 | +include(${CMAKE_CURRENT_LIST_DIR}/platformDeps.cmake) |
| 42 | + |
| 43 | +if (NOT AWSSDK_INSTALL_LIBDIR) |
| 44 | + set(AWSSDK_INSTALL_LIBDIR "lib") |
| 45 | +endif() |
| 46 | + |
| 47 | +if (NOT AWSSDK_INSTALL_BINDIR) |
| 48 | + set(AWSSDK_INSTALL_BINDIR "bin") |
| 49 | +endif() |
| 50 | + |
| 51 | +if (NOT AWSSDK_INSTALL_INCLUDEDIR) |
| 52 | + set(AWSSDK_INSTALL_INCLUDEDIR "include") |
| 53 | +endif() |
| 54 | + |
| 55 | +# on Windows or Win64 dlls are treated as runtime target and installed in bindir |
| 56 | +if (WIN32) |
| 57 | + set(AWSSDK_INSTALL_LIBDIR "${AWSSDK_INSTALL_BINDIR}") |
| 58 | +endif() |
| 59 | + |
| 60 | + |
| 61 | +# Compute the default installation root relative to this file. |
| 62 | +# from prefix/lib/cmake/AWSSDK/xx.cmake to prefix |
| 63 | +get_filename_component(AWSSDK_DEFAULT_ROOT_DIR "${CMAKE_CURRENT_LIST_FILE}" PATH) |
| 64 | +get_filename_component(AWSSDK_DEFAULT_ROOT_DIR "${AWSSDK_DEFAULT_ROOT_DIR}" PATH) |
| 65 | +get_filename_component(AWSSDK_DEFAULT_ROOT_DIR "${AWSSDK_DEFAULT_ROOT_DIR}" PATH) |
| 66 | +get_filename_component(AWSSDK_DEFAULT_ROOT_DIR "${AWSSDK_DEFAULT_ROOT_DIR}" PATH) |
| 67 | +if(AWSSDK_DEFAULT_ROOT_DIR STREQUAL "/") |
| 68 | + set(AWSSDK_DEFAULT_ROOT_DIR "") |
| 69 | +endif() |
| 70 | + |
| 71 | +# currently AWSSDK_ROOT_DIR is either empty or user specified |
| 72 | +if (AWSSDK_ROOT_DIR) |
| 73 | + find_file(AWSSDK_CORE_HEADER_FILE Aws.h |
| 74 | + "${AWSSDK_ROOT_DIR}/${AWSSDK_INSTALL_INCLUDEDIR}/aws/core" |
| 75 | + "${AWSSDK_DEFAULT_ROOT_DIR}/${AWSSDK_INSTALL_INCLUDEDIR}/aws/core" |
| 76 | + ) |
| 77 | +else() |
| 78 | + find_file(AWSSDK_CORE_HEADER_FILE Aws.h |
| 79 | + "/usr/${AWSSDK_INSTALL_INCLUDEDIR}/aws/core" |
| 80 | + "/usr/local/${AWSSDK_INSTALL_INCLUDEDIR}/aws/core" |
| 81 | + "C:/Progra~1/AWSSDK/${AWSSDK_INSTALL_INCLUDEDIR}/aws/core" |
| 82 | + "C:/Program Files/AWSSDK/${AWSSDK_INSTALL_INCLUDEDIR}/aws/core" |
| 83 | + "C:/Program Files/aws-cpp-sdk-all/${AWSSDK_INSTALL_INCLUDEDIR}/aws/core" |
| 84 | + "C:/Program Files (x86)/aws-cpp-sdk-all/${AWSSDK_INSTALL_INCLUDEDIR}/aws/core" |
| 85 | + "C:/AWSSDK/${AWSSDK_INSTALL_INCLUDEDIR}/aws/core" |
| 86 | + "${AWSSDK_DEFAULT_ROOT_DIR}/${AWSSDK_INSTALL_INCLUDEDIR}/aws/core" |
| 87 | + ) |
| 88 | +endif() |
| 89 | + |
| 90 | +if (NOT AWSSDK_CORE_HEADER_FILE) |
| 91 | + message(FATAL_ERROR "AWS SDK for C++ is missing, please install it first") |
| 92 | +endif() |
| 93 | + |
| 94 | +# based on core header file path, inspects the actual AWSSDK_ROOT_DIR |
| 95 | +get_filename_component(AWSSDK_ROOT_DIR "${AWSSDK_CORE_HEADER_FILE}" PATH) |
| 96 | +get_filename_component(AWSSDK_ROOT_DIR "${AWSSDK_ROOT_DIR}" PATH) |
| 97 | +get_filename_component(AWSSDK_ROOT_DIR "${AWSSDK_ROOT_DIR}" PATH) |
| 98 | +get_filename_component(AWSSDK_ROOT_DIR "${AWSSDK_ROOT_DIR}" PATH) |
| 99 | + |
| 100 | +if (NOT AWSSDK_ROOT_DIR) |
| 101 | + message(FATAL_ERROR "AWSSDK_ROOT_DIR is not set or can't be calculated from the path of core header file") |
| 102 | +endif() |
| 103 | + |
| 104 | + |
| 105 | +find_library(AWSSDK_CORE_LIB_FILE aws-cpp-sdk-core |
| 106 | + "${AWSSDK_ROOT_DIR}/${AWSSDK_INSTALL_LIBDIR}/${AWSSDK_PLATFORM_PREFIX}" |
| 107 | + "${AWSSDK_ROOT_DIR}/${AWSSDK_INSTALL_LIBDIR}/${AWSSDK_PLATFORM_PREFIX}/Debug" |
| 108 | + "${AWSSDK_ROOT_DIR}/${AWSSDK_INSTALL_LIBDIR}/${AWSSDK_PLATFORM_PREFIX}/DebugOpt" |
| 109 | + "${AWSSDK_ROOT_DIR}/${AWSSDK_INSTALL_LIBDIR}/${AWSSDK_PLATFORM_PREFIX}/Release" |
| 110 | + "${AWSSDK_ROOT_DIR}/${AWSSDK_INSTALL_LIBDIR}/${AWSSDK_PLATFORM_PREFIX}/RelWithDebInfo" |
| 111 | + "${AWSSDK_ROOT_DIR}/${AWSSDK_INSTALL_LIBDIR}/${AWSSDK_PLATFORM_PREFIX}/MinSizeRel" |
| 112 | + NO_DEFAULT_PATH) |
| 113 | + |
| 114 | + |
| 115 | +if (NOT AWSSDK_CORE_LIB_FILE) |
| 116 | + message(FATAL_ERROR "AWS SDK for C++ headers found, but we were unable to locate the binaries. Have you deleted or moved it? |
| 117 | + Please make sure header files and binaries are located in INSTALL_ROOT_DIR/INCLUDE_DIR/ and INSTALL_ROOT_DIR/LIB_DIR/[PLATFORM_PREFIX]/[Debug|Config|OtherConfigs]") |
| 118 | +endif() |
| 119 | + |
| 120 | +# based on AWSSDK_CORE_LIB_FILE path, inspects the actual AWSSDK_PLATFROM_PREFIX |
| 121 | +get_filename_component(TEMP_PATH "${AWSSDK_CORE_LIB_FILE}" PATH) |
| 122 | +get_filename_component(TEMP_NAME "${TEMP_PATH}" NAME) |
| 123 | + |
| 124 | +while (NOT TEMP_NAME STREQUAL ${LIB_SEARCH_PREFIX}) |
| 125 | + set(TEMP_PLATFORM_PREFIX "${TEMP_NAME}/${TEMP_PLATFORM_PREFIX}") |
| 126 | + get_filename_component(TEMP_PATH "${TEMP_PATH}" PATH) |
| 127 | + get_filename_component(TEMP_NAME "${TEMP_PATH}" NAME) |
| 128 | +endwhile() |
| 129 | + |
| 130 | +set(AWSSDK_PLATFORM_PREFIX "${TEMP_PLATFORM_PREFIX}") |
| 131 | + |
| 132 | +set(AWSSDK_FOUND "1") |
| 133 | +set(AWSSDK_INCLUDE_DIR "${AWSSDK_ROOT_DIR}/${AWSSDK_INSTALL_INCLUDEDIR}") |
| 134 | +set(AWSSDK_CMAKE_DIR "${AWSSDK_ROOT_DIR}/${AWSSDK_INSTALL_LIBDIR}/cmake") |
| 135 | +set(AWSSDK_LIB_DIR "${AWSSDK_ROOT_DIR}/${AWSSDK_INSTALL_LIBDIR}/${AWSSDK_PLATFORM_PREFIX}") |
| 136 | +set(AWSSDK_BIN_DIR "${AWSSDK_ROOT_DIR}/${AWSSDK_INSTALL_BINDIR}/${AWSSDK_PLATFORM_PREFIX}") |
| 137 | + |
| 138 | + |
| 139 | +if (AWSSDK_PLATFORM_DEPS_LIBS) |
| 140 | + set(AWSSDK_PLATFORM_DEPS "${AWSSDK_PLATFORM_DEPS_LIBS}") |
| 141 | +endif() |
| 142 | + |
| 143 | +if (AWSSDK_CRYPTO_LIBS) |
| 144 | + set(AWSSDK_PLATFORM_DEPS "${AWSSDK_PLATFORM_DEPS}" "${AWSSDK_CRYPTO_LIBS}") |
| 145 | +endif() |
| 146 | + |
| 147 | +if (AWSSDK_CLIENT_LIBS) |
| 148 | + set(AWSSDK_PLATFORM_DEPS "${AWSSDK_PLATFORM_DEPS}" "${AWSSDK_CLIENT_LIBS}") |
| 149 | +endif() |
| 150 | + |
| 151 | +if (AWSSDK_ADDITIONAL_LIBS) |
| 152 | + set(AWSSDK_PLATFORM_DEPS "${AWSSDK_PLATFORM_DEPS}" "${AWSSDK_ADDITIONAL_LIBS}") |
| 153 | +endif() |
| 154 | + |
| 155 | +message(STATUS "Found AWS SDK for C++, Version: ${PACKAGE_VERSION}, Install Root:${AWSSDK_ROOT_DIR}, Platform Prefix:${AWSSDK_PLATFORM_PREFIX}, Platform Dependent Libraries: ${AWSSDK_PLATFORM_DEPS}") |
| 156 | + |
| 157 | + |
| 158 | +# copy libs of services in SERVICE_LIST and all there dependent libs to DEST_DIR |
| 159 | +# CONFIG denote copy release or debug version |
| 160 | +macro(AWSSDK_CPY_DYN_LIBS SERVICE_LIST CONFIG DEST_DIR) |
| 161 | + set(ALL_SERVICES "core") |
| 162 | + |
| 163 | + foreach(SVC IN LISTS ${SERVICE_LIST}) |
| 164 | + list(APPEND ALL_SERVICES ${SVC}) |
| 165 | + get_dependencies_for_sdk(${SVC} DEPENDENCY_LIST) |
| 166 | + if (DEPENDENCY_LIST) |
| 167 | + string(REPLACE "," ";" LIST_RESULT ${DEPENDENCY_LIST}) |
| 168 | + list(APPEND ALL_SERVICES ${LIST_RESULT}) |
| 169 | + endif() |
| 170 | + unset(DEPENDENCY_LIST CACHE) |
| 171 | + endforeach() |
| 172 | + list(REMOVE_DUPLICATES ALL_SERVICES) |
| 173 | + |
| 174 | + foreach(SVC IN LISTS ALL_SERVICES) |
| 175 | + if (WIN32) |
| 176 | + set(CMAKE_FIND_LIBRARY_SUFFIXES_TEMP ${CMAKE_FIND_LIBRARY_SUFFIXES}) |
| 177 | + set(CMAKE_FIND_LIBRARY_SUFFIXES ".dll") |
| 178 | + endif() |
| 179 | + find_library(LIB_PATH "aws-cpp-sdk-${SVC}" "${AWSSDK_LIB_DIR}/${CONFIG}" NO_DEFAULT_PATH) |
| 180 | + if (NOT LIB_PATH) |
| 181 | + message(FATAL_ERROR "Couldn't find library aws-cpp-sdk-${SVC}") |
| 182 | + endif() |
| 183 | + file(COPY ${LIB_PATH} DESTINATION ${DEST_DIR}) |
| 184 | + unset(LIB_PATH CACHE) |
| 185 | + if (WIN32) |
| 186 | + set(CMAKE_FIND_LIBRARY_SUFFIXES ${CMAKE_FIND_LIBRARY_SUFFIXES_TEMP}) |
| 187 | + endif() |
| 188 | + endforeach() |
| 189 | +endmacro(AWSSDK_CPY_DYN_LIBS) |
| 190 | + |
| 191 | +# output link libs command to OUTPUT_VAR which required by all services from SERVCE_LIST |
| 192 | +macro(AWSSDK_DETERMINE_LIBS_TO_LINK SERVICE_LIST OUTPUT_VAR) |
| 193 | + set(ALL_SERVICES "core") |
| 194 | + |
| 195 | + foreach(SVC IN LISTS ${SERVICE_LIST}) |
| 196 | + list(APPEND ALL_SERVICES ${SVC}) |
| 197 | + get_dependencies_for_sdk(${SVC} DEPENDENCY_LIST) |
| 198 | + if (DEPENDENCY_LIST) |
| 199 | + string(REPLACE "," ";" LIST_RESULT ${DEPENDENCY_LIST}) |
| 200 | + list(APPEND ALL_SERVICES ${LIST_RESULT}) |
| 201 | + endif() |
| 202 | + unset(DEPENDENCY_LIST CACHE) |
| 203 | + endforeach() |
| 204 | + list(REMOVE_DUPLICATES ALL_SERVICES) |
| 205 | + set(${OUTPUT_VAR} "") |
| 206 | + foreach(DEP IN LISTS ALL_SERVICES) |
| 207 | + list(APPEND ${OUTPUT_VAR} "aws-cpp-sdk-${DEP}") |
| 208 | + endforeach() |
| 209 | +endmacro(AWSSDK_DETERMINE_LIBS_TO_LINK) |
| 210 | + |
| 211 | +# output high level lib dependencies such as for transfter; sqs; dynamodb etc. |
| 212 | +macro(AWSSDK_LIB_DEPS HIGH_LEVEL_LIB_NAME OUTPUT_VAR) |
| 213 | + get_dependencies_for_sdk(${HIGH_LEVEL_LIB_NAME} DEPENDENCY_LIST) |
| 214 | + if (DEPENDENCY_LIST) |
| 215 | + string(REPLACE "," ";" ${OUTPUT_VAR} ${DEPENDENCY_LIST}) |
| 216 | + list(APPEND ALL_SERVICES ${LIST_RESULT}) |
| 217 | + endif() |
| 218 | + list(APPEND ${OUTPUT_VAR} "core") |
| 219 | + list(REMOVE_DUPLICATES ${OUTPUT_VAR}) |
| 220 | +endmacro(AWSSDK_LIB_DEPS) |
0 commit comments