@@ -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 )
@@ -532,36 +534,48 @@ if(LIBVNCSERVER_WITH_WEBSOCKETS)
532534 )
533535endif (LIBVNCSERVER_WITH_WEBSOCKETS )
534536
535- add_library (vncclient ${LIBVNCCLIENT_SOURCES} )
536- add_library (vncserver ${LIBVNCSERVER_SOURCES} )
537537if (WIN32 )
538538 set (ADDITIONAL_LIBS ${ADDITIONAL_LIBS} ws2_32)
539539 if (WITH_TIGHTVNC_FILETRANSFER)
540540 add_definitions (-D_WIN32_WINNT=0x0600 )
541541 endif (WITH_TIGHTVNC_FILETRANSFER )
542542endif (WIN32 )
543543
544- target_link_libraries (vncclient
545- ${ADDITIONAL_LIBS}
546- ${ZLIB_LIBRARIES}
547- ${LZO_LIBRARIES}
548- ${JPEG_LIBRARIES}
549- ${CRYPTO_LIBRARIES}
550- ${GNUTLS_LIBRARIES}
551- ${OPENSSL_LIBRARIES}
552- )
553- target_link_libraries (vncserver
554- ${ADDITIONAL_LIBS}
555- ${ZLIB_LIBRARIES}
556- ${LZO_LIBRARIES}
557- ${JPEG_LIBRARIES}
558- ${PNG_LIBRARIES}
559- ${CRYPTO_LIBRARIES}
560- ${GNUTLS_LIBRARIES}
561- ${OPENSSL_LIBRARIES}
562- )
544+ set (LIBVNCSERVER_LIBRARIES )
545+ if (WITH_LIBVNCCLIENT)
546+ add_library (vncclient ${LIBVNCCLIENT_SOURCES} )
547+ target_link_libraries (vncclient
548+ ${ADDITIONAL_LIBS}
549+ ${ZLIB_LIBRARIES}
550+ ${LZO_LIBRARIES}
551+ ${JPEG_LIBRARIES}
552+ ${CRYPTO_LIBRARIES}
553+ ${GNUTLS_LIBRARIES}
554+ ${OPENSSL_LIBRARIES}
555+ )
556+ set (LIBVNCSERVER_LIBRARIES vncclient)
557+ endif (WITH_LIBVNCCLIENT )
558+ if (WITH_LIBVNCSERVER)
559+ add_library (vncserver ${LIBVNCSERVER_SOURCES} )
560+ target_link_libraries (vncserver
561+ ${ADDITIONAL_LIBS}
562+ ${ZLIB_LIBRARIES}
563+ ${LZO_LIBRARIES}
564+ ${JPEG_LIBRARIES}
565+ ${PNG_LIBRARIES}
566+ ${CRYPTO_LIBRARIES}
567+ ${GNUTLS_LIBRARIES}
568+ ${OPENSSL_LIBRARIES}
569+ )
570+ set (LIBVNCSERVER_LIBRARIES ${LIBVNCSERVER_LIBRARIES} vncserver)
571+ endif (WITH_LIBVNCSERVER )
572+
573+ # Validate that at least one of the libraries is being built
574+ if (NOT LIBVNCSERVER_LIBRARIES)
575+ message (FATAL_ERROR "Neither libvncserver nor libvncclient is being built. At least one of WITH_LIBVNCSERVER or WITH_LIBVNCCLIENT must be ON." )
576+ endif (NOT LIBVNCSERVER_LIBRARIES )
563577
564- SET_TARGET_PROPERTIES (vncclient vncserver
578+ SET_TARGET_PROPERTIES (${LIBVNCSERVER_LIBRARIES}
565579 PROPERTIES SOVERSION "${VERSION_SO} " VERSION "${LibVNCServer_VERSION} " C_STANDARD 90
566580)
567581
@@ -657,30 +671,34 @@ if(FFMPEG_FOUND)
657671endif (FFMPEG_FOUND )
658672
659673if (WITH_EXAMPLES)
660- foreach (e ${LIBVNCSERVER_EXAMPLES} )
661- add_executable (examples_${e} ${LIBVNCSRVEXAMPLE_DIR} /${e}.c )
662- set_target_properties (examples_${e} PROPERTIES OUTPUT_NAME ${e} )
663- set_target_properties (examples_${e} PROPERTIES RUNTIME_OUTPUT_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR} /examples/server )
664- target_link_libraries (examples_${e} vncserver ${CMAKE_THREAD_LIBS_INIT} ${X11_xcb_LIB} ${X11_xcb_xtest_LIB} ${X11_xcb_keysyms_LIB} )
665- endforeach (e ${LIBVNCSERVER_EXAMPLES} )
666-
667- foreach (e ${LIBVNCCLIENT_EXAMPLES} )
668- add_executable (client_examples_${e} ${LIBVNCCLIEXAMPLE_DIR} /${e}.c ${LIBVNCCLIEXAMPLE_DIR} /${${e}_EXTRA_SOURCES} )
669- set_target_properties (client_examples_${e} PROPERTIES OUTPUT_NAME ${e} )
670- set_target_properties (client_examples_${e} PROPERTIES RUNTIME_OUTPUT_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR} /examples/client )
671- target_link_libraries (client_examples_${e} vncclient ${CMAKE_THREAD_LIBS_INIT} ${SDL2_LIBRARY} ${GTK2_LIBRARIES} ${FFMPEG_LIBRARIES} ${LIBSSHTUNNEL_LIBRARY} )
672- endforeach (e ${LIBVNCCLIENT_EXAMPLES} )
674+ if (WITH_LIBVNCSERVER)
675+ foreach (e ${LIBVNCSERVER_EXAMPLES} )
676+ add_executable (examples_${e} ${LIBVNCSRVEXAMPLE_DIR} /${e}.c )
677+ set_target_properties (examples_${e} PROPERTIES OUTPUT_NAME ${e} )
678+ set_target_properties (examples_${e} PROPERTIES RUNTIME_OUTPUT_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR} /examples/server )
679+ target_link_libraries (examples_${e} vncserver ${CMAKE_THREAD_LIBS_INIT} ${X11_xcb_LIB} ${X11_xcb_xtest_LIB} ${X11_xcb_keysyms_LIB} )
680+ endforeach (e ${LIBVNCSERVER_EXAMPLES} )
681+ endif (WITH_LIBVNCSERVER )
682+
683+ if (WITH_LIBVNCCLIENT)
684+ foreach (e ${LIBVNCCLIENT_EXAMPLES} )
685+ add_executable (client_examples_${e} ${LIBVNCCLIEXAMPLE_DIR} /${e}.c ${LIBVNCCLIEXAMPLE_DIR} /${${e}_EXTRA_SOURCES} )
686+ set_target_properties (client_examples_${e} PROPERTIES OUTPUT_NAME ${e} )
687+ set_target_properties (client_examples_${e} PROPERTIES RUNTIME_OUTPUT_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR} /examples/client )
688+ target_link_libraries (client_examples_${e} vncclient ${CMAKE_THREAD_LIBS_INIT} ${SDL2_LIBRARY} ${GTK2_LIBRARIES} ${FFMPEG_LIBRARIES} ${LIBSSHTUNNEL_LIBRARY} )
689+ endforeach (e ${LIBVNCCLIENT_EXAMPLES} )
690+ endif (WITH_LIBVNCCLIENT )
673691
674692 #This example must have its own building instructions,
675693 #apart from the other examples because it is written in
676694 #C++, so it has a distinct file extension and depends on
677695 #a C++ compiler
678- if (Qt5Widgets_FOUND AND WITH_QT AND DEFINED CMAKE_CXX_COMPILER )
696+ if (Qt5Widgets_FOUND AND WITH_QT AND DEFINED CMAKE_CXX_COMPILER AND WITH_LIBVNCCLIENT )
679697 add_executable (client_examples_qt5client ${LIBVNCCLIEXAMPLE_DIR} /qt5client.cpp ${LIBVNCCLIEXAMPLE_DIR} /${qt5client_EXTRA_SOURCES} )
680698 set_target_properties (client_examples_qt5client PROPERTIES OUTPUT_NAME qt5client )
681699 set_target_properties (client_examples_qt5client PROPERTIES RUNTIME_OUTPUT_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR} /examples/client )
682700 target_link_libraries (client_examples_qt5client vncclient ${CMAKE_THREAD_LIBS_INIT} ${Qt5Widgets_LIBRARIES} )
683- endif (Qt5Widgets_FOUND AND WITH_QT AND DEFINED CMAKE_CXX_COMPILER )
701+ endif (Qt5Widgets_FOUND AND WITH_QT AND DEFINED CMAKE_CXX_COMPILER AND WITH_LIBVNCCLIENT )
684702endif (WITH_EXAMPLES )
685703
686704#
@@ -690,7 +708,7 @@ endif(WITH_EXAMPLES)
690708if (WITH_TESTS)
691709
692710# First fuzzing
693- if (DEFINED ENV{LIB_FUZZING_ENGINE})
711+ if (DEFINED ENV{LIB_FUZZING_ENGINE} AND WITH_LIBVNCSERVER )
694712 add_executable (fuzz_server ${TESTS_DIR} /fuzz_server.c )
695713 target_link_libraries (fuzz_server vncserver ${CMAKE_THREAD_LIBS_INIT} $ENV{LIB_FUZZING_ENGINE} )
696714endif ()
@@ -700,22 +718,28 @@ if(UNIX)
700718endif (UNIX )
701719
702720set (SIMPLETESTS
703- cargstest
704- copyrecttest
705721)
706722
707- if (WITH_THREADS AND (CMAKE_USE_PTHREADS_INIT OR CMAKE_USE_WIN32_THREADS_INIT))
723+ if (WITH_LIBVNCSERVER)
724+ list (APPEND SIMPLETESTS
725+ cargstest
726+ copyrecttest
727+ )
728+ endif (WITH_LIBVNCSERVER )
729+
730+
731+ if (WITH_THREADS AND (CMAKE_USE_PTHREADS_INIT OR CMAKE_USE_WIN32_THREADS_INIT) AND WITH_LIBVNCSERVER AND WITH_LIBVNCCLIENT)
708732 set (SIMPLETESTS
709733 ${SIMPLETESTS}
710734 encodingstest
711735 )
712- endif (WITH_THREADS AND (CMAKE_USE_PTHREADS_INIT OR CMAKE_USE_WIN32_THREADS_INIT ))
736+ endif (WITH_THREADS AND (CMAKE_USE_PTHREADS_INIT OR CMAKE_USE_WIN32_THREADS_INIT ) AND WITH_LIBVNCSERVER AND WITH_LIBVNCCLIENT )
713737
714738foreach (t ${SIMPLETESTS} )
715739 add_executable (test_${t} ${TESTS_DIR} /${t}.c )
716740 set_target_properties (test_${t} PROPERTIES OUTPUT_NAME ${t} )
717741 set_target_properties (test_${t} PROPERTIES RUNTIME_OUTPUT_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR} /test )
718- target_link_libraries (test_${t} vncserver vncclient ${ADDITIONAL_TEST_LIBS} )
742+ target_link_libraries (test_${t} ${LIBVNCSERVER_LIBRARIES} ${ADDITIONAL_TEST_LIBS} )
719743endforeach (t ${SIMPLETESTS} )
720744
721745if (WITH_JPEG AND FOUND_LIBJPEG_TURBO)
@@ -728,7 +752,7 @@ if(WITH_JPEG AND FOUND_LIBJPEG_TURBO)
728752 )
729753 set_target_properties (test_tjunittest PROPERTIES OUTPUT_NAME tjunittest )
730754 set_target_properties (test_tjunittest PROPERTIES RUNTIME_OUTPUT_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR} /test )
731- target_link_libraries (test_tjunittest vncserver vncclient ${ADDITIONAL_TEST_LIBS} )
755+ target_link_libraries (test_tjunittest ${LIBVNCSERVER_LIBRARIES} ${ADDITIONAL_TEST_LIBS} )
732756
733757 add_executable (test_tjbench
734758 ${TESTS_DIR} /tjbench.c
@@ -741,30 +765,37 @@ if(WITH_JPEG AND FOUND_LIBJPEG_TURBO)
741765 )
742766 set_target_properties (test_tjbench PROPERTIES OUTPUT_NAME tjbench )
743767 set_target_properties (test_tjbench PROPERTIES RUNTIME_OUTPUT_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR} /test )
744- target_link_libraries (test_tjbench vncserver vncclient ${ADDITIONAL_TEST_LIBS} )
768+ target_link_libraries (test_tjbench ${LIBVNCSERVER_LIBRARIES} ${ADDITIONAL_TEST_LIBS} )
745769
746770endif (WITH_JPEG AND FOUND_LIBJPEG_TURBO )
747771
748- if (LIBVNCSERVER_WITH_WEBSOCKETS)
772+ if (LIBVNCSERVER_WITH_WEBSOCKETS AND WITH_LIBVNCSERVER )
749773 add_executable (test_wstest
750774 ${TESTS_DIR} /wstest.c
751775 ${TESTS_DIR} /wstestdata.inc
752776 )
753777 set_target_properties (test_wstest PROPERTIES OUTPUT_NAME wstest )
754778 set_target_properties (test_wstest PROPERTIES RUNTIME_OUTPUT_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR} /test )
755- target_link_libraries (test_wstest vncserver vncclient ${ADDITIONAL_TEST_LIBS} )
756- endif (LIBVNCSERVER_WITH_WEBSOCKETS )
779+ target_link_libraries (test_wstest vncserver ${ADDITIONAL_TEST_LIBS} )
780+ endif (LIBVNCSERVER_WITH_WEBSOCKETS AND WITH_LIBVNCSERVER )
757781
758- add_test (NAME cargs COMMAND test_cargstest )
782+ if (WITH_LIBVNCSERVER)
783+ add_test (NAME cargs COMMAND test_cargstest )
784+ endif (WITH_LIBVNCSERVER )
759785if (UNIX )
760- add_test (NAME includetest COMMAND ${TESTS_DIR} /includetest.sh ${CMAKE_INSTALL_PREFIX} /${CMAKE_INSTALL_INCLUDEDIR} ${CMAKE_MAKE_PROGRAM} )
786+ if (WITH_LIBVNCSERVER)
787+ add_test (NAME includetest_server COMMAND ${TESTS_DIR} /includetest.sh ${CMAKE_INSTALL_PREFIX} /${CMAKE_INSTALL_INCLUDEDIR} ${CMAKE_MAKE_PROGRAM} "rfb/rfb.h" )
788+ endif (WITH_LIBVNCSERVER )
789+ if (WITH_LIBVNCCLIENT)
790+ add_test (NAME includetest_client COMMAND ${TESTS_DIR} /includetest.sh ${CMAKE_INSTALL_PREFIX} /${CMAKE_INSTALL_INCLUDEDIR} ${CMAKE_MAKE_PROGRAM} "rfb/rfbclient.h" )
791+ endif (WITH_LIBVNCCLIENT )
761792endif (UNIX )
762793if (WITH_JPEG AND FOUND_LIBJPEG_TURBO)
763794 add_test (NAME turbojpeg COMMAND test_tjunittest )
764795endif (WITH_JPEG AND FOUND_LIBJPEG_TURBO )
765- if (LIBVNCSERVER_WITH_WEBSOCKETS)
796+ if (LIBVNCSERVER_WITH_WEBSOCKETS AND WITH_LIBVNCSERVER )
766797 add_test (NAME wstest COMMAND test_wstest )
767- endif (LIBVNCSERVER_WITH_WEBSOCKETS )
798+ endif (LIBVNCSERVER_WITH_WEBSOCKETS AND WITH_LIBVNCSERVER )
768799
769800endif (WITH_TESTS )
770801
@@ -791,26 +822,39 @@ function(get_link_libraries OUT TARGET)
791822 set (${OUT} ${RESULT} PARENT_SCOPE )
792823endfunction ()
793824
794- get_link_libraries (PRIVATE_LIBS vncserver )
795- configure_file (${CMAKE_CURRENT_SOURCE_DIR} /src/libvncserver/libvncserver.pc.cmakein ${CMAKE_CURRENT_BINARY_DIR} /libvncserver.pc @ONLY )
796- get_link_libraries (PRIVATE_LIBS vncclient )
797- configure_file (${CMAKE_CURRENT_SOURCE_DIR} /src/libvncclient/libvncclient.pc.cmakein ${CMAKE_CURRENT_BINARY_DIR} /libvncclient.pc @ONLY )
825+ set (LIBVNCSERVER_PC_FILES )
826+ if (WITH_LIBVNCSERVER)
827+ get_link_libraries (PRIVATE_LIBS vncserver )
828+ configure_file (${CMAKE_CURRENT_SOURCE_DIR} /src/libvncserver/libvncserver.pc.cmakein ${CMAKE_CURRENT_BINARY_DIR} /libvncserver.pc @ONLY )
829+ list (APPEND LIBVNCSERVER_PC_FILES ${CMAKE_CURRENT_BINARY_DIR} /libvncserver.pc)
830+ endif (WITH_LIBVNCSERVER )
831+ if (WITH_LIBVNCCLIENT)
832+ get_link_libraries (PRIVATE_LIBS vncclient )
833+ configure_file (${CMAKE_CURRENT_SOURCE_DIR} /src/libvncclient/libvncclient.pc.cmakein ${CMAKE_CURRENT_BINARY_DIR} /libvncclient.pc @ONLY )
834+ list (APPEND LIBVNCSERVER_PC_FILES ${CMAKE_CURRENT_BINARY_DIR} /libvncclient.pc)
835+ endif (WITH_LIBVNCCLIENT )
798836
799837if (LIBVNCSERVER_INSTALL)
800838 set (INSTALL_HEADER_FILES
801839 include/rfb/keysym.h
802840 include/rfb/threading.h
803- include/rfb/rfb.h
804- include/rfb/rfbclient.h
805841 ${CMAKE_CURRENT_BINARY_DIR} /include/rfb/rfbconfig.h
806842 include/rfb/rfbproto.h
807843 include/rfb/rfbregion.h
808844 )
809-
810- set_property (TARGET vncclient PROPERTY PUBLIC_HEADER ${INSTALL_HEADER_FILES} )
811- set_property (TARGET vncserver PROPERTY PUBLIC_HEADER ${INSTALL_HEADER_FILES} )
845+
846+ if (WITH_LIBVNCSERVER)
847+ list (APPEND INSTALL_HEADER_FILES include /rfb/rfb.h)
848+ endif (WITH_LIBVNCSERVER )
849+ if (WITH_LIBVNCCLIENT)
850+ list (APPEND INSTALL_HEADER_FILES include /rfb/rfbclient.h)
851+ endif (WITH_LIBVNCCLIENT )
852+
853+ foreach (LIB ${LIBVNCSERVER_LIBRARIES} )
854+ set_property (TARGET ${LIB} PROPERTY PUBLIC_HEADER ${INSTALL_HEADER_FILES} )
855+ endforeach ()
812856 if (WIN32 )
813- INSTALL (TARGETS vncclient vncserver
857+ INSTALL (TARGETS ${LIBVNCSERVER_LIBRARIES}
814858 EXPORT LibVNCServerTargets
815859 RUNTIME DESTINATION "${CMAKE_INSTALL_BINDIR} "
816860 LIBRARY DESTINATION "${CMAKE_INSTALL_BINDIR} "
@@ -819,7 +863,7 @@ if(LIBVNCSERVER_INSTALL)
819863 INCLUDES DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}
820864 )
821865 else ()
822- INSTALL (TARGETS vncclient vncserver
866+ INSTALL (TARGETS ${LIBVNCSERVER_LIBRARIES}
823867 EXPORT LibVNCServerTargets
824868 RUNTIME DESTINATION "${CMAKE_INSTALL_BINDIR} "
825869 LIBRARY DESTINATION "${CMAKE_INSTALL_LIBDIR} "
@@ -854,8 +898,7 @@ if(LIBVNCSERVER_INSTALL)
854898
855899
856900 install (FILES
857- ${CMAKE_CURRENT_BINARY_DIR} /libvncserver.pc
858- ${CMAKE_CURRENT_BINARY_DIR} /libvncclient.pc
901+ ${LIBVNCSERVER_PC_FILES}
859902 DESTINATION ${CMAKE_INSTALL_LIBDIR} /pkgconfig
860903 )
861904endif ()
0 commit comments