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