#Licensed to the Apache Software Foundation(ASF) under one
# or more contributor license agreements.See the NOTICE file
#distributed with this work for additional information
#regarding copyright ownership.The ASF licenses this file
#to you under the Apache License, Version 2.0(the
#"License"); you may not use this file except in compliance
#with the License.You may obtain a copy of the License at
#
#http:  // www.apache.org/licenses/LICENSE-2.0
#
#Unless required by applicable law or agreed to in writing, software
#distributed under the License is distributed on an "AS IS" BASIS,
#WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
#See the License for the specific language governing permissions and
#limitations under the License.

cmake_minimum_required(VERSION 3.4) project(templates.security)

    find_package(OpenSSL 1.0.2 REQUIRED)

        file(GLOB_RECURSE SOURCES "*.cpp")

            add_library(securityImpl SHARED ${SOURCES})

                include(GenerateExportHeader) generate_export_header(
                    securityImpl)

                    target_include_directories(
                        securityImpl PUBLIC
                            $<BUILD_INTERFACE : ${CMAKE_CURRENT_BINARY_DIR}>)

                        include_directories(${NATIVECLIENT_INCLUDE_DIR})

                            if (${WIN32}) set(GEODE_NATIVE_CACHE
                                              "${NATIVECLIENT_LIBRARIES}/"
                                              "apache-geode${CMAKE_IMPORT_"
                                              "LIBRARY_SUFFIX}") else()
                                get_filename_component(
                                    GEODE_NATIVE_CACHE
                                    "${NATIVECLIENT_LIBRARIES}/"
                                    "${CMAKE_SHARED_LIBRARY_PREFIX}apache-"
                                    "geode${CMAKE_SHARED_LIBRARY_"
                                    "SUFFIX}" ABSOLUTE) endif()

                                    target_link_libraries(securityImpl PUBLIC ${
                                        GEODE_NATIVE_CACHE} OpenSSL::Crypto
                                                              OpenSSL::SSL)

                                        install(TARGETS securityImpl RUNTIME
                                                    DESTINATION ${
                                                        GEODE_NATIVE_HOME} /
                                                bin LIBRARY DESTINATION ${
                                                    GEODE_NATIVE_HOME} /
                                                lib)
