Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
21 commits
Select commit Hold shift + click to select a range
ac77fa0
lib: compile SimpleAmqpClient as C++17
alanxz Jun 27, 2020
b00f7bf
ci: use gcc-7 and clang-8 under travis-ci
alanxz Jul 23, 2020
2ef475b
test: update googletest to v1.10
alanxz Jun 27, 2020
84bff8d
lib: switch away from boost::scoped_ptr
alanxz Jun 27, 2020
5841f0c
lib: switch away from boost::noncopyable
alanxz Jun 27, 2020
9f4162e
lib: switch to using <cstdint>
alanxz Jul 18, 2020
27fcca4
lib: switch to std::array
alanxz Jul 18, 2020
a2d3d7f
lib: switch away from boost::lexical_cast
alanxz Jul 22, 2020
3a7e234
lib: drop unused boost/limits.hpp
alanxz Jul 22, 2020
64a1fac
lib: drop unused boost/foreach.hpp
alanxz Jul 22, 2020
4bd0514
lib: switch boost::shared_ptr to std::shared_ptr
alanxz Jul 22, 2020
8c8d20e
lib: switch boost::variant to std::variant
alanxz Jul 23, 2020
7e192fd
lib: switch boost::chrono to std::chrono
alanxz Jul 23, 2020
2bc812a
lib: replace boost::bind with lambdas
alanxz Jul 23, 2020
d37979e
lib: remove use of boost::split
alanxz Jul 23, 2020
ebbb603
lib: replace boost::optional with std::optional
alanxz Jul 25, 2020
5ab9e6f
lib: remove boost library from build
alanxz Jul 23, 2020
319e32f
lib: replace boost::stringref with std::string_view
prateek9623 Jul 13, 2022
d46e49a
1. updated README, ci and devcontainer with with removed boost lib
prateek9623 Jul 13, 2022
f3df925
update rabbitmq package name to simplifying usage
prateek9623 Mar 30, 2021
bf31883
update cmake for increase portability and add ability to use with fin…
prateek9623 Mar 30, 2021
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion .devcontainer/Dockerfile
Original file line number Diff line number Diff line change
Expand Up @@ -8,4 +8,4 @@ RUN apt-get update && export DEBIAN_FRONTEND=noninteractive \
&& apt-get -y install --no-install-recommends lsb-release wget software-properties-common \
&& bash -c "$(wget -O - https://apt.llvm.org/llvm.sh)" \
&& apt-get -y install --no-install-recommends clang-format-11 clang-tidy-11 ninja-build rabbitmq-server \
libssl-dev librabbitmq-dev libboost-dev libboost-chrono-dev libboost-system-dev
libssl-dev librabbitmq-dev
24 changes: 11 additions & 13 deletions .travis.yml
Original file line number Diff line number Diff line change
Expand Up @@ -8,26 +8,24 @@ dist: xenial

jobs:
include:
- compiler: gcc
env: FLAGS=""
- compiler: clang
env: FLAGS=""
- compiler: clang
env: FLAGS="-g -O1 -fsanitize=address,undefined -fno-omit-frame-pointer"
- compiler: clang
env: FLAGS="-g -O1 -fsanitize=thread -fno-omit-frame-pointer"
- env: CC=gcc-7 CXX=g++-7 FLAGS=""
- env: CC=clang-8 CXX=clang++-8 FLAGS=""
- env: CC=clang-8 CXX=clang++-8 FLAGS="-g -O1 -fsanitize=address,undefined -fno-omit-frame-pointer"
- env: CC=clang-8 CXX=clang++-8 FLAGS="-g -O1 -fsanitize=thread -fno-omit-frame-pointer"

addons:
apt:
sources:
- ubuntu-toolchain-r-test
- llvm-toolchain-xenial-8
- sourceline: deb http://dl.bintray.com/rabbitmq-erlang/debian xenial erlang
key_url: https://github.com/rabbitmq/signing-keys/releases/download/2.0/rabbitmq-release-signing-key.asc
- sourceline: deb https://dl.bintray.com/rabbitmq/debian xenial main
key_url: https://github.com/rabbitmq/signing-keys/releases/download/2.0/rabbitmq-release-signing-key.asc
packages:
- libboost-dev
- libboost-chrono-dev
- libboost-system-dev
- gcc-7
- g++-7
- clang-8
- rabbitmq-server
- ninja-build

Expand All @@ -37,7 +35,7 @@ install:
- pushd _prereqs
- git clone https://github.com/alanxz/rabbitmq-c
- cd rabbitmq-c
- git checkout v0.10.0
- git checkout v0.11.0
- export RABBITMQC_DIR=`pwd`/../../_install
- cmake -GNinja -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=${RABBITMQC_DIR} -DBUILD_EXAMPLES=OFF -DBUILD_TESTS=OFF -DBUILD_TOOLS=OFF .
- cmake --build . --target install
Expand All @@ -50,6 +48,6 @@ before_script:

# Run the Build script
script:
- cmake -GNinja -DCMAKE_BUILD_TYPE=Debug -DCMAKE_CXX_FLAGS="${FLAGS}" -DCMAKE_INSTALL_PREFIX=../_install -DENABLE_TESTING=ON -DRabbitmqc_DIR=${RABBITMQ_C_DIR} ..
- cmake -GNinja -DCMAKE_BUILD_TYPE=Debug -DCMAKE_CXX_FLAGS="-Wall -Wextra -Werror ${FLAGS}" -DCMAKE_INSTALL_PREFIX=../_install -DENABLE_TESTING=ON -Drabbitmq-c_ROOT=${RABBITMQ_C_DIR} ..
- cmake --build . --target install
- AMQP_BROKER=localhost ASAN_OPTIONS=detect_leaks=1 ctest -V .
85 changes: 48 additions & 37 deletions CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -3,11 +3,11 @@
# version of CMake by first installing Extra Packages for Enterprise Linux
# (https://fedoraproject.org/wiki/EPEL#Extra_Packages_for_Enterprise_Linux_.28EPEL.29)
# and then issuing `yum install cmake3` on the command line.
cmake_minimum_required(VERSION 3.5)
cmake_minimum_required(VERSION 3.12)

project(SimpleAmqpClient LANGUAGES CXX)

set(CMAKE_CXX_STANDARD 98)
set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
set(CMAKE_CXX_EXTENSIONS OFF)

Expand Down Expand Up @@ -41,20 +41,8 @@ string(REGEX MATCH "[0-9]+" _API_VERSION_PATCH ${_API_VERSION_PATCH})

set(SAC_APIVERSION ${_API_VERSION_MAJOR}.${_API_VERSION_MINOR}.${_API_VERSION_PATCH})

option(Boost_Dynamic_Linking_ENABLED "Enable boost dynamic linking" OFF)

if(Boost_Dynamic_Linking_ENABLED)
set(Boost_USE_STATIC_LIBS OFF)
set(Boost_USE_STATIC_RUNTIME OFF)
endif()

find_package(Boost 1.47.0 COMPONENTS chrono system REQUIRED)
include_directories(SYSTEM ${Boost_INCLUDE_DIRS})
link_directories(${Boost_LIBRARY_DIRS})

set(CMAKE_MODULE_PATH ${CMAKE_CURRENT_SOURCE_DIR}/Modules)
find_package(Rabbitmqc REQUIRED)
INCLUDE_DIRECTORIES(SYSTEM ${Rabbitmqc_INCLUDE_DIRS})

option(ENABLE_SSL_SUPPORT "Enable SSL support." ${Rabbitmqc_SSL_ENABLED})

Expand All @@ -68,15 +56,6 @@ if (CMAKE_GENERATOR MATCHES ".*(Make|Ninja).*"
message(STATUS "CMAKE_BUILD_TYPE not specified. Using ${CMAKE_BUILD_TYPE} build")
endif ()

if (CMAKE_CXX_FLAGS STREQUAL ""
AND NOT DEFINED SAC_CXX_FLAGS_SET)
if (CMAKE_COMPILER_IS_GNUCXX
OR CMAKE_CXX_COMPILER_ID STREQUAL "Clang")
SET(CMAKE_CXX_FLAGS "-Wall -Wextra" CACHE STRING "Flags used by the compiler during all build types." FORCE)
endif ()
set(SAC_CXX_FLAGS_SET TRUE CACHE INTERNAL "Have the SAC default compiler flags been set?")
endif ()

include_directories(BEFORE src
${CMAKE_CURRENT_BINARY_DIR})

Expand Down Expand Up @@ -135,7 +114,12 @@ set(SAC_LIB_SRCS


add_library(SimpleAmqpClient ${SAC_LIB_SRCS})
target_link_libraries(SimpleAmqpClient ${Rabbitmqc_LIBRARY} ${SOCKET_LIBRARY} ${Boost_LIBRARIES} $<$<BOOL:${Boost_Dynamic_Linking_ENABLED}>:Boost::dynamic_linking>)
target_include_directories(
SimpleAmqpClient
PRIVATE ${Rabbitmqc_INCLUDE_DIR}
PUBLIC "$<BUILD_INTERFACE:${CMAKE_CURRENT_LIST_DIR}/src>"
"$<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}/>")
target_link_libraries(SimpleAmqpClient Rabbitmqc::rabbitmq ${SOCKET_LIBRARY})

if (WIN32)
set_target_properties(SimpleAmqpClient PROPERTIES VERSION ${SAC_VERSION} OUTPUT_NAME SimpleAmqpClient.${SAC_SOVERSION})
Expand Down Expand Up @@ -195,6 +179,7 @@ endif ()
include(GNUInstallDirs)

install(TARGETS SimpleAmqpClient
EXPORT ${PROJECT_NAME}Targets
RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}
LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
Expand Down Expand Up @@ -225,22 +210,48 @@ set(exec_prefix "\${prefix}")
set(libdir ${CMAKE_INSTALL_LIBDIR})
set(includedir "\${prefix}/include")

foreach(_lib ${Boost_LIBRARIES})
get_filename_component(_LIBPATH ${_lib} PATH)
if (NOT _LIBPATH STREQUAL _LASTLIBPATH)
set(libs_private "${libs_private} -L${_LIBPATH}")
set(_LASTLIBPATH ${_LIBPATH})
endif()

get_filename_component(_LIBNAME ${_lib} NAME_WE)
string(REGEX REPLACE "^lib" "" _LIBNAME ${_LIBNAME})
set(_LIBNAME "-l${_LIBNAME}")
set(libs_private "${libs_private} ${_LIBNAME}")
endforeach()

configure_file(libSimpleAmqpClient.pc.in ${CMAKE_CURRENT_BINARY_DIR}/libSimpleAmqpClient.pc @ONLY)

install(FILES
${CMAKE_CURRENT_BINARY_DIR}/libSimpleAmqpClient.pc
DESTINATION ${CMAKE_INSTALL_LIBDIR}/pkgconfig
)

include(CMakePackageConfigHelpers)
# create and install target cmake file
install(
EXPORT ${PROJECT_NAME}Targets
NAMESPACE ${PROJECT_NAME}::
DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/${PROJECT_NAME})

# create main config file for find_package
# create project config file
set(PROJECT_CONFIG_CONTENT "@PACKAGE_INIT@\n")
# appending find_dependency for each dependency
if(PROJECT_DEP_PKG)
string(APPEND PROJECT_CONFIG_CONTENT "include(CMakeFindDependencyMacro)\n")
foreach(PKG_NAME ${PROJECT_DEP_PKG})
string(APPEND PROJECT_CONFIG_CONTENT
"find_dependency(${PKG_NAME} REQUIRED)\n")
endforeach()
endif()
string(APPEND PROJECT_CONFIG_CONTENT
"include(\"\${CMAKE_CURRENT_LIST_DIR}/${PROJECT_NAME}Targets.cmake\")")
file(WRITE PROJECT_CONFIG_FILE ${PROJECT_CONFIG_CONTENT})

configure_package_config_file(
PROJECT_CONFIG_FILE ${PROJECT_NAME}Config.cmake
INSTALL_DESTINATION "${CMAKE_INSTALL_LIBDIR}/cmake/${PROJECT_NAME}")

file(REMOVE PROJECT_CONFIG_FILE)

# create version file
write_basic_package_version_file(
"${PROJECT_BINARY_DIR}/${PROJECT_NAME}ConfigVersion.cmake"
VERSION ${SAC_VERSION}
COMPATIBILITY SameMajorVersion)

# install cmake configs
install(FILES "${PROJECT_BINARY_DIR}/${PROJECT_NAME}Config.cmake"
"${PROJECT_BINARY_DIR}/${PROJECT_NAME}ConfigVersion.cmake"
DESTINATION "${CMAKE_INSTALL_LIBDIR}/cmake/${PROJECT_NAME}")
45 changes: 23 additions & 22 deletions Modules/FindRabbitmqc.cmake
Original file line number Diff line number Diff line change
@@ -1,32 +1,33 @@
#Find the Rabbitmq C library

INCLUDE(LibFindMacros)

# Find the include directories
FIND_PATH(Rabbitmqc_INCLUDE_DIR
NAMES amqp.h
HINTS ${Rabbitmqc_DIR}/include
)

FIND_LIBRARY(Rabbitmqc_LIBRARY
NAMES rabbitmq
HINTS ${Rabbitmqc_DIR}/lib
)

SET(Rabbitmqc_PROCESS_INCLUDES Rabbitmqc_INCLUDE_DIR)
SET(Rabbitmqc_PROCESS_LIBS Rabbitmqc_LIBRARY)

LIBFIND_PROCESS(Rabbitmqc)

find_package(rabbitmq-c CONFIG REQUIRED)
# needed because currently rabbitmq target doesn;t have include path in it
get_filename_component(_Rabbitmqc_PARENT_DIR ${rabbitmq-c_DIR} DIRECTORY)
set(_Rabbitmqc_INCLUDE_DIR "${_Rabbitmqc_PARENT_DIR}/include")
while(NOT EXISTS ${_Rabbitmqc_INCLUDE_DIR})
get_filename_component(_Rabbitmqc_PARENT_DIR ${_Rabbitmqc_PARENT_DIR} DIRECTORY)
set(_Rabbitmqc_INCLUDE_DIR "${_Rabbitmqc_PARENT_DIR}/include")
endwhile()

set(Rabbitmqc_INCLUDE_DIR ${_Rabbitmqc_INCLUDE_DIR})
message(STATUS "asdasd ${Rabbitmqc_INCLUDE_DIR}")
find_file(_Rabbitmqc_SSL_HEADER
NAMES amqp_ssl_socket.h
PATHS ${Rabbitmqc_INCLUDE_DIR}
NO_DEFAULT_PATH
)
)

string(COMPARE NOTEQUAL "${_Rabbitmqc_SSL_HEADER}"
"_Rabbitmqc_SSL_HEADER-NOTFOUND" _rmqc_ssl_enabled)

set(Rabbitmqc_SSL_ENABLED ${_rmqc_ssl_enabled} CACHE BOOL
"Rabbitmqc is SSL Enabled" FORCE)
mark_as_advanced(_Rabbitmqc_SSL_HEADER Rabbitmqc_SSL_ENABLED)

if(TARGET rabbitmq::rabbitmq)
set_target_properties(rabbitmq::rabbitmq PROPERTIES IMPORTED_GLOBAL TRUE)
add_library(Rabbitmqc::rabbitmq ALIAS rabbitmq::rabbitmq)
else()
set_target_properties(rabbitmq::rabbitmq-static PROPERTIES IMPORTED_GLOBAL TRUE)
add_library(Rabbitmqc::rabbitmq ALIAS rabbitmq::rabbitmq-static)
endif()

mark_as_advanced(_Rabbitmqc_INCLUDE_DIR Rabbitmqc_INCLUDE_DIR)
mark_as_advanced(_Rabbitmqc_SSL_HEADER Rabbitmqc_SSL_ENABLED)
99 changes: 0 additions & 99 deletions Modules/LibFindMacros.cmake

This file was deleted.

15 changes: 4 additions & 11 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,6 @@ Known to work in the following environments:
- Mac OS X (10.7, 10.6, gcc-4.2, 32 and 64-bit). Likely to work on older version, but has not been tested

### Pre-requisites
+ [boost-1.47.0](http://www.boost.org/) or newer (uses chrono, system internally in addition to other header based libraries such as sharedptr and noncopyable)
+ [rabbitmq-c](http://github.com/alanxz/rabbitmq-c) you'll need version 0.8.0 or better.
+ [cmake 3.5+](http://www.cmake.org/) what is needed for the build system
+ [Doxygen](http://www.stack.nl/~dimitri/doxygen/) OPTIONAL only necessary to generate API documentation
Expand All @@ -44,18 +43,12 @@ Notes:

### Build procedure for Windows

Boost libraries are needed, so you can install them using nuget:
```
nuget install boost_chrono-vc142 -Version 1.77.0
nuget install boost_system-vc142 -Version 1.77.0
nuget install boost -Version 1.77.0
```
To build and install succesfully, [rabbitmq-c](https://github.com/alanxz/rabbitmq-c) should be built **as shared library**.

Let *boost_chrono* and *boost_system* be in same directory ```C:\boost```, [rabbitmq-c](https://github.com/alanxz/rabbitmq-c) be on ```C:\rabbitmq-c```,
Let [rabbitmq-c](https://github.com/alanxz/rabbitmq-c) be on ```C:\rabbitmq-c```,
SSL be OFF, and VS2019 is used, than CMake CLI is:
```
cd cmake -G "Visual Studio 16" -A x64 -DBoost_INCLUDE_DIR="C:/boost.XX.XX.X.X/lib/native/include" -DBOOST_ROOT="C:/boost.X.XX.X.X" -DBOOST_LIBRARYDIR="C:/boost" -DRabbitmqc_INCLUDE_DIR="C:/rabbitmq-c/include" -DRabbitmqc_LIBRARY="C:/rabbitmq-c/lib/rabbitmq.4.lib" -DBoost_USE_STATIC_LIBS=ON -DBUILD_STATIC_LIBS=ON -DENABLE_SSL_SUPPORT=OFF ..
cd cmake -G "Visual Studio 16" -A x64 -DRabbitmqc_INCLUDE_DIR="C:/rabbitmq-c/include" -DRabbitmqc_LIBRARY="C:/rabbitmq-c/lib/rabbitmq.4.lib" -DBUILD_STATIC_LIBS=ON -DENABLE_SSL_SUPPORT=OFF ..
```

Using the library
Expand All @@ -72,9 +65,9 @@ instance of this class.

AmqpClient::Channel::ptr_t connection = AmqpClient::Channel::Create("localhost");

All classes have a typedef ptr_t which is equivalent to boost::shared_ptr<> of the
All classes have a typedef ptr_t which is equivalent to std::shared_ptr<> of the
containing class. All classes also have a Create() method does the job creating a new
ptr_t using boost::make_shared<>(). It is recommended that you use these methods
ptr_t using std::make_shared<>(). It is recommended that you use these methods
to construct objects in the library.

Commands dealing with declaring/binding/unbinding/deleting exchanges and queues are
Expand Down
Loading