1# Copyright (C) The c-ares project and its contributors 2# SPDX-License-Identifier: MIT 3 4# Transform Makefile.inc 5transform_makefile_inc("Makefile.inc" "${PROJECT_BINARY_DIR}/src/lib/Makefile.inc.cmake") 6include(${PROJECT_BINARY_DIR}/src/lib/Makefile.inc.cmake) 7 8# Write ares_config.h configuration file. This is used only for the build. 9CONFIGURE_FILE (ares_config.h.cmake ${PROJECT_BINARY_DIR}/ares_config.h) 10 11# Build the dynamic/shared library 12IF (CARES_SHARED) 13 ADD_LIBRARY (${PROJECT_NAME} SHARED ${CSOURCES}) 14 15 # Include resource file in windows builds for versioned DLLs 16 IF (WIN32) 17 TARGET_SOURCES (${PROJECT_NAME} PRIVATE cares.rc) 18 ENDIF() 19 20 # Convert CARES_LIB_VERSIONINFO libtool version format into VERSION and SOVERSION 21 # Convert from ":" separated into CMake list format using ";" 22 STRING (REPLACE ":" ";" CARES_LIB_VERSIONINFO ${CARES_LIB_VERSIONINFO}) 23 LIST (GET CARES_LIB_VERSIONINFO 0 CARES_LIB_VERSION_CURRENT) 24 LIST (GET CARES_LIB_VERSIONINFO 1 CARES_LIB_VERSION_REVISION) 25 LIST (GET CARES_LIB_VERSIONINFO 2 CARES_LIB_VERSION_AGE) 26 MATH (EXPR CARES_LIB_VERSION_MAJOR "${CARES_LIB_VERSION_CURRENT} - ${CARES_LIB_VERSION_AGE}") 27 SET (CARES_LIB_VERSION_MINOR "${CARES_LIB_VERSION_AGE}") 28 SET (CARES_LIB_VERSION_RELEASE "${CARES_LIB_VERSION_REVISION}") 29 30 SET_TARGET_PROPERTIES (${PROJECT_NAME} PROPERTIES 31 EXPORT_NAME cares 32 OUTPUT_NAME cares 33 COMPILE_PDB_NAME cares 34 SOVERSION ${CARES_LIB_VERSION_MAJOR} 35 VERSION "${CARES_LIB_VERSION_MAJOR}.${CARES_LIB_VERSION_MINOR}.${CARES_LIB_VERSION_RELEASE}" 36 C_STANDARD 90 37 ) 38 39 IF (ANDROID) 40 SET_TARGET_PROPERTIES (${PROJECT_NAME} PROPERTIES C_STANDARD 99) 41 ENDIF () 42 43 IF (CARES_SYMBOL_HIDING) 44 SET_TARGET_PROPERTIES (${PROJECT_NAME} PROPERTIES 45 C_VISIBILITY_PRESET hidden 46 VISIBILITY_INLINES_HIDDEN YES 47 ) 48 ENDIF () 49 50 TARGET_INCLUDE_DIRECTORIES (${PROJECT_NAME} 51 PUBLIC "$<BUILD_INTERFACE:${PROJECT_BINARY_DIR}>" 52 "$<BUILD_INTERFACE:${PROJECT_SOURCE_DIR}>" 53 "$<BUILD_INTERFACE:${PROJECT_SOURCE_DIR}/include>" 54 "$<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}>" 55 PRIVATE "${CMAKE_CURRENT_SOURCE_DIR}" 56 "${CMAKE_CURRENT_SOURCE_DIR}/include" 57 ) 58 59 TARGET_COMPILE_DEFINITIONS (${PROJECT_NAME} PRIVATE HAVE_CONFIG_H=1 CARES_BUILDING_LIBRARY) 60 61 TARGET_LINK_LIBRARIES (${PROJECT_NAME} 62 PUBLIC ${CARES_DEPENDENT_LIBS} 63 PRIVATE ${CMAKE_THREAD_LIBS_INIT} 64 ) 65 66 IF (CARES_INSTALL) 67 INSTALL (TARGETS ${PROJECT_NAME} 68 EXPORT ${PROJECT_NAME}-targets 69 COMPONENT Library 70 ${TARGETS_INST_DEST} 71 ) 72 IF (MSVC) 73 INSTALL(FILES $<TARGET_PDB_FILE:${PROJECT_NAME}> 74 DESTINATION ${CMAKE_INSTALL_BINDIR} 75 COMPONENT Library 76 OPTIONAL 77 ) 78 ENDIF () 79 ENDIF () 80 SET (STATIC_SUFFIX "_static") 81 82 # For chain building: add alias targets that look like import libs that would be returned by find_package(c-ares). 83 ADD_LIBRARY (${PROJECT_NAME}::cares_shared ALIAS ${PROJECT_NAME}) 84 ADD_LIBRARY (${PROJECT_NAME}::cares ALIAS ${PROJECT_NAME}) 85ENDIF () 86 87# Build the static library 88IF (CARES_STATIC) 89 SET (LIBNAME ${PROJECT_NAME}${STATIC_SUFFIX}) 90 91 ADD_LIBRARY (${LIBNAME} STATIC ${CSOURCES}) 92 93 SET_TARGET_PROPERTIES (${LIBNAME} PROPERTIES 94 EXPORT_NAME cares${STATIC_SUFFIX} 95 COMPILE_PDB_NAME cares${STATIC_SUFFIX} 96 C_STANDARD 90 97 ) 98 99 # On Windows, the output name should have a static suffix since otherwise 100 # we would have conflicting output names (libcares.lib) for the link 101 # library. 102 # However on Unix-like systems, we typically have something like 103 # libcares.so for shared libraries and libcares.a for static 104 # libraries, so these don't conflict. 105 # This behavior better emulates what happens with autotools builds 106 IF (WIN32) 107 SET_TARGET_PROPERTIES(${LIBNAME} PROPERTIES OUTPUT_NAME cares${STATIC_SUFFIX}) 108 ELSE () 109 SET_TARGET_PROPERTIES(${LIBNAME} PROPERTIES OUTPUT_NAME cares) 110 ENDIF() 111 112 IF (ANDROID) 113 SET_TARGET_PROPERTIES (${LIBNAME} PROPERTIES C_STANDARD 99) 114 ENDIF () 115 116 IF (CARES_STATIC_PIC) 117 SET_TARGET_PROPERTIES (${LIBNAME} PROPERTIES POSITION_INDEPENDENT_CODE True) 118 ENDIF () 119 120 TARGET_INCLUDE_DIRECTORIES (${LIBNAME} 121 PUBLIC "$<BUILD_INTERFACE:${PROJECT_BINARY_DIR}>" 122 "$<BUILD_INTERFACE:${PROJECT_SOURCE_DIR}>" 123 "$<BUILD_INTERFACE:${PROJECT_SOURCE_DIR}/include>" 124 "$<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}>" 125 PRIVATE "${CMAKE_CURRENT_SOURCE_DIR}" 126 "${CMAKE_CURRENT_SOURCE_DIR}/include" 127 ) 128 129 TARGET_COMPILE_DEFINITIONS (${LIBNAME} PRIVATE HAVE_CONFIG_H=1 CARES_BUILDING_LIBRARY) 130 131 # Only matters on Windows 132 IF (WIN32 OR CYGWIN) 133 TARGET_COMPILE_DEFINITIONS (${LIBNAME} PUBLIC CARES_STATICLIB) 134 ENDIF() 135 136 TARGET_LINK_LIBRARIES (${LIBNAME} PUBLIC ${CARES_DEPENDENT_LIBS}) 137 IF (CARES_INSTALL) 138 INSTALL (TARGETS ${LIBNAME} EXPORT ${PROJECT_NAME}-targets COMPONENT Devel 139 ${TARGETS_INST_DEST} 140 ) 141 ENDIF () 142 143 # For chain building: add alias targets that look like import libs that would be returned by find_package(c-ares). 144 ADD_LIBRARY (${PROJECT_NAME}::cares_static ALIAS ${LIBNAME}) 145 IF (NOT TARGET ${PROJECT_NAME}::cares) 146 # Only use static for the generic alias if shared lib wasn't built. 147 ADD_LIBRARY (${PROJECT_NAME}::cares ALIAS ${LIBNAME}) 148 ENDIF () 149ENDIF () 150 151 152 153 154