diff --git a/.circleci/config.yml b/.circleci/config.yml index 6b2a048ab..c47c793db 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -1,11 +1,10 @@ version: 2 aliases: - - &test-base + - &test-base-legacy working_directory: /tmp/drafter environment: CXXFLAGS: '-Werror -Wno-error=unused-function' - steps: - checkout - run: git submodule update --init --recursive @@ -18,43 +17,74 @@ aliases: name: Test command: make test -j4 - - &test-clang-base - <<: *test-base - environment: - CXXFLAGS: '-Werror -Wno-error=unused-function -Wno-error=missing-braces' + - &test-base + working_directory: /tmp/drafter - &tag-filter filters: tags: only: /^v.*/ + - &clang-debug + run: + name: Build drafter/debug with clang + command: | + ctest -VV -j4 -S cmake/unix.cmake -DCTEST_BUILD_TYPE=Debug -DCTEST_BUILD_NAME="clang $(c++ -dumpversion)" + + - &clang-release + run: + name: Build drafter/release with clang + command: | + ctest -VV -j4 -S cmake/unix.cmake -DCTEST_BUILD_TYPE=Release -DCTEST_BUILD_NAME="clang $(c++ -dumpversion)" + + - &gcc-debug + run: + name: Build drafter/debug with gcc + command: | + ctest -VV -j4 -S cmake/unix.cmake -DCTEST_BUILD_TYPE=Debug -DCTEST_BUILD_NAME="gcc $(c++ -dumpversion)" + + - &gcc-release + run: + name: Build drafter/release with gcc + command: | + ctest -VV -j4 -S cmake/unix.cmake -DCTEST_BUILD_TYPE=Release -DCTEST_BUILD_NAME="gcc $(c++ -dumpversion)" + + - &update-submodules + run: + name: Update submodules + command: 'git submodule update --init --recursive' + workflows: version: 2 drafter: jobs: - lint - - test-gcc5.4: *tag-filter - - test-gcc6: *tag-filter - - test-gcc7: *tag-filter - #- test-gcc8: *tag-filter - - test-clang4: *tag-filter - - test-clang5: *tag-filter - - test-clang6: *tag-filter - - test-xcode9: *tag-filter - - test-integration: *tag-filter + - test-gcc-49-debug: *tag-filter + - test-gcc-49-release: *tag-filter + - test-gcc-latest-debug: *tag-filter + - test-gcc-latest-release: *tag-filter + - test-clang-4-debug: *tag-filter + - test-clang-4-release: *tag-filter + - test-clang-latest-debug: *tag-filter + - test-clang-latest-release: *tag-filter + - test-osx-release: *tag-filter + - test-osx-debug: *tag-filter + - test-gyp: *tag-filter - test-valgrind: *tag-filter - release: requires: - - test-gcc5.4 - - test-gcc6 - - test-gcc7 - #- test-gcc8 - - test-clang4 - - test-clang5 - - test-clang6 - - test-xcode9 - - test-integration + - test-gcc-49-debug + - test-gcc-49-release + - test-gcc-latest-debug + - test-gcc-latest-release + - test-clang-4-debug + - test-clang-4-release + - test-clang-latest-debug + - test-clang-latest-release + - test-osx-release + - test-osx-debug + - test-gyp - test-valgrind filters: tags: @@ -72,65 +102,107 @@ jobs: - run: git submodule update --init --recursive - run: ./tools/clang-format-check.sh - test-gcc5.4: - <<: *test-base + test-gyp: + <<: *test-base-legacy docker: - image: gcc:5.4 - test-gcc6: + test-gcc-49-debug: <<: *test-base + steps: + - checkout + - <<: *update-submodules + - <<: *gcc-debug docker: - - image: gcc:6 + - image: apiaryio/drafter-ci:gcc-4.9 - test-gcc7: + test-gcc-49-release: <<: *test-base + steps: + - checkout + - <<: *update-submodules + - <<: *gcc-release docker: - - image: gcc:7 + - image: apiaryio/drafter-ci:gcc-4.9 - test-gcc8: + test-gcc-latest-debug: <<: *test-base + steps: + - checkout + - <<: *update-submodules + - <<: *gcc-debug docker: - - image: gcc:8 + - image: apiaryio/drafter-ci:gcc-latest - test-clang4: - <<: *test-clang-base + test-gcc-latest-release: + <<: *test-base + steps: + - checkout + - <<: *update-submodules + - <<: *gcc-release docker: - - image: apiaryio/clang:4 + - image: apiaryio/drafter-ci:gcc-latest - test-clang5: - <<: *test-clang-base + test-clang-4-debug: + <<: *test-base + steps: + - checkout + - <<: *update-submodules + - <<: *clang-debug docker: - - image: apiaryio/clang:5 + - image: apiaryio/drafter-ci:clang-4.0 - test-clang6: - <<: *test-clang-base + test-clang-4-release: + <<: *test-base + steps: + - checkout + - <<: *update-submodules + - <<: *clang-release docker: - - image: apiaryio/clang:6 - - test-xcode9: - <<: *test-clang-base - macos: - xcode: "9.4.0" + - image: apiaryio/drafter-ci:clang-4.0 - test-integration: + test-clang-latest-debug: + <<: *test-base + steps: + - checkout + - <<: *update-submodules + - <<: *clang-debug docker: - - image: circleci/ruby:2.5.1 - working_directory: /tmp/drafter + - image: apiaryio/drafter-ci:clang-latest + test-clang-latest-release: + <<: *test-base steps: - checkout - - run: git submodule update --init --recursive + - <<: *update-submodules + - <<: *clang-release + docker: + - image: apiaryio/drafter-ci:clang-latest - - run: - name: Build - command: ./configure && make -j4 + test-osx-debug: + <<: *test-base + steps: + - checkout + - <<: *update-submodules + - run: sudo bundle install + - run: brew install cmake + - <<: *clang-debug + macos: + xcode: "9.4.0" - - run: - name: Integration Test - command: bundle install && bundle exec cucumber + test-osx-release: + <<: *test-base + steps: + - checkout + - <<: *update-submodules + - run: sudo bundle install + - run: brew install cmake + - <<: *clang-release + macos: + xcode: "9.4.0" test-valgrind: - <<: *test-base + <<: *test-base-legacy docker: - image: gcc:7 @@ -163,5 +235,6 @@ jobs: steps: - checkout - - run: git submodule update --init --recursive + - <<: *update-submodules - run: ./tools/release.sh + diff --git a/CMakeLists.txt b/CMakeLists.txt index 9927091f3..511236ee6 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,4 +1,4 @@ -cmake_minimum_required(VERSION 3.4 FATAL_ERROR) +cmake_minimum_required(VERSION 3.6 FATAL_ERROR) message(STATUS "Testing dependencies ${BUILD_TESTING_DEPENDENCIES}.") @@ -28,12 +28,12 @@ add_subdirectory(ext/boost_1_66_0 EXCLUDE_FROM_ALL) add_subdirectory(ext/variant EXCLUDE_FROM_ALL) message(STATUS "Setting up tests for production...") -set(BUILD_TESTING ON) add_subdirectory(test/vendor/Catch EXCLUDE_FROM_ALL) add_subdirectory(test/vendor/dtl EXCLUDE_FROM_ALL) + +enable_testing() include(CTest) include(test/vendor/Catch/contrib/Catch.cmake) -enable_testing() # targets developed in this super project add_subdirectory(ext/snowcrash/ext/markdown-parser EXCLUDE_FROM_ALL) diff --git a/CTestConfig.cmake b/CTestConfig.cmake new file mode 100644 index 000000000..03a75d4d3 --- /dev/null +++ b/CTestConfig.cmake @@ -0,0 +1,12 @@ +## This file should be placed in the root directory of your project. +## Then modify the CMakeLists.txt file in the root directory of your +## project to incorporate the testing dashboard. +## + +set(CTEST_PROJECT_NAME "Drafter") +set(CTEST_NIGHTLY_START_TIME "01:00:00 UTC") + +set(CTEST_DROP_METHOD "http") +set(CTEST_DROP_SITE "my.cdash.org") +set(CTEST_DROP_LOCATION "/submit.php?project=Drafter") +set(CTEST_DROP_SITE_CDASH TRUE) diff --git a/cmake/unix.cmake b/cmake/unix.cmake new file mode 100644 index 000000000..b60a4cb9d --- /dev/null +++ b/cmake/unix.cmake @@ -0,0 +1,43 @@ +cmake_minimum_required(VERSION 3.6) + +if("${CTEST_BUILD_NAME}" STREQUAL "") + set(CTEST_BUILD_NAME "${CTEST_BUILD_TYPE}") +else() + set(CTEST_BUILD_NAME "${CTEST_BUILD_TYPE}/${CTEST_BUILD_NAME}") +endif() + +set(CTEST_SOURCE_DIRECTORY ".") +set(CTEST_BINARY_DIRECTORY "build") + +set(CTEST_CMAKE_GENERATOR "Unix Makefiles") + +set(CTEST_USE_LAUNCHERS 1) +set(CTEST_MODEL "Continuous") + +ctest_read_custom_files(${CTEST_BINARY_DIRECTORY}) + +ctest_start(${CTEST_MODEL} TRACK ${CTEST_MODEL}) +ctest_configure(BUILD ${CTEST_BINARY_DIRECTORY} OPTIONS -DINTEGRATION_TESTS=ON RETURN_VALUE ret_con) +ctest_build(BUILD ${CTEST_BINARY_DIRECTORY} RETURN_VALUE ret_bld) + +if(ret_bld EQUAL 0) + ctest_test(BUILD ${CTEST_BINARY_DIRECTORY} RETURN_VALUE ret_tst) +endif() + +ctest_submit(RETURN_VALUE ret_sub) + +if(NOT ret_con EQUAL 0) + message(FATAL_ERROR "CI failing on config") +endif() + +if(NOT ret_bld EQUAL 0) + message(FATAL_ERROR "CI failing on build") +endif() + +if(NOT ret_tst EQUAL 0) + message(FATAL_ERROR "CI failing on tests") +endif() + +if(NOT ret_sub EQUAL 0) + message(WARNING "Unable to submit results to CDash") +endif() diff --git a/ext/snowcrash/CMakeLists.txt b/ext/snowcrash/CMakeLists.txt index 3013c10f5..3598f1b9d 100644 --- a/ext/snowcrash/CMakeLists.txt +++ b/ext/snowcrash/CMakeLists.txt @@ -25,19 +25,10 @@ else() endif() add_library(snowcrash SHARED ${snowcrash_SOURCES}) -add_library(snowcrash-static STATIC ${snowcrash_SOURCES}) -add_library(snowcrash-pic STATIC ${snowcrash_SOURCES}) -set_property(TARGET snowcrash-pic PROPERTY POSITION_INDEPENDENT_CODE 1) - -if(UNIX) - set_target_properties(snowcrash-static PROPERTIES OUTPUT_NAME snowcrash) -endif() find_package(markdown-parser 1.0 REQUIRED) -target_link_libraries(snowcrash PUBLIC markdown-parser::markdown-parser-pic) -target_link_libraries(snowcrash-static PUBLIC markdown-parser::markdown-parser-static) -target_link_libraries(snowcrash-pic PUBLIC markdown-parser::markdown-parser-pic) +target_link_libraries(snowcrash PUBLIC markdown-parser::markdown-parser) target_include_directories(snowcrash PUBLIC $ @@ -45,19 +36,7 @@ target_include_directories(snowcrash PUBLIC $ ) -target_include_directories(snowcrash-static PUBLIC - $ - $ - $ - ) - -target_include_directories(snowcrash-pic PUBLIC - $ - $ - $ - ) - -install(TARGETS snowcrash snowcrash-static snowcrash-pic EXPORT snowcrash-targets +install(TARGETS snowcrash EXPORT snowcrash-targets LIBRARY DESTINATION lib ARCHIVE DESTINATION lib RUNTIME DESTINATION bin @@ -84,9 +63,6 @@ install( ) add_library(snowcrash::snowcrash ALIAS snowcrash) -add_library(snowcrash::snowcrash-static ALIAS snowcrash-static) -add_library(snowcrash::snowcrash-pic ALIAS snowcrash-pic) - if(BUILD_TESTING) include(snowcrash-tests.cmake) diff --git a/ext/snowcrash/ext/markdown-parser/CMakeLists.txt b/ext/snowcrash/ext/markdown-parser/CMakeLists.txt index 366ad1c43..9e43611ee 100644 --- a/ext/snowcrash/ext/markdown-parser/CMakeLists.txt +++ b/ext/snowcrash/ext/markdown-parser/CMakeLists.txt @@ -47,26 +47,16 @@ set(MARKDOWN_PARSER_COMPILE_FEATURES cxx_uniform_initialization cxx_unrestricted_unions cxx_user_literals - cxx_variable_templates cxx_variadic_macros cxx_variadic_templates cxx_template_template_parameters ) add_library(markdown-parser SHARED ${MARKDOWN_PARSER_SOURCES}) -add_library(markdown-parser-static STATIC ${MARKDOWN_PARSER_SOURCES}) -add_library(markdown-parser-pic STATIC ${MARKDOWN_PARSER_SOURCES}) -set_property(TARGET markdown-parser-pic PROPERTY POSITION_INDEPENDENT_CODE 1) - -if(UNIX) - set_target_properties(markdown-parser-static PROPERTIES OUTPUT_NAME markdown-parser) -endif() find_package(Sundown 1.0 REQUIRED) target_link_libraries(markdown-parser PUBLIC Apiary::sundown-pic) -target_link_libraries(markdown-parser-static PUBLIC Apiary::sundown-static) -target_link_libraries(markdown-parser-pic PUBLIC Apiary::sundown-pic) target_include_directories(markdown-parser PUBLIC $ @@ -74,23 +64,9 @@ target_include_directories(markdown-parser PUBLIC $ ) -target_include_directories(markdown-parser-static PUBLIC - $ - $ - $ - ) - -target_include_directories(markdown-parser-pic PUBLIC - $ - $ - $ - ) - target_compile_features(markdown-parser PUBLIC ${MARKDOWN_PARSER_COMPILE_FEATURES}) -target_compile_features(markdown-parser-static PUBLIC ${MARKDOWN_PARSER_COMPILE_FEATURES}) -target_compile_features(markdown-parser-pic PUBLIC ${MARKDOWN_PARSER_COMPILE_FEATURES}) -install(TARGETS markdown-parser markdown-parser-static markdown-parser-pic EXPORT markdown-parser-targets +install(TARGETS markdown-parser EXPORT markdown-parser-targets LIBRARY DESTINATION lib ARCHIVE DESTINATION lib RUNTIME DESTINATION bin @@ -118,8 +94,6 @@ install( ) add_library(markdown-parser::markdown-parser ALIAS markdown-parser) -add_library(markdown-parser::markdown-parser-static ALIAS markdown-parser-static) -add_library(markdown-parser::markdown-parser-pic ALIAS markdown-parser-pic) if(BUILD_TESTING) include(markdown-parser-tests.cmake) diff --git a/ext/snowcrash/ext/markdown-parser/markdown-parser-tests.cmake b/ext/snowcrash/ext/markdown-parser/markdown-parser-tests.cmake index d2874a1d3..430966222 100644 --- a/ext/snowcrash/ext/markdown-parser/markdown-parser-tests.cmake +++ b/ext/snowcrash/ext/markdown-parser/markdown-parser-tests.cmake @@ -13,6 +13,6 @@ add_test(MardownParserTest markdown-parser-test) target_link_libraries(markdown-parser-test PRIVATE Catch2::Catch2 - markdown-parser::markdown-parser-static + markdown-parser::markdown-parser ) diff --git a/ext/snowcrash/snowcrash-tests.cmake b/ext/snowcrash/snowcrash-tests.cmake index 4a89b55e1..c57b037b2 100644 --- a/ext/snowcrash/snowcrash-tests.cmake +++ b/ext/snowcrash/snowcrash-tests.cmake @@ -47,8 +47,8 @@ add_test(SnowcrashTest snowcrash-test) target_link_libraries(snowcrash-test PRIVATE Catch2::Catch2 - snowcrash::snowcrash-static - markdown-parser::markdown-parser-static + snowcrash::snowcrash + markdown-parser::markdown-parser ) target_link_libraries(snowcrash-test-performance diff --git a/features/support/env.rb b/features/support/env.rb index 00478cc99..a3525260b 100644 --- a/features/support/env.rb +++ b/features/support/env.rb @@ -1,7 +1,5 @@ require 'aruba/cucumber' Before do - @dirs << "../../features/fixtures" - - ENV['PATH'] = "#{ENV['PWD']}/src#{File::PATH_SEPARATOR}#{ENV['PATH']}" + @dirs << "features/fixtures" end diff --git a/integration.cmake b/integration.cmake index 2e2941a01..6c72a3e24 100644 --- a/integration.cmake +++ b/integration.cmake @@ -1,7 +1,6 @@ cmake_minimum_required(VERSION 3.6 FATAL_ERROR) -find_program(Bundler bundle) +find_program(Cucumber cucumber) +add_test(NAME DrafterIntegration COMMAND ${Cucumber} .) +set_property(TEST DrafterIntegration PROPERTY ENVIRONMENT "PATH=$ENV{PATH};${Drafter_BUILD_DIR}") -file(COPY ${CMAKE_CURRENT_LIST_DIR}/features DESTINATION ${CMAKE_CURRENT_BINARY_DIR}) -add_custom_target(BundleInstall ALL COMMAND ${Bundler} install --path vendor/bundle) -add_test(NAME DrafterIntegration COMMAND ${Bundler} exec cucumber) diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 503d17d04..b15c88751 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -75,9 +75,6 @@ set(DRAFTER_COMPILE_FEATURES # libdrafter add_library(drafter SHARED ${DRAFTER_SOURCES}) -add_library(drafter-static STATIC ${DRAFTER_SOURCES}) -add_library(drafter-pic STATIC ${DRAFTER_SOURCES}) -set_property(TARGET drafter-pic PROPERTY POSITION_INDEPENDENT_CODE 1) set_target_properties(drafter PROPERTIES PUBLIC_HEADER "drafter.h") @@ -89,21 +86,7 @@ find_package(MPark.Variant 1.4 REQUIRED) target_link_libraries(drafter PRIVATE - snowcrash::snowcrash-pic - Boost::container - mpark_variant - ) - -target_link_libraries(drafter-pic - PRIVATE - snowcrash::snowcrash-pic - Boost::container - mpark_variant - ) - -target_link_libraries(drafter-static - PRIVATE - snowcrash::snowcrash-static + snowcrash::snowcrash Boost::container mpark_variant ) @@ -114,28 +97,11 @@ target_include_directories(drafter PUBLIC $ ) -target_include_directories(drafter-static PUBLIC - $ - $ - $ - ) - -target_include_directories(drafter-pic PUBLIC - $ - $ - $ - ) - - target_compile_definitions(drafter PRIVATE BUILDING_DRAFTER=1) -target_compile_definitions(drafter-static PRIVATE BUILDING_DRAFTER=1) -target_compile_definitions(drafter-pic PRIVATE BUILDING_DRAFTER=1) target_compile_definitions(drafter PUBLIC DRAFTER_BUILD_SHARED=1) target_compile_features(drafter PUBLIC ${DRAFTER_COMPILE_FEATURES}) -target_compile_features(drafter-static PUBLIC ${DRAFTER_COMPILE_FEATURES}) -target_compile_features(drafter-pic PUBLIC ${DRAFTER_COMPILE_FEATURES}) # drafter-cli add_executable(drafter-cli @@ -146,18 +112,15 @@ add_executable(drafter-cli target_link_libraries(drafter-cli PRIVATE - snowcrash::snowcrash-static - drafter::drafter-static + snowcrash::snowcrash + drafter::drafter cmdline::cmdline mpark_variant ) set_target_properties(drafter-cli PROPERTIES OUTPUT_NAME drafter) -if(UNIX) - set_target_properties(drafter-static PROPERTIES OUTPUT_NAME drafter) -endif() -install(TARGETS drafter drafter-static drafter-pic drafter-cli EXPORT drafter-targets +install(TARGETS drafter drafter-cli EXPORT drafter-targets LIBRARY DESTINATION lib ARCHIVE DESTINATION lib RUNTIME DESTINATION bin @@ -186,6 +149,3 @@ install( ) add_library(drafter::drafter ALIAS drafter) -add_library(drafter::drafter-static ALIAS drafter-static) -add_library(drafter::drafter-pic ALIAS drafter-pic) - diff --git a/test/CMakeLists.txt b/test/CMakeLists.txt index 202556855..795f1b2e2 100644 --- a/test/CMakeLists.txt +++ b/test/CMakeLists.txt @@ -53,8 +53,8 @@ target_link_libraries(drafter-test PRIVATE Catch2::Catch2 dtl::dtl - drafter::drafter-static - snowcrash::snowcrash-static + drafter::drafter + snowcrash::snowcrash Boost::container mpark_variant )