From f65e5bfbad9d38f5c5101517fc089b5419be1ecc Mon Sep 17 00:00:00 2001 From: Nils Wentzell Date: Mon, 26 Mar 2018 00:31:39 +0200 Subject: [PATCH] Further cleanining, switching to static library -Disable LINTing in test macros with comment // NOLINT -Enable static analyzers for c++ tests -Switch app4triqs_c to static library Dynamic was pickung up previously installed libapp4triqs_c.so in tests Also there is no need to be dynamic for applications -Fix previous change in HeaderFilterRegex: 'app4triqs/c++' was blocking all headers for clang-tidy checks. 'app4triqs' works well, but we cannot install any other headers into app4triqs folder structure. We thus had to create INSTALL_DIR in travis.yml --- .clang-tidy | 2 +- .travis.yml | 17 ++++++++--------- CMakeLists.txt | 9 +++------ c++/app4triqs/CMakeLists.txt | 12 ++++++------ test/c++/CMakeLists.txt | 32 ++++++++++++++++---------------- test/c++/toto.cpp | 10 +++++----- test/python/Toto.py | 2 +- 7 files changed, 40 insertions(+), 44 deletions(-) diff --git a/.clang-tidy b/.clang-tidy index 1d93efea..65767475 100644 --- a/.clang-tidy +++ b/.clang-tidy @@ -1,2 +1,2 @@ Checks: '-*,modernize-*,cppcoreguidelines-*' -HeaderFilterRegex: 'c++/app4triqs' +HeaderFilterRegex: 'app4triqs' diff --git a/.travis.yml b/.travis.yml index c1f93971..876b4cab 100644 --- a/.travis.yml +++ b/.travis.yml @@ -21,25 +21,24 @@ before_install: install: true script: + - export INSTALL_DIR=$HOME/root_install # We should install outside the repository # ===== Set up Cpp2Py - git clone https://github.com/triqs/cpp2py - mkdir cpp2py/build && cd cpp2py/build - - git checkout master - - cmake .. -DCMAKE_CXX_COMPILER=/usr/bin/${CXX} -DPYTHON_INTERPRETER=/usr/bin/python -DCMAKE_INSTALL_PREFIX=$TRAVIS_BUILD_DIR/root_install + - cmake .. -DCMAKE_CXX_COMPILER=/usr/bin/${CXX} -DPYTHON_INTERPRETER=/usr/bin/python -DCMAKE_INSTALL_PREFIX=$INSTALL_DIR - make -j8 install - - cd $TRAVIS_BUILD_DIR - - source root_install/share/cpp2pyvars.sh + - source $INSTALL_DIR/share/cpp2pyvars.sh # ===== Set up TRIQS + - cd $TRAVIS_BUILD_DIR - git clone https://github.com/TRIQS/triqs --branch unstable - mkdir triqs/build && cd triqs/build - - git checkout unstable - - cmake .. -DCMAKE_CXX_COMPILER=/usr/bin/${CXX} -DBuild_Tests=OFF -DCMAKE_INSTALL_PREFIX=$TRAVIS_BUILD_DIR/root_install -DCMAKE_BUILD_TYPE=Debug + - cmake .. -DCMAKE_CXX_COMPILER=/usr/bin/${CXX} -DBuild_Tests=OFF -DCMAKE_INSTALL_PREFIX=$INSTALL_DIR - make -j8 install - - cd $TRAVIS_BUILD_DIR - - source root_install/share/triqsvars.sh + - source $INSTALL_DIR/share/triqsvars.sh # ===== Set up CTINT and Test with Sanitizer Checks + - cd $TRAVIS_BUILD_DIR - mkdir build && cd build - - cmake .. -DCMAKE_BUILD_TYPE=Debug -DCMAKE_CXX_COMPILER=/usr/bin/${CXX} -DASAN=ON -DUBSAN=ON + - cmake .. -DCMAKE_CXX_COMPILER=/usr/bin/${CXX} -DASAN=ON -DUBSAN=ON - export UBSAN_SYMBOLIZER_PATH=/usr/lib/llvm-5.0/bin/llvm-symbolizer - export ASAN_SYMBOLIZER_PATH=/usr/lib/llvm-5.0/bin/llvm-symbolizer - export ASAN_OPTIONS=symbolize=1:detect_leaks=0 diff --git a/CMakeLists.txt b/CMakeLists.txt index 58aabb33..886280b9 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -11,11 +11,11 @@ if(NOT CMAKE_BUILD_TYPE) endif() message( STATUS "-------- BUILD-TYPE: ${CMAKE_BUILD_TYPE} --------") -# Use shared libraries -set(BUILD_SHARED_LIBS ON) +# Build static libraries +set(BUILD_SHARED_LIBS OFF) # Enable compiler warnings for the whole project -add_definitions(-Wall) +add_definitions(-Wall -fPIC) # Load Dependencies find_package(TRIQS ${APP4TRIQS_VERSION} EXACT REQUIRED) @@ -32,9 +32,6 @@ message(STATUS "-------- INSTALL_PREFIX: ${CMAKE_INSTALL_PREFIX} --------") triqs_get_git_hash_of_source_dir(APP4TRIQS_GIT_HASH) message(STATUS "app4triqs git hash: ${APP4TRIQS_GIT_HASH}") -# Set up the rpath for all compiled executables -triqs_set_rpath_for_all_targets() - # Build and install the app4triqs library add_subdirectory(c++/app4triqs) diff --git a/c++/app4triqs/CMakeLists.txt b/c++/app4triqs/CMakeLists.txt index c6e0fb2d..92a6f4da 100644 --- a/c++/app4triqs/CMakeLists.txt +++ b/c++/app4triqs/CMakeLists.txt @@ -1,10 +1,12 @@ -file(GLOB_RECURSE sources *.cpp *.hpp) +file(GLOB_RECURSE sources *.cpp) add_library(app4triqs_c ${sources}) +# Link against triqs and use headers with SYSTEM flag for better warning messages target_link_libraries(app4triqs_c PUBLIC triqs) -target_compile_options(app4triqs_c PUBLIC -std=c++17) -target_include_directories(app4triqs_c PUBLIC $) target_include_directories(app4triqs_c SYSTEM PUBLIC ${TRIQS_ROOT}/include) + +target_compile_options(app4triqs_c PUBLIC -std=c++17 -fPIC) +target_include_directories(app4triqs_c PUBLIC $) target_compile_definitions(app4triqs_c PRIVATE APP4TRIQS_GIT_HASH=${APP4TRIQS_GIT_HASH} TRIQS_GIT_HASH=${TRIQS_GIT_HASH} @@ -36,7 +38,6 @@ if(CPPCHECK_EXECUTABLE) message(STATUS "cppcheck found: ${CPPCHECK_EXECUTABLE}") add_custom_command( TARGET app4triqs_c - COMMAND echo "--- Running cppcheck ---\n" COMMAND ${CPPCHECK_EXECUTABLE} --enable=warning,style,performance,portability --std=c++14 @@ -44,8 +45,7 @@ if(CPPCHECK_EXECUTABLE) --verbose --quiet ${sources} - COMMAND echo "------------------------\n" - ) + ) else() message(STATUS "cppcheck not found in $PATH. Please consider installing cppcheck for additional checks!") endif() diff --git a/test/c++/CMakeLists.txt b/test/c++/CMakeLists.txt index 3d81aa69..f6f8aad3 100644 --- a/test/c++/CMakeLists.txt +++ b/test/c++/CMakeLists.txt @@ -9,20 +9,20 @@ foreach(t ${all_tests}) target_link_libraries(${t} app4triqs_c gtest) add_test(${t} ${CMAKE_CURRENT_BINARY_DIR}/${t}) # Run clang-tidy if found - #if(CLANG_TIDY_EXECUTABLE) - #set_target_properties(${t} PROPERTIES CXX_CLANG_TIDY "${CLANG_TIDY_EXECUTABLE}") - #endif() - ## Run cppcheck if found - #if(CPPCHECK_EXECUTABLE) - #add_custom_command( - #TARGET ${t} - #COMMAND ${CPPCHECK_EXECUTABLE} - #--enable=warning,style,performance,portability - #--std=c++14 - #--template=gcc - #--verbose - #--quiet - #${CMAKE_CURRENT_SOURCE_DIR}/${t}.cpp - #) - #endif() + if(CLANG_TIDY_EXECUTABLE) + set_target_properties(${t} PROPERTIES CXX_CLANG_TIDY "${CLANG_TIDY_EXECUTABLE}") + endif() + # Run cppcheck if found + if(CPPCHECK_EXECUTABLE) + add_custom_command( + TARGET ${t} + COMMAND ${CPPCHECK_EXECUTABLE} + --enable=warning,style,performance,portability + --std=c++14 + --template=gcc + --verbose + --quiet + ${CMAKE_CURRENT_SOURCE_DIR}/${t}.cpp + ) + endif() endforeach() diff --git a/test/c++/toto.cpp b/test/c++/toto.cpp index 85779be7..a94b4946 100644 --- a/test/c++/toto.cpp +++ b/test/c++/toto.cpp @@ -3,16 +3,16 @@ using namespace app4triqs; -TEST(Toto, Add) { +TEST(Toto, Add) { // NOLINT toto a(0); toto b(2); auto c = a + b; - EXPECT_EQ(c, b); + EXPECT_EQ(c, b); // NOLINT } -TEST(Toto, H5) { +TEST(Toto, H5) { // NOLINT toto a(0); { // Local scope for file @@ -26,7 +26,7 @@ TEST(Toto, H5) { h5_read(f, "a", a2); } - EXPECT_EQ(a, a2); + EXPECT_EQ(a, a2); // NOLINT } -MAKE_MAIN; +MAKE_MAIN; // NOLINT diff --git a/test/python/Toto.py b/test/python/Toto.py index 52c9058d..744235f9 100644 --- a/test/python/Toto.py +++ b/test/python/Toto.py @@ -20,7 +20,7 @@ class test_toto(unittest.TestCase): def test_h5(self): a=Toto(0) - with HDFArchive("f.h5",'a') as A: + with HDFArchive("f.h5",'w') as A: A["a"] = a with HDFArchive("f.h5",'r') as A: a_read = A["a"]