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