Blame CMakeLists.txt

Packit 383869
# Licensed to the Apache Software Foundation (ASF) under one or more
Packit 383869
# contributor license agreements.  See the NOTICE file distributed with
Packit 383869
# this work for additional information regarding copyright ownership.
Packit 383869
# The ASF licenses this file to You under the Apache License, Version 2.0
Packit 383869
# (the "License"); you may not use this file except in compliance with
Packit 383869
# the License.  You may obtain a copy of the License at
Packit 383869
#
Packit 383869
#     http://www.apache.org/licenses/LICENSE-2.0
Packit 383869
#
Packit 383869
# Unless required by applicable law or agreed to in writing, software
Packit 383869
# distributed under the License is distributed on an "AS IS" BASIS,
Packit 383869
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
Packit 383869
# See the License for the specific language governing permissions and
Packit 383869
# limitations under the License.
Packit 383869
#
Packit 383869
# Read README.cmake before using this.
Packit 383869
Packit 383869
PROJECT(APR-Util C)
Packit 383869
Packit 383869
CMAKE_MINIMUM_REQUIRED(VERSION 2.8)
Packit 383869
Packit 383869
FIND_PACKAGE(OpenSSL)
Packit 383869
Packit 383869
FIND_PACKAGE(expat)
Packit 383869
Packit 383869
OPTION(APU_HAVE_CRYPTO      "Crypto support"                            OFF)
Packit 383869
OPTION(APU_HAVE_ODBC        "Build ODBC DBD driver"                     ON)
Packit 383869
OPTION(APR_HAS_LDAP         "LDAP support"                              ON)
Packit 383869
OPTION(INSTALL_PDB          "Install .pdb files (if generated)"         ON)
Packit 383869
OPTION(APR_BUILD_TESTAPR    "Build the test suite"                      OFF)
Packit 383869
OPTION(TEST_STATIC_LIBS     "Test programs use APR static libraries instead of shared libraries?" OFF)
Packit 383869
SET(APR_INCLUDE_DIR         "${CMAKE_INSTALL_PREFIX}/include"           CACHE STRING "Directory with APR include files")
Packit 383869
SET(APR_LIBRARIES           "${CMAKE_INSTALL_PREFIX}/lib/libapr-1.lib"  CACHE STRING "APR library to link with")
Packit 383869
Packit 383869
IF(NOT EXISTS "${APR_INCLUDE_DIR}/apr.h")
Packit 383869
  MESSAGE(FATAL_ERROR "APR include directory ${APR_INCLUDE_DIR} is not correct.")
Packit 383869
ENDIF()
Packit 383869
FOREACH(onelib ${APR_LIBRARIES})
Packit 383869
  IF(NOT EXISTS ${onelib})
Packit 383869
    MESSAGE(FATAL_ERROR "APR library ${onelib} was not found.")
Packit 383869
  ENDIF()
Packit 383869
ENDFOREACH()
Packit 383869
Packit 383869
IF(APU_HAVE_CRYPTO)
Packit 383869
IF(NOT OPENSSL_FOUND)
Packit 383869
  MESSAGE(FATAL_ERROR "OpenSSL is the only supported crypto implementation, and it wasn't found!")
Packit 383869
ENDIF()
Packit 383869
ENDIF()
Packit 383869
Packit 383869
# create 1-or-0 representation of feature tests for apu.h
Packit 383869
Packit 383869
SET(apu_have_crypto_10 0)
Packit 383869
SET(apu_have_apr_iconv_10 0) # not yet implemented
Packit 383869
SET(apr_has_ldap_10 0)
Packit 383869
Packit 383869
IF(APU_HAVE_CRYPTO)
Packit 383869
  SET(apu_have_crypto_10 1)
Packit 383869
ENDIF()
Packit 383869
Packit 383869
IF(APR_HAS_LDAP)
Packit 383869
  SET(apr_has_ldap_10 1)
Packit 383869
ENDIF()
Packit 383869
Packit 383869
IF(NOT EXPAT_FOUND)
Packit 383869
  MESSAGE(FATAL_ERROR "Expat is required, and it wasn't found!")
Packit 383869
ENDIF()
Packit 383869
Packit 383869
SET(XMLLIB_INCLUDE_DIR   ${EXPAT_INCLUDE_DIRS})
Packit 383869
SET(XMLLIB_LIBRARIES     ${EXPAT_LIBRARIES})
Packit 383869
Packit 383869
SET(LDAP_LIBRARIES)
Packit 383869
IF(APR_HAS_LDAP)
Packit 383869
  SET(LDAP_LIBRARIES wldap32)
Packit 383869
ENDIF()
Packit 383869
Packit 383869
CONFIGURE_FILE(include/apu.hwc
Packit 383869
              ${PROJECT_BINARY_DIR}/apu.h)
Packit 383869
CONFIGURE_FILE(include/apr_ldap.hwc
Packit 383869
              ${PROJECT_BINARY_DIR}/apr_ldap.h)
Packit 383869
# "COPYONLY" just because anything else isn't implemented ;)
Packit 383869
CONFIGURE_FILE(include/private/apu_config.hw
Packit 383869
               ${PROJECT_BINARY_DIR}/apu_config.h
Packit 383869
               COPYONLY)
Packit 383869
CONFIGURE_FILE(include/private/apu_select_dbm.hw
Packit 383869
               ${PROJECT_BINARY_DIR}/apu_select_dbm.h
Packit 383869
               COPYONLY)
Packit 383869
CONFIGURE_FILE(include/apu_want.hw
Packit 383869
               ${PROJECT_BINARY_DIR}/apu_want.h
Packit 383869
               COPYONLY)
Packit 383869
Packit 383869
# Generated .h files are stored in PROJECT_BINARY_DIR, not the
Packit 383869
# source tree.
Packit 383869
#
Packit 383869
# BROKEN: not searching PROJECT_BINARY_DIR first, so you have to
Packit 383869
#         manually delete apu.h in PROJECT_SOURCE_DIR/include if
Packit 383869
#         you've generated apu.h before using a different build
Packit 383869
Packit 383869
SET(APR_INCLUDE_DIRECTORIES
Packit 383869
  ${PROJECT_BINARY_DIR}
Packit 383869
  ${CMAKE_CURRENT_SOURCE_DIR}/include
Packit 383869
  ${CMAKE_CURRENT_SOURCE_DIR}/include/private
Packit 383869
  ${APR_INCLUDE_DIR}
Packit 383869
)
Packit 383869
Packit 383869
INCLUDE_DIRECTORIES(${APR_INCLUDE_DIRECTORIES} ${XMLLIB_INCLUDE_DIR})
Packit 383869
Packit 383869
SET(APR_PUBLIC_HEADERS_STATIC
Packit 383869
  include/apr_anylock.h
Packit 383869
  include/apr_base64.h
Packit 383869
  include/apr_buckets.h
Packit 383869
  include/apr_crypto.h
Packit 383869
  include/apr_date.h
Packit 383869
  include/apr_dbd.h
Packit 383869
  include/apr_dbm.h
Packit 383869
  include/apr_hooks.h
Packit 383869
  include/apr_ldap_init.h
Packit 383869
  include/apr_ldap_option.h
Packit 383869
  include/apr_ldap_rebind.h
Packit 383869
  include/apr_ldap_url.h
Packit 383869
  include/apr_md4.h
Packit 383869
  include/apr_md5.h
Packit 383869
  include/apr_memcache.h
Packit 383869
  include/apr_optional.h
Packit 383869
  include/apr_optional_hooks.h
Packit 383869
  include/apr_queue.h
Packit 383869
  include/apr_redis.h
Packit 383869
  include/apr_reslist.h
Packit 383869
  include/apr_rmm.h
Packit 383869
  include/apr_sdbm.h
Packit 383869
  include/apr_sha1.h
Packit 383869
  include/apr_siphash.h
Packit 383869
  include/apr_strmatch.h
Packit 383869
  include/apr_thread_pool.h
Packit 383869
  include/apr_uri.h
Packit 383869
  include/apr_uuid.h
Packit 383869
  include/apr_xlate.h
Packit 383869
  include/apr_xml.h
Packit 383869
  include/apu_errno.h
Packit 383869
  include/apu_version.h
Packit 383869
)
Packit 383869
Packit 383869
# apu_config.h and apu_select_dbm.h are private
Packit 383869
SET(APR_PUBLIC_HEADERS_GENERATED
Packit 383869
  ${PROJECT_BINARY_DIR}/apu.h
Packit 383869
  ${PROJECT_BINARY_DIR}/apr_ldap.h
Packit 383869
  ${PROJECT_BINARY_DIR}/apu_want.h
Packit 383869
)
Packit 383869
Packit 383869
SET(APR_SOURCES
Packit 383869
  buckets/apr_brigade.c
Packit 383869
  buckets/apr_buckets.c
Packit 383869
  buckets/apr_buckets_alloc.c
Packit 383869
  buckets/apr_buckets_eos.c
Packit 383869
  buckets/apr_buckets_file.c
Packit 383869
  buckets/apr_buckets_flush.c
Packit 383869
  buckets/apr_buckets_heap.c
Packit 383869
  buckets/apr_buckets_mmap.c
Packit 383869
  buckets/apr_buckets_pipe.c
Packit 383869
  buckets/apr_buckets_pool.c
Packit 383869
  buckets/apr_buckets_refcount.c
Packit 383869
  buckets/apr_buckets_simple.c
Packit 383869
  buckets/apr_buckets_socket.c
Packit 383869
  crypto/apr_crypto.c
Packit 383869
  crypto/apr_md4.c
Packit 383869
  crypto/apr_md5.c
Packit 383869
  crypto/apr_passwd.c
Packit 383869
  crypto/apr_sha1.c
Packit 383869
  crypto/apr_siphash.c
Packit 383869
  crypto/crypt_blowfish.c
Packit 383869
  crypto/getuuid.c
Packit 383869
  crypto/uuid.c
Packit 383869
  dbd/apr_dbd.c
Packit 383869
  dbm/apr_dbm.c
Packit 383869
  dbm/apr_dbm_sdbm.c
Packit 383869
  dbm/sdbm/sdbm.c
Packit 383869
  dbm/sdbm/sdbm_hash.c
Packit 383869
  dbm/sdbm/sdbm_lock.c
Packit 383869
  dbm/sdbm/sdbm_pair.c
Packit 383869
  encoding/apr_base64.c
Packit 383869
  hooks/apr_hooks.c
Packit 383869
  memcache/apr_memcache.c
Packit 383869
  misc/apr_date.c
Packit 383869
  misc/apr_queue.c
Packit 383869
  misc/apr_reslist.c
Packit 383869
  misc/apr_rmm.c
Packit 383869
  misc/apr_thread_pool.c
Packit 383869
  misc/apu_dso.c
Packit 383869
  misc/apu_version.c
Packit 383869
  redis/apr_redis.c
Packit 383869
  strmatch/apr_strmatch.c
Packit 383869
  uri/apr_uri.c
Packit 383869
  xlate/xlate.c
Packit 383869
  xml/apr_xml.c
Packit 383869
)
Packit 383869
Packit 383869
IF(APR_HAS_LDAP)
Packit 383869
  SET(APR_SOURCES ${APR_SOURCES} ldap/apr_ldap_stub.c ldap/apr_ldap_url.c)
Packit 383869
ENDIF()
Packit 383869
Packit 383869
SET(APR_TEST_SOURCES
Packit 383869
  test/abts.c
Packit 383869
  test/testbuckets.c
Packit 383869
  test/testcrypto.c
Packit 383869
  test/testdate.c
Packit 383869
  test/testdbd.c
Packit 383869
  test/testdbm.c
Packit 383869
  test/testldap.c
Packit 383869
  test/testmd4.c
Packit 383869
  test/testmd5.c
Packit 383869
  test/testmemcache.c
Packit 383869
  test/testpass.c
Packit 383869
  test/testqueue.c
Packit 383869
  test/testredis.c
Packit 383869
  test/testreslist.c
Packit 383869
  test/testrmm.c
Packit 383869
  test/testsiphash.c
Packit 383869
  test/teststrmatch.c
Packit 383869
  test/testuri.c
Packit 383869
  test/testutil.c
Packit 383869
  test/testuuid.c
Packit 383869
  test/testxlate.c
Packit 383869
  test/testxml.c
Packit 383869
)
Packit 383869
Packit 383869
SET(install_targets)
Packit 383869
SET(install_bin_pdb)
Packit 383869
SET(dbd_drivers)
Packit 383869
Packit 383869
# Note: The WINNT definition on some targets is used only by libaprutil.rc.
Packit 383869
Packit 383869
# libaprutil-1 is shared, aprutil-1 is static
Packit 383869
ADD_LIBRARY(libaprutil-1 SHARED ${APR_SOURCES} ${APR_PUBLIC_HEADERS_GENERATED} libaprutil.rc)
Packit 383869
SET(install_targets ${install_targets} libaprutil-1)
Packit 383869
SET(install_bin_pdb ${install_bin_pdb} ${PROJECT_BINARY_DIR}/libaprutil-1.pdb)
Packit 383869
TARGET_LINK_LIBRARIES(libaprutil-1 ${APR_LIBRARIES} ${XMLLIB_LIBRARIES})
Packit 383869
SET_TARGET_PROPERTIES(libaprutil-1 PROPERTIES COMPILE_DEFINITIONS "APU_DECLARE_EXPORT;APR_DECLARE_EXPORT;XML_STATIC;WINNT")
Packit 383869
Packit 383869
ADD_LIBRARY(aprutil-1 STATIC ${APR_SOURCES} ${APR_PUBLIC_HEADERS_GENERATED})
Packit 383869
SET(install_targets ${install_targets} aprutil-1)
Packit 383869
TARGET_LINK_LIBRARIES(aprutil-1 ${APR_LIBRARIES} ${XMLLIB_LIBRARIES})
Packit 383869
SET_TARGET_PROPERTIES(aprutil-1 PROPERTIES COMPILE_DEFINITIONS "APU_DECLARE_STATIC;APR_DECLARE_STATIC;APU_DSO_MODULE_BUILD;XML_STATIC")
Packit 383869
Packit 383869
IF(APU_HAVE_CRYPTO)
Packit 383869
  IF(NOT OPENSSL_FOUND)
Packit 383869
    MESSAGE(FATAL_ERROR "Only OpenSSL-based crypto is currently implemented in the cmake build")
Packit 383869
  ENDIF()
Packit 383869
  ADD_LIBRARY(apr_crypto_openssl-1 SHARED crypto/apr_crypto_openssl.c libaprutil.rc)
Packit 383869
  SET(install_targets ${install_targets} apr_crypto_openssl-1)
Packit 383869
  SET(install_bin_pdb ${install_bin_pdb} ${PROJECT_BINARY_DIR}/apr_crypto_openssl-1.pdb)
Packit 383869
  SET_TARGET_PROPERTIES(apr_crypto_openssl-1 PROPERTIES INCLUDE_DIRECTORIES "${APR_INCLUDE_DIRECTORIES};${OPENSSL_INCLUDE_DIR}")
Packit 383869
  SET_TARGET_PROPERTIES(apr_crypto_openssl-1 PROPERTIES COMPILE_DEFINITIONS "WINNT")
Packit 383869
  SET_TARGET_PROPERTIES(apr_crypto_openssl-1 PROPERTIES COMPILE_FLAGS "-DAPR_DECLARE_EXPORT=1 -DAPU_DECLARE_EXPORT=1 -DDLL_NAME=apr_crypto_openssl")
Packit 383869
  TARGET_LINK_LIBRARIES(apr_crypto_openssl-1 libaprutil-1 ${APR_LIBRARIES} ${OPENSSL_LIBRARIES})
Packit 383869
ENDIF()
Packit 383869
Packit 383869
IF(APU_HAVE_ODBC)
Packit 383869
  ADD_LIBRARY(apr_dbd_odbc-1 SHARED dbd/apr_dbd_odbc.c libaprutil.rc)
Packit 383869
  SET(install_targets ${install_targets} apr_dbd_odbc-1)
Packit 383869
  SET(install_bin_pdb ${install_bin_pdb} ${PROJECT_BINARY_DIR}/apr_dbd_odbc-1.pdb)
Packit 383869
  SET(dbd_drivers ${dbd_drivers} odbc)
Packit 383869
  TARGET_LINK_LIBRARIES(apr_dbd_odbc-1 libaprutil-1 ${APR_LIBRARIES} odbc32 odbccp32)
Packit 383869
  SET_PROPERTY(TARGET apr_dbd_odbc-1 APPEND PROPERTY LINK_FLAGS /export:apr_dbd_odbc_driver)
Packit 383869
  SET_TARGET_PROPERTIES(apr_dbd_odbc-1 PROPERTIES COMPILE_DEFINITIONS "APU_HAVE_ODBC;HAVE_SQL_H;APU_DECLARE_EXPORT;APR_DECLARE_EXPORT;APU_DSO_MODULE_BUILD;WINNT")
Packit 383869
  SET_TARGET_PROPERTIES(apr_dbd_odbc-1 PROPERTIES COMPILE_FLAGS "-DAPR_DECLARE_EXPORT=1 -DAPU_DECLARE_EXPORT=1 -DDLL_NAME=apr_dbd_odbc")
Packit 383869
ENDIF()
Packit 383869
Packit 383869
IF(APR_HAS_LDAP)
Packit 383869
  ADD_LIBRARY(apr_ldap-1 SHARED ldap/apr_ldap_init.c ldap/apr_ldap_option.c 
Packit 383869
              ldap/apr_ldap_rebind.c libaprutil.rc)
Packit 383869
  SET(install_targets ${install_targets} apr_ldap-1)
Packit 383869
  SET(install_bin_pdb ${install_bin_pdb} ${PROJECT_BINARY_DIR}/apr_ldap-1.pdb)
Packit 383869
  TARGET_LINK_LIBRARIES(apr_ldap-1 libaprutil-1 ${APR_LIBRARIES} ${LDAP_LIBRARIES})
Packit 383869
  SET_TARGET_PROPERTIES(apr_ldap-1 PROPERTIES COMPILE_DEFINITIONS "WINNT")
Packit 383869
  SET_TARGET_PROPERTIES(apr_ldap-1 PROPERTIES COMPILE_FLAGS "-DAPR_DECLARE_EXPORT=1 -DAPU_DECLARE_EXPORT=1 -DDLL_NAME=apr_ldap")
Packit 383869
  SET(apr_ldap_libraries apr_ldap-1)
Packit 383869
ELSE()
Packit 383869
  SET(apr_ldap_libraries)
Packit 383869
ENDIF()
Packit 383869
Packit 383869
IF(APR_BUILD_TESTAPR)
Packit 383869
  ENABLE_TESTING()
Packit 383869
  # Create a "check" target that displays test program output to the console.
Packit 383869
  ADD_CUSTOM_TARGET(check COMMAND ${CMAKE_CTEST_COMMAND} --verbose)
Packit 383869
Packit 383869
  # copy data files to build directory so that we can run programs from there
Packit 383869
  EXECUTE_PROCESS(COMMAND ${CMAKE_COMMAND} -E make_directory 
Packit 383869
                  ${PROJECT_BINARY_DIR}/data)
Packit 383869
  EXECUTE_PROCESS(COMMAND ${CMAKE_COMMAND} -E copy_if_different 
Packit 383869
                  ${PROJECT_SOURCE_DIR}/test/data/billion-laughs.xml
Packit 383869
                  ${PROJECT_BINARY_DIR}/data/billion-laughs.xml)
Packit 383869
Packit 383869
  IF(TEST_STATIC_LIBS)
Packit 383869
    SET(whichapr    aprutil-1)
Packit 383869
    SET(apiflag     "-DAPR_DECLARE_STATIC -DAPU_DECLARE_STATIC")
Packit 383869
  ELSE()
Packit 383869
    SET(whichapr    libaprutil-1)
Packit 383869
    SET(apiflag)
Packit 383869
  ENDIF()
Packit 383869
Packit 383869
  ADD_EXECUTABLE(testall ${APR_TEST_SOURCES})
Packit 383869
  TARGET_LINK_LIBRARIES(testall ${whichapr} ${apr_ldap_libraries} ${XMLLIB_LIBRARIES} ${LDAP_LIBRARIES})
Packit 383869
  IF(apiflag)
Packit 383869
    SET_TARGET_PROPERTIES(testall PROPERTIES COMPILE_FLAGS ${apiflag})
Packit 383869
  ENDIF()
Packit 383869
  ADD_TEST(NAME testall COMMAND testall)
Packit 383869
Packit 383869
  ADD_EXECUTABLE(dbd test/dbd.c)
Packit 383869
  TARGET_LINK_LIBRARIES(dbd ${whichapr})
Packit 383869
  IF(apiflag)
Packit 383869
    SET_TARGET_PROPERTIES(dbd PROPERTIES COMPILE_FLAGS ${apiflag})
Packit 383869
  ENDIF()
Packit 383869
Packit 383869
  # dbd is run multiple times with different parameters.
Packit 383869
  FOREACH(somedbd ${dbd_drivers})
Packit 383869
    ADD_TEST(NAME dbd-${somedbd} COMMAND dbd ${somedbd})
Packit 383869
  ENDFOREACH()
Packit 383869
Packit 383869
ENDIF (APR_BUILD_TESTAPR)
Packit 383869
Packit 383869
# Installation
Packit 383869
Packit 383869
INSTALL(TARGETS ${install_targets}
Packit 383869
        RUNTIME DESTINATION bin
Packit 383869
        LIBRARY DESTINATION lib
Packit 383869
        ARCHIVE DESTINATION lib
Packit 383869
       )
Packit 383869
Packit 383869
IF(INSTALL_PDB)
Packit 383869
  INSTALL(FILES ${install_bin_pdb}
Packit 383869
          DESTINATION bin
Packit 383869
          CONFIGURATIONS RelWithDebInfo Debug)
Packit 383869
ENDIF()
Packit 383869
Packit 383869
INSTALL(FILES ${APR_PUBLIC_HEADERS_STATIC} ${APR_PUBLIC_HEADERS_GENERATED} DESTINATION include)
Packit 383869
Packit 383869
STRING(TOUPPER "${CMAKE_BUILD_TYPE}" buildtype)
Packit 383869
MESSAGE(STATUS "")
Packit 383869
MESSAGE(STATUS "")
Packit 383869
MESSAGE(STATUS "APR-Util configuration summary:")
Packit 383869
MESSAGE(STATUS "")
Packit 383869
MESSAGE(STATUS "  Build type ...................... : ${CMAKE_BUILD_TYPE}")
Packit 383869
MESSAGE(STATUS "  Install .pdb (if available)...... : ${INSTALL_PDB}")
Packit 383869
MESSAGE(STATUS "  Install prefix .................. : ${CMAKE_INSTALL_PREFIX}")
Packit 383869
MESSAGE(STATUS "  C compiler ...................... : ${CMAKE_C_COMPILER}")
Packit 383869
MESSAGE(STATUS "  APR include directory ........... : ${APR_INCLUDE_DIR}")
Packit 383869
MESSAGE(STATUS "  APR libraries ................... : ${APR_LIBRARIES}")
Packit 383869
MESSAGE(STATUS "  DBD ODBC driver ................. : ${APU_HAVE_ODBC}")
Packit 383869
MESSAGE(STATUS "  APU_HAVE_CRYPTO ................. : ${APU_HAVE_CRYPTO}")
Packit 383869
MESSAGE(STATUS "  APR_HAS_LDAP .................... : ${APR_HAS_LDAP}")
Packit 383869
MESSAGE(STATUS "  Build test suite ................ : ${APR_BUILD_TESTAPR}")
Packit 383869
IF(TEST_STATIC_LIBS)
Packit 383869
MESSAGE(STATUS "    (testing static libraries)")
Packit 383869
ELSE()
Packit 383869
MESSAGE(STATUS "    (testing dynamic libraries)")
Packit 383869
ENDIF()