This is barely enough to run testapr. For now it is intended only for
Windows. include/apr.hwc is just apr.hw with variables for
APR_HAS_EXPAT|LIBXML2. (And sorry about that mixed LF/CR-LF patch.)
I point to the latest Windows binary installs of libxml2 and expat like
this:
set
CMAKE_LIBRARY_PATH=c:\Users\Trawick\libxml2-2.7.8.win32\lib;c:\Users\Trawick\Expat2.1.0\Bin;
set
CMAKE_INCLUDE_PATH=c:\Users\Trawick\libxml2-2.7.8.win32\include;c:\Users\Trawick\Expat2.1.0\Source\lib
and I've only used the nmake backend (from a VS 2010 prompt).
I haven't actually tried very hard to use libxml2; the build I have seems
to want a GNU iconv?? More work would be required to use that.
--
Born in Roswell... married an alien...
http://emptyhammock.com/
Index: CMakeLists.txt
===================================================================
--- CMakeLists.txt (revision 0)
+++ CMakeLists.txt (working copy)
@@ -0,0 +1,342 @@
+PROJECT(APR C)
+
+CMAKE_MINIMUM_REQUIRED(VERSION 2.8.6)
+
+INCLUDE(GenerateExportHeader)
+
+# Either Expat or LibXml2 is required
+FIND_PACKAGE(Expat)
+FIND_PACKAGE(LibXml2)
+
+IF(NOT EXPAT_FOUND AND NOT LIBXML2_FOUND)
+ MESSAGE(FATAL_ERROR "Either Expat or LibXml2 is required, but neither was
found")
+ENDIF()
+
+IF(EXPAT_FOUND)
+ OPTION(APR_USE_EXPAT "Use Expat" ON)
+ IF(LIBXML2_FOUND)
+ OPTION(APR_USE_LIBXML2 "Use LibXml2" OFF)
+ ENDIF()
+ELSE()
+ OPTION(APR_USE_LIBXML2 "Use LibXml2" ON)
+ENDIF()
+
+OPTION(APR_SHOW_SETTINGS "Show the build configuration" ON)
+OPTION(APR_BUILD_TESTAPR "Build the test suite" OFF)
+
+IF(NOT APR_USE_EXPAT AND NOT APR_USE_LIBXML2)
+ MESSAGE(FATAL_ERROR "Either Expat or LibXml2 must be selected")
+ENDIF()
+IF(APR_USE_EXPAT AND APR_USE_LIBXML2)
+ MESSAGE(FATAL_ERROR "Only one of Expat and LibXml2 can be selected")
+ENDIF()
+IF(APR_USE_EXPAT)
+ SET(apr_use_expat_10 1)
+ SET(apr_use_libxml2_10 0)
+ELSE()
+ SET(apr_use_expat_10 0)
+ SET(apr_use_libxml2_10 1)
+ENDIF()
+
+CONFIGURE_FILE(include/apr.hwc
+ ${PROJECT_BINARY_DIR}/apr.h)
+
+IF(APR_USE_EXPAT)
+ SET(XMLLIB_INCLUDE_DIR ${EXPAT_INCLUDE_DIRS})
+ SET(XMLLIB_LIBRARIES ${EXPAT_LIBRARIES})
+ELSE()
+ SET(XMLLIB_INCLUDE_DIR ${LIBXML2_INCLUDE_DIR})
+ SET(XMLLIB_LIBRARIES ${LIBXML2_LIBRARIES})
+ENDIF()
+
+# BROKEN: not searching PROJECT_BINARY_DIR first, so I have to
+# manually delete apr.h in PROJECT_SOURCE_DIR/include if
+# I've generated apr.h before using a Unix-style build
+INCLUDE_DIRECTORIES(${PROJECT_BINARY_DIR} ${PROJECT_SOURCE_DIR}/include
${PROJECT_SOURCE_DIR}/include/private ${PROJECT_SOURCE_DIR}/include/arch/win32
${PROJECT_SOURCE_DIR}/include/private ${PROJECT_SOURCE_DIR}/include/arch/unix
${XMLLIB_INCLUDE_DIR})
+
+ADD_DEFINITIONS(-DAPR_DECLARE_EXPORT)
+
+SET(APR_HEADERS ${PROJECT_BINARY_DIR}/apr.h)
+
+SET(APR_SOURCES
+ exports.c
+ export_vars.c
+ atomic/win32/apr_atomic.c
+ buckets/apr_brigade.c
+ buckets/apr_buckets.c
+ buckets/apr_buckets_alloc.c
+ buckets/apr_buckets_eos.c
+ buckets/apr_buckets_file.c
+ buckets/apr_buckets_flush.c
+ buckets/apr_buckets_heap.c
+ buckets/apr_buckets_mmap.c
+ buckets/apr_buckets_pipe.c
+ buckets/apr_buckets_pool.c
+ buckets/apr_buckets_refcount.c
+ buckets/apr_buckets_simple.c
+ buckets/apr_buckets_socket.c
+ crypto/apr_crypto.c
+ crypto/apr_crypto_commoncrypto.c
+ crypto/apr_crypto_nss.c
+ crypto/apr_crypto_openssl.c
+ crypto/apr_md4.c
+ crypto/apr_md5.c
+ crypto/apr_passwd.c
+ crypto/apr_sha1.c
+ crypto/crypt_blowfish.c
+ crypto/getuuid.c
+ crypto/uuid.c
+ dbd/apr_dbd.c
+ dbd/apr_dbd_mysql.c
+ dbd/apr_dbd_odbc.c
+ dbd/apr_dbd_oracle.c
+ dbd/apr_dbd_pgsql.c
+ dbd/apr_dbd_sqlite2.c
+ dbd/apr_dbd_sqlite3.c
+ dbd/unsupported/apr_dbd_freetds.c
+ dbm/apr_dbm.c
+ dbm/apr_dbm_berkeleydb.c
+ dbm/apr_dbm_gdbm.c
+ dbm/apr_dbm_ndbm.c
+ dbm/apr_dbm_sdbm.c
+ dbm/sdbm/sdbm.c
+ dbm/sdbm/sdbm_hash.c
+ dbm/sdbm/sdbm_lock.c
+ dbm/sdbm/sdbm_pair.c
+ dso/win32/dso.c
+ encoding/apr_base64.c
+ encoding/apr_escape.c
+ file_io/unix/copy.c
+ file_io/unix/fileacc.c
+ file_io/unix/filepath_util.c
+ file_io/unix/fullrw.c
+ file_io/unix/mktemp.c
+ file_io/unix/tempdir.c
+ file_io/win32/buffer.c
+ file_io/win32/dir.c
+ file_io/win32/filedup.c
+ file_io/win32/filepath.c
+ file_io/win32/filestat.c
+ file_io/win32/filesys.c
+ file_io/win32/flock.c
+ file_io/win32/open.c
+ file_io/win32/pipe.c
+ file_io/win32/readwrite.c
+ file_io/win32/seek.c
+ hooks/apr_hooks.c
+ locks/win32/proc_mutex.c
+ locks/win32/thread_cond.c
+ locks/win32/thread_mutex.c
+ locks/win32/thread_rwlock.c
+ memcache/apr_memcache.c
+ memory/unix/apr_pools.c
+ misc/unix/errorcodes.c
+ misc/unix/getopt.c
+ misc/unix/otherchild.c
+ misc/unix/version.c
+ misc/win32/apr_app.c
+ misc/win32/charset.c
+ misc/win32/env.c
+ misc/win32/internal.c
+ misc/win32/misc.c
+ misc/win32/rand.c
+ misc/win32/start.c
+ misc/win32/utf8.c
+ mmap/unix/common.c
+ mmap/win32/mmap.c
+ network_io/unix/inet_ntop.c
+ network_io/unix/inet_pton.c
+ network_io/unix/multicast.c
+ network_io/unix/sockaddr.c
+ network_io/unix/socket_util.c
+ network_io/win32/sendrecv.c
+ network_io/win32/sockets.c
+ network_io/win32/sockopt.c
+ passwd/apr_getpass.c
+ poll/unix/poll.c
+ poll/unix/pollcb.c
+ poll/unix/pollset.c
+ poll/unix/select.c
+ poll/unix/wakeup.c
+ random/unix/apr_random.c
+ random/unix/sha2.c
+ random/unix/sha2_glue.c
+ shmem/win32/shm.c
+ strings/apr_cpystrn.c
+ strings/apr_fnmatch.c
+ strings/apr_snprintf.c
+ strings/apr_strings.c
+ strings/apr_strnatcmp.c
+ strings/apr_strtok.c
+ strmatch/apr_strmatch.c
+ tables/apr_hash.c
+ tables/apr_tables.c
+ threadproc/win32/proc.c
+ threadproc/win32/signals.c
+ threadproc/win32/thread.c
+ threadproc/win32/threadpriv.c
+ time/win32/time.c
+ time/win32/timestr.c
+ tools/gen_test_char.c
+ uri/apr_uri.c
+ user/win32/groupinfo.c
+ user/win32/userinfo.c
+ util-misc/apr_date.c
+ util-misc/apr_queue.c
+ util-misc/apr_reslist.c
+ util-misc/apr_rmm.c
+ util-misc/apr_thread_pool.c
+ util-misc/apu_dso.c
+ xlate/xlate.c
+ xml/apr_xml.c
+ xml/apr_xml_expat.c
+ xml/apr_xml_libxml2.c
+)
+
+SET(APR_TEST_SOURCES
+ test/abts.c
+ test/testargs.c
+ test/testatomic.c
+ test/testbase64.c
+ test/testbuckets.c
+ test/testcond.c
+ test/testcrypto.c
+ test/testdate.c
+ test/testdbd.c
+ test/testdbm.c
+ test/testdir.c
+ test/testdso.c
+ test/testdup.c
+ test/testenv.c
+ test/testescape.c
+ test/testfile.c
+ test/testfilecopy.c
+ test/testfileinfo.c
+ test/testflock.c
+ test/testfmt.c
+ test/testfnmatch.c
+ test/testglobalmutex.c
+ test/testhash.c
+ test/testhooks.c
+ test/testipsub.c
+ test/testlfs.c
+ test/testlfsabi.c
+ test/testlfsabi32.c
+ test/testlfsabi64.c
+ test/testlfsabi_include.c
+ test/testlock.c
+ test/testmd4.c
+ test/testmd5.c
+ test/testmemcache.c
+ test/testmmap.c
+ test/testnames.c
+ test/testoc.c
+ test/testpass.c
+ test/testpath.c
+ test/testpipe.c
+ test/testpoll.c
+ test/testpools.c
+ test/testproc.c
+ test/testprocmutex.c
+ test/testqueue.c
+ test/testrand.c
+ test/testreslist.c
+ test/testrmm.c
+ test/testshm.c
+ test/testsleep.c
+ test/testsock.c
+ test/testsockets.c
+ test/testsockopt.c
+ test/teststr.c
+ test/teststrmatch.c
+ test/teststrnatcmp.c
+ test/testtable.c
+ test/testtemp.c
+ test/testthread.c
+ test/testtime.c
+ test/testud.c
+ test/testuri.c
+ test/testuser.c
+ test/testutil.c
+ test/testuuid.c
+ test/testvsn.c
+ test/testxlate.c
+ test/testxml.c
+)
+
+ADD_LIBRARY(apr ${APR_HEADERS} ${APR_SOURCES} ${PROJECT_BINARY_DIR}/apr.h)
+SET(targets ${targets} apr)
+TARGET_LINK_LIBRARIES(apr)
+
+SET(WINDOWS_LIBS
+ wsock32
+ ws2_32
+ rpcrt4
+)
+
+IF(APR_BUILD_TESTAPR)
+ EXECUTE_PROCESS(COMMAND ${CMAKE_COMMAND} -E make_directory
${PROJECT_BINARY_DIR}/data)
+ EXECUTE_PROCESS(COMMAND ${CMAKE_COMMAND} -E copy_if_different
${PROJECT_SOURCE_DIR}/test/data/billion-laughs.xml
${PROJECT_BINARY_DIR}/data/billion-laughs.xml)
+ EXECUTE_PROCESS(COMMAND ${CMAKE_COMMAND} -E copy_if_different
${PROJECT_SOURCE_DIR}/test/data/file_datafile.txt
${PROJECT_BINARY_DIR}/data/file_datafile.txt)
+ EXECUTE_PROCESS(COMMAND ${CMAKE_COMMAND} -E copy_if_different
${PROJECT_SOURCE_DIR}/test/data/mmap_datafile.txt
${PROJECT_BINARY_DIR}/data/mmap_datafile.txt)
+
+ ADD_EXECUTABLE(testall ${APR_TEST_SOURCES})
+ SET(targets ${targets} testall)
+ TARGET_LINK_LIBRARIES(testall apr ${XMLLIB_LIBRARIES} ${WINDOWS_LIBS})
+
+ ADD_LIBRARY(mod_test MODULE test/mod_test.c)
+ SET(targets ${targets} mod_test)
+ TARGET_LINK_LIBRARIES(mod_test apr ${WINDOWS_LIBS})
+ SET_PROPERTY(TARGET mod_test APPEND PROPERTY LINK_FLAGS /export:print_hello)
+ # nasty work-around for difficulties adding more than one additional flag
+ # (they get joined in a bad way behind the scenes)
+ GET_PROPERTY(link_flags TARGET mod_test PROPERTY LINK_FLAGS)
+ SET(link_flags "${link_flags} /export:count_reps")
+ SET_TARGET_PROPERTIES(mod_test PROPERTIES LINK_FLAGS ${link_flags})
+
+ ADD_EXECUTABLE(occhild test/occhild.c)
+ SET(targets ${targets} occhild)
+ TARGET_LINK_LIBRARIES(occhild apr ${WINDOWS_LIBS})
+
+ ADD_EXECUTABLE(globalmutexchild test/globalmutexchild.c)
+ SET(targets ${targets} globalmutexchild)
+ TARGET_LINK_LIBRARIES(globalmutexchild apr ${WINDOWS_LIBS})
+
+ ADD_EXECUTABLE(proc_child test/proc_child.c)
+ SET(targets ${targets} proc_child)
+ TARGET_LINK_LIBRARIES(proc_child apr ${WINDOWS_LIBS})
+
+ ADD_EXECUTABLE(readchild test/readchild.c)
+ SET(targets ${targets} readchild)
+ TARGET_LINK_LIBRARIES(readchild apr ${WINDOWS_LIBS})
+
+ ADD_EXECUTABLE(sockchild test/sockchild.c)
+ SET(targets ${targets} sockchild)
+ TARGET_LINK_LIBRARIES(sockchild apr ${WINDOWS_LIBS})
+
+ ADD_EXECUTABLE(testshmconsumer test/testshmconsumer.c)
+ SET(targets ${targets} testshmconsumer)
+ TARGET_LINK_LIBRARIES(testshmconsumer apr ${WINDOWS_LIBS})
+
+ ADD_EXECUTABLE(testshmproducer test/testshmproducer.c)
+ SET(targets ${targets} testshmproducer)
+ TARGET_LINK_LIBRARIES(testshmproducer apr ${WINDOWS_LIBS})
+
+ ADD_EXECUTABLE(tryread test/tryread.c)
+ SET(targets ${targets} tryread)
+ TARGET_LINK_LIBRARIES(tryread apr ${WINDOWS_LIBS})
+ENDIF (APR_BUILD_TESTAPR)
+
+IF(APR_SHOW_SETTINGS)
+ STRING(TOUPPER "${CMAKE_BUILD_TYPE}" buildtype)
+ MESSAGE(STATUS "")
+ MESSAGE(STATUS "")
+ MESSAGE(STATUS "APR configuration summary:")
+ MESSAGE(STATUS "")
+ MESSAGE(STATUS " Install prefix .................. :
${CMAKE_INSTALL_PREFIX}")
+ MESSAGE(STATUS " C compiler ...................... : ${CMAKE_C_COMPILER}")
+ MESSAGE(STATUS " Use Expat ....................... : ${APR_USE_EXPAT}")
+ MESSAGE(STATUS " Use LibXml2 ..................... : ${APR_USE_LIBXML2}")
+ MESSAGE(STATUS " Library files for XML ........... : ${XMLLIB_LIBRARIES}")
+ MESSAGE(STATUS " Build test suite ................ : ${APR_BUILD_TESTAPR}")
+ENDIF(APR_SHOW_SETTINGS)
Index: include/apr.hwc
===================================================================
--- include/apr.hwc (revision 0)
+++ include/apr.hwc (working copy)
@@ -0,0 +1,739 @@
+/* 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.
+ */
+
+
+#ifndef APR_H
+#define APR_H
+
+/* GENERATED FILE WARNING! DO NOT EDIT apr.h
+ *
+ * You must modify apr.hw instead.
+ *
+ * And please, make an effort to stub apr.hnw and apr.h.in in the process.
+ *
+ * This is the Win32 specific version of apr.h. It is copied from
+ * apr.hw by the apr.dsp and libapr.dsp projects.
+ */
+
+/**
+ * @file apr.h
+ * @brief APR Platform Definitions
+ * @remark This is a generated header generated from include/apr.h.in by
+ * ./configure, or copied from include/apr.hw or include/apr.hnw
+ * for Win32 or Netware by those build environments, respectively.
+ */
+
+/* Make sure we have our platform identifier macro defined we ask for later.
+ */
+#if defined(_WIN32) && !defined(WIN32)
+#define WIN32 1
+#endif
+
+/* Ignore most warnings (back down to /W3) for poorly constructed headers,
+ * excluded from doxygen parsing
+ */
+#if defined(_MSC_VER) && _MSC_VER >= 1200
+#pragma warning(push, 3)
+#endif
+
+/* disable or reduce the frequency of...
+ * C4057: indirection to slightly different base types
+ * C4075: slight indirection changes (unsigned short* vs short[])
+ * C4100: unreferenced formal parameter
+ * C4127: conditional expression is constant
+ * C4163: '_rotl64' : not available as an intrinsic function
+ * C4201: nonstandard extension nameless struct/unions
+ * C4244: int to char/short - precision loss
+ * C4514: unreferenced inline function removed
+ */
+#if defined(_MSC_VER)
+#pragma warning(disable: 4100 4127 4163 4201 4514; once: 4057 4075 4244)
+#endif
+
+/* Ignore Microsoft's interpretation of secure development
+ * and the POSIX string handling API
+ */
+#if defined(_MSC_VER) && _MSC_VER >= 1400
+#ifndef _CRT_SECURE_NO_DEPRECATE
+#define _CRT_SECURE_NO_DEPRECATE
+#endif
+#pragma warning(disable: 4996)
+#endif
+
+/**
+ * @file apr.h
+ * @brief APR Platform Definitions
+ * @remark This is a generated header generated from include/apr.h.in by
+ * ./configure, or copied from include/apr.hw or include/apr.hnw
+ * for Win32 or Netware by those build environments, respectively.
+ */
+
+/**
+ * @defgroup APR Apache Portability Runtime library
+ * @{
+ */
+/**
+ * @defgroup apr_platform Platform Definitions
+ * @{
+ * @warning
+ * <strong><em>The actual values of macros and typedefs on this page<br>
+ * are platform specific and should NOT be relied upon!</em></strong>
+ */
+
+/* So that we can use inline on some critical functions, and use
+ * GNUC attributes (such as to get -Wall warnings for printf-like
+ * functions). Only do this in gcc 2.7 or later ... it may work
+ * on earlier stuff, but why chance it.
+ *
+ * We've since discovered that the gcc shipped with NeXT systems
+ * as "cc" is completely broken. It claims to be __GNUC__ and so
+ * on, but it doesn't implement half of the things that __GNUC__
+ * means. In particular it's missing inline and the __attribute__
+ * stuff. So we hack around it. PR#1613. -djg
+ */
+#if defined(_MSC_VER)
+#define APR_INLINE __inline
+#define APR_HAS_INLINE 1
+#ifndef __attribute__
+#define __attribute__(__x)
+#endif
+#elif !defined(__GNUC__) || __GNUC__ < 2 || \
+ (__GNUC__ == 2 && __GNUC_MINOR__ < 7) ||\
+ defined(NEXT)
+#ifndef __attribute__
+#define __attribute__(__x)
+#endif
+#define APR_INLINE
+#define APR_HAS_INLINE 0
+#else
+#define APR_INLINE __inline__
+#define APR_HAS_INLINE 1
+#endif
+
+#ifdef _WIN32_WCE
+#define APR_NOT_IN_WCE 0
+#else
+#define APR_NOT_IN_WCE 1
+#endif
+
+#define APR_HAVE_ARPA_INET_H 0
+#define APR_HAVE_CONIO_H APR_NOT_IN_WCE
+#define APR_HAVE_CRYPT_H 0
+#define APR_HAVE_CTYPE_H APR_NOT_IN_WCE
+#define APR_HAVE_DIRENT_H 0
+#define APR_HAVE_ERRNO_H APR_NOT_IN_WCE
+#define APR_HAVE_FCNTL_H APR_NOT_IN_WCE
+#define APR_HAVE_IFADDRS_H 0
+#define APR_HAVE_IO_H APR_NOT_IN_WCE
+#define APR_HAVE_LIMITS_H APR_NOT_IN_WCE
+#define APR_HAVE_MSWSOCK_H APR_NOT_IN_WCE
+#define APR_HAVE_NETDB_H 0
+#define APR_HAVE_NETINET_IN_H 0
+#define APR_HAVE_NETINET_SCTP_H 0
+#define APR_HAVE_NETINET_SCTP_UIO_H 0
+#define APR_HAVE_NETINET_TCP_H 0
+#define APR_HAVE_PROCESS_H 1
+#define APR_HAVE_PTHREAD_H 0
+#define APR_HAVE_SEMAPHORE_H 0
+#define APR_HAVE_SIGNAL_H APR_NOT_IN_WCE
+#define APR_HAVE_STDARG_H APR_NOT_IN_WCE
+#define APR_HAVE_STDDEF_H APR_NOT_IN_WCE
+#define APR_HAVE_STDINT_H 0
+#define APR_HAVE_STDIO_H 1
+#define APR_HAVE_STDLIB_H 1
+#define APR_HAVE_STRING_H 1
+#define APR_HAVE_STRINGS_H 0
+#define APR_HAVE_SYS_IOCTL_H 0
+#define APR_HAVE_SYS_SENDFILE_H 0
+#define APR_HAVE_SYS_SIGNAL_H 0
+#define APR_HAVE_SYS_SOCKET_H 0
+#define APR_HAVE_SYS_SOCKIO_H 0
+#define APR_HAVE_SYS_SYSLIMITS_H 0
+#define APR_HAVE_SYS_TIME_H 0
+#define APR_HAVE_SYS_TYPES_H APR_NOT_IN_WCE
+#define APR_HAVE_SYS_UIO_H 0
+#define APR_HAVE_SYS_UN_H 0
+#define APR_HAVE_SYS_WAIT_H 0
+#define APR_HAVE_TIME_H APR_NOT_IN_WCE
+#define APR_HAVE_UNISTD_H 0
+#define APR_HAVE_WINDOWS_H 1
+#define APR_HAVE_WINSOCK2_H APR_NOT_IN_WCE
+#define APR_HAVE_WS2TCPIP_H APR_NOT_IN_WCE
+
+/** @} */
+/** @} */
+
+/* We don't include our conditional headers within the doxyblocks
+ * or the extern "C" namespace
+ */
+
+/* If windows.h was already included, our preferences don't matter.
+ * If not, include a restricted set of windows headers to our tastes.
+ */
+#if APR_HAVE_WINDOWS_H
+#ifndef _WINDOWS_
+
+#ifndef WIN32_LEAN_AND_MEAN
+#define WIN32_LEAN_AND_MEAN
+#endif
+
+#ifndef _WIN32_WINNT
+#define _WIN32_WINNT 0x0501
+#endif
+
+#ifndef NOUSER
+#define NOUSER
+#endif
+#ifndef NOMCX
+#define NOMCX
+#endif
+#ifndef NOIME
+#define NOIME
+#endif
+
+/* Impossible to include winsock2.h after winsock.h, while windows.h
+ * attempts to load winsock. Setting _WINSOCKAPI_ will dodge this.
+ */
+#if APR_HAVE_WINSOCK2_H
+#define _WINSOCKAPI_
+#endif
+
+#include <windows.h>
+#endif
+#endif
+
+#if APR_HAVE_WINSOCK2_H
+#include <winsock2.h>
+
+#if APR_HAVE_WS2TCPIP_H
+#include <ws2tcpip.h>
+#endif
+
+#if APR_HAVE_MSWSOCK_H
+#include <mswsock.h>
+#endif
+
+#else /* !APR_HAVE_WINSOCK2_H */
+
+#if APR_HAVE_WINSOCK_H
+#include <winsock.h>
+#endif
+
+#endif /* !APR_HAVE_WINSOCK2_H */
+
+#if APR_HAVE_SYS_TYPES_H
+#include <sys/types.h>
+#endif
+
+#if APR_HAVE_STDDEF_H
+#include <stddef.h>
+#endif
+
+#if APR_HAVE_SYS_SOCKET_H
+#include <sys/socket.h>
+#endif
+
+#if APR_HAVE_STDINT_H
+#include <stdint.h>
+#endif
+
+#if APR_HAVE_SYS_WAIT_H
+#include <sys/wait.h>
+#endif
+
+/* header files for PATH_MAX, _POSIX_PATH_MAX */
+#if APR_HAVE_LIMITS_H
+#include <limits.h>
+#else
+#if APR_HAVE_SYS_SYSLIMITS_H
+#include <sys/syslimits.h>
+#endif
+#endif
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/**
+ * @addtogroup apr_platform
+ * @ingroup APR
+ * @{
+ */
+
+#define APR_HAVE_SHMEM_MMAP_TMP 0
+#define APR_HAVE_SHMEM_MMAP_SHM 0
+#define APR_HAVE_SHMEM_MMAP_ZERO 0
+#define APR_HAVE_SHMEM_SHMGET_ANON 0
+#define APR_HAVE_SHMEM_SHMGET 0
+#define APR_HAVE_SHMEM_MMAP_ANON 0
+#define APR_HAVE_SHMEM_BEOS 0
+
+#define APR_USE_SHMEM_MMAP_TMP 0
+#define APR_USE_SHMEM_MMAP_SHM 0
+#define APR_USE_SHMEM_MMAP_ZERO 0
+#define APR_USE_SHMEM_SHMGET_ANON 0
+#define APR_USE_SHMEM_SHMGET 0
+#define APR_USE_SHMEM_MMAP_ANON 0
+#define APR_USE_SHMEM_BEOS 0
+
+#define APR_USE_FLOCK_SERIALIZE 0
+#define APR_USE_SYSVSEM_SERIALIZE 0
+#define APR_USE_POSIXSEM_SERIALIZE 0
+#define APR_USE_FCNTL_SERIALIZE 0
+#define APR_USE_PROC_PTHREAD_SERIALIZE 0
+#define APR_USE_PTHREAD_SERIALIZE 0
+
+#define APR_HAS_FLOCK_SERIALIZE 0
+#define APR_HAS_SYSVSEM_SERIALIZE 0
+#define APR_HAS_POSIXSEM_SERIALIZE 0
+#define APR_HAS_FCNTL_SERIALIZE 0
+#define APR_HAS_PROC_PTHREAD_SERIALIZE 0
+
+#define APR_PROCESS_LOCK_IS_GLOBAL 0
+
+#define APR_HAVE_CORKABLE_TCP 0
+#define APR_HAVE_GETRLIMIT 0
+#define APR_HAVE_ICONV 0
+#define APR_HAVE_IN_ADDR 1
+#define APR_HAVE_INET_ADDR 1
+#define APR_HAVE_INET_NETWORK 0
+#define APR_HAVE_IPV6 0
+#define APR_HAVE_SOCKADDR_UN 0
+#define APR_HAVE_MEMMOVE 1
+#define APR_HAVE_SETRLIMIT 0
+#define APR_HAVE_SIGACTION 0
+#define APR_HAVE_SIGSUSPEND 0
+#define APR_HAVE_SIGWAIT 0
+#define APR_HAVE_SA_STORAGE 0
+#define APR_HAVE_STRCASECMP 0
+#define APR_HAVE_STRDUP 1
+#define APR_HAVE_STRICMP APR_NOT_IN_WCE
+#define APR_HAVE_STRNCASECMP 0
+#define APR_HAVE_STRNICMP APR_NOT_IN_WCE
+#define APR_HAVE_STRSTR 1
+#define APR_HAVE_MEMCHR 1
+#define APR_HAVE_STRUCT_RLIMIT 0
+#define APR_HAVE_UNION_SEMUN 0
+#define APR_HAVE_SCTP 0
+#define APR_HAVE_IOVEC 0
+
+/* APR Feature Macros */
+#define APR_HAS_SHARED_MEMORY 1
+#define APR_HAS_THREADS 1
+#define APR_HAS_SENDFILE APR_NOT_IN_WCE
+#define APR_HAS_MMAP 1
+#define APR_HAS_FORK 0
+#define APR_HAS_RANDOM 1
+#define APR_HAS_OTHER_CHILD 1
+#define APR_HAS_DSO 1
+#define APR_HAS_SO_ACCEPTFILTER 0
+#define APR_HAS_UNICODE_FS 1
+#define APR_HAS_PROC_INVOKED 1
+#define APR_HAS_USER APR_NOT_IN_WCE
+#define APR_HAS_LARGE_FILES APR_NOT_IN_WCE
+#define APR_HAS_XTHREAD_FILES APR_NOT_IN_WCE
+#define APR_HAS_OS_UUID 1
+
+#define APR_PROCATTR_USER_SET_REQUIRES_PASSWORD APR_NOT_IN_WCE
+
+/* APR sets APR_FILES_AS_SOCKETS to 1 on systems where it is possible
+ * to poll on files/pipes.
+ */
+#define APR_FILES_AS_SOCKETS 0
+
+/* This macro indicates whether or not EBCDIC is the native character set.
+ */
+#define APR_CHARSET_EBCDIC 0
+
+/* If we have a TCP implementation that can be "corked", what flag
+ * do we use?
+ */
+#define APR_TCP_NOPUSH_FLAG 0
+
+/* Is the TCP_NODELAY socket option inherited from listening sockets?
+ */
+#define APR_TCP_NODELAY_INHERITED 1
+
+/* Is the O_NONBLOCK flag inherited from listening sockets?
+ */
+#define APR_O_NONBLOCK_INHERITED 1
+
+/* Typedefs that APR needs. */
+
+typedef unsigned char apr_byte_t;
+
+typedef short apr_int16_t;
+typedef unsigned short apr_uint16_t;
+
+typedef int apr_int32_t;
+typedef unsigned int apr_uint32_t;
+
+typedef __int64 apr_int64_t;
+typedef unsigned __int64 apr_uint64_t;
+
+typedef size_t apr_size_t;
+#if APR_HAVE_STDDEF_H
+typedef ptrdiff_t apr_ssize_t;
+#else
+typedef int apr_ssize_t;
+#endif
+
+#if APR_HAS_LARGE_FILES
+typedef __int64 apr_off_t;
+#else
+typedef long apr_off_t;
+#endif
+typedef int apr_socklen_t;
+typedef apr_uint64_t apr_ino_t;
+
+#ifdef _WIN64
+#define APR_SIZEOF_VOIDP 8
+#else
+#define APR_SIZEOF_VOIDP 4
+#endif
+
+#if APR_SIZEOF_VOIDP == 8
+typedef apr_uint64_t apr_uintptr_t;
+#else
+typedef apr_uint32_t apr_uintptr_t;
+#endif
+
+/* Are we big endian? */
+/* XXX: Fatal assumption on Alpha platforms */
+#define APR_IS_BIGENDIAN 0
+
+/* Mechanisms to properly type numeric literals */
+
+#ifndef __GNUC__
+#define APR_INT64_C(val) (val##i64)
+#define APR_UINT64_C(val) (val##Ui64)
+#else
+#define APR_INT64_C(val) (val##LL)
+#define APR_UINT64_C(val) (val##ULL)
+#endif
+
+#ifdef INT16_MIN
+#define APR_INT16_MIN INT16_MIN
+#else
+#define APR_INT16_MIN (-0x7fff - 1)
+#endif
+
+#ifdef INT16_MAX
+#define APR_INT16_MAX INT16_MAX
+#else
+#define APR_INT16_MAX (0x7fff)
+#endif
+
+#ifdef UINT16_MAX
+#define APR_UINT16_MAX UINT16_MAX
+#else
+#define APR_UINT16_MAX (0xffff)
+#endif
+
+#ifdef INT32_MIN
+#define APR_INT32_MIN INT32_MIN
+#else
+#define APR_INT32_MIN (-0x7fffffff - 1)
+#endif
+
+#ifdef INT32_MAX
+#define APR_INT32_MAX INT32_MAX
+#else
+#define APR_INT32_MAX 0x7fffffff
+#endif
+
+#ifdef UINT32_MAX
+#define APR_UINT32_MAX UINT32_MAX
+#else
+#define APR_UINT32_MAX (0xffffffffU)
+#endif
+
+#ifdef INT64_MIN
+#define APR_INT64_MIN INT64_MIN
+#else
+#define APR_INT64_MIN (APR_INT64_C(-0x7fffffffffffffff) - 1)
+#endif
+
+#ifdef INT64_MAX
+#define APR_INT64_MAX INT64_MAX
+#else
+#define APR_INT64_MAX APR_INT64_C(0x7fffffffffffffff)
+#endif
+
+#ifdef UINT64_MAX
+#define APR_UINT64_MAX UINT64_MAX
+#else
+#define APR_UINT64_MAX APR_UINT64_C(0xffffffffffffffff)
+#endif
+
+#define APR_SIZE_MAX (~((apr_size_t)0))
+
+/* Definitions that APR programs need to work properly. */
+
+/**
+ * APR public API wrap for C++ compilers.
+ */
+#ifdef __cplusplus
+#define APR_BEGIN_DECLS extern "C" {
+#define APR_END_DECLS }
+#else
+#define APR_BEGIN_DECLS
+#define APR_END_DECLS
+#endif
+
+/**
+ * Thread callbacks from APR functions must be declared with APR_THREAD_FUNC,
+ * so that they follow the platform's calling convention.
+ * <PRE>
+ *
+ * void* APR_THREAD_FUNC my_thread_entry_fn(apr_thread_t *thd, void *data);
+ *
+ * </PRE>
+ */
+#define APR_THREAD_FUNC __stdcall
+
+
+#if defined(DOXYGEN) || !defined(WIN32)
+
+/**
+ * The public APR functions are declared with APR_DECLARE(), so they may
+ * use the most appropriate calling convention. Public APR functions with
+ * variable arguments must use APR_DECLARE_NONSTD().
+ *
+ * @remark Both the declaration and implementations must use the same macro.
+ *
+ * <PRE>
+ * APR_DECLARE(rettype) apr_func(args)
+ * </PRE>
+ * @see APR_DECLARE_NONSTD @see APR_DECLARE_DATA
+ * @remark Note that when APR compiles the library itself, it passes the
+ * symbol -DAPR_DECLARE_EXPORT to the compiler on some platforms (e.g. Win32)
+ * to export public symbols from the dynamic library build.\n
+ * The user must define the APR_DECLARE_STATIC when compiling to target
+ * the static APR library on some platforms (e.g. Win32.) The public symbols
+ * are neither exported nor imported when APR_DECLARE_STATIC is defined.\n
+ * By default, compiling an application and including the APR public
+ * headers, without defining APR_DECLARE_STATIC, will prepare the code to be
+ * linked to the dynamic library.
+ */
+#define APR_DECLARE(type) type
+
+/**
+ * The public APR functions using variable arguments are declared with
+ * APR_DECLARE_NONSTD(), as they must follow the C language calling convention.
+ * @see APR_DECLARE @see APR_DECLARE_DATA
+ * @remark Both the declaration and implementations must use the same macro.
+ * <PRE>
+ *
+ * APR_DECLARE_NONSTD(rettype) apr_func(args, ...);
+ *
+ * </PRE>
+ */
+#define APR_DECLARE_NONSTD(type) type
+
+/**
+ * The public APR variables are declared with APR_DECLARE_DATA.
+ * This assures the appropriate indirection is invoked at compile time.
+ * @see APR_DECLARE @see APR_DECLARE_NONSTD
+ * @remark Note that the declaration and implementations use different forms,
+ * but both must include the macro.
+ *
+ * <PRE>
+ *
+ * extern APR_DECLARE_DATA type apr_variable;\n
+ * APR_DECLARE_DATA type apr_variable = value;
+ *
+ * </PRE>
+ */
+#define APR_DECLARE_DATA
+
+#elif defined(APR_DECLARE_STATIC)
+#define APR_DECLARE(type) type __stdcall
+#define APR_DECLARE_NONSTD(type) type __cdecl
+#define APR_DECLARE_DATA
+#elif defined(APR_DECLARE_EXPORT)
+#define APR_DECLARE(type) __declspec(dllexport) type __stdcall
+#define APR_DECLARE_NONSTD(type) __declspec(dllexport) type __cdecl
+#define APR_DECLARE_DATA __declspec(dllexport)
+#else
+#define APR_DECLARE(type) __declspec(dllimport) type __stdcall
+#define APR_DECLARE_NONSTD(type) __declspec(dllimport) type __cdecl
+#define APR_DECLARE_DATA __declspec(dllimport)
+#endif
+
+#if !defined(WIN32) || defined(APU_MODULE_DECLARE_STATIC)
+/**
+ * Declare a dso module's exported module structure as APR_MODULE_DECLARE_DATA.
+ *
+ * Unless APR_MODULE_DECLARE_STATIC is defined at compile time, symbols
+ * declared with APR_MODULE_DECLARE_DATA are always exported.
+ * @code
+ * module APR_MODULE_DECLARE_DATA mod_tag
+ * @endcode
+ */
+#define APR_MODULE_DECLARE_DATA
+#else
+#define APR_MODULE_DECLARE_DATA __declspec(dllexport)
+#endif
+
+/**
+ * @deprecated
+ * @see APR_MODULE_DECLARE_DATA
+ */
+#define APU_MODULE_DECLARE_DATA APR_MODULE_DECLARE_DATA
+
+/* Define APR_SSIZE_T_FMT.
+ * If ssize_t is an integer we define it to be "d",
+ * if ssize_t is a long int we define it to be "ld",
+ * if ssize_t is 64-bit, we define it to be msvc specific "I64d"
+ */
+#ifdef _WIN64
+#define APR_SSIZE_T_FMT "I64d"
+#define APR_SIZE_T_FMT "I64u"
+#else
+#define APR_SSIZE_T_FMT "d"
+#define APR_SIZE_T_FMT "u"
+#endif
+
+#if APR_HAS_LARGE_FILES
+#define APR_OFF_T_FMT "I64d"
+#else
+#define APR_OFF_T_FMT "d"
+#endif
+
+#define APR_PID_T_FMT "d"
+
+#define APR_INT64_T_FMT "I64d"
+#define APR_UINT64_T_FMT "I64u"
+#define APR_UINT64_T_HEX_FMT "I64x"
+
+/* No difference between PROC and GLOBAL mutex */
+#define APR_PROC_MUTEX_IS_GLOBAL 1
+
+/* Local machine definition for console and log output. */
+#define APR_EOL_STR "\r\n"
+
+typedef int apr_wait_t;
+
+#if APR_HAS_UNICODE_FS
+/* An arbitrary size that is digestable. True max is a bit less than 32000 */
+#define APR_PATH_MAX 8192
+#else /* !APR_HAS_UNICODE_FS */
+#define APR_PATH_MAX MAX_PATH
+#endif
+
+#define APR_DSOPATH "PATH"
+
+/*
+ * we always have SDBM (it's in our codebase)
+ */
+#define APU_HAVE_SDBM 1
+
+#ifndef APU_DSO_MODULE_BUILD
+#define APU_HAVE_GDBM 0
+#define APU_HAVE_NDBM 0
+#define APU_HAVE_DB 0
+
+#if APU_HAVE_DB
+#define APU_HAVE_DB_VERSION 0
+#endif
+#endif
+
+/*
+ * we always enable dynamic driver loads within apr_dbd
+ * driver builds enable these flags individually
+ */
+#ifndef APU_DSO_MODULE_BUILD
+#define APU_HAVE_PGSQL 0
+#define APU_HAVE_MYSQL 0
+#define APU_HAVE_SQLITE3 0
+#define APU_HAVE_SQLITE2 0
+#define APU_HAVE_ORACLE 0
+#define APU_HAVE_ODBC 0
+#endif
+
+#define APU_HAVE_CRYPTO 0
+
+#ifndef APU_DSO_MODULE_BUILD
+#define APU_HAVE_OPENSSL 0
+#define APU_HAVE_NSS 0
+#define APU_HAVE_COMMONCRYPTO 0
+#endif
+
+#define APU_HAVE_ICONV 0
+#define APR_HAS_XLATE (APU_HAVE_ICONV)
+
+#define APU_USE_EXPAT @apr_use_expat_10@
+#define APU_USE_LIBXML2 @apr_use_libxml2_10@
+
+/** @} */
+
+/* Definitions that only Win32 programs need to compile properly. */
+
+/* XXX These simply don't belong here, perhaps in apr_portable.h
+ * based on some APR_HAVE_PID/GID/UID?
+ */
+#ifdef WIN32
+#ifndef __WATCOMC__
+#ifndef __GNUC__
+typedef int pid_t;
+#endif
+typedef int uid_t;
+typedef int gid_t;
+#endif
+#endif
+
+/* Typically defined in stdio.h or unistd.h
+ */
+#ifndef STDIN_FILENO
+#define STDIN_FILENO 0
+#endif
+#ifndef STDOUT_FILENO
+#define STDOUT_FILENO 1
+#endif
+#ifndef STDERR_FILENO
+#define STDERR_FILENO 2
+#endif
+
+#if APR_HAVE_IPV6
+
+/* Appears in later flavors, not the originals. */
+#ifndef in_addr6
+#define in6_addr in_addr6
+#endif
+
+#ifndef WS2TCPIP_INLINE
+#define IN6_IS_ADDR_V4MAPPED(a) \
+ ( (*(const apr_uint64_t *)(const void *)(&(a)->s6_addr[0]) == 0) \
+ && (*(const apr_uint32_t *)(const void *)(&(a)->s6_addr[8]) ==
ntohl(0x0000ffff)))
+#endif
+
+#endif /* APR_HAVE_IPV6 */
+
+#ifdef __cplusplus
+}
+#endif
+
+/* Done with badly written headers, leave 'deprecated CRT' undeprecated
+ */
+#if defined(_MSC_VER) && _MSC_VER >= 1200
+#pragma warning(pop)
+#if _MSC_VER >= 1400
+#pragma warning(disable: 4996)
+#endif
+#endif
+
+#endif /* APR_H */