CMakeLists.txt (4428B)
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 5 IF (MSVC) 6 SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /EHsc") 7 ENDIF () 8 9 find_package(Threads) 10 find_package(GTest REQUIRED) 11 12 IF (CMAKE_VERSION VERSION_LESS "3.23.0") 13 Message("GoogleTest found, cmake version too old to verify GMock, look for errors...") 14 ELSE () 15 IF (NOT TARGET GTest::gmock) 16 Message(FATAL_ERROR "GoogleTest found but the GMock component was not found") 17 ENDIF() 18 ENDIF() 19 20 # create target to access and use internal cares library 21 add_library(caresinternal INTERFACE) 22 target_compile_definitions(caresinternal INTERFACE HAVE_CONFIG_H=1) 23 24 target_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 33 IF (CARES_STATIC) 34 target_link_libraries(caresinternal INTERFACE ${PROJECT_NAME}::cares_static) 35 ELSE () 36 target_link_libraries(caresinternal INTERFACE ${PROJECT_NAME}::cares) 37 ENDIF () 38 39 transform_makefile_inc("Makefile.inc" "${CMAKE_CURRENT_BINARY_DIR}/Makefile.inc.cmake") 40 include(${CMAKE_CURRENT_BINARY_DIR}/Makefile.inc.cmake) 41 42 add_executable(arestest ${TESTSOURCES} ${TESTHEADERS}) 43 target_include_directories(arestest PRIVATE ${CMAKE_CURRENT_BINARY_DIR}) 44 IF (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}) 50 ELSE () 51 target_link_libraries(arestest PRIVATE caresinternal GTest::gmock) 52 ENDIF() 53 target_compile_definitions(arestest PRIVATE CARES_NO_DEPRECATED) 54 55 IF (CARES_BUILD_CONTAINER_TESTS) 56 target_compile_definitions(arestest PRIVATE HAVE_USER_NAMESPACE HAVE_UTS_NAMESPACE) 57 ENDIF () 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. 60 set_target_properties(arestest PROPERTIES COMPILE_PDB_NAME arestest.pdb) 61 62 add_executable(aresfuzz ${FUZZSOURCES}) 63 target_compile_definitions(aresfuzz PRIVATE CARES_NO_DEPRECATED) 64 target_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. 67 set_target_properties(aresfuzz PROPERTIES COMPILE_PDB_NAME aresfuzz.pdb) 68 69 add_executable(aresfuzzname ${FUZZNAMESOURCES}) 70 target_compile_definitions(aresfuzzname PRIVATE CARES_NO_DEPRECATED) 71 target_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. 74 set_target_properties(aresfuzzname PROPERTIES COMPILE_PDB_NAME aresfuzzname.pdb) 75 76 add_executable(dnsdump ${DUMPSOURCES}) 77 target_compile_definitions(dnsdump PRIVATE CARES_NO_DEPRECATED) 78 target_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. 81 set_target_properties(dnsdump PROPERTIES COMPILE_PDB_NAME dnsdump.pdb) 82 83 add_executable(ares_queryloop ${LOOPSOURCES}) 84 target_compile_definitions(ares_queryloop PRIVATE CARES_NO_DEPRECATED) 85 target_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. 88 set_target_properties(ares_queryloop PROPERTIES COMPILE_PDB_NAME ares_queryloop.pdb) 89 90 91 92 93 # register tests 94 95 add_test(NAME arestest COMMAND $<TARGET_FILE:arestest>) 96 97 file(GLOB_RECURSE FUZZINPUT_FILES RELATIVE "${CMAKE_CURRENT_SOURCE_DIR}/fuzzinput" "fuzzinput/*") 98 add_test( 99 NAME aresfuzz 100 WORKING_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}/fuzzinput" 101 COMMAND $<TARGET_FILE:aresfuzz> ${FUZZINPUT_FILES} 102 ) 103 104 file(GLOB_RECURSE FUZZNAMES_FILES RELATIVE "${CMAKE_CURRENT_SOURCE_DIR}/fuzznames" "fuzznames/*") 105 add_test( 106 NAME aresfuzzname 107 WORKING_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}/fuzznames" 108 COMMAND $<TARGET_FILE:aresfuzzname> ${FUZZNAMES_FILES} 109 )