From cc835fa938a8a4d3dd13a4f71ecd38ed9a2b82e9 Mon Sep 17 00:00:00 2001 From: Christian Beier Date: Mon, 2 Jan 2017 20:07:57 +0100 Subject: [PATCH] CMake: generate and install pkgconfig files. --- CMakeLists.txt | 28 ++++++++++++++++++++++++++++ libvncclient.pc.cmakein | 12 ++++++------ 2 files changed, 34 insertions(+), 6 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 87c7856..744e0e0 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -97,6 +97,7 @@ endif(NOT HAVE_B64_IN_LIBC) if(Threads_FOUND) option(TIGHTVNC_FILETRANSFER "Enable filetransfer" ON) + set(ADDITIONAL_LIBS ${ADDITIONAL_LIBS} ${CMAKE_THREAD_LIBS_INIT}) endif(Threads_FOUND) if(ZLIB_FOUND) set(LIBVNCSERVER_HAVE_LIBZ 1) @@ -399,6 +400,28 @@ foreach(test ${LIBVNCCLIENT_TESTS}) target_link_libraries(client_examples_${test} vncclient ${CMAKE_THREAD_LIBS_INIT} ${X11_LIBRARIES} ${SDL_LIBRARY} ${FFMPEG_LIBRARIES}) endforeach(test ${LIBVNCCLIENT_TESTS}) +# this gets the libraries needed by TARGET in "-libx -liby ..." form +function(get_link_libraries OUT TARGET) + set(RESULT "") + get_target_property(LIBRARIES ${TARGET} INTERFACE_LINK_LIBRARIES) + foreach(LIB ${LIBRARIES}) + string(REGEX REPLACE "^.*/lib" "" LIB ${LIB}) # remove leading path and "lib" name prefix + string(REGEX REPLACE "-l" "" LIB ${LIB}) # remove leading -l + string(REGEX REPLACE "\\.so$" "" LIB ${LIB}) # remove trailing .so + list(APPEND RESULT "-l${LIB}") + endforeach() + list(REMOVE_DUPLICATES RESULT) + string(CONCAT RESULT ${RESULT}) # back to string + string(REPLACE "-l" " -l" RESULT ${RESULT}) # re-add separators + set(${OUT} ${RESULT} PARENT_SCOPE) +endfunction() + +get_link_libraries(PRIVATE_LIBS vncserver) +configure_file(${CMAKE_CURRENT_SOURCE_DIR}/libvncserver.pc.cmakein ${CMAKE_CURRENT_BINARY_DIR}/libvncserver.pc @ONLY) +get_link_libraries(PRIVATE_LIBS vncclient) +configure_file(${CMAKE_CURRENT_SOURCE_DIR}/libvncclient.pc.cmakein ${CMAKE_CURRENT_BINARY_DIR}/libvncclient.pc @ONLY) + + install_targets(/lib vncserver) install_targets(/lib vncclient) install_files(/include/rfb FILES @@ -409,3 +432,8 @@ install_files(/include/rfb FILES rfb/rfbproto.h rfb/rfbregion.h ) + +install_files(/lib/pkgconfig FILES + libvncserver.pc + libvncclient.pc +) diff --git a/libvncclient.pc.cmakein b/libvncclient.pc.cmakein index 37495e7..169a8b7 100644 --- a/libvncclient.pc.cmakein +++ b/libvncclient.pc.cmakein @@ -1,14 +1,14 @@ -prefix=@prefix@ -exec_prefix=@exec_prefix@ -libdir=@libdir@ -includedir=@includedir@ +prefix=@CMAKE_INSTALL_PREFIX@ +exec_prefix=@CMAKE_INSTALL_PREFIX@ +libdir=@CMAKE_INSTALL_PREFIX@/lib +includedir=@CMAKE_INSTALL_PREFIX@/include Name: LibVNCClient Description: A library for easy implementation of a VNC client. -Version: @VERSION@ +Version: @PACKAGE_VERSION@ Requires: Requires.private: zlib Libs: -L${libdir} -lvncclient -Libs.private: @LIBS@ @WSOCKLIB@ +Libs.private: @PRIVATE_LIBS@ Cflags: -I${includedir}