From 17034adae5832f88aab0390d1670d268f3944385 Mon Sep 17 00:00:00 2001 From: Gulliver Date: Sun, 2 Jul 2023 23:39:55 +0200 Subject: [PATCH] on all platforms added CROW_FEATURES ssl, compression and needed libs to prerequisites general tests are now enabled on MSVC, mustachetests disabled due to some strange bug in python script (will be done later) --- .github/workflows/build_and_test.yml | 34 ++++++++++++++++------- CMakeLists.txt | 40 +++++++++++++++++++--------- tests/CMakeLists.txt | 8 ++++-- tests/template/CMakeLists.txt | 23 +++++++++++----- tests/template/test.py | 5 +++- 5 files changed, 78 insertions(+), 32 deletions(-) diff --git a/.github/workflows/build_and_test.yml b/.github/workflows/build_and_test.yml index 4cdbfccff..e4e55f251 100644 --- a/.github/workflows/build_and_test.yml +++ b/.github/workflows/build_and_test.yml @@ -22,9 +22,11 @@ jobs: strategy: fail-fast: true matrix: - os: [ ubuntu-latest, ubuntu-20.04, - macos-latest, macos-11, - windows-latest + os: [ ubuntu-latest, + windows-latest, + ubuntu-20.04, + macos-latest, + macos-11 ] # ubuntu-18.04 does not work due to compile error on asio # windows-2019 not included to spare free minutes @@ -36,11 +38,12 @@ jobs: sudo apt-get update && \ sudo apt-get install -yq \ libasio-dev \ + libssl-dev zlib1g-dev \ cmake elif [ "$RUNNER_OS" == "Windows" ]; then VCPKG_DEFAULT_TRIPLET=x64-windows vcpkg install elif [ "$RUNNER_OS" == "macOS" ]; then - brew install asio + brew install asio openssl zlib else echo "$RUNNER_OS not supported" exit 1 @@ -51,12 +54,25 @@ jobs: run: | if [ "$RUNNER_OS" == "Windows" ]; then cmake \ - -DCMAKE_TOOLCHAIN_FILE=C:/vcpkg/scripts/buildsystems/vcpkg.cmake \ - -DCROW_FEATURES="ssl;compression" \ - -DCROW_AMALGAMATE=ON \ + -DCMAKE_TOOLCHAIN_FILE=C:/vcpkg/scripts/buildsystems/vcpkg.cmake \ + -DCROW_FEATURES="ssl;compression" \ + -DCROW_AMALGAMATE=ON \ + -DCROW_BUILD_TESTS=ON \ + -B build + elif [ "$RUNNER_OS" == "macOS" ]; then + LDFLAGS="-L/usr/local/opt/openssl@1.1/lib" \ + CPPFLAGS="-I/usr/local/opt/openssl@1.1/include" \ + cmake \ + -DCROW_FEATURES="ssl;compression" \ + -DCROW_AMALGAMATE=ON \ + -DCROW_BUILD_TESTS=ON \ + -B build + else + cmake \ + -DCROW_FEATURES="ssl;compression" \ + -DCROW_AMALGAMATE=ON \ + -DCROW_BUILD_TESTS=ON \ -B build - else - cmake -B build fi shell: bash diff --git a/CMakeLists.txt b/CMakeLists.txt index 22f61cc18..ab2f5c472 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -31,6 +31,12 @@ if(NOT CMAKE_BUILD_TYPE) set(CMAKE_BUILD_TYPE "Debug") endif() endif() +if (MSVC) + add_compile_options(/bigobj) +endif () + +include(FindPython3) +find_package(Python3) ##################################### # Define Options @@ -94,20 +100,28 @@ if(CROW_BUILD_EXAMPLES) endif() # Tests -if(NOT MSVC AND CROW_BUILD_TESTS) - if(NOT "compression" IN_LIST CROW_FEATURES) - message(STATUS "Compression tests are omitted. (Configure with CROW_FEATURES containing 'compression' to enable them)") - endif() - if(NOT "ssl" IN_LIST CROW_FEATURES) - message(STATUS "SSL tests are omitted. (Configure with CROW_FEATURES containing 'ssl' to enable them)") - else() - add_test(NAME ssl_test COMMAND ${CMAKE_CURRENT_BINARY_DIR}/tests/ssl/ssltest) - endif() +if(CROW_BUILD_TESTS) - add_subdirectory(tests) - enable_testing() - add_test(NAME crow_test COMMAND ${CMAKE_CURRENT_BINARY_DIR}/tests/unittest) - add_test(NAME template_test COMMAND ${CMAKE_CURRENT_BINARY_DIR}/tests/template/test.py WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/tests/template) + add_subdirectory(tests) + enable_testing() + add_test( + NAME crow_test + COMMAND ${CMAKE_CURRENT_BINARY_DIR}/tests/unittest + ) + + if(NOT "compression" IN_LIST CROW_FEATURES) + message(STATUS "Compression tests are omitted. (Configure with CROW_FEATURES containing 'compression' to enable them)") + endif() + if(NOT "ssl" IN_LIST CROW_FEATURES) + message(STATUS "SSL tests are omitted. (Configure with CROW_FEATURES containing 'ssl' to enable them)") + else() + if(NOT MSVC) + add_test( + NAME ssl_test + COMMAND ${CMAKE_CURRENT_BINARY_DIR}/tests/ssl/ssltest + ) + endif() + endif() endif() ##################################### diff --git a/tests/CMakeLists.txt b/tests/CMakeLists.txt index 41c9b2aa8..02976f77c 100644 --- a/tests/CMakeLists.txt +++ b/tests/CMakeLists.txt @@ -3,6 +3,8 @@ project(crow_test) include(${CMAKE_SOURCE_DIR}/cmake/compiler_options.cmake) +enable_testing() + set(TEST_SRCS unittest.cpp ) @@ -23,7 +25,9 @@ endif() add_subdirectory(template) add_subdirectory(multi_file) add_subdirectory(external_definition) -if ("ssl" IN_LIST CROW_FEATURES) - add_subdirectory(ssl) +if(NOT MSVC) + if ("ssl" IN_LIST CROW_FEATURES) + add_subdirectory(ssl) + endif() endif() add_subdirectory(img) diff --git a/tests/template/CMakeLists.txt b/tests/template/CMakeLists.txt index c9073671c..97dce5dd0 100644 --- a/tests/template/CMakeLists.txt +++ b/tests/template/CMakeLists.txt @@ -18,12 +18,21 @@ if("${CMAKE_CXX_COMPILER_ID}" STREQUAL "GNU") target_link_libraries(mustachetest gcov) endif() -file(COPY DIRECTORY . DESTINATION ${CMAKE_CURRENT_BINARY_DIR} FILES_MATCHING PATTERN "*.json") +if(NOT MSVC) + # there is a bug in the python script, it does not find the path + file(COPY DIRECTORY . DESTINATION ${CMAKE_CURRENT_BINARY_DIR} FILES_MATCHING PATTERN "*.json") -add_custom_command(OUTPUT test.py - COMMAND ${CMAKE_COMMAND} -E - copy ${PROJECT_SOURCE_DIR}/test.py ${CMAKE_CURRENT_BINARY_DIR}/test.py - DEPENDS ${PROJECT_SOURCE_DIR}/test.py -) + add_custom_command(OUTPUT test.py + COMMAND ${CMAKE_COMMAND} -E + copy ${PROJECT_SOURCE_DIR}/test.py ${CMAKE_CURRENT_BINARY_DIR}/test.py + DEPENDS ${PROJECT_SOURCE_DIR}/test.py + ) -add_custom_target(template_test_copy ALL DEPENDS test.py) + add_custom_target(template_test_copy ALL DEPENDS test.py) + + add_test( + NAME template_test + COMMAND python3 ${CMAKE_CURRENT_BINARY_DIR}/test.py + WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR} + ) +endif() diff --git a/tests/template/test.py b/tests/template/test.py index 821e68429..4e2a2c6d9 100755 --- a/tests/template/test.py +++ b/tests/template/test.py @@ -18,7 +18,10 @@ for testfile in glob.glob("*.json"): else: open('partials', 'w').write("{}") - ret = subprocess.check_output("./mustachetest").decode('utf8') + if os.name == 'nt': + ret = subprocess.check_output("mustachetest.exe").decode('utf8') + else: + ret = subprocess.check_output('./mustachetest').decode('utf8') print(testfile, test["name"]) if ret != test["expected"]: