11cmake_minimum_required (VERSION 3.4 )
22
3- project (LibVNCServer VERSION 0.9.13 LANGUAGES C )
3+ project (LibVNCServer VERSION 0.9.14 LANGUAGES C )
44include (CheckFunctionExists )
55include (CheckSymbolExists )
66include (CheckIncludeFile )
@@ -19,8 +19,8 @@ set(PROJECT_BUGREPORT_PATH "https://github.com/LibVNC/libvncserver/issues")
1919set (LIBVNCSERVER_DIR ${CMAKE_CURRENT_SOURCE_DIR} /libvncserver)
2020set (COMMON_DIR ${CMAKE_CURRENT_SOURCE_DIR} /common)
2121set (LIBVNCCLIENT_DIR ${CMAKE_CURRENT_SOURCE_DIR} /libvncclient)
22- set (LIBVNCSRVEXAMPLE_DIR ${CMAKE_CURRENT_SOURCE_DIR} /examples)
23- set (LIBVNCCLIEXAMPLE_DIR ${CMAKE_CURRENT_SOURCE_DIR} /client_examples )
22+ set (LIBVNCSRVEXAMPLE_DIR ${CMAKE_CURRENT_SOURCE_DIR} /examples/server )
23+ set (LIBVNCCLIEXAMPLE_DIR ${CMAKE_CURRENT_SOURCE_DIR} /examples/client )
2424set (TESTS_DIR ${CMAKE_CURRENT_SOURCE_DIR} /test)
2525set (CMAKE_WINDOWS_EXPORT_ALL_SYMBOLS ON )
2626set (CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${CMAKE_CURRENT_SOURCE_DIR} /cmake/Modules/" )
@@ -59,6 +59,7 @@ option(WITH_24BPP "Allow 24 bpp" ON)
5959option (WITH_IPv6 "Enable IPv6 Support" ON )
6060option (WITH_WEBSOCKETS "Build with websockets support" ON )
6161option (WITH_SASL "Build with SASL support" ON )
62+ option (WITH_XCB "Build with XCB support" ON )
6263option (WITH_EXAMPLES "Build examples" ON )
6364option (WITH_TESTS "Build tests" ON )
6465
@@ -71,6 +72,10 @@ if(WITH_LZO)
7172 find_package (LZO )
7273endif ()
7374
75+ if (WITH_XCB)
76+ find_package (X11 ) # Need CMake 3.24.0 to find XCB libraries. see https://cmake.org/cmake/help/v3.24/module/FindX11.html
77+ endif ()
78+
7479if (WITH_JPEG)
7580 find_package (JPEG )
7681 if (JPEG_FOUND)
@@ -372,6 +377,7 @@ set(LIBVNCSERVER_SOURCES
372377 ${LIBVNCSERVER_DIR} /draw.c
373378 ${LIBVNCSERVER_DIR} /selbox.c
374379 ${COMMON_DIR} /vncauth.c
380+ ${COMMON_DIR} /sockets.c
375381 ${LIBVNCSERVER_DIR} /cargs.c
376382 ${LIBVNCSERVER_DIR} /ultra.c
377383 ${LIBVNCSERVER_DIR} /scale.c
@@ -386,6 +392,7 @@ set(LIBVNCCLIENT_SOURCES
386392 ${LIBVNCCLIENT_DIR} /sockets.c
387393 ${LIBVNCCLIENT_DIR} /vncviewer.c
388394 ${COMMON_DIR} /ghpringbuf.c
395+ ${COMMON_DIR} /sockets.c
389396 ${CRYPTO_SOURCES}
390397)
391398
@@ -585,6 +592,18 @@ if(ANDROID)
585592 )
586593endif (ANDROID )
587594
595+ if (X11_xcb_FOUND AND X11_xcb_xtest_FOUND AND X11_xcb_keysyms_FOUND)
596+ set (LIBVNCSERVER_EXAMPLES
597+ ${LIBVNCSERVER_EXAMPLES}
598+ x11
599+ )
600+ else ()
601+ # clear NOTFOUND
602+ unset (X11_xcb_LIB CACHE )
603+ unset (X11_xcb_xtest_LIB CACHE )
604+ unset (X11_xcb_keysyms_LIB CACHE )
605+ endif (X11_xcb_FOUND AND X11_xcb_xtest_FOUND AND X11_xcb_keysyms_FOUND )
606+
588607set (LIBVNCCLIENT_EXAMPLES
589608 backchannel
590609 ppmtest
@@ -629,14 +648,14 @@ if(WITH_EXAMPLES)
629648 foreach (e ${LIBVNCSERVER_EXAMPLES} )
630649 add_executable (examples_${e} ${LIBVNCSRVEXAMPLE_DIR} /${e}.c )
631650 set_target_properties (examples_${e} PROPERTIES OUTPUT_NAME ${e} )
632- set_target_properties (examples_${e} PROPERTIES RUNTIME_OUTPUT_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR} /examples )
633- target_link_libraries (examples_${e} vncserver ${CMAKE_THREAD_LIBS_INIT} ${CARBON_LIBRARY} ${IOKIT_LIBRARY} ${IOSURFACE_LIBRARY} )
651+ set_target_properties (examples_${e} PROPERTIES RUNTIME_OUTPUT_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR} /examples/server )
652+ target_link_libraries (examples_${e} vncserver ${CMAKE_THREAD_LIBS_INIT} ${CARBON_LIBRARY} ${IOKIT_LIBRARY} ${IOSURFACE_LIBRARY} ${X11_xcb_LIB} ${X11_xcb_xtest_LIB} ${X11_xcb_keysyms_LIB} )
634653 endforeach (e ${LIBVNCSERVER_EXAMPLES} )
635654
636655 foreach (e ${LIBVNCCLIENT_EXAMPLES} )
637656 add_executable (client_examples_${e} ${LIBVNCCLIEXAMPLE_DIR} /${e}.c ${LIBVNCCLIEXAMPLE_DIR} /${${e}_EXTRA_SOURCES} )
638657 set_target_properties (client_examples_${e} PROPERTIES OUTPUT_NAME ${e} )
639- set_target_properties (client_examples_${e} PROPERTIES RUNTIME_OUTPUT_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR} /client_examples )
658+ set_target_properties (client_examples_${e} PROPERTIES RUNTIME_OUTPUT_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR} /examples/client )
640659 target_link_libraries (client_examples_${e} vncclient ${CMAKE_THREAD_LIBS_INIT} ${SDL2_LIBRARY} ${GTK2_LIBRARIES} ${FFMPEG_LIBRARIES} ${LIBSSH2_LIBRARY} )
641660 endforeach (e ${LIBVNCCLIENT_EXAMPLES} )
642661endif (WITH_EXAMPLES )
@@ -647,6 +666,12 @@ endif(WITH_EXAMPLES)
647666
648667if (WITH_TESTS)
649668
669+ # First fuzzing
670+ if (DEFINED ENV{LIB_FUZZING_ENGINE})
671+ add_executable (fuzz_server ${TESTS_DIR} /fuzz_server.c )
672+ target_link_libraries (fuzz_server vncserver ${CMAKE_THREAD_LIBS_INIT} ${CARBON_LIBRARY} ${IOKIT_LIBRARY} ${IOSURFACE_LIBRARY} $ENV{LIB_FUZZING_ENGINE} )
673+ endif ()
674+
650675if (UNIX )
651676 set (ADDITIONAL_TEST_LIBS m)
652677endif (UNIX )
@@ -744,9 +769,9 @@ function(get_link_libraries OUT TARGET)
744769endfunction ()
745770
746771get_link_libraries (PRIVATE_LIBS vncserver )
747- configure_file (${CMAKE_CURRENT_SOURCE_DIR} /libvncserver.pc.cmakein ${CMAKE_CURRENT_BINARY_DIR} /libvncserver.pc @ONLY )
772+ configure_file (${CMAKE_CURRENT_SOURCE_DIR} /libvncserver/libvncserver .pc.cmakein ${CMAKE_CURRENT_BINARY_DIR} /libvncserver.pc @ONLY )
748773get_link_libraries (PRIVATE_LIBS vncclient )
749- configure_file (${CMAKE_CURRENT_SOURCE_DIR} /libvncclient.pc.cmakein ${CMAKE_CURRENT_BINARY_DIR} /libvncclient.pc @ONLY )
774+ configure_file (${CMAKE_CURRENT_SOURCE_DIR} /libvncclient/libvncclient .pc.cmakein ${CMAKE_CURRENT_BINARY_DIR} /libvncclient.pc @ONLY )
750775
751776if (LIBVNCSERVER_INSTALL)
752777 set (INSTALL_HEADER_FILES
0 commit comments