Ver Fonte

Check that C++ compiler supports override keyword

If the compiler supports override, define CXX11_OVERRIDE as override,
otherwise define it as empty. Use CXX11_OVERRIDE instead of override.
Tatsuhiro Tsujikawa há 12 anos atrás
pai
commit
28d5c7408f

+ 21 - 0
configure.ac

@@ -96,6 +96,27 @@ PKG_PROG_PKG_CONFIG([0.20])
 # Check C++ compiler supports C++0x/C++11 feature
 AX_CXX_COMPILE_STDCXX_11([noext])
 
+# i686-w64-mingw32-g++ 4.6 does not support override keyword. For
+# those compilers, define CXX11_OVERRIDE to empty string. Otherwise
+# define it as override. Use CXX11_OVERRIDE instead of override.
+AC_MSG_CHECKING([whether the C++ compiler supports `override` keyword])
+AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
+struct Base {
+virtual void f() = 0;
+};
+struct Derived : Base {
+virtual void f() override {}
+};
+]],
+[[
+Derived x;
+]])],
+    [cxx11_override=override
+     AC_MSG_RESULT([yes])],
+    [AC_MSG_RESULT([no])])
+AC_DEFINE_UNQUOTED([CXX11_OVERRIDE], [$cxx11_override],
+                   [Define `override` keyword if the compiler supports it])
+
 # Check static build is requested
 if test "x$ARIA2_STATIC" = "xyes"; then
   case "$host" in

+ 2 - 1
src/NullSinkStreamFilter.h

@@ -75,7 +75,8 @@ public:
     return bytesProcessed_;
   }
 
-  virtual bool installDelegate(const std::unique_ptr<StreamFilter> filter) override
+  virtual bool installDelegate(const std::unique_ptr<StreamFilter> filter)
+    CXX11_OVERRIDE
   {
     return false;
   }

+ 2 - 1
src/SinkStreamFilter.h

@@ -75,7 +75,8 @@ public:
     return bytesProcessed_;
   }
 
-  virtual bool installDelegate(const std::unique_ptr<StreamFilter> filter) override
+  virtual bool installDelegate(const std::unique_ptr<StreamFilter> filter)
+    CXX11_OVERRIDE
   {
     return false;
   }

+ 1 - 1
test/BtCancelMessageTest.cc

@@ -41,7 +41,7 @@ public:
                                length(0) {}
 
     virtual void doCancelSendingPieceAction
-    (size_t index, int32_t begin, int32_t length) override {
+    (size_t index, int32_t begin, int32_t length) CXX11_OVERRIDE {
       this->index = index;
       this->begin = begin;
       this->length = length;

+ 3 - 3
test/BtChokeMessageTest.cc

@@ -48,12 +48,12 @@ public:
         doChokingActionCalled{false}
     {}
 
-    virtual void doChokedAction() override
+    virtual void doChokedAction() CXX11_OVERRIDE
     {
       doChokedActionCalled = true;
     }
 
-    virtual void doChokingAction() override
+    virtual void doChokingAction() CXX11_OVERRIDE
     {
       doChokingActionCalled = true;
     }
@@ -65,7 +65,7 @@ public:
   public:
     MockBtRequestFactory2():doChokedActionCalled{false} {}
 
-    virtual void doChokedAction() override
+    virtual void doChokedAction() CXX11_OVERRIDE
     {
       doChokedActionCalled = true;
     }

+ 3 - 2
test/BtRejectMessageTest.cc

@@ -41,7 +41,8 @@ public:
     }
 
     virtual const RequestSlot* getOutstandingRequest
-    (size_t index, int32_t begin, int32_t length) override {
+    (size_t index, int32_t begin, int32_t length) CXX11_OVERRIDE
+    {
       if(slot &&
          slot->getIndex() == index && slot->getBegin() == begin &&
          slot->getLength() == length) {
@@ -51,7 +52,7 @@ public:
       }
     }
 
-    virtual void removeOutstandingRequest(const RequestSlot* s) override
+    virtual void removeOutstandingRequest(const RequestSlot* s) CXX11_OVERRIDE
     {
       if(slot->getIndex() == s->getIndex() &&
          slot->getBegin() == s->getBegin() &&

+ 5 - 3
test/BtRequestMessageTest.cc

@@ -54,7 +54,7 @@ public:
 
   class MockPieceStorage2 : public MockPieceStorage {
   public:
-    virtual bool hasPiece(size_t index) override
+    virtual bool hasPiece(size_t index) CXX11_OVERRIDE
     {
       return index == 1;
     }
@@ -63,13 +63,15 @@ public:
   class MockBtMessageFactory2 : public MockBtMessageFactory {
   public:
     virtual std::unique_ptr<BtPieceMessage>
-    createPieceMessage(size_t index, int32_t begin, int32_t length) override
+    createPieceMessage(size_t index, int32_t begin, int32_t length)
+      CXX11_OVERRIDE
     {
       return make_unique<BtPieceMessage>(index, begin, length);
     }
 
     virtual std::unique_ptr<BtRejectMessage>
-    createRejectMessage(size_t index, int32_t begin, int32_t length) override
+    createRejectMessage(size_t index, int32_t begin, int32_t length)
+      CXX11_OVERRIDE
     {
       return make_unique<BtRejectMessage>(index, begin, length);
     }

+ 2 - 1
test/DHTAnnouncePeerMessageTest.cc

@@ -37,7 +37,8 @@ public:
   class MockDHTMessageFactory2:public MockDHTMessageFactory {
     virtual std::unique_ptr<DHTAnnouncePeerReplyMessage>
     createAnnouncePeerReplyMessage(const std::shared_ptr<DHTNode>& remoteNode,
-                                   const std::string& transactionID) override
+                                   const std::string& transactionID)
+      CXX11_OVERRIDE
     {
       return make_unique<DHTAnnouncePeerReplyMessage>(localNode_, remoteNode,
                                                       transactionID);

+ 1 - 1
test/DHTFindNodeMessageTest.cc

@@ -40,7 +40,7 @@ public:
     createFindNodeReplyMessage
     (const std::shared_ptr<DHTNode>& remoteNode,
      std::vector<std::shared_ptr<DHTNode>> closestKNodes,
-     const std::string& transactionID) override
+     const std::string& transactionID) CXX11_OVERRIDE
     {
       auto m = make_unique<DHTFindNodeReplyMessage>
         (AF_INET, localNode_, remoteNode, transactionID);

+ 1 - 1
test/DHTGetPeersMessageTest.cc

@@ -44,7 +44,7 @@ public:
      std::vector<std::shared_ptr<DHTNode>> closestKNodes,
      std::vector<std::shared_ptr<Peer>> peers,
      const std::string& token,
-     const std::string& transactionID) override
+     const std::string& transactionID) CXX11_OVERRIDE
     {
       auto m = make_unique<DHTGetPeersReplyMessage>(AF_INET, localNode_,
                                                     remoteNode, token,

+ 1 - 1
test/DHTPingMessageTest.cc

@@ -38,7 +38,7 @@ public:
     virtual std::unique_ptr<DHTPingReplyMessage>
     createPingReplyMessage(const std::shared_ptr<DHTNode>& remoteNode,
                            const unsigned char* remoteNodeID,
-                           const std::string& transactionID) override
+                           const std::string& transactionID) CXX11_OVERRIDE
     {
       unsigned char id[DHT_ID_LENGTH];
       std::fill(std::begin(id), std::end(id), '0');

+ 6 - 5
test/DefaultBtMessageDispatcherTest.cc

@@ -83,14 +83,14 @@ public:
       : evcheck{evcheck}
     {}
 
-    virtual void onQueued() override
+    virtual void onQueued() CXX11_OVERRIDE
     {
       if(evcheck){
         evcheck->onQueuedCalled = true;
       }
     }
 
-    virtual void send() override
+    virtual void send() CXX11_OVERRIDE
     {
       if(evcheck) {
         evcheck->sendCalled = true;
@@ -98,7 +98,7 @@ public:
     }
 
     virtual void onCancelSendingPieceEvent
-    (const BtCancelSendingPieceEvent& event) override
+    (const BtCancelSendingPieceEvent& event) CXX11_OVERRIDE
     {
       if(evcheck) {
         evcheck->doCancelActionCalled = true;
@@ -110,7 +110,7 @@ public:
   private:
     std::shared_ptr<Piece> piece;
   public:
-    virtual std::shared_ptr<Piece> getPiece(size_t index) override
+    virtual std::shared_ptr<Piece> getPiece(size_t index) CXX11_OVERRIDE
     {
       return piece;
     }
@@ -124,7 +124,8 @@ public:
   class MockBtMessageFactory2 : public MockBtMessageFactory {
   public:
     virtual std::unique_ptr<BtCancelMessage>
-    createCancelMessage(size_t index, int32_t begin, int32_t length) override
+    createCancelMessage(size_t index, int32_t begin, int32_t length)
+      CXX11_OVERRIDE
     {
       return make_unique<BtCancelMessage>(index, begin, length);
     }

+ 3 - 2
test/DefaultBtRequestFactoryTest.cc

@@ -53,7 +53,7 @@ public:
   public:
     virtual std::unique_ptr<BtRequestMessage>
     createRequestMessage(const std::shared_ptr<Piece>& piece,
-                         size_t blockIndex) override
+                         size_t blockIndex) CXX11_OVERRIDE
     {
       return make_unique<BtRequestMessage>(piece->getIndex(), 0, 0,
                                            blockIndex);
@@ -62,7 +62,8 @@ public:
 
   class MockBtMessageDispatcher2 : public MockBtMessageDispatcher {
   public:
-    virtual bool isOutstandingRequest(size_t index, size_t blockIndex) override
+    virtual bool isOutstandingRequest(size_t index, size_t blockIndex)
+      CXX11_OVERRIDE
     {
       return index == 0 && blockIndex == 0;
     }

+ 2 - 2
test/GZipDecodingStreamFilterTest.cc

@@ -30,12 +30,12 @@ class GZipDecodingStreamFilterTest:public CppUnit::TestFixture {
   public:
     MockSegment2():positionToWrite_(0) {}
 
-    virtual void updateWrittenLength(int32_t bytes) override
+    virtual void updateWrittenLength(int32_t bytes) CXX11_OVERRIDE
     {
       positionToWrite_ += bytes;
     }
 
-    virtual int64_t getPositionToWrite() const override
+    virtual int64_t getPositionToWrite() const CXX11_OVERRIDE
     {
       return positionToWrite_;
     }

+ 1 - 1
test/extension_message_test_helper.h

@@ -9,7 +9,7 @@ class WrapExtBtMessageFactory:public MockBtMessageFactory {
 public:
   virtual std::unique_ptr<BtExtendedMessage>
   createBtExtendedMessage(std::unique_ptr<ExtensionMessage> extmsg)
-    override
+    CXX11_OVERRIDE
   {
     return make_unique<BtExtendedMessage>(std::move(extmsg));
   }