[mingw32-qpid-cpp/f14/master] Import from master
Andrew Beekhof
beekhof at fedoraproject.org
Mon Jan 10 22:52:12 UTC 2011
commit 761b54dcfb8a7687a9f4884150d87ad64108df05
Author: Andrew Beekhof <andrew at beekhof.net>
Date: Mon Jan 10 23:47:10 2011 +0100
Import from master
mingw32-qpid-cpp.spec | 93 +++
qpid-mingw.patch | 1701 +++++++++++++++++++++++++++++++++++++++++++++++++
sources | 1 +
3 files changed, 1795 insertions(+), 0 deletions(-)
---
diff --git a/mingw32-qpid-cpp.spec b/mingw32-qpid-cpp.spec
new file mode 100644
index 0000000..c5df3e8
--- /dev/null
+++ b/mingw32-qpid-cpp.spec
@@ -0,0 +1,93 @@
+%global __strip %{_mingw32_strip}
+%global __objdump %{_mingw32_objdump}
+%global _use_internal_dependency_generator 0
+%global __find_requires %{_mingw32_findrequires}
+%global __find_provides %{_mingw32_findprovides}
+%define __debug_install_post %{_mingw32_debug_install_post}
+
+Name: mingw32-qpid-cpp
+Version: 0.8
+Release: 0.2%{?dist}
+Summary: MinGW Windows port of AMQP C++ Daemons and Libraries
+
+Group: Development/Libraries
+License: ASL 2.0
+URL: http://qpid.apache.org
+
+Source0: http://people.apache.org/~robbie/qpid/%{version}/RC3/qpid-%{version}.tar.gz
+
+Patch6: qpid-mingw.patch
+
+BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n)
+
+BuildArch: noarch
+
+BuildRequires: redhat-rpm-config cmake make ruby ruby-devel python-devel
+BuildRequires: mingw32-gcc-c++ mingw32-boost mingw32-libxslt mingw32-gnutls
+BuildRequires: mingw32-filesystem >= 57
+Requires: mingw32-boost mingw32-libxslt mingw32-gnutls
+
+%description
+MinGW cross-compiled daemons and run-time libraries for AMQP client
+applications developed using Qpid C++. Clients exchange messages with
+an AMQP message broker using the AMQP protocol.
+
+%{_mingw32_debug_package}
+
+%prep
+%setup -q -n qpid-%{version}
+%patch6 -p0
+
+%build
+%{__mkdir_p} build
+pushd build
+%_mingw32_cmake -DCMAKE_BUILD_TYPE=RelWithDebInfo \
+ -DBUILD_MSCLFS:BOOL=OFF \
+ -DBUILD_MSSQL:BOOL=OFF \
+ -DBUILD_SSL:BOOL=OFF \
+%if "%{?dist}" == ".fc13"
+ -DBoost_COMPILER:STRING=-gcc44 ../cpp
+%else
+ -DBoost_COMPILER:STRING=-gcc45 ../cpp
+%endif
+popd
+
+make -C build VERBOSE=1 %{?_smp_mflags}
+
+%install
+%{__rm} -rf $RPM_BUILD_ROOT
+DESTDIR=$RPM_BUILD_ROOT make -C build VERBOSE=1 install
+
+# Don't package sources in the examples directory
+rm -rf $RPM_BUILD_ROOT%{_mingw32_prefix}/examples
+rm -rf $RPM_BUILD_ROOT%{_mingw32_prefix}/bin/qpid-latency-test.exe
+rm -rf $RPM_BUILD_ROOT%{_mingw32_prefix}/bin/qpid-perftest.exe
+
+# Maybe install some test programs for validation
+#{__install} -d $RPM_BUILD_ROOT $RPM_BUILD_ROOT{_mingw32_bindir}
+
+%clean
+rm -rf $RPM_BUILD_ROOT
+
+%files
+%defattr(-,root,root,-)
+%doc %{_mingw32_prefix}/LICENSE
+%doc %{_mingw32_prefix}/NOTICE
+%{_mingw32_prefix}/conf
+%{_mingw32_prefix}/plugins
+%{_mingw32_prefix}/managementgen
+%{_mingw32_includedir}/qpid
+%{_mingw32_bindir}/qpidd.exe
+%{_mingw32_bindir}/*.dll
+%{_mingw32_bindir}/lib*.dll.a
+%doc cpp/RELEASE_NOTES
+
+%changelog
+* Tue Dec 21 2010 Andrew Beekhof <andrew at beekhof.net> - 0.8-0.2
+- Add dependancy on minw32-filesystem
+
+* Fri Dec 3 2010 Andrew Beekhof <andrew at beekhof.net> - 0.8-0.1
+- Update to upstream 0.8-rc3
+
+* Fri Sep 10 2010 Andrew Beekhof <andrew at beekhof.net> - 0.6.895736-1
+- Initial package creation
diff --git a/qpid-mingw.patch b/qpid-mingw.patch
new file mode 100644
index 0000000..3aa2b9c
--- /dev/null
+++ b/qpid-mingw.patch
@@ -0,0 +1,1701 @@
+---
+ cpp/CMakeLists.txt | 14 +++++++++
+ cpp/include/qpid/Address.h | 2 -
+ cpp/include/qpid/CommonImportExport.h | 9 ++++++
+ cpp/include/qpid/Exception.h | 6 ++--
+ cpp/include/qpid/Url.h | 2 -
+ cpp/include/qpid/agent/ManagementAgent.h | 6 ++--
+ cpp/include/qpid/agent/QmfAgentImportExport.h | 9 ++++++
+ cpp/include/qpid/client/ClientImportExport.h | 9 ++++++
+ cpp/include/qpid/client/ConnectionSettings.h | 2 -
+ cpp/include/qpid/client/Handle.h | 10 +++---
+ cpp/include/qpid/client/Subscription.h | 6 ++--
+ cpp/include/qpid/console/Broker.h | 12 ++++----
+ cpp/include/qpid/console/ConsoleImportExport.h | 9 ++++++
+ cpp/include/qpid/framing/Array.h | 26 ++++++++---------
+ cpp/include/qpid/framing/Buffer.h | 12 ++++----
+ cpp/include/qpid/framing/FieldTable.h | 4 +-
+ cpp/include/qpid/framing/FieldValue.h | 2 -
+ cpp/include/qpid/framing/List.h | 26 ++++++++---------
+ cpp/include/qpid/framing/ProtocolVersion.h | 10 +++---
+ cpp/include/qpid/framing/Uuid.h | 2 -
+ cpp/include/qpid/log/Logger.h | 2 -
+ cpp/include/qpid/management/ManagementObject.h | 18 ++++++------
+ cpp/include/qpid/messaging/Handle.h | 10 +++---
+ cpp/include/qpid/messaging/ImportExport.h | 9 ++++++
+ cpp/include/qpid/sys/IntegerTypes.h | 2 -
+ cpp/include/qpid/sys/Runnable.h | 2 -
+ cpp/include/qpid/sys/Thread.h | 6 +++-
+ cpp/include/qpid/sys/Time.h | 2 -
+ cpp/include/qpid/sys/windows/IntegerTypes.h | 6 +++-
+ cpp/rubygen/0-10/specification.rb | 2 -
+ cpp/rubygen/MethodBodyDefaultVisitor.rb | 2 -
+ cpp/rubygen/cppgen.rb | 3 ++
+ cpp/rubygen/framing.0-10/MethodBodyDefaultVisitor.rb | 2 -
+ cpp/rubygen/framing.0-10/OperationsInvoker.rb | 2 -
+ cpp/rubygen/framing.0-10/Proxy.rb | 4 +-
+ cpp/rubygen/framing.0-10/Session.rb | 4 +-
+ cpp/rubygen/framing.0-10/structs.rb | 2 -
+ cpp/src/CMakeLists.txt | 6 ++--
+ cpp/src/qpid/amqp_0_10/SessionHandler.h | 2 -
+ cpp/src/qpid/broker/BrokerImportExport.h | 9 ++++++
+ cpp/src/qpid/broker/DeliverableMessage.h | 2 -
+ cpp/src/qpid/broker/Exchange.h | 10 +++---
+ cpp/src/qpid/broker/ExpiryPolicy.h | 2 -
+ cpp/src/qpid/broker/MessageBuilder.h | 2 -
+ cpp/src/qpid/broker/NullMessageStore.h | 2 -
+ cpp/src/qpid/broker/TopicExchange.h | 2 -
+ cpp/src/qpid/broker/TxPublish.h | 2 -
+ cpp/src/qpid/broker/windows/BrokerDefaults.cpp | 6 ++++
+ cpp/src/qpid/broker/windows/SaslAuthenticator.cpp | 8 ++++-
+ cpp/src/qpid/broker/windows/SslProtocolFactory.cpp | 28 ++++++++++++++++---
+ cpp/src/qpid/client/windows/SaslFactory.cpp | 4 +-
+ cpp/src/qpid/client/windows/SslConnector.cpp | 4 +-
+ cpp/src/qpid/framing/AMQBody.h | 2 -
+ cpp/src/qpid/framing/AMQContentBody.h | 12 ++++----
+ cpp/src/qpid/framing/AMQFrame.h | 2 -
+ cpp/src/qpid/framing/AMQHeaderBody.h | 2 -
+ cpp/src/qpid/framing/AMQHeartbeatBody.h | 2 -
+ cpp/src/qpid/framing/Invoker.h | 2 -
+ cpp/src/qpid/framing/TransferContent.h | 2 -
+ cpp/src/qpid/log/windows/SinkOptions.cpp | 4 +-
+ cpp/src/qpid/log/windows/SinkOptions.h | 2 -
+ cpp/src/qpid/sys/AggregateOutput.h | 2 -
+ cpp/src/qpid/sys/AsynchIOHandler.h | 2 -
+ cpp/src/qpid/sys/Poller.h | 2 -
+ cpp/src/qpid/sys/alloca.h | 6 +++-
+ cpp/src/qpid/sys/windows/AsynchIO.cpp | 16 ++++++++--
+ cpp/src/qpid/sys/windows/AsynchIoResult.h | 2 -
+ cpp/src/qpid/sys/windows/IocpPoller.cpp | 6 ++--
+ cpp/src/qpid/sys/windows/Shlib.cpp | 3 +-
+ cpp/src/qpid/sys/windows/Socket.cpp | 5 +++
+ cpp/src/qpid/sys/windows/SocketAddress.cpp | 4 ++
+ cpp/src/qpid/sys/windows/SslAsynchIO.cpp | 22 +++++++++++++-
+ cpp/src/qpid/sys/windows/SslAsynchIO.h | 2 -
+ cpp/src/qpid/sys/windows/StrError.cpp | 4 ++
+ cpp/src/qpid/sys/windows/Time.cpp | 4 ++
+ cpp/src/qpid/sys/windows/uuid.cpp | 6 +++-
+ cpp/src/ssl.cmake | 4 +-
+ cpp/src/tests/TimerTest.cpp | 4 ++
+ cpp/src/tests/windows/DisableWin32ErrorWindows.cpp | 4 ++
+ cpp/src/windows/QpiddBroker.cpp | 4 +-
+ 80 files changed, 323 insertions(+), 154 deletions(-)
+
+Index: cpp/include/qpid/Address.h
+===================================================================
+--- cpp/include/qpid/Address.h.orig 2010-05-19 23:28:38.000000000 +0200
++++ cpp/include/qpid/Address.h 2010-12-03 16:36:41.082010996 +0100
+@@ -36,7 +36,7 @@ public:
+ static const std::string TCP; // Default TCP protocol tag.
+ static const uint16_t AMQP_PORT=5672; // Default AMQP port.
+
+- QPID_COMMON_EXTERN explicit Address(
++ QPID_COMMON_INLINE_EXTERN explicit Address(
+ const std::string& protocol_=std::string(),
+ const std::string& host_=std::string(),
+ uint16_t port_=0
+Index: cpp/include/qpid/CommonImportExport.h
+===================================================================
+--- cpp/include/qpid/CommonImportExport.h.orig 2009-07-15 18:45:21.000000000 +0200
++++ cpp/include/qpid/CommonImportExport.h 2010-12-03 16:36:41.082010996 +0100
+@@ -26,8 +26,17 @@
+ #else
+ #define QPID_COMMON_EXTERN __declspec(dllimport)
+ #endif
++#ifdef _MSC_VER
++# define QPID_COMMON_CLASS_EXTERN
++# define QPID_COMMON_INLINE_EXTERN QPID_COMMON_EXTERN
++#else
++# define QPID_COMMON_CLASS_EXTERN QPID_COMMON_EXTERN
++# define QPID_COMMON_INLINE_EXTERN
++#endif
+ #else
+ #define QPID_COMMON_EXTERN
++#define QPID_COMMON_CLASS_EXTERN
++#define QPID_COMMON_INLINE_EXTERN
+ #endif
+
+ #endif
+Index: cpp/include/qpid/Exception.h
+===================================================================
+--- cpp/include/qpid/Exception.h.orig 2010-02-25 21:53:08.000000000 +0100
++++ cpp/include/qpid/Exception.h 2010-12-03 16:36:41.081010859 +0100
+@@ -36,7 +36,7 @@ namespace qpid
+ /**
+ * Base class for Qpid runtime exceptions.
+ */
+-class Exception : public std::exception
++class QPID_COMMON_CLASS_EXTERN Exception : public std::exception
+ {
+ public:
+ QPID_COMMON_EXTERN explicit Exception(const std::string& message=std::string()) throw();
+@@ -68,13 +68,13 @@ struct ChannelException : public Excepti
+ : Exception(message), code(_code) {}
+ };
+
+-struct ConnectionException : public Exception {
++struct QPID_COMMON_CLASS_EXTERN ConnectionException : public Exception {
+ const framing::connection::CloseCode code;
+ ConnectionException(framing::connection::CloseCode _code, const std::string& message)
+ : Exception(message), code(_code) {}
+ };
+
+-struct ClosedException : public Exception {
++struct QPID_COMMON_CLASS_EXTERN ClosedException : public Exception {
+ QPID_COMMON_EXTERN ClosedException(const std::string& msg=std::string());
+ QPID_COMMON_EXTERN std::string getPrefix() const;
+ };
+Index: cpp/include/qpid/Url.h
+===================================================================
+--- cpp/include/qpid/Url.h.orig 2010-06-04 17:23:32.000000000 +0200
++++ cpp/include/qpid/Url.h 2010-12-03 16:36:41.081010859 +0100
+@@ -66,7 +66,7 @@ struct Url : public std::vector<Address>
+ *@exception Invalid if the url is invalid.
+ */
+ QPID_COMMON_EXTERN void parse(const char* url);
+- QPID_COMMON_EXTERN void parse(const std::string& url) { parse(url.c_str()); }
++ QPID_COMMON_INLINE_EXTERN void parse(const std::string& url) { parse(url.c_str()); }
+
+ /** Replace contesnts with parsed URL. Replace with empty URL if invalid. */
+ QPID_COMMON_EXTERN void parseNoThrow(const char* url);
+Index: cpp/include/qpid/agent/ManagementAgent.h
+===================================================================
+--- cpp/include/qpid/agent/ManagementAgent.h.orig 2010-07-08 22:29:52.000000000 +0200
++++ cpp/include/qpid/agent/ManagementAgent.h 2010-12-03 16:36:41.081010859 +0100
+@@ -41,9 +41,9 @@ class ManagementAgent
+
+ class Singleton {
+ public:
+- QMF_AGENT_EXTERN Singleton(bool disableManagement = false);
+- QMF_AGENT_EXTERN ~Singleton();
+- QMF_AGENT_EXTERN static ManagementAgent* getInstance();
++ QMF_AGENT_INLINE_EXTERN Singleton(bool disableManagement = false);
++ QMF_AGENT_INLINE_EXTERN ~Singleton();
++ QMF_AGENT_INLINE_EXTERN static ManagementAgent* getInstance();
+ };
+
+ typedef enum {
+Index: cpp/include/qpid/agent/QmfAgentImportExport.h
+===================================================================
+--- cpp/include/qpid/agent/QmfAgentImportExport.h.orig 2010-03-12 21:20:55.000000000 +0100
++++ cpp/include/qpid/agent/QmfAgentImportExport.h 2010-12-03 16:36:41.082010996 +0100
+@@ -26,8 +26,17 @@
+ #else
+ #define QMF_AGENT_EXTERN __declspec(dllimport)
+ #endif
++#ifdef _MSC_VER
++# define QMF_AGENT_CLASS_EXTERN
++# define QMF_AGENT_INLINE_EXTERN QMF_AGENT_EXTERN
++#else
++# define QMF_AGENT_CLASS_EXTERN QMF_AGENT_EXTERN
++# define QMF_AGENT_INLINE_EXTERN
++#endif
+ #else
+ #define QMF_AGENT_EXTERN
++#define QMF_AGENT_CLASS_EXTERN
++#define QMF_AGENT_INLINE_EXTERN
+ #endif
+
+ #endif
+Index: cpp/include/qpid/client/ClientImportExport.h
+===================================================================
+--- cpp/include/qpid/client/ClientImportExport.h.orig 2009-07-15 18:45:21.000000000 +0200
++++ cpp/include/qpid/client/ClientImportExport.h 2010-12-03 16:36:41.084010990 +0100
+@@ -26,8 +26,17 @@
+ #else
+ #define QPID_CLIENT_EXTERN __declspec(dllimport)
+ #endif
++#ifdef _MSC_VER
++# define QPID_CLIENT_CLASS_EXTERN
++# define QPID_CLIENT_INLINE_EXTERN QPID_CLIENT_EXTERN
++#else
++# define QPID_CLIENT_CLASS_EXTERN QPID_CLIENT_EXTERN
++# define QPID_CLIENT_INLINE_EXTERN
++#endif
+ #else
+ #define QPID_CLIENT_EXTERN
++#define QPID_CLIENT_CLASS_EXTERN
++#define QPID_CLIENT_INLINE_EXTERN
+ #endif
+
+ #endif
+Index: cpp/include/qpid/client/ConnectionSettings.h
+===================================================================
+--- cpp/include/qpid/client/ConnectionSettings.h.orig 2010-04-14 16:40:08.000000000 +0200
++++ cpp/include/qpid/client/ConnectionSettings.h 2010-12-03 16:36:41.084010990 +0100
+@@ -37,7 +37,7 @@ namespace client {
+ /**
+ * Settings for a Connection.
+ */
+-struct ConnectionSettings {
++struct QPID_CLIENT_CLASS_EXTERN ConnectionSettings {
+
+ QPID_CLIENT_EXTERN ConnectionSettings();
+ QPID_CLIENT_EXTERN virtual ~ConnectionSettings();
+Index: cpp/include/qpid/client/Handle.h
+===================================================================
+--- cpp/include/qpid/client/Handle.h.orig 2009-07-15 18:45:21.000000000 +0200
++++ cpp/include/qpid/client/Handle.h 2010-12-03 16:36:41.083010644 +0100
+@@ -40,22 +40,22 @@ template <class T> class Handle {
+ public:
+
+ /**@return true if handle is valid, i.e. not null. */
+- QPID_CLIENT_EXTERN bool isValid() const { return impl; }
++ QPID_CLIENT_INLINE_EXTERN bool isValid() const { return impl; }
+
+ /**@return true if handle is null. It is an error to call any function on a null handle. */
+- QPID_CLIENT_EXTERN bool isNull() const { return !impl; }
++ QPID_CLIENT_INLINE_EXTERN bool isNull() const { return !impl; }
+
+ /** Conversion to bool supports idiom if (handle) { handle->... } */
+- QPID_CLIENT_EXTERN operator bool() const { return impl; }
++ QPID_CLIENT_INLINE_EXTERN operator bool() const { return impl; }
+
+ /** Operator ! supports idiom if (!handle) { do_if_handle_is_null(); } */
+- QPID_CLIENT_EXTERN bool operator !() const { return !impl; }
++ QPID_CLIENT_INLINE_EXTERN bool operator !() const { return !impl; }
+
+ void swap(Handle<T>& h) { T* t = h.impl; h.impl = impl; impl = t; }
+
+ protected:
+ typedef T Impl;
+- QPID_CLIENT_EXTERN Handle() :impl() {}
++ QPID_CLIENT_INLINE_EXTERN Handle() :impl() {}
+
+ // Not implemented,subclasses must implement.
+ QPID_CLIENT_EXTERN Handle(const Handle&);
+Index: cpp/include/qpid/client/Subscription.h
+===================================================================
+--- cpp/include/qpid/client/Subscription.h.orig 2009-07-15 18:45:21.000000000 +0200
++++ cpp/include/qpid/client/Subscription.h 2010-12-03 16:36:41.084010990 +0100
+@@ -91,13 +91,13 @@ class Subscription : public Handle<Subsc
+ QPID_CLIENT_EXTERN void release(const SequenceSet& messageIds);
+
+ /* Acquire a single message */
+- QPID_CLIENT_EXTERN void acquire(const Message& m) { acquire(SequenceSet(m.getId())); }
++ QPID_CLIENT_INLINE_EXTERN void acquire(const Message& m) { acquire(SequenceSet(m.getId())); }
+
+ /* Accept a single message */
+- QPID_CLIENT_EXTERN void accept(const Message& m) { accept(SequenceSet(m.getId())); }
++ QPID_CLIENT_INLINE_EXTERN void accept(const Message& m) { accept(SequenceSet(m.getId())); }
+
+ /* Release a single message */
+- QPID_CLIENT_EXTERN void release(const Message& m) { release(SequenceSet(m.getId())); }
++ QPID_CLIENT_INLINE_EXTERN void release(const Message& m) { release(SequenceSet(m.getId())); }
+
+ /** Get the session associated with this subscription */
+ QPID_CLIENT_EXTERN Session getSession() const;
+Index: cpp/include/qpid/console/Broker.h
+===================================================================
+--- cpp/include/qpid/console/Broker.h.orig 2010-06-03 22:23:30.000000000 +0200
++++ cpp/include/qpid/console/Broker.h 2010-12-03 16:36:41.082010996 +0100
+@@ -55,12 +55,12 @@ namespace console {
+ client::ConnectionSettings& settings);
+ QPID_CONSOLE_EXTERN ~Broker();
+
+- QPID_CONSOLE_EXTERN bool isConnected() const { return connected; }
+- QPID_CONSOLE_EXTERN const std::string& getError() const { return error; }
+- QPID_CONSOLE_EXTERN const std::string& getSessionId() const { return amqpSessionId; }
+- QPID_CONSOLE_EXTERN const framing::Uuid& getBrokerId() const { return brokerId; }
+- QPID_CONSOLE_EXTERN uint32_t getBrokerBank() const { return 1; }
+- QPID_CONSOLE_EXTERN void addBinding(const std::string& key) {
++ QPID_CONSOLE_INLINE_EXTERN bool isConnected() const { return connected; }
++ QPID_CONSOLE_INLINE_EXTERN const std::string& getError() const { return error; }
++ QPID_CONSOLE_INLINE_EXTERN const std::string& getSessionId() const { return amqpSessionId; }
++ QPID_CONSOLE_INLINE_EXTERN const framing::Uuid& getBrokerId() const { return brokerId; }
++ QPID_CONSOLE_INLINE_EXTERN uint32_t getBrokerBank() const { return 1; }
++ QPID_CONSOLE_INLINE_EXTERN void addBinding(const std::string& key) {
+ connThreadBody.bindExchange("qpid.management", key);
+ }
+ QPID_CONSOLE_EXTERN std::string getUrl() const;
+Index: cpp/include/qpid/console/ConsoleImportExport.h
+===================================================================
+--- cpp/include/qpid/console/ConsoleImportExport.h.orig 2009-07-15 18:45:21.000000000 +0200
++++ cpp/include/qpid/console/ConsoleImportExport.h 2010-12-03 16:36:41.082010996 +0100
+@@ -26,8 +26,17 @@
+ #else
+ #define QPID_CONSOLE_EXTERN __declspec(dllimport)
+ #endif
++#ifdef _MSC_VER
++# define QPID_CONSOLE_CLASS_EXTERN
++# define QPID_CONSOLE_INLINE_EXTERN QPID_CONSOLE_EXTERN
++#else
++# define QPID_CONSOLE_CLASS_EXTERN QPID_CONSOLE_EXTERN
++# define QPID_CONSOLE_INLINE_EXTERN
++#endif
+ #else
+ #define QPID_CONSOLE_EXTERN
++#define QPID_CONSOLE_CLASS_EXTERN
++#define QPID_CONSOLE_INLINE_EXTERN
+ #endif
+
+ #endif
+Index: cpp/include/qpid/framing/Array.h
+===================================================================
+--- cpp/include/qpid/framing/Array.h.orig 2009-07-15 18:45:21.000000000 +0200
++++ cpp/include/qpid/framing/Array.h 2010-12-03 16:36:41.080010653 +0100
+@@ -55,25 +55,25 @@ class Array
+ //creates a longstr array
+ QPID_COMMON_EXTERN Array(const std::vector<std::string>& in);
+
+- QPID_COMMON_EXTERN TypeCode getType() const { return type; }
++ QPID_COMMON_INLINE_EXTERN TypeCode getType() const { return type; }
+
+ // std collection interface.
+- QPID_COMMON_EXTERN const_iterator begin() const { return values.begin(); }
+- QPID_COMMON_EXTERN const_iterator end() const { return values.end(); }
+- QPID_COMMON_EXTERN iterator begin() { return values.begin(); }
+- QPID_COMMON_EXTERN iterator end(){ return values.end(); }
+-
+- QPID_COMMON_EXTERN ValuePtr front() const { return values.front(); }
+- QPID_COMMON_EXTERN ValuePtr back() const { return values.back(); }
+- QPID_COMMON_EXTERN size_t size() const { return values.size(); }
++ QPID_COMMON_INLINE_EXTERN const_iterator begin() const { return values.begin(); }
++ QPID_COMMON_INLINE_EXTERN const_iterator end() const { return values.end(); }
++ QPID_COMMON_INLINE_EXTERN iterator begin() { return values.begin(); }
++ QPID_COMMON_INLINE_EXTERN iterator end(){ return values.end(); }
++
++ QPID_COMMON_INLINE_EXTERN ValuePtr front() const { return values.front(); }
++ QPID_COMMON_INLINE_EXTERN ValuePtr back() const { return values.back(); }
++ QPID_COMMON_INLINE_EXTERN size_t size() const { return values.size(); }
+
+ QPID_COMMON_EXTERN void insert(iterator i, ValuePtr value);
+- QPID_COMMON_EXTERN void erase(iterator i) { values.erase(i); }
+- QPID_COMMON_EXTERN void push_back(ValuePtr value) { values.insert(end(), value); }
+- QPID_COMMON_EXTERN void pop_back() { values.pop_back(); }
++ QPID_COMMON_INLINE_EXTERN void erase(iterator i) { values.erase(i); }
++ QPID_COMMON_INLINE_EXTERN void push_back(ValuePtr value) { values.insert(end(), value); }
++ QPID_COMMON_INLINE_EXTERN void pop_back() { values.pop_back(); }
+
+ // Non-std interface
+- QPID_COMMON_EXTERN void add(ValuePtr value) { push_back(value); }
++ QPID_COMMON_INLINE_EXTERN void add(ValuePtr value) { push_back(value); }
+
+ template <class T>
+ void collect(std::vector<T>& out) const
+Index: cpp/include/qpid/framing/Buffer.h
+===================================================================
+--- cpp/include/qpid/framing/Buffer.h.orig 2010-04-09 05:53:30.000000000 +0200
++++ cpp/include/qpid/framing/Buffer.h 2010-12-03 16:36:41.080010653 +0100
+@@ -72,12 +72,12 @@ class Buffer
+ QPID_COMMON_EXTERN void restore(bool reRecord = false);
+ QPID_COMMON_EXTERN void reset();
+
+- QPID_COMMON_EXTERN uint32_t available() { return size - position; }
+- QPID_COMMON_EXTERN uint32_t getSize() { return size; }
+- QPID_COMMON_EXTERN uint32_t getPosition() { return position; }
+- QPID_COMMON_EXTERN void setPosition(uint32_t p) { position = p; }
+- QPID_COMMON_EXTERN Iterator getIterator() { return Iterator(*this); }
+- QPID_COMMON_EXTERN char* getPointer() { return data; }
++ QPID_COMMON_INLINE_EXTERN uint32_t available() { return size - position; }
++ QPID_COMMON_INLINE_EXTERN uint32_t getSize() { return size; }
++ QPID_COMMON_INLINE_EXTERN uint32_t getPosition() { return position; }
++ QPID_COMMON_INLINE_EXTERN void setPosition(uint32_t p) { position = p; }
++ QPID_COMMON_INLINE_EXTERN Iterator getIterator() { return Iterator(*this); }
++ QPID_COMMON_INLINE_EXTERN char* getPointer() { return data; }
+
+ QPID_COMMON_EXTERN void putOctet(uint8_t i);
+ QPID_COMMON_EXTERN void putShort(uint16_t i);
+Index: cpp/include/qpid/framing/FieldTable.h
+===================================================================
+--- cpp/include/qpid/framing/FieldTable.h.orig 2010-03-31 23:13:12.000000000 +0200
++++ cpp/include/qpid/framing/FieldTable.h 2010-12-03 16:36:41.080010653 +0100
+@@ -56,7 +56,7 @@ class FieldTable
+ typedef ValueMap::reference reference;
+ typedef ValueMap::value_type value_type;
+
+- QPID_COMMON_EXTERN FieldTable() {};
++ QPID_COMMON_INLINE_EXTERN FieldTable() {};
+ QPID_COMMON_EXTERN FieldTable(const FieldTable& ft);
+ QPID_COMMON_EXTERN ~FieldTable();
+ QPID_COMMON_EXTERN FieldTable& operator=(const FieldTable& ft);
+@@ -67,7 +67,7 @@ class FieldTable
+ QPID_COMMON_EXTERN int count() const;
+ QPID_COMMON_EXTERN void set(const std::string& name, const ValuePtr& value);
+ QPID_COMMON_EXTERN ValuePtr get(const std::string& name) const;
+- QPID_COMMON_EXTERN bool isSet(const std::string& name) const { return get(name).get() != 0; }
++ QPID_COMMON_INLINE_EXTERN bool isSet(const std::string& name) const { return get(name).get() != 0; }
+
+ QPID_COMMON_EXTERN void setString(const std::string& name, const std::string& value);
+ QPID_COMMON_EXTERN void setInt(const std::string& name, const int value);
+Index: cpp/include/qpid/framing/FieldValue.h
+===================================================================
+--- cpp/include/qpid/framing/FieldValue.h.orig 2010-06-04 19:41:38.000000000 +0200
++++ cpp/include/qpid/framing/FieldValue.h 2010-12-03 16:36:41.081010859 +0100
+@@ -90,7 +90,7 @@ class FieldValue {
+ void encode(Buffer& buffer);
+ void decode(Buffer& buffer);
+ QPID_COMMON_EXTERN bool operator==(const FieldValue&) const;
+- QPID_COMMON_EXTERN bool operator!=(const FieldValue& v) const { return !(*this == v); }
++ QPID_COMMON_INLINE_EXTERN bool operator!=(const FieldValue& v) const { return !(*this == v); }
+
+ QPID_COMMON_EXTERN void print(std::ostream& out) const;
+
+Index: cpp/include/qpid/framing/List.h
+===================================================================
+--- cpp/include/qpid/framing/List.h.orig 2009-09-01 00:43:29.000000000 +0200
++++ cpp/include/qpid/framing/List.h 2010-12-03 16:36:41.080010653 +0100
+@@ -53,19 +53,19 @@ class List
+ QPID_COMMON_EXTERN bool operator==(const List& other) const;
+
+ // std collection interface.
+- QPID_COMMON_EXTERN const_iterator begin() const { return values.begin(); }
+- QPID_COMMON_EXTERN const_iterator end() const { return values.end(); }
+- QPID_COMMON_EXTERN iterator begin() { return values.begin(); }
+- QPID_COMMON_EXTERN iterator end(){ return values.end(); }
+-
+- QPID_COMMON_EXTERN ValuePtr front() const { return values.front(); }
+- QPID_COMMON_EXTERN ValuePtr back() const { return values.back(); }
+- QPID_COMMON_EXTERN size_t size() const { return values.size(); }
+-
+- QPID_COMMON_EXTERN iterator insert(iterator i, ValuePtr value) { return values.insert(i, value); }
+- QPID_COMMON_EXTERN void erase(iterator i) { values.erase(i); }
+- QPID_COMMON_EXTERN void push_back(ValuePtr value) { values.insert(end(), value); }
+- QPID_COMMON_EXTERN void pop_back() { values.pop_back(); }
++ QPID_COMMON_INLINE_EXTERN const_iterator begin() const { return values.begin(); }
++ QPID_COMMON_INLINE_EXTERN const_iterator end() const { return values.end(); }
++ QPID_COMMON_INLINE_EXTERN iterator begin() { return values.begin(); }
++ QPID_COMMON_INLINE_EXTERN iterator end(){ return values.end(); }
++
++ QPID_COMMON_INLINE_EXTERN ValuePtr front() const { return values.front(); }
++ QPID_COMMON_INLINE_EXTERN ValuePtr back() const { return values.back(); }
++ QPID_COMMON_INLINE_EXTERN size_t size() const { return values.size(); }
++
++ QPID_COMMON_INLINE_EXTERN iterator insert(iterator i, ValuePtr value) { return values.insert(i, value); }
++ QPID_COMMON_INLINE_EXTERN void erase(iterator i) { values.erase(i); }
++ QPID_COMMON_INLINE_EXTERN void push_back(ValuePtr value) { values.insert(end(), value); }
++ QPID_COMMON_INLINE_EXTERN void pop_back() { values.pop_back(); }
+
+ private:
+ Values values;
+Index: cpp/include/qpid/framing/ProtocolVersion.h
+===================================================================
+--- cpp/include/qpid/framing/ProtocolVersion.h.orig 2009-07-15 18:45:21.000000000 +0200
++++ cpp/include/qpid/framing/ProtocolVersion.h 2010-12-03 16:36:41.081010859 +0100
+@@ -39,16 +39,16 @@ public:
+ explicit ProtocolVersion(uint8_t _major=0, uint8_t _minor=0)
+ : major_(_major), minor_(_minor) {}
+
+- QPID_COMMON_EXTERN uint8_t getMajor() const { return major_; }
+- QPID_COMMON_EXTERN void setMajor(uint8_t major) { major_ = major; }
+- QPID_COMMON_EXTERN uint8_t getMinor() const { return minor_; }
+- QPID_COMMON_EXTERN void setMinor(uint8_t minor) { minor_ = minor; }
++ QPID_COMMON_INLINE_EXTERN uint8_t getMajor() const { return major_; }
++ QPID_COMMON_INLINE_EXTERN void setMajor(uint8_t major) { major_ = major; }
++ QPID_COMMON_INLINE_EXTERN uint8_t getMinor() const { return minor_; }
++ QPID_COMMON_INLINE_EXTERN void setMinor(uint8_t minor) { minor_ = minor; }
+ QPID_COMMON_EXTERN const std::string toString() const;
+
+ QPID_COMMON_EXTERN ProtocolVersion& operator=(ProtocolVersion p);
+
+ QPID_COMMON_EXTERN bool operator==(ProtocolVersion p) const;
+- QPID_COMMON_EXTERN bool operator!=(ProtocolVersion p) const { return ! (*this == p); }
++ QPID_COMMON_INLINE_EXTERN bool operator!=(ProtocolVersion p) const { return ! (*this == p); }
+ };
+
+ } // namespace framing
+Index: cpp/include/qpid/framing/Uuid.h
+===================================================================
+--- cpp/include/qpid/framing/Uuid.h.orig 2010-11-02 00:51:18.000000000 +0100
++++ cpp/include/qpid/framing/Uuid.h 2010-12-03 16:37:07.490888257 +0100
+@@ -67,7 +67,7 @@ struct Uuid : public boost::array<uint8_
+
+ QPID_COMMON_EXTERN void encode(framing::Buffer& buf) const;
+ QPID_COMMON_EXTERN void decode(framing::Buffer& buf);
+- QPID_COMMON_EXTERN uint32_t encodedSize() const
++ uint32_t encodedSize() const
+ { return static_cast<uint32_t>(size()); }
+
+ /** String value in format 1b4e28ba-2fa1-11d2-883f-b9a761bde3fb. */
+Index: cpp/include/qpid/log/Logger.h
+===================================================================
+--- cpp/include/qpid/log/Logger.h.orig 2010-05-12 21:20:41.000000000 +0200
++++ cpp/include/qpid/log/Logger.h 2010-12-03 16:36:41.080010653 +0100
+@@ -90,7 +90,7 @@ class Logger : private boost::noncopyabl
+ QPID_COMMON_EXTERN void clear();
+
+ /** Get the options used to configure the logger. */
+- QPID_COMMON_EXTERN const Options& getOptions() const { return options; }
++ QPID_COMMON_INLINE_EXTERN const Options& getOptions() const { return options; }
+
+
+ private:
+Index: cpp/include/qpid/management/ManagementObject.h
+===================================================================
+--- cpp/include/qpid/management/ManagementObject.h.orig 2010-07-08 22:29:52.000000000 +0200
++++ cpp/include/qpid/management/ManagementObject.h 2010-12-03 16:36:41.082010996 +0100
+@@ -58,14 +58,14 @@ protected:
+ std::string agentName;
+ void fromString(const std::string&);
+ public:
+- QPID_COMMON_EXTERN ObjectId() : agent(0), first(0), second(0), agentEpoch(0) {}
+- QPID_COMMON_EXTERN ObjectId(const types::Variant& map) :
++ QPID_COMMON_INLINE_EXTERN ObjectId() : agent(0), first(0), second(0), agentEpoch(0) {}
++ QPID_COMMON_INLINE_EXTERN ObjectId(const types::Variant& map) :
+ agent(0), first(0), second(0), agentEpoch(0) { mapDecode(map.asMap()); }
+ QPID_COMMON_EXTERN ObjectId(uint8_t flags, uint16_t seq, uint32_t broker);
+ QPID_COMMON_EXTERN ObjectId(AgentAttachment* _agent, uint8_t flags, uint16_t seq);
+ QPID_COMMON_EXTERN ObjectId(std::istream&);
+ QPID_COMMON_EXTERN ObjectId(const std::string&);
+- QPID_COMMON_EXTERN ObjectId(const std::string& agentAddress, const std::string& key,
++ QPID_COMMON_INLINE_EXTERN ObjectId(const std::string& agentAddress, const std::string& key,
+ uint64_t epoch=0) : agent(0), first(0), second(0),
+ agentEpoch(epoch), v2Key(key), agentName(agentAddress) {}
+
+@@ -76,16 +76,16 @@ public:
+ QPID_COMMON_EXTERN void mapEncode(types::Variant::Map& map) const;
+ QPID_COMMON_EXTERN void mapDecode(const types::Variant::Map& map);
+ QPID_COMMON_EXTERN operator types::Variant::Map() const;
+- QPID_COMMON_EXTERN uint32_t encodedSize() const { return 16; };
++ QPID_COMMON_INLINE_EXTERN uint32_t encodedSize() const { return 16; };
+ QPID_COMMON_EXTERN void encode(std::string& buffer) const;
+ QPID_COMMON_EXTERN void decode(const std::string& buffer);
+ QPID_COMMON_EXTERN bool equalV1(const ObjectId &other) const;
+- QPID_COMMON_EXTERN void setV2Key(const std::string& _key) { v2Key = _key; }
++ QPID_COMMON_INLINE_EXTERN void setV2Key(const std::string& _key) { v2Key = _key; }
+ QPID_COMMON_EXTERN void setV2Key(const ManagementObject& object);
+ QPID_COMMON_EXTERN void disambiguate();
+- QPID_COMMON_EXTERN void setAgentName(const std::string& _name) { agentName = _name; }
+- QPID_COMMON_EXTERN const std::string& getAgentName() const { return agentName; }
+- QPID_COMMON_EXTERN const std::string& getV2Key() const { return v2Key; }
++ QPID_COMMON_INLINE_EXTERN void setAgentName(const std::string& _name) { agentName = _name; }
++ QPID_COMMON_INLINE_EXTERN const std::string& getAgentName() const { return agentName; }
++ QPID_COMMON_INLINE_EXTERN const std::string& getV2Key() const { return v2Key; }
+ friend QPID_COMMON_EXTERN std::ostream& operator<<(std::ostream&, const ObjectId&);
+ };
+
+@@ -132,7 +132,7 @@ public:
+ virtual ~ManagementItem() {}
+ };
+
+-class ManagementObject : public ManagementItem
++class QPID_COMMON_CLASS_EXTERN ManagementObject : public ManagementItem
+ {
+ protected:
+
+Index: cpp/include/qpid/messaging/Handle.h
+===================================================================
+--- cpp/include/qpid/messaging/Handle.h.orig 2010-05-18 19:26:58.000000000 +0200
++++ cpp/include/qpid/messaging/Handle.h 2010-12-03 16:36:41.082010996 +0100
+@@ -40,22 +40,22 @@ template <class T> class Handle {
+ public:
+
+ /**@return true if handle is valid, i.e. not null. */
+- QPID_MESSAGING_EXTERN bool isValid() const { return impl; }
++ QPID_MESSAGING_INLINE_EXTERN bool isValid() const { return impl; }
+
+ /**@return true if handle is null. It is an error to call any function on a null handle. */
+- QPID_MESSAGING_EXTERN bool isNull() const { return !impl; }
++ QPID_MESSAGING_INLINE_EXTERN bool isNull() const { return !impl; }
+
+ /** Conversion to bool supports idiom if (handle) { handle->... } */
+- QPID_MESSAGING_EXTERN operator bool() const { return impl; }
++ QPID_MESSAGING_INLINE_EXTERN operator bool() const { return impl; }
+
+ /** Operator ! supports idiom if (!handle) { do_if_handle_is_null(); } */
+- QPID_MESSAGING_EXTERN bool operator !() const { return !impl; }
++ QPID_MESSAGING_INLINE_EXTERN bool operator !() const { return !impl; }
+
+ void swap(Handle<T>& h) { T* t = h.impl; h.impl = impl; impl = t; }
+
+ protected:
+ typedef T Impl;
+- QPID_MESSAGING_EXTERN Handle() :impl() {}
++ QPID_MESSAGING_INLINE_EXTERN Handle() :impl() {}
+
+ // Not implemented,subclasses must implement.
+ QPID_MESSAGING_EXTERN Handle(const Handle&);
+Index: cpp/include/qpid/messaging/ImportExport.h
+===================================================================
+--- cpp/include/qpid/messaging/ImportExport.h.orig 2010-05-18 19:26:58.000000000 +0200
++++ cpp/include/qpid/messaging/ImportExport.h 2010-12-03 16:36:41.083010644 +0100
+@@ -26,8 +26,17 @@
+ #else
+ #define QPID_MESSAGING_EXTERN __declspec(dllimport)
+ #endif
++#ifdef _MSC_VER
++# define QPID_MESSAGING_CLASS_EXTERN
++# define QPID_MESSAGING_INLINE_EXTERN QPID_MESSAGING_EXTERN
++#else
++# define QPID_MESSAGING_CLASS_EXTERN QPID_MESSAGING_EXTERN
++# define QPID_MESSAGING_INLINE_EXTERN
++#endif
+ #else
+ #define QPID_MESSAGING_EXTERN
++#define QPID_MESSAGING_CLASS_EXTERN
++#define QPID_MESSAGING_INLINE_EXTERN
+ #endif
+
+ #endif /*!QPID_MESSAGING_IMPORTEXPORT_H*/
+Index: cpp/include/qpid/sys/IntegerTypes.h
+===================================================================
+--- cpp/include/qpid/sys/IntegerTypes.h.orig 2009-07-15 18:45:21.000000000 +0200
++++ cpp/include/qpid/sys/IntegerTypes.h 2010-12-03 16:36:41.083010644 +0100
+@@ -21,7 +21,7 @@
+ *
+ */
+
+-#if (defined(_WINDOWS) || defined (WIN32)) && defined(_MSC_VER)
++#if (defined(_WINDOWS) || defined (WIN32))
+ #include "qpid/sys/windows/IntegerTypes.h"
+ #endif
+ #if !defined _WINDOWS && !defined WIN32
+Index: cpp/include/qpid/sys/Runnable.h
+===================================================================
+--- cpp/include/qpid/sys/Runnable.h.orig 2009-07-15 18:45:21.000000000 +0200
++++ cpp/include/qpid/sys/Runnable.h 2010-12-03 16:36:41.083010644 +0100
+@@ -30,7 +30,7 @@ namespace sys {
+ /**
+ * Interface for objects that can be run, e.g. in a thread.
+ */
+-class Runnable
++class QPID_COMMON_CLASS_EXTERN Runnable
+ {
+ public:
+ /** Type to represent a runnable as a Functor */
+Index: cpp/include/qpid/sys/Thread.h
+===================================================================
+--- cpp/include/qpid/sys/Thread.h.orig 2010-04-22 00:07:04.000000000 +0200
++++ cpp/include/qpid/sys/Thread.h 2010-12-03 16:36:41.083010644 +0100
+@@ -25,7 +25,11 @@
+ #include "qpid/CommonImportExport.h"
+
+ #ifdef _WIN32
+-# define QPID_TSS __declspec(thread)
++# ifdef _MSC_VER
++# define QPID_TSS __declspec(thread)
++# else
++# define QPID_TSS __thread
++# endif
+ #elif defined (__GNUC__)
+ # define QPID_TSS __thread
+ #elif defined (__SUNPRO_CC)
+Index: cpp/include/qpid/sys/Time.h
+===================================================================
+--- cpp/include/qpid/sys/Time.h.orig 2010-04-23 05:59:52.000000000 +0200
++++ cpp/include/qpid/sys/Time.h 2010-12-03 16:36:41.083010644 +0100
+@@ -119,7 +119,7 @@ class Duration {
+ friend class AbsTime;
+
+ public:
+- QPID_COMMON_EXTERN inline Duration(int64_t time0 = 0);
++ QPID_COMMON_INLINE_EXTERN inline Duration(int64_t time0 = 0);
+ QPID_COMMON_EXTERN explicit Duration(const AbsTime& start, const AbsTime& finish);
+ inline operator int64_t() const;
+ };
+Index: cpp/include/qpid/sys/windows/IntegerTypes.h
+===================================================================
+--- cpp/include/qpid/sys/windows/IntegerTypes.h.orig 2009-12-15 19:24:02.000000000 +0100
++++ cpp/include/qpid/sys/windows/IntegerTypes.h 2010-12-03 16:36:41.083010644 +0100
+@@ -22,13 +22,17 @@
+ */
+
+ typedef unsigned char uint8_t;
+-typedef char int8_t;
+ typedef unsigned short uint16_t;
+ typedef short int16_t;
+ typedef unsigned int uint32_t;
+ typedef int int32_t;
++#if defined(_MSC_VER)
++typedef char int8_t;
+ typedef unsigned __int64 uint64_t;
+ typedef __int64 int64_t;
++#else
++#include <stdint.h>
++#endif
+
+ // Visual Studio doesn't define other common types, so set them up here too.
+ typedef unsigned int uint;
+Index: cpp/rubygen/0-10/specification.rb
+===================================================================
+--- cpp/rubygen/0-10/specification.rb.orig 2009-07-14 16:32:39.000000000 +0200
++++ cpp/rubygen/0-10/specification.rb 2010-12-03 16:36:41.079011005 +0100
+@@ -252,7 +252,7 @@ class Specification < CppGen
+ include "#{@dir}/specification"
+ namespace(@ns) {
+ genl "template <class F, class R=typename F::result_type>"
+- cpp_class("ProxyTemplate") {
++ cpp_extern_class("QPID_COMMON_CLASS_EXTERN", "ProxyTemplate") {
+ public
+ genl "ProxyTemplate(F f=F()) : functor(f) {}"
+ @amqp.classes.each { |c|
+Index: cpp/rubygen/MethodBodyDefaultVisitor.rb
+===================================================================
+--- cpp/rubygen/MethodBodyDefaultVisitor.rb.orig 2008-12-16 05:43:10.000000000 +0100
++++ cpp/rubygen/MethodBodyDefaultVisitor.rb 2010-12-03 16:36:41.079011005 +0100
+@@ -33,7 +33,7 @@ class MethodBodyDefaultVisitorGen < CppG
+ include "qpid/framing/MethodBodyConstVisitor"
+ namespace(@namespace) {
+ genl
+- cpp_class(@classname, "public MethodBodyConstVisitor") {
++ cpp_extern_class("QPID_COMMON_CLASS_EXTERN", @classname, "public MethodBodyConstVisitor") {
+ genl "public:"
+ genl "virtual void defaultVisit() = 0;"
+ @amqp.methods_.each { |m|
+Index: cpp/rubygen/cppgen.rb
+===================================================================
+--- cpp/rubygen/cppgen.rb.orig 2010-10-14 21:38:40.000000000 +0200
++++ cpp/rubygen/cppgen.rb 2010-12-03 16:36:41.079011005 +0100
+@@ -377,6 +377,9 @@ class CppGen < Generator
+ def cpp_class(name, *bases, &block)
+ struct_class("class", name, bases, &block);
+ end
++ def cpp_extern_class(scope, name, *bases, &block)
++ struct_class("class "+scope, name, bases, &block);
++ end
+
+ def typedef(type, name) genl "typedef #{type} #{name};\n"; end
+
+Index: cpp/rubygen/framing.0-10/MethodBodyDefaultVisitor.rb
+===================================================================
+--- cpp/rubygen/framing.0-10/MethodBodyDefaultVisitor.rb.orig 2009-07-14 16:32:39.000000000 +0200
++++ cpp/rubygen/framing.0-10/MethodBodyDefaultVisitor.rb 2010-12-03 16:36:41.079011005 +0100
+@@ -33,7 +33,7 @@ class MethodBodyDefaultVisitorGen < CppG
+ include "qpid/CommonImportExport.h"
+ namespace(@namespace) {
+ genl "class AMQMethodBody;"
+- cpp_class(@classname, "public MethodBodyConstVisitor") {
++ cpp_extern_class("QPID_COMMON_CLASS_EXTERN", @classname, "public MethodBodyConstVisitor") {
+ genl "public:"
+ genl "virtual void defaultVisit(const AMQMethodBody&) = 0;"
+ @amqp.methods_.each { |m|
+Index: cpp/rubygen/framing.0-10/OperationsInvoker.rb
+===================================================================
+--- cpp/rubygen/framing.0-10/OperationsInvoker.rb.orig 2009-07-27 23:32:16.000000000 +0200
++++ cpp/rubygen/framing.0-10/OperationsInvoker.rb 2010-12-03 16:36:41.078011078 +0100
+@@ -69,7 +69,7 @@ class OperationsInvokerGen < CppGen
+ def invoker_h(invoker, target, methods)
+ return if methods.empty?
+ genl
+- cpp_class(invoker, "public qpid::framing::Invoker") {
++ cpp_extern_class("QPID_COMMON_CLASS_EXTERN", invoker, "public qpid::framing::Invoker") {
+ genl "#{target}& target;"
+ public
+ genl("Invoker(#{target}& target_) : target(target_) {}")
+Index: cpp/rubygen/framing.0-10/Proxy.rb
+===================================================================
+--- cpp/rubygen/framing.0-10/Proxy.rb.orig 2009-07-14 16:32:39.000000000 +0200
++++ cpp/rubygen/framing.0-10/Proxy.rb 2010-12-03 16:36:41.078011078 +0100
+@@ -37,7 +37,7 @@ class ProxyGen < CppGen
+
+ def inner_class_decl(c)
+ cname=c.name.caps
+- cpp_class(cname, "public Proxy") {
++ cpp_extern_class("QPID_COMMON_CLASS_EXTERN", cname, "public Proxy") {
+ gen <<EOS
+ public:
+ #{cname}(FrameHandler& f) : Proxy(f) {}
+@@ -69,7 +69,7 @@ EOS
+ include "qpid/CommonImportExport.h"
+
+ namespace("qpid::framing") {
+- cpp_class(@classname, "public Proxy") {
++ cpp_extern_class("QPID_COMMON_CLASS_EXTERN", @classname, "public Proxy") {
+ public
+ genl "QPID_COMMON_EXTERN #{@classname}(FrameHandler& out);"
+ genl
+Index: cpp/rubygen/framing.0-10/Session.rb
+===================================================================
+--- cpp/rubygen/framing.0-10/Session.rb.orig 2009-07-27 23:32:16.000000000 +0200
++++ cpp/rubygen/framing.0-10/Session.rb 2010-12-03 16:36:41.079011005 +0100
+@@ -56,8 +56,8 @@ module SyncAsync
+ def decl_ctor_opeq()
+ genl
+ genl "QPID_CLIENT_EXTERN #{@classname}();"
+- genl "QPID_CLIENT_EXTERN #{@classname}(const #{@version_base}& other);"
+- genl "QPID_CLIENT_EXTERN #{@classname}& operator=(const #{@version_base}& other);"
++ genl "QPID_CLIENT_INLINE_EXTERN #{@classname}(const #{@version_base}& other);"
++ genl "QPID_CLIENT_INLINE_EXTERN #{@classname}& operator=(const #{@version_base}& other);"
+ end
+
+ def defn_ctor_opeq(inline="")
+Index: cpp/rubygen/framing.0-10/structs.rb
+===================================================================
+--- cpp/rubygen/framing.0-10/structs.rb.orig 2009-10-05 19:03:41.000000000 +0200
++++ cpp/rubygen/framing.0-10/structs.rb 2010-12-03 16:36:41.079011005 +0100
+@@ -406,7 +406,7 @@ EOS
+ namespace qpid {
+ namespace framing {
+
+-class #{classname} #{inheritance} {
++class QPID_COMMON_CLASS_EXTERN #{classname} #{inheritance} {
+ EOS
+ if (is_packed(s))
+ indent { s.fields.each { |f| genl "#{f.cpptype.name} #{f.cppname};" unless f.type_ == "bit"} }
+Index: cpp/src/CMakeLists.txt
+===================================================================
+--- cpp/src/CMakeLists.txt.orig 2010-11-22 19:26:29.000000000 +0100
++++ cpp/src/CMakeLists.txt 2010-12-03 16:36:41.078011078 +0100
+@@ -631,7 +631,7 @@ if (CMAKE_SYSTEM_NAME STREQUAL Windows)
+ )
+
+ set (qpidcommon_platform_LIBS
+- ${windows_ssl_libs} ws2_32
++ ${Boost_THREAD_LIBRARY} ${windows_ssl_libs} ${Boost_PROGRAM_OPTIONS_LIBRARY} ${Boost_DATE_TIME_LIBRARY} ${Boost_FILESYSTEM_LIBRARY} ${Boost_SYSTEM_LIBRARY} ws2_32
+ )
+ set (qpidbroker_platform_SOURCES
+ qpid/broker/windows/BrokerDefaults.cpp
+@@ -932,7 +932,7 @@ if (NOT QPID_GENERATED_HEADERS_IN_SOURCE
+ endif (NOT QPID_GENERATED_HEADERS_IN_SOURCE)
+
+
+-if (WIN32)
++if (_MSC_VER)
+ # Install the DtcPlugin project and call it qpidxarm.
+ set(AMQP_WCF_DIR ${qpid-cpp_SOURCE_DIR}/../wcf)
+ set(qpidxarm_SOURCES ${AMQP_WCF_DIR}/src/Apache/Qpid/DtcPlugin/DtcPlugin.cpp)
+@@ -945,7 +945,7 @@ if (WIN32)
+ COMPONENT ${QPID_COMPONENT_CLIENT})
+ install_pdb (qpidxarm ${QPID_COMPONENT_CLIENT})
+ endif (EXISTS ${qpidxarm_SOURCES})
+-endif (WIN32)
++endif (_MSC_VER)
+
+ set (qpidbroker_SOURCES
+ ${mgen_broker_cpp}
+Index: cpp/src/qpid/amqp_0_10/SessionHandler.h
+===================================================================
+--- cpp/src/qpid/amqp_0_10/SessionHandler.h.orig 2010-01-22 11:58:20.000000000 +0100
++++ cpp/src/qpid/amqp_0_10/SessionHandler.h 2010-12-03 16:36:41.073889006 +0100
+@@ -41,7 +41,7 @@ namespace amqp_0_10 {
+ * to a session state.
+ */
+
+-class SessionHandler : public framing::AMQP_AllOperations::SessionHandler,
++class QPID_COMMON_CLASS_EXTERN SessionHandler : public framing::AMQP_AllOperations::SessionHandler,
+ public framing::FrameHandler::InOutHandler
+ {
+ public:
+Index: cpp/src/qpid/broker/BrokerImportExport.h
+===================================================================
+--- cpp/src/qpid/broker/BrokerImportExport.h.orig 2009-04-24 00:59:12.000000000 +0200
++++ cpp/src/qpid/broker/BrokerImportExport.h 2010-12-03 16:36:41.072893059 +0100
+@@ -26,8 +26,17 @@
+ #else
+ #define QPID_BROKER_EXTERN __declspec(dllimport)
+ #endif
++#ifdef _MSC_VER
++# define QPID_BROKER_CLASS_EXTERN
++# define QPID_BROKER_INLINE_EXTERN QPID_BROKER_EXTERN
++#else
++# define QPID_BROKER_CLASS_EXTERN QPID_BROKER_EXTERN
++# define QPID_BROKER_INLINE_EXTERN
++#endif
+ #else
+ #define QPID_BROKER_EXTERN
++#define QPID_BROKER_CLASS_EXTERN
++#define QPID_BROKER_INLINE_EXTERN
+ #endif
+
+ #endif
+Index: cpp/src/qpid/broker/DeliverableMessage.h
+===================================================================
+--- cpp/src/qpid/broker/DeliverableMessage.h.orig 2010-10-14 21:38:40.000000000 +0200
++++ cpp/src/qpid/broker/DeliverableMessage.h 2010-12-03 16:36:41.073889006 +0100
+@@ -29,7 +29,7 @@
+
+ namespace qpid {
+ namespace broker {
+- class DeliverableMessage : public Deliverable{
++ class QPID_BROKER_CLASS_EXTERN DeliverableMessage : public Deliverable{
+ boost::intrusive_ptr<Message> msg;
+ public:
+ QPID_BROKER_EXTERN DeliverableMessage(const boost::intrusive_ptr<Message>& msg);
+Index: cpp/src/qpid/broker/Exchange.h
+===================================================================
+--- cpp/src/qpid/broker/Exchange.h.orig 2010-10-21 00:15:24.000000000 +0200
++++ cpp/src/qpid/broker/Exchange.h 2010-12-03 16:40:27.095013115 +0100
+@@ -39,7 +39,7 @@ namespace broker {
+ class Broker;
+ class ExchangeRegistry;
+
+-class Exchange : public PersistableExchange, public management::Manageable {
++class QPID_BROKER_CLASS_EXTERN Exchange : public PersistableExchange, public management::Manageable {
+ public:
+ struct Binding : public management::Manageable {
+ typedef boost::shared_ptr<Binding> shared_ptr;
+@@ -147,7 +147,7 @@ public:
+ Broker* broker = 0);
+ QPID_BROKER_EXTERN Exchange(const std::string& _name, bool _durable, const qpid::framing::FieldTable& _args,
+ management::Manageable* parent = 0, Broker* broker = 0);
+- QPID_BROKER_EXTERN virtual ~Exchange();
++ QPID_BROKER_INLINE_EXTERN virtual ~Exchange();
+
+ const std::string& getName() const { return name; }
+ bool isDurable() { return durable; }
+@@ -174,14 +174,14 @@ public:
+ virtual bool bind(boost::shared_ptr<Queue> queue, const std::string& routingKey, const qpid::framing::FieldTable* args) = 0;
+ virtual bool unbind(boost::shared_ptr<Queue> queue, const std::string& routingKey, const qpid::framing::FieldTable* args) = 0;
+ virtual bool isBound(boost::shared_ptr<Queue> queue, const std::string* const routingKey, const qpid::framing::FieldTable* const args) = 0;
+- QPID_BROKER_EXTERN virtual void setProperties(const boost::intrusive_ptr<Message>&);
++ QPID_BROKER_INLINE_EXTERN virtual void setProperties(const boost::intrusive_ptr<Message>&);
+ virtual void route(Deliverable& msg, const std::string& routingKey, const qpid::framing::FieldTable* args) = 0;
+
+ //PersistableExchange:
+ QPID_BROKER_EXTERN void setPersistenceId(uint64_t id) const;
+ uint64_t getPersistenceId() const { return persistenceId; }
+ QPID_BROKER_EXTERN uint32_t encodedSize() const;
+- QPID_BROKER_EXTERN virtual void encode(framing::Buffer& buffer) const;
++ QPID_BROKER_INLINE_EXTERN virtual void encode(framing::Buffer& buffer) const;
+
+ static QPID_BROKER_EXTERN Exchange::shared_ptr decode(ExchangeRegistry& exchanges, framing::Buffer& buffer);
+
+@@ -212,7 +212,7 @@ protected:
+ std::vector<DynamicBridge*> bridgeVector;
+ Broker* broker;
+
+- QPID_BROKER_EXTERN virtual void handleHelloRequest();
++ QPID_BROKER_INLINE_EXTERN virtual void handleHelloRequest();
+ void propagateFedOp(const std::string& routingKey, const std::string& tags,
+ const std::string& op, const std::string& origin,
+ qpid::framing::FieldTable* extra_args=0);
+Index: cpp/src/qpid/broker/ExpiryPolicy.h
+===================================================================
+--- cpp/src/qpid/broker/ExpiryPolicy.h.orig 2009-07-14 16:32:39.000000000 +0200
++++ cpp/src/qpid/broker/ExpiryPolicy.h 2010-12-03 16:36:41.072893059 +0100
+@@ -33,7 +33,7 @@ class Message;
+ /**
+ * Default expiry policy.
+ */
+-class ExpiryPolicy : public RefCounted
++class QPID_BROKER_CLASS_EXTERN ExpiryPolicy : public RefCounted
+ {
+ public:
+ QPID_BROKER_EXTERN virtual ~ExpiryPolicy();
+Index: cpp/src/qpid/broker/MessageBuilder.h
+===================================================================
+--- cpp/src/qpid/broker/MessageBuilder.h.orig 2010-04-15 17:57:46.000000000 +0200
++++ cpp/src/qpid/broker/MessageBuilder.h 2010-12-03 16:36:41.072893059 +0100
+@@ -33,7 +33,7 @@ namespace qpid {
+ class Message;
+ class MessageStore;
+
+- class MessageBuilder : public framing::FrameHandler{
++ class QPID_BROKER_CLASS_EXTERN MessageBuilder : public framing::FrameHandler{
+ public:
+ QPID_BROKER_EXTERN MessageBuilder(MessageStore* const store);
+ QPID_BROKER_EXTERN void handle(framing::AMQFrame& frame);
+Index: cpp/src/qpid/broker/NullMessageStore.h
+===================================================================
+--- cpp/src/qpid/broker/NullMessageStore.h.orig 2009-11-20 16:57:10.000000000 +0100
++++ cpp/src/qpid/broker/NullMessageStore.h 2010-12-03 16:36:41.072893059 +0100
+@@ -34,7 +34,7 @@ namespace broker {
+ /**
+ * A null implementation of the MessageStore interface
+ */
+-class NullMessageStore : public MessageStore
++class QPID_BROKER_CLASS_EXTERN NullMessageStore : public MessageStore
+ {
+ std::set<std::string> prepared;
+ uint64_t nextPersistenceId;
+Index: cpp/src/qpid/broker/TopicExchange.h
+===================================================================
+--- cpp/src/qpid/broker/TopicExchange.h.orig 2010-10-26 19:22:57.000000000 +0200
++++ cpp/src/qpid/broker/TopicExchange.h 2010-12-03 17:04:07.164012945 +0100
+@@ -56,7 +56,7 @@ class TopicExchange : public virtual Exc
+ // | +-->d-->...
+ // +-->x-->y-->...
+ //
+- class BindingNode {
++ class QPID_BROKER_EXTERN BindingNode {
+ public:
+
+ typedef boost::shared_ptr<BindingNode> shared_ptr;
+Index: cpp/src/qpid/broker/TxPublish.h
+===================================================================
+--- cpp/src/qpid/broker/TxPublish.h.orig 2010-10-14 21:38:40.000000000 +0200
++++ cpp/src/qpid/broker/TxPublish.h 2010-12-03 16:36:41.073889006 +0100
+@@ -45,7 +45,7 @@ namespace qpid {
+ * commit() the messages will be passed to the queue for
+ * dispatch or to be added to the in-memory queue.
+ */
+- class TxPublish : public TxOp, public Deliverable{
++ class QPID_BROKER_CLASS_EXTERN TxPublish : public TxOp, public Deliverable{
+
+ class Commit{
+ boost::intrusive_ptr<Message>& msg;
+Index: cpp/src/qpid/broker/windows/BrokerDefaults.cpp
+===================================================================
+--- cpp/src/qpid/broker/windows/BrokerDefaults.cpp.orig 2009-07-13 23:27:14.000000000 +0200
++++ cpp/src/qpid/broker/windows/BrokerDefaults.cpp 2010-12-03 16:36:41.071885727 +0100
+@@ -31,10 +31,16 @@ const std::string Broker::Options::DEFAU
+ std::string
+ Broker::Options::getHome() {
+ std::string home;
++#ifdef _MSC_VER
+ char home_c[MAX_PATH+1];
+ size_t unused;
+ if (0 == getenv_s (&unused, home_c, sizeof(home_c), "HOME"))
+ home += home_c;
++#else
++ char *home_c = getenv("HOME");
++ if( home_c )
++ home += home_c;
++#endif
+ return home;
+ }
+
+Index: cpp/src/qpid/broker/windows/SaslAuthenticator.cpp
+===================================================================
+--- cpp/src/qpid/broker/windows/SaslAuthenticator.cpp.orig 2010-05-25 17:13:08.000000000 +0200
++++ cpp/src/qpid/broker/windows/SaslAuthenticator.cpp 2010-12-03 16:36:41.072893059 +0100
+@@ -159,8 +159,12 @@ void SspiAuthenticator::start(const stri
+ string::size_type j = response.find((char)0, i+1);
+ string uid = response.substr(i+1, j-1);
+ string pwd = response.substr(j+1);
++ string dot(".");
+ int error = 0;
+- if (!LogonUser(uid.c_str(), ".", pwd.c_str(),
++
++ if (!LogonUser(const_cast<char*>(uid.c_str()),
++ const_cast<char*>(dot.c_str()),
++ const_cast<char*>(pwd.c_str()),
+ LOGON32_LOGON_NETWORK,
+ LOGON32_PROVIDER_DEFAULT,
+ &userToken))
+@@ -176,7 +180,7 @@ void SspiAuthenticator::start(const stri
+ client.tune(framing::CHANNEL_MAX, connection.getFrameMax(), 0, 0);
+ }
+
+-void SspiAuthenticator::step(const string& response)
++void SspiAuthenticator::step(const string& /*response*/)
+ {
+ QPID_LOG(info, "SASL: Need another step!!!");
+ }
+Index: cpp/src/qpid/broker/windows/SslProtocolFactory.cpp
+===================================================================
+--- cpp/src/qpid/broker/windows/SslProtocolFactory.cpp.orig 2010-10-11 18:46:43.000000000 +0200
++++ cpp/src/qpid/broker/windows/SslProtocolFactory.cpp 2010-12-03 16:36:41.071885727 +0100
+@@ -34,10 +34,32 @@
+ // security.h needs to see this to distinguish from kernel use.
+ #define SECURITY_WIN32
+ #include <security.h>
+-#include <Schnlsp.h>
++#include <schnlsp.h>
+ #undef SECURITY_WIN32
+
++#ifndef _MSC_VER
++/* Macros borrowed from
++ * http://github.com/mirrors/wine/blob/master/include/sspi.h
++ * under LGPL 2.1+
++ */
++#define SecInvalidateHandle(x) do { \
++ ((PSecHandle)(x))->dwLower = ((ULONG_PTR)((INT_PTR)-1)); \
++ ((PSecHandle)(x))->dwUpper = ((ULONG_PTR)((INT_PTR)-1)); \
++ } while (0)
++
++#define SecIsValidHandle(x) \
++ ((((PSecHandle)(x))->dwLower != ((ULONG_PTR)(INT_PTR)-1)) && \
++ (((PSecHandle)(x))->dwUpper != ((ULONG_PTR)(INT_PTR)-1)))
++
++/* Definition from
++ * http://github.com/mirrors/wine/blob/master/include/wincrypt.h
++ * under LGPL 2.1+
++ */
++#define CERT_STORE_PROV_SYSTEM_A ((LPCSTR)9)
+
++#endif
++
++
+ namespace qpid {
+ namespace sys {
+ namespace windows {
+@@ -165,7 +187,7 @@ SslProtocolFactory::SslProtocolFactory(c
+ cred.cCreds = 1;
+ cred.paCred = &certContext;
+ SECURITY_STATUS status = ::AcquireCredentialsHandle(NULL,
+- UNISP_NAME,
++ const_cast<char*>(UNISP_NAME),
+ SECPKG_CRED_INBOUND,
+ NULL,
+ &cred,
+@@ -259,7 +281,7 @@ void SslProtocolFactory::connect(sys::Po
+ memset(&cred, 0, sizeof(cred));
+ cred.dwVersion = SCHANNEL_CRED_VERSION;
+ SECURITY_STATUS status = ::AcquireCredentialsHandle(NULL,
+- UNISP_NAME,
++ const_cast<char*>(UNISP_NAME),
+ SECPKG_CRED_OUTBOUND,
+ NULL,
+ &cred,
+Index: cpp/src/qpid/client/windows/SaslFactory.cpp
+===================================================================
+--- cpp/src/qpid/client/windows/SaslFactory.cpp.orig 2010-10-22 00:04:07.000000000 +0200
++++ cpp/src/qpid/client/windows/SaslFactory.cpp 2010-12-03 16:36:41.073889006 +0100
+@@ -153,7 +153,7 @@ std::string WindowsSasl::start(const std
+ return resp;
+ }
+
+-std::string WindowsSasl::step(const std::string& challenge)
++std::string WindowsSasl::step(const std::string& /*challenge*/)
+ {
+ // Shouldn't get this for PLAIN...
+ throw InternalErrorException(QPID_MSG("Sasl step error"));
+@@ -169,7 +169,7 @@ std::string WindowsSasl::getUserId()
+ return std::string(); // TODO - when GSSAPI is supported, return userId for connection.
+ }
+
+-std::auto_ptr<SecurityLayer> WindowsSasl::getSecurityLayer(uint16_t maxFrameSize)
++std::auto_ptr<SecurityLayer> WindowsSasl::getSecurityLayer(uint16_t /*maxFrameSize*/)
+ {
+ return std::auto_ptr<SecurityLayer>(0);
+ }
+Index: cpp/src/qpid/client/windows/SslConnector.cpp
+===================================================================
+--- cpp/src/qpid/client/windows/SslConnector.cpp.orig 2010-10-11 18:46:43.000000000 +0200
++++ cpp/src/qpid/client/windows/SslConnector.cpp 2010-12-03 16:36:41.074888444 +0100
+@@ -40,7 +40,7 @@
+ // security.h needs to see this to distinguish from kernel use.
+ #define SECURITY_WIN32
+ #include <security.h>
+-#include <Schnlsp.h>
++#include <schnlsp.h>
+ #undef SECURITY_WIN32
+ #include <winsock2.h>
+
+@@ -133,7 +133,7 @@ SslConnector::SslConnector(boost::shared
+ memset(&cred, 0, sizeof(cred));
+ cred.dwVersion = SCHANNEL_CRED_VERSION;
+ SECURITY_STATUS status = ::AcquireCredentialsHandle(NULL,
+- UNISP_NAME,
++ const_cast<char*>(UNISP_NAME),
+ SECPKG_CRED_OUTBOUND,
+ NULL,
+ &cred,
+Index: cpp/src/qpid/framing/AMQBody.h
+===================================================================
+--- cpp/src/qpid/framing/AMQBody.h.orig 2009-03-12 21:55:34.000000000 +0100
++++ cpp/src/qpid/framing/AMQBody.h 2010-12-03 16:36:41.071885727 +0100
+@@ -46,7 +46,7 @@ struct AMQBodyConstVisitor {
+ virtual void visit(const AMQMethodBody&) = 0;
+ };
+
+-class AMQBody : public RefCounted {
++class QPID_COMMON_CLASS_EXTERN AMQBody : public RefCounted {
+ public:
+ AMQBody() {}
+ QPID_COMMON_EXTERN virtual ~AMQBody();
+Index: cpp/src/qpid/framing/AMQContentBody.h
+===================================================================
+--- cpp/src/qpid/framing/AMQContentBody.h.orig 2009-07-14 16:32:39.000000000 +0200
++++ cpp/src/qpid/framing/AMQContentBody.h 2010-12-03 16:36:41.071885727 +0100
+@@ -29,7 +29,7 @@
+ namespace qpid {
+ namespace framing {
+
+-class AMQContentBody : public AMQBody
++class QPID_COMMON_CLASS_EXTERN AMQContentBody : public AMQBody
+ {
+ string data;
+
+@@ -37,15 +37,15 @@ public:
+ QPID_COMMON_EXTERN AMQContentBody();
+ QPID_COMMON_EXTERN AMQContentBody(const string& data);
+ inline virtual ~AMQContentBody(){}
+- QPID_COMMON_EXTERN inline uint8_t type() const { return CONTENT_BODY; };
+- QPID_COMMON_EXTERN inline const string& getData() const { return data; }
+- QPID_COMMON_EXTERN inline string& getData() { return data; }
++ inline uint8_t type() const { return CONTENT_BODY; };
++ inline const string& getData() const { return data; }
++ inline string& getData() { return data; }
+ QPID_COMMON_EXTERN uint32_t encodedSize() const;
+ QPID_COMMON_EXTERN void encode(Buffer& buffer) const;
+ QPID_COMMON_EXTERN void decode(Buffer& buffer, uint32_t size);
+ QPID_COMMON_EXTERN void print(std::ostream& out) const;
+- QPID_COMMON_EXTERN void accept(AMQBodyConstVisitor& v) const { v.visit(*this); }
+- QPID_COMMON_EXTERN boost::intrusive_ptr<AMQBody> clone() const { return BodyFactory::copy(*this); }
++ void accept(AMQBodyConstVisitor& v) const { v.visit(*this); }
++ boost::intrusive_ptr<AMQBody> clone() const { return BodyFactory::copy(*this); }
+ };
+
+ }
+Index: cpp/src/qpid/framing/AMQFrame.h
+===================================================================
+--- cpp/src/qpid/framing/AMQFrame.h.orig 2010-05-14 18:08:33.000000000 +0200
++++ cpp/src/qpid/framing/AMQFrame.h 2010-12-03 16:36:41.070892086 +0100
+@@ -33,7 +33,7 @@
+ namespace qpid {
+ namespace framing {
+
+-class AMQFrame : public AMQDataBlock
++class QPID_COMMON_CLASS_EXTERN AMQFrame : public AMQDataBlock
+ {
+ public:
+ QPID_COMMON_EXTERN AMQFrame(const boost::intrusive_ptr<AMQBody>& b=0);
+Index: cpp/src/qpid/framing/AMQHeaderBody.h
+===================================================================
+--- cpp/src/qpid/framing/AMQHeaderBody.h.orig 2009-07-14 16:32:39.000000000 +0200
++++ cpp/src/qpid/framing/AMQHeaderBody.h 2010-12-03 16:36:41.070892086 +0100
+@@ -35,7 +35,7 @@
+ namespace qpid {
+ namespace framing {
+
+-class AMQHeaderBody : public AMQBody
++class QPID_COMMON_CLASS_EXTERN AMQHeaderBody : public AMQBody
+ {
+ template <class T> struct OptProps { boost::optional<T> props; };
+ template <class Base, class T>
+Index: cpp/src/qpid/framing/AMQHeartbeatBody.h
+===================================================================
+--- cpp/src/qpid/framing/AMQHeartbeatBody.h.orig 2009-07-14 16:32:39.000000000 +0200
++++ cpp/src/qpid/framing/AMQHeartbeatBody.h 2010-12-03 16:36:41.071885727 +0100
+@@ -29,7 +29,7 @@
+ namespace qpid {
+ namespace framing {
+
+-class AMQHeartbeatBody : public AMQBody
++class QPID_COMMON_CLASS_EXTERN AMQHeartbeatBody : public AMQBody
+ {
+ public:
+ QPID_COMMON_EXTERN virtual ~AMQHeartbeatBody();
+Index: cpp/src/qpid/framing/Invoker.h
+===================================================================
+--- cpp/src/qpid/framing/Invoker.h.orig 2008-04-24 19:42:59.000000000 +0200
++++ cpp/src/qpid/framing/Invoker.h 2010-12-03 16:36:41.071885727 +0100
+@@ -35,7 +35,7 @@ class AMQMethodBody;
+ /**
+ * Base class for invoker visitors.
+ */
+-class Invoker: public MethodBodyDefaultVisitor, protected StructHelper
++class QPID_COMMON_CLASS_EXTERN Invoker: public MethodBodyDefaultVisitor, protected StructHelper
+ {
+ public:
+ struct Result {
+Index: cpp/src/qpid/framing/TransferContent.h
+===================================================================
+--- cpp/src/qpid/framing/TransferContent.h.orig 2009-07-14 16:32:39.000000000 +0200
++++ cpp/src/qpid/framing/TransferContent.h 2010-12-03 16:36:41.071885727 +0100
+@@ -32,7 +32,7 @@ namespace qpid {
+ namespace framing {
+
+ /** Message content */
+-class TransferContent : public MethodContent
++class QPID_COMMON_CLASS_EXTERN TransferContent : public MethodContent
+ {
+ AMQHeaderBody header;
+ std::string data;
+Index: cpp/src/qpid/log/windows/SinkOptions.cpp
+===================================================================
+--- cpp/src/qpid/log/windows/SinkOptions.cpp.orig 2009-07-14 16:32:39.000000000 +0200
++++ cpp/src/qpid/log/windows/SinkOptions.cpp 2010-12-03 16:36:41.073889006 +0100
+@@ -53,7 +53,7 @@ static int eventTypes[qpid::log::LevelTr
+
+ class EventLogOutput : public qpid::log::Logger::Output {
+ public:
+- EventLogOutput(const std::string& sourceName) : logHandle(0)
++ EventLogOutput(const std::string& /*sourceName*/) : logHandle(0)
+ {
+ logHandle = OpenEventLog(0, "Application");
+ }
+@@ -83,7 +83,7 @@ private:
+ HANDLE logHandle;
+ };
+
+-SinkOptions::SinkOptions(const std::string& argv0)
++SinkOptions::SinkOptions(const std::string& /*argv0*/)
+ : qpid::log::SinkOptions(),
+ logToStderr(true),
+ logToStdout(false),
+Index: cpp/src/qpid/log/windows/SinkOptions.h
+===================================================================
+--- cpp/src/qpid/log/windows/SinkOptions.h.orig 2009-03-12 21:55:34.000000000 +0100
++++ cpp/src/qpid/log/windows/SinkOptions.h 2010-12-03 16:36:41.073889006 +0100
+@@ -26,7 +26,7 @@ namespace qpid {
+ namespace log {
+ namespace windows {
+
+-struct SinkOptions : public qpid::log::SinkOptions {
++struct QPID_COMMON_CLASS_EXTERN SinkOptions : public qpid::log::SinkOptions {
+ QPID_COMMON_EXTERN SinkOptions(const std::string& argv0);
+ virtual ~SinkOptions() {}
+
+Index: cpp/src/qpid/sys/AggregateOutput.h
+===================================================================
+--- cpp/src/qpid/sys/AggregateOutput.h.orig 2010-01-14 19:55:46.000000000 +0100
++++ cpp/src/qpid/sys/AggregateOutput.h 2010-12-03 16:36:41.076893048 +0100
+@@ -41,7 +41,7 @@ namespace sys {
+ * doOutput is called in another.
+ */
+
+-class AggregateOutput : public OutputTask, public OutputControl
++class QPID_COMMON_CLASS_EXTERN AggregateOutput : public OutputTask, public OutputControl
+ {
+ typedef std::deque<OutputTask*> TaskList;
+
+Index: cpp/src/qpid/sys/AsynchIOHandler.h
+===================================================================
+--- cpp/src/qpid/sys/AsynchIOHandler.h.orig 2009-09-22 17:59:53.000000000 +0200
++++ cpp/src/qpid/sys/AsynchIOHandler.h 2010-12-03 16:36:41.076893048 +0100
+@@ -57,7 +57,7 @@ class AsynchIOHandler : public OutputCon
+ QPID_COMMON_EXTERN ~AsynchIOHandler();
+ QPID_COMMON_EXTERN void init(AsynchIO* a, int numBuffs);
+
+- QPID_COMMON_EXTERN void setClient() { isClient = true; }
++ QPID_COMMON_INLINE_EXTERN void setClient() { isClient = true; }
+
+ // Output side
+ QPID_COMMON_EXTERN void abort();
+Index: cpp/src/qpid/sys/Poller.h
+===================================================================
+--- cpp/src/qpid/sys/Poller.h.orig 2010-07-28 21:07:04.000000000 +0200
++++ cpp/src/qpid/sys/Poller.h 2010-12-03 16:36:41.076893048 +0100
+@@ -120,7 +120,7 @@ class PollerHandle {
+ friend struct Poller::Event;
+
+ PollerHandlePrivate* const impl;
+- QPID_COMMON_EXTERN virtual void processEvent(Poller::EventType) {};
++ QPID_COMMON_INLINE_EXTERN virtual void processEvent(Poller::EventType) {};
+
+ public:
+ QPID_COMMON_EXTERN PollerHandle(const IOHandle& h);
+Index: cpp/src/qpid/sys/alloca.h
+===================================================================
+--- cpp/src/qpid/sys/alloca.h.orig 2009-03-12 21:55:34.000000000 +0100
++++ cpp/src/qpid/sys/alloca.h 2010-12-03 16:36:41.074888444 +0100
+@@ -21,8 +21,10 @@
+ *
+ */
+
+-#if (defined(_WINDOWS) || defined (WIN32)) && defined(_MSC_VER)
++#if (defined(_WINDOWS) || defined (WIN32))
+ #include <malloc.h>
++
++#if defined(_MSC_VER)
+ #ifdef alloc
+ # undef alloc
+ #endif
+@@ -36,4 +38,6 @@
+ #include <alloca.h>
+ #endif
+
++#endif /*_MSC_VER */
++
+ #endif /*!QPID_SYS_ALLOCA_H*/
+Index: cpp/src/qpid/sys/windows/AsynchIO.cpp
+===================================================================
+--- cpp/src/qpid/sys/windows/AsynchIO.cpp.orig 2010-01-23 01:16:34.000000000 +0100
++++ cpp/src/qpid/sys/windows/AsynchIO.cpp 2010-12-03 16:36:41.075891514 +0100
+@@ -43,6 +43,12 @@
+ namespace {
+
+ typedef qpid::sys::ScopedLock<qpid::sys::Mutex> QLock;
++#ifdef WIN32
++# ifndef _MSC_VER
++# define WSAID_ACCEPTEX {0xb5367df1,0xcbac,0x11cf,{0x95,0xca,0x00,0x80,0x5f,0x48,0xa1,0x92}}
++ typedef BOOL (PASCAL *LPFN_ACCEPTEX)(SOCKET,SOCKET,PVOID,DWORD,DWORD,DWORD,LPDWORD,LPOVERLAPPED);
++# endif
++#endif
+
+ /*
+ * The function pointers for AcceptEx and ConnectEx need to be looked up
+@@ -114,7 +120,8 @@ AsynchAcceptor::~AsynchAcceptor()
+ }
+
+ void AsynchAcceptor::start(Poller::shared_ptr poller) {
+- poller->monitorHandle(PollerHandle(socket), Poller::INPUT);
++ PollerHandle ph = PollerHandle(socket);
++ poller->monitorHandle(ph, Poller::INPUT);
+ restart ();
+ }
+
+@@ -154,7 +161,7 @@ void AsynchAcceptResult::success(size_t
+ delete this;
+ }
+
+-void AsynchAcceptResult::failure(int status) {
++void AsynchAcceptResult::failure(int /*status*/) {
+ //if (status != WSA_OPERATION_ABORTED)
+ // Can there be anything else? ;
+ delete this;
+@@ -410,8 +417,9 @@ void AsynchIO::queueForDeletion() {
+ }
+
+ void AsynchIO::start(Poller::shared_ptr poller0) {
++ PollerHandle ph = PollerHandle(socket);
+ poller = poller0;
+- poller->monitorHandle(PollerHandle(socket), Poller::INPUT);
++ poller->monitorHandle(ph, Poller::INPUT);
+ if (writeQueue.size() > 0) // Already have data queued for write
+ notifyPendingWrite();
+ startReading();
+@@ -584,7 +592,7 @@ void AsynchIO::notifyIdle(void) {
+ void AsynchIO::startWrite(AsynchIO::BufferBase* buff) {
+ writeInProgress = true;
+ InterlockedIncrement(&opsInProgress);
+- int writeCount = buff->byteCount-buff->dataCount;
++// int writeCount = buff->byteCount-buff->dataCount;
+ AsynchWriteResult *result =
+ new AsynchWriteResult(boost::bind(&AsynchIO::completion, this, _1),
+ buff,
+Index: cpp/src/qpid/sys/windows/AsynchIoResult.h
+===================================================================
+--- cpp/src/qpid/sys/windows/AsynchIoResult.h.orig 2009-10-21 23:53:53.000000000 +0200
++++ cpp/src/qpid/sys/windows/AsynchIoResult.h 2010-12-03 16:36:41.075891514 +0100
+@@ -98,7 +98,7 @@ private:
+ // AcceptEx needs a place to write the local and remote addresses
+ // when accepting the connection. Place those here; get enough for
+ // IPv6 addresses, even if the socket is IPv4.
+- enum { SOCKADDRMAXLEN = sizeof sockaddr_in6 + 16,
++ enum { SOCKADDRMAXLEN = sizeof (sockaddr_in6) + 16,
+ SOCKADDRBUFLEN = 2 * SOCKADDRMAXLEN };
+ char addressBuffer[SOCKADDRBUFLEN];
+ };
+Index: cpp/src/qpid/sys/windows/IocpPoller.cpp
+===================================================================
+--- cpp/src/qpid/sys/windows/IocpPoller.cpp.orig 2010-06-01 20:59:52.000000000 +0200
++++ cpp/src/qpid/sys/windows/IocpPoller.cpp 2010-12-03 16:36:41.075891514 +0100
+@@ -152,9 +152,9 @@ void Poller::monitorHandle(PollerHandle&
+ }
+
+ // All no-ops...
+-void Poller::unmonitorHandle(PollerHandle& handle, Direction dir) {}
+-void Poller::registerHandle(PollerHandle& handle) {}
+-void Poller::unregisterHandle(PollerHandle& handle) {}
++void Poller::unmonitorHandle(PollerHandle& /*handle*/, Direction /*dir*/) {}
++void Poller::registerHandle(PollerHandle& /*handle*/) {}
++void Poller::unregisterHandle(PollerHandle& /*handle*/) {}
+
+ Poller::Event Poller::wait(Duration timeout) {
+ DWORD timeoutMs = 0;
+Index: cpp/src/qpid/sys/windows/Shlib.cpp
+===================================================================
+--- cpp/src/qpid/sys/windows/Shlib.cpp.orig 2008-10-22 01:29:47.000000000 +0200
++++ cpp/src/qpid/sys/windows/Shlib.cpp 2010-12-03 16:36:41.075891514 +0100
+@@ -44,7 +44,8 @@ void Shlib::unload() {
+ }
+
+ void* Shlib::getSymbol(const char* name) {
+- void* sym = GetProcAddress(static_cast<HMODULE>(handle), name);
++ // Double cast avoids warning about casting function pointer to object
++ void *sym = reinterpret_cast<void*>(reinterpret_cast<intptr_t>(GetProcAddress(static_cast<HMODULE>(handle), name)));
+ if (sym == NULL)
+ throw QPID_WINDOWS_ERROR(GetLastError());
+ return sym;
+Index: cpp/src/qpid/sys/windows/Socket.cpp
+===================================================================
+--- cpp/src/qpid/sys/windows/Socket.cpp.orig 2009-10-21 23:53:53.000000000 +0200
++++ cpp/src/qpid/sys/windows/Socket.cpp 2010-12-03 16:36:41.076893048 +0100
+@@ -19,6 +19,11 @@
+ *
+ */
+
++// Ensure we get all of winsock2.h
++#ifndef _WIN32_WINNT
++#define _WIN32_WINNT 0x0501
++#endif
++
+ #include "qpid/sys/Socket.h"
+ #include "qpid/sys/SocketAddress.h"
+ #include "qpid/sys/windows/IoHandlePrivate.h"
+Index: cpp/src/qpid/sys/windows/SocketAddress.cpp
+===================================================================
+--- cpp/src/qpid/sys/windows/SocketAddress.cpp.orig 2010-01-29 18:22:13.000000000 +0100
++++ cpp/src/qpid/sys/windows/SocketAddress.cpp 2010-12-03 16:36:41.074888444 +0100
+@@ -18,6 +18,10 @@
+ * under the License.
+ *
+ */
++// Ensure we get all of winsock2.h
++#ifndef _WIN32_WINNT
++#define _WIN32_WINNT 0x0501
++#endif
+
+ #include "qpid/sys/SocketAddress.h"
+
+Index: cpp/src/qpid/sys/windows/SslAsynchIO.cpp
+===================================================================
+--- cpp/src/qpid/sys/windows/SslAsynchIO.cpp.orig 2010-10-11 18:46:43.000000000 +0200
++++ cpp/src/qpid/sys/windows/SslAsynchIO.cpp 2010-12-03 16:36:41.074888444 +0100
+@@ -32,12 +32,30 @@
+ // security.h needs to see this to distinguish from kernel use.
+ #define SECURITY_WIN32
+ #include <security.h>
+-#include <Schnlsp.h>
++#include <schnlsp.h>
+ #undef SECURITY_WIN32
+
+ #include <queue>
+ #include <boost/bind.hpp>
+
++#ifndef _MSC_VER
++#define SEC_I_CONTEXT_EXPIRED 1 /* FIXME: Need to find the true value */
++
++/* Macros borrowed from
++ * http://github.com/mirrors/wine/blob/master/include/sspi.h
++ * under LGPL 2.1+
++ */
++#define SecInvalidateHandle(x) do { \
++ ((PSecHandle)(x))->dwLower = ((ULONG_PTR)((INT_PTR)-1)); \
++ ((PSecHandle)(x))->dwUpper = ((ULONG_PTR)((INT_PTR)-1)); \
++ } while (0)
++
++#define SecIsValidHandle(x) \
++ ((((PSecHandle)(x))->dwLower != ((ULONG_PTR)(INT_PTR)-1)) && \
++ (((PSecHandle)(x))->dwUpper != ((ULONG_PTR)(INT_PTR)-1)))
++
++#endif
++
+ namespace {
+
+ /*
+@@ -166,7 +184,7 @@ void SslAsynchIO::queueWrite(AsynchIO::B
+ buffDesc.ulVersion = SECBUFFER_VERSION;
+ buffDesc.cBuffers = 4;
+ buffDesc.pBuffers = buffs;
+- SECURITY_STATUS status = ::EncryptMessage(&ctxtHandle, 0, &buffDesc, 0);
++ ::EncryptMessage(&ctxtHandle, 0, &buffDesc, 0);
+
+ // EncryptMessage encrypts the data in place. The header and trailer
+ // areas were left previously and must now be included in the updated
+Index: cpp/src/qpid/sys/windows/SslAsynchIO.h
+===================================================================
+--- cpp/src/qpid/sys/windows/SslAsynchIO.h.orig 2010-10-11 18:46:43.000000000 +0200
++++ cpp/src/qpid/sys/windows/SslAsynchIO.h 2010-12-03 16:36:41.075891514 +0100
+@@ -32,7 +32,7 @@
+ // security.h needs to see this to distinguish from kernel use.
+ #define SECURITY_WIN32
+ #include <security.h>
+-#include <Schnlsp.h>
++#include <schnlsp.h>
+ #undef SECURITY_WIN32
+
+ namespace qpid {
+Index: cpp/src/qpid/sys/windows/StrError.cpp
+===================================================================
+--- cpp/src/qpid/sys/windows/StrError.cpp.orig 2008-10-03 21:12:52.000000000 +0200
++++ cpp/src/qpid/sys/windows/StrError.cpp 2010-12-03 16:36:41.076893048 +0100
+@@ -39,7 +39,11 @@ std::string strError(int err) {
+ bufsize,
+ 0))
+ {
++#ifdef _MSC_VER
+ strerror_s (buf, bufsize, err);
++#else
++ return std::string(strerror(err));
++#endif
+ }
+ return std::string(buf);
+ }
+Index: cpp/src/qpid/sys/windows/Time.cpp
+===================================================================
+--- cpp/src/qpid/sys/windows/Time.cpp.orig 2010-04-23 05:59:52.000000000 +0200
++++ cpp/src/qpid/sys/windows/Time.cpp 2010-12-03 16:36:41.074888444 +0100
+@@ -91,7 +91,11 @@ void outputFormattedNow(std::ostream& o)
+ char time_string[100];
+
+ ::time( &rawtime );
++#ifdef _MSC_VER
+ ::localtime_s(&timeinfo, &rawtime);
++#else
++ timeinfo = *(::localtime(&rawtime));
++#endif
+ ::strftime(time_string, 100,
+ "%Y-%m-%d %H:%M:%S",
+ &timeinfo);
+Index: cpp/src/qpid/sys/windows/uuid.cpp
+===================================================================
+--- cpp/src/qpid/sys/windows/uuid.cpp.orig 2010-01-18 23:40:15.000000000 +0100
++++ cpp/src/qpid/sys/windows/uuid.cpp 2010-12-03 16:36:41.075891514 +0100
+@@ -19,7 +19,7 @@
+ *
+ */
+
+-#include <Rpc.h>
++#include <rpc.h>
+ #ifdef uuid_t /* Done in rpcdce.h */
+ # undef uuid_t
+ #endif
+@@ -52,7 +52,11 @@ int uuid_parse (const char *in, uuid_t u
+ void uuid_unparse (const uuid_t uu, char *out) {
+ unsigned char *formatted;
+ if (UuidToString((UUID*)uu, &formatted) == RPC_S_OK) {
++#ifdef _MSC_VER
+ strncpy_s (out, 36+1, (char*)formatted, _TRUNCATE);
++#else
++ strncpy (out, (char*)formatted, 36+1);
++#endif
+ RpcStringFree(&formatted);
+ }
+ }
+Index: cpp/src/ssl.cmake
+===================================================================
+--- cpp/src/ssl.cmake.orig 2010-01-23 01:16:34.000000000 +0100
++++ cpp/src/ssl.cmake 2010-12-03 16:36:41.070892086 +0100
+@@ -46,8 +46,8 @@ if (BUILD_SSL)
+ set (sslcommon_windows_SOURCES
+ qpid/sys/windows/SslAsynchIO.cpp
+ )
+- set (windows_ssl_libs Secur32.lib)
+- set (windows_ssl_server_libs Crypt32.lib)
++ set (windows_ssl_libs secur32.lib)
++ set (windows_ssl_server_libs crypt32.lib)
+ else (CMAKE_SYSTEM_NAME STREQUAL Windows)
+
+ if (NOT NSS_FOUND)
+Index: cpp/src/tests/TimerTest.cpp
+===================================================================
+--- cpp/src/tests/TimerTest.cpp.orig 2010-08-26 23:12:54.000000000 +0200
++++ cpp/src/tests/TimerTest.cpp 2010-12-03 16:36:41.078011078 +0100
+@@ -77,8 +77,10 @@ class TestTask : public TimerTask
+ BOOST_CHECK(fired);
+ BOOST_CHECK_EQUAL(expected_position, position);
+ Duration actual(start, end);
+-#ifdef _WIN32
++#ifdef _MSC_VER
+ uint64_t difference = _abs64(expected - actual);
++#elif defined (_WIN32)
++ uint64_t difference = labs(expected - actual);
+ #else
+ uint64_t difference = abs(expected - actual);
+ #endif
+Index: cpp/src/tests/windows/DisableWin32ErrorWindows.cpp
+===================================================================
+--- cpp/src/tests/windows/DisableWin32ErrorWindows.cpp.orig 2009-10-06 01:19:53.000000000 +0200
++++ cpp/src/tests/windows/DisableWin32ErrorWindows.cpp 2010-12-03 16:36:41.078011078 +0100
+@@ -26,7 +26,9 @@
+ // include this file with the executable being built. If the default
+ // behaviors are desired, don't include this file in the build.
+
++#if defined(_MSC_VER)
+ #include <crtdbg.h>
++#endif
+ #include <windows.h>
+ #include <iostream>
+
+@@ -53,12 +55,14 @@ static redirect_errors_to_stderr block;
+
+ redirect_errors_to_stderr::redirect_errors_to_stderr()
+ {
++#if defined(_MSC_VER)
+ _CrtSetReportMode (_CRT_WARN, _CRTDBG_MODE_FILE);
+ _CrtSetReportFile (_CRT_WARN, _CRTDBG_FILE_STDERR);
+ _CrtSetReportMode (_CRT_ERROR, _CRTDBG_MODE_FILE);
+ _CrtSetReportFile (_CRT_ERROR, _CRTDBG_FILE_STDERR);
+ _CrtSetReportMode (_CRT_ASSERT, _CRTDBG_MODE_FILE);
+ _CrtSetReportFile (_CRT_ASSERT, _CRTDBG_FILE_STDERR);
++#endif
+
+ // Prevent the system from displaying the critical-error-handler
+ // and can't-open-file message boxes.
+Index: cpp/src/windows/QpiddBroker.cpp
+===================================================================
+--- cpp/src/windows/QpiddBroker.cpp.orig 2010-01-27 23:06:52.000000000 +0100
++++ cpp/src/windows/QpiddBroker.cpp 2010-12-03 16:36:41.070892086 +0100
+@@ -155,7 +155,7 @@ NamedSharedMemory<T>::NamedSharedMemory(
+ name(n),
+ memory(NULL),
+ data(0)
+-{};
++{}
+
+ template <typename T>
+ NamedSharedMemory<T>::~NamedSharedMemory() {
+@@ -163,7 +163,7 @@ NamedSharedMemory<T>::~NamedSharedMemory
+ ::UnmapViewOfFile(data);
+ if (memory != NULL)
+ ::CloseHandle(memory);
+-};
++}
+
+ template <typename T>
+ T& NamedSharedMemory<T>::create() {
diff --git a/sources b/sources
index e69de29..6ff2d81 100644
--- a/sources
+++ b/sources
@@ -0,0 +1 @@
+0184fef44ae9ca859bb4ef9ee22d5e1c qpid-0.8.tar.gz
More information about the scm-commits
mailing list