You are viewing a plain text version of this content. The canonical link for it is here.
Posted to cvs@httpd.apache.org by ji...@apache.org on 2015/06/30 17:26:19 UTC

svn commit: r1688474 [2/21] - in /httpd/httpd/trunk/modules/http2: ./ m4/ mod-h2.xcodeproj/ mod-h2.xcodeproj/project.xcworkspace/ mod-h2.xcodeproj/project.xcworkspace/xcshareddata/ mod-h2.xcodeproj/xcuserdata/ mod-h2.xcodeproj/xcuserdata/sei.xcuserdata...

Added: httpd/httpd/trunk/modules/http2/README.md
URL: http://svn.apache.org/viewvc/httpd/httpd/trunk/modules/http2/README.md?rev=1688474&view=auto
==============================================================================
--- httpd/httpd/trunk/modules/http2/README.md (added)
+++ httpd/httpd/trunk/modules/http2/README.md Tue Jun 30 15:26:16 2015
@@ -0,0 +1,205 @@
+
+#mod_h2 - http/2 for Apache httpd
+
+Copyright (C) 2015 greenbytes GmbH
+
+Copying and distribution of this file, with or without modification,
+are permitted in any medium without royalty provided the copyright
+notice and this notice are preserved.  This file is offered as-is,
+without warranty of any kind. See LICENSE for details.
+
+
+This repository contains a Apache httpd module implementing the HTTP2
+protocol. It uses nghttp2 (https://nghttp2.org) as base engine and connects
+it with the Apache infrastructure.
+
+
+##Status
+In development. Use at your own risk. See [Known Problems](#known-problems) below for a list
+of things you might encounter.
+
+##Tested Platforms
+* OS: Ubuntu 14.04, OS X 10.10
+* Apache httpd 2.4.12 (patch needed)
+* Openssl 1.0.1 + 1.0.2
+
+If someone wants to test other platforms or contribute adapations in a
+github pull request, she is more than welcome.
+
+
+##Features
+This module supports the protocols "h2" (HTTP2 over TLS) and "h2c" (HTTP2 over plain
+HTTP connections via Upgrade). You can enable it for the whole server or
+for specific virtual hosts only. More on this below on "Configuration".
+
+Specifically, the protocols "h2", "h2-16", "h2-14" and its "h2c" cousins
+are announced to clients. Support for "h2-14" and "h2-16" is expected to
+disappear silently as these are no standard and are currently being used
+for the interop testing phase only.
+
+##Configuration
+The test setup in test/conf/* that gets installed in gen/install for the
+local httpd build contains some simple examples of how this module can
+be configured.
+
+There are several configuration commands available when mod_h2 is loaded,
+such as:
+
+* H2Engine (on/off), "on"    to enable HTTP/2 protocol handling, default: off
+* H2MaxSessionStreams n      maximum number of open streams per session, default: 100
+* H2InitialWindowSize n      initial window size on client DATA, default: 16k
+* H2MaxHeaderListSize n      maximum acceptable size of request headers, default: 64k
+* H2MinWorkers n             minimum number of worker threads per child, default: mpm configured MaxWorkers/2
+* H2MaxWorkers n             maximum number of worker threads per child, default: mpm configured thread limit/2
+* H2StreamMaxMemSize n       maximum number of bytes buffered in memory for a stream, default: 64k
+* H2AltSvc name=host:port    Announce an "alternate service" to clients (see https://http2.github.io/http2-spec/alt-svc.html for details), default: empty
+* H2AltSvcMaxAge n           number of seconds Alt-Svc information is valid, default: will not be sent, specification defaults to 24h
+* H2SerializeHeaders (on/off), "off"   serialize/parse request+response headers for streams, as if they arrived in HTTP/1 format. When off, certain parts of httpd core filters are disabled/replaced to allow for a more efficient handling. 
+* H2HackMpmEvent (on/off), "on"        performs a hack on internal connection in order to make mpm_event working, has no effect on other mpm modules
+* H2Direct (on/off), "on"    to enable h2c direct mode on a non-TLS host, default: off
+
+All these configuration parameters can be set on servers/virtual hosts and
+are not available on directory level. Note that Worker configuration is
+only relevant on the base apache server and will be read - but ignored -
+on any virtual hosts.
+
+
+##Dependencies
+1. The module is written in plain C and links to libnghttp2 and the
+apache runtime. Currently, only nghttp2 version 0.7.x are supported. nghttp2 v1.0.0 introduced a incompatible API change. mod_h2 will change once there is a curl release working with 1.0.0. That release of mod_h2 will then stop support for nghttp2 0.7.x. Heads up.
+1. For "h2" support - the part of HTTP2 that uses TLS - a patched mod_ssl
+needs to be present in the server. The patch is available in httpd/patches
+and automatically applied in sandbox mode.
+1. For ALPN/NPN protocol negotiation (the basic TLS HELLO part) to work,
+at least OpenSSL 1.0.1 is needed (OpenSSL 1.0.2 perferred).
+1. mod_h2 is tested with the `mpm_worker` module. The `mpm_event` module is supported by a hack at the moment, handle with care.
+
+
+##Installation
+mod_h2 is using autoconf/automake for configuration and build handling. If you
+have a git checkout, refer to 'Build from git' below. If you have a release
+extracted, you need to:
+```
+> cd mod_h2-x.x.x
+> ./configure
+> make
+```
+
+For general handling of 'configure', see INSTALL. For mod_h2 specifically,
+there are two arguments to know:
+* `--enable-sandbox`     build a complete sandbox installation with own httpd, own libnghttp2
+* `--enable-werror`      build with tons of compiler diagnostics enabled
+* `--with-apxs=<pathtoapxs>` for a non-sandboxed installation where the apxs (from the apache development environment) is in an unusual location.
+
+If you run 'configure' without arguments, it assumes a non-sandbox'ed built
+where apxs and libnghttp2 are properly installed.
+
+
+###Sandbox Installation:
+
+The sandbox installation puts everything in ./gen/install: httpd, nghttp2, curl
+and other fine things. For testing the module, or just trying it out, this
+has the following advantages:
+* conflicts with "wrong" versions already installed on your system are avoided
+* you can do the installation and test without root privileges
+* certain patches can be applied that are necessary for all features to work, see "Dependencies"."
+
+
+##Build from git
+Building from git is easy, but please be sure that at least autoconf 2.68 is
+used::
+```
+> autoreconf -i
+> automake
+> autoconf
+> ./configure
+> make
+```
+
+##Supported Platforms
+mod_h2 has been developed under Ubuntu 14.04 LTS and OS X 10.10. The module
+itself depends only on an installed APXS (the Apache runtime platform) and
+libnghttp2. As long as both are present, the module itself should build
+just fine.
+
+Ubuntu :Install the prerequisite software. On a 14.04 LTS server, that should be:
+```
+> sudo apt-get install git gcc g++ libpcre3-dev libcunit1-dev libev-dev libjansson-dev libjemalloc-dev cython make binutils autoconf automake autotools-dev libtool pkg-config zlib1g-dev libssl-dev libxml2-dev libevent-dev python3.4-dev libevent-openssl-2.0-5 php5-cgi
+```
+
+OS X: on OS X 10.10, building the project requires a homebrew installation and the following packages installed via brew:
+* pkg-config
+* for httpd the Makefile will download and install:
+    * pcre
+    * apr + apr-util
+    * openssl
+  exact versions and download urls in httpd/Makefile
+* for nghttp2 the Makefile will download and install:
+    * zlib
+    * libev
+  exact versions and download urls in httpd/Makefile
+* for sandbox tests you will need php5-cgi from homebrew
+
+##Architecture, Limits, Details
+See DISCUSS.
+
+
+##Sandbox Testing
+The sandbox build contains some test cases. In order to run those, you
+need to:
+```
+> make
+> make install
+> make test
+```
+The sandbox creates its own httpd and nghttp2 installation in gen/install
+and configures httpd to run on ports 12345+12346 (TLS). It also generates
+a self-signed certificate for the servers under the name test.example.org
+and test-ser.example.org.
+You should make entries in /etc/hosts like
+```
+127.0.0.1       test.example.org        test
+127.0.0.1       test-ser.example.org    test
+```
+for tests to work properly.
+
+Another issue is testing with browsers like Chrome or Firefox. If you point
+them at test.example.org, they will complain about the self-signed certificate,
+offer you to connect anyway and, if you choose that, refuse to work. I think
+they have a much stricter cert checking for HTTP/2 and the UI needs an update
+here.
+
+I myself configure an additional site into the sandbox server with a real
+certificate and test browsers successfully there. But I cannot share this
+certificate with the world. If there is a better way to test browser interop,
+I am happy to be given pointers.
+
+#Known Issues
+* If you use the "prefork" mpm, there are reported problems with using mod_h2 and mod_prody/mod_rewrite against another server which disappear when using mpm_event or mpm_worker in the otherwise unchanged configuration.
+* If you test chrome/firefox against a httpd with mod_h2 and get "ERR_SPDY_INADEQUATE_TRANSPORT_SECURITY", this means that the browser considers the installed SSL certificates as not good enough to use HTTP/2. This will happen with the sandbox installation, as that one has only a self-signed certificate. If you disable mod_h2, chrome/firefox will seem to be working fine again against your server. This is due to the fact that SSL requirements are, for backward compatibility, relaxed when talking HTTP/1. Unfortunately, chrome/firefox do currently not offer a better user experience in indicating what part of the certificate was considered inadequate. For example, certain signing algorithms in combination with expiration dates are no longer accepted. This becomes pretty hard to debug for someone not fluent in TLS and PKI.
+* Some modules will not be fully compatible with HTTP/2 connections. mod_logio, for example, will not properly report the accumulated traffic per connection as requests are handled in sub-connecition and that data is never aggregated.
+
+##TODO
+* Thanks to the excellent nghttp2, the module currently supports stream priority
+handling, but nghttp2 offers at the moment (v0.7.15) no way to use the prio
+information for request scheduling.
+* mpm_event: supported by a hack atm. Needs an official patch with an Optional
+function
+* http trailers are not implemented
+* mod_h2 removes reqtimeout input filter for its connection. 
+  
+
+##Licensing
+Please see the file called LICENSE.
+
+
+##Credits
+This work has been funded by the GSM Association (http://gsma.com). The module
+itself was heavily influenced by mod_spdy, the Google implementation of their
+SPDY protocol. And without Tatsuhiro Tsujikawa excellent nghttp2 work, this
+would not have been possible.
+
+
+Münster, 20.05.2015,
+
+Stefan Eissing, greenbytes GmbH

Added: httpd/httpd/trunk/modules/http2/configure.ac
URL: http://svn.apache.org/viewvc/httpd/httpd/trunk/modules/http2/configure.ac?rev=1688474&view=auto
==============================================================================
--- httpd/httpd/trunk/modules/http2/configure.ac (added)
+++ httpd/httpd/trunk/modules/http2/configure.ac Tue Jun 30 15:26:16 2015
@@ -0,0 +1,211 @@
+# Copyright 2015 greenbytes GmbH (https://www.greenbytes.de)
+#
+# Licensed 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.
+#
+
+AC_PREREQ([2.69])
+AC_INIT([mod_h2], [0.7.3], [stefan.eissing@greenbytes.de])
+
+LT_PREREQ([2.2.6])
+LT_INIT()
+dnl See versioning rule:
+dnl  http://www.gnu.org/software/libtool/manual/html_node/Updating-version-info.html
+AC_SUBST(LT_CURRENT, 11)
+AC_SUBST(LT_REVISION, 0)
+AC_SUBST(LT_AGE, 6)
+
+major=`echo $PACKAGE_VERSION |cut -d. -f1 | sed -e "s/[^0-9]//g"`
+minor=`echo $PACKAGE_VERSION |cut -d. -f2 | sed -e "s/[^0-9]//g"`
+patch=`echo $PACKAGE_VERSION |cut -d. -f3 | cut -d- -f1 | sed -e "s/[^0-9]//g"`
+
+PACKAGE_VERSION_NUM=`printf "0x%02x%02x%02x" "$major" "$minor" "$patch"`
+
+AC_SUBST(PACKAGE_VERSION_NUM)
+
+AC_CANONICAL_BUILD
+AC_CANONICAL_HOST
+AC_CANONICAL_TARGET
+
+AC_CONFIG_MACRO_DIR([m4])
+
+AM_INIT_AUTOMAKE([subdir-objects no-define])
+
+m4_ifdef([AM_SILENT_RULES], [AM_SILENT_RULES([yes])])
+
+AC_CONFIG_SRCDIR([mod_h2/h2_config.c])
+AC_CONFIG_HEADERS([mod_h2/config.h])
+
+AC_ARG_ENABLE([werror],
+    [AS_HELP_STRING([--enable-werror],
+                    [Turn on compile time warnings])],
+    [werror=$enableval], [werror=no])
+
+AC_ARG_ENABLE([sandbox], [AS_HELP_STRING([--enable-sandbox],
+    [Build a sandbox installation [default=no]])],
+    [case "${enableval}" in
+        yes) build_mode=sandbox ;;
+        no)  build_mode=extern ;;
+        *) AC_MSG_ERROR([bad value ${enableval} for --enable-sandbox]) ;;
+    esac],
+    [build_mode=extern])
+
+AC_ARG_WITH([apxs], [AS_HELP_STRING([--with-apxs],
+    [Use APXS executable [default=check]])],
+    [request_apxs=$withval], [request_apxs=check])
+
+
+# Checks for programs.
+AC_PROG_CC
+AC_PROG_CC_STDC
+
+if test "x$werror" != "xno"; then
+    AX_CHECK_COMPILE_FLAG([-Wall], [CFLAGS="$CFLAGS -Wall"])
+    AX_CHECK_COMPILE_FLAG([-Wextra], [CFLAGS="$CFLAGS -Wextra"])
+    AX_CHECK_COMPILE_FLAG([-Werror], [CFLAGS="$CFLAGS -Werror"])
+    AX_CHECK_COMPILE_FLAG([-Wmissing-prototypes], [CFLAGS="$CFLAGS -Wmissing-prototypes"])
+    AX_CHECK_COMPILE_FLAG([-Wstrict-prototypes], [CFLAGS="$CFLAGS -Wstrict-prototypes"])
+    AX_CHECK_COMPILE_FLAG([-Wmissing-declarations], [CFLAGS="$CFLAGS -Wmissing-declarations"])
+    AX_CHECK_COMPILE_FLAG([-Wpointer-arith], [CFLAGS="$CFLAGS -Wpointer-arith"])
+    # we like to use such things...
+    #AX_CHECK_COMPILE_FLAG([-Wdeclaration-after-statement], [CFLAGS="$CFLAGS -Wdeclaration-after-statement"])
+    AX_CHECK_COMPILE_FLAG([-Wformat-security], [CFLAGS="$CFLAGS -Wformat-security"])
+    AX_CHECK_COMPILE_FLAG([-Wwrite-strings], [CFLAGS="$CFLAGS -Wwrite-strings"])
+    AX_CHECK_COMPILE_FLAG([-Wshadow], [CFLAGS="$CFLAGS -Wshadow"])
+    AX_CHECK_COMPILE_FLAG([-Winline], [CFLAGS="$CFLAGS -Winline"])
+    AX_CHECK_COMPILE_FLAG([-Wnested-externs], [CFLAGS="$CFLAGS -Wnested-externs"])
+    AX_CHECK_COMPILE_FLAG([-Wfloat-equal], [CFLAGS="$CFLAGS -Wfloat-equal"])
+    AX_CHECK_COMPILE_FLAG([-Wundef], [CFLAGS="$CFLAGS -Wundef"])
+    AX_CHECK_COMPILE_FLAG([-Wendif-labels], [CFLAGS="$CFLAGS -Wendif-labels"])
+    AX_CHECK_COMPILE_FLAG([-Wempty-body], [CFLAGS="$CFLAGS -Wempty-body"])
+# does not make sense with APR as it prefers char* to void*
+#    AX_CHECK_COMPILE_FLAG([-Wcast-align], [CFLAGS="$CFLAGS -Wcast-align"])
+    AX_CHECK_COMPILE_FLAG([-Wclobbered], [CFLAGS="$CFLAGS -Wclobbered"])
+    AX_CHECK_COMPILE_FLAG([-Wvla], [CFLAGS="$CFLAGS -Wvla"])
+    AX_CHECK_COMPILE_FLAG([-Wpragmas], [CFLAGS="$CFLAGS -Wpragmas"])
+    AX_CHECK_COMPILE_FLAG([-Wunreachable-code], [CFLAGS="$CFLAGS -Wunreachable-code"])
+    AX_CHECK_COMPILE_FLAG([-Waddress], [CFLAGS="$CFLAGS -Waddress"])
+    AX_CHECK_COMPILE_FLAG([-Wattributes], [CFLAGS="$CFLAGS -Wattributes"])
+    AX_CHECK_COMPILE_FLAG([-Wdiv-by-zero], [CFLAGS="$CFLAGS -Wdiv-by-zero"])
+    AX_CHECK_COMPILE_FLAG([-Wshorten-64-to-32], [CFLAGS="$CFLAGS -Wshorten-64-to-32"])
+fi
+
+
+AC_MSG_NOTICE("configuring for $build_mode build")
+
+if test x"$build_mode" = "xsandbox"; then
+    if test x"$request_apxs" != "xcheck"; then
+        AC_MSG_ERROR([when sandbox mode is enabled, specifying apxs is not allowed])
+    fi
+
+    # easy, we know where everything will be
+    #
+    export BUILD_SUBDIRS="sandbox mod_h2"
+
+    prefix="$PWD/sandbox/install"
+    APXS="$prefix/bin/apxs"
+    LDFLAGS="$LDFLAGS -L${prefix}/lib"
+    LIBS="$LIBS -lnghttp2"
+    CPPFLAGS="$CPPFLAGS -I${prefix}/include"
+    export SYSCONF_DIR="$prefix/conf"
+    export LIBEXEC_DIR="$prefix/modules"
+    # On Ubuntu, we have a propblem with APR 1.5.1 and system includes that
+    # causes compilation to abort since no definition of PATH_MAX can be found.
+    # In sandbox build, we just define it therefore, as a quick workaround
+    CPPFLAGS="$CPPFLAGS -DPATH_MAX=4096"
+
+    # we use a new nghttp2 in the sandbox which has these features
+    NGHTTP2_HAS_DATA_CB=1
+
+else
+    # production, we need to find where the apxs is. which then
+    # can tell us the various directories we need.
+    #
+    if test x"$request_apxs" = "xcheck"; then
+        AC_PATH_PROG([APXS], [apxs])
+        if test "x${APXS}" = "x"; then
+            AC_MSG_ERROR("no APXS installation found")
+        fi
+    else
+        APXS="$request_apxs"
+        AC_MSG_NOTICE("using APXS=$APXS as configured")
+    fi
+
+    export BUILD_SUBDIRS="mod_h2 setup"
+
+    prefix="$($APXS -q prefix)"
+    LDFLAGS="$LDFLAGS -L$($APXS -q libdir)"
+    CPPFLAGS="$CPPFLAGS -I$($APXS -q includedir) -I$($APXS -q APR_INCLUDEDIR)"
+    export SYSCONF_DIR="$($APXS -q sysconfdir)"
+    export LIBEXEC_DIR="$($APXS -q LIBEXECDIR)"
+
+    # We need nghttp2 to be in our link path, check for it.
+    #
+    AC_CHECK_LIB([nghttp2], [nghttp2_session_server_new2], ,
+    [AC_MSG_ERROR("library nghttp2 not found")])
+
+    AC_CHECK_LIB([nghttp2], [nghttp2_session_callbacks_set_send_data_callback], 
+        [NGHTTP2_HAS_DATA_CB=1], [NGHTTP2_HAS_DATA_CB=0])
+
+fi
+
+# Checks for header files.
+AC_CHECK_HEADERS([ \
+    assert.h \
+    stddef.h \
+])
+
+# Checks for typedefs, structures, and compiler characteristics.
+AC_TYPE_INT32_T
+AC_TYPE_SIZE_T
+AC_TYPE_SSIZE_T
+AC_TYPE_UINT32_T
+AC_TYPE_UINT8_T
+
+# Checks for library functions.
+AC_CHECK_FUNCS([memmove memset strcasecmp strchr])
+
+AC_CHECK_PROG([A2ENMOD],[a2enmod])
+
+# substitution in generated files
+AC_SUBST(BUILD_SUBDIRS)
+AC_SUBST(SYSCONF_DIR)
+AC_SUBST(LIBEXEC_DIR)
+AC_SUBST(NGHTTP2_HAS_DATA_CB)
+
+AC_CONFIG_FILES([
+    Makefile
+    mod_h2/Makefile
+    mod_h2/h2_version.h
+    sandbox/Makefile 
+    setup/Makefile
+])
+
+AC_OUTPUT
+
+AC_MSG_NOTICE([summary of build options:
+
+    Version:        ${VERSION} shared $LT_CURRENT:$LT_REVISION:$LT_AGE
+    Host type:      ${host}
+    Build Type:     ${build_mode}
+    Install prefix: ${prefix}
+    APXS:           ${APXS}
+    C compiler:     ${CC}
+    CFLAGS:         ${CFLAGS}
+    WARNCFLAGS:     ${WARNCFLAGS}
+    LDFLAGS:        ${LDFLAGS}
+    LIBS:           ${LIBS}
+    CPPFLAGS:       ${CPPFLAGS}
+    C preprocessor: ${CPP}
+    BUILD_SUBDIRS   ${BUILD_SUBDIRS}
+    a2enmod         ${A2ENMOD:--}
+])

Added: httpd/httpd/trunk/modules/http2/m4/ax_check_compile_flag.m4
URL: http://svn.apache.org/viewvc/httpd/httpd/trunk/modules/http2/m4/ax_check_compile_flag.m4?rev=1688474&view=auto
==============================================================================
--- httpd/httpd/trunk/modules/http2/m4/ax_check_compile_flag.m4 (added)
+++ httpd/httpd/trunk/modules/http2/m4/ax_check_compile_flag.m4 Tue Jun 30 15:26:16 2015
@@ -0,0 +1,74 @@
+# ===========================================================================
+#   http://www.gnu.org/software/autoconf-archive/ax_check_compile_flag.html
+# ===========================================================================
+#
+# SYNOPSIS
+#
+#   AX_CHECK_COMPILE_FLAG(FLAG, [ACTION-SUCCESS], [ACTION-FAILURE], [EXTRA-FLAGS], [INPUT])
+#
+# DESCRIPTION
+#
+#   Check whether the given FLAG works with the current language's compiler
+#   or gives an error.  (Warnings, however, are ignored)
+#
+#   ACTION-SUCCESS/ACTION-FAILURE are shell commands to execute on
+#   success/failure.
+#
+#   If EXTRA-FLAGS is defined, it is added to the current language's default
+#   flags (e.g. CFLAGS) when the check is done.  The check is thus made with
+#   the flags: "CFLAGS EXTRA-FLAGS FLAG".  This can for example be used to
+#   force the compiler to issue an error when a bad flag is given.
+#
+#   INPUT gives an alternative input source to AC_COMPILE_IFELSE.
+#
+#   NOTE: Implementation based on AX_CFLAGS_GCC_OPTION. Please keep this
+#   macro in sync with AX_CHECK_{PREPROC,LINK}_FLAG.
+#
+# LICENSE
+#
+#   Copyright (c) 2008 Guido U. Draheim <gu...@gmx.de>
+#   Copyright (c) 2011 Maarten Bosmans <mk...@gmail.com>
+#
+#   This program is free software: you can redistribute it and/or modify it
+#   under the terms of the GNU General Public License as published by the
+#   Free Software Foundation, either version 3 of the License, or (at your
+#   option) any later version.
+#
+#   This program is distributed in the hope that it will be useful, but
+#   WITHOUT ANY WARRANTY; without even the implied warranty of
+#   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General
+#   Public License for more details.
+#
+#   You should have received a copy of the GNU General Public License along
+#   with this program. If not, see <http://www.gnu.org/licenses/>.
+#
+#   As a special exception, the respective Autoconf Macro's copyright owner
+#   gives unlimited permission to copy, distribute and modify the configure
+#   scripts that are the output of Autoconf when processing the Macro. You
+#   need not follow the terms of the GNU General Public License when using
+#   or distributing such scripts, even though portions of the text of the
+#   Macro appear in them. The GNU General Public License (GPL) does govern
+#   all other use of the material that constitutes the Autoconf Macro.
+#
+#   This special exception to the GPL applies to versions of the Autoconf
+#   Macro released by the Autoconf Archive. When you make and distribute a
+#   modified version of the Autoconf Macro, you may extend this special
+#   exception to the GPL to apply to your modified version as well.
+
+#serial 3
+
+AC_DEFUN([AX_CHECK_COMPILE_FLAG],
+[AC_PREREQ(2.59)dnl for _AC_LANG_PREFIX
+AS_VAR_PUSHDEF([CACHEVAR],[ax_cv_check_[]_AC_LANG_ABBREV[]flags_$4_$1])dnl
+AC_CACHE_CHECK([whether _AC_LANG compiler accepts $1], CACHEVAR, [
+  ax_check_save_flags=$[]_AC_LANG_PREFIX[]FLAGS
+  _AC_LANG_PREFIX[]FLAGS="$[]_AC_LANG_PREFIX[]FLAGS $4 $1"
+  AC_COMPILE_IFELSE([m4_default([$5],[AC_LANG_PROGRAM()])],
+    [AS_VAR_SET(CACHEVAR,[yes])],
+    [AS_VAR_SET(CACHEVAR,[no])])
+  _AC_LANG_PREFIX[]FLAGS=$ax_check_save_flags])
+AS_IF([test x"AS_VAR_GET(CACHEVAR)" = xyes],
+  [m4_default([$2], :)],
+  [m4_default([$3], :)])
+AS_VAR_POPDEF([CACHEVAR])dnl
+])dnl AX_CHECK_COMPILE_FLAGS

Added: httpd/httpd/trunk/modules/http2/m4/h2.m4
URL: http://svn.apache.org/viewvc/httpd/httpd/trunk/modules/http2/m4/h2.m4?rev=1688474&view=auto
==============================================================================
--- httpd/httpd/trunk/modules/http2/m4/h2.m4 (added)
+++ httpd/httpd/trunk/modules/http2/m4/h2.m4 Tue Jun 30 15:26:16 2015
@@ -0,0 +1 @@
+# just so it is not empty