1project(lws-minimal-dbus-client) 2cmake_minimum_required(VERSION 2.8) 3include(CheckCSourceCompiles) 4include(CheckLibraryExists) 5 6set(SAMP lws-minimal-dbus-client) 7set(SRCS minimal-dbus-client.c) 8 9if (NOT LWS_WITH_MINIMAL_EXAMPLES) 10 CHECK_LIBRARY_EXISTS(dbus-1 dbus_connection_set_watch_functions "" LWS_HAVE_LIBDBUS) 11 if (NOT LWS_HAVE_LIBDBUS) 12 message(FATAL_ERROR "Install dbus-devel, or libdbus-1-dev etc") 13 endif() 14 15 if (NOT LWS_DBUS_LIB) 16 set(LWS_DBUS_LIB "dbus-1") 17 endif() 18 19 if (NOT LWS_DBUS_INCLUDE1) 20 # look in fedora and debian / ubuntu place 21 if (EXISTS "/usr/include/dbus-1.0") 22 set(LWS_DBUS_INCLUDE1 "/usr/include/dbus-1.0") 23 else() 24 message(FATAL_ERROR "Set LWS_DBUS_INCLUDE1 to /usr/include/dbus-1.0 or wherever the main dbus includes are") 25 endif() 26 endif() 27 28 if (NOT LWS_DBUS_INCLUDE2) 29 # look in fedora... debian / ubuntu has the ARCH in the path... 30 if (EXISTS "/usr/lib64/dbus-1.0/include") 31 set(LWS_DBUS_INCLUDE2 "/usr/lib64/dbus-1.0/include") 32 else() 33 message(FATAL_ERROR "Set LWS_DBUS_INCLUDE2 to /usr/lib/ARCH-linux-gnu/dbus-1.0/include or wherever dbus-arch-deps.h is on your system") 34 endif() 35 endif() 36 37 set(CMAKE_REQUIRED_INCLUDES ${CMAKE_REQUIRED_INCLUDES};${LWS_DBUS_INCLUDE1};${LWS_DBUS_INCLUDE2}) 38 39 if (NOT LWS_DBUS_INCLUDE1 OR NOT LWS_DBUS_INCLUDE2) 40 message(FATAL_ERROR "To build with libdbus, LWS_DBUS_INCLUDE1/2 must be given. See lib/roles/dbus/README.md") 41 endif() 42 43endif() 44 45# If we are being built as part of lws, confirm current build config supports 46# reqconfig, else skip building ourselves. 47# 48# If we are being built externally, confirm installed lws was configured to 49# support reqconfig, else error out with a helpful message about the problem. 50# 51MACRO(require_lws_config reqconfig _val result) 52 53 if (DEFINED ${reqconfig}) 54 if (${reqconfig}) 55 set (rq 1) 56 else() 57 set (rq 0) 58 endif() 59 else() 60 set(rq 0) 61 endif() 62 63 if (${_val} EQUAL ${rq}) 64 set(SAME 1) 65 else() 66 set(SAME 0) 67 endif() 68 69 if (LWS_WITH_MINIMAL_EXAMPLES AND NOT ${SAME}) 70 if (${_val}) 71 message("${SAMP}: skipping as lws being built without ${reqconfig}") 72 else() 73 message("${SAMP}: skipping as lws built with ${reqconfig}") 74 endif() 75 set(${result} 0) 76 else() 77 if (LWS_WITH_MINIMAL_EXAMPLES) 78 set(MET ${SAME}) 79 else() 80 CHECK_C_SOURCE_COMPILES("#include <libwebsockets.h>\nint main(void) {\n#if defined(${reqconfig})\n return 0;\n#else\n fail;\n#endif\n return 0;\n}\n" HAS_${reqconfig}) 81 if (NOT DEFINED HAS_${reqconfig} OR NOT HAS_${reqconfig}) 82 set(HAS_${reqconfig} 0) 83 else() 84 set(HAS_${reqconfig} 1) 85 endif() 86 if ((HAS_${reqconfig} AND ${_val}) OR (NOT HAS_${reqconfig} AND NOT ${_val})) 87 set(MET 1) 88 else() 89 set(MET 0) 90 endif() 91 endif() 92 if (NOT MET) 93 if (${_val}) 94 message(FATAL_ERROR "This project requires lws must have been configured with ${reqconfig}") 95 else() 96 message(FATAL_ERROR "Lws configuration of ${reqconfig} is incompatible with this project") 97 endif() 98 endif() 99 100 endif() 101ENDMACRO() 102 103 104set(requirements 1) 105require_lws_config(LWS_ROLE_DBUS 1 requirements) 106require_lws_config(LWS_WITH_CLIENT 1 requirements) 107 108if (requirements) 109 add_executable(${SAMP} ${SRCS}) 110 111 include_directories("${LWS_DBUS_INCLUDE1}") 112 include_directories("${LWS_DBUS_INCLUDE2}") 113 list(APPEND LIB_LIST dbus-1) 114 115 if (websockets_shared) 116 target_link_libraries(${SAMP} websockets_shared) 117 add_dependencies(${SAMP} websockets_shared ${LWS_DBUS_LIB}) 118 else() 119 target_link_libraries(${SAMP} websockets ${LWS_DBUS_LIB}) 120 endif() 121endif() 122