• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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