Author: brane Date: Sat Jun 23 16:26:58 2018 New Revision: 1834217 URL: http://svn.apache.org/viewvc?rev=1834217&view=rev Log: Start working on a CMake-based build to eventually replace SCons.
* CMakeLists.txt, build/feature.cmake, build/version.cmake, build/FindApr.cmake, build/FindApu.cmake: New files. Added: serf/trunk/CMakeLists.txt (with props) serf/trunk/build/FindApr.cmake (with props) serf/trunk/build/FindApu.cmake (with props) serf/trunk/build/feature.cmake (with props) serf/trunk/build/version.cmake (with props) Added: serf/trunk/CMakeLists.txt URL: http://svn.apache.org/viewvc/serf/trunk/CMakeLists.txt?rev=1834217&view=auto ============================================================================== --- serf/trunk/CMakeLists.txt (added) +++ serf/trunk/CMakeLists.txt Sat Jun 23 16:26:58 2018 @@ -0,0 +1,92 @@ +# =================================================================== +# 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.2) + +set(CMAKE_MODULE_PATH "${CMAKE_SOURCE_DIR}/build") +include(version) +include(feature) + +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.") + + +set(HEADERS + "serf.h" + "serf_bucket_types.h" + "serf_bucket_util.h" +) + +file(GLOB SOURCES "src/*.c" "auth/*.c" "buckets/*.c" "protocols/*.c") +if(WINDOWS) + set(SHARED_SOURCES "serf.rc") +else(WINDOWS) + set(SHARED_SOURCES) +endif(WINDOWS) + + +find_package(openssl) +find_package(zlib) +find_package(apr) +find_package(apu) + +# Feature tests +CheckNotFunction("BIO_set_init" "SERF_NO_SSL_BIO_WRAPPERS" ${OPENSSL_LIBRARIES}) +CheckNotFunction("X509_STORE_get0_param" "SERF_NO_SSL_X509_STORE_WRAPPERS" ${OPENSSL_LIBRARIES}) +CheckNotFunction("X509_get0_notBefore" "SERF_NO_SSL_X509_GET0_NOTBEFORE" ${OPENSSL_LIBRARIES}) +CheckNotFunction("X509_get0_notAfter" "SERF_NO_SSL_X509_GET0_NOTAFTER" ${OPENSSL_LIBRARIES}) +CheckNotFunction("X509_STORE_CTX_get0_chain" "SERF_NO_SSL_X509_GET0_CHAIN" ${OPENSSL_LIBRARIES}) +CheckNotFunction("ASN1_STRING_get0_data" "SERF_NO_SSL_ASN1_STRING_GET0_DATA" ${OPENSSL_LIBRARIES}) +CheckFunction("CRYPTO_set_locking_callback" "SERF_HAVE_SSL_LOCKING_CALLBACKS" ${OPENSSL_LIBRARIES}) +CheckFunction("OPENSSL_malloc_init" "SERF_HAVE_OPENSSL_MALLOC_INIT" ${OPENSSL_LIBRARIES}) +CheckFunction("SSL_library_init" "SERF_HAVE_OPENSSL_SSL_LIBRARY_INIT" ${OPENSSL_LIBRARIES}) +CheckFunction("OpenSSL_version_num" "SERF_HAVE_OPENSSL_VERSION_NUM" ${OPENSSL_LIBRARIES}) +CheckFunction("SSL_set_alpn_protos" "SERF_HAVE_OPENSSL_ALPN" ${OPENSSL_LIBRARIES}) +CheckHeader("openssl/applink.c" "SERF_HAVE_OPENSSL_APPLINK_C" ${OPENSSL_INCLUDE_DIR}) +CheckType("OSSL_HANDSHAKE_STATE" "openssl/ssl.h" "SERF_HAVE_OSSL_HANDSHAKE_STATE" ${OPENSSL_INCLUDE_DIR}) + +set(DEPENDENCY_INCLUDE_DIRS + ${OPENSSL_INCLUDE_DIR} + ${ZLIB_INCLUDE_DIRS} + ${APR_INCLUDES} + ${APU_INCLUDES} +) +list(REMOVE_DUPLICATES DEPENDENCY_INCLUDE_DIRS) + +set(DEPENDENCY_LIBRARIES + ${OPENSSL_LIBRARIES} + ${ZLIB_LIBRARIES} + ${APR_LIBS} + ${APU_LIBS} +) +list(REMOVE_DUPLICATES DEPENDENCY_LIBRARIES) + +include_directories(BEFORE SYSTEM ${DEPENDENCY_INCLUDE_DIRS}) +include_directories(${CMAKE_SOURCE_DIR}) +add_library(SerfStatic STATIC ${SOURCES}) +add_library(SerfShared SHARED ${SOURCES} ${SHARED_SOURCES}) +target_link_libraries(SerfShared ${DEPENDENCY_LIBRARIES}) +set_target_properties(SerfStatic SerfShared + PROPERTIES + OUTPUT_NAME "serf-${SERF_MAJOR_VERSION}" + VERSION ${SERF_VERSION} + SOVERSION ${SERF_SOVERSION}) Propchange: serf/trunk/CMakeLists.txt ------------------------------------------------------------------------------ svn:eol-style = native Added: serf/trunk/build/FindApr.cmake URL: http://svn.apache.org/viewvc/serf/trunk/build/FindApr.cmake?rev=1834217&view=auto ============================================================================== --- serf/trunk/build/FindApr.cmake (added) +++ serf/trunk/build/FindApr.cmake Sat Jun 23 16:26:58 2018 @@ -0,0 +1,51 @@ +# Source: http://svn.trolocsis.com/repos/projects/templates/apr/build/FindAPR.cmake +# Locate APR include paths and libraries + +# This module defines +# APR_INCLUDES, where to find apr.h, etc. +# APR_LIBS, 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_FOUND, set to TRUE if found, FALSE otherwise +# APR_VERSION, the version of APR that was found + +set(APR_FOUND FALSE) + +find_program(APR_CONFIG_EXECUTABLE apr-1-config) +mark_as_advanced(APR_CONFIG_EXECUTABLE) + +macro(_apr_invoke _varname _separate _regexp) + execute_process( + COMMAND ${APR_CONFIG_EXECUTABLE} ${ARGN} + OUTPUT_VARIABLE _apr_output + RESULT_VARIABLE _apr_failed + ) + + if(_apr_failed) + message(FATAL_ERROR "${APR_CONFIG_EXECUTABLE} ${ARGN} failed") + else() + string(REGEX REPLACE "[\r\n]" "" _apr_output "${_apr_output}") + string(REGEX REPLACE " +$" "" _apr_output "${_apr_output}") + + if(NOT ${_regexp} STREQUAL "") + string(REGEX REPLACE "${_regexp}" " " _apr_output "${_apr_output}") + endif() + + # XXX: We don't want to invoke separate_arguments() for APR_CFLAGS; + # just leave as-is + if(${_separate}) + separate_arguments(_apr_output) + endif() + + set(${_varname} "${_apr_output}") + endif() +endmacro(_apr_invoke) + +_apr_invoke(APR_CFLAGS FALSE "" --cppflags --cflags) +_apr_invoke(APR_INCLUDES TRUE "(^| )-I" --includes) +_apr_invoke(APR_LIBS TRUE "" --link-ld) +_apr_invoke(APR_EXTRALIBS TRUE "(^| )-l" --libs) +_apr_invoke(APR_VERSION TRUE "" --version) + +INCLUDE(FindPackageHandleStandardArgs) +FIND_PACKAGE_HANDLE_STANDARD_ARGS(APR DEFAULT_MSG APR_INCLUDES APR_LIBS APR_VERSION) Propchange: serf/trunk/build/FindApr.cmake ------------------------------------------------------------------------------ svn:eol-style = native Added: serf/trunk/build/FindApu.cmake URL: http://svn.apache.org/viewvc/serf/trunk/build/FindApu.cmake?rev=1834217&view=auto ============================================================================== --- serf/trunk/build/FindApu.cmake (added) +++ serf/trunk/build/FindApu.cmake Sat Jun 23 16:26:58 2018 @@ -0,0 +1,51 @@ +# Locate apr-util include paths and libraries. Based on findapr.cmake; +# simple modifications to apply to apr-util instead. + +# This module defines +# APU_INCLUDES, where to find apu.h, etc. +# APU_LIBS, linker switches to use with ld to link against apr-util +# APU_EXTRALIBS, additional libraries to link against +# APU_LDFLAGS, additional linker flags that must be used +# APU_FOUND, set to TRUE if found, FALSE otherwise +# APU_VERSION, set to the version of apr-util found + +set(APU_FOUND FALSE) + +find_program(APU_CONFIG_EXECUTABLE apu-1-config) +mark_as_advanced(APU_CONFIG_EXECUTABLE) + +macro(_apu_invoke _varname _separate _regexp) + execute_process( + COMMAND ${APU_CONFIG_EXECUTABLE} ${ARGN} + OUTPUT_VARIABLE _apu_output + RESULT_VARIABLE _apu_failed + ) + + if(_apu_failed) + message(FATAL_ERROR "${APU_CONFIG_EXECUTABLE} ${ARGN} failed") + else() + string(REGEX REPLACE "[\r\n]" "" _apu_output "${_apu_output}") + string(REGEX REPLACE " +$" "" _apu_output "${_apu_output}") + + if(NOT ${_regexp} STREQUAL "") + string(REGEX REPLACE "${_regexp}" " " _apu_output "${_apu_output}") + endif() + + # XXX: We don't want to invoke separate_arguments() for APU_LDFLAGS; + # just leave as-is + if(${_separate}) + separate_arguments(_apu_output) + endif() + + set(${_varname} "${_apu_output}") + endif() +endmacro(_apu_invoke) + +_apu_invoke(APU_INCLUDES TRUE "(^| )-I" --includes) +_apu_invoke(APU_EXTRALIBS TRUE "(^| )-l" --libs) +_apu_invoke(APU_LIBS TRUE "" --link-ld) +_apu_invoke(APU_LDFLAGS FALSE "" --ldflags) +_apu_invoke(APU_VERSION TRUE "" --version) + +INCLUDE(FindPackageHandleStandardArgs) +FIND_PACKAGE_HANDLE_STANDARD_ARGS(APU DEFAULT_MSG APU_INCLUDES APU_LIBS APU_VERSION) Propchange: serf/trunk/build/FindApu.cmake ------------------------------------------------------------------------------ svn:eol-style = native Added: serf/trunk/build/feature.cmake URL: http://svn.apache.org/viewvc/serf/trunk/build/feature.cmake?rev=1834217&view=auto ============================================================================== --- serf/trunk/build/feature.cmake (added) +++ serf/trunk/build/feature.cmake Sat Jun 23 16:26:58 2018 @@ -0,0 +1,87 @@ +# =================================================================== +# 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(CheckTypeSize) + +function(_CheckFunction var_ name_ libraries_) + set(CMAKE_REQUIRED_LIBRARIES "${libraries_}") + 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(_CheckHeader var_ name_ includes_) + set(CMAKE_REQUIRED_INCLUDES "${includes_}") + 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_) + set(CMAKE_REQUIRED_INCLUDES "${includes_}") + set(CMAKE_EXTRA_INCLUDE_FILES "${header_}") + 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) Propchange: serf/trunk/build/feature.cmake ------------------------------------------------------------------------------ svn:eol-style = native Added: serf/trunk/build/version.cmake URL: http://svn.apache.org/viewvc/serf/trunk/build/version.cmake?rev=1834217&view=auto ============================================================================== --- serf/trunk/build/version.cmake (added) +++ serf/trunk/build/version.cmake Sat Jun 23 16:26:58 2018 @@ -0,0 +1,54 @@ +# =================================================================== +# 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. + +set(SERF_HEADER "${CMAKE_SOURCE_DIR}/serf.h") + +unset(SERF_VERSION) +unset(SERF_SOVERSION) +unset(SERF_MAJOR_VERSION) +unset(SERF_MINOR_VERSION) +unset(SERF_PATCH_VERSION) + +file(STRINGS "${SERF_HEADER}" SERF_VERSION_BITS + REGEX "^ *# *define +SERF_[A-Z]*_VERSION +[0-9]+ *$") +foreach(STR ${SERF_VERSION_BITS}) + if(STR MATCHES "^ *# *define +SERF_MAJOR_VERSION +([0-9])+ *$") + string(REGEX REPLACE "^ *# *define +SERF_MAJOR_VERSION +([0-9])+ *$" + "\\1" SERF_MAJOR_VERSION ${STR}) + endif() + if(STR MATCHES "^ *# *define +SERF_MINOR_VERSION +([0-9])+ *$") + string(REGEX REPLACE "^ *# *define +SERF_MINOR_VERSION +([0-9])+ *$" + "\\1" SERF_MINOR_VERSION ${STR}) + endif() + if(STR MATCHES "^ *# *define +SERF_PATCH_VERSION +([0-9])+ *$") + string(REGEX REPLACE "^ *# *define +SERF_PATCH_VERSION +([0-9])+ *$" + "\\1" SERF_PATCH_VERSION ${STR}) + endif() +endforeach() + +if(NOT DEFINED SERF_MAJOR_VERSION + OR NOT DEFINED SERF_MINOR_VERSION + OR NOT DEFINED SERF_PATCH_VERSION) + message(FATAL_ERROR "Could not find the version number in '${SERF_HEADER}'") +endif() + +set(SERF_VERSION "${SERF_MAJOR_VERSION}.${SERF_MINOR_VERSION}.${SERF_PATCH_VERSION}") +set(SERF_SOVERSION "${SERF_MAJOR_VERSION}.${SERF_MINOR_VERSION}.0") Propchange: serf/trunk/build/version.cmake ------------------------------------------------------------------------------ svn:eol-style = native