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 COMPILE_PDB_OUTPUT_DIRECTORY ${CMAKE_RUNTIME_OUTPUT_DIRECTORY} 35 SOVERSION ${CARES_LIB_VERSION_MAJOR} 36 VERSION "${CARES_LIB_VERSION_MAJOR}.${CARES_LIB_VERSION_MINOR}.${CARES_LIB_VERSION_RELEASE}" 37 C_STANDARD 90 38 ) 39 40 IF (CARES_SYMBOL_HIDING) 41 SET_TARGET_PROPERTIES (${PROJECT_NAME} PROPERTIES 42 C_VISIBILITY_PRESET hidden 43 VISIBILITY_INLINES_HIDDEN YES 44 ) 45 ENDIF () 46 47 TARGET_INCLUDE_DIRECTORIES (${PROJECT_NAME} 48 PUBLIC "$<BUILD_INTERFACE:${PROJECT_BINARY_DIR}>" 49 "$<BUILD_INTERFACE:${PROJECT_SOURCE_DIR}>" 50 "$<BUILD_INTERFACE:${PROJECT_SOURCE_DIR}/include>" 51 "$<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}>" 52 PRIVATE "${CMAKE_CURRENT_SOURCE_DIR}" 53 ) 54 55 TARGET_COMPILE_DEFINITIONS (${PROJECT_NAME} PRIVATE HAVE_CONFIG_H=1 CARES_BUILDING_LIBRARY) 56 57 TARGET_LINK_LIBRARIES (${PROJECT_NAME} 58 PUBLIC ${CARES_DEPENDENT_LIBS} 59 PRIVATE ${CMAKE_THREAD_LIBS_INIT} 60 ) 61 62 IF (CARES_INSTALL) 63 INSTALL (TARGETS ${PROJECT_NAME} 64 EXPORT ${PROJECT_NAME}-targets 65 COMPONENT Library 66 ${TARGETS_INST_DEST} 67 ) 68 INSTALL(FILES ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/cares.pdb 69 DESTINATION ${CMAKE_INSTALL_BINDIR} 70 COMPONENT Library 71 OPTIONAL 72 ) 73 ENDIF () 74 SET (STATIC_SUFFIX "_static") 75 76 # For chain building: add alias targets that look like import libs that would be returned by find_package(c-ares). 77 ADD_LIBRARY (${PROJECT_NAME}::cares_shared ALIAS ${PROJECT_NAME}) 78 ADD_LIBRARY (${PROJECT_NAME}::cares ALIAS ${PROJECT_NAME}) 79ENDIF () 80 81# Build the static library 82IF (CARES_STATIC) 83 SET (LIBNAME ${PROJECT_NAME}${STATIC_SUFFIX}) 84 85 ADD_LIBRARY (${LIBNAME} STATIC ${CSOURCES}) 86 87 SET_TARGET_PROPERTIES (${LIBNAME} PROPERTIES 88 EXPORT_NAME cares${STATIC_SUFFIX} 89 OUTPUT_NAME cares${STATIC_SUFFIX} 90 COMPILE_PDB_NAME cares${STATIC_SUFFIX} 91 COMPILE_PDB_OUTPUT_DIRECTORY ${CMAKE_RUNTIME_OUTPUT_DIRECTORY} 92 C_STANDARD 90 93 ) 94 95 IF (CARES_STATIC_PIC) 96 SET_TARGET_PROPERTIES (${LIBNAME} PROPERTIES POSITION_INDEPENDENT_CODE True) 97 ENDIF () 98 99 TARGET_INCLUDE_DIRECTORIES (${LIBNAME} 100 PUBLIC "$<BUILD_INTERFACE:${PROJECT_BINARY_DIR}>" 101 "$<BUILD_INTERFACE:${PROJECT_SOURCE_DIR}>" 102 "$<BUILD_INTERFACE:${PROJECT_SOURCE_DIR}/include>" 103 "$<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}>" 104 PRIVATE "${CMAKE_CURRENT_SOURCE_DIR}" 105 ) 106 107 TARGET_COMPILE_DEFINITIONS (${LIBNAME} PRIVATE HAVE_CONFIG_H=1 CARES_BUILDING_LIBRARY) 108 109 # Only matters on Windows 110 IF (WIN32 OR CYGWIN) 111 TARGET_COMPILE_DEFINITIONS (${LIBNAME} PUBLIC CARES_STATICLIB) 112 ENDIF() 113 114 TARGET_LINK_LIBRARIES (${LIBNAME} PUBLIC ${CARES_DEPENDENT_LIBS}) 115 IF (CARES_INSTALL) 116 INSTALL (TARGETS ${LIBNAME} EXPORT ${PROJECT_NAME}-targets COMPONENT Devel 117 ${TARGETS_INST_DEST} 118 ) 119 INSTALL(FILES ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/cares${STATIC_SUFFIX}.pdb 120 DESTINATION ${CMAKE_INSTALL_BINDIR} 121 COMPONENT Library 122 OPTIONAL 123 ) 124 ENDIF () 125 126 # For chain building: add alias targets that look like import libs that would be returned by find_package(c-ares). 127 ADD_LIBRARY (${PROJECT_NAME}::cares_static ALIAS ${LIBNAME}) 128 IF (NOT TARGET ${PROJECT_NAME}::cares) 129 # Only use static for the generic alias if shared lib wasn't built. 130 ADD_LIBRARY (${PROJECT_NAME}::cares ALIAS ${LIBNAME}) 131 ENDIF () 132ENDIF () 133 134 135 136 137