diff options
author | San Mehat <san@google.com> | 2014-09-23 08:30:51 -0700 |
---|---|---|
committer | San Mehat <san@google.com> | 2014-09-23 08:31:16 -0700 |
commit | a430b2b5ca4f0967836f5820e8f03adc17fc0a24 (patch) | |
tree | 4a51be74c1997e9dc49bcdde263e90ddc120275e /CMakeLists.txt | |
parent | 0c83df23de8bb203b440a4d5674b389ed8cadbf5 (diff) | |
download | libvncserver-a430b2b5ca4f0967836f5820e8f03adc17fc0a24.tar.gz |
Initial checkin of libvncserver external library
Change-Id: Ie7c0947e3184490a566a63981ca9baaad2fbcaa3
Diffstat (limited to 'CMakeLists.txt')
-rw-r--r-- | CMakeLists.txt | 361 |
1 files changed, 361 insertions, 0 deletions
diff --git a/CMakeLists.txt b/CMakeLists.txt new file mode 100644 index 0000000..6d4a5f9 --- /dev/null +++ b/CMakeLists.txt @@ -0,0 +1,361 @@ +cmake_minimum_required(VERSION 2.6) + +project(LibVNCServer) +include(CheckFunctionExists) +include(CheckIncludeFile) +include(CheckTypeSize) +include(TestBigEndian) +include(CheckCSourceCompiles) +include(CheckCXXSourceCompiles) +include(CheckCSourceRuns) + +set(PACKAGE_NAME "LibVNCServer") +set(FULL_PACKAGE_NAME "LibVNCServer") +set(PACKAGE_VERSION "0.9.9") +set(PROJECT_BUGREPORT_PATH "http://sourceforge.net/projects/libvncserver") +set(CMAKE_C_FLAGS "-O2 -W -Wall -g") +set(LIBVNCSERVER_DIR ${CMAKE_SOURCE_DIR}/libvncserver) +set(COMMON_DIR ${CMAKE_SOURCE_DIR}/common) +set(LIBVNCCLIENT_DIR ${CMAKE_SOURCE_DIR}/libvncclient) +set(LIBVNCSRVTEST_DIR ${CMAKE_SOURCE_DIR}/examples) +set(LIBVNCCLITEST_DIR ${CMAKE_SOURCE_DIR}/client_examples) + + +include_directories(${CMAKE_SOURCE_DIR} ${CMAKE_BINARY_DIR} ${CMAKE_SOURCE_DIR}/libvncserver ${CMAKE_SOURCE_DIR}/common) + +find_package(ZLIB) +find_package(JPEG) +find_package(PNG) +find_package(SDL) +find_package(GnuTLS) +find_package(Threads) +find_package(X11) +find_package(OpenSSL) +find_library(LIBGCRYPT_LIBRARIES gcrypt) + +# Check whether the version of libjpeg we found was libjpeg-turbo and print a +# warning if not. +set(CMAKE_REQUIRED_LIBRARIES ${JPEG_LIBRARIES}) +set(CMAKE_REQUIRED_FLAGS -I${JPEG_INCLUDE_DIR}) + +set(JPEG_TEST_SOURCE "\n + #include <stdio.h>\n + #include <jpeglib.h>\n + int main(void) {\n + struct jpeg_compress_struct cinfo;\n + struct jpeg_error_mgr jerr;\n + cinfo.err=jpeg_std_error(&jerr);\n + jpeg_create_compress(&cinfo);\n + cinfo.input_components = 3;\n + jpeg_set_defaults(&cinfo);\n + cinfo.in_color_space = JCS_EXT_RGB;\n + jpeg_default_colorspace(&cinfo);\n + return 0;\n + }") + +if(CMAKE_CROSSCOMPILING) + check_c_source_compiles("${JPEG_TEST_SOURCE}" FOUND_LIBJPEG_TURBO) +else() + check_c_source_runs("${JPEG_TEST_SOURCE}" FOUND_LIBJPEG_TURBO) +endif() + +set(CMAKE_REQUIRED_LIBRARIES) +set(CMAKE_REQUIRED_FLAGS) +set(CMAKE_REQUIRED_DEFINITIONS) + +if(NOT FOUND_LIBJPEG_TURBO) + message(WARNING "*** The libjpeg library you are building against is not libjpeg-turbo. Performance will be reduced. You can obtain libjpeg-turbo from: https://sourceforge.net/projects/libjpeg-turbo/files/ ***") +endif() + +set(CMAKE_REQUIRED_LIBRARIES resolv) +check_function_exists(__b64_ntop HAVE_B64) + +if(Threads_FOUND) + option(TIGHTVNC_FILETRANSFER "Enable filetransfer" ON) +endif(Threads_FOUND) +if (HAVE_B64) +endif(HAVE_B64) +if(ZLIB_FOUND) + set(LIBVNCSERVER_HAVE_LIBZ 1) +endif(ZLIB_FOUND) +if(JPEG_FOUND) + set(LIBVNCSERVER_HAVE_LIBJPEG 1) +endif(JPEG_FOUND) +if(PNG_FOUND) + set(LIBVNCSERVER_HAVE_LIBPNG 1) +endif(PNG_FOUND) +option(LIBVNCSERVER_ALLOW24BPP "Allow 24 bpp" ON) + +if(GNUTLS_FOUND) + set(LIBVNCSERVER_WITH_CLIENT_TLS 1) + option(LIBVNCSERVER_WITH_WEBSOCKETS "Build with websockets support (gnutls)" ON) + set(WEBSOCKET_LIBRARIES -lresolv ${GNUTLS_LIBRARIES}) + set(WSSRCS ${LIBVNCSERVER_DIR}/rfbssl_gnutls ${LIBVNCSERVER_DIR}/rfbcrypto_gnutls) +elseif(OPENSSL_FOUND) + option(LIBVNCSERVER_WITH_WEBSOCKETS "Build with websockets support (openssl)" ON) + set(WEBSOCKET_LIBRARIES -lresolv ${OPENSSL_LIBRARIES}) + set(WSSRCS ${LIBVNCSERVER_DIR}/rfbssl_openssl ${LIBVNCSERVER_DIR}/rfbcrypto_openssl) +else() + option(LIBVNCSERVER_WITH_WEBSOCKETS "Build with websockets support (no ssl)" ON) + set(WEBSOCKET_LIBRARIES -lresolv) + set(WSSRCS ${LIBVNCSERVER_DIR}/rfbssl_none.c ${LIBVNCSERVER_DIR}/rfbcrypto_included.c ${COMMON_DIR}/md5.c ${COMMON_DIR}/sha1.c) +endif() + +if(LIBGCRYPT_LIBRARIES) + message(STATUS "Found libgcrypt: ${LIBGCRYPT_LIBRARIES}") + set(LIBVNCSERVER_WITH_CLIENT_GCRYPT 1) +endif(LIBGCRYPT_LIBRARIES) + + +check_include_file("fcntl.h" LIBVNCSERVER_HAVE_FCNTL_H) +check_include_file("netinet/in.h" LIBVNCSERVER_HAVE_NETINET_IN_H) +check_include_file("sys/socket.h" LIBVNCSERVER_HAVE_SYS_SOCKET_H) +check_include_file("sys/stat.h" LIBVNCSERVER_HAVE_SYS_STAT_H) +check_include_file("sys/time.h" LIBVNCSERVER_HAVE_SYS_TIME_H) +check_include_file("sys/types.h" LIBVNCSERVER_HAVE_SYS_TYPES_H) +check_include_file("sys/wait.h" LIBVNCSERVER_HAVE_SYS_WAIT_H) +check_include_file("unistd.h" LIBVNCSERVER_HAVE_UNISTD_H) + +# headers needed for check_type_size() +check_include_file("arpa/inet.h" HAVE_ARPA_INET_H) +check_include_file("stdint.h" HAVE_STDINT_H) +check_include_file("stddef.h" HAVE_STDDEF_H) +check_include_file("sys/types.h" HAVE_SYS_TYPES_H) + +check_function_exists(gettimeofday LIBVNCSERVER_HAVE_GETTIMEOFDAY) + +if(CMAKE_USE_PTHREADS_INIT) + set(LIBVNCSERVER_HAVE_LIBPTHREAD 1) +endif(CMAKE_USE_PTHREADS_INIT) +if(LIBVNCSERVER_HAVE_SYS_SOCKET_H) + # socklen_t + list(APPEND CMAKE_EXTRA_INCLUDE_FILES "sys/socket.h") +endif(LIBVNCSERVER_HAVE_SYS_SOCKET_H) +if(HAVE_ARPA_INET_H) + # in_addr_t + list(APPEND CMAKE_EXTRA_INCLUDE_FILES "arpa/inet.h") +endif(HAVE_ARPA_INET_H) + +check_type_size(pid_t LIBVNCSERVER_PID_T) +check_type_size(size_t LIBVNCSERVER_SIZE_T) +check_type_size(socklen_t LIBVNCSERVER_SOCKLEN_T) +check_type_size(in_addr_t LIBVNCSERVER_IN_ADDR_T) +if(NOT HAVE_LIBVNCSERVER_IN_ADDR_T) + set(LIBVNCSERVER_NEED_INADDR_T 1) +endif(NOT HAVE_LIBVNCSERVER_IN_ADDR_T) + +TEST_BIG_ENDIAN(LIBVNCSERVER_WORDS_BIGENDIAN) + +# TODO: +# LIBVNCSERVER_ENOENT_WORKAROUND +# inline + +configure_file(${CMAKE_SOURCE_DIR}/rfb/rfbconfig.h.cmake ${CMAKE_BINARY_DIR}/rfb/rfbconfig.h) +configure_file(${CMAKE_SOURCE_DIR}/rfb/rfbint.h.cmake ${CMAKE_BINARY_DIR}/rfb/rfbint.h) + +set(LIBVNCSERVER_SOURCES + ${LIBVNCSERVER_DIR}/main.c + ${LIBVNCSERVER_DIR}/rfbserver.c + ${LIBVNCSERVER_DIR}/rfbregion.c + ${LIBVNCSERVER_DIR}/auth.c + ${LIBVNCSERVER_DIR}/sockets.c + ${LIBVNCSERVER_DIR}/stats.c + ${LIBVNCSERVER_DIR}/corre.c + ${LIBVNCSERVER_DIR}/hextile.c + ${LIBVNCSERVER_DIR}/rre.c + ${LIBVNCSERVER_DIR}/translate.c + ${LIBVNCSERVER_DIR}/cutpaste.c + ${LIBVNCSERVER_DIR}/httpd.c + ${LIBVNCSERVER_DIR}/cursor.c + ${LIBVNCSERVER_DIR}/font.c + ${LIBVNCSERVER_DIR}/draw.c + ${LIBVNCSERVER_DIR}/selbox.c + ${COMMON_DIR}/d3des.c + ${COMMON_DIR}/vncauth.c + ${LIBVNCSERVER_DIR}/cargs.c + ${COMMON_DIR}/minilzo.c + ${LIBVNCSERVER_DIR}/ultra.c + ${LIBVNCSERVER_DIR}/scale.c +) + +set(LIBVNCCLIENT_SOURCES + ${LIBVNCCLIENT_DIR}/cursor.c + ${LIBVNCCLIENT_DIR}/listen.c + ${LIBVNCCLIENT_DIR}/rfbproto.c + ${LIBVNCCLIENT_DIR}/sockets.c + ${LIBVNCCLIENT_DIR}/vncviewer.c + ${COMMON_DIR}/minilzo.c +) + +if(GNUTLS_FOUND) + set(LIBVNCCLIENT_SOURCES + ${LIBVNCCLIENT_SOURCES} + ${LIBVNCCLIENT_DIR}/tls_gnutls.c + ) +elseif(OPENSSL_FOUND) + set(LIBVNCCLIENT_SOURCES + ${LIBVNCCLIENT_SOURCES} + ${LIBVNCCLIENT_DIR}/tls_openssl.c + ) +else() + set(LIBVNCCLIENT_SOURCES + ${LIBVNCCLIENT_SOURCES} + ${LIBVNCCLIENT_DIR}/tls_none.c + ) +endif() + +if(ZLIB_FOUND) + add_definitions(-DLIBVNCSERVER_HAVE_LIBZ) + include_directories(${ZLIB_INCLUDE_DIR}) + set(LIBVNCSERVER_SOURCES + ${LIBVNCSERVER_SOURCES} + ${LIBVNCSERVER_DIR}/zlib.c + ${LIBVNCSERVER_DIR}/zrle.c + ${LIBVNCSERVER_DIR}/zrleoutstream.c + ${LIBVNCSERVER_DIR}/zrlepalettehelper.c + ) +endif(ZLIB_FOUND) + +if(JPEG_FOUND) + add_definitions(-DLIBVNCSERVER_HAVE_LIBJPEG) + include_directories(${JPEG_INCLUDE_DIR}) + set(TIGHT_C ${LIBVNCSERVER_DIR}/tight.c ${COMMON_DIR}/turbojpeg.c) +endif(JPEG_FOUND) + +if(PNG_FOUND) + add_definitions(-DLIBVNCSERVER_HAVE_LIBPNG) + include_directories(${PNG_INCLUDE_DIR}) + set(TIGHT_C ${LIBVNCSERVER_DIR}/tight.c ${COMMON_DIR}/turbojpeg.c) +endif(PNG_FOUND) + +set(LIBVNCSERVER_SOURCES + ${LIBVNCSERVER_SOURCES} + ${TIGHT_C} +) + +if(TIGHTVNC_FILETRANSFER) + set(LIBVNCSERVER_SOURCES + ${LIBVNCSERVER_SOURCES} + ${LIBVNCSERVER_DIR}/tightvnc-filetransfer/rfbtightserver.c + ${LIBVNCSERVER_DIR}/tightvnc-filetransfer/handlefiletransferrequest.c + ${LIBVNCSERVER_DIR}/tightvnc-filetransfer/filetransfermsg.c + ${LIBVNCSERVER_DIR}/tightvnc-filetransfer/filelistinfo.c + ) +endif(TIGHTVNC_FILETRANSFER) + +if(LIBVNCSERVER_WITH_WEBSOCKETS) + add_definitions(-DLIBVNCSERVER_WITH_WEBSOCKETS) + set(LIBVNCSERVER_SOURCES + ${LIBVNCSERVER_SOURCES} + ${LIBVNCSERVER_DIR}/websockets.c + ${WSSRCS} + ) +endif(LIBVNCSERVER_WITH_WEBSOCKETS) + + +add_library(vncclient SHARED ${LIBVNCCLIENT_SOURCES}) +add_library(vncserver SHARED ${LIBVNCSERVER_SOURCES}) +if(WIN32) + set(ADDITIONAL_LIBS ws2_32) +endif(WIN32) + +target_link_libraries(vncclient + ${ADDITIONAL_LIBS} + ${ZLIB_LIBRARIES} + ${JPEG_LIBRARIES} +) +target_link_libraries(vncserver + ${ADDITIONAL_LIBS} + ${ZLIB_LIBRARIES} + ${JPEG_LIBRARIES} + ${PNG_LIBRARIES} + ${WEBSOCKET_LIBRARIES} +) + +SET_TARGET_PROPERTIES(vncclient vncserver + PROPERTIES SOVERSION "0.0.0" +) + +# tests +set(LIBVNCSERVER_TESTS + backchannel + camera + colourmaptest + example + fontsel + pnmshow + pnmshow24 + regiontest + rotate + simple + simple15 + storepasswd + vncev + ) + +if(Threads_FOUND) + set(LIBVNCSERVER_TESTS + ${LIBVNCSERVER_TESTS} + blooptest + ) +endif(Threads_FOUND) + +if(TIGHTVNC_FILETRANSFER) + set(LIBVNCSERVER_TESTS + ${LIBVNCSERVER_TESTS} + filetransfer + ) +endif(TIGHTVNC_FILETRANSFER) + +if(MACOS) + set(LIBVNCSERVER_TESTS + ${LIBVNCSERVER_TESTS} + mac + ) +endif(MACOS) + +set(LIBVNCCLIENT_TESTS + backchannel + ppmtest +) + +if(SDL_FOUND) + include_directories(${SDL_INCLUDE_DIR}) + set(LIBVNCCLIENT_TESTS + ${LIBVNCCLIENT_TESTS} + SDLvncviewer + ) + set(SDLvncviewer_EXTRA_SOURCES scrap.c) +endif(SDL_FOUND) + +if(HAVE_FFMPEG) + set(LIBVNCCLIENT_TESTS + ${LIBVNCCLIENT_TESTS} + vnc2mpg + ) +endif(HAVE_FFMPEG) + + +file(MAKE_DIRECTORY ${CMAKE_BINARY_DIR}/examples) +foreach(test ${LIBVNCSERVER_TESTS}) + add_executable(examples/${test} ${LIBVNCSRVTEST_DIR}/${test}.c) + target_link_libraries(examples/${test} vncserver ${CMAKE_THREAD_LIBS_INIT}) +endforeach(test ${LIBVNCSERVER_TESTS}) + +file(MAKE_DIRECTORY ${CMAKE_BINARY_DIR}/client_examples) +foreach(test ${LIBVNCCLIENT_TESTS}) + add_executable(client_examples/${test} ${LIBVNCCLITEST_DIR}/${test}.c ${LIBVNCCLITEST_DIR}/${${test}_EXTRA_SOURCES} ) + target_link_libraries(client_examples/${test} vncclient ${CMAKE_THREAD_LIBS_INIT} ${GNUTLS_LIBRARIES} ${X11_LIBRARIES} ${SDL_LIBRARY} ${FFMPEG_LIBRARIES}) +endforeach(test ${LIBVNCCLIENT_TESTS}) + +install_targets(/lib vncserver) +install_targets(/lib vncclient) +install_files(/include/rfb FILES + rfb/keysym.h + rfb/rfb.h + rfb/rfbclient.h + rfb/rfbconfig.h + rfb/rfbint.h + rfb/rfbproto.h + rfb/rfbregion.h +) |