Skip to content

Commit eea4473

Browse files
committed
On the user-defined-authn branch: sync with trunk r1927496.
git-svn-id: https://svn.apache.org/repos/asf/serf/branches/user-defined-authn@1927608 13f79535-47bb-0310-9956-ffa450edef68
2 parents fb4b669 + c5fe01e commit eea4473

File tree

10 files changed

+411
-182
lines changed

10 files changed

+411
-182
lines changed

CMakeLists.txt

Lines changed: 125 additions & 73 deletions
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,11 @@ message(WARNING
4949
"Some features are not supported and the build "
5050
"has not been tested on many supported platforms.")
5151

52+
# Optional dependency options
53+
option(USE_BROTLI "Use the Brotli decoding library if available" ON)
54+
option(USE_GSSAPI "Use GSSAPI authentication if available" ON)
55+
option(USE_UNBOUND "Use the Unbound async resolver if available" ON)
56+
5257
# Build options
5358
option(DEBUG "Enable debugging info and strict compile warnings" OFF)
5459
option(DOT_CLANGD "Generate a .clangd file at the root of the source tree" OFF)
@@ -84,6 +89,7 @@ if(NOT CMAKE_BUILD_TYPE)
8489
endif()
8590

8691
include(GNUInstallDirs)
92+
include(SerfFindPkgConfig)
8793
include(SerfPlatform)
8894

8995
# On the Mac: Use dependencies from Homebrew or MacPorts
@@ -242,21 +248,57 @@ if(EXPAT)
242248
endif(EXPAT)
243249

244250
# Find required dependencies
245-
find_package(OpenSSL REQUIRED)
246-
find_package(ZLIB REQUIRED)
247251
find_package(APR REQUIRED)
248252
find_package(APRUtil REQUIRED)
249253

254+
255+
SerfFindPkgConfig(OpenSSL_SSL OPENSSL_ROOT_DIR libssl OpenSSL::SSL)
256+
SerfFindPkgConfig(OpenSSL_Crypto OPENSSL_ROOT_DIR libcrypto OpenSSL::Crypto)
257+
if(NOT (OpenSSL_SSL_FOUND AND OpenSSL_Crypto_FOUND))
258+
find_package(OpenSSL REQUIRED)
259+
if(OpenSSL_FOUND)
260+
set(OPENSSL_PC_LIBS ${OPENSSL_LIBRARIES})
261+
endif()
262+
else()
263+
set(OpenSSL_FOUND TRUE)
264+
set(OPENSSL_INCLUDE_DIR ${OPENSSL_SSL_INCLUDE_DIR})
265+
set(OPENSSL_PC_REQUIRES ${OPENSSL_SSL_PC_REQUIRES} ${OPENSSL_CRYPTO_PC_REQUIRES})
266+
set(OPENSSL_LIBRARIES ${OPENSSL_SSL_LIBRARY} ${OPENSSL_CRYPTO_LIBRARY})
267+
endif()
268+
269+
SerfFindPkgConfig(ZLIB ZLIB_ROOT zlib ZLIB::ZLIB)
270+
if(NOT ZLIB_FOUND)
271+
find_package(ZLIB REQUIRED)
272+
set(ZLIB_PC_LIBS ${ZLIB_LIBRARIES})
273+
endif()
274+
250275
# We do not want or need OpenSSL's compatibility macros.
251276
list(APPEND SERF_C_DEFINES "OPENSSL_NO_DEPRECATED")
252277

253278
# Hide OpenSSL's _fp() API.
254279
list(APPEND SERF_C_DEFINES "OPENSSL_NO_STDIO")
255280

256281
# Find optional dependencies
257-
find_package(Brotli)
282+
if(USE_BROTLI)
283+
SerfFindPkgConfig(Brotli Brotli_ROOT libbrotlidec Brotli::Decode)
284+
if(NOT Brotli_FOUND)
285+
find_package(Brotli)
286+
if(Brotli_FOUND)
287+
set(BROTLI_PC_LIBS ${BROTLI_DECODE_LIBRARY})
288+
endif()
289+
endif()
290+
endif()
291+
258292
if(NOT SERF_WINDOWS)
259-
find_package(GSSAPI)
293+
if(USE_GSSAPI)
294+
SerfFindPkgConfig(GSSAPI GSSAPI_ROOT krb5-gssapi KRB5::GSSAPI)
295+
if(NOT GSSAPI_FOUND)
296+
find_package(GSSAPI)
297+
if(GSSAPI_FOUND)
298+
set(GSSAPI_PC_LIBS ${GSSAPI_LIBRARIES})
299+
endif()
300+
endif()
301+
endif()
260302
else()
261303
# We use SSPI on Windows and there's no Kerberos/GSSAPI port there.
262304
set(GSSAPI_FOUND FALSE)
@@ -265,36 +307,17 @@ else()
265307
endif()
266308
endif()
267309

268-
269-
# FIXME: VERYTEMPORARY, figure out FindUnbound.cmake first.
270-
set(Unbound_FOUND FALSE)
271-
if (Unbound_FOUND)
272-
set(UNBOUND_INCLUDE_DIR "/opt/homebrew/opt/unbound/include")
273-
set(UNBOUND_LIBRARIES "/opt/homebrew/opt/unbound/lib/libunbound.dylib")
274-
# set(UNBOUND_LIBRARIES "/usr/lib/aarch64-linux-gnu/libunbound.so")
275-
# set(UNBOUND_LIBRARIES "/usr/lib64/libunbound.so")
276-
add_library(Unbound::Unbound UNKNOWN IMPORTED)
277-
set_target_properties(Unbound::Unbound PROPERTIES
278-
INTERFACE_INCLUDE_DIRECTORIES "${UNBOUND_INCLUDE_DIR}")
279-
set_target_properties(Unbound::Unbound PROPERTIES
280-
IMPORTED_LOCATION "${UNBOUND_LIBRARIES}")
281-
endif(Unbound_FOUND)
282-
283-
# Calculate the set of private and public targets
284-
set(SERF_PRIVATE_TARGETS OpenSSL::Crypto OpenSSL::SSL ZLIB::ZLIB)
285-
if(Brotli_FOUND)
286-
list(APPEND SERF_PRIVATE_TARGETS Brotli::Decode)
287-
endif()
288-
if(GSSAPI_FOUND)
289-
list(APPEND SERF_C_DEFINES "SERF_HAVE_GSSAPI")
290-
list(APPEND SERF_PRIVATE_TARGETS KRB5::GSSAPI)
291-
endif()
292-
if(Unbound_FOUND)
293-
list(APPEND SERF_C_DEFINES "SERF_HAVE_ASYNC_RESOLVER=1")
294-
list(APPEND SERF_C_DEFINES "SERF_HAVE_UNBOUND")
295-
list(APPEND SERF_PRIVATE_TARGETS Unbound::Unbound)
310+
if(USE_UNBOUND)
311+
SerfFindPkgConfig(Unbound Unbound_ROOT libunbound Unbound::Unbound)
312+
if(NOT Unbound_FOUND)
313+
find_package(Unbound)
314+
if(Unbound_FOUND)
315+
set(UNBOUND_PC_LIBS "${UNBOUND_LIBRARY}")
316+
endif()
317+
endif()
296318
endif()
297319

320+
# Calculate the set of private and public targets
298321
if(APR_STATIC)
299322
if(SERF_WINDOWS)
300323
list(APPEND SERF_PUBLIC_TARGETS APR::APR_static)
@@ -311,6 +334,20 @@ else(APR_STATIC)
311334
endif()
312335
endif(APR_STATIC)
313336

337+
list(APPEND SERF_PRIVATE_TARGETS OpenSSL::SSL OpenSSL::Crypto ZLIB::ZLIB)
338+
if(Brotli_FOUND)
339+
list(APPEND SERF_PRIVATE_TARGETS Brotli::Decode)
340+
endif()
341+
if(GSSAPI_FOUND)
342+
list(APPEND SERF_C_DEFINES "SERF_HAVE_GSSAPI")
343+
list(APPEND SERF_PRIVATE_TARGETS KRB5::GSSAPI)
344+
endif()
345+
if(Unbound_FOUND)
346+
list(APPEND SERF_C_DEFINES "SERF_HAVE_ASYNC_RESOLVER=1")
347+
list(APPEND SERF_C_DEFINES "SERF_HAVE_UNBOUND=1")
348+
list(APPEND SERF_PRIVATE_TARGETS Unbound::Unbound)
349+
endif()
350+
314351
# Feature tests
315352
include(SerfChecks)
316353
CheckNotFunction("BIO_set_init" "NULL, 0" "SERF_NO_SSL_BIO_WRAPPERS"
@@ -458,11 +495,9 @@ if(NOT SKIP_SHARED)
458495
list(APPEND SERF_TARGETS serf_shared)
459496

460497
if(SERF_WINDOWS)
461-
string(TOLOWER "${CMAKE_BUILD_TYPE}" config)
462-
if(NOT "${config}" STREQUAL "release")
463-
install(FILES $<TARGET_PDB_FILE:serf_shared>
464-
DESTINATION "${SERF_INSTALL_RUNTIME}")
465-
endif()
498+
install(FILES $<TARGET_PDB_FILE:serf_shared>
499+
CONFIGURATIONS Debug RelWithDebinfo
500+
DESTINATION "${SERF_INSTALL_RUNTIME}")
466501
endif()
467502
endif()
468503

@@ -498,41 +533,59 @@ install(TARGETS ${SERF_TARGETS}
498533
install(FILES ${HEADERS} DESTINATION "${SERF_INSTALL_HEADERS}")
499534

500535
# Generate the pkg-config module file.
501-
if(NOT SERF_WINDOWS)
502-
set(SERF_PC_FILE "serf-${SERF_MAJOR_VERSION}.pc")
536+
set(SERF_PC_FILE "serf-${SERF_MAJOR_VERSION}.pc")
503537

504-
# Use a separate variable scope for the substitutions in serf.pc.in.
505-
function(make_pkgconfig)
506-
# Use a relative prefix to create a relocatable PC file.
538+
# Use a separate variable scope for the substitutions in serf.pc.in.
539+
function(make_pkgconfig)
540+
# Use a relative prefix to create a relocatable PC file.
541+
if(SERF_WINDOWS)
542+
file(RELATIVE_PATH relfragment "X:\\${SERF_INSTALL_PKGCONFIG}" "X:\\")
543+
else()
507544
file(RELATIVE_PATH relfragment "/${SERF_INSTALL_PKGCONFIG}" "/")
508-
file(TO_CMAKE_PATH "\${pcfiledir}/${relfragment}" relprefix)
509-
510-
set(PREFIX ${relprefix})
511-
set(INCLUDE_SUBDIR ${SERF_INCLUDE_SUBDIR})
512-
set(LIBDIR \${prefix}/${SERF_INSTALL_LIBRARIES})
513-
set(VERSION ${SERF_VERSION})
514-
set(MAJOR ${SERF_MAJOR_VERSION})
515-
set(LIBS
516-
${APR_LDFLAGS}
517-
${APR_LIBRARIES}
518-
${APR_EXTRALIBS}
519-
${APRUTIL_LDFLAGS}
520-
${APRUTIL_LIBRARIES}
521-
${APRUTIL_EXTRALIBS}
522-
${BROTLI_COMMON_LIBRARY}
523-
${BROTLI_DECODE_LIBRARY}
524-
${GSSAPI_LIBRARIES}
525-
${ZLIB_LIBRARIES}
526-
)
527-
list(REMOVE_DUPLICATES LIBS)
528-
list(JOIN LIBS " " LIBS)
529-
configure_file("build/serf.pc.in" "${SERF_PC_FILE}" @ONLY)
530-
endfunction()
531-
532-
make_pkgconfig()
533-
install(FILES "${CMAKE_CURRENT_BINARY_DIR}/${SERF_PC_FILE}"
534-
DESTINATION "${SERF_INSTALL_PKGCONFIG}")
535-
endif()
545+
endif()
546+
file(TO_CMAKE_PATH "\${pcfiledir}/${relfragment}" relprefix)
547+
548+
set(PREFIX ${relprefix})
549+
set(INCLUDE_SUBDIR ${SERF_INCLUDE_SUBDIR})
550+
set(LIBDIR \${prefix}/${SERF_INSTALL_LIBRARIES})
551+
set(VERSION ${SERF_VERSION})
552+
set(MAJOR ${SERF_MAJOR_VERSION})
553+
set(REQUIRES
554+
${OPENSSL_PC_REQUIRES}
555+
${ZLIB_PC_REQUIRES}
556+
${BROTLI_PC_REQUIRES}
557+
${GSSAPI_PC_REQUIRES}
558+
${UNBOUND_PC_REQUIRES}
559+
)
560+
set(CFLAGS
561+
${APR_CFLAGS}
562+
)
563+
set(LIBS
564+
${APR_LDFLAGS}
565+
${APR_LIBRARIES}
566+
${APR_EXTRALIBS}
567+
${APRUTIL_LDFLAGS}
568+
${APRUTIL_LIBRARIES}
569+
${APRUTIL_EXTRALIBS}
570+
${OPENSSL_PC_LIBS}
571+
${ZLIB_PC_LIBS}
572+
${BROTLI_PC_LIBS}
573+
${GSSAPI_PC_LIBS}
574+
${UNBOUND_PC_LIBS}
575+
${SERF_STANDARD_LIBRARIES}
576+
)
577+
list(REMOVE_DUPLICATES REQUIRES)
578+
list(JOIN REQUIRES " " REQUIRES)
579+
list(REMOVE_DUPLICATES CFLAGS)
580+
list(JOIN CFLAGS " " CFLAGS)
581+
list(REMOVE_DUPLICATES LIBS)
582+
list(JOIN LIBS " " LIBS)
583+
configure_file("build/serf.pc.in" "${SERF_PC_FILE}" @ONLY)
584+
endfunction()
585+
586+
make_pkgconfig()
587+
install(FILES "${CMAKE_CURRENT_BINARY_DIR}/${SERF_PC_FILE}"
588+
DESTINATION "${SERF_INSTALL_PKGCONFIG}")
536589

537590

538591
if(NOT SKIP_TESTS)
@@ -583,7 +636,7 @@ endif()
583636
if("SERF_HAVE_SSPI" IN_LIST SERF_C_DEFINES)
584637
set(_have_sspi ON)
585638
endif()
586-
if ("SERF_HAVE_UNBOUND" IN_LIST SERF_C_DEFINES)
639+
if ("SERF_HAVE_UNBOUND=1" IN_LIST SERF_C_DEFINES)
587640
set(_have_unbound "EXPERIMENTAL")
588641
endif()
589642

@@ -609,6 +662,5 @@ message(STATUS " headers: ................ : ${SERF_INSTALL_HEADERS}")
609662
message(STATUS " libraries: .............. : ${SERF_INSTALL_LIBRARIES}")
610663
if(SERF_WINDOWS)
611664
message(STATUS " dynamic libraries: ...... : ${SERF_INSTALL_RUNTIME}")
612-
else()
613-
message(STATUS " pkg-config file: ........ : ${SERF_INSTALL_PKGCONFIG}")
614665
endif()
666+
message(STATUS " pkg-config file: ........ : ${SERF_INSTALL_PKGCONFIG}")

0 commit comments

Comments
 (0)