http://git-wip-us.apache.org/repos/asf/qpid-proton-j/blob/2f85988e/proton-c/CMakeLists.txt ---------------------------------------------------------------------- diff --git a/proton-c/CMakeLists.txt b/proton-c/CMakeLists.txt deleted file mode 100644 index 5f26d43..0000000 --- a/proton-c/CMakeLists.txt +++ /dev/null @@ -1,751 +0,0 @@ -# -# 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. -# - -include(CheckLibraryExists) -include(CheckSymbolExists) - -include(soversion.cmake) - -add_custom_target(docs) -add_custom_target(doc DEPENDS docs) - -# Set the default SSL/TLS implementation -find_package(OpenSSL) -find_package(PythonInterp REQUIRED) -find_package(SWIG) -# FindSwig.cmake "forgets" make its outputs advanced like a good citizen -mark_as_advanced(SWIG_DIR SWIG_EXECUTABLE SWIG_VERSION) - -# See if Cyrus SASL is available -find_library(CYRUS_SASL_LIBRARY sasl2) -find_path(CYRUS_SASL_INCLUDE_DIR sasl/sasl.h PATH_SUFFIXES include) -find_package_handle_standard_args(CyrusSASL DEFAULT_MSG CYRUS_SASL_LIBRARY CYRUS_SASL_INCLUDE_DIR) -mark_as_advanced(CYRUS_SASL_LIBRARY CYRUS_SASL_INCLUDE_DIR) - -# Find saslpasswd2 executable to generate test config -find_program(SASLPASSWD_EXE saslpasswd2 DOC "Program used to make SASL user db for testing") -mark_as_advanced(SASLPASSWD_EXE) - -if(WIN32 AND NOT CYGWIN) - # linking against Windows native libraries, including mingw - set (PN_WINAPI TRUE) -endif(WIN32 AND NOT CYGWIN) - -set(ssl_impl, none) -if(PN_WINAPI) - set(ssl_impl schannel) - set(ssl_providers "'none','schannel','openssl'") -else(PN_WINAPI) - if (OPENSSL_FOUND) - set(ssl_impl openssl) - endif (OPENSSL_FOUND) - set(ssl_providers "'none','openssl'") -endif(PN_WINAPI) -set(SSL_IMPL ${ssl_impl} CACHE STRING "Library to use for SSL/TLS support. Valid values: ${ssl_providers}") - -set(sasl_providers cyrus none) -if (CYRUSSASL_FOUND) - set (sasl_impl cyrus) -else () - set (sasl_impl none) -endif () -set(SASL_IMPL ${sasl_impl} CACHE STRING "Library to use for SASL support. Valid values: ${sasl_providers}") - -configure_file ( - "${CMAKE_CURRENT_SOURCE_DIR}/include/proton/version.h.in" - "${CMAKE_CURRENT_BINARY_DIR}/include/proton/version.h" - ) - -include_directories ("${CMAKE_CURRENT_BINARY_DIR}/src") -include_directories ("${CMAKE_CURRENT_BINARY_DIR}/include") -include_directories ("${CMAKE_CURRENT_SOURCE_DIR}/src") -include_directories ("${CMAKE_CURRENT_SOURCE_DIR}/include") - -set (env_py ${PYTHON_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/env.py) - -add_custom_command ( - OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/src/encodings.h - COMMAND ${env_py} PYTHONPATH=${CMAKE_CURRENT_SOURCE_DIR} ${PYTHON_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/src/encodings.h.py > ${CMAKE_CURRENT_BINARY_DIR}/src/encodings.h - DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/src/encodings.h.py - ) - -add_custom_command ( - OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/src/protocol.h - COMMAND ${env_py} PYTHONPATH=${CMAKE_CURRENT_SOURCE_DIR} ${PYTHON_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/src/protocol.h.py > ${CMAKE_CURRENT_BINARY_DIR}/src/protocol.h - DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/src/protocol.h.py - ) - -add_custom_target( - generated_c_files - DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/src/protocol.h ${CMAKE_CURRENT_BINARY_DIR}/src/encodings.h - ) - -# Select IO impl -if(PN_WINAPI) - set (pn_io_impl src/reactor/io/windows/io.c src/reactor/io/windows/iocp.c src/reactor/io/windows/write_pipeline.c) - set (pn_selector_impl src/reactor/io/windows/selector.c) -else(PN_WINAPI) - set (pn_io_impl src/reactor/io/posix/io.c) - set (pn_selector_impl src/reactor/io/posix/selector.c) -endif(PN_WINAPI) - -# Link in SASL if present -if (SASL_IMPL STREQUAL cyrus) - set(pn_sasl_impl src/sasl/sasl.c src/sasl/cyrus_sasl.c) - include_directories (${CYRUS_SASL_INCLUDE_DIR}) - set(SASL_LIB ${CYRUS_SASL_LIBRARY} -lpthread) -elseif (SASL_IMPL STREQUAL none) - set(pn_sasl_impl src/sasl/sasl.c src/sasl/none_sasl.c) -endif () - -# Set Compiler extra flags for Solaris when using SunStudio -if(CMAKE_CXX_COMPILER_ID STREQUAL "SunPro" ) - set( CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -mt" ) -endif() - -if(CMAKE_C_COMPILER_ID STREQUAL "SunPro" ) - set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -mt") -endif() - -# Link in openssl if present -if (SSL_IMPL STREQUAL openssl) - set (pn_ssl_impl src/ssl/openssl.c) - include_directories (${OPENSSL_INCLUDE_DIR}) - set (SSL_LIB ${OPENSSL_LIBRARIES}) -elseif (SSL_IMPL STREQUAL schannel) - set (pn_ssl_impl src/ssl/schannel.c) - set (SSL_LIB Crypt32.lib Secur32.lib) -else () - set (pn_ssl_impl src/ssl/ssl_stub.c) -endif () - -# First check whether we get clock_gettime without any special library linked -CHECK_SYMBOL_EXISTS(clock_gettime "time.h" CLOCK_GETTIME_IN_LIBC) -if (CLOCK_GETTIME_IN_LIBC) - list(APPEND PLATFORM_DEFINITIONS "USE_CLOCK_GETTIME") -else (CLOCK_GETTIME_IN_LIBC) - CHECK_LIBRARY_EXISTS (rt clock_gettime "" CLOCK_GETTIME_IN_RT) - if (CLOCK_GETTIME_IN_RT) - set (TIME_LIB rt) - list(APPEND PLATFORM_DEFINITIONS "USE_CLOCK_GETTIME") - else (CLOCK_GETTIME_IN_RT) - CHECK_SYMBOL_EXISTS(GetSystemTimeAsFileTime "windows.h" WINDOWS_FILETIME) - if (WINDOWS_FILETIME) - list(APPEND PLATFORM_DEFINITIONS "USE_WIN_FILETIME") - else (WINDOWS_FILETIME) - list(APPEND PLATFORM_DEFINITIONS "USE_GETTIMEOFDAY") - endif (WINDOWS_FILETIME) - endif (CLOCK_GETTIME_IN_RT) -endif (CLOCK_GETTIME_IN_LIBC) - -if (PN_WINAPI) - CHECK_SYMBOL_EXISTS(strerror_s "string.h" STRERROR_S_IN_WINAPI) - if (STRERROR_S_IN_WINAPI) - list(APPEND PLATFORM_DEFINITIONS "USE_STRERROR_S") - else (STRERROR_S_IN_WINAPI) - if (MINGW) - message (STATUS, "NOTE: your MinGW version lacks a thread safe strerror") - list(APPEND PLATFORM_DEFINITIONS "USE_OLD_STRERROR") - endif (MINGW) - endif (STRERROR_S_IN_WINAPI) -else (PN_WINAPI) - CHECK_SYMBOL_EXISTS(strerror_r "string.h" STRERROR_R_IN_LIBC) - if (STRERROR_R_IN_LIBC) - list(APPEND PLATFORM_DEFINITIONS "USE_STRERROR_R") - endif (STRERROR_R_IN_LIBC) -endif (PN_WINAPI) - -CHECK_SYMBOL_EXISTS(atoll "stdlib.h" C99_ATOLL) -if (C99_ATOLL) - list(APPEND PLATFORM_DEFINITIONS "USE_ATOLL") -else (C99_ATOLL) - CHECK_SYMBOL_EXISTS(_atoi64 "stdlib.h" WINAPI_ATOI64) - if (WINAPI_ATOI64) - list(APPEND PLATFORM_DEFINITIONS "USE_ATOI64") - else (WINAPI_ATOI64) - message(FATAL_ERROR "No atoll API found") - endif (WINAPI_ATOI64) -endif (C99_ATOLL) - -if (PN_WINAPI) - set (PLATFORM_LIBS ws2_32 Rpcrt4) - list(APPEND PLATFORM_DEFINITIONS "PN_WINAPI") -endif (PN_WINAPI) - -# Try to keep any platform specific overrides together here: - -# MacOS has a bunch of differences in build tools and process and so we have to turn some things -# off if building there: -if (APPLE) - set (NOBUILD_PHP ON) - set (NOENABLE_WARNING_ERROR ON) - set (NOENABLE_UNDEFINED_ERROR ON) -endif (APPLE) - -# Make LTO default to off until we can figure out the valgrind issues -set (NOENABLE_LINKTIME_OPTIMIZATION ON) - -# Add options here called <whatever> they will turn into "ENABLE_<whatever" and can be -# overridden on a platform specific basis above by NOENABLE_<whatever> -set (OPTIONS WARNING_ERROR UNDEFINED_ERROR LINKTIME_OPTIMIZATION HIDE_UNEXPORTED_SYMBOLS) - -foreach (OPTION ${OPTIONS}) - if (NOT NOENABLE_${OPTION}) - set ("DEFAULT_${OPTION}" ON) - endif () -endforeach (OPTION) - -# And add the option here too with help text -option(ENABLE_WARNING_ERROR "Consider compiler warnings to be errors" ${DEFAULT_WARNING_ERROR}) -option(ENABLE_UNDEFINED_ERROR "Check for unresolved library symbols" ${DEFAULT_UNDEFINED_ERROR}) -option(ENABLE_LINKTIME_OPTIMIZATION "Perform link time optimization" ${DEFAULT_LINKTIME_OPTIMIZATION}) -option(ENABLE_HIDE_UNEXPORTED_SYMBOLS "Only export library symbols that are explicitly requested" ${DEFAULT_HIDE_UNEXPORTED_SYMBOLS}) - -# Set any additional compiler specific flags -if (CMAKE_COMPILER_IS_GNUCC) - if (ENABLE_WARNING_ERROR) - set (WERROR "-Werror") - endif (ENABLE_WARNING_ERROR) - set (COMPILE_WARNING_FLAGS "${WERROR} -Wall -pedantic-errors") - # C++ allow "%z" format specifier and variadic macros - set (CXX_WARNING_FLAGS "${COMPILE_WARNING_FLAGS} -Wno-format -Wno-variadic-macros") - if (NOT BUILD_WITH_CXX) - set (COMPILE_WARNING_FLAGS "${COMPILE_WARNING_FLAGS} -Wstrict-prototypes") - set (COMPILE_LANGUAGE_FLAGS "-std=c99") - set (COMPILE_PLATFORM_FLAGS "-std=gnu99") - - execute_process(COMMAND ${CMAKE_C_COMPILER} ${CMAKE_C_COMPILER_ARG1} ${CMAKE_C_COMPILER_ARG2} -dumpversion OUTPUT_VARIABLE GCC_VERSION - OUTPUT_STRIP_TRAILING_WHITESPACE) - if (${GCC_VERSION} VERSION_LESS "4.3.0") - # Only a concern if contibuting code back. - message (STATUS "Old gcc version detected. C++ compatibility checks disabled") - else (${GCC_VERSION} VERSION_LESS "4.3.0") - set (COMPILE_WARNING_FLAGS "${COMPILE_WARNING_FLAGS} -Wc++-compat -Wvla -Wsign-compare -Wwrite-strings") - endif (${GCC_VERSION} VERSION_LESS "4.3.0") - else (NOT BUILD_WITH_CXX) - set (COMPILE_WARNING_FLAGS "${CXX_WARNING_FLAGS}") - endif (NOT BUILD_WITH_CXX) - - if (ENABLE_UNDEFINED_ERROR) - set (CATCH_UNDEFINED "-Wl,--no-undefined") - set (ALLOW_UNDEFINED "-Wl,--allow-shlib-undefined") - endif (ENABLE_UNDEFINED_ERROR) - - if (ENABLE_LINKTIME_OPTIMIZATION) - set (LTO "-flto") - endif (ENABLE_LINKTIME_OPTIMIZATION) - - if (ENABLE_HIDE_UNEXPORTED_SYMBOLS) - set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fvisibility=hidden") - set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fvisibility=hidden") - endif (ENABLE_HIDE_UNEXPORTED_SYMBOLS) -elseif (CMAKE_CXX_COMPILER_ID STREQUAL "SunPro") - if (ENABLE_HIDE_UNEXPORTED_SYMBOLS) - set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -xldscope=hidden") - set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -xldscope=hidden") - endif (ENABLE_HIDE_UNEXPORTED_SYMBOLS) -endif (CMAKE_COMPILER_IS_GNUCC) - -if (CMAKE_C_COMPILER_ID MATCHES "Clang") - if (ENABLE_WARNING_ERROR) - set (COMPILE_WARNING_FLAGS "-Werror -Wall -pedantic") - endif (ENABLE_WARNING_ERROR) -endif() - -if (CMAKE_CXX_COMPILER_ID MATCHES "Clang") - if (ENABLE_WARNING_ERROR) - set (WERROR "-Werror") - endif (ENABLE_WARNING_ERROR) - # TODO aconway 2016-01-06: we should be able to clean up the code and turn on - # some of these warnings. - set (CXX_WARNING_FLAGS "${WERROR} -pedantic -Weverything -Wno-c++98-compat -Wno-c++98-compat-pedantic -Wno-float-equal -Wno-padded -Wno-sign-conversion -Wno-switch-enum -Wno-weak-vtables -Wno-exit-time-destructors -Wno-global-constructors -Wno-shorten-64-to-32 -Wno-documentation -Wno-documentation-unknown-command -Wno-old-style-cast -Wno-missing-noreturn") -endif() - -# Make flags visible to examples. -set(CXX_WARNING_FLAGS "${CXX_WARNING_FLAGS}" PARENT_SCOPE) -set(COMPILE_WARNING_FLAGS "${COMPILE_WARNING_FLAGS}" PARENT_SCOPE) -set(COMPILE_LANGUAGE_FLAGS "${COMPILE_LANGUAGE_FLAGS}" PARENT_SCOPE) -set(LINK_TIME_OPTIMIZATION "${LTO}" PARENT_SCOPE) - - -if (MSVC) - set(CMAKE_DEBUG_POSTFIX "d") - add_definitions( - /wd4244 - /wd4267 - /wd4800 - /wd4996 - ) - set (qpid-proton-platform src/compiler/msvc/snprintf.c) -endif (MSVC) - -macro (pn_absolute_install_dir NAME VALUE PREFIX) - if(IS_ABSOLUTE ${VALUE}) - set(${NAME} "${VALUE}") - elseif(IS_ABSOLUTE ${PREFIX}) - set(${NAME} "${PREFIX}/${VALUE}") - else() - set(${NAME} "${CMAKE_BINARY_DIR}/${PREFIX}/${VALUE}") - endif(IS_ABSOLUTE ${VALUE}) - get_filename_component(${NAME} ${${NAME}} ABSOLUTE) -endmacro() - -pn_absolute_install_dir(PREFIX "." ${CMAKE_INSTALL_PREFIX}) -pn_absolute_install_dir(EXEC_PREFIX "." ${CMAKE_INSTALL_PREFIX}) -pn_absolute_install_dir(LIBDIR ${LIB_INSTALL_DIR} ${CMAKE_INSTALL_PREFIX}) -pn_absolute_install_dir(INCLUDEDIR ${INCLUDE_INSTALL_DIR} ${CMAKE_INSTALL_PREFIX}) - -add_subdirectory(docs/api) -add_subdirectory(../tests/tools/apps/c ../tests/tools/apps/c) - -# for full source distribution: -set (qpid-proton-platform-all - src/platform/platform.c - src/reactor/io/windows/io.c - src/reactor/io/windows/iocp.c - src/reactor/io/windows/write_pipeline.c - src/reactor/io/windows/selector.c - src/reactor/io/posix/io.c - src/reactor/io/posix/selector.c - ) - -# platform specific library build: -set (qpid-proton-platform-io - src/platform/platform.c - ${pn_io_impl} - ${pn_selector_impl} - ) - -# for full source distribution: -set (qpid-proton-layers-all - src/sasl/sasl.c - src/sasl/cyrus_sasl.c - src/sasl/none_sasl.c - src/ssl/openssl.c - src/ssl/schannel.c - src/ssl/ssl_stub.c - ) - -# for current build system's environment: -set (qpid-proton-layers - ${pn_sasl_impl} - ${pn_ssl_impl} - ) - -set (qpid-proton-core - src/core/object/object.c - src/core/object/list.c - src/core/object/map.c - src/core/object/string.c - src/core/object/iterator.c - src/core/object/record.c - - src/core/log.c - src/core/util.c - src/core/error.c - src/core/buffer.c - src/core/types.c - - src/core/framing.c - - src/core/codec.c - src/core/decoder.c - src/core/encoder.c - - src/core/dispatcher.c - src/core/connection_driver.c - src/core/engine.c - src/core/event.c - src/core/autodetect.c - src/core/transport.c - src/core/message.c - ) - -set (qpid-proton-include-generated - ${CMAKE_CURRENT_BINARY_DIR}/src/encodings.h - ${CMAKE_CURRENT_BINARY_DIR}/src/protocol.h - ${CMAKE_CURRENT_BINARY_DIR}/include/proton/version.h - ) - -set (qpid-proton-private-includes - src/extra/scanner.h - src/messenger/store.h - src/messenger/subscription.h - src/messenger/messenger.h - src/messenger/transform.h - src/ssl/ssl-internal.h - src/sasl/sasl-internal.h - src/core/autodetect.h - src/core/log_private.h - src/core/config.h - src/core/encoder.h - src/core/dispatch_actions.h - src/core/engine-internal.h - src/core/transport.h - src/core/framing.h - src/core/buffer.h - src/core/util.h - src/core/dispatcher.h - src/core/data.h - src/core/decoder.h - src/reactor/io/windows/iocp.h - src/reactor/selector.h - src/reactor/io.h - src/reactor/reactor.h - src/reactor/selectable.h - src/platform/platform.h - src/platform/platform_fmt.h - ) - -set (qpid-proton-extra - src/extra/parser.c - src/extra/scanner.c - src/extra/url.c - - src/reactor/reactor.c - src/reactor/handler.c - src/reactor/connection.c - src/reactor/acceptor.c - src/reactor/selectable.c - src/reactor/timer.c - - src/handlers/handshaker.c - src/handlers/iohandler.c - src/handlers/flowcontroller.c - - src/messenger/messenger.c - src/messenger/subscription.c - src/messenger/store.c - src/messenger/transform.c - ) - -set (qpid-proton-include - include/proton/cid.h - include/proton/codec.h - include/proton/condition.h - include/proton/connection.h - include/proton/connection_driver.h - include/proton/delivery.h - include/proton/disposition.h - include/proton/engine.h - include/proton/error.h - include/proton/event.h - include/proton/import_export.h - include/proton/link.h - include/proton/log.h - include/proton/message.h - include/proton/object.h - include/proton/sasl.h - include/proton/session.h - include/proton/ssl.h - include/proton/terminus.h - include/proton/transport.h - include/proton/type_compat.h - include/proton/types.h -) - -set (qpid-proton-include-extra - include/proton/handlers.h - include/proton/messenger.h - include/proton/parser.h - include/proton/reactor.h - include/proton/selectable.h - include/proton/url.h -) - -# note: process bindings after the source lists have been defined so -# the bindings can reference them -add_subdirectory(bindings) - -source_group("API Header Files" FILES ${qpid-proton-include} ${qpid-proton-include-extra}) - -set_source_files_properties ( - ${qpid-proton-core} - ${qpid-proton-layers} - ${qpid-proton-extra} - PROPERTIES - COMPILE_FLAGS "${COMPILE_WARNING_FLAGS} ${COMPILE_LANGUAGE_FLAGS} ${LTO}" - ) - -set_source_files_properties ( - ${qpid-proton-platform} - ${qpid-proton-platform-io} - PROPERTIES - COMPILE_FLAGS "${COMPILE_WARNING_FLAGS} ${COMPILE_PLATFORM_FLAGS} ${LTO}" - COMPILE_DEFINITIONS "${PLATFORM_DEFINITIONS}" - ) - -if (BUILD_WITH_CXX) - set_source_files_properties ( - ${qpid-proton-core} - ${qpid-proton-layers} - ${qpid-proton-extra} - ${qpid-proton-platform} - ${qpid-proton-platform-io} - PROPERTIES LANGUAGE CXX - ) -endif (BUILD_WITH_CXX) - -add_library ( - qpid-proton-core SHARED - ${qpid-proton-core} - ${qpid-proton-layers} - ${qpid-proton-platform} - ${qpid-proton-include} - ${qpid-proton-include-generated} - ) -add_dependencies(qpid-proton-core generated_c_files) - -target_link_libraries (qpid-proton-core ${UUID_LIB} ${SSL_LIB} ${SASL_LIB} ${TIME_LIB} ${PLATFORM_LIBS}) - -set_target_properties ( - qpid-proton-core - PROPERTIES - VERSION "${PN_LIB_SOMAJOR}.${PN_LIB_SOMINOR}" - SOVERSION "${PN_LIB_SOMAJOR}" - LINK_FLAGS "${CATCH_UNDEFINED} ${LTO}" - ) - -add_library( - qpid-proton SHARED - # Proton Core - ${qpid-proton-core} - ${qpid-proton-layers} - ${qpid-proton-platform} - ${qpid-proton-include} - ${qpid-proton-include-generated} - - # Proton Reactor/Messenger - ${qpid-proton-extra} - ${qpid-proton-platform-io} - ${qpid-proton-include-extra} - ) -add_dependencies(qpid-proton generated_c_files) - -target_link_libraries (qpid-proton ${UUID_LIB} ${SSL_LIB} ${SASL_LIB} ${TIME_LIB} ${PLATFORM_LIBS}) - -set_target_properties ( - qpid-proton - PROPERTIES - VERSION "${PN_LIB_SOMAJOR}.${PN_LIB_SOMINOR}" - SOVERSION "${PN_LIB_SOMAJOR}" - LINK_FLAGS "${CATCH_UNDEFINED} ${LTO}" - ) - -if (MSVC) - # guard against use of C99 violating functions on Windows - include(WindowsC99CheckDef) -endif(MSVC) - -# Install executables and libraries -install (TARGETS qpid-proton qpid-proton-core - EXPORT proton - RUNTIME DESTINATION bin - ARCHIVE DESTINATION ${LIB_INSTALL_DIR} - LIBRARY DESTINATION ${LIB_INSTALL_DIR}) - -# Install windows qpid-proton pdb files -if (MSVC) - install(FILES $<TARGET_PDB_FILE:qpid-proton> - DESTINATION bin - CONFIGURATIONS RelWithDebInfo Debug - OPTIONAL) -endif (MSVC) - -# Install header files -file(GLOB headers "include/proton/*.[hi]") -install (FILES ${headers} DESTINATION ${INCLUDE_INSTALL_DIR}/proton) -install (FILES ${CMAKE_CURRENT_BINARY_DIR}/include/proton/version.h - DESTINATION ${INCLUDE_INSTALL_DIR}/proton) - -# Pkg config file -configure_file( - ${CMAKE_CURRENT_SOURCE_DIR}/src/libqpid-proton.pc.in - ${CMAKE_CURRENT_BINARY_DIR}/libqpid-proton.pc @ONLY) -install (FILES - ${CMAKE_CURRENT_BINARY_DIR}/libqpid-proton.pc - DESTINATION ${LIB_INSTALL_DIR}/pkgconfig) -configure_file( - ${CMAKE_CURRENT_SOURCE_DIR}/src/libqpid-proton-core.pc.in - ${CMAKE_CURRENT_BINARY_DIR}/libqpid-proton-core.pc @ONLY) -install (FILES - ${CMAKE_CURRENT_BINARY_DIR}/libqpid-proton-core.pc - DESTINATION ${LIB_INSTALL_DIR}/pkgconfig) - - -if (DEFINED CMAKE_IMPORT_LIBRARY_PREFIX) -set(PROTONLIB ${CMAKE_IMPORT_LIBRARY_PREFIX}qpid-proton${CMAKE_IMPORT_LIBRARY_SUFFIX}) -set(PROTONLIBDEBUG ${CMAKE_IMPORT_LIBRARY_PREFIX}qpid-proton${CMAKE_DEBUG_POSTFIX}${CMAKE_IMPORT_LIBRARY_SUFFIX}) -set(PROTONCORELIB ${CMAKE_IMPORT_LIBRARY_PREFIX}qpid-proton-core${CMAKE_IMPORT_LIBRARY_SUFFIX}) -set(PROTONCORELIBDEBUG ${CMAKE_IMPORT_LIBRARY_PREFIX}qpid-proton-core${CMAKE_DEBUG_POSTFIX}${CMAKE_IMPORT_LIBRARY_SUFFIX}) -else () -set(PROTONLIB ${CMAKE_SHARED_LIBRARY_PREFIX}qpid-proton${CMAKE_SHARED_LIBRARY_SUFFIX}) -set(PROTONLIBDEBUG ${CMAKE_SHARED_LIBRARY_PREFIX}qpid-proton${CMAKE_DEBUG_POSTFIX}${CMAKE_SHARED_LIBRARY_SUFFIX}) -set(PROTONCORELIB ${CMAKE_SHARED_LIBRARY_PREFIX}qpid-proton-core${CMAKE_SHARED_LIBRARY_SUFFIX}) -set(PROTONCORELIBDEBUG ${CMAKE_SHARED_LIBRARY_PREFIX}qpid-proton-core${CMAKE_DEBUG_POSTFIX}${CMAKE_SHARED_LIBRARY_SUFFIX}) -endif () - -include(WriteBasicConfigVersionFile) - -configure_file( - ${CMAKE_CURRENT_SOURCE_DIR}/src/ProtonConfig.cmake.in - ${CMAKE_CURRENT_BINARY_DIR}/ProtonConfig.cmake @ONLY) -write_basic_config_version_file( - ${CMAKE_CURRENT_BINARY_DIR}/ProtonConfigVersion.cmake - VERSION ${PN_VERSION} - COMPATIBILITY AnyNewerVersion) -install (FILES - ${CMAKE_CURRENT_BINARY_DIR}/ProtonConfig.cmake - ${CMAKE_CURRENT_BINARY_DIR}/ProtonConfigVersion.cmake - DESTINATION ${LIB_INSTALL_DIR}/cmake/Proton) - -# c tests: - -add_subdirectory(src/tests) - -if (CMAKE_SYSTEM_NAME STREQUAL Windows) - # No change needed for windows already use correct separator - function(to_native_path path result) - file (TO_NATIVE_PATH "${path}" path) - set (${result} ${path} PARENT_SCOPE) - endfunction() -else (CMAKE_SYSTEM_NAME STREQUAL Windows) - # Just change ';'->':' - function(to_native_path path result) - file (TO_NATIVE_PATH "${path}" path) - string (REGEX REPLACE ";" ":" path "${path}") - set (${result} ${path} PARENT_SCOPE) - endfunction() -endif (CMAKE_SYSTEM_NAME STREQUAL Windows) - -# python test: tests/python/proton-test -if (BUILD_PYTHON) - set (py_root "${pn_test_root}/python") - set (py_src "${CMAKE_CURRENT_SOURCE_DIR}/bindings/python") - set (py_bin "${CMAKE_CURRENT_BINARY_DIR}/bindings/python") - set (py_dll "$<TARGET_FILE_DIR:_cproton>") - set (py_bld "$<TARGET_FILE_DIR:qpid-proton>") # For windows - set (app_path $<TARGET_FILE_DIR:msgr-send> "${pn_test_root}/tools/apps/python") - set (py_path ${py_bld} ${app_path} $ENV{PATH}) - set (py_pythonpath ${py_root} ${py_src} ${py_bin} ${py_dll} $ENV{PYTHONPATH}) - to_native_path ("${py_pythonpath}" py_pythonpath) - to_native_path ("${py_path}" py_path) - - add_test (NAME python-test - COMMAND ${env_py} - "PATH=${py_path}" "PYTHONPATH=${py_pythonpath}" - "CLASSPATH=${CMAKE_BINARY_DIR}/proton-j/proton-j.jar" - "SASLPASSWD=${SASLPASSWD_EXE}" - ${VALGRIND_ENV} - ${PYTHON_EXECUTABLE} "${py_root}/proton-test") - set_tests_properties(python-test PROPERTIES PASS_REGULAR_EXPRESSION "Totals: .* 0 failed") - - # Eventually, we'll get rid of this check when other - # platforms will be supported. Since `setup.py` will skip - # the build for non linux plaforms, it doesn't make sense - # to try to run them. - option(TOX_TEST "Enable muti-version python testing with TOX" ON) - if (CMAKE_SYSTEM_NAME STREQUAL Linux AND TOX_TEST) - find_program(TOX_EXE "tox") - if (CMAKE_BUILD_TYPE MATCHES "Coverage") - message(STATUS "Building for coverage analysis; skipping the python-tox-tests") - elseif (TOX_EXE) - configure_file( - "${CMAKE_CURRENT_SOURCE_DIR}/tox.ini.in" - "${CMAKE_CURRENT_BINARY_DIR}/tox.ini") - add_test (NAME python-tox-test - COMMAND ${env_py} - "PATH=${py_path}" - "CLASSPATH=${CMAKE_BINARY_DIR}/proton-j/proton-j.jar" - "SASLPASSWD=${SASLPASSWD_EXE}" - "SWIG=${SWIG_EXECUTABLE}" - ${VALGRIND_ENV} - ${TOX_EXE}) - set_tests_properties(python-tox-test - PROPERTIES - PASS_REGULAR_EXPRESSION "Totals: .* ignored, 0 failed" - FAIL_REGULAR_EXPRESSION "ERROR:[ ]+py[0-9]*: commands failed") - else (TOX_EXE) - message(STATUS "The tox tool is not available; skipping the python-tox-tests") - endif () - endif (CMAKE_SYSTEM_NAME STREQUAL Linux AND TOX_TEST) - - set (perf_pythonpath "${py_pythonpath}" "${CMAKE_SOURCE_DIR}/examples/cpp") - to_native_path ("${perf_pythonpath}" perf_pythonpath) - add_custom_target(quick_perf_c ${env_py} -- "PATH=${py_path}" "PYTHONPATH=${perf_pythonpath}" - ${PYTHON_EXECUTABLE} "${CMAKE_SOURCE_DIR}/tests/perf/quick_perf.py" "C") - add_dependencies(quick_perf_c reactor-send reactor-recv) - - add_custom_target(quick_perf_py COMMAND ${env_py} -- - "PATH=${py_path}" "PYTHONPATH=${perf_pythonpath}" - ${PYTHON_EXECUTABLE} "${CMAKE_SOURCE_DIR}/tests/perf/quick_perf.py" "PYTHON" - WORKING_DIRECTORY "${CMAKE_SOURCE_DIR}/tests/tools/apps/python") - add_dependencies(quick_perf_py reactor-recv _cproton) - -endif (BUILD_PYTHON) - -find_program(RUBY_EXE "ruby") -if (RUBY_EXE AND BUILD_RUBY) - set (rb_root "${pn_test_root}/ruby") - set (rb_src "${CMAKE_CURRENT_SOURCE_DIR}/bindings/ruby") - set (rb_lib "${CMAKE_CURRENT_SOURCE_DIR}/bindings/ruby/lib") - set (rb_bin "${CMAKE_CURRENT_BINARY_DIR}/bindings/ruby") - set (rb_bld "$<TARGET_FILE_DIR:qpid-proton>") - set (rb_path $ENV{PATH} ${rb_bin} ${rb_bld}) - set (rb_rubylib ${rb_root} ${rb_src} ${rb_bin} ${rb_bld} ${rb_lib}) - to_native_path("${rb_path}" rb_path) - to_native_path("${rb_rubylib}" rb_rubylib) - - # ruby example tests have no dependencies other than standard ruby. - add_test(NAME ruby-example-test - WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}/examples/ruby - COMMAND ${env_py} -- "PATH=${rb_path}" "RUBYLIB=${rb_rubylib}" - ${RUBY_EXE} example_test.rb -v) - - # ruby unit tests: tests/ruby/proton-test - # only enable the tests if the Ruby gem dependencies were found - if (DEFAULT_RUBY_TESTING) - add_test (NAME ruby-unit-test - COMMAND ${env_py} "PATH=${rb_path}" "RUBYLIB=${rb_rubylib}" - "${rb_root}/proton-test") - - # ruby spec tests - find_program(RSPEC_EXE rspec) - if (RSPEC_EXE) - add_test (NAME ruby-spec-test - WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/bindings/ruby - COMMAND ${env_py} "PATH=${rb_path}" "RUBYLIB=${rb_rubylib}" - ${RSPEC_EXE}) - - else(RSPEC_EXE) - message (STATUS "Cannot find rspec, skipping rspec tests") - endif(RSPEC_EXE) - else (DEFAULT_RUBY_TESTING) - message(STATUS "Skipping Ruby tests: missing dependencies") - endif (DEFAULT_RUBY_TESTING) -else (RUBY_EXE) - message (STATUS "Cannot find ruby, skipping ruby tests") -endif() - -mark_as_advanced (RUBY_EXE RSPEC_EXE) - -if (BUILD_JAVASCRIPT) - add_test (javascript-codec ${env_py} node ${pn_test_root}/javascript/codec.js) - add_test (javascript-message ${env_py} node ${pn_test_root}/javascript/message.js) -endif (BUILD_JAVASCRIPT)
http://git-wip-us.apache.org/repos/asf/qpid-proton-j/blob/2f85988e/proton-c/bindings/CMakeLists.txt ---------------------------------------------------------------------- diff --git a/proton-c/bindings/CMakeLists.txt b/proton-c/bindings/CMakeLists.txt deleted file mode 100644 index 37943dc..0000000 --- a/proton-c/bindings/CMakeLists.txt +++ /dev/null @@ -1,144 +0,0 @@ -# -# 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. -# - -# Add bindings that do not require swig here - the directory name must be the same as the binding name -# See below for swig bindings -set(BINDINGS javascript cpp go) - -# Prerequisites for javascript. -# -# It uses a C/C++ to JavaScript cross-compiler called emscripten (https://github.com/kripken/emscripten). Emscripten takes C/C++ -# and compiles it into a highly optimisable subset of JavaScript called asm.js (http://asmjs.org/) that can be -# aggressively optimised and run at near-native speed (usually between 1.5 to 10 times slower than native C/C++). -find_package(Emscripten) -if (EMSCRIPTEN_FOUND) - set (DEFAULT_JAVASCRIPT ON) -endif (EMSCRIPTEN_FOUND) - -# Prerequisites for C++ -if (CMAKE_CXX_COMPILER) - set (DEFAULT_CPP ON) -endif (CMAKE_CXX_COMPILER) - -# Prerequisites for Go -find_program(GO_EXE go) -mark_as_advanced(GO_EXE) -if (GO_EXE) - if(WIN32) - # Go on windows requires gcc tool chain - set (DEFAULT_GO OFF) - else() - set (DEFAULT_GO ON) - endif() -endif (GO_EXE) - -if(SWIG_FOUND) - # Add any new swig bindings here - the directory name must be the same as the binding name - list(APPEND BINDINGS python ruby php perl) - - include(UseSWIG) - - # All swig modules should include ${PROTON_HEADERS} in SWIG_MODULE_<name>_EXTRA_DEPS - file(GLOB PROTON_HEADERS "${CMAKE_SOURCE_DIR}/proton-c/include/proton/*.h") - # All swig modules should include ${BINDING_DEPS} in swig_link_libraries - set (BINDING_DEPS qpid-proton) - - # If swig version is 3.0 or greater then we can build some additional bindings - if (${SWIG_VERSION} VERSION_GREATER 3.0 OR ${SWIG_VERSION} VERSION_EQUAL 3.0) - list(APPEND SWIG_BINDINGS node) - endif() - - # Add a block here to detect the prerequisites to build each language binding: - # - # If the prerequisites for the binding are present set a variable called - # DEFAULT_{uppercase name of binding} to ON - - # Prerequisites for Python wrapper: - find_package (PythonLibs ${PYTHON_VERSION_STRING} EXACT) - if (PYTHONLIBS_FOUND) - set (DEFAULT_PYTHON ON) - endif (PYTHONLIBS_FOUND) - - # Prerequisites for Ruby: - find_program(GEM_EXE "gem") - mark_as_advanced(GEM_EXE) - macro(CheckRubyGem varname gemname) - execute_process(COMMAND ${GEM_EXE} list --local ${gemname} - OUTPUT_VARIABLE CHECK_OUTPUT) - - set (${varname} OFF) - - if (CHECK_OUTPUT MATCHES "${gemname}[ ]+\(.*\)") - message(STATUS "Found Ruby gem: ${gemname}") - set (${varname} ON) - else() - message(STATUS "Missing Ruby gem dependency: ${gemname}") - set (${varname} OFF) - endif() - endmacro() - - find_package(Ruby) - if (RUBY_FOUND) - set (DEFAULT_RUBY ON) - - CheckRubyGem("HAS_RUBY_GEM_RSPEC" "rspec") - CheckRubyGem("HAS_RUBY_GEM_SIMPLECOV" "simplecov") - - if (HAS_RUBY_GEM_RSPEC AND HAS_RUBY_GEM_SIMPLECOV) - set (DEFAULT_RUBY_TESTING ON CACHE INTERNAL "") - else() - message(STATUS "Skipping Ruby bindings due to missing dependencies...") - set (DEFAULT_RUBY_TESTING OFF CACHE INTERNAL "") - set (DEFAULT_RUBY OFF) - endif (HAS_RUBY_GEM_RSPEC AND HAS_RUBY_GEM_SIMPLECOV) - endif (RUBY_FOUND) - - # Prerequites for PHP: - # For now, assume PHP support if the 'php-config' tool is present. - # @todo: allow user to specify which php-config if multiple PHP sources installed! - find_program(PHP_CONFIG_EXE php-config) - if (PHP_CONFIG_EXE) - find_program(PHP_EXE php) - mark_as_advanced (PHP_EXE) - if (PHP_EXE) - set (DEFAULT_PHP ON) - endif (PHP_EXE) - endif (PHP_CONFIG_EXE) - mark_as_advanced (PHP_CONFIG_EXE) - - # Prerequisites for Perl: - include(ProtonFindPerl) - if (PERLLIBS_FOUND) - set (DEFAULT_PERL ON) - endif (PERLLIBS_FOUND) - -endif() - -# Shouldn't need to modify below here when adding new language binding -foreach(BINDING ${BINDINGS}) - string(TOUPPER ${BINDING} UBINDING) - # Check whether default was overridden - if ("NOBUILD_${UBINDING}") - set ("DEFAULT_${UBINDING}" OFF) - endif () - option("BUILD_${UBINDING}" "Build ${BINDING} language binding" ${DEFAULT_${UBINDING}}) - if (BUILD_${UBINDING}) - add_subdirectory(${BINDING}) - endif () -endforeach(BINDING) http://git-wip-us.apache.org/repos/asf/qpid-proton-j/blob/2f85988e/proton-c/bindings/cpp/CMakeLists.txt ---------------------------------------------------------------------- diff --git a/proton-c/bindings/cpp/CMakeLists.txt b/proton-c/bindings/cpp/CMakeLists.txt deleted file mode 100644 index 0cc4024..0000000 --- a/proton-c/bindings/cpp/CMakeLists.txt +++ /dev/null @@ -1,182 +0,0 @@ -# -# 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. -# - -include(cpp.cmake) # Compiler checks - -include_directories( - "${CMAKE_SOURCE_DIR}/proton-c/include" - "${CMAKE_CURRENT_SOURCE_DIR}/include" - "${CMAKE_CURRENT_SOURCE_DIR}/src/include") - -add_definitions(${CXX_WARNING_FLAGS}) - -set(qpid-proton-cpp-source - src/binary.cpp - src/byte_array.cpp - src/cached_map.cpp - src/connection.cpp - src/connection_options.cpp - src/connector.cpp - src/container.cpp - src/container_impl.cpp - src/contexts.cpp - src/data.cpp - src/decimal.cpp - src/decoder.cpp - src/delivery.cpp - src/duration.cpp - src/encoder.cpp - src/endpoint.cpp - src/error.cpp - src/error_condition.cpp - src/event_loop.cpp - src/handler.cpp - src/io/connection_driver.cpp - src/io/link_namer.cpp - src/link.cpp - src/listener.cpp - src/message.cpp - src/messaging_adapter.cpp - src/node_options.cpp - src/object.cpp - src/proton_bits.cpp - src/proton_event.cpp - src/proton_handler.cpp - src/reactor.cpp - src/receiver.cpp - src/receiver_options.cpp - src/reconnect_timer.cpp - src/sasl.cpp - src/scalar_base.cpp - src/sender.cpp - src/sender_options.cpp - src/session.cpp - src/session_options.cpp - src/source.cpp - src/ssl.cpp - src/ssl_domain.cpp - src/target.cpp - src/terminus.cpp - src/timestamp.cpp - src/tracker.cpp - src/transfer.cpp - src/transport.cpp - src/type_id.cpp - src/url.cpp - src/uuid.cpp - src/value.cpp - ) - -set_source_files_properties ( - ${qpid-proton-cpp-source} - PROPERTIES - COMPILE_FLAGS "${LTO}" - ) - -add_library(qpid-proton-cpp SHARED ${qpid-proton-cpp-source}) - -target_link_libraries (qpid-proton-cpp ${PLATFORM_LIBS} qpid-proton) - -set_target_properties ( - qpid-proton-cpp - PROPERTIES - LINKER_LANGUAGE CXX - VERSION "${PN_LIB_SOMAJOR}.${PN_LIB_SOMINOR}" - SOVERSION "${PN_LIB_SOMAJOR}" - LINK_FLAGS "${CATCH_UNDEFINED} ${LTO}" - ) - -## Install - -install(TARGETS qpid-proton-cpp - EXPORT proton-cpp - RUNTIME DESTINATION bin - ARCHIVE DESTINATION ${LIB_INSTALL_DIR} - LIBRARY DESTINATION ${LIB_INSTALL_DIR}) - -# Install windows qpid-proton-cpp pdb files -if (MSVC) - install(FILES $<TARGET_PDB_FILE:qpid-proton-cpp> - DESTINATION bin - CONFIGURATIONS RelWithDebInfo Debug - OPTIONAL) -endif (MSVC) - -install (DIRECTORY "include/proton" DESTINATION ${INCLUDE_INSTALL_DIR} FILES_MATCHING PATTERN "*.hpp") - -add_subdirectory(docs) -add_subdirectory(${CMAKE_SOURCE_DIR}/tests/tools/apps/cpp ${CMAKE_BINARY_DIR}/tests/tools/apps/cpp) - -# Pkg config file -configure_file( - ${CMAKE_CURRENT_SOURCE_DIR}/libqpid-proton-cpp.pc.in - ${CMAKE_CURRENT_BINARY_DIR}/libqpid-proton-cpp.pc @ONLY) -install (FILES - ${CMAKE_CURRENT_BINARY_DIR}/libqpid-proton-cpp.pc - DESTINATION ${LIB_INSTALL_DIR}/pkgconfig) - -if (DEFINED CMAKE_IMPORT_LIBRARY_PREFIX) -set(PROTONCPPLIB ${CMAKE_IMPORT_LIBRARY_PREFIX}qpid-proton-cpp${CMAKE_IMPORT_LIBRARY_SUFFIX}) -set(PROTONCPPLIBDEBUG ${CMAKE_IMPORT_LIBRARY_PREFIX}qpid-proton-cpp${CMAKE_DEBUG_POSTFIX}${CMAKE_IMPORT_LIBRARY_SUFFIX}) -else () -set(PROTONCPPLIB ${CMAKE_SHARED_LIBRARY_PREFIX}qpid-proton-cpp${CMAKE_SHARED_LIBRARY_SUFFIX}) -set(PROTONCPPLIBDEBUG ${CMAKE_SHARED_LIBRARY_PREFIX}qpid-proton-cpp${CMAKE_DEBUG_POSTFIX}${CMAKE_SHARED_LIBRARY_SUFFIX}) -endif () - -include(WriteBasicConfigVersionFile) - -configure_file( - ${CMAKE_CURRENT_SOURCE_DIR}/ProtonCppConfig.cmake.in - ${CMAKE_CURRENT_BINARY_DIR}/ProtonCppConfig.cmake @ONLY) -write_basic_config_version_file( - ${CMAKE_CURRENT_BINARY_DIR}/ProtonCppConfigVersion.cmake - VERSION ${PN_VERSION} - COMPATIBILITY AnyNewerVersion) -install (FILES - ${CMAKE_CURRENT_BINARY_DIR}/ProtonCppConfig.cmake - ${CMAKE_CURRENT_BINARY_DIR}/ProtonCppConfigVersion.cmake - DESTINATION ${LIB_INSTALL_DIR}/cmake/ProtonCpp) - -## Test -if (ENABLE_VALGRIND AND VALGRIND_EXE) - set(memcheck-cmd ${VALGRIND_EXE} --error-exitcode=42 --quiet --leak-check=full --trace-children=yes) -endif () - -macro(add_cpp_test test) - add_executable (${test} src/${test}.cpp) - target_link_libraries (${test} qpid-proton qpid-proton-cpp) - if (CMAKE_SYSTEM_NAME STREQUAL Windows) - add_test (NAME cpp-${test} - COMMAND ${env_py} - "PATH=$<TARGET_FILE_DIR:qpid-proton>" - $<TARGET_FILE:${test}> ${ARGN}) - else () - add_test (NAME cpp-${test} COMMAND ${memcheck-cmd} ${CMAKE_CURRENT_BINARY_DIR}/${test} ${ARGN}) - endif () -endmacro(add_cpp_test) - -add_cpp_test(codec_test) -#add_cpp_test(engine_test) -add_cpp_test(thread_safe_test) -add_cpp_test(interop_test ${CMAKE_SOURCE_DIR}/tests) -add_cpp_test(message_test) -add_cpp_test(scalar_test) -add_cpp_test(value_test) -add_cpp_test(container_test) -add_cpp_test(url_test) http://git-wip-us.apache.org/repos/asf/qpid-proton-j/blob/2f85988e/proton-c/bindings/cpp/ProtonCppConfig.cmake.in ---------------------------------------------------------------------- diff --git a/proton-c/bindings/cpp/ProtonCppConfig.cmake.in b/proton-c/bindings/cpp/ProtonCppConfig.cmake.in deleted file mode 100644 index 0068067..0000000 --- a/proton-c/bindings/cpp/ProtonCppConfig.cmake.in +++ /dev/null @@ -1,30 +0,0 @@ -# -# 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. -# - -# Name: Proton -# Description: Qpid Proton C library -# Version: @PN_VERSION@ -# URL: http://qpid.apache.org/proton/ - -set (ProtonCpp_VERSION @PN_VERSION@) - -set (ProtonCpp_INCLUDE_DIRS @INCLUDEDIR@) -set (ProtonCpp_LIBRARIES optimized @LIBDIR@/@PROTONCPPLIB@ debug @LIBDIR@/@PROTONCPPLIBDEBUG@) - -set (ProtonCpp_FOUND True) http://git-wip-us.apache.org/repos/asf/qpid-proton-j/blob/2f85988e/proton-c/bindings/cpp/README.md ---------------------------------------------------------------------- diff --git a/proton-c/bindings/cpp/README.md b/proton-c/bindings/cpp/README.md deleted file mode 100644 index bedfd0d..0000000 --- a/proton-c/bindings/cpp/README.md +++ /dev/null @@ -1,43 +0,0 @@ -# Qpid Proton C++ - -This is a C++ binding for the Proton API. - -The documentation includes a tutorial and API documentation. - -To generate the documentation go to your build directory, run `make -docs-cpp`, and open `proton-c/bindings/cpp/docs/html/index.html` in a -browser. - -## Todo - -### Tests - -- Interop/type testing: proton/tests/interop, new interop suite -- More unit testing, measured code coverage -- Test examples against ActiveMQ and qpidd - -### Bugs - -- Error handling: - - examples exit silently on broker exit/not running, core on - no-such-queue (e.g., with qpidd) - -### Features - -- SASL/SSL support with interop tests. -- Reconnection -- Browsing -- Selectors -- AMQP described types and arrays, full support and tests -- Durable subscriptions & demos (see python changes) -- Transactions -- Heartbeats - -### Nice to have - -- C++11 lambda version of handlers -- Helpers (or at least doc) for multi-threaded use (container per connection) -- Usable support for decimal types -- Expose endpoint conditions as C++ proton::condition error class -- Selectables and 3rd party event loop support -- More efficient shared_ptr (single family per proton object) http://git-wip-us.apache.org/repos/asf/qpid-proton-j/blob/2f85988e/proton-c/bindings/cpp/cpp.cmake ---------------------------------------------------------------------- diff --git a/proton-c/bindings/cpp/cpp.cmake b/proton-c/bindings/cpp/cpp.cmake deleted file mode 100644 index 51980d7..0000000 --- a/proton-c/bindings/cpp/cpp.cmake +++ /dev/null @@ -1,35 +0,0 @@ -# -# 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. -# - -# Check C++ capabilities. - -include(CheckCXXSourceCompiles) - -if (CMAKE_CXX_COMPILER) - set(CMAKE_REQUIRED_FLAGS "${CXX_WARNING_FLAGS}") - check_cxx_source_compiles("long long ll; int main(int, char**) { return 0; }" HAS_LONG_LONG) - if (HAS_LONG_LONG) - add_definitions(-DPN_CPP_HAS_LONG_LONG=1) - endif() - check_cxx_source_compiles("#include <memory>\nstd::shared_ptr<int> i; std::unique_ptr<int> u; int main(int, char**) { return 0; }" HAS_STD_PTR) - if (HAS_STD_PTR) - add_definitions(-DPN_CPP_HAS_STD_PTR=1) - endif() - check_cxx_source_compiles("#if defined(__cplusplus) && __cplusplus >= 201100\nint main(int, char**) { return 0; }\n#endif" HAS_CPP11) -endif() http://git-wip-us.apache.org/repos/asf/qpid-proton-j/blob/2f85988e/proton-c/bindings/cpp/docs/CMakeLists.txt ---------------------------------------------------------------------- diff --git a/proton-c/bindings/cpp/docs/CMakeLists.txt b/proton-c/bindings/cpp/docs/CMakeLists.txt deleted file mode 100644 index d512d15..0000000 --- a/proton-c/bindings/cpp/docs/CMakeLists.txt +++ /dev/null @@ -1,41 +0,0 @@ -# -# 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. -# - -find_package(Doxygen) - -if (DOXYGEN_FOUND) - configure_file ( - ${CMAKE_CURRENT_SOURCE_DIR}/user.doxygen.in - ${CMAKE_CURRENT_BINARY_DIR}/user.doxygen) - - file(GLOB_RECURSE headers ../include/proton/*.hpp) - add_custom_target (docs-cpp - COMMAND ${CMAKE_COMMAND} -E remove_directory html # get rid of old files - COMMAND ${DOXYGEN_EXECUTABLE} user.doxygen - DEPENDS ${headers} - ) - add_dependencies (docs docs-cpp) - # HTML files are generated to ./html - put those in the install. - install (DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/html/" - DESTINATION "${PROTON_SHARE}/docs/api-cpp" - COMPONENT documentation - OPTIONAL) -endif (DOXYGEN_FOUND) - -set_directory_properties(PROPERTIES ADDITIONAL_MAKE_CLEAN_FILES html) http://git-wip-us.apache.org/repos/asf/qpid-proton-j/blob/2f85988e/proton-c/bindings/cpp/docs/io.md ---------------------------------------------------------------------- diff --git a/proton-c/bindings/cpp/docs/io.md b/proton-c/bindings/cpp/docs/io.md deleted file mode 100644 index 230e538..0000000 --- a/proton-c/bindings/cpp/docs/io.md +++ /dev/null @@ -1,27 +0,0 @@ -# IO integration {#io_page} - -**Experimental** - The `proton::io` interfaces are new and remain -subject to change. - -The `proton::io` namespace contains a service provider interface (SPI) -that allows you to implement the Proton API over alternative IO or -threading libraries. - -The `proton::io::connection_driver` class converts an AMQP-encoded -byte stream, read from any IO source, into `proton::messaging_handler` -calls. It generates an AMQP-encoded byte stream as output that can be -written to any IO destination. - -The connection driver is deliberately very simple and low level. It -performs no IO of its own, no thread-related locking, and is written -in simple C++98-compatible code. - -The connection dirver can be used standalone as an AMQP translator, or -you can implement the following two interfaces to provide a complete -implementation of the Proton API that can run any Proton application: - - - `proton::container` lets the user initiate or listen for connections. - - `proton::event_loop` lets the user serialize work with respect to a - connection. - -@see @ref mt/epoll\_container.cpp for an example. http://git-wip-us.apache.org/repos/asf/qpid-proton-j/blob/2f85988e/proton-c/bindings/cpp/docs/main.md ---------------------------------------------------------------------- diff --git a/proton-c/bindings/cpp/docs/main.md b/proton-c/bindings/cpp/docs/main.md deleted file mode 100644 index 93ba2c0..0000000 --- a/proton-c/bindings/cpp/docs/main.md +++ /dev/null @@ -1,128 +0,0 @@ -# Introduction {#mainpage} - -This is the C++ API for the Proton AMQP protocol engine. It allows you -to write client and server applications that send and receive AMQP -messages. - -The best way to start is with the @ref tutorial. - -## An overview of the AMQP model - -Messages are transferred between connected peers over *links*. The -sending end of a link is a `proton::sender`, and the receiving end is -a `proton::receiver`. Links have named 'source' and 'target' -addresses. See "Sources and Targets" below for more information. - -Links are grouped in a `proton::session`. Messages for links in the -same session are sent sequentially. Messages on different sessions -can be interleaved, so a large message being sent on one session does -not block messages being sent on other sessions. - -Sessions are created over a `proton::connection`, which represents the -network connection. You can create links directly on a connection -using its default session if you don't need multiple sessions. - -`proton::message` represents the message: the body (content), -properties, headers, and annotations. A `proton::delivery` represents -a message being received over a link. The receiver acknowledges the -delivery by accepting or rejecting it. The corresponding message -sender uses a `proton::tracker` to follow the state of the delivery. - -The delivery is *settled* when both ends are done with it. Different -settlement methods give different levels of reliability: -*at-most-once*, *at-least-once*, and *exactly-once*. See "Delivery -Guarantees" below for details. - -## Sources and targets - -Every link has two addresses, *source* and *target*. The most common -pattern for using these addresses is as follows: - -When a client creates a *receiver* link, it sets the *source* -address. This means "I want to receive messages from this source." -This is often referred to as "subscribing" to the source. When a -client creates a *sender* link, it sets the *target* address. This -means "I want to send to this target." - -In the case of a broker, the source or target usually refers to a -queue or topic. In general they can refer to any AMQP-capable node. - -In the *request-response* pattern, a request message carries a -*reply-to* address for the response message. This can be any AMQP -address, but it is often useful to create a temporary address for just -the response message. - -The most common approach is for the client to create a *receiver* for -the response with the *dynamic* flag set. This asks the server to -generate a unique *source* address automatically and discard it when -the link closes. The client uses this "dynamic" source address as the -reply-to when it sends the request, and the response is delivered to -the client's dynamic receiver. - -In the case of a broker, a dynamic address usually corresponds to a -temporary queue, but any AMQP request-response server can use this -technique. The @ref server_direct.cpp example illustrates how to -implement a queueless request-response server. - -## Delivery guarantees - -Proton offers three levels of message delivery guarantee: -*at-most-once*, *at-least-once*, and *exactly-once*. - -For *at-most-once*, the sender settles the message as soon as it sends -it. If the connection is lost before the message is received by the -receiver, the message will not be delivered. - -For *at-least-once*, the receiver accepts and settles the message on -receipt. If the connection is lost before the sender is informed of -the settlement, then the delivery is considered in-doubt and should be -retried. This will ensure it eventually gets delivered (provided of -course the connection and link can be reestablished). It may mean that -it is delivered multiple times, however. - -Finally, for *exactly-once*, the receiver accepts the message but -doesn't settle it. The sender settles once it is aware that the -receiver accepted it. In this way the receiver retains knowledge of an -accepted message until it is sure the sender knows it has been -accepted. If the connection is lost before settlement, the receiver -informs the sender of all the unsettled deliveries it knows about, and -from this the sender can deduce which need to be redelivered. The -sender likewise informs the receiver which deliveries it knows about, -from which the receiver can deduce which have already been settled. - -## Anatomy of a Proton application - -To send AMQP commands, call methods on classes like `proton::connection`, -`proton::sender`, `proton::receiver`, or `proton::delivery`. - -To handle incoming commands, subclass the `proton::messaging_handler` -interface. The handler member functions are called when AMQP protocol -events occur on a connection. For example -`proton::messaging_handler::on_message` is called when a message is -received. - -Messages are represented by `proton::message`. AMQP defines a type -encoding that you can use for interoperability, but you can also use -any encoding you wish and pass binary data as the -`proton::message::body`. `proton::value` and `proton::scalar` provide -conversion between AMQP and C++ data types. - -There are several ways to manage handlers and AMQP objects, for -different types of application. All of them use the same -`proton::messaging_handler` subclasses so code can be re-used if you -change your approach. - -### %proton::default_container - Easy single-threaded applications - -`proton::container` is the top-level object in a proton application. -Use proton::container::connect() and proton::container::listen() to -create connections. The container polls multiple connections and calls -protocol events on your `proton::messaging_handler` subclasses. - -The default container implementation is created using -`proton::default_container`. - -You can implement your own container to integrate proton with any IO -provider using the `proton::io::connection_driver`. - -@see @ref io_page http://git-wip-us.apache.org/repos/asf/qpid-proton-j/blob/2f85988e/proton-c/bindings/cpp/docs/mt.md ---------------------------------------------------------------------- diff --git a/proton-c/bindings/cpp/docs/mt.md b/proton-c/bindings/cpp/docs/mt.md deleted file mode 100644 index 1a63ea6..0000000 --- a/proton-c/bindings/cpp/docs/mt.md +++ /dev/null @@ -1,44 +0,0 @@ -# Multithreaded Proton applications {#mt_page} - -For an example see @ref mt/broker.cpp - -Most classes in namespace @ref proton are not thread-safe. Objects -belonging to a single connection (`proton::connection`, -`proton::sender`, `proton::receiver`, and so on) *must not* be used -concurrently. Objects associated with *different* connections *can* be -used concurrently in separate threads. - -A multithreaded container calls event-handling functions for each -connection *sequentially* but can process *different* connections -concurrently in different threads. If you use a *separate* -`proton::messaging_handler` for each connection, then event-handling -functions can can use their parameters and the handler's own data -members without locks. The handler functions will never be called -concurrently. You can set the handlers for each connection using -`proton::container::connect()` and `proton::container::listen()`. - -The example @ref mt/broker.cpp is a multithreaded broker using this -approach. It creates a new handler for each incoming connection to -manage the state of that connection's `proton::sender` and -`proton::receiver` links. The handler needs no lock because it only -deals with state in the context of one connection. - -The `proton::event_loop` class represents the sequence of events -associated with a connection. `proton::event_loop::inject()` allows -another thread to "inject" work to be executed in sequence with the -rest of the events so it can operate safely on data associated with -the connection. - -In the @ref mt/broker.cpp example, a queue can receive messages from -one connection but have subscribers on another connection. Subscribers -pass a function object to the queue which uses -`proton::event_loop::inject()` to call a notification callback on the -handler for that connection. The callback is executed in the -connection's event loop so it can use a `proton::sender` object to -send the message safely. - -*Note*: It is possible to share a single handler between more than one -connection. In that case it *can* be called concurrently on behalf of -different connections, so you will need suitable locking. - -@see @ref io_page - Implementing your own container. http://git-wip-us.apache.org/repos/asf/qpid-proton-j/blob/2f85988e/proton-c/bindings/cpp/docs/types.md ---------------------------------------------------------------------- diff --git a/proton-c/bindings/cpp/docs/types.md b/proton-c/bindings/cpp/docs/types.md deleted file mode 100644 index 6a56be0..0000000 --- a/proton-c/bindings/cpp/docs/types.md +++ /dev/null @@ -1,77 +0,0 @@ -# AMQP and C++ types {#types_page} - -An AMQP message body can hold binary data using any encoding you -like. AMQP also defines its own encoding and types. The AMQP encoding -is often used in message bodies because it is supported by AMQP -libraries on many languages and platforms. You also need to use the -AMQP types to set and examine message properties. - -## Scalar types - -Each type is identified by a proton::type_id. - -C++ type | AMQP type_id | Description ---------------------|----------------------|----------------------- -bool | proton::BOOLEAN | Boolean true or false -uint8_t | proton::UBYTE | 8-bit unsigned byte -int8_t | proton::BYTE | 8-bit signed byte -uint16_t | proton::USHORT | 16-bit unsigned integer -int16_t | proton::SHORT | 16-bit signed integer -uint32_t | proton::UINT | 32-bit unsigned integer -int32_t | proton::INT | 32-bit signed integer -uint64_t | proton::ULONG | 64-bit unsigned integer -int64_t | proton::LONG | 64-bit signed integer -wchar_t | proton::CHAR | 32-bit unicode code point -float | proton::FLOAT | 32-bit binary floating point -double | proton::DOUBLE | 64-bit binary floating point -proton::timestamp | proton::TIMESTAMP | 64-bit signed milliseconds since 00:00:00 (UTC), 1 January 1970. -proton::decimal32 | proton::DECIMAL32 | 32-bit decimal floating point -proton::decimal64 | proton::DECIMAL64 | 64-bit decimal floating point -proton::decimal128 | proton::DECIMAL128 | 128-bit decimal floating point -proton::uuid | proton::UUID | 128-bit universally-unique identifier -std::string | proton::STRING | UTF-8 encoded Unicode string -proton::symbol | proton::SYMBOL | 7-bit ASCII encoded string -proton::binary | proton::BINARY | Variable-length binary data - -proton::scalar is a holder that can accept a scalar value of any type. - -## Compound types - -C++ type | AMQP type_id | Description ---------------------|----------------------|----------------------- -See below | proton::ARRAY | Sequence of values of the same type -See below | proton::LIST | Sequence of values of mixed types -See below | proton::MAP | Map of key-value pairs - -proton::value is a holder that can accept any AMQP value, scalar or -compound. - -proton::ARRAY converts to and from C++ sequences: std::vector, -std::deque, std::list, and std::forward_list. - -proton::LIST converts to and from sequences of proton::value or -proton::scalar, which can hold mixed types of data. - -proton::MAP converts to and from std::map, std::unordered_map, and -sequences of std::pair. - -When decoding, the encoded map types must be convertible to the element type of the -C++ sequence or the key-value types of the C++ map. Use proton::value as the -element or key-value type to decode any ARRAY, LIST, or MAP. - -For example you can decode any AMQP MAP into: - - std::map<proton::value, proton::value> - -You can decode any AMQP LIST or ARRAY into: - - std::vector<proton::value> - -## Include files - -You can simply include proton/types.hpp to get all the type -definitions and conversions. Alternatively, you can selectively -include only what you need: - - - Include proton/types_fwd.hpp: forward declarations for all types. - - Include individual `.hpp` files as per the table above. http://git-wip-us.apache.org/repos/asf/qpid-proton-j/blob/2f85988e/proton-c/bindings/cpp/docs/user.doxygen.in ---------------------------------------------------------------------- diff --git a/proton-c/bindings/cpp/docs/user.doxygen.in b/proton-c/bindings/cpp/docs/user.doxygen.in deleted file mode 100644 index a56eb98..0000000 --- a/proton-c/bindings/cpp/docs/user.doxygen.in +++ /dev/null @@ -1,78 +0,0 @@ -## -## 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. -## - -# Project options - -PROJECT_NAME = "Qpid Proton C++" -PROJECT_NUMBER = @PN_VERSION_MAJOR@.@PN_VERSION_MINOR@.@PN_VERSION_POINT@ -OUTPUT_DIRECTORY = . -OUTPUT_LANGUAGE = English -BRIEF_MEMBER_DESC = YES -REPEAT_BRIEF = YES -ALWAYS_DETAILED_SEC = NO -INLINE_INHERITED_MEMB = YES -JAVADOC_AUTOBRIEF = YES -MULTILINE_CPP_IS_BRIEF = NO -INHERIT_DOCS = YES -BUILTIN_STL_SUPPORT = YES -INLINE_SIMPLE_STRUCTS = YES -HIDE_UNDOC_CLASSES = YES -HIDE_COMPOUND_REFERENCE = YES -HIDE_SCOPE_NAMES = YES -MAX_INITIALIZER_LINES = 0 -ALPHABETICAL_INDEX = NO - -# Redefine protected as private and strip out the PN_CPP_EXTERN macro - -ENABLE_PREPROCESSING = YES -MACRO_EXPANSION = YES -EXPAND_ONLY_PREDEF = YES -PREDEFINED = protected=private PN_CPP_EXTERN= PN_CPP_OVERRIDE= PN_CPP_HAS_CPP11=1 PN_CPP_HAS_SHARED_PTR=1 PN_CPP_HAS_UNIQUE_PTR=1 PN_CPP_HAS_LONG_LONG=1 PN_CPP_HAS_NULLPTR=1 PN_CPP_HAS_RVALUE_REFERENCES=1 PN_CPP_HAS_OVERRIDE=override PN_CPP_HAS_EXPLICIT_CONVERSIONS=1 PN_CPP_HAS_DEFAULTED_FUNCTIONS=1 PN_CPP_HAS_DELETED_FUNCTIONS=1 PN_CPP_HAS_STD_FUNCTION=1 PN_CPP_HAS_CHRONO=1 -EXCLUDE_SYMBOLS = internal internal::* - -# Configuration options related to warning and progress messages - -QUIET = YES -WARNINGS = YES - -# Configuration options related to the input files - -INPUT = @CMAKE_SOURCE_DIR@/proton-c/bindings/cpp/include @CMAKE_SOURCE_DIR@/proton-c/bindings/cpp/docs @CMAKE_SOURCE_DIR@/examples/cpp -FILE_PATTERNS = *.hpp *.md *.dox -EXCLUDE_PATTERNS = @CMAKE_SOURCE_DIR@/examples/*.?pp # Don't parse example sources, only *.dox -FULL_PATH_NAMES = YES -RECURSIVE = YES -STRIP_FROM_PATH = @CMAKE_SOURCE_DIR@/proton-c/bindings/cpp/include -EXAMPLE_PATH = @CMAKE_SOURCE_DIR@/examples/cpp -EXAMPLE_RECURSIVE = YES - -# View and list options - -GENERATE_TREEVIEW = YES -GENERATE_TODOLIST = NO -GENERATE_TESTLIST = NO -GENERATE_BUGLIST = NO -GENERATE_DEPRECATEDLIST = YES - -# Configuration options related to the output format - -GENERATE_HTML = YES -HTML_OUTPUT = html -HTML_FILE_EXTENSION = .html -GENERATE_LATEX = NO http://git-wip-us.apache.org/repos/asf/qpid-proton-j/blob/2f85988e/proton-c/bindings/cpp/include/proton/annotation_key.hpp ---------------------------------------------------------------------- diff --git a/proton-c/bindings/cpp/include/proton/annotation_key.hpp b/proton-c/bindings/cpp/include/proton/annotation_key.hpp deleted file mode 100644 index 4995141..0000000 --- a/proton-c/bindings/cpp/include/proton/annotation_key.hpp +++ /dev/null @@ -1,84 +0,0 @@ -#ifndef PROTON_ANNOTATION_KEY_HPP -#define PROTON_ANNOTATION_KEY_HPP - -/* - * - * 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. - * - */ - -#include "./scalar_base.hpp" -#include "./symbol.hpp" - -#include <proton/type_compat.h> - -namespace proton { - -/// A key for use with AMQP annotation maps. -/// -/// An annotation_key can contain either a uint64_t or a proton::symbol. -class annotation_key : public scalar_base { - public: - /// An empty annotation key. - annotation_key() {} - - /// Construct from any type that can be assigned. - template <class T> annotation_key(const T& x) { *this = x; } - - /// @name Assign from a uint64_t or symbol. - /// @{ - annotation_key& operator=(uint64_t x) { put_(x); return *this; } - annotation_key& operator=(const symbol& x) { put_(x); return *this; } - /// @} - - /// @name Extra conversions for strings, treated as codec::SYMBOL. - /// @{ - annotation_key& operator=(const std::string& x) { put_(symbol(x)); return *this; } - annotation_key& operator=(const char *x) { put_(symbol(x)); return *this; } - /// @} - - /// @cond INTERNAL - friend class message; - friend class codec::decoder; - /// @endcond -}; - -/// @cond INTERNAL -/// Primary template for get<T>(message_id), specialized for legal types. -template <class T> T get(const annotation_key& x); -/// @endcond - -/// Get the uint64_t value or throw conversion_error. -/// -/// @related annotation_key -template<> inline uint64_t get<uint64_t>(const annotation_key& x) { return internal::get<uint64_t>(x); } - -/// Get the @ref symbol value or throw conversion_error. -/// -/// @related annotation_key -template<> inline symbol get<symbol>(const annotation_key& x) { return internal::get<symbol>(x); } - -/// Get the @ref binary value or throw conversion_error. -/// -/// @copydoc scalar::coerce -/// @related annotation_key -template<class T> T coerce(const annotation_key& x) { return internal::coerce<T>(x); } - -} // proton - -#endif // PROTON_ANNOTATION_KEY_HPP http://git-wip-us.apache.org/repos/asf/qpid-proton-j/blob/2f85988e/proton-c/bindings/cpp/include/proton/binary.hpp ---------------------------------------------------------------------- diff --git a/proton-c/bindings/cpp/include/proton/binary.hpp b/proton-c/bindings/cpp/include/proton/binary.hpp deleted file mode 100644 index cf4c7a2..0000000 --- a/proton-c/bindings/cpp/include/proton/binary.hpp +++ /dev/null @@ -1,60 +0,0 @@ -#ifndef PROTON_BINARY_HPP -#define PROTON_BINARY_HPP - -/* - * - * 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. - * - */ - -#include "./internal/export.hpp" -#include "./types_fwd.hpp" - -#include <proton/type_compat.h> - -#include <iosfwd> -#include <string> -#include <vector> - -namespace proton { - -/// Arbitrary binary data. -class binary : public std::vector<uint8_t> { - public: - /// @name Constructors - /// @{ - explicit binary() : std::vector<value_type>() {} - explicit binary(size_t n) : std::vector<value_type>(n) {} - explicit binary(size_t n, value_type x) : std::vector<value_type>(n, x) {} - explicit binary(const std::string& s) : std::vector<value_type>(s.begin(), s.end()) {} - template <class Iter> binary(Iter first, Iter last) : std::vector<value_type>(first, last) {} - /// @} - - /// Convert to std::string - operator std::string() const { return std::string(begin(), end()); } - - /// Assignment - binary& operator=(const std::string& x) { assign(x.begin(), x.end()); return *this; } -}; - -/// Print a binary value -PN_CPP_EXTERN std::ostream& operator<<(std::ostream&, const binary&); - -} // proton - -#endif // PROTON_BINARY_HPP http://git-wip-us.apache.org/repos/asf/qpid-proton-j/blob/2f85988e/proton-c/bindings/cpp/include/proton/byte_array.hpp ---------------------------------------------------------------------- diff --git a/proton-c/bindings/cpp/include/proton/byte_array.hpp b/proton-c/bindings/cpp/include/proton/byte_array.hpp deleted file mode 100644 index 9040133..0000000 --- a/proton-c/bindings/cpp/include/proton/byte_array.hpp +++ /dev/null @@ -1,99 +0,0 @@ -#ifndef PROTON_BYTE_ARRAY_HPP -#define PROTON_BYTE_ARRAY_HPP - -/* - * 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. - */ - -#include "./internal/export.hpp" -#include "./internal/comparable.hpp" -#include "./types_fwd.hpp" - -#include <proton/type_compat.h> - -#include <algorithm> -#include <iterator> - -namespace proton { - -namespace internal { -PN_CPP_EXTERN void print_hex(std::ostream& o, const uint8_t* p, size_t n); -} - -/// Arbitrary fixed-size data. -/// -/// Used to represent fixed-sized data types that don't have a natural -/// C++ representation as an array of bytes. -template <size_t N> class byte_array : private internal::comparable<byte_array<N> > { - public: - /// @name Sequence container typedefs - /// @{ - typedef uint8_t value_type; - typedef value_type* pointer; - typedef const value_type* const_pointer; - typedef value_type& reference; - typedef const value_type& const_reference; - typedef value_type* iterator; - typedef const value_type* const_iterator; - typedef std::size_t size_type; - typedef std::ptrdiff_t difference_type; - typedef std::reverse_iterator<iterator> reverse_iterator; - typedef std::reverse_iterator<const_iterator> const_reverse_iterator; - /// @} - - /// Zero-initialized byte array - byte_array() { std::fill(bytes_, bytes_+N, '\0'); } - - /// Size of the array - static size_t size() { return N; } - - /// @name Array operators - /// @{ - value_type* begin() { return bytes_; } - value_type* end() { return bytes_+N; } - value_type& operator[](size_t i) { return bytes_[i]; } - - const value_type* begin() const { return bytes_; } - const value_type* end() const { return bytes_+N; } - const value_type& operator[](size_t i) const { return bytes_[i]; } - /// @} - - /// @name Comparison operators - /// @{ - friend bool operator==(const byte_array& x, const byte_array& y) { - return std::equal(x.begin(), x.end(), y.begin()); - } - - friend bool operator<(const byte_array& x, const byte_array& y) { - return std::lexicographical_compare(x.begin(), x.end(), y.begin(), y.end()); - } - /// @} - - /// Print byte array in hex - friend std::ostream& operator<<(std::ostream& o, const byte_array& b) { - internal::print_hex(o, b.begin(), b.size()); - return o; - } - - private: - value_type bytes_[N]; -}; - -} // proton - -#endif // PROTON_BYTE_ARRAY_HPP http://git-wip-us.apache.org/repos/asf/qpid-proton-j/blob/2f85988e/proton-c/bindings/cpp/include/proton/codec/amqp_types.hpp ---------------------------------------------------------------------- diff --git a/proton-c/bindings/cpp/include/proton/codec/amqp_types.hpp b/proton-c/bindings/cpp/include/proton/codec/amqp_types.hpp deleted file mode 100644 index 5456225..0000000 --- a/proton-c/bindings/cpp/include/proton/codec/amqp_types.hpp +++ /dev/null @@ -1,111 +0,0 @@ -#ifndef PROTON_CODEC_AMQP_TYPES_HPP -#define PROTON_CODEC_AMQP_TYPES_HPP - -/* - * - * 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. - * - */ - -/// @cond INTERNAL -/// XXX Remove this entirely - -namespace proton { -namespace codec { - -/// @name Experimental - Typedefs for AMQP scalar types. -/// -/// These typedefs associate AMQP scalar type names with the -/// corresponding C++ types. They are provided as a convenience for -/// those familiar with AMQP, but you do not need to use them. You -/// can use the C++ types directly. -/// -/// The typedef names have a `_type` suffix to avoid ambiguity with -/// C++ reserved and std library type names. -/// -/// @{ - -// XXX Consider prefixing these with amqp_ and dropping _type, now -// that they're in the codec namespace - -/// True or false. -typedef bool boolean_type; - -/// 8-bit unsigned byte -typedef uint8_t ubyte_type; - -/// 8-bit signed byte -typedef int8_t byte_type; - -/// 16-bit unsigned short integer -typedef uint16_t ushort_type; - -/// 16-bit signed short integer -typedef int16_t short_type; - -/// 32-bit unsigned integer -typedef uint32_t uint_type; - -/// 32-bit signed integer -typedef int32_t int_type; - -/// 64-bit unsigned long integer -typedef uint64_t ulong_type; - -/// 64-bit signed long integer -typedef int64_t long_type; - -/// 32-bit unicode code point -typedef wchar_t char_type; - -/// 32-bit binary floating point -typedef float float_type; - -/// 64-bit binary floating point -typedef double double_type; - -/// An AMQP string is unicode UTF-8 encoded. -typedef std::string string_type; - -/// An AMQP symbol is ASCII 7-bit encoded. -typedef proton::symbol symbol_type; - -/// An AMQP binary contains variable length raw binary data. -typedef proton::binary binary_type; - -/// A timestamp in milliseconds since the epoch 00:00:00 (UTC), 1 January 1970. -typedef proton::timestamp timestamp_type; - -/// A 16-byte universally unique identifier. -typedef proton::uuid uuid_type; - -/// 32-bit decimal floating point -typedef proton::decimal32 decimal32_type; - -/// 64-bit decimal floating point -typedef proton::decimal64 decimal64_type; - -/// 128-bit decimal floating point -typedef proton::decimal128 decimal128_type; - -} // codec -} // proton - -/// @endcond - -#endif // PROTON_CODEC_AMQP_TYPES_HPP http://git-wip-us.apache.org/repos/asf/qpid-proton-j/blob/2f85988e/proton-c/bindings/cpp/include/proton/codec/common.hpp ---------------------------------------------------------------------- diff --git a/proton-c/bindings/cpp/include/proton/codec/common.hpp b/proton-c/bindings/cpp/include/proton/codec/common.hpp deleted file mode 100644 index e8d8ce5..0000000 --- a/proton-c/bindings/cpp/include/proton/codec/common.hpp +++ /dev/null @@ -1,59 +0,0 @@ -#ifndef PROTON_CODEC_COMMON_HPP -#define PROTON_CODEC_COMMON_HPP - -/* - * - * 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. - * - */ - -#include "../type_id.hpp" - -namespace proton { -namespace codec { - -/// **Experimental** - Start encoding a complex type. -struct start { - /// @cond INTERNAL - /// XXX Document - start(type_id type_=NULL_TYPE, type_id element_=NULL_TYPE, - bool described_=false, size_t size_=0) : - type(type_), element(element_), is_described(described_), size(size_) {} - - type_id type; ///< The container type: ARRAY, LIST, MAP or DESCRIBED. - type_id element; ///< the element type for array only. - bool is_described; ///< true if first value is a descriptor. - size_t size; ///< the element count excluding the descriptor (if any) - /// @endcond - - /// @cond INTERNAL - /// XXX Document - static start array(type_id element, bool described=false) { return start(ARRAY, element, described); } - static start list() { return start(LIST); } - static start map() { return start(MAP); } - static start described() { return start(DESCRIBED, NULL_TYPE, true); } - /// @endcond -}; - -/// **Experimental** - Finish inserting or extracting a complex type. -struct finish {}; - -} // codec -} // proton - -#endif // PROTON_CODEC_COMMON_HPP http://git-wip-us.apache.org/repos/asf/qpid-proton-j/blob/2f85988e/proton-c/bindings/cpp/include/proton/codec/decoder.hpp ---------------------------------------------------------------------- diff --git a/proton-c/bindings/cpp/include/proton/codec/decoder.hpp b/proton-c/bindings/cpp/include/proton/codec/decoder.hpp deleted file mode 100644 index 3dc6d57..0000000 --- a/proton-c/bindings/cpp/include/proton/codec/decoder.hpp +++ /dev/null @@ -1,214 +0,0 @@ -#ifndef PROTON_CODEC_DECODER_HPP -#define PROTON_CODEC_DECODER_HPP - -/* - * - * 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. - * - */ - -#include "../internal/data.hpp" -#include "../internal/type_traits.hpp" -#include "../types_fwd.hpp" -#include "./common.hpp" - -#include <proton/type_compat.h> - -#include <utility> - -namespace proton { - -class annotation_key; -class message_id; -class scalar; -class value; - -namespace internal { -class value_base; -} - -namespace codec { - -/// **Experimental** - Stream-like decoder from AMQP bytes to C++ -/// values. -/// -/// For internal use only. -/// -/// @see @ref types_page for the recommended ways to manage AMQP data -class decoder : public internal::data { - public: - /// Wrap a Proton C data object. The exact flag if set means - /// decode only when there is an exact match between the AMQP and - /// C++ type. If not set then perform automatic conversions. - explicit decoder(const data& d, bool exact=false) : data(d), exact_(exact) {} - - /// Attach decoder to a proton::value. The decoder is rewound to - /// the start of the data. - PN_CPP_EXTERN explicit decoder(const internal::value_base&, bool exact=false); - - /// Decode AMQP data from a buffer and add it to the end of the - /// decoders stream. - PN_CPP_EXTERN void decode(const char* buffer, size_t size); - - /// Decode AMQP data from a std::string and add it to the end of - /// the decoders stream. - PN_CPP_EXTERN void decode(const std::string&); - - /// Return true if there are more value to extract at the current level. - PN_CPP_EXTERN bool more(); - - /// Get the type of the next value that will be read by - /// operator>>. - /// - /// @throw conversion_error if no more values. @see - /// decoder::more(). - PN_CPP_EXTERN type_id next_type(); - - /// @name Extract built-in types - /// - /// @throw conversion_error if the decoder is empty or has an - /// incompatible type. - /// - /// @{ - PN_CPP_EXTERN decoder& operator>>(bool&); - PN_CPP_EXTERN decoder& operator>>(uint8_t&); - PN_CPP_EXTERN decoder& operator>>(int8_t&); - PN_CPP_EXTERN decoder& operator>>(uint16_t&); - PN_CPP_EXTERN decoder& operator>>(int16_t&); - PN_CPP_EXTERN decoder& operator>>(uint32_t&); - PN_CPP_EXTERN decoder& operator>>(int32_t&); - PN_CPP_EXTERN decoder& operator>>(wchar_t&); - PN_CPP_EXTERN decoder& operator>>(uint64_t&); - PN_CPP_EXTERN decoder& operator>>(int64_t&); - PN_CPP_EXTERN decoder& operator>>(timestamp&); - PN_CPP_EXTERN decoder& operator>>(float&); - PN_CPP_EXTERN decoder& operator>>(double&); - PN_CPP_EXTERN decoder& operator>>(decimal32&); - PN_CPP_EXTERN decoder& operator>>(decimal64&); - PN_CPP_EXTERN decoder& operator>>(decimal128&); - PN_CPP_EXTERN decoder& operator>>(uuid&); - PN_CPP_EXTERN decoder& operator>>(std::string&); - PN_CPP_EXTERN decoder& operator>>(symbol&); - PN_CPP_EXTERN decoder& operator>>(binary&); - PN_CPP_EXTERN decoder& operator>>(message_id&); - PN_CPP_EXTERN decoder& operator>>(annotation_key&); - PN_CPP_EXTERN decoder& operator>>(scalar&); - PN_CPP_EXTERN decoder& operator>>(internal::value_base&); - PN_CPP_EXTERN decoder& operator>>(null&); - ///@} - - /// Start decoding a container type, such as an ARRAY, LIST or - /// MAP. This "enters" the container, more() will return false at - /// the end of the container. Call finish() to "exit" the - /// container and move on to the next value. - PN_CPP_EXTERN decoder& operator>>(start&); - - /// Finish decoding a container type, and move on to the next - /// value in the stream. - PN_CPP_EXTERN decoder& operator>>(const finish&); - - /// @cond INTERNAL - template <class T> struct sequence_ref { T& ref; sequence_ref(T& r) : ref(r) {} }; - template <class T> struct associative_ref { T& ref; associative_ref(T& r) : ref(r) {} }; - template <class T> struct pair_sequence_ref { T& ref; pair_sequence_ref(T& r) : ref(r) {} }; - - template <class T> static sequence_ref<T> sequence(T& x) { return sequence_ref<T>(x); } - template <class T> static associative_ref<T> associative(T& x) { return associative_ref<T>(x); } - template <class T> static pair_sequence_ref<T> pair_sequence(T& x) { return pair_sequence_ref<T>(x); } - /// @endcond - - /// Extract any AMQP sequence (ARRAY, LIST or MAP) to a C++ - /// sequence container of T if the elements types are convertible - /// to T. A MAP is extracted as `[key1, value1, key2, value2...]`. - template <class T> decoder& operator>>(sequence_ref<T> r) { - start s; - *this >> s; - if (s.is_described) next(); - r.ref.resize(s.size); - for (typename T::iterator i = r.ref.begin(); i != r.ref.end(); ++i) - *this >> *i; - return *this; - } - - /// Extract an AMQP MAP to a C++ associative container - template <class T> decoder& operator>>(associative_ref<T> r) { - using namespace internal; - start s; - *this >> s; - assert_type_equal(MAP, s.type); - r.ref.clear(); - for (size_t i = 0; i < s.size/2; ++i) { - typename remove_const<typename T::key_type>::type k; - typename remove_const<typename T::mapped_type>::type v; - *this >> k >> v; - r.ref[k] = v; - } - return *this; - } - - /// Extract an AMQP MAP to a C++ push_back sequence of pairs - /// preserving encoded order. - template <class T> decoder& operator>>(pair_sequence_ref<T> r) { - using namespace internal; - start s; - *this >> s; - assert_type_equal(MAP, s.type); - r.ref.clear(); - for (size_t i = 0; i < s.size/2; ++i) { - typedef typename T::value_type value_type; - typename remove_const<typename value_type::first_type>::type k; - typename remove_const<typename value_type::second_type>::type v; - *this >> k >> v; - r.ref.push_back(value_type(k, v)); - } - return *this; - } - - private: - type_id pre_get(); - template <class T, class U> decoder& extract(T& x, U (*get)(pn_data_t*)); - bool exact_; - - friend class message; -}; - -/// @cond INTERNAL -/// XXX Document this -template<class T> T get(decoder& d) { - assert_type_equal(internal::type_id_of<T>::value, d.next_type()); - T x; - d >> x; - return x; -} -/// @endcond - -/// operator>> for integer types that are not covered by the standard -/// overrides. -template <class T> typename internal::enable_if<internal::is_unknown_integer<T>::value, decoder&>::type -operator>>(decoder& d, T& i) { - using namespace internal; - typename integer_type<sizeof(T), is_signed<T>::value>::type v; - d >> v; // Extract as a known integer type - i = v; // C++ conversion to the target type. - return d; -} - -} // codec -} // proton - -#endif // PROTON_CODEC_DECODER_HPP http://git-wip-us.apache.org/repos/asf/qpid-proton-j/blob/2f85988e/proton-c/bindings/cpp/include/proton/codec/deque.hpp ---------------------------------------------------------------------- diff --git a/proton-c/bindings/cpp/include/proton/codec/deque.hpp b/proton-c/bindings/cpp/include/proton/codec/deque.hpp deleted file mode 100644 index 2f570a4..0000000 --- a/proton-c/bindings/cpp/include/proton/codec/deque.hpp +++ /dev/null @@ -1,60 +0,0 @@ -#ifndef PROTON_CODEC_DEQUE_HPP -#define PROTON_CODEC_DEQUE_HPP - -/* - * 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. - */ - -#include "./encoder.hpp" -#include "./decoder.hpp" - -#include <deque> -#include <utility> - -namespace proton { -namespace codec { - -/// std::deque<T> for most T is encoded as an amqp::ARRAY (same type elements) -template <class T, class A> -encoder& operator<<(encoder& e, const std::deque<T, A>& x) { - return e << encoder::array(x, internal::type_id_of<T>::value); -} - -/// std::deque<value> encodes as codec::list_type (mixed type elements) -template <class A> -encoder& operator<<(encoder& e, const std::deque<value, A>& x) { return e << encoder::list(x); } - -/// std::deque<scalar> encodes as codec::list_type (mixed type elements) -template <class A> -encoder& operator<<(encoder& e, const std::deque<scalar, A>& x) { return e << encoder::list(x); } - -/// std::deque<std::pair<k,t> > encodes as codec::map_type. -/// Map entries are encoded in order they appear in the list. -template <class A, class K, class T> -encoder& operator<<(encoder& e, const std::deque<std::pair<K,T>, A>& x) { return e << encoder::map(x); } - -/// Decode to std::deque<T> from an amqp::LIST or amqp::ARRAY. -template <class T, class A> decoder& operator>>(decoder& d, std::deque<T, A>& x) { return d >> decoder::sequence(x); } - -/// Decode to std::deque<std::pair<K, T> from an amqp::MAP. -template <class A, class K, class T> decoder& operator>>(decoder& d, std::deque<std::pair<K, T> , A>& x) { return d >> decoder::pair_sequence(x); } - -} // codec -} // proton - -#endif // PROTON_CODEC_DEQUE_HPP --------------------------------------------------------------------- To unsubscribe, e-mail: [email protected] For additional commands, e-mail: [email protected]
