diff --git a/.travis.yml b/.travis.yml index d440860711d9b..e1f0ecdfa832e 100644 --- a/.travis.yml +++ b/.travis.yml @@ -13,8 +13,8 @@ compiler: - clang env: - - BUILD_TYPE=Debug COVERALLS=ON - - BUILD_TYPE=Release COVERALLS=OFF + - BUILD_TYPE=Debug TREAT_WARNINGS_AS_ERRORS=ON COVERALLS=ON + - BUILD_TYPE=Release TREAT_WARNINGS_AS_ERRORS=ON COVERALLS=OFF matrix: exclude: @@ -27,7 +27,7 @@ install: script: - mkdir build && cd build - - cmake -DCMAKE_BUILD_TYPE=$BUILD_TYPE -DDART_COVERALLS=$COVERALLS .. + - cmake -DCMAKE_BUILD_TYPE=$BUILD_TYPE -DDART_TREAT_WARNINGS_AS_ERRORS=$TREAT_WARNINGS_AS_ERRORS -DDART_COVERALLS=$COVERALLS .. - make -j4 all tutorials examples tests test - if [ $COVERALLS = ON ] && [ "$TRAVIS_OS_NAME" = "linux" ]; then make -j4 coveralls; fi diff --git a/CMakeLists.txt b/CMakeLists.txt index 29170eac44a20..c8436e8ebfe63 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -72,6 +72,7 @@ endif() option(DART_BUILD_GUI_OSG "Build osgDart library" ON) option(DART_COVERALLS "Turn on coveralls support" OFF) option(DART_COVERALLS_UPLOAD "Upload the generated coveralls json" ON) +option(DART_TREAT_WARNINGS_AS_ERRORS "Treat warnings as errors" OFF) if(DART_COVERALLS) include(Coveralls) @@ -141,6 +142,9 @@ if(MSVC) if(MSVC_VERSION VERSION_LESS 1900) message(FATAL_ERROR "${PROJECT_NAME} requires VS 2015 or greater.") endif() + if(DART_TREAT_WARNINGS_AS_ERRORS) + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /WX") + endif() set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /MP4") set(CMAKE_EXE_LINKER_FLAGS_RELEASE "/LTCG /INCREMENTAL:NO") if(NOT DART_MSVC_DEFAULT_OPTIONS) @@ -148,6 +152,9 @@ if(MSVC) set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} ${DART_RUNTIME_LIBRARY} /Zi /GL /Gy /W1 /EHsc /arch:SSE2") endif(NOT DART_MSVC_DEFAULT_OPTIONS) elseif(CMAKE_COMPILER_IS_GNUCXX) + if(DART_TREAT_WARNINGS_AS_ERRORS) + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Werror") + endif() set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall -Wextra -msse2 -fPIC") execute_process( COMMAND ${CMAKE_CXX_COMPILER} -dumpversion OUTPUT_VARIABLE GCC_VERSION) @@ -162,6 +169,11 @@ elseif(CMAKE_COMPILER_IS_GNUCXX) set(CMAKE_CXX_FLAGS_RELWITHDEBINFO "${CMAKE_CXX_FLAGS_RELEASE} ${CMAKE_CXX_FLAGS_DEBUG}") set(CMAKE_CXX_FLAGS_PROFILE "${CMAKE_CXX_FLAGS_DEBUG} -pg") elseif("${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang") + if(DART_TREAT_WARNINGS_AS_ERRORS) + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Werror -Wno-error=deprecated-declarations") + # Turn warning "deprecated-declarations" into an warning even if -Werror is + # specified until we abandon glut. + endif() set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -msse2 -fPIC") execute_process( COMMAND ${CMAKE_CXX_COMPILER} -dumpversion OUTPUT_VARIABLE CLANG_VERSION) diff --git a/dart/gui/OpenGLRenderInterface.h b/dart/gui/OpenGLRenderInterface.h index 51ec36ed0424f..14468a38fb01a 100644 --- a/dart/gui/OpenGLRenderInterface.h +++ b/dart/gui/OpenGLRenderInterface.h @@ -89,7 +89,7 @@ class OpenGLRenderInterface : public RenderInterface { void drawCube(const Eigen::Vector3d& _size) override; void drawCylinder(double _radius, double _height) override; void drawMesh(const Eigen::Vector3d& _scale, const aiScene* _mesh) override; - void drawSoftMesh(const aiMesh* mesh); + void drawSoftMesh(const aiMesh* mesh) override; void drawList(GLuint index) override; void drawLineSegments(const std::vector& _vertices, const Eigen::aligned_vector& _connections) override; diff --git a/dart/gui/osg/TrackballManipulator.h b/dart/gui/osg/TrackballManipulator.h index 2bc2ae197a58a..8eddbf8d8db85 100644 --- a/dart/gui/osg/TrackballManipulator.h +++ b/dart/gui/osg/TrackballManipulator.h @@ -44,11 +44,11 @@ namespace gui { namespace osg { #define DART_META_Object(library,name) \ - virtual ::osg::Object* cloneType() const { return new name (); } \ - virtual ::osg::Object* clone(const ::osg::CopyOp& copyop) const { return new name (*this,copyop); } \ - virtual bool isSameKindAs(const ::osg::Object* obj) const { return dynamic_cast(obj)!=NULL; } \ - virtual const char* libraryName() const { return #library; }\ - virtual const char* className() const { return #name; } + ::osg::Object* cloneType() const override { return new name (); } \ + ::osg::Object* clone(const ::osg::CopyOp& copyop) const override { return new name (*this,copyop); } \ + bool isSameKindAs(const ::osg::Object* obj) const override { return dynamic_cast(obj)!=NULL; } \ + const char* libraryName() const override { return #library; }\ + const char* className() const override { return #name; } // TODO(JS): Copied from osg/Object. Due to the namespace conflict between osg // and dart::gui::osg, we need to explicitly specify the root namespace osg as // ::osg