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