1
2# Transform Makefile.inc
3transform_makefile_inc("Makefile.inc" "${PROJECT_BINARY_DIR}/src/lib/Makefile.inc.cmake")
4include(${PROJECT_BINARY_DIR}/src/lib/Makefile.inc.cmake)
5
6# Write ares_config.h configuration file.  This is used only for the build.
7CONFIGURE_FILE (ares_config.h.cmake ${PROJECT_BINARY_DIR}/ares_config.h)
8
9# Build the dynamic/shared library
10IF (CARES_SHARED)
11	ADD_LIBRARY (${PROJECT_NAME} SHARED ${CSOURCES})
12
13	# Include resource file in windows builds for versioned DLLs
14	IF (WIN32)
15		TARGET_SOURCES (${PROJECT_NAME} PRIVATE cares.rc)
16	ENDIF()
17
18	# Convert CARES_LIB_VERSIONINFO libtool version format into VERSION and SOVERSION
19	# Convert from ":" separated into CMake list format using ";"
20	STRING (REPLACE ":" ";" CARES_LIB_VERSIONINFO ${CARES_LIB_VERSIONINFO})
21	LIST (GET CARES_LIB_VERSIONINFO 0 CARES_LIB_VERSION_CURRENT)
22	LIST (GET CARES_LIB_VERSIONINFO 1 CARES_LIB_VERSION_REVISION)
23	LIST (GET CARES_LIB_VERSIONINFO 2 CARES_LIB_VERSION_AGE)
24	MATH (EXPR CARES_LIB_VERSION_MAJOR "${CARES_LIB_VERSION_CURRENT} - ${CARES_LIB_VERSION_AGE}")
25	SET  (CARES_LIB_VERSION_MINOR "${CARES_LIB_VERSION_AGE}")
26	SET  (CARES_LIB_VERSION_RELEASE "${CARES_LIB_VERSION_REVISION}")
27
28	SET_TARGET_PROPERTIES (${PROJECT_NAME} PROPERTIES
29		EXPORT_NAME                  cares
30		OUTPUT_NAME                  cares
31		COMPILE_PDB_NAME             cares
32		COMPILE_PDB_OUTPUT_DIRECTORY ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}
33		SOVERSION                    ${CARES_LIB_VERSION_MAJOR}
34		VERSION                      "${CARES_LIB_VERSION_MAJOR}.${CARES_LIB_VERSION_MINOR}.${CARES_LIB_VERSION_RELEASE}"
35	)
36
37	TARGET_INCLUDE_DIRECTORIES (${PROJECT_NAME}
38		PUBLIC "$<BUILD_INTERFACE:${PROJECT_BINARY_DIR}>"
39		       "$<BUILD_INTERFACE:${PROJECT_SOURCE_DIR}>"
40		       "$<BUILD_INTERFACE:${CARES_TOPLEVEL_DIR}/include>"
41		       "$<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}>"
42		PRIVATE "${CMAKE_CURRENT_SOURCE_DIR}"
43	)
44
45	TARGET_COMPILE_DEFINITIONS (${PROJECT_NAME} PRIVATE HAVE_CONFIG_H=1 CARES_BUILDING_LIBRARY)
46
47	TARGET_LINK_LIBRARIES (${PROJECT_NAME} PUBLIC ${CARES_DEPENDENT_LIBS})
48
49	IF (CARES_INSTALL)
50		INSTALL (TARGETS ${PROJECT_NAME}
51			EXPORT ${PROJECT_NAME}-targets
52			COMPONENT Library
53			${TARGETS_INST_DEST}
54		)
55		INSTALL(FILES ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/cares.pdb
56			DESTINATION ${CMAKE_INSTALL_BINDIR}
57			COMPONENT Library
58			OPTIONAL
59		)
60	ENDIF ()
61	SET (STATIC_SUFFIX "_static")
62
63	# For chain building: add alias targets that look like import libs that would be returned by find_package(c-ares).
64	ADD_LIBRARY (${PROJECT_NAME}::cares_shared ALIAS ${PROJECT_NAME})
65	ADD_LIBRARY (${PROJECT_NAME}::cares        ALIAS ${PROJECT_NAME})
66ENDIF ()
67
68# Build the static library
69IF (CARES_STATIC)
70	SET (LIBNAME ${PROJECT_NAME}${STATIC_SUFFIX})
71
72	ADD_LIBRARY (${LIBNAME} STATIC ${CSOURCES})
73
74	SET_TARGET_PROPERTIES (${LIBNAME} PROPERTIES
75		EXPORT_NAME                  cares${STATIC_SUFFIX}
76		OUTPUT_NAME                  cares${STATIC_SUFFIX}
77		COMPILE_PDB_NAME             cares${STATIC_SUFFIX}
78		COMPILE_PDB_OUTPUT_DIRECTORY ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}
79	)
80
81	IF (CARES_STATIC_PIC)
82		SET_TARGET_PROPERTIES (${LIBNAME} PROPERTIES POSITION_INDEPENDENT_CODE True)
83	ENDIF ()
84
85	TARGET_INCLUDE_DIRECTORIES (${LIBNAME}
86		PUBLIC "$<BUILD_INTERFACE:${PROJECT_BINARY_DIR}>"
87		       "$<BUILD_INTERFACE:${PROJECT_SOURCE_DIR}>"
88		       "$<BUILD_INTERFACE:${CARES_TOPLEVEL_DIR}/include>"
89		       "$<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}>"
90		PRIVATE "${CMAKE_CURRENT_SOURCE_DIR}"
91	)
92
93	TARGET_COMPILE_DEFINITIONS (${LIBNAME}
94		PUBLIC  CARES_STATICLIB
95		PRIVATE HAVE_CONFIG_H=1
96	)
97
98	TARGET_LINK_LIBRARIES (${LIBNAME} PUBLIC ${CARES_DEPENDENT_LIBS})
99	IF (CARES_INSTALL)
100		INSTALL (TARGETS ${LIBNAME} EXPORT ${PROJECT_NAME}-targets COMPONENT Devel
101			${TARGETS_INST_DEST}
102		)
103		INSTALL(FILES ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/cares${STATIC_SUFFIX}.pdb
104			DESTINATION ${CMAKE_INSTALL_BINDIR}
105			COMPONENT Library
106			OPTIONAL
107		)
108	ENDIF ()
109
110	# For chain building: add alias targets that look like import libs that would be returned by find_package(c-ares).
111	ADD_LIBRARY (${PROJECT_NAME}::cares_static ALIAS ${LIBNAME})
112	IF (NOT TARGET ${PROJECT_NAME}::cares)
113		# Only use static for the generic alias if shared lib wasn't built.
114		ADD_LIBRARY (${PROJECT_NAME}::cares ALIAS ${LIBNAME})
115	ENDIF ()
116ENDIF ()
117
118
119
120
121