@@ -52,6 +52,8 @@ include_directories(
5252
5353# all the build configuration switches
5454option (LIBVNCSERVER_INSTALL "Generate installation target" ON )
55+ option (WITH_LIBVNCSERVER "Build libvncserver" ON )
56+ option (WITH_LIBVNCCLIENT "Build libvncclient" ON )
5557option (BUILD_SHARED_LIBS "Build shared libraries" ${UNIX} )
5658option (WITH_ZLIB "Search for the zlib compression library to support additional encodings" ON )
5759option (WITH_LZO "Search for the LZO compression library to omit internal miniLZO implementation" ON )
@@ -531,36 +533,48 @@ if(LIBVNCSERVER_WITH_WEBSOCKETS)
531533 )
532534endif (LIBVNCSERVER_WITH_WEBSOCKETS )
533535
534- add_library (vncclient ${LIBVNCCLIENT_SOURCES} )
535- add_library (vncserver ${LIBVNCSERVER_SOURCES} )
536536if (WIN32 )
537537 set (ADDITIONAL_LIBS ${ADDITIONAL_LIBS} ws2_32)
538538 if (WITH_TIGHTVNC_FILETRANSFER)
539539 add_definitions (-D_WIN32_WINNT=0x0600 )
540540 endif (WITH_TIGHTVNC_FILETRANSFER )
541541endif (WIN32 )
542542
543- target_link_libraries (vncclient
544- ${ADDITIONAL_LIBS}
545- ${ZLIB_LIBRARIES}
546- ${LZO_LIBRARIES}
547- ${JPEG_LIBRARIES}
548- ${CRYPTO_LIBRARIES}
549- ${GNUTLS_LIBRARIES}
550- ${OPENSSL_LIBRARIES}
551- )
552- target_link_libraries (vncserver
553- ${ADDITIONAL_LIBS}
554- ${ZLIB_LIBRARIES}
555- ${LZO_LIBRARIES}
556- ${JPEG_LIBRARIES}
557- ${PNG_LIBRARIES}
558- ${CRYPTO_LIBRARIES}
559- ${GNUTLS_LIBRARIES}
560- ${OPENSSL_LIBRARIES}
561- )
543+ set (LIBVNCSERVER_LIBRARIES )
544+ if (WITH_LIBVNCCLIENT)
545+ add_library (vncclient ${LIBVNCCLIENT_SOURCES} )
546+ target_link_libraries (vncclient
547+ ${ADDITIONAL_LIBS}
548+ ${ZLIB_LIBRARIES}
549+ ${LZO_LIBRARIES}
550+ ${JPEG_LIBRARIES}
551+ ${CRYPTO_LIBRARIES}
552+ ${GNUTLS_LIBRARIES}
553+ ${OPENSSL_LIBRARIES}
554+ )
555+ set (LIBVNCSERVER_LIBRARIES vncclient)
556+ endif (WITH_LIBVNCCLIENT )
557+ if (WITH_LIBVNCSERVER)
558+ add_library (vncserver ${LIBVNCSERVER_SOURCES} )
559+ target_link_libraries (vncserver
560+ ${ADDITIONAL_LIBS}
561+ ${ZLIB_LIBRARIES}
562+ ${LZO_LIBRARIES}
563+ ${JPEG_LIBRARIES}
564+ ${PNG_LIBRARIES}
565+ ${CRYPTO_LIBRARIES}
566+ ${GNUTLS_LIBRARIES}
567+ ${OPENSSL_LIBRARIES}
568+ )
569+ set (LIBVNCSERVER_LIBRARIES ${LIBVNCSERVER_LIBRARIES} vncserver)
570+ endif (WITH_LIBVNCSERVER )
571+
572+ # Validate that at least one of the libraries is being built
573+ if (NOT LIBVNCSERVER_LIBRARIES)
574+ message (FATAL_ERROR "Neither libvncserver nor libvncclient is being built. At least one of WITH_LIBVNCSERVER or WITH_LIBVNCCLIENT must be ON." )
575+ endif (NOT LIBVNCSERVER_LIBRARIES )
562576
563- SET_TARGET_PROPERTIES (vncclient vncserver
577+ SET_TARGET_PROPERTIES (${LIBVNCSERVER_LIBRARIES}
564578 PROPERTIES SOVERSION "${VERSION_SO} " VERSION "${LibVNCServer_VERSION} " C_STANDARD 90
565579)
566580
@@ -655,30 +669,34 @@ if(FFMPEG_FOUND)
655669endif (FFMPEG_FOUND )
656670
657671if (WITH_EXAMPLES)
658- foreach (e ${LIBVNCSERVER_EXAMPLES} )
659- add_executable (examples_${e} ${LIBVNCSRVEXAMPLE_DIR} /${e}.c )
660- set_target_properties (examples_${e} PROPERTIES OUTPUT_NAME ${e} )
661- set_target_properties (examples_${e} PROPERTIES RUNTIME_OUTPUT_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR} /examples/server )
662- target_link_libraries (examples_${e} vncserver ${CMAKE_THREAD_LIBS_INIT} ${X11_xcb_LIB} ${X11_xcb_xtest_LIB} ${X11_xcb_keysyms_LIB} )
663- endforeach (e ${LIBVNCSERVER_EXAMPLES} )
664-
665- foreach (e ${LIBVNCCLIENT_EXAMPLES} )
666- add_executable (client_examples_${e} ${LIBVNCCLIEXAMPLE_DIR} /${e}.c ${LIBVNCCLIEXAMPLE_DIR} /${${e}_EXTRA_SOURCES} )
667- set_target_properties (client_examples_${e} PROPERTIES OUTPUT_NAME ${e} )
668- set_target_properties (client_examples_${e} PROPERTIES RUNTIME_OUTPUT_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR} /examples/client )
669- target_link_libraries (client_examples_${e} vncclient ${CMAKE_THREAD_LIBS_INIT} ${SDL2_LIBRARY} ${GTK2_LIBRARIES} ${FFMPEG_LIBRARIES} ${LIBSSHTUNNEL_LIBRARY} )
670- endforeach (e ${LIBVNCCLIENT_EXAMPLES} )
672+ if (WITH_LIBVNCSERVER)
673+ foreach (e ${LIBVNCSERVER_EXAMPLES} )
674+ add_executable (examples_${e} ${LIBVNCSRVEXAMPLE_DIR} /${e}.c )
675+ set_target_properties (examples_${e} PROPERTIES OUTPUT_NAME ${e} )
676+ set_target_properties (examples_${e} PROPERTIES RUNTIME_OUTPUT_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR} /examples/server )
677+ target_link_libraries (examples_${e} vncserver ${CMAKE_THREAD_LIBS_INIT} ${X11_xcb_LIB} ${X11_xcb_xtest_LIB} ${X11_xcb_keysyms_LIB} )
678+ endforeach (e ${LIBVNCSERVER_EXAMPLES} )
679+ endif (WITH_LIBVNCSERVER )
680+
681+ if (WITH_LIBVNCCLIENT)
682+ foreach (e ${LIBVNCCLIENT_EXAMPLES} )
683+ add_executable (client_examples_${e} ${LIBVNCCLIEXAMPLE_DIR} /${e}.c ${LIBVNCCLIEXAMPLE_DIR} /${${e}_EXTRA_SOURCES} )
684+ set_target_properties (client_examples_${e} PROPERTIES OUTPUT_NAME ${e} )
685+ set_target_properties (client_examples_${e} PROPERTIES RUNTIME_OUTPUT_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR} /examples/client )
686+ target_link_libraries (client_examples_${e} vncclient ${CMAKE_THREAD_LIBS_INIT} ${SDL2_LIBRARY} ${GTK2_LIBRARIES} ${FFMPEG_LIBRARIES} ${LIBSSHTUNNEL_LIBRARY} )
687+ endforeach (e ${LIBVNCCLIENT_EXAMPLES} )
688+ endif (WITH_LIBVNCCLIENT )
671689
672690 #This example must have its own building instructions,
673691 #apart from the other examples because it is written in
674692 #C++, so it has a distinct file extension and depends on
675693 #a C++ compiler
676- if (Qt5Widgets_FOUND AND WITH_QT AND DEFINED CMAKE_CXX_COMPILER )
694+ if (Qt5Widgets_FOUND AND WITH_QT AND DEFINED CMAKE_CXX_COMPILER AND WITH_LIBVNCCLIENT )
677695 add_executable (client_examples_qt5client ${LIBVNCCLIEXAMPLE_DIR} /qt5client.cpp ${LIBVNCCLIEXAMPLE_DIR} /${qt5client_EXTRA_SOURCES} )
678696 set_target_properties (client_examples_qt5client PROPERTIES OUTPUT_NAME qt5client )
679697 set_target_properties (client_examples_qt5client PROPERTIES RUNTIME_OUTPUT_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR} /examples/client )
680698 target_link_libraries (client_examples_qt5client vncclient ${CMAKE_THREAD_LIBS_INIT} ${Qt5Widgets_LIBRARIES} )
681- endif (Qt5Widgets_FOUND AND WITH_QT AND DEFINED CMAKE_CXX_COMPILER )
699+ endif (Qt5Widgets_FOUND AND WITH_QT AND DEFINED CMAKE_CXX_COMPILER AND WITH_LIBVNCCLIENT )
682700endif (WITH_EXAMPLES )
683701
684702#
@@ -688,7 +706,7 @@ endif(WITH_EXAMPLES)
688706if (WITH_TESTS)
689707
690708# First fuzzing
691- if (DEFINED ENV{LIB_FUZZING_ENGINE})
709+ if (DEFINED ENV{LIB_FUZZING_ENGINE} AND WITH_LIBVNCSERVER )
692710 add_executable (fuzz_server ${TESTS_DIR} /fuzz_server.c )
693711 target_link_libraries (fuzz_server vncserver ${CMAKE_THREAD_LIBS_INIT} $ENV{LIB_FUZZING_ENGINE} )
694712endif ()
@@ -698,22 +716,28 @@ if(UNIX)
698716endif (UNIX )
699717
700718set (SIMPLETESTS
701- cargstest
702- copyrecttest
703719)
704720
705- if (WITH_THREADS AND (CMAKE_USE_PTHREADS_INIT OR CMAKE_USE_WIN32_THREADS_INIT))
721+ if (WITH_LIBVNCSERVER)
722+ list (APPEND SIMPLETESTS
723+ cargstest
724+ copyrecttest
725+ )
726+ endif (WITH_LIBVNCSERVER )
727+
728+
729+ if (WITH_THREADS AND (CMAKE_USE_PTHREADS_INIT OR CMAKE_USE_WIN32_THREADS_INIT) AND WITH_LIBVNCSERVER AND WITH_LIBVNCCLIENT)
706730 set (SIMPLETESTS
707731 ${SIMPLETESTS}
708732 encodingstest
709733 )
710- endif (WITH_THREADS AND (CMAKE_USE_PTHREADS_INIT OR CMAKE_USE_WIN32_THREADS_INIT ))
734+ endif (WITH_THREADS AND (CMAKE_USE_PTHREADS_INIT OR CMAKE_USE_WIN32_THREADS_INIT ) AND WITH_LIBVNCSERVER AND WITH_LIBVNCCLIENT )
711735
712736foreach (t ${SIMPLETESTS} )
713737 add_executable (test_${t} ${TESTS_DIR} /${t}.c )
714738 set_target_properties (test_${t} PROPERTIES OUTPUT_NAME ${t} )
715739 set_target_properties (test_${t} PROPERTIES RUNTIME_OUTPUT_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR} /test )
716- target_link_libraries (test_${t} vncserver vncclient ${ADDITIONAL_TEST_LIBS} )
740+ target_link_libraries (test_${t} ${LIBVNCSERVER_LIBRARIES} ${ADDITIONAL_TEST_LIBS} )
717741endforeach (t ${SIMPLETESTS} )
718742
719743if (WITH_JPEG AND FOUND_LIBJPEG_TURBO)
@@ -726,7 +750,7 @@ if(WITH_JPEG AND FOUND_LIBJPEG_TURBO)
726750 )
727751 set_target_properties (test_tjunittest PROPERTIES OUTPUT_NAME tjunittest )
728752 set_target_properties (test_tjunittest PROPERTIES RUNTIME_OUTPUT_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR} /test )
729- target_link_libraries (test_tjunittest vncserver vncclient ${ADDITIONAL_TEST_LIBS} )
753+ target_link_libraries (test_tjunittest ${LIBVNCSERVER_LIBRARIES} ${ADDITIONAL_TEST_LIBS} )
730754
731755 add_executable (test_tjbench
732756 ${TESTS_DIR} /tjbench.c
@@ -739,30 +763,37 @@ if(WITH_JPEG AND FOUND_LIBJPEG_TURBO)
739763 )
740764 set_target_properties (test_tjbench PROPERTIES OUTPUT_NAME tjbench )
741765 set_target_properties (test_tjbench PROPERTIES RUNTIME_OUTPUT_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR} /test )
742- target_link_libraries (test_tjbench vncserver vncclient ${ADDITIONAL_TEST_LIBS} )
766+ target_link_libraries (test_tjbench ${LIBVNCSERVER_LIBRARIES} ${ADDITIONAL_TEST_LIBS} )
743767
744768endif (WITH_JPEG AND FOUND_LIBJPEG_TURBO )
745769
746- if (LIBVNCSERVER_WITH_WEBSOCKETS)
770+ if (LIBVNCSERVER_WITH_WEBSOCKETS AND WITH_LIBVNCSERVER )
747771 add_executable (test_wstest
748772 ${TESTS_DIR} /wstest.c
749773 ${TESTS_DIR} /wstestdata.inc
750774 )
751775 set_target_properties (test_wstest PROPERTIES OUTPUT_NAME wstest )
752776 set_target_properties (test_wstest PROPERTIES RUNTIME_OUTPUT_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR} /test )
753- target_link_libraries (test_wstest vncserver vncclient ${ADDITIONAL_TEST_LIBS} )
754- endif (LIBVNCSERVER_WITH_WEBSOCKETS )
777+ target_link_libraries (test_wstest vncserver ${ADDITIONAL_TEST_LIBS} )
778+ endif (LIBVNCSERVER_WITH_WEBSOCKETS AND WITH_LIBVNCSERVER )
755779
756- add_test (NAME cargs COMMAND test_cargstest )
780+ if (WITH_LIBVNCSERVER)
781+ add_test (NAME cargs COMMAND test_cargstest )
782+ endif (WITH_LIBVNCSERVER )
757783if (UNIX )
758- add_test (NAME includetest COMMAND ${TESTS_DIR} /includetest.sh ${CMAKE_INSTALL_PREFIX} /${CMAKE_INSTALL_INCLUDEDIR} ${CMAKE_MAKE_PROGRAM} )
784+ if (WITH_LIBVNCSERVER)
785+ add_test (NAME includetest_server COMMAND ${TESTS_DIR} /includetest.sh ${CMAKE_INSTALL_PREFIX} /${CMAKE_INSTALL_INCLUDEDIR} ${CMAKE_MAKE_PROGRAM} "rfb/rfb.h" )
786+ endif (WITH_LIBVNCSERVER )
787+ if (WITH_LIBVNCCLIENT)
788+ add_test (NAME includetest_client COMMAND ${TESTS_DIR} /includetest.sh ${CMAKE_INSTALL_PREFIX} /${CMAKE_INSTALL_INCLUDEDIR} ${CMAKE_MAKE_PROGRAM} "rfb/rfbclient.h" )
789+ endif (WITH_LIBVNCCLIENT )
759790endif (UNIX )
760791if (WITH_JPEG AND FOUND_LIBJPEG_TURBO)
761792 add_test (NAME turbojpeg COMMAND test_tjunittest )
762793endif (WITH_JPEG AND FOUND_LIBJPEG_TURBO )
763- if (LIBVNCSERVER_WITH_WEBSOCKETS)
794+ if (LIBVNCSERVER_WITH_WEBSOCKETS AND WITH_LIBVNCSERVER )
764795 add_test (NAME wstest COMMAND test_wstest )
765- endif (LIBVNCSERVER_WITH_WEBSOCKETS )
796+ endif (LIBVNCSERVER_WITH_WEBSOCKETS AND WITH_LIBVNCSERVER )
766797
767798endif (WITH_TESTS )
768799
@@ -789,26 +820,39 @@ function(get_link_libraries OUT TARGET)
789820 set (${OUT} ${RESULT} PARENT_SCOPE )
790821endfunction ()
791822
792- get_link_libraries (PRIVATE_LIBS vncserver )
793- configure_file (${CMAKE_CURRENT_SOURCE_DIR} /src/libvncserver/libvncserver.pc.cmakein ${CMAKE_CURRENT_BINARY_DIR} /libvncserver.pc @ONLY )
794- get_link_libraries (PRIVATE_LIBS vncclient )
795- configure_file (${CMAKE_CURRENT_SOURCE_DIR} /src/libvncclient/libvncclient.pc.cmakein ${CMAKE_CURRENT_BINARY_DIR} /libvncclient.pc @ONLY )
823+ set (LIBVNCSERVER_PC_FILES )
824+ if (WITH_LIBVNCSERVER)
825+ get_link_libraries (PRIVATE_LIBS vncserver )
826+ configure_file (${CMAKE_CURRENT_SOURCE_DIR} /src/libvncserver/libvncserver.pc.cmakein ${CMAKE_CURRENT_BINARY_DIR} /libvncserver.pc @ONLY )
827+ list (APPEND LIBVNCSERVER_PC_FILES ${CMAKE_CURRENT_BINARY_DIR} /libvncserver.pc)
828+ endif (WITH_LIBVNCSERVER )
829+ if (WITH_LIBVNCCLIENT)
830+ get_link_libraries (PRIVATE_LIBS vncclient )
831+ configure_file (${CMAKE_CURRENT_SOURCE_DIR} /src/libvncclient/libvncclient.pc.cmakein ${CMAKE_CURRENT_BINARY_DIR} /libvncclient.pc @ONLY )
832+ list (APPEND LIBVNCSERVER_PC_FILES ${CMAKE_CURRENT_BINARY_DIR} /libvncclient.pc)
833+ endif (WITH_LIBVNCCLIENT )
796834
797835if (LIBVNCSERVER_INSTALL)
798836 set (INSTALL_HEADER_FILES
799837 include/rfb/keysym.h
800838 include/rfb/threading.h
801- include/rfb/rfb.h
802- include/rfb/rfbclient.h
803839 ${CMAKE_CURRENT_BINARY_DIR} /include/rfb/rfbconfig.h
804840 include/rfb/rfbproto.h
805841 include/rfb/rfbregion.h
806842 )
807-
808- set_property (TARGET vncclient PROPERTY PUBLIC_HEADER ${INSTALL_HEADER_FILES} )
809- set_property (TARGET vncserver PROPERTY PUBLIC_HEADER ${INSTALL_HEADER_FILES} )
843+
844+ if (WITH_LIBVNCSERVER)
845+ list (APPEND INSTALL_HEADER_FILES include /rfb/rfb.h)
846+ endif (WITH_LIBVNCSERVER )
847+ if (WITH_LIBVNCCLIENT)
848+ list (APPEND INSTALL_HEADER_FILES include /rfb/rfbclient.h)
849+ endif (WITH_LIBVNCCLIENT )
850+
851+ foreach (LIB ${LIBVNCSERVER_LIBRARIES} )
852+ set_property (TARGET ${LIB} PROPERTY PUBLIC_HEADER ${INSTALL_HEADER_FILES} )
853+ endforeach ()
810854 if (WIN32 )
811- INSTALL (TARGETS vncclient vncserver
855+ INSTALL (TARGETS ${LIBVNCSERVER_LIBRARIES}
812856 EXPORT LibVNCServerTargets
813857 RUNTIME DESTINATION "${CMAKE_INSTALL_BINDIR} "
814858 LIBRARY DESTINATION "${CMAKE_INSTALL_BINDIR} "
@@ -817,7 +861,7 @@ if(LIBVNCSERVER_INSTALL)
817861 INCLUDES DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}
818862 )
819863 else ()
820- INSTALL (TARGETS vncclient vncserver
864+ INSTALL (TARGETS ${LIBVNCSERVER_LIBRARIES}
821865 EXPORT LibVNCServerTargets
822866 RUNTIME DESTINATION "${CMAKE_INSTALL_BINDIR} "
823867 LIBRARY DESTINATION "${CMAKE_INSTALL_LIBDIR} "
@@ -852,8 +896,7 @@ if(LIBVNCSERVER_INSTALL)
852896
853897
854898 install (FILES
855- ${CMAKE_CURRENT_BINARY_DIR} /libvncserver.pc
856- ${CMAKE_CURRENT_BINARY_DIR} /libvncclient.pc
899+ ${LIBVNCSERVER_PC_FILES}
857900 DESTINATION ${CMAKE_INSTALL_LIBDIR} /pkgconfig
858901 )
859902endif ()
0 commit comments