| # |
| # 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. |
| # |
| |
| # Building AMQP.Net Lite shim requires |
| # * DotNet version 2.1 |
| # |
| # Define -DBUILD_AMQPNETLITE=ON (or OFF) at the cmake command line |
| # to force a build or not. |
| |
| project (qpid-interop-test-amqpnetlite-shims) |
| |
| cmake_minimum_required(VERSION 2.8.7 FATAL_ERROR) |
| |
| |
| # Check for presence of dotnet assembly |
| MACRO (check_dotnet_assembly |
| env_var # Environment variable name to be checked containing path to directory |
| file_name # Name of file in directory to be checked |
| found_flag) # Variable which will contain ON or OFF if successfully found |
| if ("${${env_var}}" STREQUAL "") |
| message(STATUS "AMQP.Net Lite shim requires '${file_name}' to be in folder located in '${env_var}' environment variable, but '${env_var}' is not defined.") |
| set(${found_flag} OFF) |
| else() |
| if (NOT EXISTS ${${env_var}}) |
| # Env var "env_var" is set, check if its value is a directory |
| message(STATUS "AMQP.Net Lite shim requires '${file_name}' to be in folder located in '${env_var}' environment variable") |
| message(STATUS "AMQP.Net Lite library directory '${${env_var}}' does not exist.") |
| set(${found_flag} OFF) |
| else() |
| # Check file "file_name" exists in directory contained in env var "env_var" |
| if (EXISTS ${${env_var}}/${file_name}) |
| message(STATUS "Required dll found: ${${env_var}}/${file_name}") |
| else() |
| message(STATUS "AMQP.Net Lite shim requires '${file_name}' to be in folder located in '${env_var}' environment variable, but was not found") |
| set(${found_flag} OFF) |
| endif() |
| endif() |
| endif() |
| ENDMACRO(check_dotnet_assembly) |
| |
| |
| # Configure/build/install a single test |
| MACRO (define_lite_test |
| testname) # Name of test |
| |
| # Configure the csproj files |
| configure_file( ${testname}/Receiver/Receiver.csproj.in |
| ${CMAKE_CURRENT_BINARY_DIR}/${testname}/Receiver/Receiver.csproj |
| @ONLY) |
| configure_file( ${testname}/Sender/Sender.csproj.in |
| ${CMAKE_CURRENT_BINARY_DIR}/${testname}/Sender/Sender.csproj |
| @ONLY) |
| |
| # Emit the custom build commands |
| add_custom_target( |
| amqpnetlite_${testname}_Sender |
| ALL |
| COMMAND cp ${CMAKE_CURRENT_SOURCE_DIR}/${testname}/Sender/Sender.cs ${CMAKE_BINARY_DIR}/shims/amqpnetlite/src/${testname}/Sender/ |
| COMMAND dotnet add package AMQPNetLite |
| COMMAND dotnet add package Newtonsoft.Json |
| COMMAND dotnet publish --output ${LITE_INSTALL_ROOT}/${testname}/Sender/ --verbosity minimal |
| DEPENDS |
| ${CMAKE_CURRENT_BINARY_DIR}/${testname}/Sender/Sender.csproj |
| ${CMAKE_CURRENT_SOURCE_DIR}/${testname}/Sender/Sender.cs |
| WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/${testname}/Sender |
| COMMENT Cross compiling amqpnetlite ${testname}/Sender |
| ) |
| |
| add_custom_target( |
| amqpnetlite_${testname}_Receiver |
| ALL |
| COMMAND cp ${CMAKE_CURRENT_SOURCE_DIR}/${testname}/Receiver/Receiver.cs ${CMAKE_BINARY_DIR}/shims/amqpnetlite/src/${testname}/Receiver/ |
| COMMAND dotnet add package AMQPNetLite |
| COMMAND dotnet publish --output ${LITE_INSTALL_ROOT}/${testname}/Receiver/ --verbosity minimal |
| DEPENDS |
| ${CMAKE_CURRENT_BINARY_DIR}/${testname}/Receiver/Receiver.csproj |
| ${CMAKE_CURRENT_SOURCE_DIR}/${testname}/Receiver/Receiver.cs |
| WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/${testname}/Receiver |
| COMMENT Cross compiling amqpnetlite ${testname}/Receiver |
| ) |
| |
| ENDMACRO (define_lite_test) |
| |
| |
| |
| |
| set(build_amqpnetlite_default ON) # Set BUILD_AMQPNETLITE control variable based on prerequisites being present |
| set(REQUIRED_DOTNET_VERSION 2.1) |
| set(BUILD_CONFIG Release) # Debug or Release |
| |
| # --- Check prerequisites --- |
| # 1. Find dotnet |
| find_program(DOTNET dotnet) |
| if (DOTNET STREQUAL "DOTNET-NOTFOUND") |
| message(STATUS "dotnet not found.") |
| set(build_amqpnetlite_default OFF) |
| else() |
| # 2. dotnet found. Check required version exists |
| execute_process(COMMAND dotnet --version OUTPUT_VARIABLE ov) |
| if("${ov}" STREQUAL "") |
| message(STATUS "dotnet appears to be installed but version is not detected. dotnet version ${REQUIRED_DOTNET_VERSION} required.") |
| set(build_amqpnetlite_default OFF) |
| else() |
| # 3. dotnet version string obtained, isolate version number as string, check version requirement |
| string(REGEX MATCH "[0-9]+(\\.[0-9]+)" dotnet_ver "${ov}") |
| if (${dotnet_ver} VERSION_EQUAL "${REQUIRED_DOTNET_VERSION}") |
| message(STATUS "dotnet version ${dotnet_ver} found.") |
| else() |
| message(STATUS "dotnet version ${dotnet_ver} found. dotnet version ${REQUIRED_DOTNET_VERSION} required.") |
| set(build_amqpnetlite_default OFF) |
| endif() |
| endif() |
| endif() |
| |
| # Set option that controls the build process |
| option(BUILD_AMQPNETLITE "Build AMQP.Net Lite shim under dotnet v.${REQUIRED_DOTNET_VERSION}" ${build_amqpnetlite_default}) |
| message(STATUS "BUILD_AMQPNETLITE = ${BUILD_AMQPNETLITE}") |
| |
| # --- Stage the build --- |
| if (BUILD_AMQPNETLITE) |
| |
| # define lite install root |
| set(LITE_INSTALL_ROOT ${CMAKE_INSTALL_PREFIX}/libexec/qpid_interop_test/shims/amqpnetlite) |
| |
| # define tests |
| define_lite_test (amqp_types_test) |
| define_lite_test (amqp_large_content_test) |
| |
| endif () |