=======================================================
Capturing configuration information during installation
=======================================================

.. contents::
   :local:

The Problem
===========

Currently the libc++ supports building the library with a number of different
configuration options.  Unfortunately all of that configuration information is
lost when libc++ is installed. In order to support "persistent"
configurations libc++ needs a mechanism to capture the configuration options
in the INSTALLED headers.


Design Goals
============

* The solution should not INSTALL any additional headers. We don't want an extra
  #include slowing everybody down.

* The solution should not unduly affect libc++ developers. The problem is limited
  to installed versions of libc++ and the solution should be as well.

* The solution should not modify any existing headers EXCEPT during installation.
  It makes developers lives harder if they have to regenerate the libc++ headers
  every time they are modified.

* The solution should not make any of the libc++ headers dependant on
  files generated by the build system. The headers should be able to compile
  out of the box without any modification.

* The solution should not have ANY effect on users who don't need special
  configuration options. The vast majority of users will never need this so it
  shouldn't cost them.


The Solution
============

When you first configure libc++ using CMake we check to see if we need to
capture any options. If we haven't been given any "persistent" options then
we do NOTHING.

Otherwise we create a custom installation rule that modifies the installed __config
header. The rule first generates a dummy "__config_site" header containing the required
#defines. The contents of the dummy header are then prependend to the installed
__config header. By manually prepending the files we avoid the cost of an
extra #include and we allow the __config header to be ignorant of the extra
 configuration all together. An example "__config" header generated when
-DLIBCXX_ENABLE_THREADS=OFF is given to CMake would look something like:

.. code-block:: cpp

  //===----------------------------------------------------------------------===//
  //
  //                     The LLVM Compiler Infrastructure
  //
  // This file is dual licensed under the MIT and the University of Illinois Open
  // Source Licenses. See LICENSE.TXT for details.
  //
  //===----------------------------------------------------------------------===//

  #ifndef _LIBCPP_CONFIG_SITE
  #define _LIBCPP_CONFIG_SITE

  /* #undef _LIBCPP_HAS_NO_GLOBAL_FILESYSTEM_NAMESPACE */
  /* #undef _LIBCPP_HAS_NO_STDIN */
  /* #undef _LIBCPP_HAS_NO_STDOUT */
  #define _LIBCPP_HAS_NO_THREADS
  /* #undef _LIBCPP_HAS_NO_MONOTONIC_CLOCK */
  /* #undef _LIBCPP_HAS_NO_THREAD_UNSAFE_C_FUNCTIONS */

  #endif
  // -*- C++ -*-
  //===--------------------------- __config ---------------------------------===//
  //
  //                     The LLVM Compiler Infrastructure
  //
  // This file is dual licensed under the MIT and the University of Illinois Open
  // Source Licenses. See LICENSE.TXT for details.
  //
  //===----------------------------------------------------------------------===//

  #ifndef _LIBCPP_CONFIG
  #define _LIBCPP_CONFIG
