Export symbols on Windows dll builds

This commit is contained in:
Matias Fontanini
2016-06-19 09:46:28 -07:00
parent 678ac88c9b
commit 831111812e
14 changed files with 83 additions and 23 deletions

View File

@@ -34,6 +34,7 @@
#include <vector> #include <vector>
#include <iosfwd> #include <iosfwd>
#include <algorithm> #include <algorithm>
#include "macros.h"
namespace cppkafka { namespace cppkafka {
@@ -47,7 +48,7 @@ namespace cppkafka {
* pointer that this buffer points to will still until the call to Producer::produce * pointer that this buffer points to will still until the call to Producer::produce
* returns. * returns.
*/ */
class Buffer { class CPPKAFKA_API Buffer {
public: public:
/** /**
* The type of data this buffer points to * The type of data this buffer points to

View File

@@ -40,6 +40,7 @@
#include "topic_configuration.h" #include "topic_configuration.h"
#include "clonable_ptr.h" #include "clonable_ptr.h"
#include "configuration_base.h" #include "configuration_base.h"
#include "macros.h"
namespace cppkafka { namespace cppkafka {
@@ -56,7 +57,7 @@ class KafkaHandleBase;
* *
* Some other overloads for Configuration::set are given via ConfigurationBase. * Some other overloads for Configuration::set are given via ConfigurationBase.
*/ */
class Configuration : public ConfigurationBase<Configuration> { class CPPKAFKA_API Configuration : public ConfigurationBase<Configuration> {
public: public:
using DeliveryReportCallback = std::function<void(Producer& producer, const Message&)>; using DeliveryReportCallback = std::function<void(Producer& producer, const Message&)>;
using OffsetCommitCallback = std::function<void(Consumer& consumer, rd_kafka_resp_err_t, using OffsetCommitCallback = std::function<void(Consumer& consumer, rd_kafka_resp_err_t,

View File

@@ -36,6 +36,7 @@
#include <functional> #include <functional>
#include "kafka_handle_base.h" #include "kafka_handle_base.h"
#include "message.h" #include "message.h"
#include "macros.h"
namespace cppkafka { namespace cppkafka {
@@ -92,7 +93,7 @@ class TopicConfiguration;
* } * }
* \endcode * \endcode
*/ */
class Consumer : public KafkaHandleBase { class CPPKAFKA_API Consumer : public KafkaHandleBase {
public: public:
using AssignmentCallback = std::function<void(TopicPartitionList&)>; using AssignmentCallback = std::function<void(TopicPartitionList&)>;
using RevocationCallback = std::function<void(const TopicPartitionList&)>; using RevocationCallback = std::function<void(const TopicPartitionList&)>;

View File

@@ -33,13 +33,14 @@
#include <stdexcept> #include <stdexcept>
#include <string> #include <string>
#include <librdkafka/rdkafka.h> #include <librdkafka/rdkafka.h>
#include "macros.h"
namespace cppkafka { namespace cppkafka {
/** /**
* Base class for all cppkafka exceptions * Base class for all cppkafka exceptions
*/ */
class Exception : public std::exception { class CPPKAFKA_API Exception : public std::exception {
public: public:
Exception(std::string message); Exception(std::string message);
@@ -51,7 +52,7 @@ private:
/** /**
* A configuration related error * A configuration related error
*/ */
class ConfigException : public Exception { class CPPKAFKA_API ConfigException : public Exception {
public: public:
ConfigException(const std::string& config_name, const std::string& error); ConfigException(const std::string& config_name, const std::string& error);
}; };
@@ -59,7 +60,7 @@ public:
/** /**
* Indicates a configuration option was not set * Indicates a configuration option was not set
*/ */
class ConfigOptionNotFound : public Exception { class CPPKAFKA_API ConfigOptionNotFound : public Exception {
public: public:
ConfigOptionNotFound(const std::string& config_name); ConfigOptionNotFound(const std::string& config_name);
}; };
@@ -67,7 +68,7 @@ public:
/** /**
* A generic rdkafka handle error * A generic rdkafka handle error
*/ */
class HandleException : public Exception { class CPPKAFKA_API HandleException : public Exception {
public: public:
HandleException(rd_kafka_resp_err_t error_code); HandleException(rd_kafka_resp_err_t error_code);

View File

@@ -41,6 +41,7 @@
#include "topic_partition_list.h" #include "topic_partition_list.h"
#include "topic_configuration.h" #include "topic_configuration.h"
#include "configuration.h" #include "configuration.h"
#include "macros.h"
namespace cppkafka { namespace cppkafka {
@@ -51,7 +52,7 @@ class TopicMetadata;
/** /**
* Base class for kafka consumer/producer * Base class for kafka consumer/producer
*/ */
class KafkaHandleBase { class CPPKAFKA_API KafkaHandleBase {
public: public:
using OffsetTuple = std::tuple<int64_t, int64_t>; using OffsetTuple = std::tuple<int64_t, int64_t>;

46
include/cppkafka/macros.h Normal file
View File

@@ -0,0 +1,46 @@
/*
* Copyright (c) 2016, Matias Fontanini
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are
* met:
*
* * Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* * Redistributions in binary form must reproduce the above
* copyright notice, this list of conditions and the following disclaimer
* in the documentation and/or other materials provided with the
* distribution.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
* OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*
*/
#ifndef CPPKAFKA_MACROS_H
#define CPPKAFKA_MACROS_H
// If cppkafka was built into a shared library
#if defined(_WIN32) && !defined(CPPKAFKA_STATIC)
// Export/import symbols, depending on whether we're compiling or consuming the lib
#ifdef cppkafka_EXPORTS
#define CPPKAFKA_API __declspec(dllexport)
#else
#define CPPKAFKA_API __declspec(dllimport)
#endif // cppkafka_EXPORTS
#else
// Otherwise, default this to an empty macro
#define CPPKAFKA_API
#endif // _WIN32 && !CPPKAFKA_STATIC
#endif // CPPKAFKA_MACROS_H

View File

@@ -35,6 +35,7 @@
#include <librdkafka/rdkafka.h> #include <librdkafka/rdkafka.h>
#include "buffer.h" #include "buffer.h"
#include "topic.h" #include "topic.h"
#include "macros.h"
namespace cppkafka { namespace cppkafka {
@@ -48,7 +49,7 @@ namespace cppkafka {
* necessary when calling Consumer::poll() as any poll operation that returns a null pointer will * necessary when calling Consumer::poll() as any poll operation that returns a null pointer will
* return an empty message. * return an empty message.
*/ */
class Message { class CPPKAFKA_API Message {
public: public:
/** /**
* Constructs a message that won't take ownership of the given pointer * Constructs a message that won't take ownership of the given pointer

View File

@@ -36,13 +36,14 @@
#include <cstdint> #include <cstdint>
#include <unordered_set> #include <unordered_set>
#include <librdkafka/rdkafka.h> #include <librdkafka/rdkafka.h>
#include "macros.h"
namespace cppkafka { namespace cppkafka {
/** /**
* Represents the metadata for a partition * Represents the metadata for a partition
*/ */
class PartitionMetadata { class CPPKAFKA_API PartitionMetadata {
public: public:
PartitionMetadata(const rd_kafka_metadata_partition& partition); PartitionMetadata(const rd_kafka_metadata_partition& partition);
@@ -81,7 +82,7 @@ private:
/** /**
* Represents the metadata for a topic * Represents the metadata for a topic
*/ */
class TopicMetadata { class CPPKAFKA_API TopicMetadata {
public: public:
TopicMetadata(const rd_kafka_metadata_topic& topic); TopicMetadata(const rd_kafka_metadata_topic& topic);
@@ -108,7 +109,7 @@ private:
/** /**
* Represents a broker's metadata * Represents a broker's metadata
*/ */
class BrokerMetadata { class CPPKAFKA_API BrokerMetadata {
public: public:
BrokerMetadata(const rd_kafka_metadata_broker_t& broker); BrokerMetadata(const rd_kafka_metadata_broker_t& broker);
@@ -135,7 +136,7 @@ private:
/** /**
* Represents metadata for brokers, topics and partitions * Represents metadata for brokers, topics and partitions
*/ */
class Metadata { class CPPKAFKA_API Metadata {
public: public:
Metadata(const rd_kafka_metadata_t* ptr); Metadata(const rd_kafka_metadata_t* ptr);

View File

@@ -30,6 +30,8 @@
#ifndef CPPKAFKA_PARTITION_H #ifndef CPPKAFKA_PARTITION_H
#define CPPKAFKA_PARTITION_H #define CPPKAFKA_PARTITION_H
#include "macros.h"
namespace cppkafka { namespace cppkafka {
/** /**
@@ -38,7 +40,7 @@ namespace cppkafka {
* This class is basically a wrapper over an int that when default constructed will default * This class is basically a wrapper over an int that when default constructed will default
* to using RD_KAFKA_PARTITION_UA so you don't need to use the macro name. * to using RD_KAFKA_PARTITION_UA so you don't need to use the macro name.
*/ */
class Partition { class CPPKAFKA_API Partition {
public: public:
/** /**
* \brief Constructs an unassigned partition * \brief Constructs an unassigned partition

View File

@@ -36,6 +36,7 @@
#include "buffer.h" #include "buffer.h"
#include "topic.h" #include "topic.h"
#include "partition.h" #include "partition.h"
#include "macros.h"
namespace cppkafka { namespace cppkafka {
@@ -77,7 +78,7 @@ class TopicConfiguration;
* *
* \endcode * \endcode
*/ */
class Producer : public KafkaHandleBase { class CPPKAFKA_API Producer : public KafkaHandleBase {
public: public:
enum PayloadPolicy { enum PayloadPolicy {
COPY_PAYLOAD = RD_KAFKA_MSG_F_COPY, ///< Means RD_KAFKA_MSG_F_COPY COPY_PAYLOAD = RD_KAFKA_MSG_F_COPY, ///< Means RD_KAFKA_MSG_F_COPY

View File

@@ -34,6 +34,7 @@
#include <memory> #include <memory>
#include <boost/optional.hpp> #include <boost/optional.hpp>
#include <librdkafka/rdkafka.h> #include <librdkafka/rdkafka.h>
#include "macros.h"
namespace cppkafka { namespace cppkafka {
@@ -42,7 +43,7 @@ namespace cppkafka {
* *
* This is a simple wrapper over a rd_kafka_topic_t* * This is a simple wrapper over a rd_kafka_topic_t*
*/ */
class Topic { class CPPKAFKA_API Topic {
public: public:
/** /**
* \brief Creates a Topic object that doesn't take ownership of the handle * \brief Creates a Topic object that doesn't take ownership of the handle

View File

@@ -35,6 +35,7 @@
#include <librdkafka/rdkafka.h> #include <librdkafka/rdkafka.h>
#include "clonable_ptr.h" #include "clonable_ptr.h"
#include "configuration_base.h" #include "configuration_base.h"
#include "macros.h"
namespace cppkafka { namespace cppkafka {
@@ -46,7 +47,7 @@ class Buffer;
* *
* ConfigurationBase provides some extra overloads for set * ConfigurationBase provides some extra overloads for set
*/ */
class TopicConfiguration : public ConfigurationBase<TopicConfiguration> { class CPPKAFKA_API TopicConfiguration : public ConfigurationBase<TopicConfiguration> {
public: public:
/** /**
* \brief Partitioner callback * \brief Partitioner callback

View File

@@ -33,13 +33,14 @@
#include <string> #include <string>
#include <iosfwd> #include <iosfwd>
#include <cstdint> #include <cstdint>
#include "macros.h"
namespace cppkafka { namespace cppkafka {
/** /**
* Represents a topic/partition * Represents a topic/partition
*/ */
class TopicPartition { class CPPKAFKA_API TopicPartition {
public: public:
/** /**
* Special offsets enum * Special offsets enum

View File

@@ -34,6 +34,7 @@
#include <iosfwd> #include <iosfwd>
#include <algorithm> #include <algorithm>
#include <librdkafka/rdkafka.h> #include <librdkafka/rdkafka.h>
#include "macros.h"
namespace cppkafka { namespace cppkafka {
@@ -47,12 +48,12 @@ using TopicPartitionsListPtr = std::unique_ptr<rd_kafka_topic_partition_list_t,
using TopicPartitionList = std::vector<TopicPartition>; using TopicPartitionList = std::vector<TopicPartition>;
// Conversions between rdkafka handles and TopicPartitionList // Conversions between rdkafka handles and TopicPartitionList
TopicPartitionsListPtr convert(const std::vector<TopicPartition>& topic_partitions); CPPKAFKA_API TopicPartitionsListPtr convert(const std::vector<TopicPartition>& topic_partitions);
std::vector<TopicPartition> convert(const TopicPartitionsListPtr& topic_partitions); CPPKAFKA_API std::vector<TopicPartition> convert(const TopicPartitionsListPtr& topic_partitions);
std::vector<TopicPartition> convert(rd_kafka_topic_partition_list_t* topic_partitions); CPPKAFKA_API std::vector<TopicPartition> convert(rd_kafka_topic_partition_list_t* topic_partitions);
TopicPartitionsListPtr make_handle(rd_kafka_topic_partition_list_t* handle); CPPKAFKA_API TopicPartitionsListPtr make_handle(rd_kafka_topic_partition_list_t* handle);
std::ostream& operator<<(std::ostream& output, const TopicPartitionList& rhs); CPPKAFKA_API std::ostream& operator<<(std::ostream& output, const TopicPartitionList& rhs);
} // cppkafka } // cppkafka