1set(CMAKE_CXX_STANDARD 11) 2set(CMAKE_CXX_STANDARD_REQUIRED TRUE) 3set(CMAKE_CXX_EXTENSIONS FALSE) 4 5enable_language(CXX) 6 7find_package(Threads) 8 9# create target to access and use internal cares library 10add_library(caresinternal INTERFACE) 11target_compile_definitions(caresinternal INTERFACE HAVE_CONFIG_H=1) 12 13target_include_directories(caresinternal 14 INTERFACE "${PROJECT_BINARY_DIR}" 15 "${PROJECT_SOURCE_DIR}" 16 "${PROJECT_SOURCE_DIR}/src/lib" 17 "${CARES_TOPLEVEL_DIR}/include" 18 "${CMAKE_INSTALL_INCLUDEDIR}" 19) 20 21IF (CARES_STATIC) 22 target_link_libraries(caresinternal INTERFACE ${PROJECT_NAME}::cares_static) 23ELSE () 24 target_link_libraries(caresinternal INTERFACE ${PROJECT_NAME}::cares) 25ENDIF () 26 27# Google Test and Mock 28set(GMOCK_DIR gmock-1.11.0) 29add_library(gmock STATIC 30 ${GMOCK_DIR}/gmock-gtest-all.cc 31 ${GMOCK_DIR}/gmock/gmock.h 32 ${GMOCK_DIR}/gtest/gtest.h 33) 34target_include_directories(gmock PUBLIC SYSTEM ${GMOCK_DIR}) 35target_link_libraries(gmock PRIVATE ${CMAKE_THREAD_LIBS_INIT}) 36 37# test targets 38 39transform_makefile_inc("Makefile.inc" "${CMAKE_CURRENT_BINARY_DIR}/Makefile.inc.cmake") 40include(${CMAKE_CURRENT_BINARY_DIR}/Makefile.inc.cmake) 41 42configure_file(${CARES_TOPLEVEL_DIR}/src/lib/ares_config.h.cmake config.h) 43 44add_executable(arestest ${TESTSOURCES} ${TESTHEADERS}) 45target_include_directories(arestest PRIVATE ${CMAKE_CURRENT_BINARY_DIR}) 46target_link_libraries(arestest PRIVATE caresinternal gmock) 47 48IF (CARES_BUILD_CONTAINER_TESTS) 49 target_compile_definitions(arestest PRIVATE HAVE_USER_NAMESPACE HAVE_UTS_NAMESPACE) 50ENDIF () 51 52add_executable(aresfuzz ${FUZZSOURCES}) 53target_link_libraries(aresfuzz PRIVATE caresinternal) 54 55add_executable(aresfuzzname ${FUZZNAMESOURCES}) 56target_link_libraries(aresfuzzname PRIVATE caresinternal) 57 58add_executable(dnsdump ${DUMPSOURCES}) 59target_link_libraries(dnsdump PRIVATE caresinternal) 60 61# register tests 62 63add_test(NAME arestest COMMAND $<TARGET_FILE:arestest>) 64 65file(GLOB_RECURSE FUZZINPUT_FILES RELATIVE "${CMAKE_CURRENT_SOURCE_DIR}/fuzzinput" "fuzzinput/*") 66add_test( 67 NAME aresfuzz 68 WORKING_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}/fuzzinput" 69 COMMAND $<TARGET_FILE:aresfuzz> ${FUZZINPUT_FILES} 70) 71 72file(GLOB_RECURSE FUZZNAMES_FILES RELATIVE "${CMAKE_CURRENT_SOURCE_DIR}/fuzznames" "fuzznames/*") 73add_test( 74 NAME aresfuzzname 75 WORKING_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}/fuzznames" 76 COMMAND $<TARGET_FILE:aresfuzzname> ${FUZZNAMES_FILES} 77) 78