In common.h, define func_lib for function objects.  In configure.ac, define HAVE_STD_FUNCTION and HAVE_BOOST_FUNCTION.  Include function headers in ndnboost.
diff --git a/libs/function/doc/history.xml b/libs/function/doc/history.xml
new file mode 100644
index 0000000..97f13e2
--- /dev/null
+++ b/libs/function/doc/history.xml
@@ -0,0 +1,146 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+   Copyright (c) 2002 Douglas Gregor <doug.gregor -at- gmail.com>
+  
+   Distributed under the Boost Software License, Version 1.0.
+   (See accompanying file LICENSE_1_0.txt or copy at
+   http://www.boost.org/LICENSE_1_0.txt)
+  -->
+<!DOCTYPE library PUBLIC "-//Boost//DTD BoostBook XML V1.0//EN"
+  "http://www.boost.org/tools/boostbook/dtd/boostbook.dtd">
+<section id="function.history" last-revision="$Date: 2013-06-15 00:06:26 -0700 (Sat, 15 Jun 2013) $">
+  <title>History &amp; Compatibility Notes</title>
+
+<itemizedlist spacing="compact">
+
+  <listitem><para><bold>Version 1.52.0</bold>: </para>
+    <itemizedlist spacing="compact">
+      <listitem><para>Move constructors and move assignment 
+      operators added (only for compilers with C++11 rvalue 
+      references support). Original patch
+      contributed by Antony Polukhin.</para></listitem>
+    </itemizedlist>
+  </listitem>
+
+  <listitem><para><bold>Version 1.37.0</bold>: </para>
+    <itemizedlist spacing="compact">
+      <listitem><para>Improved the performance of Boost.Function's
+      swap() operation for large function objects. Original patch
+      contributed by Niels Dekker.</para></listitem>
+
+      <listitem><para>Added a new header &lt;boost/function/function_typeof.hpp&gt; that provides support for using the Boost.Typeof library on Boost.Function objects.</para></listitem>
+
+      <listitem><para>Added a new header &lt;boost/function/function_fwd.hpp&gt; that provides support for using the Boost.Typeof library on Boost.Function objects.</para></listitem>
+
+      <listitem><para>The <methodname alt="boost::function::target">target</methodname>()
+      function now respects the cv-qualifiers of function objects
+      stored by reference
+      (using <classname>boost::reference_wrapper</classname>), such
+      that a reference to a <code>const</code> function object cannot
+      be accessed as a reference to a non-<code>const</code> function
+      object.</para></listitem>
+    </itemizedlist>
+  </listitem>
+
+  <listitem><para><bold>Version 1.36.0</bold>: </para>
+    <itemizedlist spacing="compact">
+      <listitem><para>Boost.Function now implements allocator support
+      in the same way that is is provided in C++0x, based on C++
+      committee
+      proposal <ulink url="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2308.html">N2308</ulink>. This
+      change removes the <computeroutput>Allocator</computeroutput>
+      template parameter of <classname>boost::function</classname> in
+      favor of a constructor that takes an argument. While this is a
+      backward-incompatible change, it is likely to affect only a few
+      users. This change to Function was contributed by Emil
+      Dotchevski, which also authored the corresponding C++ committee
+      proposal.</para></listitem>
+    </itemizedlist>
+  </listitem>
+
+  <listitem><para><bold>Version 1.34.0</bold>: </para> 
+    <itemizedlist spacing="compact">
+      <listitem><para>Boost.Function now implements a small buffer optimization, which can drastically improve the performance when copying or construction Boost.Function objects storing small function objects. For instance, <code>bind(&amp;X:foo, &amp;x, _1, _2)</code> requires no heap allocation when placed into a Boost.Function object. Note that some exception-safety guarantees have changed: assignment provides the basic exception guarantee and <code>swap()</code> may throw.</para></listitem>
+    </itemizedlist>
+  </listitem>
+
+  <listitem><para><bold>Version 1.30.0</bold>: </para> 
+    <itemizedlist spacing="compact">
+      <listitem><para>All features deprecated in version 1.29.0 have
+      been removed from Boost.Function.</para></listitem>
+ 
+      <listitem><para><code><classname>boost::function</classname></code>
+      and <code><classname>boost::functionN</classname></code> objects
+      can be assigned to 0 (semantically equivalent to calling
+      <code><methodname
+      alt="boost::function::clear">clear</methodname>()</code>) and
+      compared against 0 (semantically equivalent to calling
+      <code><methodname
+      alt="boost::function::empty">empty</methodname>()</code>).</para></listitem>
+
+      <listitem><para>The Boost.Function code is now generated
+      entirely by the <libraryname>Preprocessor</libraryname> library,
+      so it is now possible to generate
+      <code><classname>boost::function</classname></code> and
+      <code><classname>boost::functionN</classname></code> class
+      templates for any number of arguments.</para></listitem>
+
+      <listitem><para>The
+      <classname>boost::bad_function_call</classname> exception class
+      was introduced.</para></listitem>
+      </itemizedlist>
+  </listitem>
+
+  <listitem><para><bold>Version 1.29.0</bold>:
+  Boost.Function has been partially redesigned to minimize the
+  interface and make it cleaner. Several seldom- or never-used
+  features of the older Boost.Function have been deprecated and will
+  be removed in the near future. Here is a list of features that have
+  been deprecated, the likely impact of the deprecations, and how to
+  adjust your code:
+
+<itemizedlist spacing="compact">
+  <listitem><para>The <computeroutput>boost::function</computeroutput> class template syntax has
+  changed. The old syntax, e.g., <computeroutput>boost::function&lt;int, float,
+  double, std::string&gt;</computeroutput>, has been changed to a more natural
+  syntax <computeroutput>boost::function&lt;int (float, double,
+  std::string)&gt;</computeroutput>, where all return and argument types are
+  encoded in a single function type parameter. Any other template
+  parameters (e.g., the <computeroutput>Allocator</computeroutput>) follow this single
+  parameter.</para>
+
+  <para> The resolution to this change depends on the
+  abilities of your compiler: if your compiler supports template
+  partial specialization and can parse function types (most do), modify 
+  your code to use the newer
+  syntax (preferable) or directly use one of the
+  <computeroutput>functionN</computeroutput> classes whose syntax has not
+  changed. If your compiler does not support template partial
+  specialization or function types, you must take the latter option and 
+  use the numbered Boost.Function classes. This option merely requires 
+  changing types such as <computeroutput>boost::function&lt;void, int, int&gt;</computeroutput>
+  to <computeroutput>boost::function2&lt;void, int, int&gt;</computeroutput> (adding the number of
+  function arguments to the end of the class name).</para>
+
+  <para> Support for the old syntax with the
+  <computeroutput>boost::function</computeroutput> class template will persist for a short
+  while, but will eventually be removed so that we can provide better
+  error messages and link compatibility. </para></listitem> 
+
+  <listitem><para>The invocation
+  policy template parameter (<computeroutput>Policy</computeroutput>) has been deprecated
+  and will be removed. There is no direct equivalent to this rarely
+  used feature.</para></listitem> 
+
+  <listitem><para>The mixin template parameter
+  (<computeroutput>Mixin</computeroutput>) has been deprecated and will be removed. There
+  is not direct equivalent to this rarely used feature.</para></listitem> 
+
+  <listitem><para>The
+  <computeroutput>set</computeroutput> methods have been deprecated and will be
+  removed. Use the assignment operator instead.</para></listitem>
+</itemizedlist>
+</para>
+</listitem>
+</itemizedlist>
+</section>