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 */