diff options
Diffstat (limited to 'protocols/Telegram/tdlib/td/CMake/GeneratePkgConfig.cmake')
-rw-r--r-- | protocols/Telegram/tdlib/td/CMake/GeneratePkgConfig.cmake | 92 |
1 files changed, 92 insertions, 0 deletions
diff --git a/protocols/Telegram/tdlib/td/CMake/GeneratePkgConfig.cmake b/protocols/Telegram/tdlib/td/CMake/GeneratePkgConfig.cmake new file mode 100644 index 0000000000..afbe06ac60 --- /dev/null +++ b/protocols/Telegram/tdlib/td/CMake/GeneratePkgConfig.cmake @@ -0,0 +1,92 @@ +function(get_relative_link OUTPUT PATH) + if (PATH MATCHES "^[$]<[$]<CONFIG:DEBUG>:") + set(${OUTPUT} "" PARENT_SCOPE) + return() + endif() + string(REGEX REPLACE "^[$]<[$]<NOT:[$]<CONFIG:DEBUG>>:(.*)>$" "\\1" PATH "${PATH}") + + get_filename_component(NAME "${PATH}" NAME_WE) + if (IS_ABSOLUTE ${PATH}) + get_filename_component(DIRECTORY_NAME "${PATH}" DIRECTORY) + if (WIN32) + set(${OUTPUT} "-l\"${DIRECTORY_NAME}/${NAME}\"" PARENT_SCOPE) + else() + get_filename_component(FULL_NAME "${PATH}" NAME) + set(${OUTPUT} "-L\"${DIRECTORY_NAME}\" -l:${FULL_NAME}" PARENT_SCOPE) + endif() + return() + endif() + + if (NOT WIN32 AND NAME MATCHES "^lib") + string(REGEX REPLACE "^lib" "-l" LINK "${NAME}") + elseif (NAME MATCHES "^-") + set(LINK "${NAME}") + else() + string(CONCAT LINK "-l" "${NAME}") + endif() + set(${OUTPUT} "${LINK}" PARENT_SCOPE) +endfunction() + +function(generate_pkgconfig TARGET DESCRIPTION) + # message("Generating pkg-config for ${TARGET}") + get_filename_component(PREFIX "${CMAKE_INSTALL_PREFIX}" REALPATH) + + get_target_property(LIST "${TARGET}" LINK_LIBRARIES) + set(REQS "") + set(LIBS "") + foreach (LIB ${LIST}) + if (TARGET "${LIB}") + set(HAS_REQS 1) + list(APPEND REQS "${LIB}") + else() + set(HAS_LIBS 1) + get_relative_link(LINK "${LIB}") + if (NOT LINK EQUAL "") + list(APPEND LIBS "${LINK}") + endif() + endif() + endforeach() + + if (HAS_REQS) + set(REQUIRES "") + foreach (REQ ${REQS}) + set(REQUIRES "${REQUIRES} ${REQ}") + endforeach() + set(REQUIRES "Requires.private:${REQUIRES}\n") + endif() + if (HAS_LIBS) + set(LIBRARIES "") + list(REVERSE LIBS) + list(REMOVE_DUPLICATES LIBS) + foreach (LIB ${LIBS}) + set(LIBRARIES " ${LIB}${LIBRARIES}") + endforeach() + set(LIBRARIES "Libs.private:${LIBRARIES}\n") + endif() + + if (IS_ABSOLUTE "${CMAKE_INSTALL_INCLUDEDIR}") + set(PKGCONFIG_INCLUDEDIR "${CMAKE_INSTALL_INCLUDEDIR}") + else() + set(PKGCONFIG_INCLUDEDIR "\${prefix}/${CMAKE_INSTALL_INCLUDEDIR}") + endif() + + if (IS_ABSOLUTE "${CMAKE_INSTALL_LIBDIR}") + set(PKGCONFIG_LIBDIR "${CMAKE_INSTALL_LIBDIR}") + else() + set(PKGCONFIG_LIBDIR "\${prefix}/${CMAKE_INSTALL_LIBDIR}") + endif() + + file(MAKE_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/pkgconfig") + file(GENERATE OUTPUT "${CMAKE_CURRENT_BINARY_DIR}/pkgconfig/${TARGET}.pc" CONTENT +"prefix=${PREFIX} + +Name: ${TARGET} +Description: ${DESCRIPTION} +Version: ${PROJECT_VERSION} + +CFlags: -I\"${PKGCONFIG_INCLUDEDIR}\" +Libs: -L\"${PKGCONFIG_LIBDIR}\" -l${TARGET} +${REQUIRES}${LIBRARIES}") + + install(FILES "${CMAKE_CURRENT_BINARY_DIR}/pkgconfig/${TARGET}.pc" DESTINATION "${CMAKE_INSTALL_LIBDIR}/pkgconfig") +endfunction() |