
Variables
---------

The Travis scripts use the following environment variables:

* APR_VERSION - if set, APR of this version is built and installed in
  $HOME/root/apr-$APR_VERSION - a value of "trunk" means trunk is
  used, "*.x" means a branch, otherwise a tagged version is implied.

* APR_CONFIG - arguments to pass when running APR's configure script
  if APR_VERSION is set

* APU_VERSION - if set, APR-util of this version is built and
  installed in $HOME/root/apr-util-$APU_VERSION - a value of "*.x"
  means a branch, otherwise a tagged version is implied.  (Since there
  is no "trunk" for apr-util, that value cannot be used here.)

* APU_CONFIG - arguments to pass when running APR-util's configure
  script if APU_VERSION is set

* CONFIG - arguments to pass to httpd's configure script.

* BUILDCONFIG - arguments to pass when running httpd's ./buildconf script

* MFLAGS - arguments to pass when running "make" for httpd.

* SKIP_TESTING - if set, the Perl test framework is not run for the
  build.

* TEST_UBSAN - set for builds using UBSan ("Undefined Behaviour Sanitizer")

* TEST_MALLOC - set for builds using enhanced malloc debugging.

* TEST_LDAP - set for builds with slapd running

* TESTS - a list of Perl framework tests to run

* TEST_ARGS - arguments to pass to ./t/TEST in the Perl test framework

Caching
-------

Perl modules installed in $HOME/perl5 are cached.

Anything installed into the $HOME/root directory is cached - notably,
versions of APR/APR-util are installed here and cached across httpd
build jobs without needing to be rebuilt every time.

TODO list
---------

* MacOS build
* Windows build
* clang-on-Linux build
* Use containers for non-Ubuntu-based Linux testing
* VPATH builds
* sanity checks for use of APLOGNO() - empty arguments, accidental duplicates, etc.
 - not sure how exactly
* Known test failures
 - "apt-get install" timeout/fails - workaround by moving apt install to before_script phase?
 - t/apache/rwrite.t, t/apache/pass_brigade.t
   see msg <CAKQ1sVMbDcUouu+_bfp8T5HO5+=ORWhLx361+b4qyLux5xyhwA@mail.gmail.com> etc

Testing from a Feature Branch
-----------------------------

An SVN branch off trunk should be mirrored to github, and will be
tested in the same way that trunk is in Travis, so this workflow is
available for those familiar with using Subversion and the standard
ASF/httpd repository layout.

Tested branches are listed at: https://travis-ci.org/apache/httpd/branches

Travis will also run the tests for a PR filed against the httpd Github
repository at https://github.com/apache/httpd or from a fork of this
repository if enabled for the Travis user.

A workflow to enable testing would be as follows, substituting
$USERNAME for your github username:

  $ git clone https://github.com/apache/httpd
  $ cd httpd
  $ git remote add $USERNAME git@github.com:$USERNAME/httpd.git
  $ git checkout -b my-feature origin/trunk
  ... do some work ...
  $ git commit ...
  $ git push -u $USERNAME my-feature:my-feature

To enable testing for a fork, visit the settings page at
https://travis-ci.org/$USERNAME/httpd/settings - you may need to sync
your account via https://travis-ci.org/account/repositories for a
freshly created fork.

To create a Pull Request, go to a URL like:
https://github.com/apache/httpd/compare/trunk...$USERNAME:trunk

Once a PR has been created, travis will run the tests and link the
results from a PR comment. All tested PRs are listed here:
https://travis-ci.org/apache/httpd/pull_requests

To merge from github back to SVN trunk, create a patch from e.g.:

  $ git diff origin/trunk..my-feature

and then apply it in SVN.  To rebase a feature once trunk has
diverged, from a feature branch run:

  $ git pull
  $ git rebase -i origin/trunk

and follow the standard rebase steps.
