1# Copyright (C) The c-ares project and its contributors 2# SPDX-License-Identifier: MIT 3 4# Get rid of: warning C4530: C++ exception handler used, but unwind semantics are not enabled. Specify /EHsc 5IF (MSVC) 6 SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /EHsc") 7ENDIF () 8 9find_package(Threads) 10find_package(GTest REQUIRED) 11 12IF (CMAKE_VERSION VERSION_LESS "3.23.0") 13 Message("GoogleTest found, cmake version too old to verify GMock, look for errors...") 14ELSE () 15 IF (NOT TARGET GTest::gmock) 16 Message(FATAL_ERROR "GoogleTest found but the GMock component was not found") 17 ENDIF() 18ENDIF() 19 20# create target to access and use internal cares library 21add_library(caresinternal INTERFACE) 22target_compile_definitions(caresinternal INTERFACE HAVE_CONFIG_H=1) 23 24target_include_directories(caresinternal 25 INTERFACE "${PROJECT_BINARY_DIR}" 26 "${PROJECT_BINARY_DIR}/src/lib" 27 "${PROJECT_SOURCE_DIR}" 28 "${PROJECT_SOURCE_DIR}/src/lib" 29 "${PROJECT_SOURCE_DIR}/src/lib/include" 30 "${PROJECT_SOURCE_DIR}/include" 31) 32 33IF (CARES_STATIC) 34 target_link_libraries(caresinternal INTERFACE ${PROJECT_NAME}::cares_static) 35ELSE () 36 target_link_libraries(caresinternal INTERFACE ${PROJECT_NAME}::cares) 37ENDIF () 38 39transform_makefile_inc("Makefile.inc" "${CMAKE_CURRENT_BINARY_DIR}/Makefile.inc.cmake") 40include(${CMAKE_CURRENT_BINARY_DIR}/Makefile.inc.cmake) 41 42add_executable(arestest ${TESTSOURCES} ${TESTHEADERS}) 43target_include_directories(arestest PRIVATE ${CMAKE_CURRENT_BINARY_DIR}) 44IF (CMAKE_VERSION VERSION_LESS "3.23.0") 45 FIND_LIBRARY(LIBGMOCK NAMES gmock PATHS ${GTEST_ROOT} PATH_SUFFIXES lib) 46 IF (LIBGMOCK-NOTFOUND) 47 MESSAGE(FATAL_ERROR "Could not find Gmock") 48 ENDIF () 49 target_link_libraries(arestest PRIVATE caresinternal GTest::GTest ${LIBGMOCK}) 50ELSE () 51 target_link_libraries(arestest PRIVATE caresinternal GTest::gmock) 52ENDIF() 53target_compile_definitions(arestest PRIVATE CARES_NO_DEPRECATED) 54 55IF (CARES_BUILD_CONTAINER_TESTS) 56 target_compile_definitions(arestest PRIVATE HAVE_USER_NAMESPACE HAVE_UTS_NAMESPACE) 57ENDIF () 58# Avoid "fatal error C1041: cannot open program database" due to multiple 59# targets trying to use the same PDB. /FS does NOT resolve this issue. 60set_target_properties(arestest PROPERTIES COMPILE_PDB_NAME arestest.pdb) 61 62add_executable(aresfuzz ${FUZZSOURCES}) 63target_compile_definitions(aresfuzz PRIVATE CARES_NO_DEPRECATED) 64target_link_libraries(aresfuzz PRIVATE caresinternal) 65# Avoid "fatal error C1041: cannot open program database" due to multiple 66# targets trying to use the same PDB. /FS does NOT resolve this issue. 67set_target_properties(aresfuzz PROPERTIES COMPILE_PDB_NAME aresfuzz.pdb) 68 69add_executable(aresfuzzname ${FUZZNAMESOURCES}) 70target_compile_definitions(aresfuzzname PRIVATE CARES_NO_DEPRECATED) 71target_link_libraries(aresfuzzname PRIVATE caresinternal) 72# Avoid "fatal error C1041: cannot open program database" due to multiple 73# targets trying to use the same PDB. /FS does NOT resolve this issue. 74set_target_properties(aresfuzzname PROPERTIES COMPILE_PDB_NAME aresfuzzname.pdb) 75 76add_executable(dnsdump ${DUMPSOURCES}) 77target_compile_definitions(dnsdump PRIVATE CARES_NO_DEPRECATED) 78target_link_libraries(dnsdump PRIVATE caresinternal) 79# Avoid "fatal error C1041: cannot open program database" due to multiple 80# targets trying to use the same PDB. /FS does NOT resolve this issue. 81set_target_properties(dnsdump PROPERTIES COMPILE_PDB_NAME dnsdump.pdb) 82 83add_executable(ares_queryloop ${LOOPSOURCES}) 84target_compile_definitions(ares_queryloop PRIVATE CARES_NO_DEPRECATED) 85target_link_libraries(ares_queryloop PRIVATE caresinternal) 86# Avoid "fatal error C1041: cannot open program database" due to multiple 87# targets trying to use the same PDB. /FS does NOT resolve this issue. 88set_target_properties(ares_queryloop PROPERTIES COMPILE_PDB_NAME ares_queryloop.pdb) 89 90 91 92 93# register tests 94 95add_test(NAME arestest COMMAND $<TARGET_FILE:arestest>) 96 97file(GLOB_RECURSE FUZZINPUT_FILES RELATIVE "${CMAKE_CURRENT_SOURCE_DIR}/fuzzinput" "fuzzinput/*") 98add_test( 99 NAME aresfuzz 100 WORKING_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}/fuzzinput" 101 COMMAND $<TARGET_FILE:aresfuzz> ${FUZZINPUT_FILES} 102) 103 104file(GLOB_RECURSE FUZZNAMES_FILES RELATIVE "${CMAKE_CURRENT_SOURCE_DIR}/fuzznames" "fuzznames/*") 105add_test( 106 NAME aresfuzzname 107 WORKING_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}/fuzznames" 108 COMMAND $<TARGET_FILE:aresfuzzname> ${FUZZNAMES_FILES} 109) 110