You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@apr.apache.org by tr...@apache.org on 2013/08/22 21:22:03 UTC

svn commit: r1516542 - in /apr/apr/trunk: CHANGES CMakeLists.txt include/apr.hwc

Author: trawick
Date: Thu Aug 22 19:22:03 2013
New Revision: 1516542

URL: http://svn.apache.org/r1516542
Log:
Add experimental cmake-based build system for Windows.

include/apr.hwc is almost exactly the same as apr.hw; it uses
variables for cmake-time feature selection so that cmake
can easily generate apr.h.

Added:
    apr/apr/trunk/CMakeLists.txt   (with props)
    apr/apr/trunk/include/apr.hwc   (with props)
Modified:
    apr/apr/trunk/CHANGES

Modified: apr/apr/trunk/CHANGES
URL: http://svn.apache.org/viewvc/apr/apr/trunk/CHANGES?rev=1516542&r1=1516541&r2=1516542&view=diff
==============================================================================
--- apr/apr/trunk/CHANGES [utf-8] (original)
+++ apr/apr/trunk/CHANGES [utf-8] Thu Aug 22 19:22:03 2013
@@ -1,6 +1,8 @@
                                                      -*- coding: utf-8 -*-
 Changes for APR 2.0.0
 
+  *) Add experimental cmake-based build system for Windows.  [Jeff Trawick]
+
   *) Add support for Berkeley DB 6.0. [Rainer Jung]
 
   *) Add apr_pbase64_encode() and apr_pbase64_decode() to encode to/from

Added: apr/apr/trunk/CMakeLists.txt
URL: http://svn.apache.org/viewvc/apr/apr/trunk/CMakeLists.txt?rev=1516542&view=auto
==============================================================================
--- apr/apr/trunk/CMakeLists.txt (added)
+++ apr/apr/trunk/CMakeLists.txt Thu Aug 22 19:22:03 2013
@@ -0,0 +1,463 @@
+PROJECT(APR C)
+
+# Todos to properly support Windows:
+# . Fix problem where srcdir/include/apr.h (if it exists) is found before builddir/apr.h
+#   (and similar for apu_want.h)
+# . Document example 32-bit and 64-bit Windows builds using NMake
+# . Build and optionally run gen_test_char
+# . Build apr_app.c into libapr-2 properly (what about apr-2.lib?)
+# . Options for remaining features, along with finding any necessary libraries
+#   + APR_POOL_DEBUG
+#   + APU_DSO_MODULE_BUILD
+#   + APU_HAVE_GDBM
+#   + APU_HAVE_NDBM
+#   + APU_HAVE_DB
+#   + APU_HAVE_PGSQL
+#   + APU_HAVE_MYSQL
+#   + APU_HAVE_SQLITE3
+#   + APU_HAVE_SQLITE2
+#   + APU_HAVE_ORACLE
+#   + APU_HAVE_ODBC
+#   + APU_HAVE_CRYPTO
+#   + APU_HAVE_OPENSSL
+#   + APU_HAVE_NSS
+#   + APU_HAVE_COMMONCRYPTO
+#   + APU_HAVE_ICONV
+#   + APU_USE_LIBXML2 (sketched in, but not working)
+# . Support static *or* shared build of Expat
+# . Some easier way to run the test suite (not just testall.exe)
+# . All the other stuff Jeff doesn't know about yet
+
+CMAKE_MINIMUM_REQUIRED(VERSION 2.8)
+
+# 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(APU_USE_EXPAT      "Use Expat"                    ON)
+  IF(LIBXML2_FOUND)
+    OPTION(APU_USE_LIBXML2  "Use LibXml2"                  OFF)
+  ENDIF()
+ELSE()
+  OPTION(APU_USE_LIBXML2    "Use LibXml2"                  ON)
+ENDIF()
+
+OPTION(APR_HAVE_IPV6        "IPv6 support"                 ON)
+OPTION(APR_SHOW_SETTINGS    "Show the build configuration" ON)
+OPTION(APR_BUILD_TESTAPR    "Build the test suite"         OFF)
+
+IF(APR_HAVE_IPV6)
+  SET(apr_have_ipv6_10 1)
+ELSE()
+  SET(apr_have_ipv6_10 0)
+ENDIF()
+
+IF(NOT APU_USE_EXPAT AND NOT APU_USE_LIBXML2)
+  MESSAGE(FATAL_ERROR "Either Expat or LibXml2 must be selected")
+ENDIF()
+IF(APU_USE_EXPAT AND APU_USE_LIBXML2)
+  MESSAGE(FATAL_ERROR "Only one of Expat and LibXml2 can be selected")
+ENDIF()
+IF(APU_USE_EXPAT)
+  SET(apu_use_expat_10 1)
+  SET(apu_use_libxml2_10 0)
+ELSE()
+  SET(apu_use_expat_10 0)
+  SET(apu_use_libxml2_10 1)
+ENDIF()
+
+CONFIGURE_FILE(include/apr.hwc
+               ${PROJECT_BINARY_DIR}/apr.h)
+# "COPYONLY" just because anything else isn't implemented ;)
+CONFIGURE_FILE(include/apu_want.hw
+               ${PROJECT_BINARY_DIR}/apu_want.h
+               COPYONLY)
+
+IF(APU_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})
+
+SET(APR_HEADERS ${PROJECT_BINARY_DIR}/apr.h)
+
+# and misc/win32/apr_app.c
+
+SET(APR_PUBLIC_HEADERS_STATIC
+  include/apr_allocator.h
+  include/apr_anylock.h
+  include/apr_atomic.h
+  include/apr_base64.h
+  include/apr_buckets.h
+  include/apr_crypto.h
+  include/apr_date.h
+  include/apr_dbd.h
+  include/apr_dbm.h
+  include/apr_dso.h
+  include/apr_env.h
+  include/apr_errno.h
+  include/apr_escape.h
+  include/apr_file_info.h
+  include/apr_file_io.h
+  include/apr_fnmatch.h
+  include/apr_general.h
+  include/apr_getopt.h
+  include/apr_global_mutex.h
+  include/apr_hash.h
+  include/apr_hooks.h
+  include/apr_inherit.h
+  include/apr_lib.h
+  include/apr_md4.h
+  include/apr_md5.h
+  include/apr_memcache.h
+  include/apr_mmap.h
+  include/apr_network_io.h
+  include/apr_optional.h
+  include/apr_optional_hooks.h
+  include/apr_perms_set.h
+  include/apr_poll.h
+  include/apr_pools.h
+  include/apr_portable.h
+  include/apr_proc_mutex.h
+  include/apr_queue.h
+  include/apr_random.h
+  include/apr_reslist.h
+  include/apr_ring.h
+  include/apr_rmm.h
+  include/apr_sdbm.h
+  include/apr_sha1.h
+  include/apr_shm.h
+  include/apr_signal.h
+  include/apr_strings.h
+  include/apr_strmatch.h
+  include/apr_tables.h
+  include/apr_thread_cond.h
+  include/apr_thread_mutex.h
+  include/apr_thread_pool.h
+  include/apr_thread_proc.h
+  include/apr_thread_rwlock.h
+  include/apr_time.h
+  include/apr_uri.h
+  include/apr_user.h
+  include/apr_uuid.h
+  include/apr_version.h
+  include/apr_want.h
+  include/apr_xlate.h
+  include/apr_xml.h
+  include/apu.h
+  include/apu_errno.h
+  include/apu_version.h
+)
+SET(APR_PUBLIC_HEADERS_GENERATED
+  ${PROJECT_BINARY_DIR}/apr.h
+  ${PROJECT_BINARY_DIR}/apu_want.h
+)
+
+SET(APR_SOURCES
+  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/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
+  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
+)
+
+SET(WINDOWS_LIBS
+  wsock32
+  ws2_32
+  rpcrt4
+)
+
+SET(install_targets)
+
+# libapr-2 is shared, apr-2 is static
+ADD_LIBRARY(libapr-2 SHARED ${APR_HEADERS} ${APR_SOURCES} ${PROJECT_BINARY_DIR}/apr.h)
+SET(install_targets ${install_targets} libapr-2)
+TARGET_LINK_LIBRARIES(libapr-2 ${XMLLIB_LIBRARIES} ${WINDOWS_LIBS})
+SET_TARGET_PROPERTIES(libapr-2 PROPERTIES COMPILE_FLAGS -DAPR_DECLARE_EXPORT)
+
+ADD_LIBRARY(apr-2 STATIC ${APR_HEADERS} ${APR_SOURCES} ${PROJECT_BINARY_DIR}/apr.h)
+SET(install_targets ${install_targets} apr-2)
+TARGET_LINK_LIBRARIES(apr-2 ${XMLLIB_LIBRARIES} ${WINDOWS_LIBS})
+SET_TARGET_PROPERTIES(apr-2 PROPERTIES COMPILE_FLAGS -DAPR_DECLARE_STATIC)
+
+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})
+  TARGET_LINK_LIBRARIES(testall apr-2 ${XMLLIB_LIBRARIES} ${WINDOWS_LIBS})
+
+  ADD_LIBRARY(mod_test MODULE test/mod_test.c)
+  TARGET_LINK_LIBRARIES(mod_test apr-2 ${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)
+  TARGET_LINK_LIBRARIES(occhild apr-2 ${WINDOWS_LIBS})
+
+  ADD_EXECUTABLE(globalmutexchild test/globalmutexchild.c)
+  TARGET_LINK_LIBRARIES(globalmutexchild apr-2 ${WINDOWS_LIBS})
+
+  ADD_EXECUTABLE(proc_child test/proc_child.c)
+  TARGET_LINK_LIBRARIES(proc_child apr-2 ${WINDOWS_LIBS})
+
+  ADD_EXECUTABLE(readchild test/readchild.c)
+  TARGET_LINK_LIBRARIES(readchild apr-2 ${WINDOWS_LIBS})
+
+  ADD_EXECUTABLE(sockchild test/sockchild.c)
+  TARGET_LINK_LIBRARIES(sockchild apr-2 ${WINDOWS_LIBS})
+
+  ADD_EXECUTABLE(testshmconsumer test/testshmconsumer.c)
+  TARGET_LINK_LIBRARIES(testshmconsumer apr-2 ${WINDOWS_LIBS})
+
+  ADD_EXECUTABLE(testshmproducer test/testshmproducer.c)
+  TARGET_LINK_LIBRARIES(testshmproducer apr-2 ${WINDOWS_LIBS})
+
+  ADD_EXECUTABLE(tryread test/tryread.c)
+  TARGET_LINK_LIBRARIES(tryread apr-2 ${WINDOWS_LIBS})
+
+  SET_TARGET_PROPERTIES(testall mod_test occhild globalmutexchild proc_child readchild sockchild testshmconsumer testshmproducer tryread PROPERTIES COMPILE_FLAGS -DAPR_DECLARE_STATIC)
+
+ENDIF (APR_BUILD_TESTAPR)
+
+# Installation
+
+INSTALL(TARGETS ${install_targets}
+        RUNTIME DESTINATION bin
+        LIBRARY DESTINATION lib
+        ARCHIVE DESTINATION lib
+       )
+
+INSTALL(FILES ${APR_PUBLIC_HEADERS_STATIC} ${APR_PUBLIC_HEADERS_GENERATED} DESTINATION include)
+# Kludges for unexpected dependencies of httpd 2.x; at least segregate them in private_include
+INSTALL(FILES include/arch/win32/apr_arch_file_io.h DESTINATION private_include/arch/win32)
+INSTALL(FILES include/arch/win32/apr_arch_utf8.h DESTINATION private_include/arch/win32)
+INSTALL(FILES include/arch/win32/apr_private.h DESTINATION private_include/arch/win32)
+INSTALL(FILES include/arch/win32/apr_arch_misc.h DESTINATION private_include/arch/win32)
+
+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 "  IPv6                              : ${APR_HAVE_IPV6}")
+  MESSAGE(STATUS "  Use Expat ....................... : ${APU_USE_EXPAT}")
+  MESSAGE(STATUS "  Use LibXml2 ..................... : ${APU_USE_LIBXML2}")
+  MESSAGE(STATUS "  Library files for XML ........... : ${XMLLIB_LIBRARIES}")
+  MESSAGE(STATUS "  Build test suite ................ : ${APR_BUILD_TESTAPR}")
+ENDIF(APR_SHOW_SETTINGS)

Propchange: apr/apr/trunk/CMakeLists.txt
------------------------------------------------------------------------------
    svn:eol-style = native

Added: apr/apr/trunk/include/apr.hwc
URL: http://svn.apache.org/viewvc/apr/apr/trunk/include/apr.hwc?rev=1516542&view=auto
==============================================================================
--- apr/apr/trunk/include/apr.hwc (added)
+++ apr/apr/trunk/include/apr.hwc Thu Aug 22 19:22:03 2013
@@ -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.hwc 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           @apr_have_ipv6_10@
+#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           @apu_use_expat_10@
+#define APU_USE_LIBXML2         @apu_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 */

Propchange: apr/apr/trunk/include/apr.hwc
------------------------------------------------------------------------------
    svn:eol-style = native



Re: svn commit: r1516542 - in /apr/apr/trunk: CHANGES CMakeLists.txt include/apr.hwc

Posted by Jeff Trawick <tr...@gmail.com>.
On Thu, Aug 22, 2013 at 3:22 PM, <tr...@apache.org> wrote:

> Author: trawick
> Date: Thu Aug 22 19:22:03 2013
> New Revision: 1516542
>
> URL: http://svn.apache.org/r1516542
> Log:
> Add experimental cmake-based build system for Windows.
>
> include/apr.hwc is almost exactly the same as apr.hw; it uses
> variables for cmake-time feature selection so that cmake
> can easily generate apr.h.
>
> Added:
>     apr/apr/trunk/CMakeLists.txt   (with props)
>     apr/apr/trunk/include/apr.hwc   (with props)
> Modified:
>     apr/apr/trunk/CHANGES
>
> Modified: apr/apr/trunk/CHANGES
> URL:
> http://svn.apache.org/viewvc/apr/apr/trunk/CHANGES?rev=1516542&r1=1516541&r2=1516542&view=diff
>
> ==============================================================================
> --- apr/apr/trunk/CHANGES [utf-8] (original)
> +++ apr/apr/trunk/CHANGES [utf-8] Thu Aug 22 19:22:03 2013
> @@ -1,6 +1,8 @@
>                                                       -*- coding: utf-8 -*-
>  Changes for APR 2.0.0
>
> +  *) Add experimental cmake-based build system for Windows.  [Jeff
> Trawick]
> +
>
>
Note the list of current bugs/deficiencies in CMakeLists.txt, a lot of
which are handled by Tom's CMakeLists.txt which he posted a couple of hours
ago.  I plan to pull in his stuff as I can understand/test it, but feel
free to pitch in :)

>From CMakeLists.txt:

# . Fix problem where srcdir/include/apr.h (if it exists) is found before
builddir/apr.h
#   (and similar for apu_want.h)
# . Document example 32-bit and 64-bit Windows builds using NMake
# . Build and optionally run gen_test_char
# . Build apr_app.c into libapr-2 properly (what about apr-2.lib?)
# . Options for remaining features, along with finding any necessary
libraries
#   + APR_POOL_DEBUG
#   + APU_DSO_MODULE_BUILD
#   + APU_HAVE_GDBM
#   + APU_HAVE_NDBM
#   + APU_HAVE_DB
#   + APU_HAVE_PGSQL
#   + APU_HAVE_MYSQL
#   + APU_HAVE_SQLITE3
#   + APU_HAVE_SQLITE2
#   + APU_HAVE_ORACLE
#   + APU_HAVE_ODBC
#   + APU_HAVE_CRYPTO
#   + APU_HAVE_OPENSSL
#   + APU_HAVE_NSS
#   + APU_HAVE_COMMONCRYPTO
#   + APU_HAVE_ICONV
#   + APU_USE_LIBXML2 (sketched in, but not working)
# . Support static *or* shared build of Expat
# . Some easier way to run the test suite (not just testall.exe)
# . All the other stuff Jeff doesn't know about yet

If anyone cares about this, the best way to help in the very short term is
to add stuff you know of that I've missed from the bug/missing-feature
list.  Then, of course, pull up your shirt sleeves and pitch in.

Apologies for the programming style in CMakeLists.txt, which is a lot
different than the one Tom had; if you've ever seen the one distributed
with PCRE you might guess (correctly) that I had mainly looked at that one
before starting this one for APR.

I suggest the following as the roadmap for Windows build support:

APR Trunk/2.0:

As soon as multiple developers can use cmake successfully and build bugs
have been resolved, axe any support for specific MS compilers/IDEs/whatever.

(autoconf-/MinGW-based build support remains; I happen to feel very
productive using that for development/debugging, though I don't see enough
interest to finish the work to fully support that for end user builds; no
knowledge here of autoconf-Cygwin-based build support for Windows other
than that there are various pieces of configure code to support that)

Current stable branches of apr 1.x/apr-util 1.x:

Add cmake-based build support as an additional option "before long."

apr-iconv?  I'd rather not think about that for now.  (Somebody remind me
which httpd features need that on Windows and maybe I'll be motivated.)

Implied or required layout of projects:

Traditional builds of httpd/apr*/etc. typically put ASF and other support
libraries in the tree under httpd/srclib, and in fact some unexpected
httpd+Windows dependencies on apr essentially required that.  I haven't
figured out yet if any of that is baked into Tom's cmake work for
apr/httpd, or if srclib/<SUPPORTLIB> is simply the default.  I have ZERO
interest in touching such a setup personally, and at present the apr
install will set up private_include/ alongside include/ to work around the
httpd desire for such files.  (I guess there are any number of other
dependencies I don't know about/remember :()

Thanks in advance for the *.

-- 
Born in Roswell... married an alien...
http://emptyhammock.com/