1 # Licensed to the Apache Software Foundation (ASF) under one or more
2 # contributor license agreements. See the NOTICE file distributed with
3 # this work for additional information regarding copyright ownership.
4 # The ASF licenses this file to You under the Apache License, Version 2.0
5 # (the "License"); you may not use this file except in compliance with
6 # the License. You may obtain a copy of the License at
8 # http://www.apache.org/licenses/LICENSE-2.0
10 # Unless required by applicable law or agreed to in writing, software
11 # distributed under the License is distributed on an "AS IS" BASIS,
12 # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 # See the License for the specific language governing permissions and
14 # limitations under the License.
16 # Read README.cmake before using this.
20 CMAKE_MINIMUM_REQUIRED(VERSION 2.8)
26 OPTION(APU_HAVE_CRYPTO "Crypto support" OFF)
27 OPTION(APU_HAVE_ODBC "Build ODBC DBD driver" ON)
28 OPTION(APR_HAS_LDAP "LDAP support" ON)
29 OPTION(INSTALL_PDB "Install .pdb files (if generated)" ON)
30 OPTION(APR_BUILD_TESTAPR "Build the test suite" OFF)
31 OPTION(TEST_STATIC_LIBS "Test programs use APR static libraries instead of shared libraries?" OFF)
32 SET(APR_INCLUDE_DIR "${CMAKE_INSTALL_PREFIX}/include" CACHE STRING "Directory with APR include files")
33 SET(APR_LIBRARIES "${CMAKE_INSTALL_PREFIX}/lib/libapr-1.lib" CACHE STRING "APR library to link with")
35 IF(NOT EXISTS "${APR_INCLUDE_DIR}/apr.h")
36 MESSAGE(FATAL_ERROR "APR include directory ${APR_INCLUDE_DIR} is not correct.")
38 FOREACH(onelib ${APR_LIBRARIES})
39 IF(NOT EXISTS ${onelib})
40 MESSAGE(FATAL_ERROR "APR library ${onelib} was not found.")
46 MESSAGE(FATAL_ERROR "OpenSSL is the only supported crypto implementation, and it wasn't found!")
50 # create 1-or-0 representation of feature tests for apu.h
52 SET(apu_have_crypto_10 0)
53 SET(apu_have_apr_iconv_10 0) # not yet implemented
54 SET(apr_has_ldap_10 0)
57 SET(apu_have_crypto_10 1)
61 SET(apr_has_ldap_10 1)
65 MESSAGE(FATAL_ERROR "Expat is required, and it wasn't found!")
68 SET(XMLLIB_INCLUDE_DIR ${EXPAT_INCLUDE_DIRS})
69 SET(XMLLIB_LIBRARIES ${EXPAT_LIBRARIES})
73 SET(LDAP_LIBRARIES wldap32)
76 CONFIGURE_FILE(include/apu.hwc
77 ${PROJECT_BINARY_DIR}/apu.h)
78 CONFIGURE_FILE(include/apr_ldap.hwc
79 ${PROJECT_BINARY_DIR}/apr_ldap.h)
80 # "COPYONLY" just because anything else isn't implemented ;)
81 CONFIGURE_FILE(include/private/apu_config.hw
82 ${PROJECT_BINARY_DIR}/apu_config.h
84 CONFIGURE_FILE(include/private/apu_select_dbm.hw
85 ${PROJECT_BINARY_DIR}/apu_select_dbm.h
87 CONFIGURE_FILE(include/apu_want.hw
88 ${PROJECT_BINARY_DIR}/apu_want.h
91 # Generated .h files are stored in PROJECT_BINARY_DIR, not the
94 # BROKEN: not searching PROJECT_BINARY_DIR first, so you have to
95 # manually delete apu.h in PROJECT_SOURCE_DIR/include if
96 # you've generated apu.h before using a different build
98 SET(APR_INCLUDE_DIRECTORIES
100 ${CMAKE_CURRENT_SOURCE_DIR}/include
101 ${CMAKE_CURRENT_SOURCE_DIR}/include/private
105 INCLUDE_DIRECTORIES(${APR_INCLUDE_DIRECTORIES} ${XMLLIB_INCLUDE_DIR})
107 SET(APR_PUBLIC_HEADERS_STATIC
108 include/apr_anylock.h
110 include/apr_buckets.h
116 include/apr_ldap_init.h
117 include/apr_ldap_option.h
118 include/apr_ldap_rebind.h
119 include/apr_ldap_url.h
122 include/apr_memcache.h
123 include/apr_optional.h
124 include/apr_optional_hooks.h
127 include/apr_reslist.h
131 include/apr_siphash.h
132 include/apr_strmatch.h
133 include/apr_thread_pool.h
139 include/apu_version.h
142 # apu_config.h and apu_select_dbm.h are private
143 SET(APR_PUBLIC_HEADERS_GENERATED
144 ${PROJECT_BINARY_DIR}/apu.h
145 ${PROJECT_BINARY_DIR}/apr_ldap.h
146 ${PROJECT_BINARY_DIR}/apu_want.h
150 buckets/apr_brigade.c
151 buckets/apr_buckets.c
152 buckets/apr_buckets_alloc.c
153 buckets/apr_buckets_eos.c
154 buckets/apr_buckets_file.c
155 buckets/apr_buckets_flush.c
156 buckets/apr_buckets_heap.c
157 buckets/apr_buckets_mmap.c
158 buckets/apr_buckets_pipe.c
159 buckets/apr_buckets_pool.c
160 buckets/apr_buckets_refcount.c
161 buckets/apr_buckets_simple.c
162 buckets/apr_buckets_socket.c
169 crypto/crypt_blowfish.c
179 encoding/apr_base64.c
181 memcache/apr_memcache.c
186 misc/apr_thread_pool.c
190 strmatch/apr_strmatch.c
197 SET(APR_SOURCES ${APR_SOURCES} ldap/apr_ldap_stub.c ldap/apr_ldap_url.c)
229 # Note: The WINNT definition on some targets is used only by libaprutil.rc.
231 # libaprutil-1 is shared, aprutil-1 is static
232 ADD_LIBRARY(libaprutil-1 SHARED ${APR_SOURCES} ${APR_PUBLIC_HEADERS_GENERATED} libaprutil.rc)
233 SET(install_targets ${install_targets} libaprutil-1)
234 SET(install_bin_pdb ${install_bin_pdb} ${PROJECT_BINARY_DIR}/libaprutil-1.pdb)
235 TARGET_LINK_LIBRARIES(libaprutil-1 ${APR_LIBRARIES} ${XMLLIB_LIBRARIES})
236 SET_TARGET_PROPERTIES(libaprutil-1 PROPERTIES COMPILE_DEFINITIONS "APU_DECLARE_EXPORT;APR_DECLARE_EXPORT;XML_STATIC;WINNT")
238 ADD_LIBRARY(aprutil-1 STATIC ${APR_SOURCES} ${APR_PUBLIC_HEADERS_GENERATED})
239 SET(install_targets ${install_targets} aprutil-1)
240 TARGET_LINK_LIBRARIES(aprutil-1 ${APR_LIBRARIES} ${XMLLIB_LIBRARIES})
241 SET_TARGET_PROPERTIES(aprutil-1 PROPERTIES COMPILE_DEFINITIONS "APU_DECLARE_STATIC;APR_DECLARE_STATIC;APU_DSO_MODULE_BUILD;XML_STATIC")
244 IF(NOT OPENSSL_FOUND)
245 MESSAGE(FATAL_ERROR "Only OpenSSL-based crypto is currently implemented in the cmake build")
247 ADD_LIBRARY(apr_crypto_openssl-1 SHARED crypto/apr_crypto_openssl.c libaprutil.rc)
248 SET(install_targets ${install_targets} apr_crypto_openssl-1)
249 SET(install_bin_pdb ${install_bin_pdb} ${PROJECT_BINARY_DIR}/apr_crypto_openssl-1.pdb)
250 SET_TARGET_PROPERTIES(apr_crypto_openssl-1 PROPERTIES INCLUDE_DIRECTORIES "${APR_INCLUDE_DIRECTORIES};${OPENSSL_INCLUDE_DIR}")
251 SET_TARGET_PROPERTIES(apr_crypto_openssl-1 PROPERTIES COMPILE_DEFINITIONS "WINNT")
252 SET_TARGET_PROPERTIES(apr_crypto_openssl-1 PROPERTIES COMPILE_FLAGS "-DAPR_DECLARE_EXPORT=1 -DAPU_DECLARE_EXPORT=1 -DDLL_NAME=apr_crypto_openssl")
253 TARGET_LINK_LIBRARIES(apr_crypto_openssl-1 libaprutil-1 ${APR_LIBRARIES} ${OPENSSL_LIBRARIES})
257 ADD_LIBRARY(apr_dbd_odbc-1 SHARED dbd/apr_dbd_odbc.c libaprutil.rc)
258 SET(install_targets ${install_targets} apr_dbd_odbc-1)
259 SET(install_bin_pdb ${install_bin_pdb} ${PROJECT_BINARY_DIR}/apr_dbd_odbc-1.pdb)
260 SET(dbd_drivers ${dbd_drivers} odbc)
261 TARGET_LINK_LIBRARIES(apr_dbd_odbc-1 libaprutil-1 ${APR_LIBRARIES} odbc32 odbccp32)
262 SET_PROPERTY(TARGET apr_dbd_odbc-1 APPEND PROPERTY LINK_FLAGS /export:apr_dbd_odbc_driver)
263 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")
264 SET_TARGET_PROPERTIES(apr_dbd_odbc-1 PROPERTIES COMPILE_FLAGS "-DAPR_DECLARE_EXPORT=1 -DAPU_DECLARE_EXPORT=1 -DDLL_NAME=apr_dbd_odbc")
268 ADD_LIBRARY(apr_ldap-1 SHARED ldap/apr_ldap_init.c ldap/apr_ldap_option.c
269 ldap/apr_ldap_rebind.c libaprutil.rc)
270 SET(install_targets ${install_targets} apr_ldap-1)
271 SET(install_bin_pdb ${install_bin_pdb} ${PROJECT_BINARY_DIR}/apr_ldap-1.pdb)
272 TARGET_LINK_LIBRARIES(apr_ldap-1 libaprutil-1 ${APR_LIBRARIES} ${LDAP_LIBRARIES})
273 SET_TARGET_PROPERTIES(apr_ldap-1 PROPERTIES COMPILE_DEFINITIONS "WINNT")
274 SET_TARGET_PROPERTIES(apr_ldap-1 PROPERTIES COMPILE_FLAGS "-DAPR_DECLARE_EXPORT=1 -DAPU_DECLARE_EXPORT=1 -DDLL_NAME=apr_ldap")
275 SET(apr_ldap_libraries apr_ldap-1)
277 SET(apr_ldap_libraries)
280 IF(APR_BUILD_TESTAPR)
282 # Create a "check" target that displays test program output to the console.
283 ADD_CUSTOM_TARGET(check COMMAND ${CMAKE_CTEST_COMMAND} --verbose)
285 # copy data files to build directory so that we can run programs from there
286 EXECUTE_PROCESS(COMMAND ${CMAKE_COMMAND} -E make_directory
287 ${PROJECT_BINARY_DIR}/data)
288 EXECUTE_PROCESS(COMMAND ${CMAKE_COMMAND} -E copy_if_different
289 ${PROJECT_SOURCE_DIR}/test/data/billion-laughs.xml
290 ${PROJECT_BINARY_DIR}/data/billion-laughs.xml)
293 SET(whichapr aprutil-1)
294 SET(apiflag "-DAPR_DECLARE_STATIC -DAPU_DECLARE_STATIC")
296 SET(whichapr libaprutil-1)
300 ADD_EXECUTABLE(testall ${APR_TEST_SOURCES})
301 TARGET_LINK_LIBRARIES(testall ${whichapr} ${apr_ldap_libraries} ${XMLLIB_LIBRARIES} ${LDAP_LIBRARIES})
303 SET_TARGET_PROPERTIES(testall PROPERTIES COMPILE_FLAGS ${apiflag})
305 ADD_TEST(NAME testall COMMAND testall)
307 ADD_EXECUTABLE(dbd test/dbd.c)
308 TARGET_LINK_LIBRARIES(dbd ${whichapr})
310 SET_TARGET_PROPERTIES(dbd PROPERTIES COMPILE_FLAGS ${apiflag})
313 # dbd is run multiple times with different parameters.
314 FOREACH(somedbd ${dbd_drivers})
315 ADD_TEST(NAME dbd-${somedbd} COMMAND dbd ${somedbd})
318 ENDIF (APR_BUILD_TESTAPR)
322 INSTALL(TARGETS ${install_targets}
323 RUNTIME DESTINATION bin
324 LIBRARY DESTINATION lib
325 ARCHIVE DESTINATION lib
329 INSTALL(FILES ${install_bin_pdb}
331 CONFIGURATIONS RelWithDebInfo Debug)
334 INSTALL(FILES ${APR_PUBLIC_HEADERS_STATIC} ${APR_PUBLIC_HEADERS_GENERATED} DESTINATION include)
336 STRING(TOUPPER "${CMAKE_BUILD_TYPE}" buildtype)
339 MESSAGE(STATUS "APR-Util configuration summary:")
341 MESSAGE(STATUS " Build type ...................... : ${CMAKE_BUILD_TYPE}")
342 MESSAGE(STATUS " Install .pdb (if available)...... : ${INSTALL_PDB}")
343 MESSAGE(STATUS " Install prefix .................. : ${CMAKE_INSTALL_PREFIX}")
344 MESSAGE(STATUS " C compiler ...................... : ${CMAKE_C_COMPILER}")
345 MESSAGE(STATUS " APR include directory ........... : ${APR_INCLUDE_DIR}")
346 MESSAGE(STATUS " APR libraries ................... : ${APR_LIBRARIES}")
347 MESSAGE(STATUS " DBD ODBC driver ................. : ${APU_HAVE_ODBC}")
348 MESSAGE(STATUS " APU_HAVE_CRYPTO ................. : ${APU_HAVE_CRYPTO}")
349 MESSAGE(STATUS " APR_HAS_LDAP .................... : ${APR_HAS_LDAP}")
350 MESSAGE(STATUS " Build test suite ................ : ${APR_BUILD_TESTAPR}")
352 MESSAGE(STATUS " (testing static libraries)")
354 MESSAGE(STATUS " (testing dynamic libraries)")