From 67f532a8c62bae59d8cdb36587ca36866ef5439a Mon Sep 17 00:00:00 2001 From: Andy Green Date: Thu, 28 Oct 2021 07:17:52 +0100 Subject: [PATCH] cmake: bring tls include requirement out as PUBLIC There's no problem for library build, also with LWS_WITH_MINIMAL_EXAMPLES, but after install at least on OSX, there are problems finding the installed lws include dir (concealed on most platforms by the path being in the default search list for the toolchain), and the references in the lws includes to the tls includes meaning that explicit paths for that must be available at consuming cmakes. This patch enhances the cmake config installed by lws to deal with adding the lws include paths to CMAKE_REQUIRED_INCLUDES and include_directories, so it can be found before the target is introduced. The tls include is passed back up the CMakeLists layers and the lws targets marked with target_include_directories(PUBLIC) with them, so they are understood as needed by consumers. More boilerplate is moved out of the example consuming cmakes. After this, on machines with previous installs of older lws, you may have to clean out the cmake install path, that is usually something like /usr/local/lib/cmake/libwebsockets/* before make installing lws and putting the latest content in there. --- CMakeLists.txt | 3 +++ cmake/libwebsockets-config.cmake.in | 19 ++++++++++++++++--- lib/CMakeLists.txt | 6 +++++- lib/tls/CMakeLists.txt | 12 ++++++++---- .../api-test-async-dns/CMakeLists.txt | 4 ---- .../client/binance/CMakeLists.txt | 7 ------- .../client/hello_world/CMakeLists.txt | 4 ---- .../client/http-post/CMakeLists.txt | 4 ---- .../client/ws-echo/CMakeLists.txt | 4 ---- .../server/hello_world/CMakeLists.txt | 4 ---- .../CMakeLists.txt | 4 ---- .../ssproxy/ssproxy-socket/CMakeLists.txt | 4 ---- 12 files changed, 32 insertions(+), 43 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 3628d0998..2dbfd27ae 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1089,6 +1089,9 @@ file(RELATIVE_PATH if (DEFINED REL_INCLUDE_DIR) set(LWS__INCLUDE_DIRS "\${LWS_CMAKE_DIR}/${REL_INCLUDE_DIR}") endif() +if (DEFINED OPENSSL_INCLUDE_DIRS) + set(LWS__INCLUDE_DIRS "${LWS__INCLUDE_DIRS};${OPENSSL_INCLUDE_DIRS}") +endif() configure_file(${PROJECT_SOURCE_DIR}/cmake/libwebsockets-config.cmake.in ${PROJECT_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/libwebsockets-config.cmake diff --git a/cmake/libwebsockets-config.cmake.in b/cmake/libwebsockets-config.cmake.in index 49482ca1b..6247b2cbe 100644 --- a/cmake/libwebsockets-config.cmake.in +++ b/cmake/libwebsockets-config.cmake.in @@ -1,14 +1,14 @@ # - Config file for lws # It defines the following variables -# LIBWEBSOCKETS_INCLUDE_DIRS - include directories for FooBar +# LIBWEBSOCKETS_INCLUDE_DIRS - include directories for lws # LIBWEBSOCKETS_LIBRARIES - libraries to link against # Get the path of the current file. get_filename_component(LWS_CMAKE_DIR "${CMAKE_CURRENT_LIST_FILE}" PATH) +list(APPEND CMAKE_MODULE_PATH ${libwebsockets_DIR}) -# Set the include directories. -set(LIBWEBSOCKETS_INCLUDE_DIRS "@LWS__INCLUDE_DIRS@") +set(LIBWEBSOCKETS_INCLUDE_DIRS "@LWS__INCLUDE_DIRS@" "@LWS_PUBLIC_INCLUDES@") # Include the project Targets file, this contains definitions for IMPORTED targets. include(${LWS_CMAKE_DIR}/LibwebsocketsTargets.cmake) @@ -17,8 +17,21 @@ include(${LWS_CMAKE_DIR}/LwsCheckRequirements.cmake) # IMPORTED targets from LibwebsocketsTargets.cmake set(LIBWEBSOCKETS_LIBRARIES websockets websockets_shared) +# These are additional include paths you will need +foreach(item "${LIBWEBSOCKETS_INCLUDE_DIRS}") + include_directories(${item}) + set(CMAKE_REQUIRED_INCLUDES "${CMAKE_REQUIRED_INCLUDES}" ${item}) +endforeach() + # These are additional libs that lws wants your app to also link to foreach(item "@LIB_LIST_AT_END@") list(APPEND LIBWEBSOCKETS_DEP_LIBS ${item}) endforeach() +# Move boilerplate for consuming cmake files into here + +include(CheckIncludeFile) +include(CheckCSourceCompiles) +include(LwsCheckRequirements) +set(requirements 1) + diff --git a/lib/CMakeLists.txt b/lib/CMakeLists.txt index 20b7e50a0..eef1d27f0 100644 --- a/lib/CMakeLists.txt +++ b/lib/CMakeLists.txt @@ -119,7 +119,7 @@ CHECK_C_SOURCE_COMPILES(" # after kernel 2.6.37 CHECK_C_SOURCE_COMPILES("#include \nint main(void) { return TCP_USER_TIMEOUT; }\n" LWS_HAVE_TCP_USER_TIMEOUT) - +set(LWS_PUBLIC_INCLUDES "") if (LWS_WITH_TLS) add_subdir_include_dirs(tls) endif() @@ -173,6 +173,8 @@ if (LWS_WITH_STATIC) ) target_include_directories(websockets PRIVATE ${LWS_LIB_BUILD_INC_PATHS}) target_compile_definitions(websockets PRIVATE LWS_BUILDING_STATIC) + target_include_directories(websockets PUBLIC ${LWS_PUBLIC_INCLUDES}) + set(LWS_PUBLIC_INCLUDES ${LWS_PUBLIC_INCLUDES} PARENT_SCOPE) if (WIN32) # Windows uses the same .lib ending for static libraries and shared @@ -199,6 +201,8 @@ if (LWS_WITH_SHARED) ) target_include_directories(websockets_shared PRIVATE ${LWS_LIB_BUILD_INC_PATHS}) target_compile_definitions(websockets_shared PRIVATE LWS_BUILDING_SHARED) + target_include_directories(websockets_shared PUBLIC ${LWS_PUBLIC_INCLUDES}) + set(LWS_PUBLIC_INCLUDES ${LWS_PUBLIC_INCLUDES} PARENT_SCOPE) # We want the shared lib to be named "libwebsockets" # not "libwebsocket_shared". diff --git a/lib/tls/CMakeLists.txt b/lib/tls/CMakeLists.txt index 91ca8be93..aaf4f4a26 100644 --- a/lib/tls/CMakeLists.txt +++ b/lib/tls/CMakeLists.txt @@ -217,12 +217,14 @@ if (LWS_WITH_SSL) if (LWS_WITH_CYASSL) foreach(inc ${WOLFSSL_INCLUDE_DIRS}) set(OPENSSL_INCLUDE_DIRS ${OPENSSL_INCLUDE_DIRS} ${inc} ${inc}/cyassl) - include_directories("${inc}" "${inc}/cyassl") + set(LWS_PUBLIC_INCLUDES ${LWS_PUBLIC_INCLUDES} "${inc}" "${inc}/cyassl") + set(LWS_PUBLIC_INCLUDES ${LWS_PUBLIC_INCLUDES} PARENT_SCOPE) endforeach() else() foreach(inc ${WOLFSSL_INCLUDE_DIRS}) set(OPENSSL_INCLUDE_DIRS ${OPENSSL_INCLUDE_DIRS} ${inc} ${inc}/wolfssl) - include_directories("${inc}" "${inc}/wolfssl") + set(LWS_PUBLIC_INCLUDES ${LWS_PUBLIC_INCLUDES} "${inc}" "${inc}/wolfssl") + set(LWS_PUBLIC_INCLUDES ${LWS_PUBLIC_INCLUDES} PARENT_SCOPE) endforeach() endif() set(CMAKE_REQUIRED_INCLUDES ${CMAKE_REQUIRED_INCLUDES} ${OPENSSL_INCLUDE_DIRS}) @@ -240,7 +242,8 @@ if (LWS_WITH_SSL) message("MBEDTLS libraries: ${MBEDTLS_LIBRARIES}") foreach(inc ${MBEDTLS_INCLUDE_DIRS}) - include_directories("${inc}" "${inc}/mbedtls") + set(LWS_PUBLIC_INCLUDES ${LWS_PUBLIC_INCLUDES} "${inc}" "${inc}/mbedtls") + set(LWS_PUBLIC_INCLUDES ${LWS_PUBLIC_INCLUDES} PARENT_SCOPE) endforeach() list(INSERT LIB_LIST 0 "${MBEDTLS_LIBRARIES}") @@ -269,7 +272,8 @@ if (LWS_WITH_SSL) endif() if (OPENSSL_INCLUDE_DIRS) - include_directories("${OPENSSL_INCLUDE_DIRS}") + set(LWS_PUBLIC_INCLUDES ${LWS_PUBLIC_INCLUDES} "${OPENSSL_INCLUDE_DIRS}") + set(LWS_PUBLIC_INCLUDES ${LWS_PUBLIC_INCLUDES} PARENT_SCOPE) endif() if (NOT LWS_PLAT_FREERTOS) list(INSERT LIB_LIST 0 ${OPENSSL_LIBRARIES}) diff --git a/minimal-examples-lowlevel/api-tests/api-test-async-dns/CMakeLists.txt b/minimal-examples-lowlevel/api-tests/api-test-async-dns/CMakeLists.txt index 6deade98c..199fc7733 100644 --- a/minimal-examples-lowlevel/api-tests/api-test-async-dns/CMakeLists.txt +++ b/minimal-examples-lowlevel/api-tests/api-test-async-dns/CMakeLists.txt @@ -1,14 +1,10 @@ project(lws-api-test-async-dns C) cmake_minimum_required(VERSION 2.8.12) find_package(libwebsockets CONFIG REQUIRED) -list(APPEND CMAKE_MODULE_PATH ${LWS_CMAKE_DIR}) -include(CheckCSourceCompiles) -include(LwsCheckRequirements) set(SAMP lws-api-test-async-dns) set(SRCS main.c) -set(requirements 1) require_lws_config(LWS_ROLE_H1 1 requirements) require_lws_config(LWS_WITH_CLIENT 1 requirements) require_lws_config(LWS_WITH_SYS_ASYNC_DNS 1 requirements) diff --git a/minimal-examples/client/binance/CMakeLists.txt b/minimal-examples/client/binance/CMakeLists.txt index d9897a1f0..4da694e24 100644 --- a/minimal-examples/client/binance/CMakeLists.txt +++ b/minimal-examples/client/binance/CMakeLists.txt @@ -1,14 +1,9 @@ project(lws-minimal-ss-binance C) cmake_minimum_required(VERSION 2.8.12) find_package(libwebsockets CONFIG REQUIRED) -list(APPEND CMAKE_MODULE_PATH ${LWS_CMAKE_DIR}) -include(CheckIncludeFile) -include(CheckCSourceCompiles) -include(LwsCheckRequirements) set(SRCS main.c binance-ss.c) -set(requirements 1) require_lws_config(LWS_ROLE_WS 1 requirements) require_lws_config(LWS_WITH_CLIENT 1 requirements) require_lws_config(LWS_WITHOUT_EXTENSIONS 0 requirements) @@ -48,6 +43,4 @@ if (requirements) ${LIBWEBSOCKETS_DEP_LIBS}) endif() endif() - - endif() diff --git a/minimal-examples/client/hello_world/CMakeLists.txt b/minimal-examples/client/hello_world/CMakeLists.txt index 632117210..8b389c505 100644 --- a/minimal-examples/client/hello_world/CMakeLists.txt +++ b/minimal-examples/client/hello_world/CMakeLists.txt @@ -1,11 +1,7 @@ project(lws-minimal-ss-hello_world C) cmake_minimum_required(VERSION 2.8.12) find_package(libwebsockets CONFIG REQUIRED) -list(APPEND CMAKE_MODULE_PATH ${LWS_CMAKE_DIR}) -include(CheckCSourceCompiles) -include(LwsCheckRequirements) -set(requirements 1) require_lws_config(LWS_ROLE_H1 1 requirements) require_lws_config(LWS_WITHOUT_CLIENT 0 requirements) require_lws_config(LWS_WITH_SECURE_STREAMS 1 requirements) diff --git a/minimal-examples/client/http-post/CMakeLists.txt b/minimal-examples/client/http-post/CMakeLists.txt index 6a4a47a19..927335f2b 100644 --- a/minimal-examples/client/http-post/CMakeLists.txt +++ b/minimal-examples/client/http-post/CMakeLists.txt @@ -1,11 +1,7 @@ project(lws-minimal-ss-http-post C) cmake_minimum_required(VERSION 2.8.12) find_package(libwebsockets CONFIG REQUIRED) -list(APPEND CMAKE_MODULE_PATH ${LWS_CMAKE_DIR}) -include(CheckCSourceCompiles) -include(LwsCheckRequirements) -set(requirements 1) require_lws_config(LWS_ROLE_H1 1 requirements) require_lws_config(LWS_WITHOUT_CLIENT 0 requirements) require_lws_config(LWS_WITH_SECURE_STREAMS 1 requirements) diff --git a/minimal-examples/client/ws-echo/CMakeLists.txt b/minimal-examples/client/ws-echo/CMakeLists.txt index 86759e4bb..37c89925a 100644 --- a/minimal-examples/client/ws-echo/CMakeLists.txt +++ b/minimal-examples/client/ws-echo/CMakeLists.txt @@ -1,11 +1,7 @@ project(lws-minimal-ss-ws-echo C) cmake_minimum_required(VERSION 2.8.12) find_package(libwebsockets CONFIG REQUIRED) -list(APPEND CMAKE_MODULE_PATH ${LWS_CMAKE_DIR}) -include(CheckCSourceCompiles) -include(LwsCheckRequirements) -set(requirements 1) require_lws_config(LWS_ROLE_H1 1 requirements) require_lws_config(LWS_WITHOUT_CLIENT 0 requirements) require_lws_config(LWS_WITH_SECURE_STREAMS 1 requirements) diff --git a/minimal-examples/server/hello_world/CMakeLists.txt b/minimal-examples/server/hello_world/CMakeLists.txt index 1a8fada6d..990ccf4c3 100644 --- a/minimal-examples/server/hello_world/CMakeLists.txt +++ b/minimal-examples/server/hello_world/CMakeLists.txt @@ -1,13 +1,9 @@ project(lws-minimal-ss-server-hello_world C) cmake_minimum_required(VERSION 2.8.12) find_package(libwebsockets CONFIG REQUIRED) -list(APPEND CMAKE_MODULE_PATH ${LWS_CMAKE_DIR}) -include(CheckCSourceCompiles) -include(LwsCheckRequirements) set(SRCS main.c ss-server.c) -set(requirements 1) require_lws_config(LWS_ROLE_H1 1 requirements) require_lws_config(LWS_WITH_SERVER 1 requirements) require_lws_config(LWS_WITH_SYS_SMD 1 requirements) diff --git a/minimal-examples/ssproxy/ssproxy-custom-transport-uart/CMakeLists.txt b/minimal-examples/ssproxy/ssproxy-custom-transport-uart/CMakeLists.txt index 4f9db511f..2f2a0318a 100644 --- a/minimal-examples/ssproxy/ssproxy-custom-transport-uart/CMakeLists.txt +++ b/minimal-examples/ssproxy/ssproxy-custom-transport-uart/CMakeLists.txt @@ -1,13 +1,9 @@ project(lws-minimal-ssproxy-custom-transport-uart C) cmake_minimum_required(VERSION 2.8.12) find_package(libwebsockets CONFIG REQUIRED) -list(APPEND CMAKE_MODULE_PATH ${LWS_CMAKE_DIR}) -include(CheckCSourceCompiles) -include(LwsCheckRequirements) set(SRCS main.c transport-serial.c) -set(requirements 1) require_lws_config(LWS_ROLE_H1 1 requirements) require_lws_config(LWS_WITHOUT_CLIENT 0 requirements) require_lws_config(LWS_WITH_SECURE_STREAMS 1 requirements) diff --git a/minimal-examples/ssproxy/ssproxy-socket/CMakeLists.txt b/minimal-examples/ssproxy/ssproxy-socket/CMakeLists.txt index db257bf4d..c49586fb2 100644 --- a/minimal-examples/ssproxy/ssproxy-socket/CMakeLists.txt +++ b/minimal-examples/ssproxy/ssproxy-socket/CMakeLists.txt @@ -1,13 +1,9 @@ project(lws-minimal-ss-proxy C) cmake_minimum_required(VERSION 2.8.12) find_package(libwebsockets CONFIG REQUIRED) -list(APPEND CMAKE_MODULE_PATH ${LWS_CMAKE_DIR}) -include(CheckCSourceCompiles) -include(LwsCheckRequirements) set(SRCS main.c) -set(requirements 1) require_lws_config(LWS_ROLE_H1 1 requirements) require_lws_config(LWS_WITHOUT_CLIENT 0 requirements) require_lws_config(LWS_WITH_SECURE_STREAMS 1 requirements)