if (protobuf_JSONCPP_PROVIDER STREQUAL "module") if (NOT EXISTS "${protobuf_SOURCE_DIR}/third_party/jsoncpp/CMakeLists.txt") message(FATAL_ERROR "Cannot find third_party/jsoncpp directory that's needed to " "build conformance tests. If you use git, make sure you have cloned " "submodules:\n" " git submodule update --init --recursive\n" "If instead you want to skip them, run cmake with:\n" " cmake -Dprotobuf_BUILD_CONFORMANCE=OFF\n") endif() elseif(protobuf_JSONCPP_PROVIDER STREQUAL "package") find_package(jsoncpp REQUIRED) endif() set(protoc_cpp_args) if (protobuf_BUILD_SHARED_LIBS) set(protoc_cpp_args "dllexport_decl=PROTOBUF_TEST_EXPORTS:") endif () file(MAKE_DIRECTORY ${protobuf_BINARY_DIR}/conformance) add_custom_command( OUTPUT ${protobuf_BINARY_DIR}/conformance/conformance.pb.h ${protobuf_BINARY_DIR}/conformance/conformance.pb.cc DEPENDS ${protobuf_PROTOC_EXE} ${protobuf_SOURCE_DIR}/conformance/conformance.proto COMMAND ${protobuf_PROTOC_EXE} ${protobuf_SOURCE_DIR}/conformance/conformance.proto --proto_path=${protobuf_SOURCE_DIR}/conformance --cpp_out=${protoc_cpp_args}${protobuf_BINARY_DIR}/conformance ) file(MAKE_DIRECTORY ${protobuf_BINARY_DIR}/src) add_custom_command( OUTPUT ${protobuf_BINARY_DIR}/src/google/protobuf/test_messages_proto3.pb.h ${protobuf_BINARY_DIR}/src/google/protobuf/test_messages_proto3.pb.cc ${protobuf_BINARY_DIR}/src/google/protobuf/test_messages_proto2.pb.h ${protobuf_BINARY_DIR}/src/google/protobuf/test_messages_proto2.pb.cc ${protobuf_BINARY_DIR}/src/google/protobuf/editions/golden/test_messages_proto3_editions.pb.h ${protobuf_BINARY_DIR}/src/google/protobuf/editions/golden/test_messages_proto3_editions.pb.cc ${protobuf_BINARY_DIR}/src/google/protobuf/editions/golden/test_messages_proto2_editions.pb.h ${protobuf_BINARY_DIR}/src/google/protobuf/editions/golden/test_messages_proto2_editions.pb.cc DEPENDS ${protobuf_PROTOC_EXE} ${protobuf_SOURCE_DIR}/src/google/protobuf/test_messages_proto3.proto ${protobuf_SOURCE_DIR}/src/google/protobuf/test_messages_proto2.proto ${protobuf_SOURCE_DIR}/src/google/protobuf/editions/golden/test_messages_proto3_editions.proto ${protobuf_SOURCE_DIR}/src/google/protobuf/editions/golden/test_messages_proto2_editions.proto COMMAND ${protobuf_PROTOC_EXE} ${protobuf_SOURCE_DIR}/src/google/protobuf/test_messages_proto3.proto ${protobuf_SOURCE_DIR}/src/google/protobuf/test_messages_proto2.proto ${protobuf_SOURCE_DIR}/src/google/protobuf/editions/golden/test_messages_proto3_editions.proto ${protobuf_SOURCE_DIR}/src/google/protobuf/editions/golden/test_messages_proto2_editions.proto --proto_path=${protobuf_SOURCE_DIR}/src --cpp_out=${protoc_cpp_args}${protobuf_BINARY_DIR}/src ) add_library(libconformance_common ${protobuf_SHARED_OR_STATIC} ${protobuf_BINARY_DIR}/conformance/conformance.pb.h ${protobuf_BINARY_DIR}/conformance/conformance.pb.cc ${protobuf_BINARY_DIR}/src/google/protobuf/test_messages_proto2.pb.h ${protobuf_BINARY_DIR}/src/google/protobuf/test_messages_proto2.pb.cc ${protobuf_BINARY_DIR}/src/google/protobuf/test_messages_proto3.pb.h ${protobuf_BINARY_DIR}/src/google/protobuf/test_messages_proto3.pb.cc ${protobuf_BINARY_DIR}/src/google/protobuf/editions/golden/test_messages_proto3_editions.pb.h ${protobuf_BINARY_DIR}/src/google/protobuf/editions/golden/test_messages_proto3_editions.pb.cc ${protobuf_BINARY_DIR}/src/google/protobuf/editions/golden/test_messages_proto2_editions.pb.h ${protobuf_BINARY_DIR}/src/google/protobuf/editions/golden/test_messages_proto2_editions.pb.cc ) target_link_libraries(libconformance_common ${protobuf_LIB_PROTOBUF} ${protobuf_ABSL_USED_TARGETS} ) if(protobuf_BUILD_SHARED_LIBS) target_compile_definitions(libconformance_common PUBLIC PROTOBUF_USE_DLLS PRIVATE LIBPROTOBUF_TEST_EXPORTS) endif() add_executable(conformance_test_runner ${protobuf_SOURCE_DIR}/conformance/binary_json_conformance_suite.cc ${protobuf_SOURCE_DIR}/conformance/binary_json_conformance_suite.h ${protobuf_SOURCE_DIR}/conformance/conformance_test.cc ${protobuf_SOURCE_DIR}/conformance/conformance_test_runner.cc ${protobuf_SOURCE_DIR}/conformance/conformance_test_main.cc ${protobuf_SOURCE_DIR}/conformance/text_format_conformance_suite.cc ${protobuf_SOURCE_DIR}/conformance/text_format_conformance_suite.h ) add_executable(conformance_cpp ${protobuf_SOURCE_DIR}/conformance/conformance_cpp.cc ) target_include_directories( conformance_test_runner PUBLIC ${protobuf_SOURCE_DIR} ${protobuf_SOURCE_DIR}/conformance) target_include_directories( conformance_cpp PUBLIC ${protobuf_SOURCE_DIR}) target_include_directories(conformance_test_runner PRIVATE ${ABSL_ROOT_DIR}) target_include_directories(conformance_cpp PRIVATE ${ABSL_ROOT_DIR}) target_link_libraries(conformance_test_runner libconformance_common ${protobuf_LIB_PROTOBUF} ${protobuf_ABSL_USED_TARGETS} ) target_link_libraries(conformance_cpp libconformance_common ${protobuf_LIB_PROTOBUF} ${protobuf_ABSL_USED_TARGETS} ) add_test(NAME conformance_cpp_test COMMAND ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/conformance_test_runner --failure_list ${protobuf_SOURCE_DIR}/conformance/failure_list_cpp.txt --text_format_failure_list ${protobuf_SOURCE_DIR}/conformance/text_format_failure_list_cpp.txt --output_dir ${protobuf_TEST_XML_OUTDIR} --maximum_edition 2023 ${CMAKE_CURRENT_BINARY_DIR}/conformance_cpp DEPENDS conformance_test_runner conformance_cpp) set(JSONCPP_WITH_TESTS OFF CACHE BOOL "Disable tests") if(protobuf_JSONCPP_PROVIDER STREQUAL "module") add_subdirectory(${CMAKE_CURRENT_SOURCE_DIR}/third_party/jsoncpp third_party/jsoncpp) target_include_directories(conformance_test_runner PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/third_party/jsoncpp/include) if(BUILD_SHARED_LIBS) target_link_libraries(conformance_test_runner jsoncpp_lib) else() target_link_libraries(conformance_test_runner jsoncpp_static) endif() else() target_link_libraries(conformance_test_runner jsoncpp) endif()