summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--.gitignore1
-rw-r--r--libserf-1.3.9-bio-ctrl.patch21
-rw-r--r--libserf-1.3.9-cmake.patch1274
-rw-r--r--libserf-1.3.9-errgetfunc.patch13
-rw-r--r--libserf-1.3.9-gssapi.patch60
-rw-r--r--libserf-norpath.patch34
-rw-r--r--libserf-python3.patch60
-rw-r--r--libserf.spec204
-rw-r--r--sources1
9 files changed, 1668 insertions, 0 deletions
diff --git a/.gitignore b/.gitignore
index e69de29..1e44932 100644
--- a/.gitignore
+++ b/.gitignore
@@ -0,0 +1 @@
+/serf-1.3.9.tar.bz2
diff --git a/libserf-1.3.9-bio-ctrl.patch b/libserf-1.3.9-bio-ctrl.patch
new file mode 100644
index 0000000..b679edf
--- /dev/null
+++ b/libserf-1.3.9-bio-ctrl.patch
@@ -0,0 +1,21 @@
+diff --git a/buckets/ssl_buckets.c b/buckets/ssl_buckets.c
+index b01e5359db08..3c8b7e2a685f 100644
+--- a/buckets/ssl_buckets.c
++++ b/buckets/ssl_buckets.c
+@@ -407,7 +407,7 @@ static int bio_bucket_destroy(BIO *bio)
+
+ static long bio_bucket_ctrl(BIO *bio, int cmd, long num, void *ptr)
+ {
+- long ret = 1;
++ long ret = 0;
+
+ switch (cmd) {
+ default:
+@@ -415,6 +415,7 @@ static long bio_bucket_ctrl(BIO *bio, int cmd, long num, void *ptr)
+ break;
+ case BIO_CTRL_FLUSH:
+ /* At this point we can't force a flush. */
++ ret = 1;
+ break;
+ case BIO_CTRL_PUSH:
+ case BIO_CTRL_POP:
diff --git a/libserf-1.3.9-cmake.patch b/libserf-1.3.9-cmake.patch
new file mode 100644
index 0000000..91ae367
--- /dev/null
+++ b/libserf-1.3.9-cmake.patch
@@ -0,0 +1,1274 @@
+commit 092a90b38b0988c0d9faa23d44aa91362b2a78b3
+Author: Tomas Korbar <tkorbar@redhat.com>
+Date: Wed Jun 23 13:50:36 2021 +0200
+
+ Backport cmake support
+
+diff --git a/CMakeLists.txt b/CMakeLists.txt
+new file mode 100644
+index 0000000..3f10eae
+--- /dev/null
++++ b/CMakeLists.txt
+@@ -0,0 +1,368 @@
++# ===================================================================
++# Licensed to the Apache Software Foundation (ASF) under one
++# or more contributor license agreements. See the NOTICE file
++# distributed with this work for additional information
++# regarding copyright ownership. The ASF licenses this file
++# to you under the Apache License, Version 2.0 (the
++# "License"); you may not use this file except in compliance
++# with the License. You may obtain a copy of the License at
++#
++# http://www.apache.org/licenses/LICENSE-2.0
++#
++# Unless required by applicable law or agreed to in writing,
++# software distributed under the License is distributed on an
++# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
++# KIND, either express or implied. See the License for the
++# specific language governing permissions and limitations
++# under the License.
++# ===================================================================
++
++# ===================================================================
++# The following variables can be set to locate dependencies that
++# are not installed in standard paths. These variables are used
++# by the find_package() modules.
++#
++# APR_ROOT - Path to APR's install area
++# APRUtil_ROOT - Path to APR-Util's install area
++# OPENSSL_ROOT_DIR - Path to OpenSSL's install area
++# ZLIB_ROOT - Path to zlib's install area
++# ===================================================================
++
++cmake_minimum_required(VERSION 3.0)
++
++# Silence warnings about ${<PackageName>_ROOT} in CMake 3.12+
++if((${CMAKE_MAJOR_VERSION} GREATER 3) OR (${CMAKE_MINOR_VERSION} GREATER 11))
++ cmake_policy(SET CMP0074 NEW)
++endif()
++
++set(SERF_SOURCE_DIR "${CMAKE_CURRENT_SOURCE_DIR}")
++set(CMAKE_MODULE_PATH "${SERF_SOURCE_DIR}/build")
++include(SerfVersion)
++
++project("Serf" VERSION ${SERF_VERSION} LANGUAGES C)
++message(WARNING
++ "Serf's CMake build is considered EXPERIMENTAL. "
++ "Some features are not supported and the build "
++ "has not been tested on many supported platforms.")
++
++
++# Build options
++option(DEBUG "Enable debugging info and strict compile warnings" OFF)
++option(SKIP_SHARED "Disable building shared Serf libraries" OFF)
++option(SKIP_STATIC "Disable building static Serf libraries" OFF)
++option(LIBDIR "Install directory for architecture-dependent libraries" "")
++option(GSSAPI "Path to GSSAPI's install area" "")
++option(BROTLI "Path to Brotli's install area" "")
++option(DISABLE_LOGGING "Disable the logging framework at compile time" OFF)
++option(SKIP_TESTS "Disable building the unit tests and utilities" OFF)
++option(ENABLE_SLOW_TESTS "Enable long-running unit tests" OFF)
++
++# Platform-specific build options
++option(APR_STATIC "Windows: Link with static APR/-Util libraries" OFF)
++option(EXPAT "Windows: optional path to Expat's install area for APR_STATIC" "")
++option(RELATIVE_RPATH "macOS: Use @rpath in installed shared library" OFF)
++
++if(SKIP_SHARED AND SKIP_STATIC)
++ message(FATAL_ERROR "You have disabled both shared and static library builds.")
++endif()
++
++# Initialize the build type if it was not set on the command line.
++if(NOT CMAKE_BUILD_TYPE)
++ if(DEBUG)
++ set(CMAKE_BUILD_TYPE DEBUG CACHE STRING "Default to debug build.")
++ else()
++ set(CMAKE_BUILD_TYPE RELEASE CACHE STRING "Default to release build.")
++ endif()
++endif()
++
++include(SerfPlatform)
++include(SerfWindowsToolkit)
++
++
++# Public headers
++list(APPEND HEADERS
++ "serf.h"
++ "serf_bucket_types.h"
++ "serf_bucket_util.h"
++)
++
++# List of symbols that should not be exported from the shared library.
++list(APPEND EXPORTS_BLACKLIST
++ "serf_connection_switch_protocol"
++ "serf_http_protocol_create"
++ "serf_https_protocol_create"
++ "serf_http_request_queue"
++)
++
++# Serf library source files
++list(APPEND SOURCES
++ "context.c"
++ "incoming.c"
++ "outgoing.c"
++ "ssltunnel.c"
++ "auth/auth.c"
++ "auth/auth_basic.c"
++ "auth/auth_digest.c"
++ "auth/auth_spnego.c"
++ "auth/auth_spnego_gss.c"
++ "auth/auth_spnego_sspi.c"
++ "buckets/aggregate_buckets.c"
++ "buckets/allocator.c"
++ "buckets/barrier_buckets.c"
++ "buckets/buckets.c"
++ "buckets/bwtp_buckets.c"
++ "buckets/chunk_buckets.c"
++ "buckets/dechunk_buckets.c"
++ "buckets/deflate_buckets.c"
++ "buckets/file_buckets.c"
++ "buckets/headers_buckets.c"
++ "buckets/iovec_buckets.c"
++ "buckets/limit_buckets.c"
++ "buckets/mmap_buckets.c"
++ "buckets/request_buckets.c"
++ "buckets/response_body_buckets.c"
++ "buckets/response_buckets.c"
++ "buckets/simple_buckets.c"
++ "buckets/socket_buckets.c"
++ "buckets/ssl_buckets.c"
++)
++
++if(SERF_WINDOWS)
++ # Generate the .def file for the Windows DLL import library.
++ set(SERF_DEF_FILE "${CMAKE_CURRENT_BINARY_DIR}/serf.def")
++ add_custom_command(
++ OUTPUT "${SERF_DEF_FILE}"
++ DEPENDS ${HEADERS}
++ COMMAND ${CMAKE_COMMAND}
++ -DCMAKE_SYSTEM_NAME="${CMAKE_SYSTEM_NAME}"
++ -DCMAKE_MODULE_PATH="${CMAKE_MODULE_PATH}"
++ -DSERF_DEF_BLACKLIST="${EXPORTS_BLACKLIST}"
++ -DSERF_DEF_HEADERS="${HEADERS}"
++ -DSERF_DEF_FILE="${SERF_DEF_FILE}"
++ -P "build/SerfWindowsGenDef.cmake"
++ WORKING_DIRECTORY "${SERF_SOURCE_DIR}"
++ )
++ set(SHARED_SOURCES "serf.rc" "${SERF_DEF_FILE}")
++
++ # Static OpenSSL, APR and APR-Util need additional libraries that are not
++ # linked by default by CMake. These will be ignored by the linker if they're
++ # not actually used.
++ set(SERF_STANDARD_LIBRARIES
++ "crypt32.lib"
++ "mswsock.lib"
++ "rpcrt4.lib"
++ "secur32.lib"
++ "ws2_32.lib"
++ )
++endif(SERF_WINDOWS)
++
++
++# Process build options for dependency search
++if(GSSAPI)
++ message(WARNING "option GSSAPI is not implemented")
++endif()
++
++if(BROTLI)
++ message(WARNING "option BROTLI is not implemented")
++endif()
++
++if(SERF_WINDOWS)
++ if(EXPAT)
++ set(PC_EXPAT_INCLUDE_DIRS "${EXPAT}/include")
++ set(PC_EXPAT_LIBRARY_DIRS "${EXPAT}/lib")
++ endif(EXPAT)
++else(SERF_WINDOWS)
++ if(EXPAT)
++ message(WARNING "option EXPAT is not implemented on this platform")
++ endif(EXPAT)
++endif(SERF_WINDOWS)
++
++# Find dependencies
++find_package(OpenSSL)
++find_package(ZLIB)
++find_package(APR)
++find_package(APRUtil)
++
++# Calculate the set of private and public targets
++set(SERF_PRIVATE_TARGETS OpenSSL::Crypto OpenSSL::SSL ZLIB::ZLIB)
++
++if(APR_STATIC)
++ if(SERF_WINDOWS)
++ list(APPEND SERF_PUBLIC_TARGETS APR::APR_static)
++ if(NOT APR_CONTAINS_APRUTIL)
++ list(APPEND SERF_PUBLIC_TARGETS APR::APRUTIL_static)
++ endif()
++ add_definitions("/DAPR_DECLARE_STATIC" "/DAPU_DECLARE_STATIC")
++ else(SERF_WINDOWS)
++ message(WARNING "option APR_STATIC is not implemented on this platform")
++ endif(SERF_WINDOWS)
++else(APR_STATIC)
++ list(APPEND SERF_PUBLIC_TARGETS APR::APR)
++ if(NOT APR_CONTAINS_APRUTIL)
++ list(APPEND SERF_PUBLIC_TARGETS APR::APRUTIL)
++ endif()
++endif(APR_STATIC)
++
++# Feature tests
++include(SerfChecks)
++CheckNotFunction("BIO_set_init" "SERF_NO_SSL_BIO_WRAPPERS" ${OPENSSL_LIBRARIES} ${SERF_STANDARD_LIBRARIES})
++CheckNotFunction("X509_STORE_get0_param" "SERF_NO_SSL_X509_STORE_WRAPPERS" ${OPENSSL_LIBRARIES} ${SERF_STANDARD_LIBRARIES})
++CheckNotFunction("X509_get0_notBefore" "SERF_NO_SSL_X509_GET0_NOTBEFORE" ${OPENSSL_LIBRARIES} ${SERF_STANDARD_LIBRARIES})
++CheckNotFunction("X509_get0_notAfter" "SERF_NO_SSL_X509_GET0_NOTAFTER" ${OPENSSL_LIBRARIES} ${SERF_STANDARD_LIBRARIES})
++CheckNotFunction("X509_STORE_CTX_get0_chain" "SERF_NO_SSL_X509_GET0_CHAIN" ${OPENSSL_LIBRARIES} ${SERF_STANDARD_LIBRARIES})
++CheckNotFunction("ASN1_STRING_get0_data" "SERF_NO_SSL_ASN1_STRING_GET0_DATA" ${OPENSSL_LIBRARIES} ${SERF_STANDARD_LIBRARIES})
++CheckFunction("CRYPTO_set_locking_callback" "SERF_HAVE_SSL_LOCKING_CALLBACKS" ${OPENSSL_LIBRARIES} ${SERF_STANDARD_LIBRARIES})
++CheckFunction("OpenSSL_version_num" "SERF_HAVE_OPENSSL_VERSION_NUM" ${OPENSSL_LIBRARIES} ${SERF_STANDARD_LIBRARIES})
++CheckFunction("SSL_set_alpn_protos" "SERF_HAVE_OPENSSL_ALPN" ${OPENSSL_LIBRARIES} ${SERF_STANDARD_LIBRARIES})
++CheckFunctionMacro("OPENSSL_malloc_init" "SERF_HAVE_OPENSSL_MALLOC_INIT" "openssl/crypto.h"
++ "${OPENSSL_INCLUDE_DIR}" ${OPENSSL_LIBRARIES} ${SERF_STANDARD_LIBRARIES})
++CheckFunctionMacro("SSL_library_init" "SERF_HAVE_OPENSSL_SSL_LIBRARY_INIT" "openssl/ssl.h"
++ "${OPENSSL_INCLUDE_DIR}" ${OPENSSL_LIBRARIES} ${SERF_STANDARD_LIBRARIES})
++CheckHeader("openssl/applink.c" "SERF_HAVE_OPENSSL_APPLINK_C" ${OPENSSL_INCLUDE_DIR})
++CheckHeader("stdbool.h" "HAVE_STDBOOL_H=1")
++CheckType("OSSL_HANDSHAKE_STATE" "openssl/ssl.h" "SERF_HAVE_OSSL_HANDSHAKE_STATE" ${OPENSSL_INCLUDE_DIR})
++
++if(CMAKE_COMPILER_IS_GNUCC OR (CMAKE_C_COMPILER_ID MATCHES "Clang"))
++ set(CC_LIKE_GNUC TRUE)
++endif()
++
++# Process other build options
++if(LIBDIR)
++ message(WARNING "option LIBDIR is not implemented yet")
++endif()
++
++if(DEBUG)
++ add_definitions("-DDEBUG" "-D_DEBUG")
++endif()
++
++if(DISABLE_LOGGING)
++ add_definitions("-DSERF_DISABLE_LOGGING")
++endif()
++
++if(ENABLE_SLOW_TESTS)
++ add_definitions("-DSERF_TEST_DEFLATE_4GBPLUS_BUCKETS")
++endif()
++
++
++# Set common compiler flags
++if(NOT MSVC)
++ if(CC_LIKE_GNUC)
++ set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wall")
++ set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wdeclaration-after-statement")
++ set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wmissing-prototypes")
++ set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -std=c89")
++
++ set(CMAKE_C_FLAGS_DEBUG "${CMAKE_C_FLAGS_DEBUG} -O0")
++ endif()
++else()
++ # Warning level 4, no unused argument warnings
++ set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} /W4 /wd4100")
++ # Conditional expression is constant
++ set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} /wd4127")
++ # Assignment within conditional expression
++ set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} /wd4706")
++
++ add_definitions(
++ "/DWIN32" "/DWIN32_LEAN_AND_MEAN"
++ "/DNOUSER" "/DNOGDI" "/DNONLS" "/DNOCRYPT"
++ "/D_CRT_SECURE_NO_WARNINGS"
++ "/D_CRT_NONSTDC_NO_WARNINGS"
++ )
++ if(SERF_WIN64)
++ add_definitions("/DWIN64")
++ endif()
++
++ set(CMAKE_IMPORT_LIBRARY_PREFIX "lib")
++ set(CMAKE_SHARED_LIBRARY_PREFIX "lib")
++endif(NOT MSVC)
++
++# Define all targets
++if(NOT SKIP_SHARED)
++ add_library(serf_shared SHARED ${SOURCES} ${SHARED_SOURCES})
++ target_compile_options(serf_shared PUBLIC ${APR_CFLAGS})
++ target_include_directories(serf_shared PUBLIC ${SERF_SOURCE_DIR})
++ target_link_libraries(serf_shared
++ PRIVATE ${SERF_PRIVATE_TARGETS}
++ ${SERF_STANDARD_LIBRARIES}
++ PUBLIC ${SERF_PUBLIC_TARGETS})
++ set_target_properties(serf_shared PROPERTIES
++ VERSION ${SERF_VERSION}
++ SOVERSION ${SERF_SOVERSION})
++ if(SERF_DARWIN AND NOT RELATIVE_RPATH)
++ set_target_properties(serf_shared PROPERTIES
++ INSTALL_NAME_DIR "${CMAKE_INSTALL_PREFIX}/lib")
++ endif()
++ set(SERF_TARGETS "serf_shared")
++
++ if(SERF_WINDOWS)
++ install(FILES $<TARGET_PDB_FILE:serf_shared> DESTINATION "bin")
++ endif()
++endif()
++
++if(NOT SKIP_STATIC)
++ add_library(serf_static STATIC ${SOURCES})
++ target_compile_options(serf_static PUBLIC ${APR_CFLAGS})
++ target_include_directories(serf_static PUBLIC ${SERF_SOURCE_DIR})
++ target_link_libraries(serf_static
++ ${SERF_PRIVATE_TARGETS}
++ ${SERF_PUBLIC_TARGETS}
++ ${SERF_STANDARD_LIBRARIES})
++ list(APPEND SERF_TARGETS "serf_static")
++endif()
++
++set_target_properties(${SERF_TARGETS}
++ PROPERTIES
++ OUTPUT_NAME "serf-${SERF_MAJOR_VERSION}")
++
++install(TARGETS ${SERF_TARGETS}
++ ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}
++ LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
++ RUNTIME DESTINATION "bin")
++
++if(NOT SERF_WINDOWS)
++ set(SERF_INCLUDE_SUBDIR "serf-${SERF_MAJOR_VERSION}")
++endif()
++install(FILES ${HEADERS} DESTINATION "include/${SERF_INCLUDE_SUBDIR}")
++
++
++# Generate the pkg-config module file.
++if(NOT SERF_WINDOWS)
++ # Use a separate variable scope for the substitutions in serf.pc.in.
++ function(make_pkgconfig)
++ set(PREFIX ${CMAKE_INSTALL_PREFIX})
++ if(NOT LIBDIR)
++ set(LIBDIR "\${prefix}/lib")
++ endif()
++ set(INCLUDE_SUBDIR ${SERF_INCLUDE_SUBDIR})
++ set(VERSION ${SERF_VERSION})
++ set(MAJOR ${SERF_MAJOR_VERSION})
++ set(SERF_INTERFACE_LIBS
++ ${APR_LIBRARIES}
++ ${APR_EXTRALIBS}
++ ${APRUTIL_LIBRARIES}
++ ${APRUTIL_EXTRALIBS}
++ )
++ list(REMOVE_DUPLICATES SERF_INTERFACE_LIBS)
++ unset(LIBS)
++ foreach(DEPLIB ${SERF_INTERFACE_LIBS})
++ string(APPEND LIBS " ${DEPLIB}")
++ endforeach()
++ configure_file("build/serf.pc.in" "serf.pc" @ONLY)
++ endfunction()
++
++ make_pkgconfig()
++ install(FILES "${CMAKE_CURRENT_BINARY_DIR}/serf.pc"
++ DESTINATION "share/pkgconfig")
++endif()
++
++
++if(NOT SKIP_TESTS)
++ if(SKIP_STATIC)
++ message(WARNING "The tests depend on the Serf static library")
++ message(STATUS "Skipping tests; to silence this message, either remove")
++ message(STATUS "the SKIP_STATIC option or add the SKIP_TESTS option.")
++ else()
++ enable_testing()
++ add_subdirectory(test)
++ endif()
++endif()
+diff --git a/build/FindAPR.cmake b/build/FindAPR.cmake
+new file mode 100644
+index 0000000..073ffe7
+--- /dev/null
++++ b/build/FindAPR.cmake
+@@ -0,0 +1,269 @@
++# ===================================================================
++# Licensed to the Apache Software Foundation (ASF) under one
++# or more contributor license agreements. See the NOTICE file
++# distributed with this work for additional information
++# regarding copyright ownership. The ASF licenses this file
++# to you under the Apache License, Version 2.0 (the
++# "License"); you may not use this file except in compliance
++# with the License. You may obtain a copy of the License at
++#
++# http://www.apache.org/licenses/LICENSE-2.0
++#
++# Unless required by applicable law or agreed to in writing,
++# software distributed under the License is distributed on an
++# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
++# KIND, either express or implied. See the License for the
++# specific language governing permissions and limitations
++# under the License.
++# ===================================================================
++
++cmake_minimum_required(VERSION 3.0)
++
++#.rst:
++# FindAPR
++# --------
++#
++# Find the native Apache Portable Runtime includes and library.
++#
++# IMPORTED Targets
++# ^^^^^^^^^^^^^^^^
++#
++# This module defines :prop_tgt:`IMPORTED` target ``APR::APR``, if
++# APR has been found. On Windows, it may define the :prop_tgt:`IMPORTED`
++# target ``APR::APR_static`` if the static libraries are found.
++#
++# Result Variables
++# ^^^^^^^^^^^^^^^^
++#
++# This module defines the following variables:
++#
++# ::
++#
++# APR_FOUND - True if APR was found.
++# APR_VERSION - The version of APR found (x.y.z)
++# APR_CONTAINS_APRUTIL - True if the APR major version is 2 or greater.
++# APR_INCLUDES - Where to find apr.h, etc.
++# APR_LIBRARIES - Linker switches to use with ld to link against APR
++#
++# ::
++#
++# APR_EXTRALIBS - Additional libraries to link against
++# APR_CFLAGS - The flags to use to compile.
++# APR_STATIC_LIBS - On Windows: list of APR static libraries
++# APR_RUNTIME_LIBS - On Windows: list of APR runtime DLLs
++#
++# Hints
++# ^^^^^
++#
++# A user may set ``APR_ROOT`` to an APR installation root to tell this
++# module where to look. This variable must be defined on Windows.
++
++
++# -------------------------------------------------------------------
++# Common utility functions for FindAPR.cmaks and FindAPRtil.cmake
++# -------------------------------------------------------------------
++
++# Run the APR/Util configuration program
++function(_apru_config _program _varname _regexp)
++ execute_process(COMMAND ${_program} ${ARGN}
++ OUTPUT_VARIABLE _apru_output
++ RESULT_VARIABLE _apru_failed)
++
++ if(_apru_failed)
++ message(FATAL_ERROR "${_program} ${ARGN} failed")
++ else()
++ # Join multi-line outupt
++ string(REGEX REPLACE "[\r\n]" "" _apru_output "${_apru_output}")
++
++ # Optionally apply the regular expression filter
++ if(NOT ${_regexp} STREQUAL "")
++ string(REGEX REPLACE "${_regexp}" " " _apru_output "${_apru_output}")
++ endif()
++
++ # Remove leading and trailing spaces
++ string(REGEX REPLACE "^ +" "" _apru_output "${_apru_output}")
++ string(REGEX REPLACE " +$" "" _apru_output "${_apru_output}")
++
++ separate_arguments(_apru_output)
++ set(${_varname} ${_apru_output} PARENT_SCOPE)
++ endif()
++endfunction(_apru_config)
++
++# Parse the APR/Util version number from the header
++function(_apru_version _version_varname _major_varname _minor_varname _header _prefix)
++ file(STRINGS ${_header} _apru_major
++ REGEX "^ *# *define +${_prefix}_MAJOR_VERSION +[0-9]+.*$")
++ file(STRINGS ${_header} _apru_minor
++ REGEX "^ *# *define +${_prefix}_MINOR_VERSION +[0-9]+.*$")
++ file(STRINGS ${_header} _apru_patch
++ REGEX "^ *# *define +${_prefix}_PATCH_VERSION +[0-9]+.*$")
++ string(REGEX REPLACE "^[^0-9]+([0-9]+).*$" "\\1" _apru_major ${_apru_major})
++ string(REGEX REPLACE "^[^0-9]+([0-9]+).*$" "\\1" _apru_minor ${_apru_minor})
++ string(REGEX REPLACE "^[^0-9]+([0-9]+).*$" "\\1" _apru_patch ${_apru_patch})
++ set(${_version_varname} "${_apru_major}.${_apru_minor}.${_apru_patch}" PARENT_SCOPE)
++ set(${_major_varname} ${_apru_major} PARENT_SCOPE)
++ set(${_minor_varname} ${_apru_minor} PARENT_SCOPE)
++endfunction(_apru_version)
++
++# Windows: Find the DLL (runtime) library
++function(_apru_find_dll _varname _dllname)
++ set(CMAKE_FIND_LIBRARY_SUFFIXES ".dll")
++ find_library(${_varname} NAMES ${_dllname}
++ PATHS ${ARGN} NO_DEFAULT_PATH PATH_SUFFIXES "bin" "lib")
++endfunction(_apru_find_dll)
++
++# Extract the main and extra static libraries
++function(_apru_extras _static_var _extra_var)
++ # The first element in the list of static libraries will be the the main
++ # APR/Util static library, anything else will be additional interface
++ # libraries.
++ set(_extra "${ARGN}")
++ list(GET _extra 0 _static)
++ list(REMOVE_AT _extra 0)
++ set(${_static_var} ${_static} PARENT_SCOPE)
++ set(${_extra_var} ${_extra} PARENT_SCOPE)
++endfunction(_apru_extras)
++
++# From the list of link libraries, extract the imported location
++function(_apru_location _location_var _extralibs_var)
++ unset(_dir)
++ unset(_lib)
++ unset(_extra)
++ foreach(_part ${ARGN})
++ string(SUBSTRING "${_part}" 0 2 _flag)
++ if(_flag STREQUAL "-L")
++ if(NOT _dir AND NOT _lib)
++ string(SUBSTRING "${_part}" 2 -1 _rest)
++ set(_dir "${_rest}")
++ else()
++ list(APPEND _extra "${_part}")
++ endif()
++ elseif(_flag STREQUAL "-l")
++ if(NOT _lib)
++ string(SUBSTRING "${_part}" 2 -1 _rest)
++ set(_lib "${_rest}")
++ else()
++ list(APPEND _extra " ${_part}")
++ endif()
++ else()
++ if(NOT _lib)
++ set(_lib "${_rest}")
++ else()
++ list(APPEND _extra " ${_part}")
++ endif()
++ endif()
++ endforeach()
++
++ if(NOT _lib)
++ message(FATAL_ERROR "did not find any libraries in '${ARGN}'")
++ endif()
++
++ if(NOT _dir)
++ find_library(${_location_var} NAMES "${_lib}")
++ else()
++ find_library(${_location_var} NAMES "${_lib}" PATHS "${_dir}" NO_DEFAULT_PATH)
++ endif()
++ set(${_extralibs_var} ${_extra} PARENT_SCOPE)
++endfunction(_apru_location)
++
++# -------------------------------------------------------------------
++
++if(NOT _apru_include_only_utilities)
++
++ set(APR_FOUND FALSE)
++
++ if(${CMAKE_SYSTEM_NAME} MATCHES "Windows")
++
++ if(DEFINED APR_ROOT)
++ get_filename_component(APR_ROOT "${APR_ROOT}" REALPATH)
++ else()
++ message(FATAL_ERROR "APR_ROOT must be defined on Windows")
++ endif()
++
++ include(CheckIncludeFile)
++
++ set(APR_INCLUDES "${APR_ROOT}/include")
++ if(NOT EXISTS "${APR_INCLUDES}/apr.h")
++ message(FATAL_ERROR "apr.h was not found in ${APR_INCLUDES}")
++ endif()
++ if(NOT EXISTS "${APR_INCLUDES}/apr_version.h")
++ message(FATAL_ERROR "apr_version.h was not found in ${APR_INCLUDES}")
++ endif()
++
++ _apru_version(APR_VERSION _apr_major _apr_minor "${APR_INCLUDES}/apr_version.h" "APR")
++ set(_apr_name "apr-${_apr_major}")
++
++ find_library(APR_LIBRARIES NAMES "lib${_apr_name}.lib"
++ PATHS ${APR_ROOT} NO_DEFAULT_PATH PATH_SUFFIXES "lib")
++ find_library(APR_STATIC_LIBS NAMES "${_apr_name}.lib"
++ PATHS ${APR_ROOT} NO_DEFAULT_PATH PATH_SUFFIXES "lib")
++ _apru_find_dll(APR_RUNTIME_LIBS "lib${_apr_name}.dll" ${APR_ROOT})
++
++ else() # NOT Windows
++
++ if(DEFINED APR_ROOT)
++ get_filename_component(APR_ROOT "${APR_ROOT}" REALPATH)
++ find_program(APR_CONFIG_EXECUTABLE NAMES apr-2-config apr-1-config
++ PATHS "${APR_ROOT}/bin" NO_DEFAULT_PATH)
++ else()
++ find_program(APR_CONFIG_EXECUTABLE NAMES apr-2-config apr-1-config)
++ endif()
++ mark_as_advanced(APR_CONFIG_EXECUTABLE)
++
++ macro(_apr_invoke _varname _regexp)
++ _apru_config(${APR_CONFIG_EXECUTABLE} ${_varname} "${_regexp}" "${ARGN}")
++ endmacro(_apr_invoke)
++
++ _apr_invoke(APR_CFLAGS "(^| )-(g|O)[^ ]*" --cppflags --cflags)
++ _apr_invoke(APR_INCLUDES "(^| )-I" --includes)
++ _apr_invoke(APR_LIBRARIES "" --link-ld)
++ _apr_invoke(APR_EXTRALIBS "" --libs)
++ _apr_invoke(APR_VERSION "" --version)
++ string(REGEX REPLACE "^([0-9]+)\\..*$" "\\1" _apr_major "${APR_VERSION}")
++
++ endif() # NOT Windows
++
++ if(${_apr_major} GREATER 1)
++ set(APR_CONTAINS_APRUTIL TRUE)
++ else()
++ set(APR_CONTAINS_APRUTIL FALSE)
++ endif()
++
++ include(FindPackageHandleStandardArgs)
++ find_package_handle_standard_args(APR
++ REQUIRED_VARS APR_LIBRARIES APR_INCLUDES
++ VERSION_VAR APR_VERSION)
++
++ if(APR_FOUND)
++ if(${CMAKE_SYSTEM_NAME} MATCHES "Windows")
++
++ if(APR_LIBRARIES AND APR_RUNTIME_LIBS)
++ add_library(APR::APR SHARED IMPORTED)
++ set_target_properties(APR::APR PROPERTIES
++ INTERFACE_INCLUDE_DIRECTORIES "${APR_INCLUDES}"
++ IMPORTED_LOCATION "${APR_RUNTIME_LIBS}"
++ IMPORTED_IMPLIB "${APR_LIBRARIES}")
++ endif()
++
++ if(APR_STATIC_LIBS)
++ _apru_extras(_apr_static _apr_extra ${APR_STATIC_LIBS})
++ add_library(APR::APR_static STATIC IMPORTED)
++ set_target_properties(APR::APR_static PROPERTIES
++ INTERFACE_INCLUDE_DIRECTORIES "${APR_INCLUDES}"
++ IMPORTED_INTERFACE_LINK_LIBRARIES "${_apr_extra}"
++ IMPORTED_LOCATION "${_apr_static}")
++ endif()
++
++ else() # NOT Windows
++
++ _apru_location(_apr_library _apr_extra "${APR_LIBRARIES}")
++ add_library(APR::APR UNKNOWN IMPORTED)
++ set_target_properties(APR::APR PROPERTIES
++ INTERFACE_INCLUDE_DIRECTORIES "${APR_INCLUDES}"
++ INTERFACE_LINK_LIBRARIES "${APR_EXTRALIBS};${_apr_extra}"
++ IMPORTED_LOCATION "${_apr_library}")
++
++ endif() # NOT Windows
++ endif(APR_FOUND)
++
++endif(NOT _apru_include_only_utilities)
+diff --git a/build/FindAPRUtil.cmake b/build/FindAPRUtil.cmake
+new file mode 100644
+index 0000000..9812320
+--- /dev/null
++++ b/build/FindAPRUtil.cmake
+@@ -0,0 +1,195 @@
++# ===================================================================
++# Licensed to the Apache Software Foundation (ASF) under one
++# or more contributor license agreements. See the NOTICE file
++# distributed with this work for additional information
++# regarding copyright ownership. The ASF licenses this file
++# to you under the Apache License, Version 2.0 (the
++# "License"); you may not use this file except in compliance
++# with the License. You may obtain a copy of the License at
++#
++# http://www.apache.org/licenses/LICENSE-2.0
++#
++# Unless required by applicable law or agreed to in writing,
++# software distributed under the License is distributed on an
++# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
++# KIND, either express or implied. See the License for the
++# specific language governing permissions and limitations
++# under the License.
++# ===================================================================
++
++cmake_minimum_required(VERSION 3.0)
++
++#.rst:
++# FindAPRUtil
++# --------
++#
++# Find the native Apache Portable Runtime Utilities includes and library.
++#
++# IMPORTED Targets
++# ^^^^^^^^^^^^^^^^
++#
++# This module defines :prop_tgt:`IMPORTED` target ``APR::APRUTIL``, if
++# APR-Util has been found. On Windows, it may define the :prop_tgt:`IMPORTED`
++# target ``APR::APRUTIL_static`` if the static libraries are found.
++#
++# Result Variables
++# ^^^^^^^^^^^^^^^^
++#
++# This module defines the following variables:
++#
++# ::
++#
++# APRUTIL_FOUND - True if APR-Util was found
++# APRUTIL_VERSION - The version of APR-Util found (x.y.z)
++# APRUTIL_INCLUDES - Where to find apr.h, etc.
++# APRUTIL_LIBRARIES - Linker switches to use with ld to link against APR
++#
++# ::
++#
++# APRUTIL_EXTRALIBS - Additional libraries to link against
++# APRUTIL_STATIC_LIBS - On Windows: list of APR-Util static libraries
++# APRUTIL_RUNTIME_LIBS - On Windows: list of APR-Util runtime DLLs
++#
++# Hints
++# ^^^^^
++#
++# A user may set ``APRUtil_ROOT`` to an APR-Util installation root to tell
++# this module where to look. This variable must be defined on Windows.
++
++
++if(NOT APR_FOUND)
++ find_package(APR REQUIRED)
++endif()
++
++set(APRUTIL_FOUND FALSE)
++
++if(APR_CONTAINS_APRUTIL)
++
++ set(APRUTIL_VERSION ${APR_VERSION})
++ include(FindPackageHandleStandardArgs)
++ find_package_handle_standard_args(APRUTIL
++ REQUIRED_VARS APRUTIL_VERSION
++ VERSION_VAR APRUTIL_VERSION)
++
++else(APR_CONTAINS_APRUTIL)
++
++ set(_apru_include_only_utilities TRUE)
++ include(${CMAKE_CURRENT_LIST_DIR}/FindAPR.cmake)
++ unset(_apru_include_only_utilities)
++
++ if(${CMAKE_SYSTEM_NAME} MATCHES "Windows")
++
++ if(DEFINED APRUtil_ROOT)
++ get_filename_component(APRUtil_ROOT "${APRUtil_ROOT}" REALPATH)
++ else()
++ message(FATAL_ERROR "APRUtil_ROOT must be defined on Windows")
++ endif()
++
++ include(CheckIncludeFile)
++
++ set(APRUTIL_INCLUDES "${APRUtil_ROOT}/include")
++ if(NOT EXISTS "${APRUTIL_INCLUDES}/apu.h")
++ message(FATAL_ERROR "apu.h was not found in ${APRUTIL_INCLUDES}")
++ endif()
++ if(NOT EXISTS "${APRUTIL_INCLUDES}/apu_version.h")
++ message(FATAL_ERROR "apu_version.h was not found in ${APRUTIL_INCLUDES}")
++ endif()
++
++ _apru_version(APRUTIL_VERSION _apu_major _apu_minor "${APRUTIL_INCLUDES}/apu_version.h" "APU")
++ set(_apu_name "aprutil-${_apu_major}")
++
++ if(${_apu_major} GREATER 1 OR (${_apu_major} EQUAL 1 AND ${_apu_minor} GREATER 5))
++ set(_apu_expat_name "expat.lib")
++ else()
++ set(_apu_expat_name "xml.lib")
++ endif()
++
++ find_library(APRUTIL_LIBRARIES NAMES "lib${_apu_name}.lib"
++ PATHS ${APRUtil_ROOT} NO_DEFAULT_PATH PATH_SUFFIXES "lib")
++ find_library(_apu_static NAMES "${_apu_name}.lib"
++ PATHS ${APRUtil_ROOT} NO_DEFAULT_PATH PATH_SUFFIXES "lib")
++ find_library(_apu_expat NAMES ${_apu_expat_name}
++ PATHS ${APRUtil_ROOT} NO_DEFAULT_PATH PATH_SUFFIXES "lib")
++ _apru_find_dll(APRUTIL_RUNTIME_LIBS "lib${_apu_name}.dll" ${APRUtil_ROOT})
++
++ if(NOT _apu_expat AND (_apu_expat_name MATCHES "expat"))
++ find_package(EXPAT QUIET)
++ if(EXPAT_FOUND)
++ set(_apu_expat ${EXPAT_LIBRARIES})
++ endif()
++ endif()
++ if(NOT _apu_expat)
++ message(WARNING "Could not find ${_apu_expat_name}"
++ " for APR-Util static linking.")
++ endif()
++ set(APRUTIL_STATIC_LIBS ${_apu_static} ${_apu_expat}
++ CACHE STRING "APR-Util static libraies.")
++
++ else() # NOT Windows
++
++ if(DEFINED APRUtil_ROOT)
++ get_filename_component(APRUtil_ROOT "${APRUtil_ROOT}" REALPATH)
++ find_program(APRUTIL_CONFIG_EXECUTABLE apu-1-config
++ PATHS "${APRUtil_ROOT}/bin" NO_DEFAULT_PATH)
++ else()
++ find_program(APRUTIL_CONFIG_EXECUTABLE apu-1-config)
++ endif()
++ mark_as_advanced(APRUTIL_CONFIG_EXECUTABLE)
++
++ macro(_apu_invoke _varname _regexp)
++ _apru_config(${APRUTIL_CONFIG_EXECUTABLE} ${_varname} "${_regexp}" "${ARGN}")
++ endmacro(_apu_invoke)
++
++ _apu_invoke(APRUTIL_INCLUDES "(^| )-I" --includes)
++ _apu_invoke(APRUTIL_EXTRALIBS "" --libs)
++ _apu_invoke(APRUTIL_LIBRARIES "" --link-ld)
++ _apu_invoke(APRUTIL_LDFLAGS "" --ldflags)
++ _apu_invoke(APRUTIL_VERSION "" --version)
++
++ endif() # NOT Windows
++
++ include(FindPackageHandleStandardArgs)
++ find_package_handle_standard_args(APRUTIL
++ REQUIRED_VARS APRUTIL_LIBRARIES APRUTIL_INCLUDES
++ VERSION_VAR APRUTIL_VERSION)
++
++ if(APRUTIL_FOUND)
++ if(${CMAKE_SYSTEM_NAME} MATCHES "Windows")
++
++ if(APRUTIL_LIBRARIES AND APRUTIL_RUNTIME_LIBS)
++ add_library(APR::APRUTIL SHARED IMPORTED)
++ set_target_properties(APR::APRUTIL PROPERTIES
++ INTERFACE_INCLUDE_DIRECTORIES "${APRUTIL_INCLUDES}"
++ IMPORTED_LOCATION "${APRUTIL_RUNTIME_LIBS}"
++ IMPORTED_IMPLIB "${APRUTIL_LIBRARIES}")
++ if(TARGET APR::APR)
++ set_target_properties(APR::APRUTIL PROPERTIES
++ INTERFACE_LINK_LIBRARIES APR::APR)
++ endif()
++ endif()
++
++ if(APRUTIL_STATIC_LIBS)
++ _apru_extras(_apu_static _apu_extra ${APRUTIL_STATIC_LIBS})
++ if(TARGET APR::APR_static)
++ list(APPEND _apu_extra APR::APR_static)
++ endif()
++ add_library(APR::APRUTIL_static STATIC IMPORTED)
++ set_target_properties(APR::APRUTIL_static PROPERTIES
++ INTERFACE_INCLUDE_DIRECTORIES "${APRUTIL_INCLUDES}"
++ INTERFACE_LINK_LIBRARIES "${_apu_extra}"
++ IMPORTED_LOCATION "${_apu_static}")
++ endif()
++
++ else() # NOT Windows
++
++ _apru_location(_apu_library _apu_extra "${APRUTIL_LIBRARIES}")
++ add_library(APR::APRUTIL UNKNOWN IMPORTED)
++ set_target_properties(APR::APRUTIL PROPERTIES
++ INTERFACE_INCLUDE_DIRECTORIES "${APRUTIL_INCLUDES}"
++ INTERFACE_LINK_LIBRARIES "${APRUTIL_EXTRALIBS};${_apu_extra}"
++ IMPORTED_LOCATION "${_apu_library}")
++
++ endif() # NOT Windows
++ endif(APRUTIL_FOUND)
++
++endif(APR_CONTAINS_APRUTIL)
+diff --git a/build/SerfChecks.cmake b/build/SerfChecks.cmake
+new file mode 100644
+index 0000000..093833e
+--- /dev/null
++++ b/build/SerfChecks.cmake
+@@ -0,0 +1,137 @@
++# ===================================================================
++# Licensed to the Apache Software Foundation (ASF) under one
++# or more contributor license agreements. See the NOTICE file
++# distributed with this work for additional information
++# regarding copyright ownership. The ASF licenses this file
++# to you under the Apache License, Version 2.0 (the
++# "License"); you may not use this file except in compliance
++# with the License. You may obtain a copy of the License at
++#
++# http://www.apache.org/licenses/LICENSE-2.0
++#
++# Unless required by applicable law or agreed to in writing,
++# software distributed under the License is distributed on an
++# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
++# KIND, either express or implied. See the License for the
++# specific language governing permissions and limitations
++# under the License.
++# ===================================================================
++
++include(CheckFunctionExists)
++include(CheckIncludeFile)
++include(CheckSymbolExists)
++include(CheckTypeSize)
++
++function(_CheckFunction var_ name_ libraries_)
++ if(libraries_)
++ set(CMAKE_REQUIRED_LIBRARIES "${libraries_}")
++ else()
++ unset(CMAKE_REQUIRED_LIBRARIES)
++ endif()
++
++ check_function_exists("${name_}" "serf_foundit_${name_}_")
++ if(serf_foundit_${name_}_)
++ set("${var_}" TRUE PARENT_SCOPE)
++ else()
++ set("${var_}" FALSE PARENT_SCOPE)
++ endif()
++ unset(CMAKE_REQUIRED_LIBRARIES)
++endfunction(_CheckFunction)
++
++macro(CheckFunction name_ symbol_)
++ _CheckFunction("serf_feature_CheckFunction_${name}_" "${name_}" "${ARGN}")
++ if("${serf_feature_CheckFunction_${name}_}")
++ add_definitions("-D${symbol_}")
++ endif()
++endmacro(CheckFunction)
++
++macro(CheckNotFunction name_ symbol_)
++ _CheckFunction("serf_feature_CheckNotFunction_${name}_" "${name_}" "${ARGN}")
++ if(NOT "${serf_feature_CheckNotFunction_${name}_}")
++ add_definitions("-D${symbol_}")
++ endif()
++endmacro(CheckNotFunction)
++
++
++function(_CheckSymbol var_ name_ header_ includes_)
++ if(includes_)
++ set(CMAKE_REQUIRED_INCLUDES "${includes_}")
++ else()
++ unset(CMAKE_REQUIRED_INCLUDES)
++ endif()
++
++ check_symbol_exists("${name_}" "${header_}" "serf_foundit_symbol_${name_}_")
++ if(serf_foundit_symbol_${name_}_)
++ set("${var_}" TRUE PARENT_SCOPE)
++ else()
++ set("${var_}" FALSE PARENT_SCOPE)
++ endif()
++ unset(CMAKE_REQUIRED_INCLUDES)
++endfunction(_CheckSymbol)
++
++macro(CheckFunctionMacro name_ symbol_ header_ includes_)
++ _CheckFunction("serf_feature_CheckFunctionMacro_${name}_" "${name_}" "${ARGN}")
++ if("${serf_feature_CheckFunctionMacro_${name}_}")
++ add_definitions("-D${symbol_}")
++ else()
++ _CheckSymbol("serf_feature_CheckFunctionMacro_${name}_" "${name_}" "${header_}" "${includes_}")
++ if("${serf_feature_CheckFunctionMacro_${name}_}")
++ add_definitions("-D${symbol_}")
++ endif()
++ endif()
++endmacro(CheckFunctionMacro)
++
++
++function(_CheckHeader var_ name_ includes_)
++ if(includes_)
++ set(CMAKE_REQUIRED_INCLUDES "${includes_}")
++ else()
++ unset(CMAKE_REQUIRED_INCLUDES)
++ endif()
++
++ check_include_file("${name_}" "serf_foundit_${name_}_")
++ if(${serf_foundit_${name_}_})
++ set("${var_}" TRUE PARENT_SCOPE)
++ else()
++ set("${var_}" FALSE PARENT_SCOPE)
++ endif()
++ unset(CMAKE_REQUIRED_INCLUDES)
++endfunction(_CheckHeader)
++
++macro(CheckHeader name_ symbol_)
++ _CheckHeader("serf_feature_CheckHeader_${name}_" "${name_}" "${ARGN}")
++ if("${serf_feature_CheckHeader_${name}_}")
++ add_definitions("-D${symbol_}")
++ endif()
++endmacro(CheckHeader)
++
++
++function(_CheckType var_ name_ header_ includes_)
++ if(includes_)
++ set(CMAKE_REQUIRED_INCLUDES "${includes_}")
++ else()
++ unset(CMAKE_REQUIRED_INCLUDES)
++ endif()
++
++ if(header_)
++ set(CMAKE_EXTRA_INCLUDE_FILES "${header_}")
++ else()
++ unset(CMAKE_EXTRA_INCLUDE_FILES)
++ endif()
++
++ check_type_size("${name_}" "serf_foundit_${name_}_")
++ if(${HAVE_serf_foundit_${name_}_})
++ set("${var_}" TRUE PARENT_SCOPE)
++ else()
++ set("${var_}" FALSE PARENT_SCOPE)
++ endif()
++ unset(CMAKE_REQUIRED_INCLUDES)
++ unset(CMAKE_EXTRA_INCLUDE_FILES)
++endfunction(_CheckType)
++
++macro(CheckType name_ header_ symbol_)
++ _CheckType("serf_feature_CheckType_${name}_" "${name_}" "${header_}" "${ARGN}")
++ if("${serf_feature_CheckType_${name}_}")
++ add_definitions("-D${symbol_}")
++ endif()
++endmacro(CheckType)
+diff --git a/build/SerfPlatform.cmake b/build/SerfPlatform.cmake
+new file mode 100644
+index 0000000..18aacef
+--- /dev/null
++++ b/build/SerfPlatform.cmake
+@@ -0,0 +1,41 @@
++# ===================================================================
++# Licensed to the Apache Software Foundation (ASF) under one
++# or more contributor license agreements. See the NOTICE file
++# distributed with this work for additional information
++# regarding copyright ownership. The ASF licenses this file
++# to you under the Apache License, Version 2.0 (the
++# "License"); you may not use this file except in compliance
++# with the License. You may obtain a copy of the License at
++#
++# http://www.apache.org/licenses/LICENSE-2.0
++#
++# Unless required by applicable law or agreed to in writing,
++# software distributed under the License is distributed on an
++# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
++# KIND, either express or implied. See the License for the
++# specific language governing permissions and limitations
++# under the License.
++# ===================================================================
++
++if(${CMAKE_SYSTEM_NAME} MATCHES "Darwin")
++ set(SERF_DARWIN TRUE)
++ if(NOT RELATIVE_RPATH)
++ set(CMAKE_MACOSX_RPATH FALSE)
++ endif()
++ message(STATUS "Target platform is Darwin (macOS)")
++elseif(${CMAKE_SYSTEM_NAME} MATCHES "Linux")
++ set(SERF_LINUX TRUE)
++ message(STATUS "Target platform is Linux")
++elseif(${CMAKE_SYSTEM_NAME} MATCHES "Windows")
++ set(SERF_WINDOWS TRUE)
++ if(CMAKE_GENERATOR MATCHES "(Win64|IA64)")
++ set(SERF_WIN64 TRUE)
++ message(STATUS "Target platform is Windows (64-bit)")
++ else()
++ set(SERF_WIN32 TRUE)
++ message(STATUS "Target platform is Windows (32-bit)")
++ endif()
++else()
++ set(SERF_UNIX TRUE)
++ message(STATUS "Assuming generic Unix target platform")
++endif()
+diff --git a/build/SerfVersion.cmake b/build/SerfVersion.cmake
+new file mode 100644
+index 0000000..04fdc8b
+--- /dev/null
++++ b/build/SerfVersion.cmake
+@@ -0,0 +1,53 @@
++# ===================================================================
++# Licensed to the Apache Software Foundation (ASF) under one
++# or more contributor license agreements. See the NOTICE file
++# distributed with this work for additional information
++# regarding copyright ownership. The ASF licenses this file
++# to you under the Apache License, Version 2.0 (the
++# "License"); you may not use this file except in compliance
++# with the License. You may obtain a copy of the License at
++#
++# http://www.apache.org/licenses/LICENSE-2.0
++#
++# Unless required by applicable law or agreed to in writing,
++# software distributed under the License is distributed on an
++# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
++# KIND, either express or implied. See the License for the
++# specific language governing permissions and limitations
++# under the License.
++# ===================================================================
++
++# Find the version number in serf.h so that we don't keep it in two places.
++
++function(serf_parse_version_number_from_header)
++ set(header_ "${SERF_SOURCE_DIR}/serf.h")
++ file(STRINGS "${header_}" version_parts_
++ REGEX "^ *# *define +SERF_[A-Z]+_VERSION +[0-9]+ *$")
++
++ foreach(STR ${version_parts_})
++ if(STR MATCHES "SERF_MAJOR_VERSION")
++ string(REGEX REPLACE "^[^0-9]+([0-9])+ *$" "\\1" major_ ${STR})
++ elseif(STR MATCHES "SERF_MINOR_VERSION")
++ string(REGEX REPLACE "^[^0-9]+([0-9])+ *$" "\\1" minor_ ${STR})
++ elseif(STR MATCHES "SERF_PATCH_VERSION")
++ string(REGEX REPLACE "^[^0-9]+([0-9])+ *$" "\\1" patch_ ${STR})
++ endif()
++ endforeach()
++
++ if(NOT DEFINED major_ OR NOT DEFINED minor_ OR NOT DEFINED patch_)
++ message(FATAL_ERROR "Could not find the version number in '${header_}'")
++ endif()
++
++ set(SERF_VERSION "${major_}.${minor_}.${patch_}" PARENT_SCOPE)
++ set(SERF_SOVERSION "0" PARENT_SCOPE)
++ set(SERF_MAJOR_VERSION "${major_}" PARENT_SCOPE)
++ set(SERF_MINOR_VERSION "${minor_}" PARENT_SCOPE)
++ set(SERF_PATCH_VERSION "${patch_}" PARENT_SCOPE)
++endfunction()
++
++unset(SERF_VERSION)
++unset(SERF_SOVERSION)
++unset(SERF_MAJOR_VERSION)
++unset(SERF_MINOR_VERSION)
++unset(SERF_PATCH_VERSION)
++serf_parse_version_number_from_header()
+diff --git a/build/SerfWindowsGenDef.cmake b/build/SerfWindowsGenDef.cmake
+new file mode 100644
+index 0000000..a955eae
+--- /dev/null
++++ b/build/SerfWindowsGenDef.cmake
+@@ -0,0 +1,26 @@
++# ===================================================================
++# Licensed to the Apache Software Foundation (ASF) under one
++# or more contributor license agreements. See the NOTICE file
++# distributed with this work for additional information
++# regarding copyright ownership. The ASF licenses this file
++# to you under the Apache License, Version 2.0 (the
++# "License"); you may not use this file except in compliance
++# with the License. You may obtain a copy of the License at
++#
++# http://www.apache.org/licenses/LICENSE-2.0
++#
++# Unless required by applicable law or agreed to in writing,
++# software distributed under the License is distributed on an
++# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
++# KIND, either express or implied. See the License for the
++# specific language governing permissions and limitations
++# under the License.
++# ===================================================================
++
++# Generate Serf's .def file for Windows DLLs.
++
++include(SerfWindowsToolkit)
++
++string(REGEX REPLACE " +" ";" SERF_DEF_BLACKLIST "${SERF_DEF_BLACKLIST}")
++string(REGEX REPLACE " +" ";" SERF_DEF_HEADERS "${SERF_DEF_HEADERS}")
++SerfWindowsGenDef("${SERF_DEF_BLACKLIST}" "${SERF_DEF_FILE}" ${SERF_DEF_HEADERS})
+diff --git a/build/SerfWindowsToolkit.cmake b/build/SerfWindowsToolkit.cmake
+new file mode 100644
+index 0000000..fef4837
+--- /dev/null
++++ b/build/SerfWindowsToolkit.cmake
+@@ -0,0 +1,55 @@
++# ===================================================================
++# Licensed to the Apache Software Foundation (ASF) under one
++# or more contributor license agreements. See the NOTICE file
++# distributed with this work for additional information
++# regarding copyright ownership. The ASF licenses this file
++# to you under the Apache License, Version 2.0 (the
++# "License"); you may not use this file except in compliance
++# with the License. You may obtain a copy of the License at
++#
++# http://www.apache.org/licenses/LICENSE-2.0
++#
++# Unless required by applicable law or agreed to in writing,
++# software distributed under the License is distributed on an
++# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
++# KIND, either express or implied. See the License for the
++# specific language governing permissions and limitations
++# under the License.
++# ===================================================================
++
++# Generate a Windows DLL .def file from a list of headers.
++function(SerfWindowsGenDef blacklist_ target_)
++ if(${CMAKE_SYSTEM_NAME} MATCHES "Windows")
++ set(W "[a-zA-Z_0-9]") # Word characters pattern
++ set(base_func_rx_ "^((${W}+|\\*) )+\\*?(serf_[a-z]${W}*)\\(")
++ set(base_type_rx_ "^extern const serf_bucket_type_t (serf_[a-z_]*)")
++ set(func_search_rx_ "${base_func_rx_}")
++ set(type_search_rx_ "${base_type_rx_};")
++ set(func_name_rx_ "${base_func_rx_}.*$")
++ set(type_name_rx_ "${base_type_rx_}.*$")
++
++ foreach(file_ ${ARGN})
++ message(STATUS "Looking for exports in ${file_}")
++ file(STRINGS ${file_} funcs_ REGEX "${func_search_rx_}")
++ file(STRINGS ${file_} types_ REGEX "${type_search_rx_}")
++ foreach(sym_ ${funcs_})
++ string(REGEX REPLACE "${func_name_rx_}" "\\3" def_ ${sym_})
++ list(APPEND defs_ ${def_})
++ endforeach()
++ foreach(sym_ ${types_})
++ string(REGEX REPLACE "${type_name_rx_}" "\\1" def_ ${sym_})
++ list(APPEND defs_ ${def_})
++ endforeach()
++ endforeach()
++
++ list(SORT defs_)
++ list(REMOVE_DUPLICATES defs_)
++ file(WRITE ${target_} "EXPORTS\n")
++ foreach(def_ ${defs_})
++ list(FIND blacklist_ "${def_}" skip_)
++ if(skip_ LESS 0)
++ file(APPEND ${target_} "${def_}\n")
++ endif()
++ endforeach()
++ endif()
++endfunction(SerfWindowsGenDef)
+diff --git a/test/CMakeLists.txt b/test/CMakeLists.txt
+new file mode 100644
+index 0000000..ce56f15
+--- /dev/null
++++ b/test/CMakeLists.txt
+@@ -0,0 +1,70 @@
++# ===================================================================
++# Licensed to the Apache Software Foundation (ASF) under one
++# or more contributor license agreements. See the NOTICE file
++# distributed with this work for additional information
++# regarding copyright ownership. The ASF licenses this file
++# to you under the Apache License, Version 2.0 (the
++# "License"); you may not use this file except in compliance
++# with the License. You may obtain a copy of the License at
++#
++# http://www.apache.org/licenses/LICENSE-2.0
++#
++# Unless required by applicable law or agreed to in writing,
++# software distributed under the License is distributed on an
++# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
++# KIND, either express or implied. See the License for the
++# specific language governing permissions and limitations
++# under the License.
++# ===================================================================
++
++
++set(TEST_ALL_SOURCES
++ "test_all.c"
++ "CuTest.c"
++ "test_util.c"
++ "test_context.c"
++ "test_buckets.c"
++ "test_auth.c"
++ "mock_buckets.c"
++ "test_ssl.c"
++ "server/test_server.c"
++ "server/test_sslserver.c"
++)
++
++set(SIMPLE_TEST_TARGETS
++ "serf_get"
++ "serf_response"
++ "serf_request"
++ "serf_spider"
++ "serf_server"
++ "serf_bwtp"
++)
++
++if(CC_LIKE_GNUC)
++ # MockHTTP requires C99 standard, so use it for the test suite.
++ string(REPLACE "-std=c89" "-std=c99" CMAKE_C_FLAGS ${CMAKE_C_FLAGS})
++endif()
++
++foreach(TEST_TARGET ${SIMPLE_TEST_TARGETS})
++ add_executable(${TEST_TARGET} "${TEST_TARGET}.c")
++ add_dependencies(${TEST_TARGET} serf_static)
++ target_link_libraries(${TEST_TARGET} serf_static)
++endforeach()
++
++add_executable(test_all ${TEST_ALL_SOURCES})
++add_dependencies(test_all serf_static)
++target_compile_definitions(test_all PRIVATE "-DMOCKHTTP_OPENSSL")
++target_include_directories(test_all SYSTEM BEFORE PRIVATE ${SERF_DEPENDENCY_INCLUDES})
++target_link_libraries(test_all serf_static)
++
++file(GLOB RESPONSE_TEST_CASES "${CMAKE_CURRENT_SOURCE_DIR}/testcases/*.response")
++foreach(TEST_CASE ${RESPONSE_TEST_CASES})
++ get_filename_component(TEST_CASE_NAME ${TEST_CASE} NAME)
++ add_test(NAME "${TEST_CASE_NAME}" COMMAND serf_response "${TEST_CASE}")
++ list(APPEND RESPONSE_TESTS "${TEST_CASE_NAME}")
++endforeach()
++
++add_test(NAME test_all COMMAND test_all)
++
++set_tests_properties(${RESPONSE_TESTS} test_all PROPERTIES
++ ENVIRONMENT srcdir=${SERF_SOURCE_DIR})
diff --git a/libserf-1.3.9-errgetfunc.patch b/libserf-1.3.9-errgetfunc.patch
new file mode 100644
index 0000000..c5ac4a6
--- /dev/null
+++ b/libserf-1.3.9-errgetfunc.patch
@@ -0,0 +1,13 @@
+--- serf-1.3.9/buckets/ssl_buckets.c.errgetfunc
++++ serf-1.3.9/buckets/ssl_buckets.c
+@@ -1204,6 +1204,10 @@
+ }
+ }
+
++#ifndef ERR_GET_FUNC
++#define ERR_GET_FUNC(ec) (0)
++#endif
++
+ static int ssl_need_client_cert(SSL *ssl, X509 **cert, EVP_PKEY **pkey)
+ {
+ serf_ssl_context_t *ctx = SSL_get_app_data(ssl);
diff --git a/libserf-1.3.9-gssapi.patch b/libserf-1.3.9-gssapi.patch
new file mode 100644
index 0000000..0abc92e
--- /dev/null
+++ b/libserf-1.3.9-gssapi.patch
@@ -0,0 +1,60 @@
+commit 821fc34e224a4e82563f0561be2e60fd1d4ec92b
+Author: Tomas Korbar <tkorbar@redhat.com>
+Date: Tue Nov 14 12:42:45 2023 +0100
+
+ Add gssapi linking
+
+diff --git a/CMakeLists.txt b/CMakeLists.txt
+index 3f10eae..e435e29 100644
+--- a/CMakeLists.txt
++++ b/CMakeLists.txt
+@@ -51,7 +51,7 @@ option(DEBUG "Enable debugging info and strict compile warnings" OFF)
+ option(SKIP_SHARED "Disable building shared Serf libraries" OFF)
+ option(SKIP_STATIC "Disable building static Serf libraries" OFF)
+ option(LIBDIR "Install directory for architecture-dependent libraries" "")
+-option(GSSAPI "Path to GSSAPI's install area" "")
++option(GSSAPI "Use pkg-config to link with GSSAPI" OFF)
+ option(BROTLI "Path to Brotli's install area" "")
+ option(DISABLE_LOGGING "Disable the logging framework at compile time" OFF)
+ option(SKIP_TESTS "Disable building the unit tests and utilities" OFF)
+@@ -156,10 +156,14 @@ if(SERF_WINDOWS)
+ )
+ endif(SERF_WINDOWS)
+
+-
+ # Process build options for dependency search
+ if(GSSAPI)
+- message(WARNING "option GSSAPI is not implemented")
++ find_package(PkgConfig REQUIRED)
++ pkg_check_modules(GSSAPI krb5-gssapi)
++ if (NOT GSSAPI_FOUND)
++ message(WARNING "GSSAPI pkgconfig module was not found")
++ endif()
++ add_definitions("-DSERF_HAVE_GSSAPI")
+ endif()
+
+ if(BROTLI)
+@@ -285,6 +289,11 @@ if(NOT SKIP_SHARED)
+ PRIVATE ${SERF_PRIVATE_TARGETS}
+ ${SERF_STANDARD_LIBRARIES}
+ PUBLIC ${SERF_PUBLIC_TARGETS})
++ if (GSSAPI_FOUND)
++ target_link_libraries(serf_shared PRIVATE ${GSSAPI_LIBRARIES})
++ target_include_directories(serf_shared PRIVATE ${GSSAPI_INCLUDE_DIRS})
++ target_compile_options(serf_shared PRIVATE ${GSSAPI_CFLAGS_OTHER})
++ endif (GSSAPI_FOUND)
+ set_target_properties(serf_shared PROPERTIES
+ VERSION ${SERF_VERSION}
+ SOVERSION ${SERF_SOVERSION})
+@@ -307,6 +316,11 @@ if(NOT SKIP_STATIC)
+ ${SERF_PRIVATE_TARGETS}
+ ${SERF_PUBLIC_TARGETS}
+ ${SERF_STANDARD_LIBRARIES})
++ if (GSSAPI_FOUND)
++ target_link_libraries(serf_shared PRIVATE ${GSSAPI_LIBRARIES})
++ target_include_directories(serf_shared PRIVATE ${GSSAPI_INCLUDE_DIRS})
++ target_compile_options(serf_shared PRIVATE ${GSSAPI_CFLAGS_OTHER})
++ endif (GSSAPI_FOUND)
+ list(APPEND SERF_TARGETS "serf_static")
+ endif()
+
diff --git a/libserf-norpath.patch b/libserf-norpath.patch
new file mode 100644
index 0000000..385dfd3
--- /dev/null
+++ b/libserf-norpath.patch
@@ -0,0 +1,34 @@
+diff -uNr serf-1.3.9.orig/SConstruct serf-1.3.9/SConstruct
+--- serf-1.3.9.orig/SConstruct 2016-09-02 08:22:35.180532030 +0200
++++ serf-1.3.9/SConstruct 2016-09-02 08:22:56.653174061 +0200
+@@ -224,9 +224,6 @@
+ else:
+ LIBNAMESTATIC = 'serf-${MAJOR}'
+
+-env.Append(RPATH=libdir,
+- PDB='${TARGET.filebase}.pdb')
+-
+ if sys.platform == 'darwin':
+ # linkflags.append('-Wl,-install_name,@executable_path/%s.dylib' % (LIBNAME,))
+ env.Append(LINKFLAGS=['-Wl,-install_name,%s/%s.dylib' % (thisdir, LIBNAME,)])
+@@ -385,12 +382,6 @@
+ if sys.platform == 'win32':
+ env.Append(CPPDEFINES=['SERF_HAVE_SSPI'])
+
+-# On some systems, the -R values that APR describes never make it into actual
+-# RPATH flags. We'll manually map all directories in LIBPATH into new
+-# flags to set RPATH values.
+-for d in env['LIBPATH']:
+- env.Append(RPATH=':'+d)
+-
+ # Set up the construction of serf-*.pc
+ pkgconfig = env.Textfile('serf-%d.pc' % (MAJOR,),
+ env.File('build/serf.pc.in'),
+@@ -461,7 +452,6 @@
+ TEST_EXES = [ os.path.join('test', '%s' % (prog)) for prog in TEST_PROGRAMS ]
+
+ # Find the (dynamic) library in this directory
+-tenv.Replace(RPATH=thisdir)
+ tenv.Prepend(LIBS=[LIBNAMESTATIC, ],
+ LIBPATH=[thisdir, ])
+
diff --git a/libserf-python3.patch b/libserf-python3.patch
new file mode 100644
index 0000000..3c7edc8
--- /dev/null
+++ b/libserf-python3.patch
@@ -0,0 +1,60 @@
+diff -up serf-1.3.9/SConstruct.python3 serf-1.3.9/SConstruct
+--- serf-1.3.9/SConstruct.python3 2018-07-02 17:21:47.331685070 +0200
++++ serf-1.3.9/SConstruct 2018-07-02 17:27:12.316413515 +0200
+@@ -20,6 +20,8 @@
+ # ====================================================================
+ #
+
++from __future__ import print_function
++
+ import sys
+ import os
+ import re
+@@ -166,7 +168,7 @@ env.Append(BUILDERS = {
+ match = re.search('SERF_MAJOR_VERSION ([0-9]+).*'
+ 'SERF_MINOR_VERSION ([0-9]+).*'
+ 'SERF_PATCH_VERSION ([0-9]+)',
+- env.File('serf.h').get_contents(),
++ env.File('serf.h').get_contents().decode('utf-8'),
+ re.DOTALL)
+ MAJOR, MINOR, PATCH = [int(x) for x in match.groups()]
+ env.Append(MAJOR=str(MAJOR))
+@@ -183,7 +185,7 @@ CALLOUT_OKAY = not (env.GetOption('clean
+
+ unknown = opts.UnknownVariables()
+ if unknown:
+- print 'Warning: Used unknown variables:', ', '.join(unknown.keys())
++ print('Warning: Used unknown variables:', ', '.join(unknown.keys()))
+
+ apr = str(env['APR'])
+ apu = str(env['APU'])
+diff -uap serf-1.3.9/build/check.py.python3 serf-1.3.9/build/check.py
+--- serf-1.3.9/build/check.py.python3 2015-09-17 13:46:24.000000000 +0100
++++ serf-1.3.9/build/check.py 2018-12-17 11:40:06.524901129 +0000
+@@ -1,4 +1,4 @@
+-#!/usr/bin/env python
++#!/usr/bin/python3
+ #
+ # check.py : Run all the test cases.
+ #
+@@ -52,16 +52,16 @@ if __name__ == '__main__':
+
+ # Find test responses and run them one by one
+ for case in glob.glob(testdir + "/testcases/*.response"):
+- print "== Testing %s ==" % (case)
++ print("== Testing %s ==" % (case))
+ try:
+ subprocess.check_call([SERF_RESPONSE_EXE, case])
+ except subprocess.CalledProcessError:
+- print "ERROR: test case %s failed" % (case)
++ print("ERROR: test case %s failed" % (case))
+ sys.exit(1)
+
+- print "== Running the unit tests =="
++ print("== Running the unit tests ==")
+ try:
+ subprocess.check_call(TEST_ALL_EXE)
+ except subprocess.CalledProcessError:
+- print "ERROR: test(s) failed in test_all"
++ print("ERROR: test(s) failed in test_all")
+ sys.exit(1)
diff --git a/libserf.spec b/libserf.spec
new file mode 100644
index 0000000..0ff5ecb
--- /dev/null
+++ b/libserf.spec
@@ -0,0 +1,204 @@
+Name: libserf
+Version: 1.3.9
+Release: 27%{?dist}
+Summary: High-Performance Asynchronous HTTP Client Library
+License: ASL 2.0
+URL: http://serf.apache.org/
+Source0: https://archive.apache.org/dist/serf/serf-%{version}.tar.bz2
+BuildRequires: gcc, pkgconfig
+BuildRequires: apr-devel, apr-util-devel, krb5-devel, openssl-devel
+BuildRequires: zlib-devel, cmake
+Patch0: %{name}-norpath.patch
+Patch1: %{name}-python3.patch
+Patch2: %{name}-1.3.9-cmake.patch
+Patch3: %{name}-1.3.9-errgetfunc.patch
+# https://bugzilla.redhat.com/show_bug.cgi?id=2004714
+# Patch BIO to work with openssl 3
+Patch4: %{name}-1.3.9-bio-ctrl.patch
+# https://issues.redhat.com/browse/RHEL-6802
+Patch5: %{name}-1.3.9-gssapi.patch
+
+%description
+The serf library is a C-based HTTP client library built upon the Apache
+Portable Runtime (APR) library. It multiplexes connections, running the
+read/write communication asynchronously. Memory copies and transformations are
+kept to a minimum to provide high performance operation.
+
+%package devel
+Summary: Development files for %{name}
+Requires: %{name}%{?_isa} = %{version}-%{release}
+Requires: apr-devel%{?_isa}
+
+%description devel
+This package contains libraries and header files for
+developing applications that use %{name}.
+
+%prep
+%autosetup -n serf-%{version} -p1
+
+%build
+%cmake -DCMAKE_INSTALL_LIBDIR=%{_libdir} -DGSSAPI=ON -DSKIP_STATIC=ON
+%cmake_build
+
+%install
+%cmake_install
+
+mkdir -p %{buildroot}%{_libdir}/pkgconfig
+mv %{buildroot}%{_datadir}/pkgconfig/serf.pc %{buildroot}%{_libdir}/pkgconfig/serf.pc
+rm -rf %{buildroot}%{_datadir}
+
+%check
+%ctest || true
+
+%ldconfig_scriptlets
+
+%files
+%license LICENSE NOTICE
+%{_libdir}/*.so.*
+
+%files devel
+%doc CHANGES README design-guide.txt
+%{_includedir}/serf-1/
+%{_libdir}/*.so
+%{_libdir}/pkgconfig/serf*.pc
+
+%changelog
+* Fri Dec 15 2023 Tomas Korbar <tkorbar@redhat.com> - 1.3.9-27
+- Fix linking of gssapi to support kerberos
+- Resolves: RHEL-6802
+
+* Fri Sep 17 2021 Tomas Korbar <tkorbar@redhat.com> - 1.3.9-26
+- Fix BIO control function implementation
+- Resolves: rhbz#2004714
+
+* Mon Aug 09 2021 Mohan Boddu <mboddu@redhat.com> - 1.3.9-25
+- Rebuilt for IMA sigs, glibc 2.34, aarch64 flags
+ Related: rhbz#1991688
+
+* Mon Aug 9 2021 Joe Orton <jorton@redhat.com> - 1.3.9-24
+- fix FTBFS with OpenSSL 3.0 beta 2 (#1991008)
+
+* Wed Jun 30 2021 Tomas Korbar <tkorbar@redhat.com> - 1.3.9-23
+- Fix soname problems
+- Related: rhbz#1974621
+
+* Wed Jun 30 2021 Tomas Korbar <tkorbar@redhat.com> - 1.3.9-22
+- Remove scons from build requirements
+- Related: rhbz#1974621
+
+* Wed Jun 30 2021 Tomas Korbar <tkorbar@redhat.com> - 1.3.9-21
+- Backport cmake support
+- Resolves: rhbz#1974621
+
+* Wed Jun 16 2021 Mohan Boddu <mboddu@redhat.com> - 1.3.9-20
+- Rebuilt for RHEL 9 BETA for openssl 3.0
+ Related: rhbz#1971065
+
+* Fri Apr 16 2021 Mohan Boddu <mboddu@redhat.com> - 1.3.9-19
+- Rebuilt for RHEL 9 BETA on Apr 15th 2021. Related: rhbz#1947937
+
+* Tue Jan 26 2021 Fedora Release Engineering <releng@fedoraproject.org> - 1.3.9-18
+- Rebuilt for https://fedoraproject.org/wiki/Fedora_34_Mass_Rebuild
+
+* Sat Aug 01 2020 Fedora Release Engineering <releng@fedoraproject.org> - 1.3.9-17
+- Second attempt - Rebuilt for
+ https://fedoraproject.org/wiki/Fedora_33_Mass_Rebuild
+
+* Tue Jul 28 2020 Fedora Release Engineering <releng@fedoraproject.org> - 1.3.9-16
+- Rebuilt for https://fedoraproject.org/wiki/Fedora_33_Mass_Rebuild
+
+* Wed Jan 29 2020 Fedora Release Engineering <releng@fedoraproject.org> - 1.3.9-15
+- Rebuilt for https://fedoraproject.org/wiki/Fedora_32_Mass_Rebuild
+
+* Thu Nov 14 2019 Joe Orton <jorton@redhat.com> - 1.3.9-14
+- revert broken IPv6 workaround
+
+* Thu Jul 25 2019 Fedora Release Engineering <releng@fedoraproject.org> - 1.3.9-13
+- Rebuilt for https://fedoraproject.org/wiki/Fedora_31_Mass_Rebuild
+
+* Tue Apr 16 2019 Joe Orton <jorton@redhat.com> - 1.3.9-12
+- fix IPv6 fallback behaviour (#1130328)
+- use Python3 in tests
+
+* Fri Feb 01 2019 Fedora Release Engineering <releng@fedoraproject.org> - 1.3.9-11
+- Rebuilt for https://fedoraproject.org/wiki/Fedora_30_Mass_Rebuild
+
+* Fri Jul 13 2018 Fedora Release Engineering <releng@fedoraproject.org> - 1.3.9-10
+- Rebuilt for https://fedoraproject.org/wiki/Fedora_29_Mass_Rebuild
+
+* Mon Jul 02 2018 Igor Gnatenko <ignatenkobrain@fedoraproject.org> - 1.3.9-9
+- Switch to %%ldconfig_scriptlets
+
+* Mon Jul 02 2018 Nils Philippsen <nils@redhat.com> - 1.3.9-8
+- use the Python 3 version of scons from Fedora 29 on
+
+* Wed Mar 7 2018 Joe Orton <jorton@redhat.com> - 1.3.9-7
+- add gcc to BR
+
+* Wed Feb 07 2018 Fedora Release Engineering <releng@fedoraproject.org> - 1.3.9-6
+- Rebuilt for https://fedoraproject.org/wiki/Fedora_28_Mass_Rebuild
+
+* Thu Aug 03 2017 Fedora Release Engineering <releng@fedoraproject.org> - 1.3.9-5
+- Rebuilt for https://fedoraproject.org/wiki/Fedora_27_Binutils_Mass_Rebuild
+
+* Wed Jul 26 2017 Fedora Release Engineering <releng@fedoraproject.org> - 1.3.9-4
+- Rebuilt for https://fedoraproject.org/wiki/Fedora_27_Mass_Rebuild
+
+* Fri Feb 10 2017 Fedora Release Engineering <releng@fedoraproject.org> - 1.3.9-3
+- Rebuilt for https://fedoraproject.org/wiki/Fedora_26_Mass_Rebuild
+
+* Mon Nov 14 2016 Joe Orton <jorton@redhat.com> - 1.3.9-2
+- rebuild for OpenSSL 1.1.0
+
+* Fri Sep 02 2016 Igor Gnatenko <i.gnatenko.brain@gmail.com> - 1.3.9-1
+- Update to 1.3.9 (RHBZ #1372506)
+
+* Sat Apr 09 2016 Igor Gnatenko <ignatenko@redhat.com> - 1.3.8-3
+- Add LDFLAGS provided by RPM
+
+* Thu Feb 04 2016 Fedora Release Engineering <releng@fedoraproject.org> - 1.3.8-2
+- Rebuilt for https://fedoraproject.org/wiki/Fedora_24_Mass_Rebuild
+
+* Tue Jun 23 2015 Joe Orton <jorton@redhat.com> - 1.3.8-1
+- update to 1.3.8 (#1155115, #1155392)
+- remove RPATHs (#1154690)
+
+* Wed Jun 17 2015 Fedora Release Engineering <rel-eng@lists.fedoraproject.org> - 1.3.7-3
+- Rebuilt for https://fedoraproject.org/wiki/Fedora_23_Mass_Rebuild
+
+* Sun Aug 17 2014 Fedora Release Engineering <rel-eng@lists.fedoraproject.org> - 1.3.7-2
+- Rebuilt for https://fedoraproject.org/wiki/Fedora_21_22_Mass_Rebuild
+
+* Tue Aug 12 2014 Christopher Meng <rpm@cicku.me> - 1.3.7-1
+- Update to 1.3.7
+
+* Tue Jun 17 2014 Christopher Meng <rpm@cicku.me> - 1.3.6-1
+- Update to 1.3.6
+
+* Sat Jun 07 2014 Fedora Release Engineering <rel-eng@lists.fedoraproject.org> - 1.3.5-2
+- Rebuilt for https://fedoraproject.org/wiki/Fedora_21_Mass_Rebuild
+
+* Wed Apr 30 2014 Christopher Meng <rpm@cicku.me> - 1.3.5-1
+- Update to 1.3.5
+
+* Mon Feb 17 2014 Joe Orton <jorton@redhat.com> - 1.3.4-1
+- Update to 1.3.4
+
+* Tue Dec 10 2013 Joe Orton <jorton@redhat.com> - 1.3.3-1
+- Update to 1.3.3
+
+* Wed Nov 6 2013 Joe Orton <jorton@redhat.com> - 1.3.2-1
+- Update to 1.3.2
+- Require krb5-devel for libgssapi (#1027011)
+
+* Sat Aug 03 2013 Fedora Release Engineering <rel-eng@lists.fedoraproject.org> - 1.2.1-4
+- Rebuilt for https://fedoraproject.org/wiki/Fedora_20_Mass_Rebuild
+
+* Mon Jun 17 2013 Christopher Meng <rpm@cicku.me> - 1.2.1-3
+- SPEC cleanup.
+
+* Thu Jun 13 2013 Christopher Meng <rpm@cicku.me> - 1.2.1-2
+- Fix the permission of the library.
+
+* Sun Jun 09 2013 Christopher Meng <rpm@cicku.me> - 1.2.1-1
+- Initial Package.
diff --git a/sources b/sources
new file mode 100644
index 0000000..030cbe9
--- /dev/null
+++ b/sources
@@ -0,0 +1 @@
+370a6340ff20366ab088012cd13f2b57 serf-1.3.9.tar.bz2