59 lines
1.5 KiB
CMake
59 lines
1.5 KiB
CMake
function(get_relative_link REL PATH)
|
|
get_filename_component(NAME ${PATH} NAME_WE)
|
|
if(${NAME} MATCHES "^lib")
|
|
string(REGEX REPLACE "^lib" "-l" LINK ${NAME})
|
|
elseif(${NAME} MATCHES "^-")
|
|
set(LINK ${NAME})
|
|
else()
|
|
string(CONCAT LINK "-l" ${NAME})
|
|
endif()
|
|
set(${REL} ${LINK} PARENT_SCOPE)
|
|
endfunction()
|
|
|
|
function(generate_pkgconfig TARGET DESCRIPTION)
|
|
# message("Generating pkg-config for ${TARGET}")
|
|
get_filename_component(PREFIX ${CMAKE_INSTALL_PREFIX} ABSOLUTE)
|
|
|
|
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})
|
|
list(APPEND LIBS ${LINK})
|
|
endif()
|
|
endforeach()
|
|
|
|
if(HAS_REQS)
|
|
set(REQUIRES "\nRequires.private:")
|
|
foreach (REQ ${REQS})
|
|
string(APPEND REQUIRES " ${REQ}")
|
|
endforeach()
|
|
endif()
|
|
if(HAS_LIBS)
|
|
set(LIBRARIES "\nLibs.private:")
|
|
foreach (LIB ${LIBS})
|
|
string(APPEND LIBRARIES " ${LIB}")
|
|
endforeach()
|
|
endif()
|
|
|
|
file(GENERATE OUTPUT "${CMAKE_CURRENT_BINARY_DIR}/pkgconfig/${TARGET}.pc" CONTENT
|
|
"prefix=${PREFIX}
|
|
includedir=\${prefix}/${CMAKE_INSTALL_INCLUDEDIR}
|
|
libdir=\${prefix}/${CMAKE_INSTALL_LIBDIR}
|
|
|
|
Name: ${TARGET}
|
|
Description: ${DESCRIPTION}
|
|
Version: ${PROJECT_VERSION}
|
|
|
|
CFlags: -I\${includedir}
|
|
Libs: -L\${libdir} -l${TARGET}${REQUIRES}${LIBRARIES}
|
|
")
|
|
|
|
install(FILES "pkgconfig/${TARGET}.pc" DESTINATION "${CMAKE_INSTALL_PREFIX}/${CMAKE_INSTALL_LIBDIR}/pkgconfig")
|
|
endfunction()
|