Skip to content

Commit d2ad391

Browse files
committed
CMake: rewrite lib generation for pkg-config files
The list of libs linked against a target is known, so no need to query them again.
1 parent 0bfb2f0 commit d2ad391

File tree

1 file changed

+10
-14
lines changed

1 file changed

+10
-14
lines changed

CMakeLists.txt

Lines changed: 10 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -626,30 +626,26 @@ endif()
626626
#
627627
# this gets the libraries needed by TARGET in "-libx -liby ..." form
628628
#
629-
function(get_link_libraries OUT TARGET)
629+
function(get_link_libraries OUT EXTRA_LIBS)
630630
set(RESULT "")
631-
get_target_property(LIBRARIES ${TARGET} INTERFACE_LINK_LIBRARIES)
632-
foreach(LIB ${LIBRARIES})
633-
if(NOT LIB)
634-
continue()
631+
foreach(LIB ${ADDITIONAL_LIBS} ${EXTRA_LIBS})
632+
if(LIB MATCHES "^-")
633+
list(APPEND RESULT " ${LIB}")
634+
else()
635+
get_filename_component(FNAME "${LIB}" NAME)
636+
string(REGEX REPLACE "^${CMAKE_SHARED_LIBRARY_PREFIX}(.+)${CMAKE_SHARED_LIBRARY_SUFFIX}$" "\\1" LIB "${FNAME}")
637+
list(APPEND RESULT " -l${LIB}")
635638
endif()
636-
string(REGEX REPLACE "^.*/lib" "" LIB ${LIB}) # remove leading path and "lib" name prefix
637-
string(REGEX REPLACE "-l" "" LIB ${LIB}) # remove leading -l
638-
string(REGEX REPLACE "\\.so$" "" LIB ${LIB}) # remove trailing .so
639-
list(APPEND RESULT "-l${LIB}")
640639
endforeach()
641640
list(REMOVE_DUPLICATES RESULT)
642641
string(CONCAT RESULT ${RESULT}) # back to string
643-
if(RESULT)
644-
string(REPLACE "-l" " -l" RESULT ${RESULT}) # re-add separators
645-
endif()
646642
set(${OUT} ${RESULT} PARENT_SCOPE)
647643
endfunction()
648644

649645
if(NOT WIN32)
650-
get_link_libraries(PRIVATE_LIBS vncserver)
646+
get_link_libraries(PRIVATE_LIBS "${PNG_LIBRARIES}")
651647
configure_file(${CMAKE_CURRENT_SOURCE_DIR}/libvncserver.pc.cmakein ${CMAKE_CURRENT_BINARY_DIR}/libvncserver.pc @ONLY)
652-
get_link_libraries(PRIVATE_LIBS vncclient)
648+
get_link_libraries(PRIVATE_LIBS "")
653649
configure_file(${CMAKE_CURRENT_SOURCE_DIR}/libvncclient.pc.cmakein ${CMAKE_CURRENT_BINARY_DIR}/libvncclient.pc @ONLY)
654650
endif()
655651

0 commit comments

Comments
 (0)